|
|
1.1 root 1: #include <stdio.h>
2: #include <utmp.h>
3: #include <time.h>
4: #define USERS 50
5:
6: char mesg[3000];
7: int msize,sline;
8: struct utmp utmp[USERS];
9: char *strcpy();
10: char *strcat();
11: char who[9] = "???";
12: long clock;
13: struct tm *localtime();
14: struct tm *localclock;
15:
16: main(argc, argv)
17: char *argv[];
18: {
19: register i;
20: register char c;
21: register struct utmp *p;
22: FILE *f;
23:
24: if((f = fopen("/etc/utmp", "r")) == NULL) {
25: fprintf(stderr, "Cannot open /etc/utmp\n");
26: exit(1);
27: }
28: clock = time( 0 );
29: localclock = localtime( &clock );
30: fread((char *)utmp, sizeof(struct utmp), USERS, f);
31: fclose(f);
32: f = stdin;
33: if(argc >= 2) {
34: /* take message from unix file instead of standard input */
35: if((f = fopen(argv[1], "r")) == NULL) {
36: fprintf(stderr,"Cannot open %s\n", argv[1]);
37: exit(1);
38: }
39: }
40: while((i = getc(f)) != EOF) mesg[msize++] = i;
41: fclose(f);
42: sline = ttyslot(2); /* 'utmp' slot no. of sender */
43: if (sline) {
44: for (i=0;c=utmp[sline].ut_name[i];i++)
45: who[i]=c;
46: who[i] = '\0'; /* sender initials */
47: }
48: for(i=0; i<USERS; i++) {
49: p = &utmp[i];
50: if(p->ut_name[0] == 0)
51: continue;
52: sleep(1);
53: sendmes(p->ut_line);
54: }
55: exit(0);
56: }
57:
58: sendmes(tty)
59: char *tty;
60: {
61: register i;
62: char t[50], buf[BUFSIZ];
63: register char *cp;
64: register int c, ch;
65: FILE *f;
66:
67: i = fork();
68: if(i == -1) {
69: fprintf(stderr, "Try again\n");
70: return;
71: }
72: if(i)
73: return;
74: strcpy(t, "/dev/");
75: strcat(t, tty);
76:
77: if((f = fopen(t, "w")) == NULL) {
78: fprintf(stderr,"cannot open %s\n", t);
79: exit(1);
80: }
81: setbuf(f, buf);
82: fprintf(f, "\nBroadcast Message from %s (%s) at %d:%02d ...\r\n\n"
83: ,who, utmp[sline].ut_line
84: , localclock -> tm_hour , localclock -> tm_min );
85: /* fwrite(mesg, msize, 1, f); */
86: for (cp = mesg, c = msize; c-- > 0; cp++) {
87: ch = *cp;
88: if (ch == '\n')
89: putc('\r', f);
90: putc(ch, f);
91: }
92:
93: /*
94: * Bitchin'.
95: */
96:
97: exit(0);
98: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.