← Back to team overview

sslug-teknik team mailing list archive

RE: Vrøvl med ejerskaber

 

> > Poul Anker Gensmann wrote:
> > > Jeg har ved et uheld ændret ejer og gruppe på store dele af
> > > mit filsystem.
> > > Er der ikke en der vil ridse op hvem de forskellige dirs bør
> > > tilhøre eller henvise til et sted hvor det står?
>
> > Hvis det drejer som om filer der er installeret fra RPM'er er det
muligt
> > at uddrage informationen derfra.
>
Fremgangsmåden er følgende:

1) Uddrag den nødvendige information fra RPM-databasen
   og gem oplysningerne i filen rpminfo:

     rpm -qa --queryformat '[%{=NAME}\t%{FILEMODES}\t%{FILENAMES}\n]' >
rpminfo

2) Gendan filrettighederne udfra informationerne i rpminfo.

   Dette gøres ved at føde Perl-scriptet FixPermsToMatchRPM.pl
   med rpminfo og sende output ned i en logfil:

     FixPermsToMatchRPM.pl < rpminfo > rpmfixlog

Scriptet FixPermsToMatchRPM.pl er selvfølgelig kernen i det hele.
Scriptet ser ud som følger:

------------------- FixPermsToMatchRPM.pl --------------------

#!/usr/bin/perl -w

# Script to fix permissions on files in system to match those of RPM.
# Mads Dydensborg, 20000114.

$lastpackage = "";
$count = 0;
while(<>) {
    # Split the information in fields
    chop($_);
    ($rpmpackage, $rpmperm, $rpmfile) = split(/\t/, $_);
    # Check the package name, print if neccesary
    if ($lastpackage ne $rpmpackage) {
        print "COUNT SO FAR: $count\n";
        print "PACKAGE: $rpmpackage\n";
        $lastpackage = $rpmpackage;
    }
    # Adjust the permission to rigth value
    $rpmperm = $rpmperm & 4095;
    # Check in the hash if there are conflicts.
    if (defined $rpmfileperm{$rpmfile}
        && $rpmfileperm{$rpmfile} != $rpmperm) {
        printf "WARNING: $rpmfile permission %o differs from %o\n",
        $rpmfile, $rpmfileperm{$rpmfile};
    } else {
        # hash and apply
        $rpmfileperm{$rpmfile} = $rpmperm;
        if (-e $rpmfile) {
            $res = system(sprintf("chmod %o $rpmfile", $rpmperm));
            if (0 != $res) {
                print "WARNING: chmod $rpmperm $rpmfile (returned
error)\n";
            }
        } else {
            print "NOT PRESENT: $rpmfile does not exist\n";
        }
    }
    $count++;
}

------------------- FixPermsToMatchRPM.pl ----------------END-

/Martin
____________________________________
Systemadministrator - skydebanen.net
E-post: sysadm@xxxxxxxxxxxxxx
Web: http://www.skydebanen.net



References