ftp.novell.com
in:
/pub/netwire/novlib/08/ngm207.exe
ftp.uni-regensburg.de
in:
/pub/freeware/software/novlib/novlib/08/ngm207.exe
Die Funktionen der einzelnen (gepatchten) Skripten sind in Kapitel 5.2.3 erklärt, die aufgelisteten Patches sind in Form von Context-Diffs jeweils durch folgenden Befehl erstellt worden:
$ diff -c originalScript.pl gepatchtesScript.pl
Die aufgelisteten Context-Diffs können auf die perl-Skripten angewendet werden, indem sie dem Programm "patch" eingegeben werden:
# patch -p1 <patch
Für den Fall, daß patch nicht zur Verfügung steht, soll hier kurz auf den Aufbau von Context-Diffs eingegangen werden, damit diese zur Not auch per Hand installiert werden können.
Die ersten beiden Zeilen geben die Namen der Originaldatei und der modifizierten Datei an, eventuelle Pfadangaben können mit patch (Option: -p) automatisch entfernt werden. Die Originaldatei wird dabei mit vorangestellten Sternen ("***"), die modifizierte Datei mit den Änderungen für die vorhandene Originaldatei mit vorangestellten Minuszeichen ("---") gekennzeichnet:
*** contextdifftest Sun Jan 22 18:52:37 1995 --- contextdifftest.orig Sun Jan 22 18:53:21 1995Anschließend werden die Unterschiede zwischen den beiden Dateien aufgelistet, wobei die einzelnen Blöcke jeweils durch eine Reihe von Sternen ("***************") abgetrennt werden:
***************In den jeweiligen Diff-Blöcken wird zuerst die ursprüngliche Form der Datei aufgelistet, dann die entsprechenden Zeilen, wie sie nach der Modifikation vorliegen sollten. Nachdem der Patch angewandt ist, sollte also die zu modifizierende Datei mit dem zweiten Block übereinstimmen:
*** 2,7 **** int main(void) { ! printf("Hallo Welt\n"); return 0; } --- 2,7 ---- int main(void) { ! printf("Hello world\n"); return 0; }Am Anfang und Ende jedes Blockes werden jeweils drei Zeilen Kontext geliefert, die bei beiden Blöcken gleich sein sollten und das finden des entsprechenden Blocks in der zu modifizierenden Datei erleichtern sollen. Dabei sollen auch die Zeilennummern eine Hilfe sein, die jede Passage einleiten, ausschlaggebend ist jedoch der Kontext. Dadurch wird z. B. vermieden, daß die falschen Zeilen gepacht werden, wenn weiter oben Zeilen entfernt oder eingefügt wurden.
Die Veränderungen zwischen den beiden Dateien werden jeweils am Anfang einer Zeile mit einem der folgenden Zeichen markiert:
# cd /usr/lib/mail/surrcmd # patch -p1 <patch *** Ngate/smf-poll Sat Dec 10 03:06:45 1994 --- NGate+NGM/smf-poll Sat Dec 10 03:06:46 1994 *************** *** 44,59 **** local(@filenames) = readdir(DIR); closedir(DIR); for (@filenames) { next if /\./; # inverse sense used here because system returns exit value where # 0 = OK ! if (rename($_, "$_.$$")) { ! system ("smf-in", "$_.$$"); ! if ($?) { ! rename("$_.use", "$_.bad"); ! } ! else { ! unlink("$_.$$"); } } } --- 39,54 ---- local(@filenames) = readdir(DIR); closedir(DIR); for (@filenames) { + ($tmp="$$")=~s/(...)$/$1/; next if /\./; # inverse sense used here because system returns exit value where # 0 = OK ! if (rename($_, "$tmp")) { ! system ("smf-in", "$tmp"); ! if ($? >> 8) { ! rename("$tmp", "$_.bad"); ! } else { ! unlink("$tmp"); } } }
# cd /usr/lib/mail/surrcmd # patch -p1 <patch *** Ngate/smf-in Sat Dec 10 03:06:45 1994 --- UnixWare/mitNGM/smf-in Sat Dec 10 03:06:44 1994 *************** *** 34,40 **** next; } # inetGW is the name of the smtp side of the gateway ! if (/^INETGW="({^"]+)"/i) {$inetGW = $1; next;} } close(SMFDATA); --- 36,44 ---- next; } # inetGW is the name of the smtp side of the gateway ! if (/^INETGW="([^"]+)"/i) {$inetGW = $1; next;} } close(SMFDATA); *************** *** 79,101 **** $toFlag = $_[1]; $_ = $_[0]; study; ! # user@$mhsGWS (comment) {SMTP:user@domain} ! if (/$mhsGWS\s*($comment)?\s*{\s*(SMTP:)?(\S+).*}/i) { return "$4 $2"; } # user.app@host [intended] (comment) if (/ ^\s?($name8)\s*\.?\s*($name8)?\s*@\s*($name8)\s*(\[\s*($nam e8)\s*\])?\s*($comment)?/io) { $name = $1; ! return "Postmaster" if ($name =~ /-MaiSer-/i); # $app = $2 ? ".$2" : ""; $host = $5 ? $5 : $3; $host =~ tr/a-z/A-Z/; ! return "$name $6" if ($host =~ /$mhsGWS/io); ! return "$name $6" if ($toFlag eq 1); ! return "$name@$inetGW.$domain $6" if (($host eq $mhsWG) && ($domain)); ! return "$name@$inetGW $6" if ($host eq $mhsWG); ! return "$name@$host.$inetGW.$domain $6" if ($domain); ! return "$name@$host.$inetGW $6"; } # distribution list is legal alternate form if (/^\s?($name8)$/io) { --- 83,142 ---- $toFlag = $_[1]; $_ = $_[0]; study; ! #HF# WENN toFlag==2: user@host (comment) {MHS:user@domain} ! if ($toFlag eq 2){ ! if (/($comment)?\s*{\s*(MHS:)?(\S+).*}/i) { ! return "$3 $1"; ! } ! } ! #HF# user@$mhsGWS (comment) {MHS:user@domain} ! if (/$mhsGWS\s*($comment)?\s*{\s*(MHS:)?(\S+).*}/i) { return "$4 $2"; } # user.app@host [intended] (comment) if (/ ^\s?($name8)\s*\.?\s*($name8)?\s*@\s*($name8)\s*(\[\s*($nam e8)\s*\])?\s*($comment)?/io) { + print OURLOG "mhs2inet: 1<$1> 2<$2> 3<$3> 4<$4> 5<$5> 6<$6> 7<$7> 8<$8>\n"; $name = $1; ! if ($name =~ /-MaiSer-/i){ ! return "Postmaster"; ! } # $app = $2 ? ".$2" : ""; $host = $5 ? $5 : $3; $host =~ tr/a-z/A-Z/; ! if ($host =~ /$mhsGWS/io){ ! return "$name $6"; ! } ! if ($toFlag eq 1){ ! return "$name $6"; ! } ! if (($host eq $mhsWG) && ($domain)){ ! return "$name@$inetGW.$domain $6"; ! } ! if ($host eq $mhsWG){ ! return "$name@$inetGW $6"; ! } ! if ($domain){ ! return "$name@$host.$inetGW.$domain $6"; ! } ! return "$name@$host.$inetGW $6"; } # distribution list is legal alternate form if (/^\s?($name8)$/io) { *************** *** 124,135 **** die "$0: received null header, stopped" if ($#header < $[); # reformat header into $header ! if($domain) { ! $header = "Received: by $inetGW.$domain id MHS-id; ".`smf- date '+%a, %d %b %y %H:%M:%S %Z'`; ! } else { ! $header = "Received: by $inetGW id MHS-id; ".`smf-date '+%a, %d %b %y %H:%M:%S %Z'`; ! } ! for (@header) { study; if (/^Sender: (.+)/i) { --- 165,171 ---- die "$0: received null header, stopped" if ($#header < $[); # reformat header into $header ! $header = "Received: by $inetGW.$domain id MHS-id; ".`smf-date '+%a, %d %b %y %H:%M:%S %Z'`; for (@header) { study; if (/^Sender: (.+)/i) { *************** *** 168,178 **** if (/^Hop-count: (\d+)/i) { $hopCount = $1 + 1; next; } if (/^Error-report: (\d+)(.*)/i) { next if ($1 == 0 && $2 eq ""); } if (/^(Date: )(.?.)-(...)-(..)(.+)/i) { ! $header .= $1.`smf-date -n -s "$2 $3 $4$5" '+%a, %d %b %y %H:%M:%S %Z'`; next; } if (/^(Message-id: )(.+)/i) { $header .= "$1<$2@$inetGW.$domain>\n"; next; } --- 207,219 ---- if (/^Hop-count: (\d+)/i) { $hopCount = $1 + 1; next; } if (/^Error-report: (\d+)(.*)/i) { next if ($1 == 0 && $2 eq ""); } if (/^(Date: )(.?.)-(...)-(..)(.+)/i) { ! ($tmp=$5)=~s/GMT-1/GMT/g; #HF# ! $header .= $1.`smf-date -n -s "$2 $3 $4$tmp" '+%a, %d %b %y %H:%M:%S %Z'`; next; } if (/^(Message-id: )(.+)/i) { $header .= "$1<$2@$inetGW.$domain>\n"; next; } *************** *** 180,186 **** chop; @to = split(/,/); foreach (@to) { ! $_ = &mhs2inet($_, 1); } $tmp = "CC: " if ($tmp =~ /^Copies-To/i); $header .= $tmp.join(",\n\t", @to)."\n"; --- 221,228 ---- chop; @to = split(/,/); foreach (@to) { ! $_ = &mhs2inet($_, 2); #HF# evtl. toFlags=2 nur bei To: } $tmp = "CC: " if ($tmp =~ /^Copies-To/i); $header .= $tmp.join(",\n\t", @to)."\n";
# cd /usr/lib/mail/surrcmd/suid # patch -p1 <patch *** vorNGM/suid_smf-out Sun Dec 25 19:59:00 1994 --- mitNGM/suid_smf-out Sat Dec 10 03:06:40 1994 *************** *** 238,246 **** $tmp = $1; $cmd = ($tmp =~ s/\.Z$//) ? "uncompress" : "cat"; $attachmentName[++$#attachmentName] = $tmp; ! $fifo = "FIFO$$"; $attach = "a$$$#attachmentName"; ! system("/sbin/mknod $fifo p"); if (fork() == 0) { # child process #exec "$cmd <$fifo >$MV/mhs/mail/parcel/$attach" --- 238,250 ---- $tmp = $1; $cmd = ($tmp =~ s/\.Z$//) ? "uncompress" : "cat"; $attachmentName[++$#attachmentName] = $tmp; ! #HF# $fifo = "FIFO$$"; ! $fifo = "/tmp/FIFO$$"; # Netware kann keine Device-Nodes $attach = "a$$$#attachmentName"; ! $rc=system("/sbin/mknod $fifo p"); ! $rc/=256; ! print STDERR "system returned $rc: $!\n"; #HF# ! die if $rc; if (fork() == 0) { # child process #exec "$cmd <$fifo >$MV/mhs/mail/parcel/$attach"
# cd /usr/lib/mail/surrcmd # patch -p3 <patch *** Setups/Ngate/getDomain Sat Dec 10 03:06:45 1994 --- Setups/Ngate/vorNGM/getDomain Sat Dec 10 03:06:40 1994 *************** *** 1,17 **** ! #!/usr/gnu/bin/perl -- # -*-Perl-*- $ENV{"PATH"} = "/usr/lib/mail/surrcmd:/usr/bin:/bin"; - if (open(RESOLV, "</etc/resolv.conf")) { - while (<RESOLV>) { - # GATEWAY is the name of our gateway as known to the MHS world - if (/^domain (.+)/i) { printf "%s", $1; exit 0;} - } - close(RESOLV); - } if (open(MAILCNFG, "</etc/mail/mailcnfg")) { while (<MAILCNFG>) { # GATEWAY is the name of our gateway as known to the MHS world if (/^DOMAIN=(.+)/i) { printf "%s", $1; exit 0;} } close(MAILCNFG); } --- 1,21 ---- ! #!/usr/bin/perl -- # -*-Perl-*- ! ## ! ### Fixed 940915 HF ! ## ! # $ENV{"PATH"} = "/usr/lib/mail/surrcmd:/usr/bin:/bin"; if (open(MAILCNFG, "</etc/mail/mailcnfg")) { while (<MAILCNFG>) { # GATEWAY is the name of our gateway as known to the MHS world if (/^DOMAIN=(.+)/i) { printf "%s", $1; exit 0;} } close(MAILCNFG); + } + if (open(RESOLV, "</etc/resolv.conf")) { + while (<RESOLV>) { + # GATEWAY is the name of our gateway as known to the MHS world + if (/^domain (.+)/i) { printf "%s", $1; exit 0;} + } + close(RESOLV); }
ftp.novell.com
in:
/pub/netwire/novlib/08/msmail.exe
oder
ftp.uni-regensburg.de
in:
/pub/freeware/software/novlib/novlib/08/msmail.exe