|
|
researchv8 Dan Cross
#include <sys/types.h>
#include <sys/stat.h>
#include "mail.h"
/* configuration */
#define LOGFILE "/usr/spool/mail/mail.log"
#define LOGTEMP "/usr/spool/mail/mail.tmp"
/* imports */
void lock();
void unlock();
/* log a mail transmission */
logsend (to, from, at, tag)
char *to; /* receiver */
char *from; /* the sender */
char *at; /* time sent */
char *tag; /* type of mail */
{
# include <grp.h>
char buf[FROMLINESIZE];
int out, in;
long len;
long lseek();
lock(LOGFILE);
/* append to log */
out = open(LOGFILE, 2);
len = lseek(out, 0L, 2);
if (len > 32000) {
in = out;
out = creat(LOGTEMP, 0660);
if (out >= 0 && in >= 0 && lseek(in, -4000L, 2) >= 0) {
while ((len = read(in, buf, FROMLINESIZE)) > 0)
(void)write(out, buf, (unsigned int)len);
close(in);
close(out);
unlink(LOGFILE);
link(LOGTEMP, LOGFILE);
unlink(LOGTEMP);
} else {
close(in);
close(out);
}
out = open(LOGFILE, 2);
}
sprintf (buf, "%s %s From %s %s\n", tag, to, from, at);
(void)write(out, buf, strlen(buf));
close(out);
chmod(LOGFILE, 0666);
unlock ();
}
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.