Thread Code schlanker machen?
(10 answers)
Opened by Beeboop at 2009-03-23 01:36
Hallo,
ich betreibe einen E-Mailserver im Internet, der mir die ankommenden Nachrichten auf meine dynamische IP weiterleitet. Damit Änderungen an der IP im Mailserver eingetragen werden, habe ich ein Skript geschrieben, das dies alle 15 Min. überprüft und macht. Es ist noch nicht vollkommen ausgereift; wenn IP gleich soll er nichts machen; aber ansonsten funktioniert es. Ich frage hier, ob man den Code nicht kleiner machen könnte, da ich ein Newbie in Sachen Perl bin. ??? bedeuten, meine IP oder Name, den ich nicht hier posten kann. Vielen Dank an alle, die mir antworten. Code (perl): (dl
)
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; betterworld: Code-Tags zu Perl-Tags gemacht. Last edited: 2009-03-23 02:03:49 +0100 (CET) |