#!/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() { 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() { 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 }