|
|
researchv8 Dan Cross
/*
* notify user on mail arrival
*/
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <utmp.h>
#include "string.h"
/* imports */
extern char *thissys;
extern unsigned int alarm();
extern void
setnotify()
{
struct stat s;
char *ttyname();
char *p;
fstat(2, &s);
setgid(getgid());
setuid(getuid());
if ((p = ttyname(2)) && *p)
chmod(p, s.st_mode ^ S_IEXEC);
}
static int
blurbtime()
{
}
static void
blurb(tty, sender, maxsize)
char *tty, *sender;
{
FILE *f = NULL;
struct stat s;
char devtty[32];
strcpy(devtty, "/dev/");
strncat(devtty, tty, maxsize);
signal(SIGALRM, blurbtime);
alarm(30);
stat(devtty, &s);
if (s.st_mode & S_IEXEC) /* notify only if enabled */
if ((f = fopen(devtty, "w")) != NULL) {
fprintf(f, "\r\n[%s: mail from %s]\r\n\7", thissys,
sender);
}
if (f)
fclose(f);
alarm(0);
}
extern int
notify(name, sender)
char *name, *sender;
{
struct utmp entry;
FILE *f;
if ((f = fopen("/etc/utmp", "r")) == NULL)
return;
while (fread((char *)&entry, sizeof(entry), 1, f) == 1) {
if (strncmp(name, entry.ut_name, sizeof(entry.ut_name)) == 0)
blurb(entry.ut_line, sender, sizeof(entry.ut_line));
}
fclose(f);
}
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.