Diff for /loncom/build/Attic/parse.pl between versions 1.23 and 1.29

version 1.23, 2001/01/13 17:58:43 version 1.29, 2001/02/27 14:18:46
Line 152  elsif ($mode eq "BinaryRoot") { Line 152  elsif ($mode eq "BinaryRoot") {
     open OUT,">BinaryRoot/etc/passwd";      open OUT,">BinaryRoot/etc/passwd";
     print OUT<<END;      print OUT<<END;
 root::0:0:root:/root:/bin/bash  root::0:0:root:/root:/bin/bash
 bin:*:1:1:bin:/bin:  bin:!!:1:1:bin:/bin:
 daemon:*:2:2:daemon:/sbin:  daemon:!!:2:2:daemon:/sbin:
 adm:*:3:4:adm:/var/adm:  adm:!!:3:4:adm:/var/adm:
 lp:*:4:7:lp:/var/spool/lpd:  lp:!!:4:7:lp:/var/spool/lpd:
 sync:*:5:0:sync:/sbin:/bin/sync  sync:!!:5:0:sync:/sbin:/bin/sync
 shutdown:*:6:0:shutdown:/sbin:/sbin/shutdown  shutdown:!!:6:0:shutdown:/sbin:/sbin/shutdown
 halt:*:7:0:halt:/sbin:/sbin/halt  halt:!!:7:0:halt:/sbin:/sbin/halt
 mail:*:8:12:mail:/var/spool/mail:  mail:!!:8:12:mail:/var/spool/mail:
 news:*:9:13:news:/var/spool/news:  news:!!:9:13:news:/var/spool/news:
 uucp:*:10:14:uucp:/var/spool/uucp:  uucp:!!:10:14:uucp:/var/spool/uucp:
 operator:*:11:0:operator:/root:  operator:!!:11:0:operator:/root:
 games:*:12:100:games:/usr/games:  games:!!:12:100:games:/usr/games:
 gopher:*:13:30:gopher:/usr/lib/gopher-data:  gopher:!!:13:30:gopher:/usr/lib/gopher-data:
 ftp:*:14:50:FTP User:/home/ftp:  ftp:!!:14:50:FTP User:/home/ftp:
 nobody:*:99:99:Nobody:/:  nobody:!!:99:99:Nobody:/:
 www:x:500:500:www:/home/www:/bin/bash  www:!!:500:500:www:/home/www:/bin/bash
 END  END
 close OUT;  close OUT;
     open OUT,">>setup_file_list.txt";      open OUT,">>setup_file_list.txt";
Line 179  ALL: ALL Line 179  ALL: ALL
 END  END
 close OUT;  close OUT;
           
       `install -o 500 -g 500 -m 0700 -d BinaryRoot/home/www`;
       open OUT,">>setup_file_list.txt";
       print OUT "BinaryRoot/home/www\n";
       close OUT;
     `install -d BinaryRoot/etc/pam.d`;      `install -d BinaryRoot/etc/pam.d`;
     open OUT,">>setup_file_list.txt";      open OUT,">>setup_file_list.txt";
     print OUT "BinaryRoot/etc/pam.d/passwd\n";      print OUT "BinaryRoot/etc/pam.d/passwd\n";
Line 211  close OUT; Line 215  close OUT;
   
 }  }
 elsif ($mode eq "status") {  elsif ($mode eq "status") {
       $a=&begin_description_page('status');
       print $a;
       $a=&make_rpm_description_block('status');
       print $a;
       @directories=&determine_directory_structure('status');
       $a=&make_directory_structure_description_block(\@directories,'status');
       print $a;
       $a=&make_file_type_ownership_and_permissions_description_block('status');
       print $a;
       $a=&make_directory_and_file_structure_description_block(\@directories,'status');
       print $a;
       $a=&end_description_page('status');
       print $a;
 }  }
 elsif ($mode eq "update") {  elsif ($mode eq "update") {
 }  }
