Thread Code schlanker machen? (10 answers)
Opened by Beeboop at 2009-03-23 01:36

Beeboop
 2009-03-23 01:36
#119701 #119701
User since
2009-03-23
4 Artikel
BenutzerIn
[default_avatar]
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)

View full thread Code schlanker machen?