1#! /usr/bin/perl5 2## 3## This is a simple script written by Herb Lewis @ SGI <herb@samba.org> 4## for reporting which parameters are supported by loadparm.c but 5## not by SWAT I just thought it looked fun and might be of interest to others 6## --jerry@samba.org 7## 8## Here is a little info on the usage and output format so you don't have 9## to dig through the code to understand what is printed. 10## 11## Useage: swat.pl [path_to_loadparm.c] 12## 13## The output consists of 4 columns of information 14## Option Name, Global Page, Share Page, Printer Page 15## The section separaters will also be printed (preceded by 16 *) to show 16## which options are grouped in the various sections. 17## 18## If the option name is preceded by an * it means this is a deprecated option. 19## If the option name is preceded by 5 spaces it means this is an alias for the 20## previous option. 21## 22## Under the Global Page, Share Page, and Printer Page columns there will be 23## one of 3 entries, BASIC, ADVANCED, or no. "BASIC" indicates this option will 24## show in the Basic View of that page in SWAT. "ADVANCED" indicates this 25## option will show in the Advanced View of that page in SWAT. "No" indicates 26## that this option is not available on that page in SWAT. 27## 28## Under the Global Page column, if an entry begins with an * it indicates that 29## this is actually specified in Samba as a "service parameter" not a "global 30## parameter" but you can set a default value for this on the Global Page in 31## SWAT. 32## 33## --herb@samba.org 34 35$lastone = "nothing"; 36 37if (@ARGV[0]) { 38 $filename = @ARGV[0]; 39} else { 40 $filename = "/usr3/samba20/samba/source/param/loadparm.c"; 41} 42 43open (INFILE,$filename) || die "unable to open $filename\n"; 44while (not eof(INFILE)) 45{ 46 $_ = <INFILE>; 47 last if ( /^static struct parm_struct parm_table/) ; 48} 49print "Option Name Global Page Share Page Printer Page\n"; 50print "---------------------------------------------------------------------"; 51while (not eof(INFILE)) 52{ 53 $_ = <INFILE>; 54 last if (/};/); 55 @fields = split(/,/,$_); 56 next if not ($fields[0] =~ /^.*{"/); 57 $fields[0] =~ s/.*{"//; 58 $fields[0] =~ s/"//; 59 if ($fields[3] eq $lastone) { 60 print " $fields[0]\n"; 61 next; 62 } 63 $lastone = $fields[3]; 64 $fields[2] =~ s/^\s+//; 65 $fields[2] =~ s/\s+$//; 66 $fields[2] =~ s/}.*$//; 67 $fields[6] =~ s/^\s+//; 68 $fields[6] =~ s/\s+$//; 69 $fields[6] =~ s/}.*$//; 70 if ($fields[2] =~ /P_SEPARATOR/) { 71 print "\n****************$fields[0]\n"; 72 next; 73 } 74 else { 75 if ($fields[6] =~ /FLAG_DEPRECATED/) { 76 print "*$fields[0]".' 'x(31-length($fields[0])); 77 } 78 else { 79 print "$fields[0]".' 'x(32-length($fields[0])); 80 } 81 } 82 if (($fields[2] =~ /P_GLOBAL/) || ($fields[6] =~ /FLAG_GLOBAL/)) { 83 if ($fields[6] =~ /FLAG_GLOBAL/) { 84 print "*"; 85 } 86 else { 87 print " "; 88 } 89 if ($fields[6] =~ /FLAG_BASIC/) { 90 print "BASIC "; 91 } 92 else { 93 print "ADVANCED "; 94 } 95 } 96 else { 97 print " no "; 98 } 99 if ($fields[6] =~ /FLAG_SHARE/) { 100 if ($fields[6] =~ /FLAG_BASIC/) { 101 print "BASIC "; 102 } 103 else { 104 print "ADVANCED "; 105 } 106 } 107 else { 108 print "no "; 109 } 110 if ($fields[6] =~ /FLAG_PRINT/) { 111 if ($fields[6] =~ /FLAG_BASIC/) { 112 print "BASIC"; 113 } 114 else { 115 print "ADVANCED"; 116 } 117 } 118 else { 119 print "no"; 120 } 121 print "\n"; 122} 123