[BACK]Return to mkdefaults CVS log [TXT][DIR] Up to [local] / src / usr.bin / sudo

Diff for /src/usr.bin/sudo/Attic/mkdefaults between version 1.1.2.1 and 1.2

version 1.1.2.1, 2002/01/18 16:14:46 version 1.2, 2004/09/28 15:10:51
Line 7 
Line 7 
 # var_name  # var_name
 #       TYPE  #       TYPE
 #       description (or NULL)  #       description (or NULL)
   #       array of struct def_values if TYPE == T_TUPLE
   
 # Deal with optional -o (output) argument  # Deal with optional -o (output) argument
 if ($#ARGV > 0 && $ARGV[0] eq "-o") {  if ($#ARGV > 0 && $ARGV[0] eq "-o") {
Line 15 
Line 16 
     $header .= '.h';      $header .= '.h';
     $cfile .= '.c';      $cfile .= '.c';
 }  }
 die "usage: $0 input_file" unless $#ARGV == 0;  die "usage: $0 input_file\n" unless $#ARGV == 0;
   
 $infile = $ARGV[0];  $infile = $ARGV[0];
 if (!defined($header)) {  if (!defined($header)) {
Line 31 
Line 32 
 open(HEADER, ">$header") || die "$0: can't open $header: $!\n";  open(HEADER, ">$header") || die "$0: can't open $header: $!\n";
 open(CFILE, ">$cfile") || die "$0: can't open $cfile: $!\n";  open(CFILE, ">$cfile") || die "$0: can't open $cfile: $!\n";
   
 print CFILE "struct sudo_defs_types sudo_defs_table[] = {\n    {\n";  $count = 0;
   @tuple_values = ( "never" );
 $count = -1;  @records = ();
 while(<IN>) {  while(<IN>) {
     chomp;      chomp;
       s/\s*#.*$//;
     next if /^\s*$/;      next if /^\s*$/;
     next if /^\s*#/;  
   
     if (/^\S/) {      if (/^\S/) {
         # Print last record          # Store previous record and begin new one
         &print_record() if defined($var);          $records[$count++] = [$var, $type, $desc, $values, $callback] if defined($var);
   
         $var = $_;          $var = $_;
         ($type, $desc) = (undef, undef);          $type = '';
         $count++;          $desc = undef;
           $values = undef;
           $callback = undef;
           $field = 0;
     } else {      } else {
           $field++;
         s/^\s+//;          s/^\s+//;
         s/\s+$//;          s/\s+$//;
         die "$0: syntax error near line $.\n" if          if ($field == 1) {
             defined($type) && defined($desc);              # type
         next if /^NULL$/;  
         if (defined($type)) {  
             # Strip leading and trailing double quote and escape the rest  
             s/^"//;  
             s/"$//;  
             s/"/\\"/g;  
             $desc = "\"$_\"";  
         } else {  
             $type = $_;              $type = $_;
           } elsif ($field == 2) {
               # description
               if ($_ eq "NULL") {
                   $desc = "NULL";
               } else {
                   # Strip leading and trailing double quote and escape the rest
                   s/^"//;
                   s/"$//;
                   s/"/\\"/g;
                   $desc = "\"$_\"";
               }
           } elsif ($field == 3 || $field == 4) {
               if (s/^\*//) {
                   $callback = $_;
               } else {
                   die "$0: syntax error near line $.\n" if $type !~ /^T_TUPLE/;
                   $values = [ split ];
                   foreach $v (@$values) {
                       push(@tuple_values, $v) unless grep(/^$v$/, @tuple_values);
                   }
               }
           } else {
               die "$0: syntax error near line $.\n";
         }          }
     }      }
 }  }
 &print_record();  $records[$count++] = [$var, $type, $desc, $values, $callback] if defined($var);
   
   # Print out value arrays
   for ($i = 0; $i < $count; $i++) {
       if (defined($records[$i]->[3])) {
           die "Values list specified for non-tupple\n" unless
               $records[$i]->[1] =~ /^T_TUPLE/;
           printf CFILE "static struct def_values def_data_%s[] = {\n", $records[$i]->[0];
           foreach (@{$records[$i]->[3]}) {
               print CFILE "    { \"$_\", $_ },\n";
           }
           print CFILE "    { NULL, 0 },\n";
           print CFILE "};\n\n";
       }
   }
   
   # Print each record
   print CFILE "struct sudo_defs_types sudo_defs_table[] = {\n    {\n";
   for ($i = 0; $i < $count; $i++) {
       &print_record($records[$i], $i);
   }
 print CFILE "\tNULL, 0, NULL\n    }\n};\n";  print CFILE "\tNULL, 0, NULL\n    }\n};\n";
   
   # Print out def_tuple
   if (@tuple_values) {
       print HEADER "\nenum def_tupple {\n";
       foreach (@tuple_values) {
           print HEADER "\t$_,\n";
       }
       print HEADER "};\n";
   }
   
 close(IN);  close(IN);
 close(HEADER);  close(HEADER);
 close(CFILE);  close(CFILE);
   
 sub print_record {  sub print_record {
     $defname = "I_" . uc($var);      my ($rec, $recnum) = @_;
     printf HEADER "#define %-24s%d", $defname, $count;      my ($i, $v, $defname);
     #print HEADER "\t/* $desc */" if defined($desc);      # each variable gets a macro to access its value
       for ($rec->[1]) {
           if    (/^T_U?INT/)  { $v = "ival"; }
           elsif (/^T_STR/)    { $v = "str"; }
           elsif (/^T_FLAG/)   { $v = "flag"; }
           elsif (/^T_MODE/)   { $v = "mode"; }
           elsif (/^T_LIST/)   { $v = "list"; }
           elsif (/^T_LOGFAC/) { $v = "ival"; }
           elsif (/^T_LOGPRI/) { $v = "ival"; }
           elsif (/^T_TUPLE/)  { $v = "tuple"; }
           else { die "$0: unknown defaults type: $type\n"; }
       }
       printf HEADER "#define %-23s (sudo_defs_table[$recnum].sd_un.${v})\n",
           "def_$rec->[0]";
   
       $defname = "I_" . uc($rec->[0]);
       printf HEADER "#define %-24s%d", $defname, $recnum;
       #print HEADER "\t/* $rec->[2] */" if defined($rec->[2]);
     print HEADER "\n";      print HEADER "\n";
   
     $desc = "NULL" unless defined($desc);      print CFILE "\t\"$rec->[0]\", $rec->[1],\n\t$rec->[2],\n";
     print CFILE "\t\"$var\", $type,\n\t$desc\n    }, {\n";      if (defined($rec->[3])) {
           printf CFILE "\tdef_data_$rec->[0],\n";
       } else {
           printf CFILE "\tNULL,\n";
       }
       printf CFILE "\t$rec->[4],\n" if defined($rec->[4]);
       print CFILE "    }, {\n";
 }  }

Legend:
Removed from v.1.1.2.1  
changed lines
  Added in v.1.2