#!/usr/bin/perl -w # $Id: md-gen.pl,v 1.1.1.1 2005/11/17 20:08:18 tsunami Exp $ # generovani konfiguraku maildropu pro virtualni uzvatele v mysql databazi # generuje se pro vsechny uzivatele v databazi # use strict; use DBI; use Switch; #Adresář s pravidly pro maildrop $main::DIR_CONFIG="/home/virtual/.mailfilters/"; #zde cestu k adresáři s uživatelskými logy $main::DIR_LOG="/var/virtual/log/"; $main::ANTISPAM="/usr/bin/spamc"; $main::TEST="/usr/bin/test"; # je treba overit, jestli odpovida vasi distribuci $main::MAILDIRMAKE="/usr/bin/maildirmake"; $main::MKDIR="/bin/mkdir"; my $username = "NAHRADTE-login-mysql-pro-databazi-postfix"; my $password = "NAHRADTE-heslo-do-mysql-pro-databazi-postfix"; my $data_source = "dbi:mysql:database=postfix;host=localhost;port=3306"; #tohle pripojeni pouzivam na ziskani emailu a id uzivatelu my $connect = DBI->connect( $data_source, $username, $password, { RaiseError => 1, AutoCommit => 0, PrintError => 0 }) or die $DBI::errstr; #tohle pripojeni je pro ziskani konfigu maildropu $main::connect2 = DBI->connect( $data_source, $username, $password, { RaiseError => 1, AutoCommit => 0, PrintError => 0 }) or die $DBI::errstr; my $SQL = "SELECT id,email,homedir,maildir,antispam FROM postfix_users"; my $query = $connect->prepare($SQL); $query->execute(); while (my ($id,$email,$homedir,$maildir,$antispam) = $query->fetchrow()){ my $config = &get_cfg($id,$email,$homedir,$maildir,$antispam); &create_file($email,$config); } $connect->disconnect() or die $DBI::errstr; $main::connect2->disconnect() or die $DBI::errstr; exit 0; # vycucne informace z databaze a vyrobi configurak pro maildrop sub get_cfg(){ my $id = shift; my $email = shift; my $homedir = shift; my $default_maildir = shift; my $antispam = shift; my $ret_val = "# " .$email."\n"; $ret_val = $ret_val."logfile \"/home/virtual/logs/".$email."\"\n\n" ."`".$main::TEST." -d ".$homedir."/".$default_maildir."`\n" ."if (\$RETURNCODE == 1)\n" ."{\n" ."`".$main::MKDIR." -p ".$homedir."/".$default_maildir."cur`\n" ."`".$main::MKDIR." -p ".$homedir."/".$default_maildir."new`\n" ."`".$main::MKDIR." -p ".$homedir."/".$default_maildir."tmp`\n" ."}\n\n"; my $SQL = "SELECT pravidlo,hlavicka_pravidlo,hlavicka_hodnota,akce,cil,komentar FROM maildrop_rules WHERE user_id=".$id." AND active='y' ORDER BY no"; my $query = $main::connect2->prepare($SQL); $query->execute(); if ($query->rows>0){ if ($antispam=~/.+/){ $ret_val = $ret_val."xfilter \"".$main::ANTISPAM."\"\n\n"; } while (my ($pravidlo,$hlavicka_pravidlo,$hlavicka_hodnota,$akce,$cil,$komentar) = $query->fetchrow()){ if ($komentar =~ ""){ $ret_val=$ret_val."# ".$komentar."\n"; } switch ($pravidlo) { case 'if' {$ret_val=$ret_val.$pravidlo." (/^".$hlavicka_pravidlo.":.*".$hlavicka_hodnota."/)\n";} else {;} } switch ($akce) { case 'to' { $ret_val=$ret_val ."{\n" ."\t`".$main::TEST." -d ".$homedir."/".$default_maildir.".".$cil."`\n" ."\tif (\$RETURNCODE == 1)\n" ."\t{\n" ."\t\t`".$main::MAILDIRMAKE." ".$homedir."/".$default_maildir.".".$cil."`\n" ."\t}\n" ."\t".$akce." ".$homedir."/".$default_maildir."."; } else {$ret_val=$ret_val."to ".$homedir."/".$default_maildir.".";} } switch ($cil) { case '' {$ret_val=$ret_val."\n}\n\n";} # ~/Maildir/. else {$ret_val=$ret_val.$cil."/.\n}\n\n";} # ~/Maildir/.$cil/. } } } else{ #default konfig, ktery se pouzije, kdyz nejsou zadna akticni pravidla pro maildrop $ret_val = $ret_val."FROM='".$email."'\n"; $ret_val = $ret_val."to \"".$homedir."/".$default_maildir.".\"\n"; } return $ret_val; } # smaze stary configurak, ulozi novy vytvoreny pomoci fce get_cfg(); sub create_file(){ my $email = shift; my $config = shift; my $soubor = $main::DIR_CONFIG.$email; open(VYSTUP, ">$soubor"); print VYSTUP $config; }