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