Changeset 278 for trunk/dasscm


Ignore:
Timestamp:
Mar 6, 2009, 10:38:05 PM (16 years ago)
Author:
joergs
Message:

login + status, status + permission. Handle Unknown (unreadable) files. BUGFIX: uid and gid numbers, if no names are available

Location:
trunk/dasscm
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/dasscm/dasscm

    r277 r278  
    358358            my $mode = get_type( $info->mode ) & 07777;
    359359            my $modestring = sprintf( "%04o", $mode );
    360             my $uid        = $info->uid;
    361             my $uidname    = getpwuid($uid);
    362             my $gid        = $info->gid;
    363             my $gidname    = getgrgid($gid);
     360            my $uidnumber  = $info->uid;
     361            my $uid        = getpwuid($uidnumber) || $uidnumber;
     362            my $gidnumber  = $info->gid;
     363            my $gid        = getgrgid($gidnumber) || $gidnumber;
    364364            push(
    365365                @permlist,
    366366                sprintf( "%-55s %-17s %4d",
    367                     $file, "${uidname}:${gidname}", $modestring )
     367                    $file, "${uid}:${gid}", $modestring )
    368368            );
    369369        } else {
     
    597597    my %removedfiles = ();
    598598    my %changedfiles = ();
     599    my %unknownfiles = ();
    599600
    600601    # create list of modified files
     
    607608
    608609            if ( -d $realfile ) {
    609                 ## directory. do nothing
     610                # directory
     611                if( !-d "$cvsworkfile" ) {
     612                    # real is directory, repository is not. This is a problem
     613                    $changedfiles{"$realfile"} = $cvsworkfile;
     614                }
     615            } elsif ( !-e $realfile ) {
     616                $removedfiles{"$realfile"} = $cvsworkfile;
    610617            } elsif ( !-r $realfile ) {
    611                 $removedfiles{"$realfile"} = $cvsworkfile;
     618                # don't have permission to read the file,
     619                # can't check it
     620                $unknownfiles{"$realfile"} = $cvsworkfile;
    612621            } else {
    613622                ( -r "$cvsworkfile" )
    614                   || die("Fehler: $cvsworkfile ist nicht lesbar");
     623                  || fatalerror("failed to read $cvsworkfile");
    615624                if ( compare( $cvsworkfile, $realfile ) != 0 ) {
    616625                    $changedfiles{"$realfile"} = $cvsworkfile;
     
    620629    }
    621630
    622     return ( \%changedfiles, \%removedfiles );
     631    return ( \%changedfiles, \%removedfiles, \%unknownfiles );
    623632}
    624633
     
    732741      "DASSCM_PASSWORD:   (hidden)\n", "DASSCM_PROD:       $DASSCM_PROD\n",
    733742      "DASSCM_REPO:       $DASSCM_REPO\n",
    734       "Server Repository: $DASSCM_SVN_REPOSITORY\n", "\n", "[dasscm shell]\n\n";
    735 
     743      "Server Repository: $DASSCM_SVN_REPOSITORY\n", "\n";
     744
     745    status();
     746
     747    print "\n[dasscm shell]\n\n";
    736748    my $shell = $SHELL || "bash";
    737749    exec($shell) or die "failed to start new shell";
     
    10191031    # update local repository
    10201032    #
    1021     svn_update( $filename_prod );
    1022 
    1023     ( my $refChangedFiles, my $refRemovedFiles ) =
     1033    #svn_update( $filename_prod );
     1034
     1035    # check, if permissions have changed
     1036    permissions();
     1037
     1038    # get modified files
     1039    ( my $refChangedFiles, my $refRemovedFiles, my $refUnknownFiles ) =
    10241040      getModifiedFiles($dirname_prod);
    10251041    my %changedfiles = %{$refChangedFiles};
    10261042    my %removedfiles = %{$refRemovedFiles};
    1027 
    1028     if ( %removedfiles or %changedfiles ) {
     1043    my %unknownfiles = %{$refUnknownFiles};
     1044
     1045    if ( %removedfiles or %changedfiles or %unknownfiles ) {
     1046
    10291047        if (%removedfiles) {
    1030             print "deleted files (found in repository, but not in system):\n";
    1031             foreach my $key ( keys %removedfiles ) {
    1032                 print "$key\n";
    1033             }
    1034             print "\n";
     1048            print "DELETED: files found in repository, but not in system:\n";
     1049            print join( "\n", ( keys %removedfiles ) ) . "\n\n";
    10351050        }
    10361051
    10371052        if (%changedfiles) {
    1038             print "modified files:\n";
    1039             foreach my $key ( keys %changedfiles ) {
    1040                 print "$key\n";
    1041             }
    1042         }
     1053            print "MODIFIED: files differs between repository and system:\n";
     1054            print join( "\n", ( keys %changedfiles ) ) . "\n\n";
     1055        }
     1056
     1057        if (%unknownfiles) {
     1058            print "UNKNOWN: insufficient permission to check files:\n";
     1059            print join( "\n", ( keys %unknownfiles ) ) . "\n\n";
     1060        }
     1061
    10431062    } else {
    10441063        print "no modified files found in $dirname_repo\n";
     
    10571076
    10581077    # return code for the shell
    1059     # default: error
    10601078    my $return_code = $RETURN_OK;
    10611079    my $return_string = "OK: no modified files";
    10621080
    1063     ( my $refChangedFiles, my $refRemovedFiles ) =
     1081    # check, if permissions have changed
     1082    permissions();
     1083
     1084    # get modified files
     1085    ( my $refChangedFiles, my $refRemovedFiles, my $refUnknownFiles ) =
    10641086      getModifiedFiles( "/" );
    10651087    my %changedfiles = %{$refChangedFiles};
    10661088    my %removedfiles = %{$refRemovedFiles};
     1089    my %unknownfiles = %{$refUnknownFiles};
    10671090
    10681091    if ( %removedfiles or %changedfiles ) {
     
    10741097            $return_string .= "removed: " . join( ", ", ( keys %removedfiles ) ) . ". ";
    10751098        }
     1099        if (%unknownfiles) {
     1100            $return_string .= "unknown: " . join( ", ", ( keys %unknownfiles ) ) . ". ";
     1101        }
    10761102        $return_code = $RETURN_WARN;
    10771103    }
     
    10891115{
    10901116    check_env();
     1117
     1118    my $return_code = $RETURN_OK;
    10911119
    10921120    #
     
    11081136
    11091137            # Verzeichnis existiert => schreiben
    1110             print "storing permissions in file $permissions_file\n";
    11111138            open( OUTFILE, ">$permissions_file" )
    11121139              || die("failed to write to $permissions_file: $!");
     
    11181145        } else {
    11191146
    1120             # Pfad für Sicherungsdatei existiert nicht => schreiben auf stdout
    1121             # Alias Filehandle für stdout erzeugen
    1122             *OUTFILE = *STDOUT;
    1123         }
     1147            if( $command eq "permission" ) {
     1148                # Pfad für Sicherungsdatei existiert nicht => schreiben auf stdout
     1149                # Alias Filehandle für stdout erzeugen
     1150                $return_code = $RETURN_WARN;
     1151                *OUTFILE = *STDOUT;
     1152            } else {
     1153                # TODO: improve this. Check for diff?
     1154                $return_code = $RETURN_CRIT;
     1155                return $return_code;
     1156            }
     1157        }
     1158
    11241159        foreach my $line (@permissions) {
    11251160            print OUTFILE "$line\n";
     
    11301165        }
    11311166    }
     1167
     1168    return $return_code;
    11321169}
    11331170
     
    12301267    } elsif (m/^permissions$/i) {
    12311268        $command = "permissions";
    1232         permissions();
     1269        $return_code = permissions();
    12331270    } elsif (m/^cleanup$/i) {
    12341271        $command = "cleanup";
  • trunk/dasscm/dasscm.spec

    r272 r278  
    6262rm -rf $RPM_BUILD_ROOT
    6363
    64 
     64# TODO: Gruppe dasscm: 4199
    6565
    6666%files
     
    6868%dir /var/lib/dasscm/
    6969/usr/bin/dasscm
    70 %config(noreplace) /etc/dasscm.conf
     70%attr(root,4199) %config(noreplace) /etc/dasscm.conf
    7171%doc Changes doc/* subversion-servers.dass-it
Note: See TracChangeset for help on using the changeset viewer.