summaryrefslogtreecommitdiff
path: root/clients
diff options
context:
space:
mode:
authorGravatar Greg Hudson <ghudson@mit.edu>1996-08-27 12:28:13 +0000
committerGravatar Greg Hudson <ghudson@mit.edu>1996-08-27 12:28:13 +0000
commit0415965d8fd7420417895e189c9c79f67cfaf0a6 (patch)
tree26d5d7ed56342610198af7e4a78d5fd78d7e5692 /clients
parent95bc97e24fcbff897f837117cd54afac1a54a758 (diff)
This file was deleted in the 8.0 source tree
Diffstat (limited to 'clients')
-rw-r--r--clients/zmailnotify/zmailwatch.c876
-rw-r--r--clients/zmailnotify/zmwnotify.c301
-rw-r--r--clients/zwrite/zwrite.c.orig514
3 files changed, 0 insertions, 1691 deletions
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(&notice, 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(&notice, 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 *)&notice->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;
-}