diff options
author | Greg Hudson <ghudson@mit.edu> | 1996-08-27 12:28:13 +0000 |
---|---|---|
committer | Greg Hudson <ghudson@mit.edu> | 1996-08-27 12:28:13 +0000 |
commit | 0415965d8fd7420417895e189c9c79f67cfaf0a6 (patch) | |
tree | 26d5d7ed56342610198af7e4a78d5fd78d7e5692 | |
parent | 95bc97e24fcbff897f837117cd54afac1a54a758 (diff) |
This file was deleted in the 8.0 source tree
-rw-r--r-- | Makefile.bak | 221 | ||||
-rw-r--r-- | clients/zmailnotify/zmailwatch.c | 876 | ||||
-rw-r--r-- | clients/zmailnotify/zmwnotify.c | 301 | ||||
-rw-r--r-- | clients/zwrite/zwrite.c.orig | 514 | ||||
-rw-r--r-- | server/acl_files.c | 593 | ||||
-rw-r--r-- | server/new.h | 6 | ||||
-rwxr-xr-x | zwgc/Dictionary/generate_dictionary_instance | 36 | ||||
-rwxr-xr-x | zwgc/generate_stack_instance | 36 |
8 files changed, 0 insertions, 2583 deletions
diff --git a/Makefile.bak b/Makefile.bak deleted file mode 100644 index 6f2ff94..0000000 --- a/Makefile.bak +++ /dev/null @@ -1,221 +0,0 @@ -# Makefile generated by imake - do not edit! -# $XConsortium: imake.c,v 1.51 89/12/12 12:37:30 jim Exp $ - -all:: - -SHELL=/bin/sh -MAKESHELL=/bin/sh - -TOP = . -CWD = . -CONFIGSRC = /afs/rel-eng/user/probe/newsrc/config -DESTDIR= - -IRULESRC = $(CONFIGSRC) - -IMAKE= imake -IFLAGS= -I$(IRULESRC) $(IFLAGS_SH) $(OTHER_IFLAGS) -DTOPDIR=/afs/rel-eng/user/probe/newsrc -XIFLAGS= -I$(ATHXLIBDIR)/X11/config -DUseInstalled - -ICONFIGFILES = $(IRULESRC)/Imake.tmpl $(IRULESRC)/Imake.rules \ - $(IRULESRC)/site.def Imakefile $(PRULEDEP) -MKDIRHIER= sh $(IRULESRC)/mkdirhier.sh - -ATHVERS = $(IRULESRC)/update.conf - -ATHBASEDIR=/usr/athena - -ATHLIBDIR=$(ATHBASEDIR)/lib -ATHBINDIR=$(ATHBASEDIR)/bin -ATHINCDIR=$(ATHBASEDIR)/include -ATHETCDIR=$(ATHBASEDIR)/etc -ATHCONFDIR=/etc/athena -ATHMANDIR=$(ATHBASEDIR)/man -ATHRBINDIR=/bin/athena -ATHRETCDIR=/etc/athena - -ATHNEWDIR=$(ATHBINDIR) - -ATHXAPPDIR=/usr/athena/lib/X11/app-defaults -ATHXBITDIR=/usr/athena/lib/X11/bitmaps -ATHXINCDIR=/usr/athena/include -ATHXLIBDIR=/usr/athena/lib - -AFSDIR=/mit/afsuser/@sys - -LINTCFLAG=-o -LINTFLAGS=$(DEFINES) -I/usr/athena/include - -INSTALL=install -c -RANLIB=ranlib -CC=cc -LD=cc -AS=as -RM=rm -f -CP=cp -p - -ETCMD=compile_et -SSCMD=mk_cmds - -LIB_ET = -lcom_err -LIB_SS = -lss -LIB_HES = -lhesiod -LIB_KRB = -lkrb -ldes -LIB_ZEPHYR = -lzephyr -lkrb -ldes -lcom_err -LIB_X = -lX11 -lXext -LIB_XT = -lXt -lX11 -lXext -LIB_XAW = -lXaw -lXmu -lXt -lX11 -lXext - -CDEBUG=-O - -CFLAGS=$(CDEBUG) -DPOSIX $(DEFINES) -I/usr/athena/include -LDFLAGS= $(LDDEFS) -LDPATH=-L$(ATHLIBDIR) -LDLIBS= - -install:: install_dirs -install_dirs:: -install:: -install.man:: - -clean:: -depend:: - -FRC:: - -########################################################################### -# start of Imakefile -########################################################################### - -# Copyright 1988,1993 Massachusetts Institute of Technology -# For copying and distribution information, see the file -# "mit-copyright.h" -# -# $Id$ - -# Copyright 1988,1993 Massachusetts Institute of Technology -# For copying and distribution information, see the file -# "mit-copyright.h" -# -# $Id$ - -ZLIBDIR = $(ATHLIBDIR)/zephyr -ZINCDIR = $(ATHINCDIR)/zephyr -ZACLDIR = $(ZLIBDIR)/acl - -BINC = $(PTOP)/include - -ZLIBS = $(PTOP)/lib/libzephyr.a $(LIB_KRB) $(LIB_ET) -DYN_LIB = $(PTOP)/libdyn/libdyn.a - -CDEFS_KRB = -DKERBEROS - -CDEFS_HES = -DHESIOD - -DEFINES = $(CDEFS_KRB) $(CDEFS_HES) $(XDEFS) -I$(BINC) $(MACHDEFS) - -CC=cc -LD=cc - -install_dirs:: $(DESTDIR)$(ZLIBDIR) -$(DESTDIR)$(ZLIBDIR):: - $(MKDIRHIER) $(DESTDIR)$(ZLIBDIR) - -PRULES = "config/zephyr.rules" -PINC = -DProjectRules=\"$(PRULES)\" -DProjectRuleDep=$(PRULES) - -PTOP = $(TOP)/. -IPROJ = -DProject -DProjectTop=. -I$(PTOP) $(PINC) - -IFLAGS_SH = -DUseSharedLibs - -Makefile:: $(ICONFIGFILES) - -@if [ -f Makefile ]; then \ - echo " $(RM) Makefile.bak; mv Makefile Makefile.bak"; \ - $(RM) Makefile.bak; mv Makefile Makefile.bak; \ - else exit 0; fi - $(IMAKE) $(IPROJ) $(IFLAGS) -DNEWTOP=$(TOP) -DNEWCWD=$(CWD) - -XMakefile:: - -@if [ -f Makefile ]; then \ - echo " $(RM) Makefile.bak; mv Makefile Makefile.bak"; \ - $(RM) Makefile.bak; mv Makefile Makefile.bak; \ - else exit 0; fi - $(IMAKE) $(XIFLAGS) - -clean:: - $(RM) *~ *.o *.a core a.out Makefile.bak - -install.man:: FRC - @for d in util include lib libdyn clients server zhm zwgc ; \ - do \ - (cd $$d; echo "### Making" install.man "in $(CWD)/$$d"; \ - make $(MFLAGS) DESTDIR=$(DESTDIR) install.man; \ - echo "### Done with $(CWD)/$$d"); \ - done -Makefiles:: Makefile - @echo "### Making Makefiles in $(CWD)" - @-for d in util include lib libdyn clients server zhm zwgc ; \ - do \ - case "$$d" in \ - ./?*/?*/?*/?*) newtop=../../../.. ;; \ - ./?*/?*/?*) newtop=../../.. ;; \ - ./?*/?*) newtop=../.. ;; \ - ./?*) newtop=.. ;; \ - */?*/?*/?*) newtop=../../../.. ;; \ - */?*/?*) newtop=../../.. ;; \ - */?*) newtop=../.. ;; \ - *) newtop=.. ;; \ - esac; \ - ( cd $$d; \ - echo "### Making Makefile in $(CWD)/$$d"; \ - if [ -f Makefile ]; then \ - $(RM) Makefile.bak; \ - mv Makefile Makefile.bak; fi; \ - make -f $${newtop}/Makefile TOP=$${newtop}/$(TOP) \ - CWD=$(CWD)/$$d Makefile; \ - make $(MFLAGS) Makefiles; \ - echo "### Done with $(CWD)/$$d" ) ; \ - done - -all:: FRC - @for d in util include lib libdyn clients server zhm zwgc ; \ - do \ - (cd $$d; echo "### Making" all "in $(CWD)/$$d"; \ - make $(MFLAGS) DESTDIR=$(DESTDIR) all; \ - echo "### Done with $(CWD)/$$d"); \ - done - -install:: FRC - @for d in util include lib libdyn clients server zhm zwgc ; \ - do \ - (cd $$d; echo "### Making" install "in $(CWD)/$$d"; \ - make $(MFLAGS) DESTDIR=$(DESTDIR) install; \ - echo "### Done with $(CWD)/$$d"); \ - done - -clean:: FRC - @for d in util include lib libdyn clients server zhm zwgc ; \ - do \ - (cd $$d; echo "### Making" clean "in $(CWD)/$$d"; \ - make $(MFLAGS) DESTDIR=$(DESTDIR) clean; \ - echo "### Done with $(CWD)/$$d"); \ - done - -depend:: FRC - @for d in util include lib libdyn clients server zhm zwgc ; \ - do \ - (cd $$d; echo "### Making" depend "in $(CWD)/$$d"; \ - make $(MFLAGS) DESTDIR=$(DESTDIR) depend; \ - echo "### Done with $(CWD)/$$d"); \ - done -util include lib libdyn clients server zhm zwgc :: FRC - @(cd $@; echo "### Making" all "in $(CWD)/$@"; \ - make $(MFLAGS) DESTDIR=$(DESTDIR) all ; \ - echo "### Done with $(CWD)/$@") - -Makefiles:: - -########################################################################### -# dependencies generated by makedepend - diff --git a/clients/zmailnotify/zmailwatch.c b/clients/zmailnotify/zmailwatch.c deleted file mode 100644 index dfe364b..0000000 --- a/clients/zmailnotify/zmailwatch.c +++ /dev/null @@ -1,876 +0,0 @@ -/* - * $Source$ - * $Header$ - */ - -#ifndef lint -static char *rcsid_mailwatch_c = "$Header$"; -#endif lint - -#include <sys/types.h> -#include <sys/time.h> -#include <sys/uio.h> -#include <sys/ioctl.h> -#include <sys/socket.h> -#include <signal.h> -#include <netinet/in.h> -#include <netdb.h> -#include <stdio.h> - -#define NOTOK (-1) -#define OK 0 -#define DONE 1 - -#define DEF_INTERVAL 300 -#define DEF_DEBUG 0 - -int Pfd; -FILE *sfi; -FILE *sfo; -char Errmsg[128]; - -struct mailsav { - struct iovec m_iov[3]; - int m_iovcnt; - int m_seen; -} *Mailsav[64]; - -int MailIndex; -int MailSize; -int Debug = DEF_DEBUG; -int Interval = DEF_INTERVAL; -int List = 0; -int Shutdown = 0; - -int check_mail(), cleanup(); -uid_t getuid(); -char *strcpy(), *getenv(), index(); - -main(argc,argv) - int argc; - char *argv[]; -{ - char *str_index; - register int i; - int readfds = 0; - int maxfds = 0; - struct timeval timeout; - - for (i = 1; i < argc; i++) { - str_index = index(argv[i], '-'); - if (str_index == (char *)NULL) syntax(argv[0]); - if (strncmp(argv[i], "-d", 2) == 0) { - Debug = 1; - continue; - } - if (strncmp(argv[i], "-i", 2) == 0) { - if (++i >= argc) syntax(argv[0]); - Interval = atoi(argv[i]); - continue; - } - if (strncmp(argv[i], "-l", 2) == 0) { - List = 1; - continue; - } - if (strncmp(argv[i], "-help", 5) == 0) { - syntax(argv[0]); - } - syntax(argv[0]); - } - - if (!Debug && !List) background(); - - signal(SIGHUP, cleanup); - signal(SIGTERM, cleanup); - - check_mail(); - - if (List) { - exit(0); - } - - /* - * Initialize select's maximum file descriptor number to - * be one more than the file descriptor number of the - * Zephyr socket. - */ - maxfds = ZGetFD() + 1; - - /* - * Initialize the select timeout structure. - */ - timeout.tv_sec = Interval; - timeout.tv_usec = 0; - - while (1) { - /* - * Use select on the Zephyr port to determine if there - * is new mail. If not block untill timeout. Remember - * to reset the file descriptor before each select. - */ - readfds = 1 << ZGetFD(); - if (select(maxfds, &readfds, NULL, NULL, &timeout) == -1) - fatal("select failed on Zephyr socket"); - /* - * Check for mail. - */ - check_mail(host, user); - /* - * Shutdown if requested. - */ - if (Shutdown) { - exit(0); - } - } -} - -background() -{ - register int i; - - if (fork()) exit(0); - for (i = 0; i < 10; i++) close(i); - open("/", 0); - dup2(0, 1); - dup2(0, 2); - i = open("/dev/tty", 2); - if (i >= 0) { - ioctl(i, TIOCNOTTY, 0); - close(i); - } -} - -check_mail() -{ - static int LastNmsgs = -1; - static int LastNbytes = -1; - int nmsgs; - int nbytes; - static char tempname[40]; - static FILE *mbf = NULL; - register int mbfi; - register int i; - register int next_msg; - struct mailsav *ms; - struct mailsav *build_mailsav(); - - if (pop_init(host) == NOTOK) { - if (Debug) printf("zmailwatch(pop_init): %s\n", Errmsg); - error(Errmsg); - return(1); - } - - if (pop_command("USER %s", user) == NOTOK || - pop_command("RPOP %s", user) == NOTOK) { - error(Errmsg); - if (Debug) printf("zmailwatch(USER|RPOP): %s\n", Errmsg); - pop_command("QUIT"); - pop_close(); - return(1); - } - - if (pop_stat(&nmsgs, &nbytes) == NOTOK) { - error(Errmsg); - if (Debug) printf("zmailwatch(pop_stat): %s\n", Errmsg); - pop_command("QUIT"); - pop_close(); - return(1); - } - - if (nmsgs == 0) { - pop_command("QUIT"); - pop_close(); - return(0); - } - - if (mbf == NULL) { - strcpy(tempname, "/tmp/pmXXXXXX"); - mbfi = mkstemp(tempname); - if (mbfi < 0) { - if (Debug) printf("zmailwatch: mkstemp\n"); - pop_command("QUIT"); - pop_close(); - return(1); - } - mbf = fdopen(mbfi, "w+"); - } - - next_msg = 1; - if (nmsgs == LastNmsgs && nbytes == LastNbytes) { - if (get_message(1, mbf) != 0) return(1); - ms = build_mailsav(mbf); - if (mail_compare(ms, Mailsav[0]) == 0) { - pop_command("QUIT"); - pop_close(); - return(0); - } - else { - display_mail_header(ms, 0); - rewind(mbf); - next_msg = 2; - } - } - - for (i = next_msg; i <= nmsgs; i++) { - if (get_message(i, mbf) != 0) return(1); - ms = build_mailsav(mbf); - display_mail_header(ms, i-1); - rewind(mbf); - } - - LastNmsgs = nmsgs; - LastNbytes = nbytes; - - pop_command("QUIT"); - pop_close(); - if (Shutdown) { - fclose(mbf); - unlink(tempname); - } - - return(0); -} - -cleanup() -{ - Shutdown = 1; -} - -get_message(i, mbf) - int i; - FILE *mbf; -{ - int mbx_write(); - - if (pop_retr(i, mbx_write, mbf) != OK) { - error(Errmsg); - if (Debug) printf("zmailwatch(pop_retr): %s\n", Errmsg); - pop_command("QUIT"); - pop_close(); - return(1); - } - ftruncate(fileno(mbf), ftell(mbf)); - return(0); -} - -free_all_mailsav() -{ - register struct mailsav **msp; - register struct mailsav *ms; - register struct iovec *iov; - register int iovcnt; - - for (msp = Mailsav; ms = *msp; msp++) { - iov = ms->m_iov; - iovcnt = ms->m_iovcnt; - while (--iovcnt >= 0) { - free(iov->iov_base); - iov++; - } - free(ms); - *msp = NULL; - } -} - -free_mailsav(ms) - register struct mailsav *ms; -{ - register struct iovec *iov; - register int iovcnt; - - iov = ms->m_iov; - iovcnt = ms->m_iovcnt; - while (--iovcnt >= 0) { - free(iov->iov_base); - iov++; - } - free(ms); -} - -/* Pop stuff */ - -pop_close() -{ - if (sfi != NULL) fclose(sfi); - if (sfi != NULL) fclose(sfo); - close(Pfd); -} - -struct mailsav * -build_mailsav(mbf) - register FILE *mbf; -{ - char line[128]; - char from[80]; - char to[80]; - char subj[80]; - register struct mailsav *ms; - register int i; - register char *c; - register struct iovec *iov; - - ms = (struct mailsav *)malloc(sizeof (struct mailsav)); - ms->m_seen = 0; - - from[0] = 0; - to[0] = 0; - subj[0] = 0; - - rewind(mbf); - while (fgets(line, 128, mbf) != NULL) { - if (*line == '\n') break; - if (!strncmp(line, "From:", 5)) - strcpy(from, line); - else if (!strncmp(line, "To:", 3)) - strcpy(to, line); - else if (!strncmp(line, "Subject:", 8)) - strcpy(subj, line); - } - - /* add elipsis at end of "To:" field if it continues onto */ - /* more than one line */ - i = strlen(to) - 2; - c = &to[i]; - if (*c++ == ',') { - *c++ = ' '; - *c++ = '.'; - *c++ = '.'; - *c++ = '.'; - *c++ = '\n'; - *c = 0; - } - - i = 0; - if (from[0] != 0) { - iov = &ms->m_iov[i]; - iov->iov_len = strlen(from); - iov->iov_base = (char *)malloc(iov->iov_len); - bcopy(from, iov->iov_base, iov->iov_len); - iov->iov_base[--iov->iov_len] = 0; /* remove LF */ - i++; - } - - if (to[0] != 0) { - iov = &ms->m_iov[i]; - iov->iov_len = strlen(to); - iov->iov_base = (char *)malloc(iov->iov_len); - bcopy(to, iov->iov_base, iov->iov_len); - iov->iov_base[--iov->iov_len] = 0; /* remove LF */ - i++; - } - - if (subj[0] != 0) { - iov = &ms->m_iov[i]; - iov->iov_len = strlen(subj); - iov->iov_base = (char *)malloc(iov->iov_len); - bcopy(subj, iov->iov_base, iov->iov_len); - iov->iov_base[--iov->iov_len] = 0; /* remove LF */ - i++; - } - - ms->m_iovcnt = i; - return(ms); -} - -display_mail_header(ms, mi) - register struct mailsav *ms; - register int mi; -{ - /* This is a little tricky. If the current mail number (mi) is greater */ - /* than the last saved mail index (MailIndex), then this is new mail and */ - /* mi = MailIndex + 1. (MailIndex is incremented each time new mail is */ - /* saved.) Similarly, if mi is less than or equal to MailIndex and the */ - /* mail is different, then it is new mail, and MailIndex is set back to */ - /* mi. */ - - if (mi > MailIndex || mail_compare(ms, Mailsav[mi])) { - if (Mailsav[mi] != NULL) free_mailsav(Mailsav[mi]); - MailIndex = mi; - Mailsav[mi] = ms; - if (Debug) printf("zmailwatch: new mail\n"); - } - else { - free_mailsav(ms); - ms = Mailsav[mi]; - } - if (!ms->m_seen) { - if (notify_user(ms->m_iov, ms->m_iovcnt) == 0) ms->m_seen = 1; - } -} - -display_unseen() -{ - register int i; - register struct mailsav *ms; - - for (i = 0; i <= MailIndex; i++) { - ms = Mailsav[i]; - if (ms->m_seen == 0) { - if (notify_user(ms->m_iov, ms->m_iovcnt) != 0) return; - ms->m_seen = 1; - } - } -} - -mail_compare(m1, m2) - register struct mailsav *m1, *m2; -{ - register struct iovec *iov1, *iov2; - register int iovcnt; - - if (m1->m_iovcnt != m2->m_iovcnt) return(1); - iov1 = m1->m_iov; - iov2 = m2->m_iov; - iovcnt = m1->m_iovcnt; - while (--iovcnt >= 0) { - if (strcmp(iov1->iov_base, iov2->iov_base)) return(1); - iov1++; - iov2++; - } - return(0); -} - -error(msg) -{ - fprintf(stderr, "mailwatch: %s\n"); -} - -fatal(msg) -{ - error(msg); - exit(1); -} - -char * - get_errmsg() -{ - extern int errno, sys_nerr; - extern char *sys_errlist[]; - char *s; - - if (errno < sys_nerr) - s = sys_errlist[errno]; - else - s = "unknown error"; - return(s); -} - -/* - * Report the syntax for calling zmailwatch. - */ -syntax(call) - char *call; -{ - printf ("Usage: %s [-dl] [-i <interval>] [-help]\n", call); - exit(0); -} - -/* - * These are the necessary KPOP routines snarfed from - * the GNU movemail program. - */ - -/* Interface from movemail to Athena's post-office protocol. - Copyright (C) 1986 Free Software Foundation, Inc. - -This file is part of GNU Emacs. - -GNU Emacs is distributed in the hope that it will be useful, -but without any warranty. No author or distributor -accepts responsibility to anyone for the consequences of using it -or for whether it serves any particular purpose or works at all, -unless he says so in writing. - -Everyone is granted permission to copy, modify and redistribute -GNU Emacs, but only under the conditions described in the -document "GNU Emacs copying permission notice". An exact copy -of the document is supposed to have been given to you along with -GNU Emacs so that you can know how you may redistribute it all. -It should be in a file named COPYING. Among other things, the -copyright notice and this notice must be preserved on all copies. */ - -#include <sys/types.h> -#include <sys/file.h> -#include <sys/socket.h> -#include <netinet/in.h> -#include <netdb.h> -#include <stdio.h> -#include "../src/config.h" -#ifdef KPOP -#include <krb.h> -#endif KPOP - -#ifdef USG -#include <fcntl.h> -/* Cancel substitutions made by config.h for Emacs. */ -#undef open -#undef read -#undef write -#endif /* USG */ - -#define NOTOK (-1) -#define OK 0 -#define DONE 1 - -char *progname; -FILE *sfi; -FILE *sfo; -char Errmsg[80]; -#ifdef KPOP -char *PrincipalHostname(), *index(); -#endif KPOP - -static int debug = 0; - -popmail(user, outfile) -char *user; -char *outfile; -{ - char *host; - int nmsgs, nbytes; - char response[128]; - register int i; - int mbfi; - FILE *mbf; - char *getenv(); - int mbx_write(); - char *get_errmsg(); -#ifdef HESIOD - struct hes_postoffice *p; -#endif HESIOD - - host = getenv("MAILHOST"); -#ifdef HESIOD - if (host == NULL) { - p = hes_getmailhost(user); - if (p != NULL && strcmp(p->po_type, "POP") == 0) - host = p->po_host; - else - fatal("no POP server listed in Hesiod"); - } -#endif HESIOD - if (host == NULL) { - fatal("no MAILHOST defined"); - } - - if (pop_init(host) == NOTOK) { - error(Errmsg); - return(1); - } - - if ((getline(response, sizeof response, sfi) != OK) || (*response != '+')){ - error(response); - return(1); - } - -#ifdef KPOP - if (pop_command("USER %s", user) == NOTOK || - pop_command("PASS %s", user) == NOTOK) { -#else !KPOP - if (pop_command("USER %s", user) == NOTOK || - pop_command("RPOP %s", user) == NOTOK) { -#endif KPOP - error(Errmsg); - pop_command("QUIT"); - return(1); - } - - if (pop_stat(&nmsgs, &nbytes) == NOTOK) { - error(Errmsg); - pop_command("QUIT"); - return(1); - } - - if (!nmsgs) - { - pop_command("QUIT"); - return(0); - } - - setuid (getuid()); - - mbfi = open (outfile, O_WRONLY | O_CREAT | O_EXCL, 0666); - if (mbfi < 0) - { - pop_command("QUIT"); - error("Error in open: %s, %s", get_errmsg(), outfile); - return(1); - } - - if ((mbf = fdopen(mbfi, "w")) == NULL) - { - pop_command("QUIT"); - error("Error in fdopen: %s", get_errmsg()); - close(mbfi); - unlink(outfile); - return(1); - } - - for (i = 1; i <= nmsgs; i++) { - mbx_delimit_begin(mbf); - if (pop_retr(i, mbx_write, mbf) != OK) { - error(Errmsg); - pop_command("QUIT"); - close(mbfi); - return(1); - } - mbx_delimit_end(mbf); - fflush(mbf); - } - - for (i = 1; i <= nmsgs; i++) { - if (pop_command("DELE %d", i) == NOTOK) { - error(Errmsg); - pop_command("QUIT"); - close(mbfi); - return(1); - } - } - - pop_command("QUIT"); - close(mbfi); - return(0); -} - -pop_init(host) -char *host; -{ - register struct hostent *hp; - register struct servent *sp; - int lport = IPPORT_RESERVED - 1; - struct sockaddr_in sin; - register int s; -#ifdef KPOP - KTEXT ticket = (KTEXT)NULL; - int rem; -#endif KPOP - char *get_errmsg(); - - hp = gethostbyname(host); - if (hp == NULL) { - sprintf(Errmsg, "MAILHOST unknown: %s", host); - return(NOTOK); - } - -#ifdef KPOP - sp = getservbyname("knetd", "tcp"); - if (sp == 0) { - strcpy(Errmsg, "tcp/knetd: unknown service"); - return(NOTOK); - } -#else !KPOP - sp = getservbyname("pop", "tcp"); - if (sp == 0) { - strcpy(Errmsg, "tcp/pop: unknown service"); - return(NOTOK); - } -#endif KPOP - - sin.sin_family = hp->h_addrtype; - bcopy(hp->h_addr, (char *)&sin.sin_addr, hp->h_length); - sin.sin_port = sp->s_port; -#ifdef KPOP - s = socket(AF_INET, SOCK_STREAM, 0); -#else !KPOP - s = rresvport(&lport); -#endif KPOP - if (s < 0) { - sprintf(Errmsg, "error creating socket: %s", get_errmsg()); - return(NOTOK); - } - - if (connect(s, (char *)&sin, sizeof sin) < 0) { - sprintf(Errmsg, "error during connect: %s", get_errmsg()); - close(s); - return(NOTOK); - } -#ifdef KPOP - ticket = (KTEXT)malloc( sizeof(KTEXT_ST) ); - rem=KSUCCESS; - rem = SendKerberosData(s, ticket, "pop", hp->h_name); - if (rem != KSUCCESS) { - sprintf(Errmsg, "kerberos error: %s",krb_err_txt[rem]); - close(s); - return(NOTOK); - } -#endif KPOP - - sfi = fdopen(s, "r"); - sfo = fdopen(s, "w"); - if (sfi == NULL || sfo == NULL) { - sprintf(Errmsg, "error in fdopen: %s", get_errmsg()); - close(s); - return(NOTOK); - } - - return(OK); -} - -pop_command(fmt, a, b, c, d) -char *fmt; -{ - char buf[4096]; - char errmsg[64]; - - sprintf(buf, fmt, a, b, c, d); - - if (debug) fprintf(stderr, "---> %s\n", buf); - if (putline(buf, Errmsg, sfo) == NOTOK) return(NOTOK); - - if (getline(buf, sizeof buf, sfi) != OK) { - strcpy(Errmsg, buf); - return(NOTOK); - } - - if (debug) fprintf(stderr, "<--- %s\n", buf); - if (*buf != '+') { - strcpy(Errmsg, buf); - return(NOTOK); - } else { - return(OK); - } -} - - -pop_stat(nmsgs, nbytes) -int *nmsgs, *nbytes; -{ - char buf[4096]; - - if (debug) fprintf(stderr, "---> STAT\n"); - if (putline("STAT", Errmsg, sfo) == NOTOK) return(NOTOK); - - if (getline(buf, sizeof buf, sfi) != OK) { - strcpy(Errmsg, buf); - return(NOTOK); - } - - if (debug) fprintf(stderr, "<--- %s\n", buf); - if (*buf != '+') { - strcpy(Errmsg, buf); - return(NOTOK); - } else { - sscanf(buf, "+OK %d %d", nmsgs, nbytes); - return(OK); - } -} - -pop_retr(msgno, action, arg) -int (*action)(); -{ - char buf[4096]; - - sprintf(buf, "RETR %d", msgno); - if (debug) fprintf(stderr, "%s\n", buf); - if (putline(buf, Errmsg, sfo) == NOTOK) return(NOTOK); - - if (getline(buf, sizeof buf, sfi) != OK) { - strcpy(Errmsg, buf); - return(NOTOK); - } - - while (1) { - switch (multiline(buf, sizeof buf, sfi)) { - case OK: - (*action)(buf, arg); - break; - case DONE: - return (OK); - case NOTOK: - strcpy(Errmsg, buf); - return (NOTOK); - } - } -} - -getline(buf, n, f) -char *buf; -register int n; -FILE *f; -{ - register char *p; - int c; - - p = buf; - while (--n > 0 && (c = fgetc(f)) != EOF) - if ((*p++ = c) == '\n') break; - - if (ferror(f)) { - strcpy(buf, "error on connection"); - return (NOTOK); - } - - if (c == EOF && p == buf) { - strcpy(buf, "connection closed by foreign host"); - return (DONE); - } - - *p = NULL; - if (*--p == '\n') *p = NULL; - if (*--p == '\r') *p = NULL; - return(OK); -} - -multiline(buf, n, f) -char *buf; -register int n; -FILE *f; -{ - if (getline(buf, n, f) != OK) return (NOTOK); - if (*buf == '.') { - if (*(buf+1) == NULL) { - return (DONE); - } else { - strcpy(buf, buf+1); - } - } - return(OK); -} - -char * -get_errmsg() -{ - extern int errno, sys_nerr; - extern char *sys_errlist[]; - char *s; - - if (errno < sys_nerr) - s = sys_errlist[errno]; - else - s = "unknown error"; - return(s); -} - -putline(buf, err, f) -char *buf; -char *err; -FILE *f; -{ - fprintf(f, "%s\r\n", buf); - fflush(f); - if (ferror(f)) { - strcpy(err, "lost connection"); - return(NOTOK); - } - return(OK); -} - -mbx_write(line, mbf) -char *line; -FILE *mbf; -{ - fputs(line, mbf); - fputc(0x0a, mbf); -} - -mbx_delimit_begin(mbf) -FILE *mbf; -{ - fputs("\f\n0,unseen,,\n", mbf); -} - -mbx_delimit_end(mbf) -FILE *mbf; -{ - putc('\037', mbf); -} diff --git a/clients/zmailnotify/zmwnotify.c b/clients/zmailnotify/zmwnotify.c deleted file mode 100644 index 6395fd9..0000000 --- a/clients/zmailnotify/zmwnotify.c +++ /dev/null @@ -1,301 +0,0 @@ -/* - * $Source$ - * $Header$ - */ - -#ifndef lint -static char *rcsid_mwnotify_c = "$Header$"; -#endif lint - -#include <sys/types.h> -#include <sys/uio.h> -#include <sys/syslog.h> -#include <sys/wait.h> -#include <ttyent.h> -#include <pwd.h> -#include <netinet/in.h> -#include <stdio.h> -#include <sgtty.h> -#include <signal.h> -#include <errno.h> -#include <netdb.h> -#include <X/Xlib.h> - -extern char **environ; - -short cursor[] = {0x0000, 0x7ffe, 0x4fc2, 0x4ffe, 0x7ffe, - 0x7ffe, 0x781e, 0x7ffe , 0x7ffe, 0x0000}; - -#define NW_TOP 5 -#define DEFAULT_WINDOWS 16 -#define MAX_WINDOWS 32 - -WindowInfo Winfo; -FontInfo Finfo; -Font NoteFont; -int Timeout = 0; -int Bwidth = 2; -int Inner = 2; -int Volume = 0; -int Forepix = BlackPixel; -int Backpix = WhitePixel; -int Brdrpix = BlackPixel; -int Mouspix = BlackPixel; -int Offset = NW_TOP; -int VPos = NW_TOP; -int WindowMask = 0; -int WindowCount; -int WindowMax = DEFAULT_WINDOWS; - -struct wsav { - Window w_window; - struct iovec *w_iov; - int w_iovcnt; - int w_flags; -} Wsav[MAX_WINDOWS]; - -#define W_MAPPED 1 - -extern int errno; - -notify_user(iov, iovcnt) -register struct iovec *iov; -register int iovcnt; -{ - register int i; - register struct wsav *w; - - if (WindowCount == WindowMax) - return(1); - - w = &Wsav[WindowCount]; - w->w_flags = 0; - w->w_iov = (struct iovec *)malloc(sizeof (struct iovec) * iovcnt); - w->w_iovcnt = iovcnt; - for (i = iovcnt; --i >= 0; ) { - w->w_iov[i].iov_base = (char *)malloc(iov[i].iov_len+1); - bcopy(iov[i].iov_base, w->w_iov[i].iov_base, iov[i].iov_len+1); - w->w_iov[i].iov_len = iov[i].iov_len; - } - w->w_window = XNotifySetup(iov, iovcnt, &VPos); - WindowMask |= (1 << WindowCount); - WindowCount++; - return(0); -} - -XProcessEvent() -{ - XEvent rep; - register struct wsav *w; - register int i; - - do { - XNextEvent(&rep); - - /* find the window */ - w = Wsav; - for (i = 0; i < WindowMax; w++, i++) - if (rep.window == w->w_window) break; - if (i == WindowMax) return; - - /* process the event */ - switch (rep.type) { - case ButtonPressed: - for (; i >= 0; w--, i--) { - if (w->w_window != NULL) { - XDestroyWindow(w->w_window); - w->w_window = NULL; - free_iov(w->w_iov, w->w_iovcnt); - WindowMask &= ~(1 << i); - } - } - if (WindowMask == 0) { - VPos = Offset; - WindowCount = 0; - } - break; - - case ExposeWindow: - case ExposeRegion: - XClear(w->w_window); - display_notice(w->w_window, w->w_iov, w->w_iovcnt); - XFlush(); - break; - - } - } while (XPending() > 0); -} - -free_iov(iov, iovcnt) -register struct iovec *iov; -register int iovcnt; -{ - register struct iovec *iovbase = iov; - - while (--iovcnt >= 0) { - free(iov->iov_base); - iov++; - } - free(iovbase); -} - - -XNotifyInit(dname) -char *dname; -{ - struct passwd *pwent; - char *envbuf[2]; - char homebuf[280]; - int reverse = 0; - char *option; - char *font_name = "6x13"; - char *fore_color = NULL; - char *back_color = NULL; - char *brdr_color = NULL; - char *mous_color = NULL; - Color cdef; - char *getlogin(); - - if (!XOpenDisplay(dname)) - exit(0); - if (pwent = getpwnam(getlogin())) { - strcpy(homebuf, "HOME="); - strcat(homebuf, pwent->pw_dir); - envbuf[0] = homebuf; - envbuf[1] = NULL; - environ = envbuf; - if (option = XGetDefault("mailwatch", "BodyFont")) - font_name = option; - fore_color = XGetDefault("mailwatch", "Foreground"); - back_color = XGetDefault("mailwatch", "Background"); - brdr_color = XGetDefault("mailwatch", "Border"); - mous_color = XGetDefault("mailwatch", "Mouse"); - if (option = XGetDefault("mailwatch", "BorderWidth")) - Bwidth = atoi(option); - if (option = XGetDefault("mailwatch", "InternalBorder")) - Inner = atoi(option); - if (option = XGetDefault("mailwatch", "Timeout")) - Timeout = atoi(option); - if (option = XGetDefault("mailwatch", "Volume")) - Volume = atoi(option); - if (option = XGetDefault("mailwatch", "Offset")) - Offset = atoi(option); - if ((option = XGetDefault("mailwatch", "ReverseVideo")) && - strcmp(option, "on") == 0) - reverse = 1; - if (option = XGetDefault("mailwatch", "MaxNotices")) - WindowMax = atoi(option); - } - if (reverse) { - Brdrpix = Backpix; - Backpix = Forepix; - Forepix = Brdrpix; - Mouspix = Forepix; - } - - if ((NoteFont = XGetFont(font_name)) == NULL) - exit(0); - if (DisplayCells() > 2) { - if (back_color && XParseColor(back_color, &cdef) && - XGetHardwareColor(&cdef)) - Backpix = cdef.pixel; - if (fore_color && XParseColor(fore_color, &cdef) && - XGetHardwareColor(&cdef)) - Forepix = cdef.pixel; - if (brdr_color && XParseColor(brdr_color, &cdef) && - XGetHardwareColor(&cdef)) - Brdrpix = cdef.pixel; - if (mous_color && XParseColor(mous_color, &cdef) && - XGetHardwareColor(&cdef)) - Mouspix = cdef.pixel; - } - XQueryFont(NoteFont, &Finfo); - XQueryWindow (RootWindow, &Winfo); - VPos = Offset; - return(dpyno()); -} - -XNotifyClose() -{ - register int i; - register struct wsav *w; - - for (i = WindowMax, w = Wsav; --i >= 0; w++) - if (w->w_window != NULL) XDestroyWindow(w->w_window); - -} - -XDisplayNewWindows() -{ - register int i; - register struct wsav *w; - register int feepcount = 0; - - for (i = 0, w = Wsav; i < WindowMax; w++, i++) - if (w->w_window != NULL && !(w->w_flags & W_MAPPED)) { - XMapWindow(w->w_window); - feepcount++; - w->w_flags |= W_MAPPED; - } - XFlush(); - /* Now feep for each window, s l o w l y */ - while (--feepcount >= 0) { - XFeep(Volume); - XFlush(); - } -} - -XNotifySetup (iov, iovcnt, vpos) -struct iovec *iov; -int iovcnt; -register int *vpos; -{ - register int i; - register int n; - register int width; - register int height; - int vertical; - register Window w; - - width = 0; - for (i = iovcnt; --i >= 0; ) { - n = XQueryWidth (iov[i].iov_base, NoteFont); - if (n > width) width = n; - } - - width += Inner * 2; - height = iovcnt * Finfo.height + (Inner * 2); - vertical = *vpos; - *vpos += height + (Finfo.height / 2); - - w = XCreateWindow(RootWindow, (Winfo.width - width - (Bwidth * 2)) / 2, - vertical, width, height, Bwidth, - XMakeTile(Brdrpix), XMakeTile(Backpix)); - XStoreName(w, "mail-notice"); - XSelectInput(w, ButtonPressed|ButtonReleased|ExposeWindow|ExposeRegion); - XDefineCursor(w, XCreateCursor(16, 10, cursor, NULL, 7, 5, - Mouspix, Backpix, GXcopy)); - return(w); -} - -display_notice(w, iov, iovcnt) -Window w; -register struct iovec *iov; -register int iovcnt; -{ - register int in; - register int y; - register int height; - - in = Inner - 1; - if (in <= 0) in = 1; - - height = Finfo.height; - y = in; - while (--iovcnt >= 0) { - XText(w, in, y, iov->iov_base, iov->iov_len, - NoteFont, Forepix, Backpix); - y += height; - iov++; - } -} diff --git a/clients/zwrite/zwrite.c.orig b/clients/zwrite/zwrite.c.orig deleted file mode 100644 index c8ca4ce..0000000 --- a/clients/zwrite/zwrite.c.orig +++ /dev/null @@ -1,514 +0,0 @@ -/* This file is part of the Project Athena Zephyr Notification System. - * It contains code for the "zwrite" command. - * - * Created by: Robert French - * - * $Source$ - * $Author$ - * - * Copyright (c) 1987,1988 by the Massachusetts Institute of Technology. - * For copying and distribution information, see the file - * "mit-copyright.h". - */ - -#include <zephyr/mit-copyright.h> - -#include <zephyr/zephyr.h> -#include <string.h> -#include <netdb.h> -#include <pwd.h> -#include <ctype.h> - -#ifndef lint -static char rcsid_zwrite_c[] = "$Id$"; -#endif /* lint */ - -#define DEFAULT_CLASS "MESSAGE" -#define DEFAULT_INSTANCE "PERSONAL" -#define URGENT_INSTANCE "URGENT" -#define DEFAULT_OPCODE "" -#define FILSRV_CLASS "FILSRV" - -#define MAXRECIPS 100 - -int nrecips, msgarg, verbose, quiet, nodot; -char *whoami, *inst, *class, *opcode, *recips[MAXRECIPS]; -int (*auth)(); -void un_tabify(); - -char *fix_filsrv_inst(); - -main(argc, argv) - int argc; - char *argv[]; -{ - int retval, arg, nocheck, nchars, msgsize, filsys, tabexpand; - char *message, *signature = NULL; - static char bfr[BUFSIZ], classbfr[BUFSIZ], instbfr[BUFSIZ], sigbfr[BUFSIZ]; - static char opbfr[BUFSIZ]; - static ZNotice_t notice; - - whoami = argv[0]; - - if ((retval = ZInitialize()) != ZERR_NONE) { - com_err(whoami, retval, "while initializing"); - exit(1); - } - - if (argc < 2) - usage(whoami); - - auth = ZAUTH; - verbose = quiet = msgarg = nrecips = nocheck = filsys = nodot = 0; - tabexpand = 1; - - if (class = ZGetVariable("zwrite-class")) { - (void) strcpy(classbfr, class); - class = classbfr; - } - else - class = DEFAULT_CLASS; - if (inst = ZGetVariable("zwrite-inst")) { - (void) strcpy(instbfr, inst); - inst = instbfr; - } - else - inst = DEFAULT_INSTANCE; - - if (opcode = ZGetVariable("zwrite-opcode")) - opcode = strcpy(opbfr, opcode); - else - opcode = DEFAULT_OPCODE; - - signature = ZGetVariable("zwrite-signature"); - if (signature) { - (void) strcpy(sigbfr, signature); - signature = sigbfr; - } - - arg = 1; - - for (;arg<argc&&!msgarg;arg++) { - if (*argv[arg] != '-') { - recips[nrecips++] = argv[arg]; - continue; - } - if (strlen(argv[arg]) > 2) - usage(whoami); - switch (argv[arg][1]) { - case 'a': /* Backwards compatibility */ - auth = ZAUTH; - break; - case 'o': - class = DEFAULT_CLASS; - inst = DEFAULT_INSTANCE; - opcode = DEFAULT_OPCODE; - break; - case 'd': - auth = ZNOAUTH; - break; - case 'v': - verbose = 1; - break; - case 'q': - quiet = 1; - break; - case 'n': - nocheck = 1; - break; - case 't': - tabexpand = 0; - break; - case 'u': - inst = URGENT_INSTANCE; - break; - case 'O': - if (arg == argc-1) - usage(whoami); - arg++; - opcode = argv[arg]; - break; - case 'i': - if (arg == argc-1 || filsys == 1) - usage(whoami); - arg++; - inst = argv[arg]; - filsys = -1; - break; - case 'c': - if (arg == argc-1 || filsys == 1) - usage(whoami); - arg++; - class = argv[arg]; - filsys = -1; - break; - case 'f': - if (arg == argc-1 || filsys == -1) - usage(whoami); - arg++; - class = FILSRV_CLASS; - inst = fix_filsrv_inst(argv[arg]); - filsys = 1; - nocheck = 1; /* implied -n (no ping) */ - break; - case 's': - if (arg == argc-1) - usage(whoami); - arg++; - signature = argv[arg]; - break; - case 'm': - if (arg == argc-1) - usage(whoami); - nocheck = 1; /* implied -n (no ping) */ - msgarg = arg+1; - break; - case 'l': /* literal */ - nodot = 1; - break; - default: - usage(whoami); - } - } - - if (!nrecips && !(strcmp(class, DEFAULT_CLASS) || - (strcmp(inst, DEFAULT_INSTANCE) && - strcmp(inst, URGENT_INSTANCE)))) { - /* must specify recipient if using default class and - (default instance or urgent instance) */ - fprintf(stderr, "No recipients specified.\n"); - usage(whoami); - } - - if (!signature) { - /* try to find name in the password file */ - register struct passwd *pwd; - register char *cp = sigbfr; - register char *cp2, *pp; - - pwd = getpwuid(getuid()); - if (pwd) { - cp2 = pwd->pw_gecos; - for (; *cp2 && *cp2 != ',' ; cp2++) { - if (*cp2 == '&') { - pp = pwd->pw_name; - *cp++ = islower(*pp) ? toupper(*pp) : *pp; - pp++; - while (*pp) - *cp++ = *pp++; - } else - *cp++ = *cp2; - } - signature = sigbfr; - } - } - - notice.z_kind = ACKED; - notice.z_port = 0; - notice.z_class = class; - notice.z_class_inst = inst; - notice.z_opcode = "PING"; - notice.z_sender = 0; - notice.z_message_len = 0; - notice.z_recipient = ""; - if (filsys == 1) - notice.z_default_format = "@bold(Filesystem Operation Message for $instance:)\nFrom: @bold($sender) at $time $date\n$message"; - else if (auth == ZAUTH) { - if (signature) - notice.z_default_format = "Class $class, Instance $instance:\nTo: @bold($recipient) at $time $date\nFrom: @bold($1) <$sender>\n\n$2"; - else - notice.z_default_format = "Class $class, Instance $instance:\nTo: @bold($recipient) at $time $date\n$message"; - } else { - if (signature) - notice.z_default_format = "@bold(UNAUTHENTIC) Class $class, Instance $instance at $time $date:\nFrom: @bold($1) <$sender>\n\n$2"; - else - notice.z_default_format = "@bold(UNAUTHENTIC) Class $class, Instance $instance at $time $date:\n$message"; - } - if (!nocheck && nrecips) - send_off(¬ice, 0); - - if (quiet) - notice.z_kind = UNACKED; /* change for real sending */ - - if (!msgarg && isatty(0)) - if (nodot) - printf("Type your message now. End with the end-of-file character.\n"); - else - printf("Type your message now. End with control-D or a dot on a line by itself.\n"); - - message = NULL; - msgsize = 0; - if (signature) { - message = malloc((unsigned)(strlen(signature)+2)); - (void) strcpy(message, signature); - msgsize = strlen(message); - message[msgsize++] = '\0'; - } else { - message = malloc(1); - message[msgsize++] = '\0'; - } - - if (msgarg) { - int size = msgsize; - for (arg=msgarg;arg<argc;arg++) - size += (strlen(argv[arg]) + 1); - size++; /* for the newline */ - message = realloc(message, (unsigned) size); - for (arg=msgarg;arg<argc;arg++) { - (void) strcpy(message+msgsize, argv[arg]); - msgsize += strlen(argv[arg]); - if (arg != argc-1) { - message[msgsize] = ' '; - msgsize++; - } - } - message[msgsize] = '\n'; - msgsize += 1; - } else { - if (isatty(0)) { - for (;;) { - unsigned int l; - if (!fgets(bfr, sizeof bfr, stdin)) - break; - if (!nodot && bfr[0] == '.' && - (bfr[1] == '\n' || bfr[1] == '\0')) - break; - l = strlen(bfr); - message = realloc(message, msgsize+l+1); - (void) strcpy(message+msgsize, bfr); - msgsize += l; - } - message = realloc(message, (unsigned)(msgsize+1)); - } - else { /* Use read so you can send binary messages... */ - while (nchars = read(fileno(stdin), bfr, sizeof bfr)) { - if (nchars == -1) { - fprintf(stderr, "Read error from stdin! Can't continue!\n"); - exit(1); - } - message = realloc(message, (unsigned)(msgsize+nchars)); - (void) memcpy(message+msgsize, bfr, nchars); - msgsize += nchars; - } - /* end of msg */ - message = realloc(message, (unsigned)(msgsize+1)); - } - } - - notice.z_opcode = opcode; - if (tabexpand) - un_tabify(&message, &msgsize); - notice.z_message = message; - notice.z_message_len = msgsize; - - send_off(¬ice, 1); - exit(0); -} - -send_off(notice, real) - ZNotice_t *notice; - int real; -{ - int i, success, retval; - char bfr[BUFSIZ]; - ZNotice_t retnotice; - - success = 0; - - for (i=0;i<nrecips || !nrecips;i++) { - notice->z_recipient = nrecips?recips[i]:""; - if (verbose && real) - printf("Sending %smessage, class %s, instance %s, to %s\n", - auth?"authenticated ":"", - class, inst, - nrecips?notice->z_recipient:"everyone"); - if ((retval = ZSendNotice(notice, auth)) != ZERR_NONE) { - (void) sprintf(bfr, "while sending notice to %s", - nrecips?notice->z_recipient:inst); - com_err(whoami, retval, bfr); - break; - } - if (quiet && real) { - if (nrecips) - continue; /* next! */ - else - break; /* no more */ - } - if ((retval = ZIfNotice(&retnotice, (struct sockaddr_in *) 0, - ZCompareUIDPred, - (char *)¬ice->z_uid)) != - ZERR_NONE) { - ZFreeNotice(&retnotice); - (void) sprintf(bfr, "while waiting for acknowledgement for %s", - nrecips?notice->z_recipient:inst); - com_err(whoami, retval, bfr); - continue; - } - if (retnotice.z_kind == SERVNAK) { - printf("Received authorization failure while sending to %s\n", - nrecips?notice->z_recipient:inst); - ZFreeNotice(&retnotice); - break; /* if auth fails, punt */ - } - if (retnotice.z_kind != SERVACK || !retnotice.z_message_len) { - printf("Detected server failure while receiving acknowledgement for %s\n", - nrecips?notice->z_recipient:inst); - ZFreeNotice(&retnotice); - continue; - } - if (!real || (!quiet && real)) - if (!strcmp(retnotice.z_message, ZSRVACK_SENT)) { - if (real) { - if (verbose) - printf("Successful\n"); - else - printf("%s: Message sent\n", - nrecips?notice->z_recipient:inst); - } - else - success = 1; - } - else - if (!strcmp(retnotice.z_message, - ZSRVACK_NOTSENT)) { - if (verbose && real) { - if (strcmp(class, DEFAULT_CLASS)) - printf("Not logged in or not subscribing to class %s, instance %s\n", - class, inst); - else - printf("Not logged in or not subscribing to messages\n"); - } - else - if (!nrecips) - printf("No one subscribing to class %s, instance %s\n", - class, inst); - else { - if (strcmp(class, DEFAULT_CLASS)) - printf("%s: Not logged in or not subscribing to class %s, instance %s\n", - notice->z_recipient, class, inst); - else - printf("%s: Not logged in or not subscribing to messages\n", - notice->z_recipient); - } - } - else - printf("Internal failure - illegal message field in server response\n"); - ZFreeNotice(&retnotice); - if (!nrecips) - break; - } - if (!real && !success) - exit(1); -} - -usage(s) - char *s; -{ - fprintf(stderr, - "Usage: %s [-a] [-o] [-d] [-v] [-q] [-n] [-t] [-u] [-l]\n\ -\t[-c class] [-i inst] [-O opcode] [-f fsname] [-s signature]\n\ -\t[user ...] [-m message]\n", s); - fprintf(stderr,"\t-f and -c are mutually exclusive\n\ -\t-f and -i are mutually exclusive\n\ -\trecipients must be specified unless -c or -f specifies a class\n\ -\tother than the default class or -i or -f specifies an instance\n\ -\tother than the default or urgent instance\n"); - exit(1); -} - -/* - if the -f option is specified, this routine is called to canonicalize - an instance of the form hostname[:pack]. It turns the hostname into the - name returned by gethostbyname(hostname) - */ - -char *fix_filsrv_inst(str) -char *str; -{ - static char fsinst[BUFSIZ]; - char *ptr; - struct hostent *hp; - - ptr = strchr(str,':'); - if (ptr) - *ptr = '\0'; - - hp = gethostbyname(str); - if (!hp) { - if (ptr) - *ptr = ':'; - return(str); - } - (void) strcpy(fsinst, hp->h_name); - if (ptr) { - (void) strcat(fsinst, ":"); - ptr++; - (void) strcat(fsinst, ptr); - } - return(fsinst); -} - -/* convert tabs in the buffer into appropriate # of spaces. - slightly tricky since the buffer can have NUL's in it. */ - -#ifndef TABSTOP -#define TABSTOP 8 /* #chars between tabstops */ -#endif /* ! TABSTOP */ - -void -un_tabify(bufp, sizep) -char **bufp; -register int *sizep; -{ - register char *cp, *cp2; - char *cp3; - register int i; - register int column; /* column of next character */ - register int size = *sizep; - - for (cp = *bufp, i = 0; size; size--, cp++) - if (*cp == '\t') - i++; /* count tabs in buffer */ - - if (!i) - return; /* no tabs == no work */ - - /* To avoid allocation churning, allocate enough extra space to convert - every tab into TABSTOP spaces */ - /* only add (TABSTOP-1)x because we re-use the cell holding the - tab itself */ - cp = malloc((unsigned)(*sizep + (i * (TABSTOP-1)))); - if (!cp) /* XXX */ - return; /* punt expanding if memory fails */ - cp3 = cp; - /* Copy buffer, converting tabs to spaces as we go */ - for (cp2 = *bufp, column = 1, size = *sizep; size; cp2++, size--) { - switch (*cp2) { - case '\n': - case '\0': - /* newline or null: reset column */ - column = 1; - *cp++ = *cp2; /* copy the newline */ - break; - default: - /* copy the character */ - *cp = *cp2; - cp++; - column++; - break; - case '\t': - /* it's a tab, compute how many spaces to expand into. */ - i = TABSTOP - ((column - 1) % TABSTOP); - for (; i > 0; i--) { - *cp++ = ' '; /* fill in the spaces */ - column++; - (*sizep)++; /* increment the size */ - } - (*sizep)--; /* remove one (we replaced the tab) */ - break; - } - } - free(*bufp); /* free the old buf */ - *bufp = cp3; - return; -} diff --git a/server/acl_files.c b/server/acl_files.c deleted file mode 100644 index 3932e52..0000000 --- a/server/acl_files.c +++ /dev/null @@ -1,593 +0,0 @@ -/* This file is part of the Project Athena Zephyr Notification System. - * It contains functions for maintaining Access Control Lists. - * - * Created by: John T. Kohl - * - * $Source$ - * $Author$ - * - * Copyright (c) 1987,1988 by the Massachusetts Institute of Technology. - * For copying and distribution information, see the file - * "mit-copyright.h". - */ - -/* Define this if you really want the ACL-writing code included. */ -/* #define WRITE_ACL */ - -/* - * Stolen from lib/acl_files.c because acl_load needs to be externally - * declared and not statically declared. - */ - -#include <zephyr/mit-copyright.h> - -#ifndef SABER -#ifndef lint -static char rcsid_acl_files_c[] = "$Id$"; -#endif /* lint */ -#endif /* SABER */ - -/*** Routines for manipulating access control list files ***/ - -#include <zephyr/zephyr.h> -#include <strings.h> -#include <sys/file.h> -#include <sys/stat.h> -#include <ctype.h> -#include <sys/param.h> /* for MAXHOSTNAMELEN */ - -/* "aname.inst@realm" */ -#define MAX_PRINCIPAL_SIZE (ANAME_SZ + INST_SZ + REALM_SZ + 3) -#define INST_SEP '.' -#define REALM_SEP '@' - -#define LINESIZE 2048 /* Maximum line length in an acl file */ - -#define NEW_FILE "%s.~NEWACL~" /* Format for name of altered acl file */ -#define WAIT_TIME 300 /* Maximum time allowed write acl file */ - -#define CACHED_ACLS 64 /* How many acls to cache */ -#define ACL_LEN 256 /* Twice a reasonable acl length */ - -#define MAX(a,b) (((a)>(b))?(a):(b)) -#define MIN(a,b) (((a)<(b))?(a):(b)) - -#define COR(a,b) ((a!=NULL)?(a):(b)) - -extern int errno; - -extern time_t time(); - -/* Canonicalize a principal name */ -/* If instance is missing, it becomes "" */ -/* If realm is missing, it becomes the local realm */ -/* Canonicalized form is put in canon, which must be big enough to hold - MAX_PRINCIPAL_SIZE characters */ -acl_canonicalize_principal(principal, canon) - char *principal; - char *canon; -{ - char *end; - char *dot, *atsign; - int len; - - dot = (char *) strchr(principal, INST_SEP); - atsign = (char *) strchr(principal, REALM_SEP); - - /* Maybe we're done already */ - if(dot != NULL && atsign != NULL) { - if(dot < atsign) { - /* It's for real */ - /* Copy into canon */ - strncpy(canon, principal, MAX_PRINCIPAL_SIZE); - canon[MAX_PRINCIPAL_SIZE-1] = '\0'; - return; - } else { - /* Nope, it's part of the realm */ - dot = NULL; - } - } - - /* No such luck */ - end = principal + strlen(principal); - - /* Get the principal name */ - len = MIN(ANAME_SZ, COR(dot, COR(atsign, end)) - principal); - strncpy(canon, principal, len); - canon += len; - - /* Add INST_SEP */ - *canon++ = INST_SEP; - - /* Get the instance, if it exists */ - if(dot != NULL) { - ++dot; - len = MIN(INST_SZ, COR(atsign, end) - dot); - strncpy(canon, dot, len); - canon += len; - } - - /* Add REALM_SEP */ - *canon++ = REALM_SEP; - - /* Get the realm, if it exists */ - /* Otherwise, default to local realm */ - if(atsign != NULL) { - ++atsign; - len = MIN(REALM_SZ, end - atsign); - strncpy(canon, atsign, len); - canon += len; - *canon++ = '\0'; - } -#ifdef KERBEROS - else if(krb_get_lrealm(canon, 1) != KSUCCESS) { - strcpy(canon, KRB_REALM); - } -#endif -} - -#ifdef notdef -/* Get a lock to modify acl_file */ -/* Return new FILE pointer */ -/* or NULL if file cannot be modified */ -/* REQUIRES WRITE PERMISSION TO CONTAINING DIRECTORY */ -static FILE *acl_lock_file(acl_file) -char *acl_file; -{ - struct stat s; - char new[LINESIZE]; - int nfd; - FILE *nf; - int mode; - - if(stat(acl_file, &s) < 0) return(NULL); - mode = s.st_mode; - sprintf(new, NEW_FILE, acl_file); - for(;;) { - /* Open the new file */ - if((nfd = open(new, O_WRONLY|O_CREAT|O_EXCL, mode)) < 0) { - if(errno == EEXIST) { - /* Maybe somebody got here already, maybe it's just old */ - if(stat(new, &s) < 0) return(NULL); - if(time(0) - s.st_ctime > WAIT_TIME) { - /* File is stale, kill it */ - unlink(new); - continue; - } else { - /* Wait and try again */ - sleep(1); - continue; - } - } else { - /* Some other error, we lose */ - return(NULL); - } - } - - /* If we got to here, the lock file is ours and ok */ - /* Reopen it under stdio */ - if((nf = fdopen(nfd, "w")) == NULL) { - /* Oops, clean up */ - unlink(new); - } - return(nf); - } -} - -/* Commit changes to acl_file written onto FILE *f */ -/* Returns zero if successful */ -/* Returns > 0 if lock was broken */ -/* Returns < 0 if some other error occurs */ -/* Closes f */ -static int acl_commit(acl_file, f) -char *acl_file; -FILE *f; -{ -#ifdef WRITE_ACL - char new[LINESIZE]; - int ret; - struct stat s; - - sprintf(new, NEW_FILE, acl_file); - if(fflush(f) < 0 - || fstat(fileno(f), &s) < 0 - || s.st_nlink == 0) { - acl_abort(acl_file, f); - return(-1); - } - - ret = rename(new, acl_file); - fclose(f); - return(ret); -#else - abort (); -#endif -} - -/* Abort changes to acl_file written onto FILE *f */ -/* Returns 0 if successful, < 0 otherwise */ -/* Closes f */ -static int acl_abort(acl_file, f) -char *acl_file; -FILE *f; -{ -#ifdef WRITE_ACL - char new[LINESIZE]; - int ret; - struct stat s; - - /* make sure we aren't nuking someone else's file */ - if(fstat(fileno(f), &s) < 0 - || s.st_nlink == 0) { - fclose(f); - return(-1); - } else { - sprintf(new, NEW_FILE, acl_file); - ret = unlink(new); - fclose(f); - return(ret); - } -#else - abort (); -#endif -} - -/* Initialize an acl_file */ -/* Creates the file with permissions perm if it does not exist */ -/* Erases it if it does */ -/* Returns return value of acl_commit */ -int -acl_initialize(acl_file, perm) - char *acl_file; - int perm; -{ - FILE *new; - int fd; - - /* Check if the file exists already */ - if((new = acl_lock_file(acl_file)) != NULL) { - return(acl_commit(acl_file, new)); - } else { - /* File must be readable and writable by owner */ - if((fd = open(acl_file, O_CREAT|O_EXCL, perm|0600)) < 0) { - return(-1); - } else { - close(fd); - return(0); - } - } -} - -#endif /* notdef */ - -/* Eliminate all whitespace character in buf */ -/* Modifies its argument */ -static nuke_whitespace(buf) -char *buf; -{ - register char *pin, *pout; - - for(pin = pout = buf; *pin != '\0'; pin++) - if(!isspace(*pin)) *pout++ = *pin; - *pout = '\0'; /* Terminate the string */ -} - -/* Hash table stuff */ - -struct hashtbl { - int size; /* Max number of entries */ - int entries; /* Actual number of entries */ - char **tbl; /* Pointer to start of table */ -}; - -/* Make an empty hash table of size s */ -static struct hashtbl *make_hash(size) -int size; -{ - struct hashtbl *h; - - if(size < 1) size = 1; - h = (struct hashtbl *) malloc(sizeof(struct hashtbl)); - h->size = size; - h->entries = 0; - h->tbl = (char **) calloc(size, sizeof(char *)); - return(h); -} - -/* Destroy a hash table */ -static void -destroy_hash(h) - struct hashtbl *h; -{ - int i; - - for(i = 0; i < h->size; i++) { - if(h->tbl[i] != NULL) free(h->tbl[i]); - } - free(h->tbl); - free(h); -} - -/* Compute hash value for a string */ -static unsigned int -hashval(s) - char *s; -{ - register unsigned hv; - - for(hv = 0; *s != '\0'; s++) { - hv ^= ((hv << 3) ^ *s); - } - return(hv); -} - -/* Add an element to a hash table */ -static add_hash(h, el) -struct hashtbl *h; -char *el; -{ - unsigned hv; - char *s; - char **old; - int i; - -#if 0 - fprintf (stderr, "adding %s to acl hash %08X\n", el, h); -#endif - /* Make space if it isn't there already */ - if(h->entries + 1 > (h->size >> 1)) { - old = h->tbl; - h->tbl = (char **) calloc(h->size << 1, sizeof(char *)); - for(i = 0; i < h->size; i++) { - if(old[i] != NULL) { - hv = hashval(old[i]) % (h->size << 1); - while(h->tbl[hv] != NULL) hv = (hv+1) % (h->size << 1); - h->tbl[hv] = old[i]; - } - } - h->size = h->size << 1; - free(old); - } - - hv = hashval(el) % h->size; - while(h->tbl[hv] != NULL && strcmp(h->tbl[hv], el)) hv = (hv+1) % h->size; - s = (char *) malloc(strlen(el)+1); - strcpy(s, el); - h->tbl[hv] = s; - h->entries++; -} - -/* Returns nonzero if el is in h */ -static int -check_hash(h, el) - struct hashtbl *h; - char *el; -{ - unsigned hv; - -#if 0 - fprintf (stderr, "looking for %s in acl %08X\n", el, h); -#endif - for(hv = hashval(el) % h->size; h->tbl[hv]; hv = (hv + 1) % h->size) { -#if 0 - fprintf (stderr, "\tstrcmp (%s,...)\n", h->tbl[hv]); -#endif - if (!strcmp(h->tbl[hv], el)) { -#if 0 - fprintf (stderr, "success!\n"); -#endif - return 1; - } - } -#if 0 - fprintf (stderr, "failure\n"); -#endif - return 0; -} - -struct acl { - char filename[LINESIZE]; /* Name of acl file */ - struct hashtbl *acl; /* Acl entries */ -}; - -static struct acl acl_cache[CACHED_ACLS]; - -static int acl_cache_count = 0; -static int acl_cache_next = 0; - -/* Returns < 0 if unsuccessful in loading acl */ -/* Returns index into acl_cache otherwise */ -/* Note that if acl is already loaded, this is just a lookup */ -int acl_load(name) - char *name; -{ - int i; - FILE *f; - char buf[MAX_PRINCIPAL_SIZE]; - char canon[MAX_PRINCIPAL_SIZE]; - - /* See if it's there already */ - for(i = 0; i < acl_cache_count; i++) { - if (!strcmp(acl_cache[i].filename, name)) - goto got_it; - } - - /* It isn't, load it in */ - /* maybe there's still room */ - if(acl_cache_count < CACHED_ACLS) { - i = acl_cache_count++; - } else { - /* No room, clean one out */ - i = acl_cache_next; - acl_cache_next = (acl_cache_next + 1) % CACHED_ACLS; - if(acl_cache[i].acl) { - destroy_hash(acl_cache[i].acl); - acl_cache[i].acl = (struct hashtbl *) 0; - } - } - - /* Set up the acl */ - strcpy(acl_cache[i].filename, name); - /* Force reload */ - acl_cache[i].acl = (struct hashtbl *) 0; - - got_it: - /* - * See if we need to reload the ACL - */ - if (acl_cache[i].acl == (struct hashtbl *) 0) { - /* Gotta reload */ -#if 0 - fprintf (stderr, "attempting to load %s\n", name); -#endif - if ((f = fopen(name, "r")) == NULL) { -#if 0 - perror (name); -#endif - return -1; - } - if (acl_cache[i].acl) destroy_hash(acl_cache[i].acl); - acl_cache[i].acl = make_hash(ACL_LEN); - while(fgets(buf, sizeof(buf), f) != NULL) { - nuke_whitespace(buf); - acl_canonicalize_principal(buf, canon); - add_hash(acl_cache[i].acl, canon); - } - fclose(f); - } - return(i); -} - -/* - * This destroys all cached ACL's so that new ones will be loaded in - * the next time they are requested. - */ -void -acl_cache_reset() -{ - int i; - - /* See if it's there already */ - for(i = 0; i < acl_cache_count; i++) - if (acl_cache[i].acl) { - destroy_hash(acl_cache[i].acl); - acl_cache[i].acl = (struct hashtbl *) 0; - } - acl_cache_count = 0; - acl_cache_next = 0; -} - - -/* Returns nonzero if it can be determined that acl contains principal */ -/* Principal is not canonicalized, and no wildcarding is done */ -acl_exact_match(acl, principal) - char *acl; - char *principal; -{ - int idx; - -#if 0 - fprintf (stderr, "checking for %s in %s\n", principal, acl); -#endif - return((idx = acl_load(acl)) >= 0 - && check_hash(acl_cache[idx].acl, principal)); -} - -/* Returns nonzero if it can be determined that acl contains principal */ -/* Recognizes wildcards in acl of the form - name.*@realm, *.*@realm, and *.*@* */ -int -acl_check(acl, principal) - char *acl; - char *principal; -{ - char buf[MAX_PRINCIPAL_SIZE]; - char canon[MAX_PRINCIPAL_SIZE]; - char *realm; - - acl_canonicalize_principal(principal, canon); - - /* Is it there? */ - if (acl_exact_match(acl, canon)) - return 1; - - /* Try the wildcards */ - realm = (char *) strchr(canon, REALM_SEP); - *((char *)strchr(canon, INST_SEP)) = '\0'; /* Chuck the instance */ - - sprintf(buf, "%s.*%s", canon, realm); - if(acl_exact_match(acl, buf)) return 1; - - sprintf(buf, "*.*%s", realm); - if(acl_exact_match(acl, buf) || acl_exact_match(acl, "*.*@*")) return(1); - - return(0); -} - -#ifdef notdef -/* Adds principal to acl */ -/* Wildcards are interpreted literally */ -int -acl_add(acl, principal) - char *acl; - char *principal; -{ - int idx; - int i; - FILE *new; - char canon[MAX_PRINCIPAL_SIZE]; - - acl_canonicalize_principal(principal, canon); - - if((new = acl_lock_file(acl)) == NULL) return(-1); - if((acl_exact_match(acl, canon)) - || (idx = acl_load(acl)) < 0) { - acl_abort(acl, new); - return(-1); - } - /* It isn't there yet, copy the file and put it in */ - for(i = 0; i < acl_cache[idx].acl->size; i++) { - if(acl_cache[idx].acl->tbl[i] != NULL) { - if(fputs(acl_cache[idx].acl->tbl[i], new) == NULL - || putc('\n', new) != '\n') { - acl_abort(acl, new); - return(-1); - } - } - } - fputs(canon, new); - putc('\n', new); - return(acl_commit(acl, new)); -} - -/* Removes principal from acl */ -/* Wildcards are interpreted literally */ -int -acl_delete(acl, principal) - char *acl; - char *principal; -{ - int idx; - int i; - FILE *new; - char canon[MAX_PRINCIPAL_SIZE]; - - acl_canonicalize_principal(principal, canon); - - if((new = acl_lock_file(acl)) == NULL) return(-1); - if((!acl_exact_match(acl, canon)) - || (idx = acl_load(acl)) < 0) { - acl_abort(acl, new); - return(-1); - } - /* It isn't there yet, copy the file and put it in */ - for(i = 0; i < acl_cache[idx].acl->size; i++) { - if(acl_cache[idx].acl->tbl[i] != NULL - && strcmp(acl_cache[idx].acl->tbl[i], canon)) { - fputs(acl_cache[idx].acl->tbl[i], new); - putc('\n', new); - } - } - return(acl_commit(acl, new)); -} -#endif /* notdef */ diff --git a/server/new.h b/server/new.h deleted file mode 100644 index 62783c6..0000000 --- a/server/new.h +++ /dev/null @@ -1,6 +0,0 @@ --*- text -*- - -This file is here just to confuse makedepend. Normally, makedepend -will not search the directories used for C++ header files; thus, -anything specific to C++ won't be found unless we fake it out by -putting a file in the working directory for it to find. diff --git a/zwgc/Dictionary/generate_dictionary_instance b/zwgc/Dictionary/generate_dictionary_instance deleted file mode 100755 index 444d51b..0000000 --- a/zwgc/Dictionary/generate_dictionary_instance +++ /dev/null @@ -1,36 +0,0 @@ -#!/bin/csh -f -# This file is part of the Project Athena Zephyr Notification System. -# It is a tool used in the compilation of zwgc, the Zephyr WindowGram -# client. -# -# Created by: Marc Horowitz <marc@athena.mit.edu> -# -# $Source$ -# $Author$ -# $Id$ -# -# Copyright (c) 1989 by the Massachusetts Institute of Technology. -# For copying and distribution information, see the file -# "mit-copyright.h". -# - -set source=$1 -shift - -if (z$1x == zx) then - echo "usage: generate_dictionary_instance <srcdir> <typename> [<include file>]" - exit 1 -endif -if (-r $source/dictionary.c) then -else - echo "generate_dictionary_instance: unable to open" $source/dictionary.c - exit 2 -endif - -if (z$2x == zx) then - echo > $1_dictionary.h -else - echo "#include" '"'$2'"' > $1_dictionary.h -endif -sed "s/TYPE_T/$1/g" $source/dictionary.h >> $1_dictionary.h -sed "s/TYPE_T/$1/g" $source/dictionary.c > $1_dictionary.c diff --git a/zwgc/generate_stack_instance b/zwgc/generate_stack_instance deleted file mode 100755 index da237ca..0000000 --- a/zwgc/generate_stack_instance +++ /dev/null @@ -1,36 +0,0 @@ -#!/bin/csh -f - -# This file is part of the Project Athena Zephyr Notification System. -# It is one of the source files comprising zwgc, the Zephyr WindowGram -# client. -# -# Created by: Marc Horowitz <marc@athena.mit.edu> -# -# $Source$ -# $Author$ -# -# Copyright (c) 1989 by the Massachusetts Institute of Technology. -# For copying and distribution information, see the file -# "mit-copyright.h". -# -set rcsid_generate_stack_instance='$Id$' - -set source=$1 -shift - -if (z$1x == zx) then - echo "usage: generate_stack_instance <srcdir> <typename> [<include file>]" - exit 1 -endif -if (-r $source/stack.h) then -else - echo "generate_stack_instance: unable to open" $source/stack.h - exit 2 -endif - -if (z$2x == zx) then - echo > $1_stack.h -else - echo "#include" '"'$2'"' > $1_stack.h -endif -sed "s/TYPE_T/$1/g" $source/stack.h >> $1_stack.h |