OpenPKG CVS Repository
http://cvs.openpkg.org/
____________________________________________________________________________
Server: cvs.openpkg.org Name: Thomas Lotterer
Root: /e/openpkg/cvs Email: [EMAIL PROTECTED]
Module: openpkg-re Date: 15-Jul-2003 12:01:56
Branch: HEAD Handle: 2003071511015500
Modified files:
openpkg-re fsllint.pl
Log:
add ident/default checking
Summary:
Revision Changes Path
1.3 +201 -0 openpkg-re/fsllint.pl
____________________________________________________________________________
patch -p0 <<'@@ .'
Index: openpkg-re/fsllint.pl
============================================================================
$ cvs diff -u -r1.2 -r1.3 fsllint.pl
--- openpkg-re/fsllint.pl 14 Jul 2003 15:13:12 -0000 1.2
+++ openpkg-re/fsllint.pl 15 Jul 2003 10:01:55 -0000 1.3
@@ -100,6 +100,7 @@
my @check_list = (qw(
blank
comment
+ ident
));
my @checks = ();
if ($check eq 'all') {
@@ -291,3 +292,203 @@
}
}
+## _________________________________________________________________
+##
+## CHECK "ident"
+## _________________________________________________________________
+##
+
+sub check_ident {
+ my ($file, $spec) = @_;
+ my ($pkg, $section);
+
+ # determine package name
+ $pkg = $file;
+ $pkg =~ s|^.+/||;
+ $pkg =~ s|^fsl\.||;
+
+ # check sections with ident/facility regex
+ my $done .= ""; my $this = ""; my $todo = $spec;
+ while ($todo =~ m:\n(\w+)(\s+)(\S+)/(\S+)(\s+)q\{(.*?)\};:s) {
+ $done .= $`; $this = $&; $todo = $';
+ my ($section, $ws1, $ident, $facility, $ws2, $body) = ($1, $2, $3, $4, $5,
$6);
+
+ if ($pkg eq "fsl") {
+ # enforce default section for fsl
+ if ($section ne "default") {
+ &lint_warning($file, "", "", "section \"$section\" not allowed for
package $pkg (expected default)");
+ }
+ }
+ else {
+ # enforce ident section for any package othen than fsl
+ if ($section ne "ident") {
+ &lint_warning($file, "", "", "section \"$section\" not allowed for
package $pkg (expected ident)");
+ }
+
+ # ident and facility wildcard-only would be a catch-all
+ if ($ident =~ m/^[(]?\.[\+\*][)]?$/ and $facility =~
m/^[(]?\.[\+\*][)]?$/) {
+ &lint_warning($file, "", "", "wildcard not allowed for both ident
and facility (found $ident/$facility");
+ }
+ }
+
+ # enforce a single space
+ if (length($ws1) != 1) {
+ &lint_warning($file, "", "", "whitespace count wrong between section
($section) and ident ($ident)");
+ }
+
+ # enforce a single space
+ if (length($ws2) != 1) {
+ &lint_warning($file, "", "", "whitespace count wrong between facility
($facility) and end of line");
+ }
+
+ # ident same as facility is likely to be a typo
+ if ($ident eq $facility) {
+ &lint_warning($file, "", "", "unusual constellation ident equal to
facility (found $ident/$facility");
+ }
+
+ # FIXME MTAs hardcoded here for /mail
+ if ($facility eq "mail" and $pkg !~ m/^(sendmail|ssmtp|postfix|exim)$/) {
+ &lint_warning($file, "", "", "only MTAs may match facility mail");
+ }
+
+ # FIXME inn hardcoded here for /news
+ if ($facility eq "news" and $pkg !~ m/^(inn)$/) {
+ &lint_warning($file, "", "", "only inn may match facility news");
+ }
+
+ # check prefix channel
+ if ($body =~ m/\n([ ]*)prefix(\s*?)\((.*?)\)/s) {
+ my ($ws1, $ws2, $options) = ($1, $2, $3);
+
+ # enforce eight spaces
+ if (length($ws1) != 4) {
+ &lint_warning($file, "", "", "prefix channel whitespace count at
start of line");
+ }
+
+ # enforce zero spaces
+ if (length($ws2) != 0) {
+ &lint_warning($file, "", "", "whitespace not allowed between prefix
channel and round open bracket");
+ }
+
+ # enforce prefix options in prefix channel
+ if ($options !~ m/\sprefix="%b %d %H:%M:%S %N (<%L> )?\$1(\[%P\])?: "/)
{
+ &lint_warning($file, "", "", "prefix option in prefix channel
invalid or missing");
+ }
+ $options = $';
+ $options =~ s/,//;
+
+ # detect superflous options in prefix channel
+ if ($options =~ m/\S+/s) {
+ $options =~ s/\n/\\n/;
+ &lint_warning($file, "", "", "superflous option in prefix channel
unseparated line detected: $options");
+ }
+ }
+ else {
+ &lint_warning($file, "", "", "prefix channel missing");
+ }
+
+ # check path branch
+ if ($body !~ m/\n([ ]*)->(\s*?)\{(.*)\}\n/s) {
+ &lint_warning($file, "", "", "no path branch found");
+ return;
+ }
+ my ($ws1, $ws2, $body) = ($1, $2, $3); #FIXME check ws1/ws2
+
+ # check path channel
+ while ($body =~ m/\n([ ]*)(\w+):(\s+?)file(\s*?)\((.*?)\);/s) {
+ my ($ws1, $level, $ws2, $ws3, $options) = ($1, $2, $3, $4, $5);
+ $body = $';
+
+ # enforce eight spaces
+ if (length($ws1) != 8) {
+ &lint_warning($file, "", "", "path channel whitespace count at
start of line");
+ }
+
+ # enforce spaces
+ if (length($ws2) < 1) {
+ &lint_warning($file, "", "", "whitespace required between level and
file");
+ }
+
+ # enforce zero spaces
+ if (length($ws3) != 0) {
+ &lint_warning($file, "", "", "path channel whitespace not allowed
between file channel and round open bracket");
+ }
+
+ # check for legal l2 level
+ if ($level !~
m/^(panic|critical|error|warning|notice|info|trace|debug)$/) {
+ &lint_warning($file, "", "", "illegal l2 level $level detected");
+ }
+
+ # enforce file option in file channel
+ if ($options !~ m;path="[EMAIL
PROTECTED]@/var/$pkg/(log\S+|$pkg\.log)";) {
+ &lint_warning($file, "", "", "path option in file channel invalid
or missing");
+ }
+ $options = $';
+ $options =~ s/,//;
+
+ # enforce perm option in file channel
+ if ($options !~ m;perm=0[0-7]{3};) {
+ &lint_warning($file, "", "", "perm option in file channel invalid
or missing");
+ }
+ $options = $';
+ $options =~ s/,//;
+
+ # detect superflous options in file channel
+ if ($options =~ m/\S+/s) {
+ $options =~ s/\n/\\n/;
+ &lint_warning($file, "", "", "superflous option in prefix channel
detected: $options");
+ }
+ }
+
+ # check path channel
+ if ($body =~ m/\n([ ]*)(\w+):(\s*?)file(\s*?)\((.*?)\)/s) {
+ my ($ws1, $level, $ws2, $ws3, $options) = ($1, $2, $3, $4, $5);
+
+ # enforce eight spaces
+ if (length($ws1) != 8) {
+ &lint_warning($file, "", "", "path channel whitespace count at
start of unseparated line");
+ }
+
+ # enforce spaces
+ if (length($ws2) < 1) {
+ &lint_warning($file, "", "", "path channel whitespace required
between level and file of unseparated line");
+ }
+
+ # enforce zero spaces
+ if (length($ws3) != 0) {
+ &lint_warning($file, "", "", "whitespace not allowed between file
channel and round open bracket");
+ }
+
+ # check for legal l2 level
+ if ($level !~
m/^(panic|critical|error|warning|notice|info|trace|debug)$/) {
+ &lint_warning($file, "", "", "illegal l2 level $level detected on
unseparated line");
+ }
+
+ # enforce file option in file channel
+ if ($options !~ m;path="[EMAIL
PROTECTED]@/var/$pkg/(log\S+|$pkg\.log)";) {
+ &lint_warning($file, "", "", "XXX path option in file channel
invalid or missing on unseparated line");
+ }
+ $options = $';
+ $options =~ s/,//;
+
+ # enforce perm option in file channel
+ if ($options !~ m;perm=0[0-7]{3};) {
+ &lint_warning($file, "", "", "perm option in file channel invalid
or missing on unseparated line");
+ }
+ $options = $';
+ $options =~ s/,//;
+
+ # detect superflous options in file channel
+ if ($options =~ m/\S+/s) {
+ $options =~ s/\n/\\n/;
+ &lint_warning($file, "", "", "superflous option in prefix channel
unseparated line detected: $options");
+ }
+ }
+ else {
+ &lint_warning($file, "", "", "file channel missing");
+ }
+
+ $done .= $this;
+ }
+ return;
+}
@@ .
______________________________________________________________________
The OpenPKG Project www.openpkg.org
CVS Repository Commit List [EMAIL PROTECTED]