Line 939  sub end_spec_page { Line 956  sub end_spec_page {
   
 # ------------------------------------------------------- Begin description page  # ------------------------------------------------------- Begin description page
 sub begin_description_page {  sub begin_description_page {
     my $description=<<END;      my ($mode)=@_;
       my $description;
       unless ($mode eq 'status') {
       $description=<<END;
 <HTML>  <HTML>
 <HEAD>  <HEAD>
 <TITLE>LON-CAPA Software Description Page ($distribution, $date)</TITLE>  <TITLE>LON-CAPA Software Description Page ($distribution, $date)</TITLE>
Line 964  http://install.lon-capa.org/compile/inde Line 984  http://install.lon-capa.org/compile/inde
 information.  information.
 </P>  </P>
 END  END
   }
       else {
    $description=<<END;
   <HTML>
   <HEAD>
   <TITLE>LON-CAPA Software File System Status Page ($distribution, $date)</TITLE>
   </HEAD>
   <BODY>
   <FONT SIZE=+2>LON-CAPA Software File System Status Page ($distribution, $date)</FONT>
   <BR>Michigan State University
   <BR>Learning Online with CAPA
   <BR>Contact korte\@lon-capa.org
   <UL>
   <LI>About this file
   <LI>Software Package Description
   <LI>Directory Structure
   <LI>File Type Ownership and Permissions
   <LI>File and Directory Structure
   </UL>
   <FONT SIZE=+2>About this file</FONT>
   <P>
   This file is generated dynamically by <TT>parse.pl</TT> as
   part of a status checking process.  See http://install.lon-capa.org/
   for more information.
   </P>
   END
       }
     return $description;      return $description;
   
 }  }
   
 # ------------------------------------------------- End description page  # ------------------------------------------------- End description page
Line 980  END Line 1028  END
   
 # ------------------------------------------------- Make RPM description block  # ------------------------------------------------- Make RPM description block
 sub make_rpm_description_block {  sub make_rpm_description_block {
     my $description=<<END;      my ($mode)=@_;
       my $description;
       unless ($mode eq 'status') {
       $description=<<END;
 <FONT SIZE=+2>Rolled in a RedHat 6.2 RPM, $date</FONT>  <FONT SIZE=+2>Rolled in a RedHat 6.2 RPM, $date</FONT>
 <P>  <P>
 <TABLE BGCOLOR=#FFFFFF BORDER=0 CELLPADDING=10 CELLSPACING=0>  <TABLE BGCOLOR=#FFFFFF BORDER=0 CELLPADDING=10 CELLSPACING=0>
Line 1001  $info{'RPM'}{'description'} Line 1052  $info{'RPM'}{'description'}
 </TABLE>  </TABLE>
 </P>  </P>
 END  END
   }
       else {
    my $exist=`rpm -q LON-CAPA-base 2>/dev/null`;
    unless ($exist) {
       $description=<<END;
   <FONT SIZE=+2>No LON-CAPA RPM on the system, (installed ??????)</FONT>
   <P>
   <TABLE BGCOLOR=#FFFFFF BORDER=0 CELLPADDING=10 CELLSPACING=0>
   <TR><TD>
   <FONT SIZE=+3>Error! A LON-CAPA-base RPM
   was never installed on this system!</FONT>
   </TD></TR>
   </TD></TR>
   </TABLE>
   </P>
   END
    }
    else {
       chop $exist;
       my $rpmname=`rpm -q --queryformat '%{NAME}' LON-CAPA-base`;
       my $rpmversion=`rpm -q --queryformat '%{VERSION}' LON-CAPA-base`;
       my $rpmrelease=`rpm -q --queryformat '%{RELEASE}' LON-CAPA-base`;
       my $idate=`rpm -q --queryformat '%{INSTALLTIME:date}' LON-CAPA-base`;
       my $rpmvendor=`rpm -q --queryformat '%{VENDOR}' LON-CAPA-base`;
       my $rpmbuildhost=`rpm -q --queryformat '%{BUILDHOST}' LON-CAPA-base`;
       my $rpmgroup=`rpm -q --queryformat '%{GROUP}' LON-CAPA-base`;
       my $rpmlicense=`rpm -q --queryformat '%{LICENSE}' LON-CAPA-base`;
       my $rpmsummary=`rpm -q --queryformat '%{SUMMARY}' LON-CAPA-base`;
       my $rpmdescription=`rpm -q --queryformat '%{DESCRIPTION}' LON-CAPA-base`;
       $description=<<END;
   <FONT SIZE=+2>Current RedHat RPM on the system, (installed $idate)</FONT>
   <P>
   <TABLE BGCOLOR=#FFFFFF BORDER=0 CELLPADDING=10 CELLSPACING=0>
   <TR><TD>
   <PRE>
   Name        : $rpmname
   Version     : $rpmversion
   Vendor      : $rpmvendor
   Release     : $rpmrelease
   Build Host  : $rpmbuildhost
   Group       : $rpmgroup
   License     : $rpmlicense
   Summary     : $rpmsummary
   Description : 
   $rpmdescription
   </PRE>
   </TD></TR>
   </TABLE>
   </P>
   END
   }
       }
     return $description;      return $description;
 }  }
   
Line 1013  sub determine_directory_structure { Line 1116  sub determine_directory_structure {
   
 # ---------------------------------- Make directory structure description block  # ---------------------------------- Make directory structure description block
 sub make_directory_structure_description_block {  sub make_directory_structure_description_block {
     my ($dirs)=@_;      my ($dirs,$mode)=@_;
       my $dirstatus; my $statusheader;
     my $description=<<END;      my $description=<<END;
 <FONT SIZE=+2>Directory Structure Description, $date</FONT>  <FONT SIZE=+2>Directory Structure Description, $date</FONT>
 <P>  <P>
Line 1039  END Line 1143  END
  $maxcount=$count if $count>$maxcount;   $maxcount=$count if $count>$maxcount;
  delete $diraccount{$d};   delete $diraccount{$d};
     }      }
       if ($mode eq 'status') {
    $statusheader="<TH ALIGN=LEFT BGCOLOR=#FFFFFF>Current Status</TH>";
       }
     $description.=<<END;      $description.=<<END;
 <TR>  <TR>
   $statusheader
 <TH ALIGN=LEFT BGCOLOR=#FFFFFF>Category</TH>  <TH ALIGN=LEFT BGCOLOR=#FFFFFF>Category</TH>
 <TH ALIGN=LEFT BGCOLOR=#FFFFFF>Permissions</TH>  <TH ALIGN=LEFT BGCOLOR=#FFFFFF>Permissions</TH>
 <TH ALIGN=LEFT BGCOLOR=#FFFFFF><FONT COLOR=#FF0000>Development<BR>Permissions</FONT></TH>  <TH ALIGN=LEFT BGCOLOR=#FFFFFF><FONT COLOR=#FF0000>Development<BR>Permissions</FONT></TH>
Line 1061  END Line 1169  END
  my $chmod=$info{'OWNERSHIP'}{$category}{'CHMOD'};   my $chmod=$info{'OWNERSHIP'}{$category}{'CHMOD'};
  my $devchown=$info{'DEVOWNERSHIP'}{$category}{'CHOWN'};   my $devchown=$info{'DEVOWNERSHIP'}{$category}{'CHOWN'};
  my $devchmod=$info{'DEVOWNERSHIP'}{$category}{'CHMOD'};   my $devchmod=$info{'DEVOWNERSHIP'}{$category}{'CHMOD'};
    if ($mode eq 'status') {
       my $ds=`find /$d -type d -prune -printf "\%m\t\%u\t\%g" 2>/dev/null`;
       unless ($ds) {
    $dirstatus='<TD BGCOLOR=#FFFFFF><B><U>MISSING</U></B></TD>';
       }
       else {
    my @dss=split(/\t/,$ds);
    my $dssz=$dss[0];
    $dssz="0" . $dss[0] if length($dss[0])<4;
    $dss[0]=$dssz;
    $ds="$dss[0] $dss[1]:$dss[2]";
    if ($ds eq "$chmod $chown" && $ds eq "$devchmod $devchown") {
       $dirstatus='<TD BGCOLOR=#FFFFFF>runtime+development</TD>';
    }
    elsif ($ds eq "$chmod $chown") {
       $dirstatus='<TD BGCOLOR=#FFFFFF>runtime</TD>';
    }
    elsif ($ds eq "$devchmod $devchown") {
       $dirstatus='<TD BGCOLOR=#FFFFFF>development</TD>';
    }
    else {
       $dirstatus="<TD BGCOLOR=#FFFFFF><B><U>ERROR</U></B><BR>$ds</TD>";
    }
       }
    }
  $description.=<<END;   $description.=<<END;
 <TR>  <TR>
   $dirstatus
 <TD BGCOLOR=#FFFFFF>$category</TD>  <TD BGCOLOR=#FFFFFF>$category</TD>
 <TD BGCOLOR=#FFFFFF><TT>$chmod $chown</TT></TD>  <TD BGCOLOR=#FFFFFF><TT>$chmod $chown</TT></TD>
 <TD BGCOLOR=#FFFFFF><FONT COLOR=#FF0000><TT>$devchmod $devchown</TT></FONT></TD>  <TD BGCOLOR=#FFFFFF><FONT COLOR=#FF0000><TT>$devchmod $devchown</TT></FONT></TD>
Line 1081  END Line 1215  END
   
 # ------------------- Make file type ownership and permissions description block  # ------------------- Make file type ownership and permissions description block
 sub make_file_type_ownership_and_permissions_description_block {  sub make_file_type_ownership_and_permissions_description_block {
       my ($mode)=@_;
     my $description=<<END;      my $description=<<END;
 <FONT SIZE=+2>File Type Ownership and Permissions Descriptions, $date</FONT>  <FONT SIZE=+2>File Type Ownership and Permissions Descriptions, $date</FONT>
 <P>  <P>
Line 1120  END Line 1255  END
   
 # ------------------------- Make directory and file structure description block  # ------------------------- Make directory and file structure description block
 sub make_directory_and_file_structure_description_block {  sub make_directory_and_file_structure_description_block {
     my ($dirs)=@_;      my ($dirs,$mode)=@_;
       my $statusheader; my $filestatus;
     my $description=<<END;      my $description=<<END;
 <FONT SIZE=+2>Directory and File Structure Description, $date</FONT>  <FONT SIZE=+2>Directory and File Structure Description, $date</FONT>
 <P>  <P>
Line 1174  END Line 1310  END
 END  END
         }          }
  if (@files) {   if (@files) {
       if ($mode eq 'status') {
    $statusheader=<<END;
   <TH BGCOLOR=$color ALIGN=LEFT>Current Status</TH>
   END
       }
     $description.=<<END;      $description.=<<END;
 <TR>  <TR>
   $statusheader
 <TH BGCOLOR=$color ALIGN=LEFT COLSPAN=2>Type</TH>  <TH BGCOLOR=$color ALIGN=LEFT COLSPAN=2>Type</TH>
 <TH BGCOLOR=$color ALIGN=LEFT>File Name</TH>  <TH BGCOLOR=$color ALIGN=LEFT>File Name</TH>
 <TH BGCOLOR=$color ALIGN=LEFT>Function</TH>  <TH BGCOLOR=$color ALIGN=LEFT>Function</TH>
Line 1187  END Line 1329  END
  my $category=$info{'LOCATION'}{$distribution}{$filesfull[$i]}{'CATEGORY'};   my $category=$info{'LOCATION'}{$distribution}{$filesfull[$i]}{'CATEGORY'};
  my $fdescription=$info{'LOCATION'}{$distribution}{$filesfull[$i]}{'DESCRIPTION'};   my $fdescription=$info{'LOCATION'}{$distribution}{$filesfull[$i]}{'DESCRIPTION'};
  my $source=$info{'LOCATION'}{$distribution}{$filesfull[$i]}{'SOURCE'};   my $source=$info{'LOCATION'}{$distribution}{$filesfull[$i]}{'SOURCE'};
    my $source2=$info{'LOCATION'}{$distribution}{$filesfull[$i]}{'SOURCE'};
  my $note=$info{'LOCATION'}{$distribution}{$filesfull[$i]}{'NOTE'};   my $note=$info{'LOCATION'}{$distribution}{$filesfull[$i]}{'NOTE'};
  $note.="<BR>" if $note;   $note.="<BR>" if $note;
  my $listing=$info{'LOCATION'}{$distribution}{$filesfull[$i]}{'FILES'};   my $listing=$info{'LOCATION'}{$distribution}{$filesfull[$i]}{'FILES'};
Line 1219  END Line 1362  END
  $source="<FONT COLOR=#FF0000>$source</FONT>";   $source="<FONT COLOR=#FF0000>$source</FONT>";
     }      }
  }   }
    my $checksum;
    my $checksum_source;
    my $checksum_target;
    if ($mode eq 'status') {
       $filestatus='';
       my $fs;
       my $listing2=$info{'LOCATION'}{$distribution}{$filesfull[$i]}{'FILES'};
       my @E=split(/\s+/,$listing2); shift @E;
       if (@E) {
    $fs=`find /$filesfull[$i] -prune -printf "\%m\t\%u\t\%g\n" 2>/dev/null | wc -l`; chop $fs;
    if ($fs!=(@E+0)) {
       $ecount=(@E+0);
       $estuff=join(",",@E);
       $filestatus="<TD BGCOLOR=#FFFFFF><B><U>ERROR. SOME FILES ARE MISSING</U></B></TD>";
    }
    $fs=`find /$filesfull[$i] -prune -printf "\%m\t\%u\t\%g\n" 2>/dev/null | sort | uniq | wc -l`; chop $fs;
    if ($fs!=1) {
       $filestatus='<TD BGCOLOR=#FFFFFF><B><U>ERROR. THERE ARE MULTIPLE OWNERSHIPS/PERMISSIONS WHEN ALL THESE FILES SHOULD HAVE THE SAME CONFIGURATION</U></B></TD>';
    }
    else {
       $fs=`find /$filesfull[$i] -prune -printf "\%m\t\%u\t\%g\n" 2>/dev/null | sort | uniq`; chop $fs;
    }
       }
       else {
    $fs=`find /$filesfull[$i] -prune -printf "\%m\t\%u\t\%g" 2>/dev/null`;
    if (-f "/$filesfull[$i]" && !(-l "/$filesfull[$i]")) {
       $checksum_source=`md5sum ../../$source2 | cut -d ' ' -f1`;
       chop $checksum_source;
       $checksum_target=`md5sum /$filesfull[$i] | cut -d ' ' -f1`;
       chop $checksum_target;
   #    warn ("CS: $checksum_source, CT: $checksum_target\n");
       unless ($checksum_source eq $checksum_target) {
    $checksum="<BR><B><U>CHECKSUM DIFFERENCE</U></B>";
       }
    }
       }
       my $fsl=`find /$filesfull[$i] -type l -prune -printf "\%m\t\%u\t\%g" 2>/dev/null`;
       unless ($fs || $filestatus) {
    $filestatus='<TD BGCOLOR=#FFFFFF><B><U>MISSING</U></B></TD>';
       }
       elsif (!$filestatus) {
   
    $chmod=$info{'OWNERSHIP'}{$category}{'CHMOD'};
    $chown=$info{'OWNERSHIP'}{$category}{'CHOWN'};
    $devchmod=$info{'DEVOWNERSHIP'}{$category}{'CHMOD'};
    $devchown=$info{'DEVOWNERSHIP'}{$category}{'CHOWN'};
   
    my @fss=split(/\t/,$fs);
    my $fssz=$fss[0];
    $fssz="0" . $fss[0] if length($fss[0])<4;
    $fss[0]=$fssz;
    $fs="$fss[0] $fss[1]:$fss[2]";
    $s=' ';
    if ($fsl) {
       $fs="$fss[1]:$fss[2]";
       $s='';
    }
    if ($fs eq "$chmod$s$chown" && $fs eq "$devchmod$s$devchown") {
       $filestatus="<TD BGCOLOR=#FFFFFF>runtime+development$checksum</TD>";
    }
    elsif ($fs eq "$chmod$s$chown") {
       $filestatus="<TD BGCOLOR=#FFFFFF>runtime$checksum</TD>";
    }
    elsif ($fs eq "$devchmod$s$devchown") {
       $filestatus="<TD BGCOLOR=#FFFFFF>development$checksum</TD>";
    }
    else {
       $filestatus="<TD BGCOLOR=#FFFFFF><B><U>ERROR</U></B><BR>$fs</TD>";
    }
       }
    }    
  $description.=<<END;   $description.=<<END;
 <TR>  <TR>
   $filestatus
 <TD BGCOLOR=#A0A0A0><IMG SRC="$fcm{$category}.gif" ALT="$category"></TD>  <TD BGCOLOR=#A0A0A0><IMG SRC="$fcm{$category}.gif" ALT="$category"></TD>
 <TD BGCOLOR=$color>$category</TD>  <TD BGCOLOR=$color>$category</TD>
 <TD BGCOLOR=$color>$files[$i]</TD>  <TD BGCOLOR=$color>$files[$i]</TD>

Removed from v.1.23  
changed lines
  Added in v.1.29


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>