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";
2009-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";
open (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.
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";