Jemand zu Hause?Leser: 28
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71
#!/usr/bin/perl -w # In der main.cf wurde bei relayhost keine IP eingetragen, sondern der DynDns-Name. # Dadurch ist es nicht noetig, dort die IP zu aendern! my $name = "????????"; my $name2 = "/32"; my $name3 = "\#??????1";#manuell in der main.cf eingetragen, damit der Eintrag korrekt ausgelesen wird. my $name4 = "???????.com\ smtp:"; my $name5 = "?????????\ smtp:"; my $network1 = "mynetworks\ = "; my $network2 = "/32,127.0.0.0/8#??????1"; my $datei = "/etc/postfix/main.cf"; my $datei1 = "/etc/postfix/transport"; #IP-Adresse auslesen ($addr) = (gethostbyname("$name"))[4]; $addr1 = join(".", unpack("C4", $addr)); print ("$addr1\n"); MAIN1 (); MAIN2 (); #IP-Adresse in der main.cf aendern sub MAIN1 { open (DATEI, "<$datei")|| die "Kann die main.cf nicht oeffnen\n";; @DATEI = <DATEI>; close (DATEI); #nach IP-Adresse suchen foreach (@DATEI){ if ($_ =~/$name3/){ #Vergleichsoperator ~ s/$_/$network1$addr1$network2\n/; #ersetzen der Zeile } } } #Ausgabe in Datei, in Datei schreiben open (OUT, ">/etc/postfix/ma.txt"); print OUT @DATEI; close OUT; #IP-Adresse in der transport aendern sub MAIN2 { open (DATEI1, "<$datei1")|| die "Kann die transport nicht oeffnen\n";; @DATEI1 = <DATEI1>; close (DATEI1); #nach IP-Adresse suchen foreach (@DATEI1){ if ($_ =~/$name4/){ #Vergleichsoperator ~ s/$_/$name4$addr1\n/; #ersetzen der Zeile s= Ersetzoperator } if ($_ =~/$name5/){ #Vergleichsoperator ~ s/$_/$name5$addr1\n/; #ersetzen der Zeile s= Ersetzoperator } } } #Ausgabe in Datei, in Datei schreiben open (OUT, ">/etc/postfix/max.txt"); print OUT @DATEI1; close OUT; system "mv /etc/postfix/main.cf /etc/postfix/main.cf.old"; system "mv /etc/postfix/ma.txt /etc/postfix/main.cf"; system "mv /etc/postfix/transport /etc/postfix/transport.old"; system "mv /etc/postfix/max.txt /etc/postfix/transport"; #Neue transport schreiben system "postmap /etc/postfix/transport"; # Neue transport einlesen system "postfix reload"; # System neu starten exit;
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78
#!/usr/bin/perl -w use strict; use warnings; # In der main.cf wurde bei relayhost keine IP eingetragen, sondern der DynDns-Name. # Dadurch ist es nicht noetig, dort die IP zu aendern! my $main = "/etc/postfix/main.cf"; my $maintmp ="/etc/postfix/ma.txt"; my $transport = "/etc/postfix/transport"; my $transporttmp="/etc/postfix/max.txt"; my $search1=qx(mynetworks\s*=\s*([\d.]+?)/32\s*,\s*127.0.0/8); my $search2=qx((.+?(?:.com)?) smtp:); #IP-Adresse auslesen my $addr = join(".", unpack("C4", (gethostbyname("$name"))[4])); print ("$addr1\n"); MAIN1 (); MAIN2 (); MOVE(); exit(); #IP-Adresse in der main.cf aendern sub MAIN1 { open (IN, '<', $main) || die "Kann die $datei nicht oeffnen($!)\n"; #Ausgabe in Datei, in Datei schreiben open (OUT, '>', $maintmp) || die "Kann $tempdatei nicht oeffnen ($!)\n"; #nach IP-Adresse suchen while(<IN>) { if ($_ =~/$search1/) #Vergleichsoperator ~ { s/$1/$addr/; #ersetzen der Zeile } print OUT $_; } close (IN); close (OUT); } #IP-Adresse in der transport aendern sub MAIN2 { open (IN, '<', $transport)|| die "Kann $transport nicht oeffnen\n"; open (OUT, '>', $transporttmp)|| die "Kann die $transporttmp nicht oeffnen\n"; #nach IP-Adresse suchen while(<IN>) { if ($_ =~/$search2/) #Vergleichsoperator ~ { s/$1/$addr/; #ersetzen der Zeile s= Ersetzoperator } print OUT $_; } #Ausgabe in Datei, in Datei schreiben close(OUT); close (IN); } sub MOVE { unlink("$main.old") if(-e "$main.old"); rename($main "$main.old"); rename($maintmp $main); unlink("$transport.old") if(-e "$transport.old"); rename($transport "$transport.old"); rename($transporttmp $transport); system("postmap $transport"); # Neue transport einlesen system("postfix reload"); # System neu starten }
2009-03-23T00:36:00 BeeboopCode (perl): (dl )1 2 3 4#IP-Adresse auslesen ($addr) = (gethostbyname("$name"))[4]; $addr1 = join(".", unpack("C4", $addr)); print ("$addr1\n");
1 2 3 4 5 6 7
use Net::hostent; use Socket; my $h = gethost($name) or die 'Could not resolve host name'; my $addr1 = inet_ntoa($h->addr); print "$addr1\n";
IPC::System::Simple,
Path::Class2009-03-23T00:36:00 Beeboop
1 2 3
open (OUT, ">/etc/postfix/max.txt") or die "Could not open max.txt for write"; print OUT @DATEI1; close OUT or die "Could not write to max.txt";
IPC::System::Simple,
Path::Classopen (OUT, ">/etc/postfix/max.txt") or die "Could not open max.txt for write: $!";
system "postmap /etc/postfix/transport";
2009-03-23T20:17:14 BeeboopWenn die Zeile
Code: (dl )system "postmap /etc/postfix/transport";
abgearbeitet wird, bekomme ich den Fehler, das die Datei nicht gefunden wird, obwohl die "transport" zu dem Zeitpunkt da ist.
Dies aber nur, wenn ich mein Script per crontab ausführe.
IPC::System::Simple,
Path::Class1
2
3
4
5
6
7
use Net::hostent;
use Socket;
my $h = gethost($name)
or die 'Could not resolve host name';
my $addr1 = inet_ntoa($h->addr);
print "$addr1\n";
IPC::System::Simple,
Path::Class
use strict; use warnings;