X-Git-Url: https://the.earth.li/gitweb/?a=blobdiff_plain;f=autodns.pl;h=d017e600f23695d0a3af9209e015939632dbf2dd;hb=8ecbe90f448e63afd96cd1654bf5a5ba84e1f805;hp=e221c09b407a12ef9b648889953b4e85bf93e59f;hpb=ce937ea3e89f3b729bd780b7017f5efcf0d68370;p=autodns.git diff --git a/autodns.pl b/autodns.pl index e221c09..d017e60 100755 --- a/autodns.pl +++ b/autodns.pl @@ -5,7 +5,7 @@ # http://www.earth.li/projectpurple/progs/autodns.html # Released under the GPL. # -# $Id: autodns.pl,v 1.10 2005/05/16 17:24:10 noodles Exp $ +# $Id: autodns.pl,v 1.13 2005/05/31 17:17:46 noodles Exp $ # use strict; @@ -16,10 +16,12 @@ use MIME::Parser; $ENV{'PATH'}="/usr/local/bin:/usr/bin:/bin:/usr/sbin"; -my ($from, $subject, $gpguser, $gpggood, $usersfile, $lockfile, $priv); -my ($user, $server, $inprocess, $delcount, $addcount, $reload_command); -my ($domain, @MAIL, @GPGERROR, @COMMANDS, %zones); -my ($me, $ccreply, $conffile, $domainlistroot, @cfgfiles, $VERSION); +my ($from, $subject, $gpguser, $gpggood, $priv); +my ($user, $server, $inprocess, $delcount, $addcount); +my ($domain, @MAIL, @GPGERROR, @COMMANDS, %zones, $VERSION); + +use vars qw($me $ccreply $conffile $domainlistroot @cfgfiles $usersfile + $lockfile $reload_command); $VERSION="0.0.8"; @@ -45,13 +47,13 @@ unless (my $ret = do $file) { # # Call with the name of a config file to read: # -# &getzones("/etc/named.conf"); +# getzones("/etc/named.conf"); # -sub getzones { - my ($namedfile) = @_; +sub getzones($) { + my $namedfile = shift; open (NAMEDCONF, "< $namedfile") or - &fatalerror("Can't open $namedfile"); + fatalerror("Can't open $namedfile"); while () { if (/^\s*zone\s*"([^"]+)"/) { @@ -67,9 +69,10 @@ sub getzones { # # These are: a-z, 0-9, - or . # -sub valid_domain { +sub valid_domain($) { my $domain = shift; $domain = lc $domain; + if ($domain =~ /^(?:[a-z0-9-]+\.)+[a-z]{2,4}$/) { return 1; } elsif ($domain =~ /^(?:[0-9\/-]+\.)+in-addr.arpa$/) { @@ -85,7 +88,7 @@ sub valid_domain { # # fatalerror("I'm melting!"); # -sub fatalerror { +sub fatalerror($) { my $message = shift; print REPLY $message; @@ -108,14 +111,14 @@ sub fatalerror { # # Priviledge level is not currently used. # -# ($user, $priv, $server) = &getuserinfo("5B430367"); +# ($user, $priv, $server) = getuserinfo("5B430367"); # -sub getuserinfo { +sub getuserinfo($) { my $gpguser = shift; my ($user, $priviledge, $server); open (CONFIGFILE, "< $usersfile") or - &fatalerror("Couldn't open user configuration file."); + fatalerror("Couldn't open user configuration file."); foreach () { if (/^([^#.]+):$gpguser:(\d+):(.+)$/) { @@ -128,13 +131,13 @@ sub getuserinfo { if ($user !~ /^.+$/) { close(CONFIGFILE); - &fatalerror("Error in user configuration file: Can't get username.\n"); + fatalerror("Error in user configuration file: Can't get username.\n"); } if ($server !~ /^(\d{1,3}\.){3}\d{1,3}$/) { $server =~ s/\d\.]//g; close(CONFIGFILE); - &fatalerror("Error in user configuration file: Invalid primary server IP address ($server)\n"); + fatalerror("Error in user configuration file: Invalid primary server IP address ($server)\n"); exit; } } @@ -142,7 +145,7 @@ sub getuserinfo { close(CONFIGFILE); if ($user =~ /^$/) { - &fatalerror("User not found.\n"); + fatalerror("User not found.\n"); } return ($user, $priviledge, $server); @@ -251,7 +254,7 @@ if ($entity->parts) { my $pid = open3(\*GPGIN, \*GPGOUT, \*GPGERR, "gpg --batch"); # Feed it the mail. - print GPGIN @MAIL; + print GPGIN $entity->bodyhandle->as_string; close GPGIN; # And grab what it has to say. @@ -297,7 +300,7 @@ if ($gpggood) { } # Now let's check if we know this person. -($user, $priv, $server) = &getuserinfo($gpguser); +($user, $priv, $server) = getuserinfo($gpguser); if (! defined($user) || ! $user) { print REPLY "Unknown user.\n"; @@ -310,8 +313,8 @@ print REPLY "Got user '$user'\n"; # Right. We know this is a valid user. Get a lock to ensure we have exclusive # access to the configs from here on in. open (LOCKFILE,">$lockfile") || - &fatalerror("Couldn't open lock file\n"); -&fatalerror("Couldn't get lock\n") unless(flock(LOCKFILE,LOCK_EX)); + fatalerror("Couldn't open lock file\n"); +fatalerror("Couldn't get lock\n") unless(flock(LOCKFILE,LOCK_EX)); # Ok, now we should figure out what domains we already know about. foreach my $cfgfile (@cfgfiles) { @@ -321,7 +324,7 @@ foreach my $cfgfile (@cfgfiles) { # Force existance of the $domainlistroot$user file if (! -e $domainlistroot.$user) { open (DOMAINLIST, ">>$domainlistroot$user") or - &fatalerror("Couldn't create domains file.\n"); + fatalerror("Couldn't create domains file.\n"); close DOMAINLIST; } @@ -375,7 +378,7 @@ zone \"$domain\" { close DOMAINSFILE; open (DOMAINLIST, ">>$domainlistroot$user") or - &fatalerror("Couldn't open file.\n"); + fatalerror("Couldn't open file.\n"); print DOMAINLIST "$domain\n"; close DOMAINLIST; $addcount++; @@ -395,7 +398,7 @@ zone \"$domain\" { my (@newcfg,$found); open (DOMAINLIST, "<$domainlistroot$user") or - &fatalerror("Couldn't open file $domainlistroot$user for reading: $!.\n"); + fatalerror("Couldn't open file $domainlistroot$user for reading: $!.\n"); my @cfg = ; close(DOMAINLIST); @newcfg = grep { ! /^$domain$/ } @cfg; @@ -406,14 +409,14 @@ zone \"$domain\" { } open (DOMAINLIST, ">$domainlistroot$user") or - &fatalerror("Couldn't open file $domainlistroot$user for writing: $!.\n"); + fatalerror("Couldn't open file $domainlistroot$user for writing: $!.\n"); print DOMAINLIST @newcfg; close DOMAINLIST; $found=0; @newcfg=(); open (DOMAINSFILE, "<$conffile") or - &fatalerror("Couldn't open file $conffile for reading: $!\n"); + fatalerror("Couldn't open file $conffile for reading: $!\n"); { local $/ = ''; # eat whole paragraphs while () { @@ -435,7 +438,7 @@ zone \"$domain\" { } open (DOMAINSFILE, ">$conffile") or - &fatalerror("Couldn't open $conffile for writing: $!\n"); + fatalerror("Couldn't open $conffile for writing: $!\n"); print DOMAINSFILE @newcfg; close DOMAINSFILE; $delcount++;