From 3cc84d97d2895ec7c675ce4136e4918255cf02d2 Mon Sep 17 00:00:00 2001 From: Mario Fetka Date: Sun, 13 Nov 2011 00:46:51 +0100 Subject: [PATCH] marsmail-0.1 --- marsmail.exe | Bin 0 -> 8608 bytes marsmail.pas | 174 ++++++++++++++++++++++++++++++++++++++++++++++++++ ohmail | 11 ++++ ohmessage | 24 +++++++ ohpostme | 18 ++++++ ohsendnt | 26 ++++++++ pmail.bat | 16 +++++ pmail.cfg | Bin 0 -> 200 bytes pmdflts.ini | 175 +++++++++++++++++++++++++++++++++++++++++++++++++++ pmgate.sys | Bin 0 -> 1024 bytes unix2dos.exe | Bin 0 -> 17096 bytes zero.txt | 0 12 files changed, 444 insertions(+) create mode 100755 marsmail.exe create mode 100755 marsmail.pas create mode 100755 ohmail create mode 100755 ohmessage create mode 100755 ohpostme create mode 100755 ohsendnt create mode 100755 pmail.bat create mode 100755 pmail.cfg create mode 100755 pmdflts.ini create mode 100755 pmgate.sys create mode 100755 unix2dos.exe create mode 100755 zero.txt diff --git a/marsmail.exe b/marsmail.exe new file mode 100755 index 0000000000000000000000000000000000000000..69efa4986f69ba4342ca30a85ec821b70c9a4fa9 GIT binary patch literal 8608 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%0A}h6zHsOIn`?S>6 zDhxGk#TGMOgD6a8b5V8^7u`*QUyNZ3j*)sy8}Zm;?xV}HHjb_}JZoU#q!&5(^ye$t zB?49u{rW=F_GX-^=fa@bKRVPL82_d9&KKeEo%?Rn6Tcci@8fX|+bK)%I6UR={{a}5 B|4RS> literal 0 HcmV?d00001 diff --git a/marsmail.pas b/marsmail.pas new file mode 100755 index 0000000..bf41866 --- /dev/null +++ b/marsmail.pas @@ -0,0 +1,174 @@ +program Marsmail; +uses dos; + +var mailfile, numfile, outfile: text; + number, miline, moline, sl, slc: string; {mail-in, mail-out} + nfile, odir, mfile: string; {numberfile, output dir, mailfile} + numbint: longint; + o, code, mi, i,j: integer; {mailindex} + prevline, shortline,v : boolean; {v=verbose} + + +Function FileExists(FileName: String): Boolean; +{ Boolean function that returns True if the file exists;otherwise, + it returns False. Closes the file if it exists. } +var + F: text; +begin + {$I-} + Assign(F, FileName); + FileMode := 0; { Set file access to read only } + Reset(F); + Close(F); + {$I+} + FileExists := (IOResult = 0) and (FileName <> ''); +end; { FileExists } + + +Begin +v:=false; +nfile:='i:\pmail\in\numfile'; +mfile:='i:\pmail\in\mailfile.dos'; +odir:='i:\pmail\in'; +for i:=1 to paramcount do +begin + sl:=paramstr(i); + for j:=1 to length(sl) do sl[j]:=upcase(sl[j]); + if (pos('/N=',sl)=1) then nfile:=copy(sl,3,length(sl)-3); + if (pos('/O=',sl)=1) then odir:=copy(sl,3,length(sl)-3); + if (pos('/M=',sl)=1) then mfile:=copy(sl,3,length(sl)-3); + if (pos('/V',sl)=1) then v:=true; + if (pos('/?',sl)=1) or (pos('/H',sl)=1) or (pos('/HELP',sl)=1) then + begin + Writeln('Copyright 1996/9 Dud software'); + Writeln; + Writeln('Purpose: Creates *.cnm files from a unix mail file for Pegasus'); + Writeln('Usage: marsmail.exe [/n=x:\numb\file] [/m=y:\mail\file]'); + Writeln(' [/o=z:\base\out\dir] [/v] [/?|h|help]'); + Writeln('Where:'); + Writeln(' /n = numberfile, /m=singlemailfile, /o=outputbasedir'); + Writeln(' /v = verbose messaging mode, /?|/h|/help = this help screen'); + writeln('And: numberfile contains a single 8 digit number e.g. 00000019'); + writeln(' singlemailfile is the unix /var/spool/mail/userfile unix2dos'); + writeln(' converted. outdir is the dir where *.cnm files should be created'); + writeln(' without the trailing \'); + writeln; + writeln; + writeln; + halt(2); + end; +end; + +{ Open the numfile to read in a number } + + if v then writeln('Opening Number file...'); + if FileExists(nfile) then + Begin + {$I-} + assign (numfile,nfile); + reset(numfile); + if doserror >0 then begin writeln('Error reading '+nfile); halt(1); end; + {$I+} + if v then writeln('Reading number file...'); + readln(numfile,number); + close(numfile); + end + else + Begin + assign (numfile,nfile); + {$I-} + Rewrite(numfile); + {$I+} + if doserror >0 then begin writeln('Error rewriting '+nfile); halt(1); end; + number:='00000000'; + if v then writeln('Creating a new number file'); + writeln(numfile,number); + Close(numfile); + end; + val(number,numbint,code); + numbint:=numbint+1; + str(numbint:8,number); + if v then writeln('Converting spaces to zeroes'); + for i:=1 to length(number) do if number[i]=' ' then number[i]:='0'; + + +{ Open the converted mailfile and start reading it } + slc:='|/-\|/-\'; + sl:='|'; + o:=2; + assign(mailfile,mfile); + assign(outfile,odir+'\'+number+'.cnm'); + {$I-} + if v then writeln('Opening mailfile for reading...'); + reset(mailfile); + {$I+} + if doserror >0 then begin writeln('Error opening '+mfile); halt(1); end; + if eof(mailfile) then + begin + close(mailfile); + halt(3); + end; + {$I-} + if v then writeln('Opening '+odir+'\'+number+'.cnm file for writing....'); + rewrite(outfile); + {$I+} + if doserror >0 then begin writeln('Error rewriting '+odir+'\'+number+'.cnm'); halt(1); end; + mi:=0; + shortline:=false; + writeln('Creating mail messages from UnixMail file to Pegasus mail messages.'); + write('Working \'); + if v then write(' Line:'); + + while not eof(mailfile) do + begin + readln(mailfile,miline); + if v then write(mi,':'); + prevline:=shortline; + shortline:=false; + + if (length(miline)<2) then + begin + shortline:=true; + end; + mi:=mi+1; + if ( (not v) and ((mi mod 10)=0)) then + begin + write(char(8)+sl); + sl:=slc[o]; + o:=o+1; + if o=9 then o:=1; + end; + if (mi>5) and (prevline=true) then begin + if (((pos('Received:',miline)=1) + or (pos('Return-Path:', miline)=1) + or (pos('From ',miline)=1) + or (pos('From:',miline)=1)) + and (prevline=true)) then + begin {to flush file and start a new one} + close(outfile); + numbint:=numbint+1; + str(numbint:8,number); + for i:=1 to length(number) do if number[i]=' ' then number[i]:='0'; + assign(outfile,odir+'\'+number+'.cnm'); + rewrite(outfile); + if v then writeln; + if v then writeln('Finished with message no ',numbint-1,'...'); + mi:=0; + end; + end; + writeln(outfile,miline); + end; + if v then writeln; + if v then writeln('Closing output files'); + close(outfile); + if v then writeln('Closing mail file'); + close(mailfile); + assign (numfile,nfile); + if v then writeln('Updating number file'); + rewrite (numfile); + writeln(numfile,number); + close(numfile); + writeln(' '); + if v then writeln('Program finished.'); +end. {of program} + diff --git a/ohmail b/ohmail new file mode 100755 index 0000000..aa55fda --- /dev/null +++ b/ohmail @@ -0,0 +1,11 @@ +#!/bin/bash +while [ true ] ; +do + for x in `cat /etc/ohmaillist` + do + /usr/sbin/ohmessage $x + sleep 1 + done + + sleep 5 +done diff --git a/ohmessage b/ohmessage new file mode 100755 index 0000000..e4fbe2e --- /dev/null +++ b/ohmessage @@ -0,0 +1,24 @@ +#!/bin/bash + s1="`cat /var/spool/mail/$1 | grep Subject | wc -l`" + let s2=`cat /tmp/mail/$1` + if let "$s1 > $s2" + then + if smbstatus | grep " $1 " > /dev/null + then + for machine in `smbstatus | grep " $1 " | awk ' {print $5}' | sort | uniq` + do + echo "$1 has new mail `grep From: /var/spool/mail/$1 | tail --lines=1`" | smbclient -M $machine 2>&1 > /dev/null + echo $s1 > /tmp/mail/$1 + echo "`date` -- Sent notification to SMB user $1 at $machine" >> /var/log/ohmessage.log + done + elif /usr/local/bin/nwuserlist -S ohamster -U ohmessage -P sendthemall | grep -i " $1 " > /dev/null + then + /usr/local/bin/nsend -S ohamster -U ohmessage -P sendthemall $1 "New mail `grep From: /var/spool/mail/$1 | tail --lines=1`" + echo $s1 > /tmp/mail/$1 + echo "`date` -- Sent notification to NetWare user $1" >> /var/log/ohmessage.log + fi + else + echo $s1 > /tmp/mail/$1 +fi + + diff --git a/ohpostme b/ohpostme new file mode 100755 index 0000000..a9c8e6b --- /dev/null +++ b/ohpostme @@ -0,0 +1,18 @@ +#!/bin/bash + +#This script runs through all the user dirs to collect mail that needs to be sent. +while [ true ] ; +do + cd /hamster/home + for l in `cat /etc/ohmaillist` + do + for x in `ls $l/pmail/out` + do + cat "$l/pmail/out/$x" | sed "1,4d" | /usr/sbin/sendmail -f "<$l@eng.rau.ac.za>" -t + rm "$l/pmail/out/$x" + echo "`date` -- Mail message $x send from $l mailbox" >> /var/log/ohpostme.log + done + sleep 1 + done + sleep 5 +done diff --git a/ohsendnt b/ohsendnt new file mode 100755 index 0000000..07ce1af --- /dev/null +++ b/ohsendnt @@ -0,0 +1,26 @@ +#!/bin/bash + +messge=$1 +machs=$2 + +if [ "$messge" = "" ]; then + echo "Usage: ohsendnt \"Message\" \"machine.list\"|ALL" + echo "e.g. ohsendnt \"Hello!\" \"dud.rau.ac.za\"" + exit; +fi + +if [ "$machs" = "ALL" ]; then + for l in `smbstatus | awk '{ print $5 }' | sed '/machine/d' | sort | uniq | sed '1 d'` + do + echo "$messge" | smbclient -M $l > /dev/nul + d=`date` + echo "Message $messge sent to NT user $l on $d" >> /var/log/ohsentnt.log + done +else + for l in $machs + do + echo "$messge" | smbclient -M $l > /dev/nul + d=`date` + echo "Message $messge sent to NT user $l on $d" >> /var/log/ohsentnt.log + done +fi diff --git a/pmail.bat b/pmail.bat new file mode 100755 index 0000000..9af239c --- /dev/null +++ b/pmail.bat @@ -0,0 +1,16 @@ +@echo off +if not exist i:\pmail\nul mkdir i:\pmail > nul +if not exist i:\pmail\out\nul mkdir i:\pmail\out > nul +if not exist i:\pmail\in\nul mkdir i:\pmail\in > nul +set pmuser=%name% +:SzLoop +Echo Please wait -- converting mail from unix to dos format... +rem chksz f:\unixmail\%name% %temp%\%name% +unix2dos f:\unixmail\%name% > i:\pmail\in\mailfile.dos +rem chksz f:\unixmail\%name% %temp%\%name% -c +rem IF Errorlevel 1 goto SzLoop +copy j:\dos\net\pmail\zero.txt f:\unixmail\%name% > nul +j:\dos\net\pmail\marsmail.exe +i: +cd \pmail\in +j:\dos\net\pmail\pmail.exe -a diff --git a/pmail.cfg b/pmail.cfg new file mode 100755 index 0000000000000000000000000000000000000000..921da340227071918c2cc788efe88dcaa329a219 GIT binary patch literal 200 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