LJ Archive

Listing 1. Perl Script, qmail_db_lookup

#!/usr/local/bin/perl

   if($db_name eq ""){
      print "Usage: $0 <database>\n";
      exit(1);
   }
   # Trim everything except the actual recipient.
   split(/-/, $ENV{"LOCAL"});
   $recipient = @_[scalar(@_)-1];

   # Scan the database looking for a match.
   $result_address = "";
   $default_address = "";
   open(DB, $ARGV[0]) ||
   die "cannot open database";
   while(<DB>){
      chop();

      # Trim out any comments.
      $index = index($_, "#");
      $_ = substr($_, 0, $index) if $index >=0;

      # Get the local name and the forwarding
   # address.
      ($db_local_address, $db_forward_to) =\
      m|^\s*(\S*)\s*:\s*(\S.*)$|;
      if($db_local_address eq "-"){
         $default_address = $db_forward_to;
      } elsif($db_local_address eq $recipient){
         $found = "yes";
         $result_address = $db_forward_to;
         last;
      }
   }
   close(DB);

   # If we couldn't find the recipient, forward to
   # the default user.
   $result_address = $default_address if($result_address eq "");

   # If we were able to resolve an address, then
   # call qmail's 'forward'.
   if($result_address ne ""){
      system(
   "/var/qmail/bin/forward $result_address");
      exit(0);
   }else{
      exit(100);
   }
LJ Archive