*** /tmp/,RCSt1020325 Wed Jul 1 13:38:12 1987 --- Makefile Wed Jul 1 13:10:53 1987 *************** *** 10,22 **** # 217-333-7937 # ! BIN = /usr/local MSTDIR = /usr/spool/notes ARCHDIR = /usr/spool/oldnotes NET = /usr/bin AUTOSEQ = autoseq NOTES = notes ! NOTESUID = 10 NOTESGRP = notes ANON = anon ANONUID = 4 --- 10,22 ---- # 217-333-7937 # ! BIN = /usr/local/bin MSTDIR = /usr/spool/notes ARCHDIR = /usr/spool/oldnotes NET = /usr/bin AUTOSEQ = autoseq NOTES = notes ! NOTESUID = 24 NOTESGRP = notes ANON = anon ANONUID = 4 *************** *** 124,130 **** pattern.o perms.o recsio.o startup.o expand.o NFTIMESTAMP = check.o cursor.o datein.o gname.o gtime.o misc.o miscio.o \ pattern.o permit.o recsio.o startup.o times.o expand.o \ ! getdate.o perms.o ftime.o NFXMIT = check.o cursor.o dmpnote.o dmpresp.o getnet.o gname.o \ gtime.o lrsp.o misc.o miscio.o next.o nfalias.o nfsend.o \ pageout.o pattern.o permit.o perms.o recsio.o \ --- 124,130 ---- pattern.o perms.o recsio.o startup.o expand.o NFTIMESTAMP = check.o cursor.o datein.o gname.o gtime.o misc.o miscio.o \ pattern.o permit.o recsio.o startup.o times.o expand.o \ ! getdate.o perms.o NFXMIT = check.o cursor.o dmpnote.o dmpresp.o getnet.o gname.o \ gtime.o lrsp.o misc.o miscio.o next.o nfalias.o nfsend.o \ pageout.o pattern.o permit.o perms.o recsio.o \ *************** *** 216,224 **** -chgrp $(NOTESGRP) $(UTILITY)/coredump # generate the available notesfile file here - only once! echo "available notesfiles" > $(UTILITY)/avail.notes touch $(UTILITY)/Dflt-Seq ! -chown $(NOTES) $(UTILITY)/avail.notes $(UTILITY)/Dflt-Seq ! -chgrp $(NOTESGRP) $(UTILITY)/avail.notes $(UTILITY)/Dflt-Seq chmod 664 $(UTILITY)/avail.notes $(UTILITY)/Dflt-Seq touch spool @echo Notesfile Spool directories ready --- 216,225 ---- -chgrp $(NOTESGRP) $(UTILITY)/coredump # generate the available notesfile file here - only once! echo "available notesfiles" > $(UTILITY)/avail.notes + cp moderators $(UTILITY)/moderators touch $(UTILITY)/Dflt-Seq ! -chown $(NOTES) $(UTILITY)/moderators $(UTILITY)/avail.notes $(UTILITY)/Dflt-Seq ! -chgrp $(NOTESGRP) $(UTILITY)/moderators $(UTILITY)/avail.notes $(UTILITY)/Dflt-Seq chmod 664 $(UTILITY)/avail.notes $(UTILITY)/Dflt-Seq touch spool @echo Notesfile Spool directories ready *** /tmp/,RCSt1020338 Wed Jul 1 13:38:22 1987 --- dropt.c Wed Jul 1 12:54:59 1987 *************** *** 24,29 **** --- 24,31 ---- * -4 if the user hit cntrl d ( to total exit) * * original author/outliner : Ray Essick may 29, 1981 + * added the "moderated" flag:Rich $alz aug 19, 1985 + * added "local" flag, toggle, YorN: Rich $alz aug 19, 1985 * */ *************** *** 35,43 **** netrow, /* networked */ expirerow, /* expire age */ longrow, /* longest ok text */ ! worksetrow; /* working set */ static int lastrow; direct (io) struct io_f *io; { int i; /* scratch */ --- 37,51 ---- netrow, /* networked */ expirerow, /* expire age */ longrow, /* longest ok text */ ! worksetrow, /* working set */ ! modrow, /* moderated flag */ ! localrow; /* local flag */ static int lastrow; + #define YorN(c) ((c) != 0 ? YES : NO) + static char YES[] = "YES"; + static char NO[] = "NO "; + direct (io) struct io_f *io; { int i; /* scratch */ *************** *** 113,143 **** break; /* skipt out of the loop */ case 'a': /* toggle anonymous option */ ! locknf (io, DSCRLOCK); /* lock the thing for a minute */ ! getdscr (io, &io -> descr); /* get up to date descriptor */ ! if (io -> descr.d_stat & ANONOK) ! io -> descr.d_stat &= NOT ANONOK; ! else ! io -> descr.d_stat |= ANONOK; ! putdscr (io, &io -> descr); ! unlocknf (io, DSCRLOCK); ! at (anonrow, 18); ! printf (io -> descr.d_stat & ANONOK ? "ON " : "OFF"); ! redraw = 0; break; case 'A': /* Archive option */ ! locknf (io, DSCRLOCK); /* lock the thing for a minute */ ! getdscr (io, &io -> descr); /* get up to date descriptor */ ! if (io -> descr.d_stat & ISARCH) ! io -> descr.d_stat &= NOT ISARCH; ! else ! io -> descr.d_stat |= ISARCH; ! putdscr (io, &io -> descr); ! unlocknf (io, DSCRLOCK); ! at (archrow, 18); ! printf (io -> descr.d_stat & ISARCH ? "YES" : "NO "); ! redraw = 0; break; case 'l': /* message length */ --- 121,131 ---- break; /* skipt out of the loop */ case 'a': /* toggle anonymous option */ ! toggle(io, ANONOK, anonrow); break; case 'A': /* Archive option */ ! toggle(io, ISARCH, archrow); break; case 'l': /* message length */ *************** *** 173,183 **** unlocknf (io, DSCRLOCK); /* all done ... */ at (longrow, 27); printf ("%ld bytes ", io -> descr.d_longnote); - redraw = 0; break; case 'c': /* compress the notefile */ - redraw = 0; if (io -> descr.d_stat & OPEN) { at (lastrow, 10); --- 161,169 ---- *************** *** 265,271 **** printf ("%ld days ", io -> descr.d_archtime); break; } - redraw = 0; break; case 'W': /* working Set size */ --- 251,256 ---- *************** *** 311,317 **** default: printf ("%ld Notes ", io -> descr.d_workset); } - redraw = 0; break; case 'E': /* keep/delete/default */ --- 296,301 ---- *************** *** 348,354 **** printf ("UNKNOWN"); break; } - redraw = 0; break; case 'D': /* Archive dirmsg */ --- 332,337 ---- *************** *** 397,435 **** printf ("UNKNOWN "); break; } - redraw = 0; break; case 'o': /* toggle open status */ ! locknf (io, DSCRLOCK); ! getdscr (io, &io -> descr); ! if (io -> descr.d_stat & OPEN) ! io -> descr.d_stat &= NOT OPEN; ! else ! io -> descr.d_stat |= OPEN; ! putdscr (io, &io -> descr); ! unlocknf (io, DSCRLOCK); ! at (openrow, 18); ! printf (io -> descr.d_stat & OPEN ? "OPEN " : "CLOSED"); ! redraw = 0; break; case 'n': /* toggle network status */ ! locknf (io, DSCRLOCK); ! getdscr (io, &io -> descr); ! if (io -> descr.d_stat & NETWRKD) ! { ! io -> descr.d_stat &= NOT NETWRKD; ! } ! else ! { ! io -> descr.d_stat |= NETWRKD; ! } ! putdscr (io, &io -> descr); ! unlocknf (io, DSCRLOCK); ! at (netrow, 18); ! printf (io -> descr.d_stat & NETWRKD ? "YES" : "NO "); ! redraw = 0; break; --- 380,401 ---- printf ("UNKNOWN "); break; } break; case 'o': /* toggle open status */ ! toggle (io, OPEN, openrow); break; + case 'M': /* toggle moderated status */ + toggle (io, MODERATED, modrow); + break; + + case 'L': /* toggle local status */ + toggle(io, LOCAL, localrow); + break; + case 'n': /* toggle network status */ ! toggle(io, NETWRKD, netrow); break; *************** *** 530,536 **** default: printf ("\07"); - redraw = 0; goto getkey; /* hit a bad key */ } --- 496,501 ---- *************** *** 559,568 **** printf (io -> descr.d_stat & OPEN ? "OPEN " : "CLOSED"); at (netrow = atrow++, atcol); printf ("(n) Networked: "); /* at(5,18); */ ! printf (io -> descr.d_stat & NETWRKD ? "YES" : "NO "); at (archrow = atrow++, atcol); printf ("(A) Is Archive: "); /* at(6,18); */ ! printf (io -> descr.d_stat & ISARCH ? "YES" : "NO"); at (expirerow = atrow++, atcol); printf ("(e) Expiration Threshold: "); /* at (6,27); */ switch ((int) (io -> descr.d_archtime)) --- 524,539 ---- printf (io -> descr.d_stat & OPEN ? "OPEN " : "CLOSED"); at (netrow = atrow++, atcol); printf ("(n) Networked: "); /* at(5,18); */ ! printf (YorN(io -> descr.d_stat & NETWRKD)); at (archrow = atrow++, atcol); printf ("(A) Is Archive: "); /* at(6,18); */ ! printf (YorN(io -> descr.d_stat & ISARCH)); ! at (modrow = atrow++, atcol); ! printf ("(M) Moderated: "); ! printf (YorN(io -> descr.d_stat & MODERATED)); ! at (localrow = atrow++, atcol); ! printf ("(L) Local: "); ! printf (YorN(io -> descr.d_stat & LOCAL)); at (expirerow = atrow++, atcol); printf ("(e) Expiration Threshold: "); /* at (6,27); */ switch ((int) (io -> descr.d_archtime)) *************** *** 640,646 **** atrow = 4; atcol = 40; at (atrow++, atcol); ! printf ("Policy Note Exists: %s", io -> descr.d_plcy ? "YES" : "NO"); at (atrow++, atcol); printf ("Next note in slot: %d", io -> descr.d_nnote + 1); at (atrow++, atcol); --- 611,617 ---- atrow = 4; atcol = 40; at (atrow++, atcol); ! printf ("Policy Note Exists: %s", YorN(io -> descr.d_plcy)); at (atrow++, atcol); printf ("Next note in slot: %d", io -> descr.d_nnote + 1); at (atrow++, atcol); *************** *** 655,658 **** --- 626,646 ---- if (atrow > lastrow) lastrow = atrow; lastrow++; + } + + toggle(io, flag, row) + struct io_f *io; + int flag; + int row; + { + locknf (io, DSCRLOCK); + getdscr (io, &io -> descr); + if (io -> descr.d_stat & flag) + io -> descr.d_stat &= NOT flag; + else + io -> descr.d_stat |= flag; + putdscr (io, &io -> descr); + unlocknf (io, DSCRLOCK); + at (row, 18); + printf (YorN(io -> descr.d_stat & flag)); } *** /tmp/,RCSt1020349 Wed Jul 1 13:38:31 1987 --- gtext.c Wed Jul 1 12:56:31 1987 *************** *** 1,5 **** --- 1,7 ---- #include "parms.h" #include "structs.h" + #include + #include #ifdef RCSIDENT static char rcsid[] = "$Header: gtext.c,v 1.7 87/07/01 12:39:33 paul Locked $"; *************** *** 17,24 **** --- 19,31 ---- * modified again: rbe 12 nov 81 fix to version 7 and general shtuff * modified a third time to add insert-text for user * Ray Essick December 1981 + * modified to add non-portable way of appending a signature file. + * Rich $alz July, 1985 + * did signatures the "right" way (better, at least) - LOCAL flag + * Rich $alz August, 1985 */ + extern char hissig[]; long gettext (io, where, preface, editflag) struct io_f *io; struct daddr_f *where; /* where we left it */ *************** *** 29,34 **** --- 36,42 ---- register int c; long count; char fn[20]; /* scratch file name */ + struct stat sbuf; sprintf (fn, "/tmp/nf%d", getpid ()); x ((scr = fopen (fn, "w")) == NULL, "gettext: create scratch"); *************** *** 69,74 **** --- 77,106 ---- { unlink (fn); /* might just be protections */ return ((long) 0); + } + + (void) fstat (fileno (scr), &sbuf); + if (sbuf.st_size > (off_t) 0 && hissig[0] + && io -> descr.d_stat & NETWRKD && !(io -> descr.d_stat & LOCAL)) + { + c = askyn ("Add signature (y/n): "); + printf ("\r \r"); + if (c == 'y') + { + FILE * siggy; + + if ((siggy = fopen (hissig, "r")) == NULL) + printf ("Can't find %s", hissig); + else + { + /* Flop to append mode, append, flip back to read */ + freopen (fn, "a", scr); + while ((c = getc (siggy)) != EOF) + putc (c, scr); + fclose (siggy); + freopen (fn, "r", scr); + } + } } count = pagein (io, scr, where); /* move text in */ *** /tmp/,RCSt1020354 Wed Jul 1 13:38:35 1987 --- index.c Wed Jul 1 12:55:09 1987 *************** *** 20,27 **** --- 20,33 ---- * * Original Coding: Rob Kolstad Winter 1980 * modifications: Ray Essick December 1981 + * added MODERATED code: Rich $alz August 1985 + * added LOCAL flag: Rich $alz August 1985 */ + static char YES[] = "YES"; + static char NO[] = "NO "; + #define YorN(c) ((c) != 0 ? YES : NO) + indx (io, firstdis, lastdis, respnum) struct io_f *io; int *firstdis, *************** *** 58,66 **** case 'W': /* this too shall write a note */ case 'w': /* write a note */ ! return addnote (io, NULL, "Edit Note text:", "Note Title: ", NULL, EDIT); ! /* do it */ case 'B': /* bitch, bitch, bitch */ if (init (&io2, GRIPES) < 0) /* no gripe file */ { --- 64,77 ---- case 'W': /* this too shall write a note */ case 'w': /* write a note */ ! if ( ! (io -> descr.d_stat & MODERATED ) ) ! return addnote (io, NULL, "Edit Note text:", "Note Title: ", NULL, EDIT); ! if (askyn ("Moderated; send mail to moderator? ") == 'y') ! mailit(io, (struct daddr_f *)0, (struct auth_f *)0, ! (struct when_f *)0, (char *)0, MODERATED, 0); ! return (-1); + case 'B': /* bitch, bitch, bitch */ if (init (&io2, GRIPES) < 0) /* no gripe file */ { *************** *** 167,175 **** else { at (0, PROMPTMSGX); ! printf (" Anonymous: %s Networked: %s", ! (io -> descr.d_stat & ANONOK) ? "YES" : "NO", ! (io -> descr.d_stat & NETWRKD) ? "YES" : "NO"); continue; } --- 178,190 ---- else { at (0, PROMPTMSGX); ! printf ( ! "Anonymous: %s Networked: %s Moderated: %s Local: %s", ! YorN (io -> descr.d_stat & ANONOK), ! YorN (io -> descr.d_stat & NETWRKD), ! YorN (io -> descr.d_stat & MODERATED), ! YorN (io -> descr.d_stat & LOCAL)); ! continue; } *** /tmp/,RCSt1020366 Wed Jul 1 13:38:40 1987 --- mailit.c Wed Jul 1 12:55:11 1987 *************** *** 20,25 **** --- 20,27 ---- * modified: Ray Essick December 1981. * modified again: Thanks to Malcolm Slaney of Purdue EE dept. * added the SUPERMAILER processing. May 25, 1982 + * added code to handle the MODERATED flag. + * rich $alz, mirror systems, august 19, 1985 * */ *************** *** 38,51 **** char fn[20]; /* hold scratch file name */ int f; char *p; - int i; FILE * txtfile; #ifdef SUPERMAILER char subject[TITLEN + 20]; /* mailer subject */ #endif ! if (toauth) { if (strcmp (author -> aname, "Anonymous") == 0) { printf ("Can't send to Anonymous\n"); --- 40,70 ---- char fn[20]; /* hold scratch file name */ int f; char *p; FILE * txtfile; #ifdef SUPERMAILER char subject[TITLEN + 20]; /* mailer subject */ #endif ! if (toauth == MODERATED) { + f = 1; + toauth = 0; + } + else + f = 0; + if (f && io -> descr.d_stat & MODERATED) + { + if (modaddress (io -> nf, whoto) == 1) + { + at (0, 1); + printf ("\nComplain to a guru; can't find moderator!\007\n"); + fflush (stdout); + sleep (1); + return (-1); /* no letter sent */ + } + } + else if (toauth) + { if (strcmp (author -> aname, "Anonymous") == 0) { printf ("Can't send to Anonymous\n"); *************** *** 53,62 **** sleep (2); return (-1); } - } - - if (toauth) - { if (strcmp (System, author -> asystem) != 0) { #ifdef USERHOST --- 72,77 ---- *************** *** 189,192 **** --- 204,246 ---- #endif SUPERMAILER return 0; + } + + modaddress (notesname, address) + char *notesname; + char *address; + { + char buff[WDLEN]; + register FILE *mods; + register char *p; + + sprintf (buff, "%s/%s/moderators", MSTDIR, UTILITY); + + if ((mods = fopen (buff, "r")) == NULL) + { + printf ("Can't open moderators file!\n"); + return 1; + } + + while (fgets ( buff, sizeof buff, mods)) + { + /* read lines of the form path; blanks and lines */ + /* starting with "#" are comments. */ + if (buff[0] == '\0' || buff[0] == '#' + || (((p=index(buff, ' ')) == NULL) && (p=index(buff, '\t')) == NULL)) + continue; + *p++ = '\0'; /* split into halves */ + while (*p == ' ' || *p == '\t') + p++; /* skip whitespace */ + if (!strcmp (notesname, buff)) + { + strcpy (address, p); + address[strlen(address) - 1] = '\0'; /* kill the \n */ + fclose (mods); + return 0; + } + } + + fclose (mods); + return 1; } *** /tmp/,RCSt1020372 Wed Jul 1 13:38:45 1987 --- main.c Wed Jul 1 12:55:13 1987 *************** *** 16,27 **** * Original author: Rob Kolstad Winter, 1980. * Modifications: Ray Essick June, 1981. * Modified more: Ray Essick May, 1982. * - * */ static int seqon = NOSEQ; /* sequencer mode */ main (argc, argv) char **argv; --- 16,29 ---- * Original author: Rob Kolstad Winter, 1980. * Modifications: Ray Essick June, 1981. * Modified more: Ray Essick May, 1982. + * modified: Rich $alz July, 1985 + * To add the hissig (signature file) variable. * */ static int seqon = NOSEQ; /* sequencer mode */ + char hissig[WDLEN]; /* signature file */ main (argc, argv) char **argv; *************** *** 60,65 **** --- 62,69 ---- /* * grab some variables from the environment */ + if ((p = getenv ("NFSIG")) != 0 && access (p, 04) >= 0) + strcpy(hissig, p); /* his signature file */ if ((p = getenv ("SHELL")) != 0) hisshell = p; /* his shell */ if ((p = getenv ("NFED")) != 0) *** /tmp/,RCSt1020383 Wed Jul 1 13:38:49 1987 --- nfadmin.c Wed Jul 1 12:58:15 1987 *************** *** 21,33 **** int argn; struct nflist_f *nfptr; int change, newexp; ! int newanon, newopen, newnet, newarch; int newwset, newdir, newact, newlen; startup (argc, argv); /* common init code */ newdir = newact = newwset = newlen = newexp = -2; ! newanon = newopen = newnet = newarch = change = 0; for ( argc--, argv++; argc > 0 && argv[0][0] == '-'; argc--, argv++) { switch(argv[0][1]) --- 21,33 ---- int argn; struct nflist_f *nfptr; int change, newexp; ! int newanon, newopen, newnet, newarch, newlocal, newmod; int newwset, newdir, newact, newlen; startup (argc, argv); /* common init code */ newdir = newact = newwset = newlen = newexp = -2; ! newanon = newopen = newnet = newarch = newlocal = newmod = change = 0; for ( argc--, argv++; argc > 0 && argv[0][0] == '-'; argc--, argv++) { switch(argv[0][1]) *************** *** 48,53 **** --- 48,61 ---- change = 1; newopen = newval(argv[0][2]); break; + case 'L': + change = 1; + newlocal = newval(argv[0][2]); + break; + case 'M': + change = 1; + newmod = newval(argv[0][2]); + break; case 'A': change = 1; newarch = newval(argv[0][2]); *************** *** 151,156 **** --- 159,174 ---- io.descr.d_stat |= OPEN; else io.descr.d_stat &= ~OPEN; + if (newlocal) + if (newlocal > 0) + io.descr.d_stat |= LOCAL; + else + io.descr.d_stat &= ~LOCAL; + if (newmod) + if (newmod > 0) + io.descr.d_stat |= MODERATED; + else + io.descr.d_stat &= ~MODERATED; if (newarch) if (newarch > 0) io.descr.d_stat |= ISARCH; *************** *** 210,217 **** if (!flag) { ! printf("notesfile title NetW Open Anon Arch WSet Arch. Keep DirM # Max\n"); ! printf(" -------status------ Size Time Actn Stat Notes Size\n"); } flag = 1; switch(d->d_dmesgstat) --- 228,235 ---- if (!flag) { ! printf(" notesfile title NetW Open Anon Arch Locl Mod WSet Arch. Keep DirM # Max\n"); ! printf(" ------------status----------- Size Time Actn Stat Notes Size\n"); } flag = 1; switch(d->d_dmesgstat) *************** *** 247,255 **** else sprintf(archtime, "%4d ", d->d_archtime); ! printf("%14.14s: %s %s %s %s %5d %s %s %s %5d%12d\n", d->d_title, yes(d->d_stat & NETWRKD), yes(d->d_stat & OPEN), yes(d->d_stat & ANONOK), yes(d->d_stat & ISARCH), d->d_workset, archtime, archkeep, msgstat, d->d_nnote, d->d_longnote); --- 265,274 ---- else sprintf(archtime, "%4d ", d->d_archtime); ! printf("%22.22s: %s %s %s %s %s %s %5d %s %s %s %5d%12d\n", d->d_title, yes(d->d_stat & NETWRKD), yes(d->d_stat & OPEN), yes(d->d_stat & ANONOK), yes(d->d_stat & ISARCH), + yes(d->d_stat & LOCAL), yes(d->d_stat & MODERATED), d->d_workset, archtime, archkeep, msgstat, d->d_nnote, d->d_longnote); *** /tmp/,RCSt1020391 Wed Jul 1 13:38:57 1987 --- readem.c Wed Jul 1 12:55:20 1987 *************** *** 19,26 **** --- 19,32 ---- * modified : ray essick may 22, 1981 * modified (again): Ray Essick December 1981 * modified (more): Ray Essick, February 1982 + * added MODERATED: Rich $alz, August 1985 + * added LOCAL and YorN: Rich $alz, August 1985 * */ + static char YES[] = "YES"; + static char NO[] = "NO "; + #define YorN(c) ((c) != 0 ? YES : NO) + readem (io, readnum, firstdis, resp) struct io_f *io; int *firstdis; *************** *** 333,347 **** toauth = 0; wtext = 1; /* to others with text */ goto sendmail; case 'P': - toauth = 1; - wtext = 1; /* to author with text */ - goto sendmail; case 'p': toauth = 1; ! wtext = 0; /* to author, no text */ ! goto sendmail; ! sendmail: /* jump to here once set mail parms */ if (resp) { --- 339,358 ---- toauth = 0; wtext = 1; /* to others with text */ goto sendmail; + /* mail to author, possibly with text. */ case 'P': case 'p': + #ifdef NO_Pp_FOR_MODERATED + /* some people may want this */ + if (io -> d_descr.d_stat & MODERATED) + { + at (0, 10); + printf ("Moderated; use 'm' or 'M' command\n"); + continue; + } + #endif NO_Pp_FOR_MODERATED toauth = 1; ! wtext = c == 'P'; /* to author with text */ sendmail: /* jump to here once set mail parms */ if (resp) { *************** *** 454,462 **** if (allow (io, DRCTOK) == 0) { /* tell him what's up */ at (0, PROMPTMSGX); ! printf (" Anonymous: %s Networked: %s", ! (io -> descr.d_stat & ANONOK) ? "YES" : "NO", ! (io -> descr.d_stat & NETWRKD) ? "YES" : "NO"); replot = 0; /* leave on screen */ goto showit; } --- 465,476 ---- if (allow (io, DRCTOK) == 0) { /* tell him what's up */ at (0, PROMPTMSGX); ! printf ( ! "Anonymous: %s Networked: %s Moderated: %s Local: %s", ! YorN (io -> descr.d_stat & ANONOK), ! YorN (io -> descr.d_stat & NETWRKD), ! YorN (io -> descr.d_stat & MODERATED), ! YorN (io -> descr.d_stat & LOCAL)); replot = 0; /* leave on screen */ goto showit; } *************** *** 528,533 **** --- 542,555 ---- case 'W': /* write a response with the text */ case 'w': /* let him write a response */ getdscr (io, &io -> descr); /* get up to date */ + + if (io -> descr.d_stat & MODERATED) + { + wtext = c == 'W'; + toauth = MODERATED; /* toauth distinguishes m/w */ + goto sendmail; + } + if (allow (io, RESPOK) == 0) { at (0, PROMPTMSGX); *** /tmp/,RCSt1020405 Wed Jul 1 13:39:16 1987 --- structs.h Wed Jul 1 12:55:22 1987 *************** *** 105,110 **** --- 105,112 ---- #define WRITONLY 0100 /* writeonly access when written */ #define ORPHND 0200 /* foster parent */ #define ISARCH 0400 /* is an archive */ + #define MODERATED 01000 /* mail to moderator */ + #define LOCAL 02000 /* no signature */ /* change these only after modifying the table in access.c */ #define READOK 01 /* allow user to read */