[742] in Zephyr_Bugs
interrealm support patches for 2.0.2
daemon@ATHENA.MIT.EDU (Derrick J. Brashear)
Tue Feb 6 14:52:10 1996
Date: Tue, 6 Feb 1996 14:51:39 -0500 (EST)
From: "Derrick J. Brashear" <shadow@DEMENTIA.ORG>
Reply-To: "Derrick J. Brashear" <shadow@DEMENTIA.ORG>
To: bug-zephyr@MIT.EDU
---559023410-851401618-823636300=:483
Content-Type: TEXT/PLAIN; CHARSET=US-ASCII
Hi,
What follows are patches for interrealm support (and some various enhancements
and bug fixes) for Zephyr 2.0.2. There are 3 MIME attachments. One is a diff
file with most of the various patches. The second is a tar.gz file containing
the new files. The final file is a readme explaining what changes are where. It
also explains what came from who. Some of it also came from me, presumably, but
I'm not interested in credit, only bug reports, fixes, and suggestions for
enhancements. The interrealm support uses a paradigm proposed by Jay Laefer and
enhanced by Dmitri Schoeman. The code was heavily rewritten to integrate it
into the new server, and the refragmentation code was added to deal with cases
where the authent causes the packet to grow greater than the maximum zephyr
packet size, previously not dealt with. The code has been tested by sending
cross-realm authentic personal and instance zephyrs of a size on the order of
50K. One of the servers is a heavily loaded SPARC1, serving all users is its
realm. The code caused no noticeable delays on the server or the machine. It
has passed muster for several weeks now, with no problems showing up.
Enjoy
-D
---559023410-851401618-823636300=:483
Content-Type: TEXT/plain; CHARSET=US-ASCII
Content-Transfer-Encoding: QUOTED-PRINTABLE
Content-Description: zdiff
diff -crtw dist/zephyr-2.0.2/Makefile.in zephyr-2.0.2/Makefile.in=0A*** dis=
t/zephyr-2.0.2/Makefile.in=09Fri Jul 7 17:53:19 1995=0A--- zephyr-2.0.2/Ma=
kefile.in=09Wed Jan 3 10:53:28 1996=0A***************=0A*** 25,48 ****=0A =
for i in $(SUBDIRS); do (cd $$i; $(MAKE) $(MFLAGS) $@) || exit 1; =
done=0A =0A install:=0A! $(ENSUREDIR) $(prefix) 755=0A! $=
(ENSUREDIR) $(exec_prefix) 755=0A! $(ENSUREDIR) $(bindir) 755=0A! =
$(ENSUREDIR) $(libdir) 755=0A! $(ENSUREDIR) $(datadir) 755=
=0A! $(ENSUREDIR) $(confdir) 755=0A! $(ENSUREDIR) $(confdir=
)/acl 755=0A! $(ENSUREDIR) $(sbindir) 755=0A! $(ENSUREDIR) =
$(includedir) 755=0A! $(ENSUREDIR) $(includedir)/zephyr 755=0A! =
$(ENSUREDIR) $(mandir) 755=0A! $(ENSUREDIR) $(mandir)/man1 755=
=0A! $(ENSUREDIR) $(mandir)/man3 755=0A! $(ENSUREDIR) $(man=
dir)/man8 755=0A $(INSTALL) -m 644 $(srcdir)/h/zephyr/mit-copyrigh=
t.h \=0A! $(includedir)/zephyr=0A! $(INSTALL) -m 64=
4 h/zephyr/zephyr.h $(includedir)/zephyr=0A! $(INSTALL) -m 644 h/ze=
phyr/zephyr_err.h $(includedir)/zephyr=0A for i in $(SUBDIRS); do =
(cd $$i; $(MAKE) $(MFLAGS) $@) || exit 1; done=0A =0A .PHONY: all check i=
nstall clean=0A--- 25,49 ----=0A for i in $(SUBDIRS); do (cd $$i; =
$(MAKE) $(MFLAGS) $@) || exit 1; done=0A =0A install:=0A! $(ENSUR=
EDIR) ${DESTDIR}$(prefix) 755=0A! $(ENSUREDIR) ${DESTDIR}$(exec_pre=
fix) 755=0A! $(ENSUREDIR) ${DESTDIR}$(prefix)/help 755=0A! =
$(ENSUREDIR) ${DESTDIR}$(bindir) 755=0A! $(ENSUREDIR) ${DESTDIR}$(l=
ibdir) 755=0A! $(ENSUREDIR) ${DESTDIR}$(datadir) 755=0A! $(=
ENSUREDIR) ${DESTDIR}$(confdir) 755=0A! $(ENSUREDIR) ${DESTDIR}$(co=
nfdir)/acl 755=0A! $(ENSUREDIR) ${DESTDIR}$(sbindir) 755=0A! =
$(ENSUREDIR) ${DESTDIR}$(includedir) 755=0A! $(ENSUREDIR) ${DESTD=
IR}$(includedir)/zephyr 755=0A! $(ENSUREDIR) ${DESTDIR}$(mandir) 75=
5=0A! $(ENSUREDIR) ${DESTDIR}$(mandir)/man1 755=0A! $(ENSUR=
EDIR) ${DESTDIR}$(mandir)/man3 755=0A! $(ENSUREDIR) ${DESTDIR}$(man=
dir)/man8 755=0A $(INSTALL) -m 644 $(srcdir)/h/zephyr/mit-copyrigh=
t.h \=0A! ${DESTDIR}$(includedir)/zephyr=0A! $(INST=
ALL) -m 644 h/zephyr/zephyr.h ${DESTDIR}$(includedir)/zephyr=0A! $(=
INSTALL) -m 644 h/zephyr/zephyr_err.h ${DESTDIR}$(includedir)/zephyr=0A =
for i in $(SUBDIRS); do (cd $$i; $(MAKE) $(MFLAGS) $@) || exit 1; don=
e=0A =0A .PHONY: all check install clean=0Adiff -crtw dist/zephyr-2.0.2/c=
onfigure.in zephyr-2.0.2/configure.in=0A*** dist/zephyr-2.0.2/configure.in=
=09Sun Jul 23 12:11:16 1995=0A--- zephyr-2.0.2/configure.in=09Tue Jan 30 11=
:55:57 1996=0A***************=0A*** 82,87 ****=0A--- 82,88 ----=0A dnl Che=
cks for header files.=0A AC_PATH_XTRA=0A AC_HEADER_STDC=0A+ AC_HEADER_DIR=
ENT=0A AC_HEADER_SYS_WAIT=0A AC_CHECK_HEADERS(fcntl.h paths.h termios.h s=
gtty.h unistd.h libgen.h malloc.h)=0A AC_CHECK_HEADERS(sys/filio.h sys/ioc=
tl.h sys/time.h sys/uio.h sys/file.h)=0A***************=0A*** 167,173 ****=
=0A AC_FUNC_VPRINTF=0A ZEPHYR_FUNC_REGCOMP=0A AC_CHECK_FUNCS(putenv re_c=
omp strchr memcpy memmove waitpid getlogin)=0A! AC_CHECK_FUNCS(strerror ran=
dom lrand48 gethostid krb_get_err_text krb_log)=0A =0A AC_CONFIG_HEADER(h=
/config.h h/zephyr/zephyr.h)=0A AC_OUTPUT(Makefile clients/Makefile client=
s/syslogd/Makefile=0A--- 168,174 ----=0A AC_FUNC_VPRINTF=0A ZEPHYR_FUNC_R=
EGCOMP=0A AC_CHECK_FUNCS(putenv re_comp strchr memcpy memmove waitpid getl=
ogin)=0A! AC_CHECK_FUNCS(strerror random lrand48 srandom srand48 gethostid =
krb_get_err_text krb_log)=0A =0A AC_CONFIG_HEADER(h/config.h h/zephyr/zep=
hyr.h)=0A AC_OUTPUT(Makefile clients/Makefile clients/syslogd/Makefile=0A*=
**************=0A*** 177,182 ****=0A clients/zpopnotify/Makefile=
clients/zshutdown_notify/Makefile=0A clients/zstat/Makefile cli=
ents/zwgc/Makefile clients/zwrite/Makefile=0A lib/Makefile lib/d=
yn/Makefile lib/et/Makefile lib/ss/Makefile=0A! lib/zephyr/Makefi=
le server/Makefile zhm/Makefile=0A! clients/xzwrite/XZwrite clien=
ts/zwgc/zephyr.vars)=0A =0A--- 178,185 ----=0A clients/zpopnoti=
fy/Makefile clients/zshutdown_notify/Makefile=0A clients/zstat/M=
akefile clients/zwgc/Makefile clients/zwrite/Makefile=0A lib/Mak=
efile lib/dyn/Makefile lib/et/Makefile lib/ss/Makefile=0A! lib/ze=
phyr/Makefile server/Makefile zhm/Makefile lib/des/Makefile=0A! c=
lients/xzwrite/XZwrite clients/zwgc/zephyr.vars =0A! clients/zlog=
in/Makefile clients/zstart/Makefile=0A! clients/zrepeat/Makefile =
clients/zmail/Makefile)=0A =0Adiff -crtw dist/zephyr-2.0.2/clients/Makefil=
e.in zephyr-2.0.2/clients/Makefile.in=0A*** dist/zephyr-2.0.2/clients/Makef=
ile.in=09Fri Jun 30 17:40:58 1995=0A--- zephyr-2.0.2/clients/Makefile.in=09=
Tue Jan 30 12:01:07 1996=0A***************=0A*** 1,7 ****=0A SHELL =3D /bi=
n/sh=0A =0A! SUBDIRS=3Dsyslogd @XCLIENTS@ zaway zctl zleave zlocate zmailn=
otify znol \=0A! zpopnotify zshutdown_notify zstat zwgc zwrite=0A =
=0A all:=0A for i in $(SUBDIRS); do (cd $$i; $(MAKE) $(MFLAGS) $@=
) || exit 1; done=0A--- 1,7 ----=0A SHELL =3D /bin/sh=0A =0A! SUBDIRS=3Ds=
yslogd @XCLIENTS@ zaway zctl zleave zlocate zlogin zmailnotify znol \=0A! =
zpopnotify zshutdown_notify zstat zwgc zwrite zstart zrepeat zmail=
=0A =0A all:=0A for i in $(SUBDIRS); do (cd $$i; $(MAKE) $(MFLAG=
S) $@) || exit 1; done=0AOnly in zephyr-2.0.2/clients: zlogin=0AOnly in zep=
hyr-2.0.2/clients: zmail=0AOnly in zephyr-2.0.2/clients: zrepeat=0AOnly in =
zephyr-2.0.2/clients: zstart=0Adiff -crtw dist/zephyr-2.0.2/clients/syslogd=
/Makefile.in zephyr-2.0.2/clients/syslogd/Makefile.in=0A*** dist/zephyr-2.0=
.2/clients/syslogd/Makefile.in=09Fri Jul 7 17:54:11 1995=0A--- zephyr-2.0.=
2/clients/syslogd/Makefile.in=09Wed Dec 20 15:53:46 1995=0A***************=
=0A*** 5,10 ****=0A--- 5,11 ----=0A datadir=3D@datadir@=0A confdir=3D@con=
fdir@=0A sbindir=3D@sbindir@=0A+ lsbindir=3D@lsbindir@=0A =0A includedir=
=3D$(prefix)/include=0A mandir=3D$(prefix)/man=0A***************=0A*** 17,=
23 ****=0A VPATH=3D@srcdir@=0A CC=3D@CC@=0A INSTALL=3D@INSTALL@=0A! SYSL=
OG_CONFPREFIX=3Dn=0A =0A DEBUG=3D-O=0A CFLAGS=3D$(DEBUG) -I$(srcdir) -I$=
(top_srcdir)/h -I$(BUILDTOP)/h \=0A--- 18,24 ----=0A VPATH=3D@srcdir@=0A =
CC=3D@CC@=0A INSTALL=3D@INSTALL@=0A! SYSLOG_CONFPREFIX=3D=0A =0A DEBUG=
=3D-O=0A CFLAGS=3D$(DEBUG) -I$(srcdir) -I$(top_srcdir)/h -I$(BUILDTOP)/h \=
=0A***************=0A*** 35,42 ****=0A check:=0A =0A install: syslogd=0A=
! $(INSTALL) -m 755 -s syslogd $(sbindir)=0A! $(INSTALL) -m=
644 $(srcdir)/syslogd.8 $(mandir)/man8=0A =0A clean:=0A rm -f $=
(OBJS) syslogd=0A--- 36,43 ----=0A check:=0A =0A install: syslogd=0A! =
$(INSTALL) -m 755 -s syslogd ${DESTDIR}$(sbindir)=0A! $(INSTA=
LL) -m 644 $(srcdir)/syslogd.8 ${DESTDIR}$(mandir)/man8=0A =0A clean:=0A =
rm -f $(OBJS) syslogd=0Adiff -crtw dist/zephyr-2.0.2/clients/xzwri=
te/Makefile.in zephyr-2.0.2/clients/xzwrite/Makefile.in=0A*** dist/zephyr-2=
.0.2/clients/xzwrite/Makefile.in=09Fri Jul 7 17:55:14 1995=0A--- zephyr-2.=
0.2/clients/xzwrite/Makefile.in=09Tue Jan 23 14:15:12 1996=0A**************=
*=0A*** 5,10 ****=0A--- 5,11 ----=0A datadir=3D@datadir@=0A confdir=3D@co=
nfdir@=0A sbindir=3D@sbindir@=0A+ lsbindir=3D@lsbindir@=0A =0A includedi=
r=3D$(prefix)/include=0A mandir=3D$(prefix)/man=0A***************=0A*** 39=
,48 ****=0A check:=0A =0A install: xzwrite XZwrite=0A! $(INSTALL=
) -m 755 -s xzwrite $(bindir)=0A! $(INSTALL) -m 644 $(srcdir)/xzwri=
te.1 $(mandir)/man1=0A! $(INSTALL) -m 644 XZwrite $(datadir)=0A! =
$(INSTALL) -m 644 $(srcdir)/xzwrite.bitmap $(datadir)=0A =0A clean:=
=0A rm -f $(OBJS) xzwrite=0A--- 40,49 ----=0A check:=0A =0A ins=
tall: xzwrite XZwrite=0A! $(INSTALL) -m 755 -s xzwrite ${DESTDIR}$(=
bindir)=0A! $(INSTALL) -m 644 $(srcdir)/xzwrite.1 ${DESTDIR}$(mandi=
r)/man1=0A! $(INSTALL) -m 644 XZwrite ${DESTDIR}$(datadir)=0A! =
$(INSTALL) -m 644 $(srcdir)/xzwrite.bitmap ${DESTDIR}$(datadir)=0A =0A=
clean:=0A rm -f $(OBJS) xzwrite=0Adiff -crtw dist/zephyr-2.0.2/c=
lients/xzwrite/logins.c zephyr-2.0.2/clients/xzwrite/logins.c=0A*** dist/ze=
phyr-2.0.2/clients/xzwrite/logins.c=09Fri Jul 7 17:55:21 1995=0A--- zephyr=
-2.0.2/clients/xzwrite/logins.c=09Wed Dec 20 18:29:14 1995=0A**************=
*=0A*** 12,18 ****=0A char *newdest;=0A int =
d;=0A =0A! d =3D notice->z_class_inst - strchr(notice->z_cl=
ass_inst, '@');=0A newdest =3D (char *) Malloc(d+1, "while dealing wi=
th login/logout notice",=0A NULL);=0A =
strncpy(newdest, notice->z_class_inst, d);=0A--- 12,20 ----=0A char =
*newdest;=0A int d;=0A =0A! d =3D =
0;=0A! while ((notice->z_class_inst[d] !=3D '@') && (notice->z_class_i=
nst[d] !=3D 0))=0A! d++;=0A newdest =3D (char *) Malloc(d+1,=
"while dealing with login/logout notice",=0A =
NULL);=0A strncpy(newdest, notice->z_class_inst, d);=0Adiff -crtw =
dist/zephyr-2.0.2/clients/xzwrite/zephyr.c zephyr-2.0.2/clients/xzwrite/zep=
hyr.c=0A*** dist/zephyr-2.0.2/clients/xzwrite/zephyr.c=09Fri Jul 7 17:55:2=
3 1995=0A--- zephyr-2.0.2/clients/xzwrite/zephyr.c=09Fri Jan 19 12:17:40 19=
96=0A***************=0A*** 260,265 ****=0A--- 260,266 ----=0A /* debugging=
function */=0A void zeph_display_subscriptions()=0A {=0A+ #if 0=0A =
ZSubscription_t sub;=0A int n, retval, i =3D 1;=0A =0A*************=
**=0A*** 280,285 ****=0A--- 281,287 ----=0A sub.zsub_clas=
sinst : "**", (*sub.zsub_recipient) ?=0A sub.zsub_recipie=
nt : "**");=0A }=0A+ #endif=0A }=0A #endif=0A =0A*** dist/zephyr-2=
.0.2/clients/zaway/Makefile.in=09Fri Jul 7 17:55:30 1995=0A--- zephyr-2.0.=
2/clients/zaway/Makefile.in=09Wed Dec 20 15:55:27 1995=0A***************=0A=
*** 5,10 ****=0A--- 5,11 ----=0A datadir=3D@datadir@=0A confdir=3D@confdi=
r@=0A sbindir=3D@sbindir@=0A+ lsbindir=3D@lsbindir@=0A =0A includedir=3D=
$(prefix)/include=0A mandir=3D$(prefix)/man=0A***************=0A*** 33,40 =
****=0A check:=0A =0A install: zaway=0A! $(INSTALL) -m 755 -s za=
way $(bindir)=0A! $(INSTALL) -m 644 $(srcdir)/zaway.1 $(mandir)/man=
1=0A =0A clean:=0A rm -f $(OBJS) zaway=0A--- 34,41 ----=0A chec=
k:=0A =0A install: zaway=0A! $(INSTALL) -m 755 -s zaway ${DESTDIR=
}$(bindir)=0A! $(INSTALL) -m 644 $(srcdir)/zaway.1 ${DESTDIR}$(mand=
ir)/man1=0A =0A clean:=0A rm -f $(OBJS) zaway=0Adiff -crtw dist/=
zephyr-2.0.2/clients/zctl/Makefile.in zephyr-2.0.2/clients/zctl/Makefile.in=
=0A*** dist/zephyr-2.0.2/clients/zctl/Makefile.in=09Fri Jul 7 17:55:38 199=
5=0A--- zephyr-2.0.2/clients/zctl/Makefile.in=09Wed Dec 20 15:56:05 1995=0A=
***************=0A*** 5,10 ****=0A--- 5,11 ----=0A datadir=3D@datadir@=0A =
confdir=3D@confdir@=0A sbindir=3D@sbindir@=0A+ lsbindir=3D@lsbindir@=0A =
=0A includedir=3D$(prefix)/include=0A mandir=3D$(prefix)/man=0A**********=
*****=0A*** 47,54 ****=0A check:=0A =0A install: zctl=0A! $(INST=
ALL) -m 755 -s zctl $(bindir)=0A! $(INSTALL) -m 644 $(srcdir)/zctl.=
1 $(mandir)/man1=0A =0A clean:=0A rm -f $(OBJS) zctl_cmds.c zctl=
=0A--- 48,55 ----=0A check:=0A =0A install: zctl=0A! $(INSTALL) =
-m 755 -s zctl ${DESTDIR}$(bindir)=0A! $(INSTALL) -m 644 $(srcdir)/=
zctl.1 ${DESTDIR}$(mandir)/man1=0A =0A clean:=0A rm -f $(OBJS) z=
ctl_cmds.c zctl=0Adiff -crtw dist/zephyr-2.0.2/clients/zctl/zctl.c zephyr-2=
.0.2/clients/zctl/zctl.c=0A*** dist/zephyr-2.0.2/clients/zctl/zctl.c=09Fri =
Jul 7 17:55:40 1995=0A--- zephyr-2.0.2/clients/zctl/zctl.c=09Tue Jan 2 15=
:02:17 1996=0A***************=0A*** 200,205 ****=0A--- 200,207 ----=0A =
notice.z_opcode =3D USER_SHUTDOWN;=0A if (!strcmp(arg=
v[0],"wg_startup"))=0A notice.z_opcode =3D USER_STARTUP;=
=0A+ if (!strcmp(argv[0],"wg_exit"))=0A+ notice.z_o=
pcode =3D USER_EXIT;=0A if (!notice.z_opcode) {=0A =
fprintf(stderr,=0A "unknown WindowGram client co=
ntrol command %s\n",=0A***************=0A*** 237,244 ****=0A--- 239,265 ---=
-=0A notice.z_class =3D HM_CTL_CLASS;=0A notice.z_class_i=
nst =3D HM_CTL_CLIENT;=0A =0A+ #ifdef HM_FLUSH_RESTRICT=0A+ if (!s=
trcmp(argv[0],"hm_flush")) {=0A+ if (getuid() !=3D 0) {=0A+ =
char s[2];=0A+ =0A+ if (!isatty(0)) {=0A+ =
fprintf(stderr, "hm_flush is intended to be run interactively.\=
n");=0A+ return;=0A+ }=0A+ =0A+ print=
f("hm_flush is intended for use only on single-user machines.\nPlease confi=
rm this is a single-user machine? [n] ");=0A+ fgets(s, 2, stdin=
);=0A+ if (strncasecmp(s,"y",1) !=3D 0)=0A+ retur=
n;=0A+ }=0A+ notice.z_opcode =3D CLIENT_FLUSH;=0A+ =
}=0A+ #else /* HM_FLUSH_RESTRICT */=0A if (!strcmp(argv[0],"hm=
_flush"))=0A notice.z_opcode =3D CLIENT_FLUSH;=0A+ #endif =
/* HM_FLUSH_RESTRICT */=0A if (!strcmp(argv[0],"new_server"))=0A =
notice.z_opcode =3D CLIENT_NEW_SERVER;=0A if (!not=
ice.z_opcode) {=0A***************=0A*** 960,962 ****=0A--- 981,1142 ----=0A=
if (!strcmp(src,TOKEN_ME))=0A *dest =3D ZGetSend=
er();=0A }=0A+ =0A+ #ifdef CMU_BACKWARD_COMPAT=0A+ do_punt(argc, argv)=0A+=
int argc;=0A+ char **argv;=0A+ {=0A+ char *class, *inst, *recip, *msg, *=
whoami =3D argv[0];=0A+ int retval, punt;=0A+ short newport;=0A+ stru=
ct sockaddr_in newsin;=0A+ ZNotice_t notice;=0A+ =0A+ if (! strcmp(wh=
oami, "punt")) punt =3D 1;=0A+ else punt =3D 0;=0A+ =0A+ switch (argc=
) {=0A+ case 2:=0A+ class =3D "message";=0A+ inst =3D argv[1];=0A=
+ recip =3D "";=0A+ break;=0A+ case 3:=0A+ class =3D argv[1];=
=0A+ inst =3D argv[2];=0A+ recip =3D "";=0A+ break;=0A+ case =
4:=0A+ class =3D argv[1];=0A+ inst =3D argv[2];=0A+ recip =3D a=
rgv[3];=0A+ #ifdef CMU_INTERREALM=0A+ if (*argv[3] =3D=3D '*') /* fixed=
so realm punts would work (vs0r) */=0A+ if (*(argv[3]+1) =3D=3D '@')=
=0A+ if (!strcmp((char *)ZGetRealm(), (char *)ZExpandRealm(argv[3]+2)=
)) =0A+ /*check local*/=0A+ recip =3D "";=0A+ #endif=0A+ =
break;=0A+ default:=0A+ fprintf(stderr, "Usages:\n");=0A+ fprin=
tf(stderr, "\t%s instance\n", whoami);=0A+ fprintf(stderr, "\t%s class =
instance\n", whoami);=0A+ fprintf(stderr, "\t%s class instance recipien=
t\n", whoami);=0A+ return 1;=0A+ }=0A+ =0A+ retval =3D ZOpenPort(=
(u_short *) 0);=0A+ if(retval !=3D ZERR_NONE) {=0A+ com_err(whoami, r=
etval, "while opening Zephyr port.");=0A+ return 1;=0A+ }=0A+ =0A+ =
newsin =3D ZGetDestAddr();=0A+ if ((newport =3D ZGetWGPort()) =3D=3D -1=
) {=0A+ fprintf(stderr, "%s: Can't find windowgram port\n", whoami);=0A=
+ return 1;=0A+ }=0A+ =0A+ newsin.sin_port =3D (unsigned short)=
newport;=0A+ if ((retval =3D ZSetDestAddr(&newsin)) !=3D ZERR_NONE) {=0A=
+ com_err(whoami,retval,"while setting destination address");=0A+ r=
eturn 1;=0A+ }=0A+ =0A+ msg =3D (char *) malloc(strlen(class) + strle=
n(inst) + strlen(recip) + 4);=0A+ sprintf(msg, "%s%c%s%c%s", class, '\0',=
inst, '\0', recip);=0A+ printf("%s <%s,%s,%s>\n", punt ? "Punting" : "Un=
punting",=0A+ class, inst, *recip ? recip : "*");=0A+ =0A+ memse=
t((char *) ¬ice, 0, sizeof(ZNotice_t));=0A+ notice.z_kind =3D UNSAFE;=
=0A+ notice.z_class =3D WG_CTL_CLASS;=0A+ notice.z_class_inst =3D WG_CT=
L_USER;=0A+ notice.z_recipient =3D "";=0A+ notice.z_default_format =3D =
"";=0A+ notice.z_opcode =3D (punt) ? "SUPPRESS" : "UNSUPPRESS";=0A+ not=
ice.z_port =3D 0;=0A+ notice.z_message =3D msg;=0A+ notice.z_message_le=
n =3D strlen(class)+strlen(inst)+strlen(recip)+3;=0A+ =0A+ if ((retval =
=3D ZSendNotice(¬ice,ZNOAUTH)) !=3D ZERR_NONE)=0A+ fprintf(stderr,"%=
s: while sending notice\n",whoami);=0A+ =0A+ free(msg);=0A+ =0A+ ZC=
losePort();=0A+ return 0;=0A+ }=0A+ =0A+ list_punts(argc, argv)=0A+ int a=
rgc;=0A+ char **argv;=0A+ {=0A+ ZNotice_t notice;=0A+ int retval, lenso=
far;=0A+ struct sockaddr_in old, to, from;=0A+ u_short ourport, zwgcpor=
t;=0A+ char *msg;=0A+ =0A+ ourport=3D0; =0A+ retval =3D ZOpenPort(&ou=
rport);=0A+ if(retval !=3D ZERR_NONE) {=0A+ com_err("zctl", retval, "=
while opening Zephyr port.");=0A+ return 1;=0A+ }=0A+ =0A+ old =
=3D ZGetDestAddr();=0A+ to =3D old;=0A+ if ((zwgcport =3D ZGetWGPort())=
=3D=3D (u_short)-1) {=0A+ fprintf(stderr, "zctl: Can't find windowgram=
port\n");=0A+ return 1;=0A+ }=0A+ =0A+ to.sin_port =3D (u_short)=
zwgcport;=0A+ if ((retval =3D ZSetDestAddr(&to)) !=3D ZERR_NONE) {=0A+ =
com_err("zctl",retval,"while setting destination address");=0A+ retu=
rn 1;=0A+ }=0A+ =0A+ memset((char *) ¬ice, 0, sizeof(ZNotice_t));=
=0A+ notice.z_kind =3D UNSAFE;=0A+ notice.z_class =3D WG_CTL_CLASS;=0A+=
notice.z_class_inst =3D WG_CTL_USER;=0A+ notice.z_recipient =3D "";=0A=
+ notice.z_default_format =3D "";=0A+ notice.z_opcode =3D "LIST-SUPPRES=
SED" /*USER_LIST_SUPPRESSED*/;=0A+ notice.z_port =3D ourport;=0A+ notic=
e.z_message =3D NULL;=0A+ notice.z_message_len =3D 0;=0A+ =0A+ if ((r=
etval =3D ZSendNotice(¬ice,ZNOAUTH)) !=3D ZERR_NONE)=0A+ com_err("zc=
tl",retval,"while sending notice");=0A+ =0A+ if ((retval =3D ZReceiveNo=
tice(¬ice,&from)) !=3D ZERR_NONE)=0A+ com_err("zctl",retval,"while r=
eceiving ack");=0A+ =0A+ (void) ZFreeNotice(¬ice);=0A+ =0A+ if (=
(retval =3D ZReceiveNotice(¬ice,&from)) !=3D ZERR_NONE)=0A+ com_err(=
"zctl",retval,"while receiving notice");=0A+ =0A+ notice.z_auth =3D ZCh=
eckAuthentication(¬ice, &from);=0A+ =0A+ if ((retval =3D ZSetDestAdd=
r(&old)) !=3D ZERR_NONE) {=0A+ com_err("zctl",retval,"while resetting d=
estination address");=0A+ return 1;=0A+ }=0A+ =0A+ msg =3D (char =
*) malloc((notice.z_message_len+1) * sizeof(char));=0A+ (void) strncpy(ms=
g,notice.z_message, notice.z_message_len);=0A+ msg[notice.z_message_len]=
=3D(char)0;=0A+ printf("%s", msg);=0A+ (void) free(msg);=0A+ (void) Z=
FreeNotice(¬ice);=0A+ (void) ZClosePort();=0A+ =0A+ return 0;=0A+ =
}=0A+ #endif /* CMU_BACKWARD_COMPAT */=0Adiff -crtw dist/zephyr-2.0.2/clien=
ts/zctl/zctl_cmds.ct zephyr-2.0.2/clients/zctl/zctl_cmds.ct=0A*** dist/zeph=
yr-2.0.2/clients/zctl/zctl_cmds.ct=09Fri Jul 1 08:16:14 1988=0A--- zephyr-=
2.0.2/clients/zctl/zctl_cmds.ct=09Tue Jan 2 15:03:15 1996=0A**************=
*=0A*** 63,68 ****=0A--- 63,71 ----=0A request wgc_control=
, "Tell the WindowGram to react to incoming notices.",=0A =
wg_startup;=0A =0A+ request wgc_control, "Tell the=
WindowGram to exit completely.",=0A+ wg_exit;=0A+ =
=0A request hm_control, "Tell the server to flush informat=
ion about this host.",=0A hm_flush;=0A =0A*******=
********=0A*** 84,87 ****=0A--- 87,101 ----=0A request ss_=
quit, "Quit.",=0A quit, exit, q;=0A =0A+ #ifdef C=
MU_BACKWARD_COMPAT=0A+ request do_punt, "Ignore specified m=
essages.",=0A+ punt;=0A+ =0A+ request =
do_punt, "Stop ignoring specified messages.",=0A+ =
unpunt;=0A+ =0A+ request list_punts, "List current mes=
sages to ignore.",=0A+ list_punts, lp;=0A+ =0A+ #=
endif=0A end;=0Adiff -crtw dist/zephyr-2.0.2/clients/zleave/Makefi=
le.in zephyr-2.0.2/clients/zleave/Makefile.in=0A*** dist/zephyr-2.0.2/clien=
ts/zleave/Makefile.in=09Fri Jul 7 17:55:52 1995=0A--- zephyr-2.0.2/clients=
/zleave/Makefile.in=09Wed Dec 20 16:29:37 1995=0A***************=0A*** 5,10=
****=0A--- 5,11 ----=0A datadir=3D@datadir@=0A confdir=3D@confdir@=0A s=
bindir=3D@sbindir@=0A+ lsbindir=3D@lsbindir@=0A =0A includedir=3D$(prefix=
)/include=0A mandir=3D$(prefix)/man=0A***************=0A*** 33,40 ****=0A =
check:=0A =0A install: zleave=0A! $(INSTALL) -m 755 -s zleave $(=
bindir)=0A! $(INSTALL) -m 644 $(srcdir)/zleave.1 $(mandir)/man1=0A =
=0A clean:=0A rm -f $(OBJS) zleave=0A--- 34,41 ----=0A check:=
=0A =0A install: zleave=0A! $(INSTALL) -m 755 -s zleave ${DESTDIR=
}$(bindir)=0A! $(INSTALL) -m 644 $(srcdir)/zleave.1 ${DESTDIR}$(man=
dir)/man1=0A =0A clean:=0A rm -f $(OBJS) zleave=0Adiff -crtw dis=
t/zephyr-2.0.2/clients/zlocate/Makefile.in zephyr-2.0.2/clients/zlocate/Mak=
efile.in=0A*** dist/zephyr-2.0.2/clients/zlocate/Makefile.in=09Fri Jul 7 1=
7:55:57 1995=0A--- zephyr-2.0.2/clients/zlocate/Makefile.in=09Wed Dec 20 16=
:30:18 1995=0A***************=0A*** 5,10 ****=0A--- 5,11 ----=0A datadir=
=3D@datadir@=0A confdir=3D@confdir@=0A sbindir=3D@sbindir@=0A+ lsbindir=
=3D@lsbindir@=0A =0A includedir=3D$(prefix)/include=0A mandir=3D$(prefix=
)/man=0A***************=0A*** 33,40 ****=0A check:=0A =0A install: zloca=
te=0A! $(INSTALL) -m 755 -s zlocate $(bindir)=0A! $(INSTALL=
) -m 644 $(srcdir)/zlocate.1 $(mandir)/man1=0A =0A clean:=0A rm =
-f $(OBJS) zlocate=0A--- 34,41 ----=0A check:=0A =0A install: zlocate=0A=
! $(INSTALL) -m 755 -s zlocate ${DESTDIR}$(bindir)=0A! $(IN=
STALL) -m 644 $(srcdir)/zlocate.1 ${DESTDIR}$(mandir)/man1=0A =0A clean:=
=0A rm -f $(OBJS) zlocate=0Adiff -crtw dist/zephyr-2.0.2/clients/z=
locate/zlocate.c zephyr-2.0.2/clients/zlocate/zlocate.c=0A*** dist/zephyr-2=
.0.2/clients/zlocate/zlocate.c=09Fri Jul 7 17:55:59 1995=0A--- zephyr-2.0.=
2/clients/zlocate/zlocate.c=09Wed Dec 20 16:31:21 1995=0A***************=0A=
*** 72,78 ****=0A {=0A char user[BUFSIZ],*whichuser;=0A ZAsyncLo=
cateData_t ald;=0A! int retval,i,numlocs,loc,auth;=0A ZNotice_t no=
tice;=0A #ifdef _POSIX_VERSION=0A struct sigaction sa;=0A--- 72,78 --=
--=0A {=0A char user[BUFSIZ],*whichuser;=0A ZAsyncLocateData_t a=
ld;=0A! int retval,i,numlocs,numfound,loc,auth;=0A ZNotice_t notic=
e;=0A #ifdef _POSIX_VERSION=0A struct sigaction sa;=0A***************=
=0A*** 119,124 ****=0A--- 119,125 ----=0A } =0A =0A numleft =3D =
numusers;=0A+ numfound =3D 0;=0A =0A i =3D 0;=0A for (loc =
=3D 0; loc < argc; loc++) {=0A***************=0A*** 142,149 ****=0A--- 143,=
152 ----=0A exit(1);=0A }=0A pri=
nt_locs(user,numlocs);=0A+ numfound +=3D numlocs;=0A }=
=0A }=0A+ if (numfound =3D=3D 0) exit(1);=0A =0A if (paralle=
l) {=0A #ifdef _POSIX_VERSION=0Adiff -crtw dist/zephyr-2.0.2/clients/zmail=
notify/Makefile.in zephyr-2.0.2/clients/zmailnotify/Makefile.in=0A*** dist/=
zephyr-2.0.2/clients/zmailnotify/Makefile.in=09Fri Jul 7 17:56:05 1995=0A-=
-- zephyr-2.0.2/clients/zmailnotify/Makefile.in=09Wed Dec 20 16:31:56 1995=
=0A***************=0A*** 5,10 ****=0A--- 5,11 ----=0A datadir=3D@datadir@=
=0A confdir=3D@confdir@=0A sbindir=3D@sbindir@=0A+ lsbindir=3D@lsbindir@=
=0A =0A includedir=3D$(prefix)/include=0A mandir=3D$(prefix)/man=0A*****=
**********=0A*** 33,40 ****=0A check:=0A =0A install: zmailnotify=0A! =
$(INSTALL) -m 755 -s zmailnotify $(sbindir)=0A! $(INSTALL) -m=
644 $(srcdir)/zmailnotify.1 $(mandir)/man1=0A =0A clean:=0A rm =
-f $(OBJS) zmailnotify=0A--- 34,41 ----=0A check:=0A =0A install: zmailn=
otify=0A! $(INSTALL) -m 755 -s zmailnotify ${DESTDIR}$(sbindir)=0A!=
$(INSTALL) -m 644 $(srcdir)/zmailnotify.1 ${DESTDIR}$(mandir)/man1=
=0A =0A clean:=0A rm -f $(OBJS) zmailnotify=0Adiff -crtw dist/ze=
phyr-2.0.2/clients/znol/Makefile.in zephyr-2.0.2/clients/znol/Makefile.in=
=0A*** dist/zephyr-2.0.2/clients/znol/Makefile.in=09Fri Jul 7 17:56:16 199=
5=0A--- zephyr-2.0.2/clients/znol/Makefile.in=09Wed Dec 20 16:32:51 1995=0A=
***************=0A*** 5,10 ****=0A--- 5,11 ----=0A datadir=3D@datadir@=0A =
confdir=3D@confdir@=0A sbindir=3D@sbindir@=0A+ lsbindir=3D@lsbindir@=0A =
=0A includedir=3D$(prefix)/include=0A mandir=3D$(prefix)/man=0A**********=
*****=0A*** 33,40 ****=0A check:=0A =0A install: znol=0A! $(INST=
ALL) -m 755 -s znol $(bindir)=0A! $(INSTALL) -m 644 $(srcdir)/znol.=
1 $(mandir)/man1=0A =0A clean:=0A rm -f $(OBJS) znol=0A--- 34,41=
----=0A check:=0A =0A install: znol=0A! $(INSTALL) -m 755 -s zn=
ol ${DESTDIR}$(bindir)=0A! $(INSTALL) -m 644 $(srcdir)/znol.1 ${DES=
TDIR}$(mandir)/man1=0A =0A clean:=0A rm -f $(OBJS) znol=0Adiff -=
crtw dist/zephyr-2.0.2/clients/znol/znol.c zephyr-2.0.2/clients/znol/znol.c=
=0A*** dist/zephyr-2.0.2/clients/znol/znol.c=09Fri Jul 7 17:56:18 1995=0A-=
-- zephyr-2.0.2/clients/znol/znol.c=09Thu Feb 1 19:46:00 1996=0A**********=
*****=0A*** 38,43 ****=0A--- 38,47 ----=0A int onoff =3D ON,quiet =
=3D 0,justlist =3D 0,useronly =3D 0, filenamed =3D 0;=0A int retva=
l,arg,ind,one,numlocs,i;=0A short wgport;=0A+ int stand =
=3D 0;=0A+ #ifdef CMU_INTERREALM=0A+ char *realm;=0A+ #endif /* INT=
ERREALM */=0A =0A if ((retval =3D ZInitialize()) !=3D ZERR_NONE) =
{=0A com_err(argv[0],retval,"initializing");=0A***********=
****=0A*** 64,69 ****=0A--- 68,76 ----=0A case 'l'=
:=0A justlist =3D 1;=0A =
break;=0A+ case 's':=0A+ =
stand =3D 1;=0A+ break=
;=0A case 'f':=0A =
if (arg =3D=3D argc-1) {=0A fprin=
tf(stderr,"No file name specified\n");=0A***************=0A*** 86,92 ****=
=0A continue;=0A }=0A =
usage:=0A! fprintf(stderr,"Usage: %s [on|off] [-q | -l] [=
-f file | -u username]\n", argv[0]);=0A exit (1);=0A =
}=0A =0A--- 93,99 ----=0A continue;=0A =
}=0A usage:=0A! fprintf(stderr,"Usa=
ge: %s [on|off] [-q | -l] [-s] [-f file | -u username]\n", argv[0]);=0A =
exit (1);=0A }=0A =0A***************=0A*** 98,105 *=
***=0A fprintf(stderr,"-u and -f cannot both be used\n");=
=0A goto usage;=0A } =0A if (!justlist)=
=0A! if ((wgport =3D ZGetWGPort()) =3D=3D -1) {=0A =
com_err(argv[0],errno,"while getting WindowGram port");=0A=
exit(1);=0A }=0A--- 105,122 ----=
=0A fprintf(stderr,"-u and -f cannot both be used\n");=0A =
goto usage;=0A } =0A+ if (stand && justli=
st) {=0A+ fprintf(stderr,"-s and -l cannot both be used\n")=
;=0A+ goto usage;=0A+ }=0A+ if (stand && on=
off =3D=3D OFF) {=0A+ fprintf(stderr,"-s and off cannot bot=
h be used\n");=0A+ goto usage;=0A+ }=0A if=
(!justlist)=0A! if (stand)=0A! wgport =3D 0;=0A! =
else if ((wgport =3D ZGetWGPort()) =3D=3D -1) {=0A com_=
err(argv[0],errno,"while getting WindowGram port");=0A exit(1)=
;=0A }=0A***************=0A*** 157,169 ****=0A =
*cp++ =3D '@';=0A (void) strcpy(cp,ZGetRea=
lm());=0A }=0A! if ((subs[ind].zsub_classi=
nst =3D malloc((unsigned)(strlen(name)+1))) =3D=3D NULL) {=0A =
fprintf (stderr, "znol: out of memory");=0A =
exit (1);=0A }=0A (void) strcpy(sub=
s[ind].zsub_classinst, name);=0A subs[ind++].zsub_recipien=
t =3D "";=0A! =0A if (!quiet && onoff =3D=3D ON) {=0A =
if ((retval =3D ZLocateUser(name,&numlocs,ZAUTH))=0A =
!=3D ZERR_NONE) {=0A--- 174,211 ----=0A =
*cp++ =3D '@';=0A (void) strcpy(=
cp,ZGetRealm());=0A }=0A! #ifdef CMU_INTERREALM=0A! =
cp =3D strchr(name,'@');=0A! if (cp[0] && strcmp(=
cp+1,ZGetRealm())) {=0A! realm =3D (char *) ZExpandReal=
m(cp + 1);=0A! *cp =3D '\0';=0A! if=
((subs[ind].zsub_classinst =3D =0A! malloc((unsig=
ned)(strlen(name)=0A! + strlen(r=
ealm) =0A! + 2))) =3D=3D NULL) {=
=0A fprintf (stderr, "znol: out of memory");=0A =
exit (1);=0A =
}=0A+ (void) sprintf(subs[ind].zsub_classinst, "%s@%s"=
, name, realm);=0A+ (void) strcpy(name, subs[ind].zsub_=
classinst);=0A+ if ((subs[ind].zsub_recipient =3D =0A+ =
malloc((unsigned)(strlen(realm)+2))) =3D=3D NULL) =
{=0A+ fprintf (stderr, "znol: out of memory");=0A+ =
exit (1);=0A+ }=0A+ =
(void) sprintf(subs[ind++].zsub_recipient, "@%s", realm);=0A+ =
} else {=0A+ #endif=0A+ if ((subs[ind].z=
sub_classinst =3D =0A+ malloc((unsigned)(strlen(na=
me)+1))) =3D=3D NULL) {=0A+ fprintf (stderr, "znol: o=
ut of memory");=0A+ exit (1);=0A+ =
}=0A (void) strcpy(subs[ind].zsub_classinst, name)=
;=0A subs[ind++].zsub_recipient =3D "";=0A! #ifdef CMU_I=
NTERREALM=0A! }=0A! #endif=0A if (!quiet &=
& onoff =3D=3D ON) {=0A if ((retval =3D ZLocateUse=
r(name,&numlocs,ZAUTH))=0A !=3D ZERR_NONE) {=
=0A***************=0A*** 184,190 ****=0A =
printf("%s: internal failure while getting location\n",argv[=
0]);=0A exit(1);=0A =
}=0A! =
printf("%s: %s\t%s\t%s\n",cleanname,=0A =
locations.host,=0A =
locations.tty,=0A =
locations.time);=0A--- 226,234 ----=0A =
printf("%s: internal failure while getting location\n",argv[=
0]);=0A exit(1);=0A =
}=0A! =
printf("%s%s: %s\t%s\t%s\n",=0A! =
stand ? "on: " : "",=0A! =
cleanname,=0A locat=
ions.host,=0A locations.tty=
,=0A locations.time);=0A***=
************=0A*** 204,210 ****=0A--- 248,262 ----=0A =
exit(1);=0A } =0A =
for (ind=3D0;ind<SUBSATONCE;ind++)=0A+ #ifdef CMU_INTE=
RREALM=0A+ {=0A+ if (=
subs[ind].zsub_recipient[0] !=3D '\0')=0A+ free=
(subs[ind].zsub_recipient);=0A+ #endif=0A free=
(subs[ind].zsub_classinst);=0A+ #ifdef CMU_INTERREALM=0A+ =
}=0A+ #endif=0A ind =3D 0;=0A =
}=0A }=0A***************=0A*** 223,227 ****=0A--- 275,315 --=
--=0A if (!useronly)=0A (void) fclose(fp); /=
* file is open read-only,=0A ig=
nore errs */=0A+ if (stand)=0A+ (void) handle_notices();=
=0A+ else=0A exit(0);=0A+ }=0A+ =0A+ void =0A+ handle_no=
tices(whoami)=0A+ char *whoami;=0A+ {=0A+ ZNotice_t notice;=0A+ stru=
ct sockaddr_in from;=0A+ char *logtype, *host, *date, *tty;=0A+ int ret=
;=0A+ =0A+ while ((ret =3D ZReceiveNotice(¬ice, &from)) =3D=3D ZERR_NO=
NE) {=0A+ if (! strcmp(notice.z_opcode, "USER_LOGIN"))=0A+ logtyp=
e =3D "on";=0A+ else if (! strcmp(notice.z_opcode, "USER_LOGOUT"))=0A+ =
logtype =3D "off";=0A+ else {=0A+ /* Ignore non-login/logou=
t notices */=0A+ ZFreeNotice(¬ice);=0A+ continue;=0A+ }=
=0A+ =0A+ host =3D notice.z_message;=0A+ date =3D host + strlen(hos=
t) + 1;=0A+ tty =3D date + strlen(date) + 1;=0A+ printf("%s: %s: %s=
\t%s\t%s\n", logtype, notice.z_sender, host, tty,=0A+ date);=0A+=
=0A+ ZFreeNotice(¬ice);=0A+ }=0A+ =0A+ com_err(whoami, ret,=
"receiving notice");=0A+ exit (1);=0A }=0Adiff -crtw dist/zephyr-2.0.2/=
clients/zpopnotify/Makefile.in zephyr-2.0.2/clients/zpopnotify/Makefile.in=
=0A*** dist/zephyr-2.0.2/clients/zpopnotify/Makefile.in=09Fri Jul 7 17:56:=
24 1995=0A--- zephyr-2.0.2/clients/zpopnotify/Makefile.in=09Wed Dec 20 16:3=
7:21 1995=0A***************=0A*** 5,10 ****=0A--- 5,11 ----=0A datadir=3D@=
datadir@=0A confdir=3D@confdir@=0A sbindir=3D@sbindir@=0A+ lsbindir=3D@ls=
bindir@=0A =0A includedir=3D$(prefix)/include=0A mandir=3D$(prefix)/man=
=0A***************=0A*** 33,40 ****=0A check:=0A =0A install: zpopnotify=
=0A! $(INSTALL) -m 755 -s zpopnotify $(sbindir)=0A! $(INSTA=
LL) -m 644 $(srcdir)/zpopnotify.8 $(mandir)/man8=0A =0A clean:=0A =
rm -f $(OBJS) zpopnotify=0A--- 34,41 ----=0A check:=0A =0A install: zp=
opnotify=0A! $(INSTALL) -m 755 -s zpopnotify ${DESTDIR}$(sbindir)=
=0A! $(INSTALL) -m 644 $(srcdir)/zpopnotify.8 ${DESTDIR}$(mandir)/m=
an8=0A =0A clean:=0A rm -f $(OBJS) zpopnotify=0Adiff -crtw dist/=
zephyr-2.0.2/clients/zshutdown_notify/Makefile.in zephyr-2.0.2/clients/zshu=
tdown_notify/Makefile.in=0A*** dist/zephyr-2.0.2/clients/zshutdown_notify/M=
akefile.in=09Fri Jul 7 17:56:31 1995=0A--- zephyr-2.0.2/clients/zshutdown_=
notify/Makefile.in=09Wed Dec 20 16:37:55 1995=0A***************=0A*** 34,41=
****=0A check:=0A =0A install: zshutdown_notify=0A! $(INSTALL) =
-m 755 -s zshutdown_notify $(lsbindir)=0A! $(INSTALL) -m 644 $(srcd=
ir)/zshutdown_notify.8 $(mandir)/man8=0A =0A clean:=0A rm -f $(O=
BJS) zshutdown_notify=0A--- 34,41 ----=0A check:=0A =0A install: zshutdo=
wn_notify=0A! $(INSTALL) -m 755 -s zshutdown_notify ${DESTDIR}$(lsb=
indir)=0A! $(INSTALL) -m 644 $(srcdir)/zshutdown_notify.8 ${DESTDIR=
}$(mandir)/man8=0A =0A clean:=0A rm -f $(OBJS) zshutdown_notify=
=0Adiff -crtw dist/zephyr-2.0.2/clients/zstat/Makefile.in zephyr-2.0.2/clie=
nts/zstat/Makefile.in=0A*** dist/zephyr-2.0.2/clients/zstat/Makefile.in=09F=
ri Jul 7 17:58:10 1995=0A--- zephyr-2.0.2/clients/zstat/Makefile.in=09Wed =
Dec 20 16:38:33 1995=0A***************=0A*** 5,10 ****=0A--- 5,11 ----=0A =
datadir=3D@datadir@=0A confdir=3D@confdir@=0A sbindir=3D@sbindir@=0A+ lsb=
indir=3D@lsbindir@=0A =0A includedir=3D$(prefix)/include=0A mandir=3D$(p=
refix)/man=0A***************=0A*** 33,40 ****=0A check:=0A =0A install: =
zstat=0A! $(INSTALL) -m 755 -s zstat $(bindir)=0A! $(INSTAL=
L) -m 644 $(srcdir)/zstat.8 $(mandir)/man8=0A =0A clean:=0A rm -=
f $(OBJS) zstat=0A--- 34,41 ----=0A check:=0A =0A install: zstat=0A! =
$(INSTALL) -m 755 -s zstat ${DESTDIR}$(bindir)=0A! $(INSTALL) =
-m 644 $(srcdir)/zstat.8 ${DESTDIR}$(mandir)/man8=0A =0A clean:=0A =
rm -f $(OBJS) zstat=0Adiff -crtw dist/zephyr-2.0.2/clients/zwgc/Makefile=
.in zephyr-2.0.2/clients/zwgc/Makefile.in=0A*** dist/zephyr-2.0.2/clients/z=
wgc/Makefile.in=09Fri Jul 7 17:59:07 1995=0A--- zephyr-2.0.2/clients/zwgc/=
Makefile.in=09Wed Jan 3 15:47:15 1996=0A***************=0A*** 5,10 ****=0A=
--- 5,11 ----=0A datadir=3D@datadir@=0A confdir=3D@confdir@=0A sbindir=
=3D@sbindir@=0A+ lsbindir=3D@lsbindir@=0A =0A includedir=3D$(prefix)/incl=
ude=0A mandir=3D$(prefix)/man=0A***************=0A*** 21,28 ****=0A INSTA=
NTIATE=3D$(srcdir)/instantiate=0A =0A DEBUG=3D-O=0A! CFLAGS=3D $(DEBUG) -=
DDATADIR=3D\"$(datadir)\" -I$(top_srcdir)/h -I$(BUILDTOP)/h \=0A! -=
I$(srcdir) -I. @X_CFLAGS@ @CPPFLAGS@=0A YFLAGS=3D-d=0A LDFLAGS=3D$(DEBUG)=
-L$(BUILDTOP)/lib/zephyr @ET_LDFLAGS@ @X_LIBS@ @LDFLAGS@=0A LIBS=3D-lzeph=
yr @LIBS@ -lcom_err @X_PRE_LIBS@ @ZWGC_LIBX11@ @X_EXTRA_LIBS@ \=0A--- 22,30=
----=0A INSTANTIATE=3D$(srcdir)/instantiate=0A =0A DEBUG=3D-O=0A! CFLAG=
S=3D $(DEBUG) -DDATADIR=3D\"$(datadir)\" -DPREFIX=3D\"$(prefix)\" \=0A! =
-I$(top_srcdir)/h -I$(BUILDTOP)/h -I$(srcdir) -I. @X_CFLAGS@ \=0A! =
@CPPFLAGS@=0A YFLAGS=3D-d=0A LDFLAGS=3D$(DEBUG) -L$(BUILDTOP)/lib/ze=
phyr @ET_LDFLAGS@ @X_LIBS@ @LDFLAGS@=0A LIBS=3D-lzephyr @LIBS@ -lcom_err @=
X_PRE_LIBS@ @ZWGC_LIBX11@ @X_EXTRA_LIBS@ \=0A***************=0A*** 35,41 **=
**=0A xcut.o regexp.o character_class.o text_operations.o file.o e=
rror.o \=0A variables.o formatter.o X_fonts.o X_gram.o tty_filter.=
o \=0A standard_ports.o xselect.o xmark.o xrevstack.o xerror.o \=
=0A! new_string.o new_memory.o=0A =0A all: zwgc=0A =0A--- 37,43 =
----=0A xcut.o regexp.o character_class.o text_operations.o file.o=
error.o \=0A variables.o formatter.o X_fonts.o X_gram.o tty_filte=
r.o \=0A standard_ports.o xselect.o xmark.o xrevstack.o xerror.o \=
=0A! new_string.o new_memory.o plus.o=0A =0A all: zwgc=0A =0A***=
************=0A*** 69,79 ****=0A check:=0A =0A install: zwgc=0A! =
$(INSTALL) -m 755 -s zwgc $(bindir)=0A! $(INSTALL) -m 644 $(srcdir=
)/zwgc.1 $(mandir)/man1=0A! $(INSTALL) -m 644 $(srcdir)/zwgc.desc $=
(datadir)=0A! $(INSTALL) -m 644 $(srcdir)/zwgc_resources $(datadir)=
=0A! $(INSTALL) -m 644 zephyr.vars $(confdir)=0A =0A clean:=0A =
rm -f $(OBJS) zwgc port_dictionary.[ch] pointer_dictionary.[ch]=0A--=
- 71,81 ----=0A check:=0A =0A install: zwgc=0A! $(INSTALL) -m 75=
5 -s zwgc ${DESTDIR}$(bindir)=0A! $(INSTALL) -m 644 $(srcdir)/zwgc.=
1 ${DESTDIR}$(mandir)/man1=0A! $(INSTALL) -m 644 $(srcdir)/zwgc.des=
c ${DESTDIR}$(datadir)=0A! $(INSTALL) -m 644 $(srcdir)/zwgc_resourc=
es ${DESTDIR}$(datadir)=0A! $(INSTALL) -m 644 zephyr.vars ${DESTDIR=
}$(confdir)=0A =0A clean:=0A rm -f $(OBJS) zwgc port_dictionary.=
[ch] pointer_dictionary.[ch]=0Adiff -crtw dist/zephyr-2.0.2/clients/zwgc/X_=
driver.c zephyr-2.0.2/clients/zwgc/X_driver.c=0A*** dist/zephyr-2.0.2/clien=
ts/zwgc/X_driver.c=09Fri Jul 7 17:59:09 1995=0A--- zephyr-2.0.2/clients/zw=
gc/X_driver.c=09Tue Jan 30 10:04:44 1996=0A***************=0A*** 19,24 ****=
=0A--- 19,26 ----=0A #endif=0A =0A #include <zephyr/mit-copyright.h>=0A+=
/* For ZConfDir */=0A+ #include <zephyr/zephyr.h>=0A =0A /**************=
**************************************************************/=0A /* =
*/=0A*=
**************=0A*** 223,228 ****=0A--- 225,233 ----=0A {"-foreground"=
, "*foreground", XrmoptionSepArg, (caddr_t) NULL},=0A {"-geometry",=
".geometry", XrmoptionSepArg, (caddr_t) NULL},=0A {"-iconname"=
, ".iconName", XrmoptionSepArg, (caddr_t) NULL},=0A+ #ifdef CMU_ZWGC=
PLUS=0A+ {"-lifespan", "*lifespan", XrmoptionSepArg, (caddr_t) N=
ULL},=0A+ #endif=0A {"-name", ".name", XrmoptionSepArg,=
(caddr_t) NULL},=0A {"-reverse", "*reverseVideo", XrmoptionNoArg,=
(caddr_t) "on"},=0A {"-rv", "*reverseVideo", XrmoptionNoArg=
, (caddr_t) "on"},=0A***************=0A*** 265,272 ****=0A--- 270,282 ----=
=0A return(1);=0A =0A /* Read in our application-specific reso=
urces: */=0A+ #ifdef ZCONFDIR=0A+ temp_db1 =3D XrmGetFileDatabase(ZConf=
Dir(PREFIX, "lib/zephyr/zwgc_resources",=0A+ =
"ZEPHYRDIR"));=0A+ #else=0A sprintf(dbasename, "%s/zwgc_r=
esources", DATADIR);=0A temp_db1 =3D XrmGetFileDatabase(dbasename);=0A=
+ #endif=0A =0A /*=0A * Get resources from the just opened disp=
lay:=0Adiff -crtw dist/zephyr-2.0.2/clients/zwgc/X_gram.c zephyr-2.0.2/clie=
nts/zwgc/X_gram.c=0A*** dist/zephyr-2.0.2/clients/zwgc/X_gram.c=09Fri Jul =
7 17:59:16 1995=0A--- zephyr-2.0.2/clients/zwgc/X_gram.c=09Tue Jan 30 09:42=
:28 1996=0A***************=0A*** 34,39 ****=0A--- 34,42 ----=0A #include "=
xrevstack.h"=0A #include "xerror.h"=0A #include "xselect.h"=0A+ #ifdef CM=
U_ZWGCPLUS=0A+ #include "plus.h"=0A+ #endif=0A =0A extern XContext desc_c=
ontext;=0A extern char *app_instance;=0A***************=0A*** 137,142 ****=
=0A--- 140,155 ----=0A if (temp && atoi(temp)>=3D0)=0A ttl =3D=
atoi(temp);=0A =0A+ #ifdef CMU_ZWGCPLUS=0A+ if (ttl =3D=3D 0) {=0A+ =
temp =3D get_string_resource("lifespan", "LifeSpan");=0A+ if (te=
mp && atoi(temp)>=3D0)=0A+ ttl =3D atoi(temp);=0A+ }=0A+ =0A+ =
get_full_names =3D get_bool_resource("getFullNames", "GetFullNames", 0);=
=0A+ #endif=0A+ =0A reverse_stack =3D get_bool_resource("reverseStack"=
, "ReverseStack", 0);=0A reset_saver =3D get_bool_resource("resetSave=
r", "ResetSaver", 1);=0A /* The default here should be 1, but mwm suck=
s */=0A***************=0A*** 217,222 ****=0A--- 230,238 ----=0A xattri=
butes.cursor =3D cursor;=0A xattributes.event_mask =3D (ExposureMask|B=
uttonReleaseMask|ButtonPressMask=0A |LeaveWi=
ndowMask|Button1MotionMask=0A+ #ifdef CMU_ZWGCPLUS=0A+ =
|KeyPressMask=0A+ #endif=0A |Butto=
n3MotionMask|StructureNotifyMask);=0A xattributes_mask =3D (CWBackPixe=
l|CWBorderPixel|CWEventMask|CWCursor);=0A temp =3D get_string_resource=
("backingStore", "BackingStore");=0A***************=0A*** 458,468 ****=0A-=
-- 474,494 ----=0A static Region region;=0A static int partregion;=
=0A XRectangle rect;=0A+ #ifdef sun=0A+ XWindowAttributes window_att=
ributes_return;=0A+ #endif=0A =0A rect.x =3D (short) event->x;=0A =
rect.y =3D (short) event->y;=0A rect.width =3D (unsigned short) event->=
width;=0A rect.height =3D (unsigned short) event->height;=0A+ #ifdef su=
n /* This is to take care of sun display problems. a bad hack. */=0A+ XG=
etWindowAttributes(dpy,w,&window_attributes_return);=0A+ rect.x=3D0;=0A+=
rect.y=3D0;=0A+ rect.width=3Dwindow_attributes_return.width;=0A+ =
rect.height=3Dwindow_attributes_return.height;=0A+ #endif=0A =0A #ifdef M=
ARK_DEBUG=0A printf("----- xeventExpose:\nx=3D%d y=3D%d w=3D%d h=3D%d\n=
-----",=0Adiff -crtw dist/zephyr-2.0.2/clients/zwgc/X_gram.h zephyr-2.0.2/c=
lients/zwgc/X_gram.h=0A*** dist/zephyr-2.0.2/clients/zwgc/X_gram.h=09Mon Oc=
t 22 02:28:17 1990=0A--- zephyr-2.0.2/clients/zwgc/X_gram.h=09Wed Jan 3 15=
:34:47 1996=0A***************=0A*** 38,43 ****=0A--- 38,46 ----=0A char=
*text;=0A struct _x_gram *below,*above;=0A Window w;=0A+ #ifdef CM=
U_ZWGCPLUS=0A+ char *notice;=0A+ #endif=0A struct timeval can_die;=
=0A } x_gram;=0A =0Adiff -crtw dist/zephyr-2.0.2/clients/zwgc/eval.c zeph=
yr-2.0.2/clients/zwgc/eval.c=0A*** dist/zephyr-2.0.2/clients/zwgc/eval.c=09=
Fri Jul 7 17:59:28 1995=0A--- zephyr-2.0.2/clients/zwgc/eval.c=09Wed Dec 2=
0 16:45:01 1995=0A***************=0A*** 146,151 ****=0A--- 146,152 ----=0A =
case DOWNCASE_OPCODE:=0A case ZVAR_OPCODE:=0A case GET=
_OPCODE:=0A+ case STYLESTRIP_OPCODE:=0A first =3D eval_expr(=
expr->d.nodes.first);=0A =0A switch (opcode) {=0A***************=
=0A*** 164,169 ****=0A--- 165,173 ----=0A case VERBATIM_OPCODE:=
=0A return(verbatim(first,0));=0A =0A+ case STYLEST=
RIP_OPCODE:=0A+ return(stylestrip(first));=0A+ =0A c=
ase GETENV_OPCODE:=0A result =3D getenv(first);=0A =
if (!result)=0A***************=0A*** 203,208 ****=0A--- 207,213 ----=0A =
case NEQ_OPCODE:=0A case REGEQ_OPCODE:=0A case REGNEQ_O=
PCODE:=0A+ case ADD_OPCODE:=0A first =3D eval_expr(expr->d.n=
odes.first);=0A second =3D eval_expr(expr->d.nodes.second);=0A =
=0A***************=0A*** 236,241 ****=0A--- 241,257 ----=0A case=
REGNEQ_OPCODE:=0A bool_result =3D !ed_regexp_match_p(first, s=
econd);=0A break;=0A+ =0A+ case ADD_OPCODE:=0A+ =
{=0A+ char buf[16]; /* big enuf for int */=0A+ =0A+=
sprintf(buf, "%d", atoi(first) + atoi(second));=0A+ =
result =3D string_Copy(buf);=0A+ free(first);=0A+=
free(second);=0A+ return(result);=0A+ =
}=0A }=0A free(first);=0A free(second);=
=0Adiff -crtw dist/zephyr-2.0.2/clients/zwgc/exec.c zephyr-2.0.2/clients/zw=
gc/exec.c=0A*** dist/zephyr-2.0.2/clients/zwgc/exec.c=09Fri Jul 7 17:59:30=
1995=0A--- zephyr-2.0.2/clients/zwgc/exec.c=09Wed Jan 3 17:01:15 1996=0A*=
**************=0A*** 380,385 ****=0A--- 380,387 ----=0A { exec_noop },=
/* rbreak */=0A { exec_noop }, =
/* lspan */=0A { exec_noop }, /* rsp=
an */=0A+ { exec_noop }, /* stylestrip */=0A+ =
{ exec_noop }, /* add */=0A =0A { exec_noo=
p }, /* noop statement */=0A { exec_set },=0A=
***************=0A*** 452,457 ****=0A--- 454,463 ----=0A Node *progra=
m;=0A ZNotice_t *notice;=0A {=0A+ #ifdef CMU_ZWGCPLUS=0A+ set_st=
ored_notice(notice);=0A+ #endif=0A+ =0A notice_fields =3D notice->z_me=
ssage;=0A notice_fields_length =3D notice->z_message_len;=0A =0A*****=
**********=0A*** 465,468 ****=0A--- 471,480 ----=0A =0A clear_buffer(=
);=0A (void)exec_subtree(program);=0A+ =0A+ #ifdef CMU_ZWGCPLUS=0A+ =
plus_window_deletions(notice); /* OOPS */=0A+ plus_queue_notice(notic=
e);=0A+ set_stored_notice(NULL);=0A+ #endif=0A }=0Adiff -crtw dist/zep=
hyr-2.0.2/clients/zwgc/formatter.c zephyr-2.0.2/clients/zwgc/formatter.c=0A=
*** dist/zephyr-2.0.2/clients/zwgc/formatter.c=09Fri Jul 7 17:59:38 1995=
=0A--- zephyr-2.0.2/clients/zwgc/formatter.c=09Wed Dec 20 16:45:03 1995=0A*=
**************=0A*** 374,379 ****=0A--- 374,425 ----=0A return(temp);=
=0A }=0A =0A+ /* str points to a string. return value is another string=
=0A+ which is the original with all styles removed. */=0A+ string styles=
trip(str)=0A+ string str;=0A+ {=0A+ int templen =3D 0, otherchar;=
=0A+ char *temp =3D (char *) malloc(string_Length(str) + 1);=0A+ ch=
ar_stack chs;=0A+ string ostr =3D str;=0A+ =0A+ chs =3D char_stack_=
create();=0A+ =0A+ while (*str) {=0A+ if (*str =3D=3D '@') {=0A=
+ int len =3D env_length(str + 1);=0A+ if (len !=3D=
-1) {=0A+ otherchar =3D 0;=0A+ if ((len =
=3D=3D 4 && !strncasecmp(str + 1, "font", 4))=0A+ || (len=
=3D=3D 5 && !strncasecmp(str + 1, "color", 5))) {=0A+ =
otherchar =3D 0x80;=0A+ }=0A+ otherchar |=
=3D otherside(str[len + 1]);=0A+ char_stack_push(chs, other=
char);=0A+ str +=3D len + 2;=0A+ continue;=
=0A+ }=0A+ }=0A+ if (!char_stack_empty(chs) && =
*str =3D=3D (char_stack_top(chs) & 0x7f)) {=0A+ char_stack_pop(=
chs);=0A+ str++;=0A+ continue;=0A+ }=0A+ =
if (!char_stack_empty(chs) && (char_stack_top(chs) & 0x80))=0A+ =
str++;=0A+ else=0A+ temp[templen++] =3D *str++;=
=0A+ }=0A+ temp[templen] =3D 0;=0A+ =0A+ while (!char_stack_emp=
ty(chs))=0A+ char_stack_pop(chs);=0A+ free(ostr);=0A+ =0A+ =
return(temp);=0A+ }=0A+ =0A void free_desc(desc)=0A desctype *desc;=
=0A {=0Adiff -crtw dist/zephyr-2.0.2/clients/zwgc/lexer.c zephyr-2.0.2/cli=
ents/zwgc/lexer.c=0A*** dist/zephyr-2.0.2/clients/zwgc/lexer.c=09Fri Jul 7=
17:59:41 1995=0A--- zephyr-2.0.2/clients/zwgc/lexer.c=09Wed Dec 20 16:45:0=
4 1995=0A***************=0A*** 164,170 ****=0A { "upcas=
e", UPCASE },=0A { "while", WHILE },=0A =
{ "verbatim", VERBATIM },=0A! { "zvar", ZVAR } };=
=0A =0A /*=0A * lex_open - this routine [re]initializes the lexer & pre=
pares it to lex=0A--- 164,172 ----=0A { "upcase", UPCAS=
E },=0A { "while", WHILE },=0A { "v=
erbatim", VERBATIM },=0A! { "zvar", ZVAR },=0A! =
{ "stylestrip", STYLESTRIP },=0A! { "add", AD=
D } };=0A =0A /*=0A * lex_open - this routine [re]initializes the lexer=
& prepares it to lex=0Adiff -crtw dist/zephyr-2.0.2/clients/zwgc/main.c ze=
phyr-2.0.2/clients/zwgc/main.c=0A*** dist/zephyr-2.0.2/clients/zwgc/main.c=
=09Tue Jul 18 16:24:03 1995=0A--- zephyr-2.0.2/clients/zwgc/main.c=09Tue Ja=
n 16 13:22:12 1996=0A***************=0A*** 35,43 ****=0A #include "port.h"=
=0A #include "variables.h"=0A #include "main.h"=0A =0A extern void noti=
ce_handler();=0A! static void setup_signals(), detach();=0A =0A /*=0A *=
Global zwgc-wide variables:=0A--- 35,50 ----=0A #include "port.h"=0A #in=
clude "variables.h"=0A #include "main.h"=0A+ #ifdef CMU_BACKWARD_COMPAT=0A=
+ #include "int_dictionary.h"=0A+ #endif=0A+ #ifdef CMU_ZWGCPLUS=0A+ #inclu=
de "plus.h"=0A+ int zwgcplus =3D 0;=0A+ #endif=0A =0A extern void notice_=
handler();=0A! static void setup_signals(), detach(), signal_exit();=0A =
=0A /*=0A * Global zwgc-wide variables:=0A***************=0A*** 86,117 *=
***=0A =0A static void fake_startup_packet()=0A {=0A! ZNotice_t noti=
ce;=0A struct timezone tz;=0A char msgbuf[BUFSIZ];=0A =0A v=
ar_set_variable("version", zwgc_version_string);=0A =0A! (void) memset=
(¬ice, 0, sizeof(notice));=0A =0A! notice.z_version =3D "";=0A! =
notice.z_class =3D "WG_CTL_CLASS";=0A! notice.z_class_inst =3D "WG_CTL=
_USER<<<>>>";=0A! notice.z_opcode =3D "WG_STARTUP";=0A! notice.z_de=
fault_format =3D "Zwgc mark II version $version now running...\n";=0A! =
notice.z_recipient =3D "";=0A! notice.z_sender =3D "ZWGC";=0A! gett=
imeofday(¬ice.z_time,&tz);=0A! notice.z_port =3D 0;=0A! notice.z=
_kind =3D ACKED;=0A! notice.z_auth =3D ZAUTH_YES;=0A sprintf(msgbu=
f,"Zwgc mark II version %s now running...",=0A zwgc_version_st=
ring);=0A! notice.z_message =3D msgbuf;=0A! notice.z_message_len =
=3D strlen(notice.z_message)+1;=0A =0A! notice_handler(¬ice);=
=0A }=0A =0A static void read_in_description_file()=0A {=0A--- 93,133 -=
---=0A =0A static void fake_startup_packet()=0A {=0A! ZNotice_t *not=
ice =3D (ZNotice_t *)malloc(sizeof(ZNotice_t));=0A struct timezone tz;=
=0A char msgbuf[BUFSIZ];=0A =0A var_set_variable("version", zwgc=
_version_string);=0A =0A! (void) memset(notice, 0, sizeof(notice));=0A=
=0A! notice->z_version =3D "";=0A! notice->z_class =3D "WG_CTL_CL=
ASS";=0A! notice->z_class_inst =3D "WG_CTL_USER<<<>>>";=0A! notice-=
>z_opcode =3D "WG_STARTUP";=0A! notice->z_default_format =3D "Zwgc mark=
II version $version now running...\n";=0A! notice->z_recipient =3D "";=
=0A! notice->z_sender =3D "ZWGC";=0A! gettimeofday(&(notice->z_time=
),&tz);=0A! notice->z_port =3D 0;=0A! notice->z_kind =3D ACKED;=0A!=
notice->z_auth =3D ZAUTH_YES;=0A sprintf(msgbuf,"Zwgc mark II ver=
sion %s now running...",=0A zwgc_version_string);=0A! noti=
ce->z_message =3D msgbuf;=0A! notice->z_message_len =3D strlen(notice->=
z_message)+1;=0A =0A! notice_handler(notice);=0A! #ifdef CMU_ZWGCP=
LUS=0A! set_notice_fake(notice, 1);=0A! if (get_list_refcount(notic=
e) =3D=3D 0) {=0A! /* no windows created */=0A! free(notice);=
=0A }=0A+ #else=0A+ free(notice);=0A+ #endif=0A+ }=0A =0A static=
void read_in_description_file()=0A {=0A***************=0A*** 120,127 ****=
=0A--- 136,147 ----=0A =0A /* var_clear_all_variables(); <<<>>> */=0A =
=0A+ #ifdef ZCONFDIR =0A+ input_file =3D locate_file(description_fi=
lename_override, USRDESC, ZConfDir(PREFIX,DEFDESC,"ZEPHYRDIR"));=0A+ #else=
=0A sprintf(defdesc, "%s/%s", DATADIR, DEFDESC);=0A input_file =
=3D locate_file(description_filename_override, USRDESC, defdesc);=0A+ #endi=
f=0A if (input_file)=0A program =3D parse_file(input_file);=0A =
else=0A***************=0A*** 238,243 ****=0A--- 258,266 ----=0A =
* Initialize various subsystems in proper order:=0A */=0A dprint=
f("Initializing subsystems...\n"); /*<<<>>>*/=0A+ #ifdef CMU_ZWGCPLUS=0A+ =
init_noticelist();=0A+ #endif=0A mux_init();=0A var_clear_all_=
variables(); /* <<<>>> */=0A init_ports(); /* <<<>>> */=0A******=
*********=0A*** 260,265 ****=0A--- 283,293 ----=0A dprintf("Test Zwgc =
parser.\n\n");=0A read_in_description_file();=0A =0A+ #ifdef CMU_ZWGC=
PLUS=0A+ if (strcmp(progname, "zwgcplus") =3D=3D 0)=0A+ zwgcplus =
=3D 1;=0A+ #endif=0A+ =0A dprintf("Entering main loop\n");=0A mux=
_loop();=0A =0A***************=0A*** 278,283 ****=0A--- 306,352 ----=0A #=
define USER_SUPPRESS "SUPPRESS"=0A #define USER_UNSUPPRESS "UNSUPP=
RESS"=0A =0A+ #ifdef CMU_BACKWARD_COMPAT=0A+ #define USER_LIST_SUPPRESSED=
"LIST-SUPPRESSED"=0A+ =0A+ #define PUNT_INC 1024=0A+ extern int_dictionary=
puntable_addresses_dict;=0A+ ZNotice_t punt_reply;=0A+ =0A+ void create_pu=
nt_reply(punt)=0A+ int_dictionary_binding *punt;=0A+ {=0A+ string binding=
;=0A+ int key_len =3D strlen(punt->key);=0A+ char *tmp;=0A+ =0A+ if=
(!punt_reply.z_message) {=0A+ punt_reply.z_message =3D (char *)malloc(=
PUNT_INC);=0A+ punt_reply.z_message[0] =3D 0;=0A+ }=0A+ =0A+ if (=
(punt_reply.z_message_len + key_len + 1) / PUNT_INC > =0A+ (punt_repl=
y.z_message_len + PUNT_INC - 1) / PUNT_INC) {=0A+ char *new_message =3D=
(char *)malloc((punt_reply.z_message_len=0A+ =
/ PUNT_INC + 1) * PUNT_INC);=0A+ =0A+ strcpy(new_message=
, punt_reply.z_message);=0A+ =0A+ free(punt_reply.z_message);=0A+ =
punt_reply.z_message =3D new_message;=0A+ }=0A+ tmp =3D punt_reply.z=
_message + strlen(punt_reply.z_message);=0A+ strcat (punt_reply.z_message=
, punt->key);=0A+ strcat (punt_reply.z_message, "\n");=0A+ punt_reply.z=
_message_len +=3D key_len + 1;=0A+ =0A+ while (*tmp !=3D '\001') tmp++;=
=0A+ *tmp =3D ',';=0A+ while (*tmp !=3D '\001') tmp++;=0A+ *tmp =3D '=
,';=0A+ }=0A+ #endif /* CMU_BACKWARD_COMPAT */=0A+ =0A void notice_handl=
er(notice)=0A ZNotice_t *notice;=0A {=0A***************=0A*** 320,32=
5 ****=0A--- 389,443 ----=0A free(class);=0A free=
(instance);=0A free(recipient);=0A+ #ifdef CMU_BACKWARD_COMPAT=
=0A+ } else if (!strcasecmp(control_opcode, USER_LIST_SUPPRESSED)) =
{=0A+ struct sockaddr_in old, to;=0A+ int retval;=0A+ =
=0A+ if (!notice->z_port) {=0A+ printf("zwgc: can't r=
eply to LIST-SUPPRESSED request\n");=0A+ return;=0A+ =
}=0A+ memset((char *) &punt_reply, 0, sizeof(ZNotice_t));=0A+ =
punt_reply.z_kind =3D CLIENTACK;=0A+ punt_reply.z_class =
=3D WG_CTL_CLASS;=0A+ punt_reply.z_class_inst =3D "WG_REPLY";=0A+=
punt_reply.z_recipient =3D "zctl?";=0A+ punt_reply.z_s=
ender =3D "Zwgc";=0A+ punt_reply.z_default_format =3D "";=0A+ =
punt_reply.z_opcode =3D USER_LIST_SUPPRESSED;=0A+ punt_rep=
ly.z_port =3D notice->z_port;=0A+ punt_reply.z_message =3D NULL;=
=0A+ punt_reply.z_message_len =3D 0;=0A+ =0A+ =
if (puntable_addresses_dict) {=0A+ int_dictionary_Enumerate(pu=
ntable_addresses_dict,=0A+ create_punt=
_reply);=0A+ }=0A+ =0A+ old =3D ZGetDestAddr(=
);=0A+ to =3D old;=0A+ =0A+ to.sin_port =3D n=
otice->z_port;=0A+ if ((retval =3D ZSetDestAddr(&to)) !=3D ZERR_N=
ONE) {=0A+ com_err("zwgc",retval,"while setting destination add=
ress");=0A+ exit(1);=0A+ }=0A+ =0A+ ZSendNo=
tice(&punt_reply, ZNOAUTH);=0A+ =0A+ if ((retval =3D ZS=
etDestAddr(&old)) !=3D ZERR_NONE) {=0A+ com_err("zwgc",retval,"=
while resetting destination address");=0A+ exit(1);=0A+ =
}=0A+ =0A+ if (punt_reply.z_message) {=0A+ =
free(punt_reply.z_message);=0A+ punt_reply.z_message =3D NUL=
L;=0A+ }=0A+ #endif=0A+ } else if (!strcasecmp(control_op=
code, USER_EXIT)) {=0A+ signal_exit();=0A } else=0A =
printf("zwgc: unknown control opcode %s.\n", control_opcode);=0A =
=0Adiff -crtw dist/zephyr-2.0.2/clients/zwgc/main.h zephyr-2.0.2/clients/zw=
gc/main.h=0A*** dist/zephyr-2.0.2/clients/zwgc/main.h=09Fri Jun 30 17:52:44=
1995=0A--- zephyr-2.0.2/clients/zwgc/main.h=09Tue Jan 2 12:02:15 1996=0A*=
**************=0A*** 39,45 ****=0A--- 39,49 ----=0A * system default desc=
ription file */=0A =0A #ifndef DEFDESC=0A+ #ifdef ZCONFDIR=0A+ #define DE=
FDESC "lib/zephyr/zwgc.desc"=0A+ #else=0A #define DEFDESC "zwgc.desc"=0A+ =
#endif=0A #endif=0A =0A #endif=0Adiff -crtw dist/zephyr-2.0.2/clients/zw=
gc/mux.c zephyr-2.0.2/clients/zwgc/mux.c=0A*** dist/zephyr-2.0.2/clients/zw=
gc/mux.c=09Fri Jul 7 17:59:47 1995=0A--- zephyr-2.0.2/clients/zwgc/mux.c=
=09Wed Jan 3 17:04:30 1996=0A***************=0A*** 147,153 ****=0A--- 147,=
158 ----=0A tv.tv_sec =3D 10;=0A tv.tv_usec =3D 0=
;=0A } else {=0A+ #ifdef CMU_ZWGCPLUS=0A+ tv.tv_sec =3D =
plus_timequeue_events();=0A+ tv.tv_usec =3D 0;=0A+ #else=0A =
tv.tv_sec =3D tv.tv_usec =3D 0;=0A+ #endif=0A }=0A =0A =
/*=0A***************=0A*** 157,163 ****=0A--- 162,172 ----=0A =
input_sources_copy =3D input_sources;=0A =0A i =3D select(max_=
source+1, &input_sources_copy, (fd_set *)0,=0A+ #ifdef CMU_ZWGCPLUS=0A+ =
(fd_set *)NULL, (tv.tv_sec) ? &tv : (struct timeval *)0);=
=0A+ #else=0A (fd_set *)NULL, have_tty ? &tv : (struct =
timeval *)0);=0A+ #endif=0A =0A if (i =3D=3D -1) {=0A =
if (errno =3D=3D EINTR)=0Adiff -crtw dist/zephyr-2.0.2/clients/zwgc/node.=
c zephyr-2.0.2/clients/zwgc/node.c=0A*** dist/zephyr-2.0.2/clients/zwgc/nod=
e.c=09Fri Jul 7 17:59:56 1995=0A--- zephyr-2.0.2/clients/zwgc/node.c=09Wed=
Dec 20 16:45:07 1995=0A***************=0A*** 280,285 ****=0A--- 280,286 --=
--=0A "rbreak(%1, %2)",=0A "lspan(%1, %2)",=0A "rspan(%1, %2=
)",=0A+ "stylestrip(%1)",=0A =0A "noop\n",=0A "set %1 =3D %2=
\n",=0Adiff -crtw dist/zephyr-2.0.2/clients/zwgc/node.h zephyr-2.0.2/client=
s/zwgc/node.h=0A*** dist/zephyr-2.0.2/clients/zwgc/node.h=09Wed Nov 8 09:3=
5:58 1989=0A--- zephyr-2.0.2/clients/zwgc/node.h=09Wed Dec 20 16:45:08 1995=
=0A***************=0A*** 52,91 ****=0A #define RBREAK_OPCODE =
23=0A #define LSPAN_OPCODE 24=0A #define RSPAN_O=
PCODE 25=0A =0A! #define LAST_EXPR_OPCODE =
25=0A =0A! #define NOOP_OPCODE 26=0A! #define SET_OP=
CODE 27=0A! #define FIELDS_OPCODE 28=
=0A =0A! #define PRINT_OPCODE 29=0A! #define CLEARBUF_=
OPCODE 30=0A =0A! #define APPENDPORT_OPCODE 3=
1=0A! #define EXECPORT_OPCODE 32=0A! #define INPUTPORT_OPC=
ODE 33=0A! #define OUTPUTPORT_OPCODE 34=0A! #de=
fine PUT_OPCODE 35=0A! #define CLOSEINPUT_OPCODE =
36=0A! #define CLOSEOUTPUT_OPCODE 37=0A! #define CLO=
SEPORT_OPCODE 38=0A =0A! #define EXEC_OPCODE =
39=0A =0A! #define IF_STMT_OPCODE 40=0A! #define CA=
SE_OPCODE 41=0A! #define WHILE_OPCODE =
42=0A! #define BREAK_OPCODE 43=0A! #define EXIT_OPCODE=
44=0A =0A! #define IF_OPCODE 45=
=0A! #define ELSEIF_OPCODE 46=0A! #define ELSE_OPCODE =
47=0A! #define MATCHLIST_OPCODE 48=0A! #def=
ine DEFAULT_OPCODE 49=0A =0A! #define NUMBER_OF_OPCODES =
50=0A =0A typedef struct _Node {=0A int opcode; =
/* Read-only */=0A--- 52,93 ----=0A #define RBREAK_=
OPCODE 23=0A #define LSPAN_OPCODE 24=
=0A #define RSPAN_OPCODE 25=0A+ #define STYLESTRIP_OPC=
ODE 26=0A+ #define ADD_OPCODE 27=0A =0A!=
#define LAST_EXPR_OPCODE 27=0A =0A! #define NOOP_OPCODE =
28=0A! #define SET_OPCODE 29=0A! #de=
fine FIELDS_OPCODE 30=0A =0A! #define PRINT_OPCODE =
31=0A! #define CLEARBUF_OPCODE 32=0A =0A! #d=
efine APPENDPORT_OPCODE 33=0A! #define EXECPORT_OPCODE =
34=0A! #define INPUTPORT_OPCODE 35=0A! #define OU=
TPUTPORT_OPCODE 36=0A! #define PUT_OPCODE =
37=0A! #define CLOSEINPUT_OPCODE 38=0A! #define CLOSEOUTPUT=
_OPCODE 39=0A! #define CLOSEPORT_OPCODE 40=0A =
=0A! #define EXEC_OPCODE 41=0A =0A! #define IF_STMT_O=
PCODE 42=0A! #define CASE_OPCODE 43=0A!=
#define WHILE_OPCODE 44=0A! #define BREAK_OPCODE =
45=0A! #define EXIT_OPCODE 46=0A =0A! #de=
fine IF_OPCODE 47=0A! #define ELSEIF_OPCODE =
48=0A! #define ELSE_OPCODE 49=0A! #define MAT=
CHLIST_OPCODE 50=0A! #define DEFAULT_OPCODE =
51=0A =0A! #define NUMBER_OF_OPCODES 52=0A =0A typedef str=
uct _Node {=0A int opcode; /* Read-only *=
/=0Adiff -crtw dist/zephyr-2.0.2/clients/zwgc/notice.c zephyr-2.0.2/clients=
/zwgc/notice.c=0A*** dist/zephyr-2.0.2/clients/zwgc/notice.c=09Fri Jul 7 1=
8:00:00 1995=0A--- zephyr-2.0.2/clients/zwgc/notice.c=09Wed Jan 3 17:05:19=
1996=0A***************=0A*** 34,39 ****=0A--- 34,43 ----=0A #include "err=
or.h"=0A #include "variables.h"=0A #include "notice.h"=0A+ #ifdef CMU_ZWG=
CPLUS=0A+ #include <pwd.h>=0A+ #include "plus.h"=0A+ #endif=0A =0A /*=0A =
* int count_nulls(char *data, int length)=0A***************=0A*** 258,=
263 ****=0A--- 262,273 ----=0A char *temp;=0A string time, notyea=
r, year, date_string, time_string;=0A struct hostent *fromhost;=0A+ #i=
fdef CMU_INTERREALM=0A+ char new_recipient[REALM_SZ + 2];=0A+ #endif /*=
CMU_INTERREALM */=0A+ #ifdef CMU_ZWGCPLUS=0A+ extern char *getSelected=
Text();=0A+ #endif=0A =0A /*=0A * Convert useful notice fields =
to ascii and store away in=0A***************=0A*** 269,281 ****=0A--- 279,3=
10 ----=0A var_set_variable("instance", notice->z_class_inst);=0A =
var_set_variable("opcode", notice->z_opcode);=0A var_set_variable("de=
fault", notice->z_default_format);=0A+ #ifdef CMU_INTERREALM=0A+ if (!n=
otice->z_recipient[0]) {=0A+ var_set_variable("recipient", "*");=0A+ =
} else if (notice->z_recipient[0] =3D=3D '@') {=0A+ sprintf(new_r=
ecipient, "*%s", notice->z_recipient);=0A+ var_set_variable("recipien=
t", new_recipient);=0A+ } else {=0A+ var_set_variable("recipient"=
, notice->z_recipient);=0A+ }=0A+ #else =0A var_set_variable("reci=
pient",=0A (notice->z_recipient[0] ? notice->z_recipi=
ent : "*"));=0A+ #endif=0A var_set_variable("fullsender", notice->z_se=
nder);=0A var_set_variable_to_number("port", (int)notice->z_port);=0A =
var_set_variable_then_free_value("kind", z_kind_to_ascii(notice->z_kin=
d));=0A var_set_variable_then_free_value("auth", z_auth_to_ascii(notic=
e->z_auth));=0A =0A+ #ifdef CMU_ZWGCPLUS=0A+ if ((temp=3DgetSelectedTe=
xt()) !=3D 0)=0A+ var_set_variable("selection", temp);=0A+ =0A+ v=
ar_set_variable("delete_window", "none");=0A+ var_set_variable("event_t=
ime", "none");=0A+ var_set_variable("event_name", "event");=0A+ #endif=
=0A /*=0A * Set $sender to the name of the notice sender except =
first strip off the=0A * realm name if it is the local realm:=0A*****=
**********=0A*** 287,292 ****=0A--- 316,332 ----=0A else=0A var=
_set_variable("sender", notice->z_sender);=0A =0A+ #ifdef CMU_ZWGCPLUS=
=0A+ if (get_full_names) {=0A+ struct passwd *pwnam =3D getpwnam(=
var_get_variable("sender"));=0A+ if (pwnam) {=0A+ temp =3D st=
ring_Copy(pwnam->pw_gecos);=0A+ var_set_variable_then_free_value("s=
endername", temp);=0A+ } else {=0A+ var_set_variable("sendern=
ame", "unknown");=0A+ }=0A+ }=0A+ #endif=0A /*=0A * Co=
nvert time & date notice was sent to ascii. The $time=0A * has the f=
ormat "01:03:52" while $date has the format=0Adiff -crtw dist/zephyr-2.0.2/=
clients/zwgc/parser.y zephyr-2.0.2/clients/zwgc/parser.y=0A*** dist/zephyr-=
2.0.2/clients/zwgc/parser.y=09Fri Jul 7 18:00:03 1995=0A--- zephyr-2.0.2/c=
lients/zwgc/parser.y=09Wed Dec 20 16:45:11 1995=0A***************=0A*** 58,=
64 ****=0A %token ELSE ELSEIF ENDCASE ENDIF ENDWHILE EXEC EXECPORT EXIT=
=0A %token FIELDS GET GETENV IF INPUTPORT LANY LBREAK LSPAN=0A %token M=
ATCH NOOP NOT OUTPUTPORT PRINT PROTECT VERBATIM PUT RANY RBREAK=0A! %token =
RSPAN SET SUBSTITUTE THEN UPCASE WHILE ZVAR=0A =0A %type <node> expr var=
name string=0A %type <node> exprlist comma_exprlist varnamelist=0A--- 58,6=
4 ----=0A %token ELSE ELSEIF ENDCASE ENDIF ENDWHILE EXEC EXECPORT EXIT=0A=
%token FIELDS GET GETENV IF INPUTPORT LANY LBREAK LSPAN=0A %token MATC=
H NOOP NOT OUTPUTPORT PRINT PROTECT VERBATIM PUT RANY RBREAK=0A! %token RS=
PAN SET SUBSTITUTE THEN UPCASE WHILE ZVAR STYLESTRIP ADD=0A =0A %type <no=
de> expr varname string=0A %type <node> exprlist comma_exprlist varnamelis=
t=0A***************=0A*** 114,119 ****=0A--- 114,121 ----=0A { $$ =
=3D node_create_binary(REGEQ_OPCODE, $1, $3); }=0A | expr REGNEQ expr=
=0A { $$ =3D node_create_binary(REGNEQ_OPCODE, $1, $3); }=0A+ =
| expr ADD expr=0A+ { $$ =3D node_create_binary(ADD_OPCODE, $1, $3=
); }=0A =0A | BUFFER '(' ')'=0A { $$ =3D node_create_noary(=
BUFFER_OPCODE); }=0A***************=0A*** 134,139 ****=0A--- 136,143 ----=
=0A { $$ =3D node_create_unary(ZVAR_OPCODE, $3); }=0A | GET =
'(' expr ')'=0A { $$ =3D node_create_unary(GET_OPCODE, $3); }=0A+ =
| STYLESTRIP '(' expr ')'=0A+ { $$ =3D node_create_unary(STYLE=
STRIP_OPCODE, $3); }=0A =0A | LANY '(' expr ',' expr ')'=0A =
{ $$ =3D node_create_binary(LANY_OPCODE, $3, $5 ); }=0AOnly in zephyr-2.0.=
2/clients/zwgc: plus.c=0AOnly in zephyr-2.0.2/clients/zwgc: plus.h=0Adiff -=
crtw dist/zephyr-2.0.2/clients/zwgc/regexp.c zephyr-2.0.2/clients/zwgc/rege=
xp.c=0A*** dist/zephyr-2.0.2/clients/zwgc/regexp.c=09Sun Jul 23 02:29:13 19=
95=0A--- zephyr-2.0.2/clients/zwgc/regexp.c=09Wed Dec 20 16:45:12 1995=0A**=
*************=0A*** 77,107 ****=0A #endif=0A =0A #if !defined(HAVE_RE_CO=
MP) && !defined(HAVE_REGCOMP)=0A =0A! #ifdef HAVE_LIBGEN_H=0A! #include <l=
ibgen.h>=0A! #endif=0A =0A! static char *re;=0A =0A! char *re_comp(s)=0A!=
char *s;=0A {=0A! if(!s)=0A! return 0;=0A! if(re)=0A!=
free(re);=0A =0A! if(!(re =3D regcmp(s, (char *)0)))=0A! =
return "Bad argument to re_comp";=0A =0A! return 0;=0A }=0A =0A!=
int re_exec(s)=0A! char *s;=0A {=0A! return regex(re, s) !=3D 0;=
=0A }=0A =0A #endif=0A--- 77,402 ----=0A #endif=0A =0A #if !defined(H=
AVE_RE_COMP) && !defined(HAVE_REGCOMP)=0A+ #define CBRA 1=0A+ #define CC=
HR 2=0A+ #define CDOT 4=0A+ #define CCL 6=0A+ #define NCCL 8=
=0A+ #define CDOL 10=0A+ #define CEOFS 11=0A+ #define CKET 12=0A+ #=
define CBACK 18=0A =0A! #define CSTAR 01=0A =0A! #define ESIZE 512=
=0A! #define NBRA 9=0A =0A! static char expbuf[ESIZE], *braslist[NB=
RA], *braelist[NBRA];=0A! static char circf;=0A! =0A! /*=0A! * compile=
the regular expression argument into a dfa=0A! */=0A! char *=0A! re_comp(=
sp)=0A! register char *sp;=0A {=0A! register int c;=
=0A! register char *ep =3D expbuf;=0A! int cclcnt, nu=
mbra =3D 0;=0A! char *lastep =3D 0;=0A! char bracket[=
NBRA];=0A! char *bracketp =3D &bracket[0];=0A! static c=
har *retoolong =3D "Regular expression too long";=0A =0A! #define comer=
r(msg) {expbuf[0] =3D 0; numbra =3D 0; return(msg); }=0A =0A! if (=
sp =3D=3D 0 || *sp =3D=3D '\0') {=0A! if (*ep =3D=3D 0)=0A!=
return("No previous regular expression");=0A! =
return(0);=0A }=0A+ if (*sp =3D=3D '^') {=0A+ =
circf =3D 1;=0A+ sp++;=0A+ }=0A+ =
else=0A+ circf =3D 0;=0A+ for (;;) {=0A+ =
if (ep >=3D &expbuf[ESIZE])=0A+ comerr(=
retoolong);=0A+ if ((c =3D *sp++) =3D=3D '\0') {=0A+ =
if (bracketp !=3D bracket)=0A+ =
comerr("unmatched \\(");=0A+ *ep++ =3D CEOFS;=
=0A+ *ep++ =3D 0;=0A+ retur=
n(0);=0A+ }=0A+ if (c !=3D '*')=0A+ =
lastep =3D ep;=0A+ switch (c) {=0A =0A! =
case '.':=0A! *ep++ =3D CDOT;=0A! =
continue;=0A! =0A! case '*':=0A! =
if (lastep =3D=3D 0 || *lastep =3D=3D CBRA || *lastep =
=3D=3D CKET)=0A! goto defchar;=0A! =
*lastep |=3D CSTAR;=0A! continue;=
=0A! =0A! case '$':=0A! if (*sp !=
=3D '\0')=0A! goto defchar;=0A! =
*ep++ =3D CDOL;=0A! continue;=0A! =0A!=
case '[':=0A! *ep++ =3D CCL;=0A! =
*ep++ =3D 0;=0A! cclcnt =3D =
1;=0A! if ((c =3D *sp++) =3D=3D '^') {=0A! =
c =3D *sp++;=0A! ep=
[-2] =3D NCCL;=0A! }=0A! do=
{=0A! if (c =3D=3D '\0')=0A! =
comerr("missing ]");=0A! =
if (c =3D=3D '-' && ep [-1] !=3D 0) {=0A! =
if ((c =3D *sp++) =3D=3D ']') {=0A! =
*ep++ =3D '-';=0A! =
cclcnt++;=0A! =
break;=0A! }=0A! =
while (ep[-1] < c) {=0A! =
*ep =3D ep[-1] + 1;=0A! =
ep++;=0A! =
cclcnt++;=0A! if (ep >=
=3D &expbuf[ESIZE])=0A! =
comerr(retoolong);=0A! }=0A! =
}=0A! *ep++ =
=3D c;=0A! cclcnt++;=0A! =
if (ep >=3D &expbuf[ESIZE])=0A! =
comerr(retoolong);=0A! } while ((c =3D *=
sp++) !=3D ']');=0A! lastep[1] =3D cclcnt;=0A! =
continue;=0A! =0A! case '\\':=0A! =
if ((c =3D *sp++) =3D=3D '(') {=0A! =
if (numbra >=3D NBRA)=0A! =
comerr("too many \\(\\) pairs");=0A! *br=
acketp++ =3D numbra;=0A! *ep++ =3D CBRA;=0A=
! *ep++ =3D numbra++;=0A! =
continue;=0A! }=0A! =
if (c =3D=3D ')') {=0A! if (bracket=
p <=3D bracket)=0A! comerr("unmatch=
ed \\)");=0A! *ep++ =3D CKET;=0A! =
*ep++ =3D *--bracketp;=0A! =
continue;=0A! }=0A! =
if (c >=3D '1' && c < ('1' + NBRA)) {=0A! *=
ep++ =3D CBACK;=0A! *ep++ =3D c - '1';=0A! =
continue;=0A! }=0A!=
*ep++ =3D CCHR;=0A! *ep++ =
=3D c;=0A! continue;=0A! =0A! defch=
ar:=0A! default:=0A! *ep++ =3D CCHR=
;=0A! *ep++ =3D c;=0A! }=0A! =
}=0A! }=0A! =0A! /* =0A! * match the argument string against the compile=
d re=0A! */=0A! int=0A! re_exec(p1)=0A! register char *p1;=0A {=
=0A! register char *p2 =3D expbuf;=0A! register int c;=
=0A! int rv;=0A! =0A! for (c =3D 0; c < NBRA; c++) {=0A=
! braslist[c] =3D 0;=0A! braelist[c] =3D 0;=
=0A! }=0A! if (circf)=0A! return((advance(p=
1, p2)));=0A! /*=0A! * fast check for first character=0A! =
*/=0A! if (*p2 =3D=3D CCHR) {=0A! c =3D p2=
[1];=0A! do {=0A! if (*p1 !=3D c)=
=0A! continue;=0A! =
if (rv =3D advance(p1, p2))=0A! return(rv);=
=0A! } while (*p1++);=0A! return(0);=0A! =
}=0A! /*=0A! * regular algorithm=0A! */=0A!=
do=0A! if (rv =3D advance(p1, p2))=0A! =
return(rv);=0A! while (*p1++);=0A! return(0);=
=0A! }=0A! =0A! /* =0A! * try to match the next thing in the dfa=0A! */=
=0A! static int=0A! advance(lp, ep)=0A! register char *lp, *ep;=
=0A! {=0A! register char *curlp;=0A! int ct, i;=0A! =
int rv;=0A! =0A! for (;;)=0A! switch (*e=
p++) {=0A! =0A! case CCHR:=0A! if (=
*ep++ =3D=3D *lp++)=0A! continue;=0A! =
return(0);=0A! =0A! case CDOT:=0A! =
if (*lp++)=0A! continue;=
=0A! return(0);=0A! =0A! case CDOL:=
=0A! if (*lp =3D=3D '\0')=0A! =
continue;=0A! return(0);=0A! =0A! =
case CEOFS:=0A! return(1);=0A! =0A! =
case CCL:=0A! if (cclass(ep, *lp++, 1)) =
{=0A! ep +=3D *ep;=0A! =
continue;=0A! }=0A! =
return(0);=0A! =0A! case NCCL:=0A! =
if (cclass(ep, *lp++, 0)) {=0A! ep +=
=3D *ep;=0A! continue;=0A! =
}=0A! return(0);=0A! =0A! c=
ase CBRA:=0A! braslist[*ep++] =3D lp;=0A! =
continue;=0A! =0A! case CKET:=0A! =
braelist[*ep++] =3D lp;=0A! continue;=
=0A! =0A! case CBACK:=0A! if (brael=
ist[i =3D *ep++] =3D=3D 0)=0A! return(-1);=
=0A! if (backref(i, lp)) {=0A! =
lp +=3D braelist[i] - braslist[i];=0A! =
continue;=0A! }=0A! =
return(0);=0A! =0A! case CBACK|CSTAR:=0A! =
if (braelist[i =3D *ep++] =3D=3D 0)=0A! =
return(-1);=0A! curlp =3D lp;=0A! =
ct =3D braelist[i] - braslist[i];=0A! w=
hile (backref(i, lp))=0A! lp +=3D ct;=0A! =
while (lp >=3D curlp) {=0A! =
if (rv =3D advance(lp, ep))=0A! =
return(rv);=0A! lp -=3D ct;=0A! =
}=0A! continue;=0A! =0A! =
case CDOT|CSTAR:=0A! curlp =3D lp;=0A! =
while (*lp++)=0A! ;=0A!=
goto star;=0A! =0A! case CCHR|CSTA=
R:=0A! curlp =3D lp;=0A! wh=
ile (*lp++ =3D=3D *ep)=0A! ;=0A! =
ep++;=0A! goto star;=0A! =0A! =
case CCL|CSTAR:=0A! case NCCL|CSTAR:=0A! =
curlp =3D lp;=0A! while (cclass(ep, =
*lp++, ep[-1] =3D=3D (CCL|CSTAR)))=0A! ;=0A=
! ep +=3D *ep;=0A! goto sta=
r;=0A! =0A! star:=0A! do {=0A! =
lp--;=0A! if (r=
v =3D advance(lp, ep))=0A! return(r=
v);=0A! } while (lp > curlp);=0A! =
return(0);=0A! =0A! default:=0A! =
return(-1);=0A! }=0A! }=0A! =0A! backref(i, lp)=0A! =
register int i;=0A! register char *lp;=0A! {=0A! =
register char *bp;=0A! =0A! bp =3D braslist[i];=0A! whil=
e (*bp++ =3D=3D *lp++)=0A! if (bp >=3D braelist[i])=0A! =
return(1);=0A! return(0);=0A! }=0A! =0A! int=
=0A! cclass(set, c, af)=0A! register char *set, c;=0A! in=
t af;=0A! {=0A! register int n;=0A! =0A! if (c =3D=
=3D 0)=0A! return(0);=0A! n =3D *set++;=0A! =
while (--n)=0A! if (*set++ =3D=3D c)=0A! =
return(af);=0A! return(! af);=0A }=0A =0A #endif=0Adiff -=
crtw dist/zephyr-2.0.2/clients/zwgc/subscriptions.c zephyr-2.0.2/clients/zw=
gc/subscriptions.c=0A*** dist/zephyr-2.0.2/clients/zwgc/subscriptions.c=09F=
ri Jun 30 17:53:04 1995=0A--- zephyr-2.0.2/clients/zwgc/subscriptions.c=09T=
ue Jan 2 15:06:34 1996=0A***************=0A*** 43,49 ****=0A /*=0A *=0A=
*/=0A! static int_dictionary puntable_addresses_dict =3D 0;=0A =0A sta=
tic void init_puntable_dict()=0A {=0A--- 43,53 ----=0A /*=0A *=0A */=
=0A! #ifdef CMU_BACKWARD_COMPAT=0A! int_dictionary puntable_addresses_dict =
=3D 0;=0A! #else=0A! statuc int_dictionary puntable_addresses_dict =3D 0;=
=0A! #endif=0A =0A static void init_puntable_dict()=0A {=0A*************=
**=0A*** 56,61 ****=0A--- 60,68 ----=0A string recipient;=0A {=0A =
string result;=0A+ #ifdef CMU_INTERREALM=0A+ char rlm_recipient[REAL=
M_SZ + 2];=0A+ #endif /* INTERREALM */=0A =0A /*=0A * Treat a r=
ecipient of "" as "*":=0A***************=0A*** 62,67 ****=0A--- 69,79 ----=
=0A */=0A if (string_Eq(recipient,""))=0A recipient =3D "=
*";=0A+ #ifdef CMU_INTERREALM=0A+ else if (recipient[0] =3D=3D '@') {=
=0A+ recipient =3D string_Concat("*", recipient);=0A+ }=0A+ #endi=
f /* INTERREALM */=0A =0A /*=0A * The following is a hack for n=
ow only. It should be replaced with=0Adiff -crtw dist/zephyr-2.0.2/clients=
/zwgc/text_operations.h zephyr-2.0.2/clients/zwgc/text_operations.h=0A*** d=
ist/zephyr-2.0.2/clients/zwgc/text_operations.h=09Wed Nov 8 09:36:33 1989=
=0A--- zephyr-2.0.2/clients/zwgc/text_operations.h=09Wed Dec 20 16:45:14 19=
95=0A***************=0A*** 29,33 ****=0A--- 29,34 ----=0A extern string ra=
ny();=0A extern string rbreak();=0A extern string rspan();=0A+ extern str=
ing stylestrip();=0A =0A #endif=0Adiff -crtw dist/zephyr-2.0.2/clients/zw=
gc/xcut.c zephyr-2.0.2/clients/zwgc/xcut.c=0A*** dist/zephyr-2.0.2/clients/=
zwgc/xcut.c=09Fri Jul 7 18:00:35 1995=0A--- zephyr-2.0.2/clients/zwgc/xcut=
.c=09Tue Jan 23 11:51:04 1996=0A***************=0A*** 38,43 ****=0A--- 38,4=
6 ----=0A #include "xmark.h"=0A #include "error.h"=0A #include "xrevstac=
k.h"=0A+ #ifdef CMU_ZWGCPLUS=0A+ #include "plus.h"=0A+ #endif=0A =0A /*=
=0A *=0A***************=0A*** 170,177 ****=0A--- 173,188 ----=0A del=
ete_gram(gram);=0A free(gram->text);=0A free(gram->blocks);=0A+ #=
ifdef CMU_ZWGCPLUS=0A+ if (gram->notice)=0A+ list_del_notice(gram=
->notice);=0A+ #endif=0A free(gram);=0A =0A+ #ifdef CMU_ZWGCPLUS=0A+ =
XFlush(dpy);=0A+ #endif=0A+ =0A if (bottom_gram =3D=3D NULL && unl=
inked =3D=3D NULL) {=0A /* flush colormap here */=0A }=0A*****=
**********=0A*** 197,202 ****=0A--- 208,243 ----=0A * Dispatch on the=
event type:=0A */=0A switch(event->type) {=0A+ #ifdef CMU_ZWGCP=
LUS=0A+ case KeyPress: =0A+ {=0A+ char c;=0A+ cha=
r *plusvar;=0A+ int res, metaflag;=0A+ res =3D XLookupStrin=
g(event, &c, 1, NULL, NULL);=0A+ metaflag =3D event->xkey.state & M=
od1Mask;=0A+ =0A+ /* Recheck if zwgcplus is turned on; =0A+ =
* Zephyr variables override zwgc variables =0A+ */=0A+ =0A+ =
zwgcplus =3D 1;=0A+ plusvar =3D (char *)ZGetVariable("zwgcplus=
") ? (char *)ZGetVariable("zwgcplus") : (char *)var_get_variable("zwgcplus"=
);=0A+ =0A+ if ((plusvar[0]=3D=3D'\0') || (strcmp(plusvar,"no") =3D=
=3D 0))=0A+ zwgcplus =3D 0;=0A+ else {=0A+ if (=
strcmp(plusvar,"no") =3D=3D 0)=0A+ zwgcplus =3D 0;=0A+ =
if (strcmp(plusvar,"new") =3D=3D 0)=0A+ zwgcplus =3D 2;=0A+ =
}=0A+ =0A+ if (res !=3D 0 && zwgcplus !=3D 0)=0A+ =
plus_retry_notice(gram->notice, c, metaflag);=0A+ }=0A+ break;=
=0A+ #endif=0A case ClientMessage:=0A if ((event->xclient.m=
essage_type =3D=3D XA_WM_PROTOCOLS) &&=0A (event->xclient.form=
at =3D=3D 32) &&=0A***************=0A*** 269,274 ****=0A--- 310,319 ----=0A=
selected_text =3D xmarkGetText();=0A /* this=
is ok, since to get here, the selection must be owned */=0A =
current_pressop =3D PRESSOP_EXT;=0A+ #ifdef CMU_ZWGCPLUS=0A+ =
if (selected_text)=0A+ XStoreBytes(dpy, selected_text, str=
len(selected_text)+1);=0A+ #endif=0A }=0A } else if ( =
(event->xbutton.state)&ControlMask ) {=0A current_pressop =3D P=
RESSOP_NUKE;=0Adiff -crtw dist/zephyr-2.0.2/clients/zwgc/xshow.c zephyr-2.0=
.2/clients/zwgc/xshow.c=0A*** dist/zephyr-2.0.2/clients/zwgc/xshow.c=09Fri =
Jul 7 18:00:50 1995=0A--- zephyr-2.0.2/clients/zwgc/xshow.c=09Tue Jan 30 0=
9:51:23 1996=0A***************=0A*** 33,38 ****=0A--- 33,43 ----=0A #inclu=
de "X_fonts.h"=0A #include "X_gram.h"=0A #include "xmode_stack.h"=0A+ #if=
def CMU_ZWGCPLUS=0A+ #include <zephyr/zephyr.h>=0A+ #include "xrevstack.h"=
=0A+ #include "plus.h"=0A+ #endif=0A =0A #define max(a,b) ((a)>(b)?(a):=
(b))=0A =0A***************=0A*** 113,118 ****=0A--- 118,126 ----=0A d=
esc =3D string_Concat2 (desc, mode->substyle);=0A result =3D xres_get_=
resource (&fgcolor_resources, desc);=0A free (desc);=0A+ if (resul=
t =3D=3D NULL)=0A+ if ((result =3D var_get_variable("X_foreground")),=
(result[0]=3D=3D'\0'))=0A+ return NULL;=0A return result;=0A =
}=0A =0A***************=0A*** 143,149 ****=0A int lofs, cofs, rofs;=
=0A int ystart,yend;=0A =0A! char *bgstr, *geometry, xpos[10], yp=
os[10], xfrom, yfrom;=0A =0A gram =3D (x_gram *)malloc(sizeof(x_gram)=
);=0A =0A--- 151,157 ----=0A int lofs, cofs, rofs;=0A int ystart=
,yend;=0A =0A! char *bgstr, *fgstr, *geometry, xpos[10], ypos[10], xfr=
om, yfrom;=0A =0A gram =3D (x_gram *)malloc(sizeof(x_gram));=0A =0A*=
**************=0A*** 327,337 ****=0A--- 335,355 ----=0A if (bgstr && b=
gstr[0])=0A gram->bgcolor =3D x_string_to_color(bgstr,default_bgcolo=
r);=0A =0A+ if ((bgstr =3D var_get_variable("X_background")),(bgstr[0]=
=3D=3D'\0'))=0A+ if ((bgstr =3D xres_get_bgcolor(style))=3D=3DNULL)=
=0A+ if ((bgstr =3D var_get_variable("default_X_background")),=0A+ =
(bgstr[0]=3D=3D'\0'))=0A+ gram->bgcolor =3D default_b=
gcolor;=0A+ if (bgstr && bgstr[0])=0A+ gram->bgcolor =3D x_string=
_to_color(bgstr,default_bgcolor);=0A =0A gram_xsize =3D maxwidth+(int=
ernal_border_width<<1);=0A gram_ysize =3D yofs+internal_border_width;=
=0A gram->numblocks =3D num;=0A gram->blocks =3D blocks;=0A+ #ifd=
ef CMU_ZWGCPLUS=0A+ gram->notice =3D get_stored_notice();=0A+ #endif =
=0A =0A x_gram_create(dpy, gram, gram_xalign, gram_yalign, gram_xpos=
,=0A gram_ypos, gram_xsize, gram_ysize, beepcount);=0A**=
*************=0A*** 577,580 ****=0A--- 595,674 ----=0A }=0A =0A #endif /=
* X_DISPLAY_MISSING */=0A+ #ifdef CMU_ZWGCPLUS=0A+ void =0A+ plus_window_de=
letions(notice)=0A+ ZNotice_t *notice;=0A+ {=0A+ x_gram *tmp, *fry;=0A+=
char *val;=0A+ int done;=0A+ static char class_nm[NAMESIZE], instanc=
e_nm[NAMESIZE];=0A =0A+ if (!dpy)=0A+ return;=0A+ =0A+ val =3D=
var_get_variable("delete_window");=0A+ =0A+ if (val && !strcmp(val, "t=
his")) {=0A+ do {=0A+ done =3D 1;=0A+ tmp =3D bottom_gram;=
=0A+ while (tmp) {=0A+ if (tmp->notice =3D=3D (char *)notice)=
{=0A+ fry =3D tmp;=0A+ tmp =3D tmp->above;=0A+ =
xdestroygram(dpy, fry->w, desc_context, fry);=0A+ done =3D 0;=
=0A+ }=0A+ else {=0A+ tmp =3D tmp->above;=0A+ =
}=0A+ }=0A+ } while (!done);=0A+ }=0A+ else if (val && !=
strcmp(val, "ci")) {=0A+ strcpy(class_nm, notice->z_class);=0A+ str=
cpy(instance_nm, notice->z_class_inst);=0A+ do {=0A+ done =3D 1;=
=0A+ tmp =3D bottom_gram;=0A+ while (tmp) {=0A+ if (com=
p_str(((ZNotice_t *)(tmp->notice))->z_class_inst, instance_nm)=0A+ =
&& comp_str(((ZNotice_t *)(tmp->notice))->z_class, class_nm)) {=0A+ =
fry =3D tmp;=0A+ tmp =3D tmp->above;=0A+ xdestro=
ygram(dpy, fry->w, desc_context, fry);=0A+ done =3D 0;=0A+ =
}=0A+ else {=0A+ tmp =3D tmp->above;=0A+ }=
=0A+ }=0A+ } while (!done);=0A+ }=0A+ else if (val && !strcmp=
(val, "c")) {=0A+ strcpy(class_nm, notice->z_class);=0A+ do {=0A+ =
done =3D 1;=0A+ tmp =3D bottom_gram;=0A+ while (tmp) {=0A+=
if (comp_str(((ZNotice_t *)(tmp->notice))->z_class, class_nm)) { =
=0A+ fry =3D tmp;=0A+ tmp =3D tmp->above;=0A+ =
xdestroygram(dpy, fry->w, desc_context, fry);=0A+ done =3D 0;=
=0A+ }=0A+ else {=0A+ tmp =3D tmp->above;=0A+ =
}=0A+ }=0A+ } while (!done);=0A+ }=0A+ else if (val && !=
strcmp(val, "all")) {=0A+ while (bottom_gram) {=0A+ xdestroygram(=
dpy, bottom_gram->w, desc_context, bottom_gram);=0A+ }=0A+ }=0A+ }=0A=
+ #endif=0Adiff -crtw dist/zephyr-2.0.2/clients/zwgc/zephyr.c zephyr-2.0.2/=
clients/zwgc/zephyr.c=0A*** dist/zephyr-2.0.2/clients/zwgc/zephyr.c=09Fri J=
ul 7 18:00:53 1995=0A--- zephyr-2.0.2/clients/zwgc/zephyr.c=09Wed Jan 3 1=
5:06:36 1996=0A***************=0A*** 35,40 ****=0A--- 35,43 ----=0A #inclu=
de "subscriptions.h"=0A #include "variables.h"=0A #include "pointer.h"=0A=
+ #ifdef CMU_ZWGCPLUS=0A+ #include "plus.h"=0A+ #endif=0A =0A #ifdef DEBU=
G=0A extern int zwgc_debug;=0A***************=0A*** 104,110 ****=0A stati=
c void handle_zephyr_input(notice_handler)=0A void (*notice_handler)(=
);=0A {=0A! ZNotice_t notice;=0A struct sockaddr_in from;=0A =
int complete_packets_ready;=0A =0A--- 107,113 ----=0A static void handle=
_zephyr_input(notice_handler)=0A void (*notice_handler)();=0A {=0A! =
ZNotice_t *notice;=0A struct sockaddr_in from;=0A int complet=
e_packets_ready;=0A =0A***************=0A*** 116,127 ****=0A if (=
complete_packets_ready=3D=3D0)=0A return;=0A =0A! TRAP(=
ZReceiveNotice(¬ice, &from), "while getting zephyr notice" );=0A =
if (!error_code) {=0A! notice.z_auth =3D ZCheckAuthenticatio=
n(¬ice, &from);=0A! notice_handler(¬ice);=0A! =
ZFreeNotice(¬ice);=0A }=0A }=0A }=0A =0A--- 119,143 ---=
-=0A if (complete_packets_ready=3D=3D0)=0A return;=0A =
=0A! notice =3D (ZNotice_t *)malloc(sizeof(ZNotice_t));=0A! =0A! =
TRAP( ZReceiveNotice(notice, &from), "while getting zephyr notice" );=
=0A if (!error_code) {=0A! notice->z_auth =3D ZCheckAu=
thentication(notice, &from);=0A! notice_handler(notice);=0A! #i=
fndef CMU_ZWGCPLUS=0A! ZFreeNotice(notice);=0A! fre=
e(notice);=0A! #endif=0A }=0A+ #ifdef CMU_ZWGCPLUS=0A+ if =
(get_list_refcount(notice) =3D=3D 0) {=0A+ /* no windows create=
d */=0A+ if (!get_notice_fake(notice))=0A+ ZFre=
eNotice(notice);=0A+ free(notice);=0A+ }=0A+ #endif=0A =
}=0A }=0A =0Adiff -crtw dist/zephyr-2.0.2/clients/zwrite/Makefile.in=
zephyr-2.0.2/clients/zwrite/Makefile.in=0A*** dist/zephyr-2.0.2/clients/zw=
rite/Makefile.in=09Fri Jul 7 18:03:50 1995=0A--- zephyr-2.0.2/clients/zwri=
te/Makefile.in=09Wed Dec 20 16:47:16 1995=0A***************=0A*** 5,10 ****=
=0A--- 5,11 ----=0A datadir=3D@datadir@=0A confdir=3D@confdir@=0A sbindi=
r=3D@sbindir@=0A+ lsbindir=3D@lsbindir@=0A =0A includedir=3D$(prefix)/inc=
lude=0A mandir=3D$(prefix)/man=0A***************=0A*** 33,40 ****=0A chec=
k:=0A =0A install: zwrite=0A! $(INSTALL) -m 755 -s zwrite $(bindi=
r)=0A! $(INSTALL) -m 644 $(srcdir)/zwrite.1 $(mandir)/man1=0A =0A =
clean:=0A rm -f $(OBJS) zwrite=0A--- 34,41 ----=0A check:=0A =
=0A install: zwrite=0A! $(INSTALL) -m 755 -s zwrite ${DESTDIR}$(bi=
ndir)=0A! $(INSTALL) -m 644 $(srcdir)/zwrite.1 ${DESTDIR}$(mandir)/=
man1=0A =0A clean:=0A rm -f $(OBJS) zwrite=0Adiff -crtw dist/zep=
hyr-2.0.2/clients/zwrite/zwrite.c zephyr-2.0.2/clients/zwrite/zwrite.c=0A**=
* dist/zephyr-2.0.2/clients/zwrite/zwrite.c=09Fri Jul 7 18:03:57 1995=0A--=
- zephyr-2.0.2/clients/zwrite/zwrite.c=09Thu Feb 1 13:41:00 1996=0A*******=
********=0A*** 29,34 ****=0A--- 29,39 ----=0A =0A #define MAXRECIPS 100=
=0A =0A+ #ifdef CMU_INTERREALM=0A+ char *rlmarg;=0A+ char rlmbuf[BUFSIZ];=
=0A+ #endif /* INTERREALM */=0A+ =0A int nrecips, msgarg, verbose, quiet, =
nodot;=0A char *whoami, *inst, *class, *opcode, *recips[MAXRECIPS];=0A Z_=
AuthProc auth;=0A***************=0A*** 59,64 ****=0A--- 64,72 ----=0A =
auth =3D ZAUTH;=0A verbose =3D quiet =3D msgarg =3D nrecips =3D nochec=
k =3D filsys =3D nodot =3D 0;=0A tabexpand =3D 1;=0A+ #ifdef CMU_INTER=
REALM=0A+ rlmarg =3D 0;=0A+ #endif /* INTERREALM */=0A =0A if (cl=
ass =3D ZGetVariable("zwrite-class")) {=0A (void) strcpy(classbfr,=
class);=0A***************=0A*** 170,175 ****=0A--- 178,191 ----=0A =
arg++;=0A format =3D argv[arg];=0A break;=
=0A+ #ifdef CMU_INTERREALM=0A+ case 'r':=0A+ if (arg =
=3D=3D argc-1)=0A+ usage(whoami);=0A+ arg++;=0A+ =
rlmarg =3D argv[arg];=0A+ break;=0A+ #endif /* INTE=
RREALM */=0A default:=0A usage(whoami);=0A }=
=0A***************=0A*** 184,189 ****=0A--- 200,211 ----=0A usage(=
whoami);=0A }=0A =0A+ #ifdef CMU_INTERREALM=0A+ if (rlmarg) {=0A+=
(void) strcpy(rlmbuf, (char *) ZExpandRealm(rlmarg));=0A+ }=0A+ =
#endif /* INTERREALM */=0A+ =0A if (!signature) {=0A /* try t=
o find name in the password file */=0A register struct passwd *pwd=
;=0A***************=0A*** 315,325 ****=0A--- 337,370 ----=0A int i, su=
ccess, retval;=0A char bfr[BUFSIZ];=0A ZNotice_t retnotice;=0A+ #=
ifdef CMU_INTERREALM=0A+ char rlmrecip[BUFSIZ];=0A+ char *cp;=0A+ #=
endif /* INTERREALM */=0A =0A success =3D 0;=0A =0A for=
(i=3D0;i<nrecips || !nrecips;i++) {=0A+ #ifdef CMU_INTERREALM=0A+ if=
(rlmarg) {=0A+ (void) sprintf(rlmrecip, "%s@%s", nrecips?recips[i]=
:"", rlmbuf);=0A+ notice->z_recipient =3D rlmrecip;=0A+ } els=
e {=0A+ if (nrecips && (cp =3D strchr(recips[i], '@'))) {=0A+ =
(void) strcpy(rlmrecip, recips[i]);=0A+ cp =3D strchr(rlmrec=
ip, '@');=0A+ if (cp) {=0A+ *cp++;=0A+ (v=
oid) strcpy(cp, (char *) ZExpandRealm(cp));=0A+ }=0A+ n=
otice->z_recipient =3D rlmrecip;=0A+ } else {=0A+ #endif=0A =
notice->z_recipient =3D nrecips?recips[i]:"";=0A+ #ifdef CMU_INTERREALM=
=0A+ }=0A+ }=0A+ #endif=0A if (verbose && real)=0A =
printf("Sending %smessage, class %s, instance %s, to %s\n", =0A=
auth?"authenticated ":"", =0A***************=0A*** 401=
,410 ****=0A--- 446,463 ----=0A usage(s)=0A char *s;=0A {=0A+ #ifdef=
CMU_INTERREALM=0A fprintf(stderr,=0A "Usage: %s [-a] [-o] =
[-d] [-v] [-q] [-n] [-t] [-u] [-l]\n\=0A+ \t[-r realm]\=0A \t[-c class] [-=
i inst] [-O opcode] [-f fsname] [-s signature]\n\=0A \t[user ...] [-F form=
at] [-m message]\n", s);=0A+ #else=0A+ fprintf(stderr,=0A+ "U=
sage: %s [-a] [-o] [-d] [-v] [-q] [-n] [-t] [-u] [-l]\n\=0A+ \t[-c class] [=
-i inst] [-O opcode] [-f fsname] [-s signature]\n\=0A+ \t[user ...] [-F for=
mat] [-m message]\n", s);=0A+ #endif=0A fprintf(stderr,"\t-f and -c ar=
e mutually exclusive\n\=0A \t-f and -i are mutually exclusive\n\=0A \trec=
ipients must be specified unless -c or -f specifies a class\n\=0Adiff -crtw=
dist/zephyr-2.0.2/h/config.h.in zephyr-2.0.2/h/config.h.in=0A*** dist/zeph=
yr-2.0.2/h/config.h.in=09Tue Jul 18 16:25:11 1995=0A--- zephyr-2.0.2/h/conf=
ig.h.in=09Fri Jan 26 16:24:46 1996=0A***************=0A*** 164,166 ****=0A-=
-- 164,202 ----=0A =0A /* Define if you have the w library (-lw). */=0A =
#undef HAVE_LIBW=0A+ =0A+ /* Define if you have the <dirent.h> header file=
. */=0A+ #undef HAVE_DIRENT_H=0A+ =0A+ /* Define if you have the <sys/dir.=
h> header file. */=0A+ #undef HAVE_SYS_DIR_H=0A+ =0A+ /* Define if you hav=
e the <sys/ndir.h> header file. */=0A+ #undef HAVE_SYS_NDIR_H=0A+ =0A+ /* =
Define if you have the <ndir.h> header file. */=0A+ #undef HAVE_NDIR_H=0A+=
=0A+ /* Define to allow users to locate themselves if they are opstaff */=
=0A+ #define OPSTAFF_LOCATE_SELF=0A+ =0A+ /* Define to get CMU interrealm *=
/=0A+ #define CMU_INTERREALM=0A+ =0A+ /* Define to get hm_flush restriction=
s in zctl */=0A+ #define HM_FLUSH_RESTRICT=0A+ =0A+ /* Define to pull in ZC=
onfDir stuff */=0A+ #define ZCONFDIR=0A+ =0A+ /* Define to pull in CMU back=
ward compat foo */=0A+ #define CMU_BACKWARD_COMPAT=0A+ =0A+ /* Define to di=
sable server checksum checking */=0A+ #define NO_SERVER_CKSUM=0A+ =0A+ /* D=
efine to enable zwgcplus support */=0A+ #define CMU_ZWGCPLUS=0A+ =0A+ /* De=
fine to enable support for krb_life_to_time, if you have it */=0A+ #define =
AFS_LIFETIMES=0Adiff -crtw dist/zephyr-2.0.2/h/zephyr/zephyr.h.in zephyr-2.=
0.2/h/zephyr/zephyr.h.in=0A*** dist/zephyr-2.0.2/h/zephyr/zephyr.h.in=09Tue=
Jul 18 16:26:22 1995=0A--- zephyr-2.0.2/h/zephyr/zephyr.h.in=09Sat Jan 27 =
04:11:06 1996=0A***************=0A*** 47,52 ****=0A--- 47,55 ----=0A #defi=
ne SERVER_SVCNAME "zephyr-clt"=0A #define SERVER_SERVICE =
"zephyr"=0A #define SERVER_INSTANCE "zephyr"=0A+ #ifdef CMU_INTER=
REALM=0A+ #define SERVER_SRVTAB "/etc/srvtab"=0A+ #endif=0A =0A =
#define ZVERSIONHDR "ZEPH"=0A #define ZVERSIONMAJOR 0=0A***********=
****=0A*** 215,222 ****=0A #ifdef Z_DEBUG=0A void Z_debug ZP((ZCONST char=
*, ...));=0A #endif=0A! =0A #undef ZP=0A =0A /* Compatibility */=0A #=
define ZNewLocateUser ZLocateUser=0A--- 218,229 ----=0A #ifdef Z_DEBUG=0A =
void Z_debug ZP((ZCONST char *, ...));=0A #endif=0A! char *ZConfDir ZP((c=
har *begin, char *end, char *env));=0A #undef ZP=0A+ #ifdef INTERREALM=0A+=
char *ZExpandRealm ZP((char *realm));=0A+ #endif=0A+ char *ZConfDir ZP((ch=
ar *begin, char *end, char *env));=0A =0A /* Compatibility */=0A #define=
ZNewLocateUser ZLocateUser=0A***************=0A*** 235,240 ****=0A--- 242,=
251 ----=0A /* Session key for last parsed packet - server only */=0A ext=
ern C_Block __Zephyr_session;=0A #define ZGetSession() (__Zephyr_session)=
=0A+ #ifdef CMU_INTERREALM=0A+ extern int __Zephyr_session_time;=0A+ #defin=
e ZGetSessionTime() (__Zephyr_session_time)=0A+ #endif /* INTERREALM */=0A =
#else=0A #define __Zephyr_realm ("local-realm")=0A #endif=0A************=
***=0A*** 275,280 ****=0A--- 286,300 ----=0A /* Control codes sent to a se=
rver */=0A #define ZEPHYR_CTL_CLASS "ZEPHYR_CTL" /* Class */=0A =
=0A+ #define ZEPHYR_CTL_REALM "REALM" /* Inst: From realm *=
/=0A+ #define REALM_ADD_SUBSCRIBE "ADD_SUBSCRIBE" /* Opcode: Add =0A+ =
* subscriptions */=0A+ #def=
ine REALM_REQ_SUBSCRIBE "REQ_SUBSCRIBE" /* Opcode: Request =0A+ =
* subscriptions */=0A+ #define RE=
ALM_SUBSCRIBE "RLM_SUBSCRIBE" /* Opcode: Subscribe realm */=0A+ #de=
fine REALM_UNSUBSCRIBE "RLM_UNSUBSCRIBE" /* Opcode:=0A+ =
* Unsubcribe realm */=0A+=
=0A #define ZEPHYR_CTL_CLIENT "CLIENT" /* Inst: From client =
*/=0A #define CLIENT_SUBSCRIBE "SUBSCRIBE" /* Opcode: Subscribe=
*/=0A #define CLIENT_SUBSCRIBE_NODEFS "SUBSCRIBE_NODEFS" /* Opcode: =
Subscribe */=0A***************=0A*** 335,340 ****=0A--- 355,361 ----=0A /*=
WG_CTL class messages */=0A #define WG_CTL_CLASS "WG_CTL" =
/* Class */=0A =0A+ #define USER_EXIT "EXIT" /* =
Opcode: Exit the client */=0A #define WG_CTL_USER "USER" =
/* Inst: User request */=0A #define USER_REREAD "REREAD" =
/* Opcode: Reread desc file */=0A #define USER_SHUTDOWN "S=
HUTDOWN" /* Opcode: Go catatonic */=0Adiff -crtw dist/zephyr-2.0.2/lib=
/Makefile.in zephyr-2.0.2/lib/Makefile.in=0A*** dist/zephyr-2.0.2/lib/Makef=
ile.in=09Sun Jul 23 12:10:16 1995=0A--- zephyr-2.0.2/lib/Makefile.in=09Wed =
Dec 20 18:12:00 1995=0A***************=0A*** 1,7 ****=0A SHELL =3D /bin/sh=
=0A =0A SUPPORT_LIBS=3D@SUPPORT_LIBS@=0A! SUBDIRS=3D$(SUPPORT_LIBS) dyn z=
ephyr=0A =0A all:=0A for i in $(SUBDIRS); do (cd $$i; $(MAKE) $(=
MFLAGS) $@) || exit 1; done=0A--- 1,7 ----=0A SHELL =3D /bin/sh=0A =0A S=
UPPORT_LIBS=3D@SUPPORT_LIBS@=0A! SUBDIRS=3D$(SUPPORT_LIBS) des dyn zephyr=
=0A =0A all:=0A for i in $(SUBDIRS); do (cd $$i; $(MAKE) $(MFLAG=
S) $@) || exit 1; done=0Adiff -crtw dist/zephyr-2.0.2/lib/dyn/Makefile.in z=
ephyr-2.0.2/lib/dyn/Makefile.in=0A*** dist/zephyr-2.0.2/lib/dyn/Makefile.in=
=09Fri Jun 30 17:59:39 1995=0A--- zephyr-2.0.2/lib/dyn/Makefile.in=09Wed De=
c 20 16:56:39 1995=0A***************=0A*** 5,10 ****=0A--- 5,11 ----=0A da=
tadir=3D@datadir@=0A confdir=3D@confdir@=0A sbindir=3D@sbindir@=0A+ lsbin=
dir=3D@lsbindir@=0A =0A includedir=3D$(prefix)/include=0A mandir=3D$(pre=
fix)/man=0A***************=0A*** 26,32 ****=0A all: libdyn.a dyntest=0A =
=0A libdyn.a: $(OBJS)=0A! $(AR) cru $@ $(OBJS)=0A $(RANLI=
B) $@=0A =0A dyntest: libdyn.a dyntest.o=0A--- 27,33 ----=0A all: libdyn=
.a dyntest=0A =0A libdyn.a: $(OBJS)=0A! ar cru $@ $(OBJS)=0A =
$(RANLIB) $@=0A =0A dyntest: libdyn.a dyntest.o=0Adiff -crtw dist/ze=
phyr-2.0.2/lib/et/Makefile.in zephyr-2.0.2/lib/et/Makefile.in=0A*** dist/ze=
phyr-2.0.2/lib/et/Makefile.in=09Fri Jul 7 18:08:33 1995=0A--- zephyr-2.0.2=
/lib/et/Makefile.in=09Wed Dec 20 18:08:52 1995=0A***************=0A*** 5,14=
****=0A--- 5,16 ----=0A datadir=3D@datadir@=0A confdir=3D@confdir@=0A s=
bindir=3D@sbindir@=0A+ lsbindir=3D@lsbindir@=0A =0A includedir=3D$(prefix=
)/include=0A mandir=3D$(prefix)/man=0A libdir=3D$(exec_prefix)/lib=0A+ bi=
ndir=3D$(exec_prefix)/bin=0A =0A srcdir=3D@srcdir@=0A top_srcdir=3D@top_=
srcdir@=0A***************=0A*** 28,34 ****=0A all: libcom_err.a compile_et=
=0A =0A libcom_err.a: $(OBJS)=0A! $(AR) cru $@ $(OBJS)=0A =
$(RANLIB) $@=0A =0A compile_et: compile_et.o error_table.o=0A--- 30,36 =
----=0A all: libcom_err.a compile_et=0A =0A libcom_err.a: $(OBJS)=0A! =
ar cru $@ $(OBJS)=0A $(RANLIB) $@=0A =0A compile_et: compi=
le_et.o error_table.o=0A***************=0A*** 39,47 ****=0A check:=0A =0A=
install:=0A! $(INSTALL) -m 644 libcom_err.a $(libdir)=0A! =
$(INSTALL) -m 644 $(srcdir)/com_err.h $(includedir)=0A! $(INSTALL)=
-m 644 $(srcdir)/com_err.3 $(mandir)/man3=0A =0A clean:=0A rm -=
f $(OBJS) libcom_err.a compile_et.o error_table.o et_lex.lex.c=0A--- 41,50 =
----=0A check:=0A =0A install:=0A! $(INSTALL) -m 644 libcom_err.=
a ${DESTDIR}$(libdir)=0A! $(INSTALL) -m 644 $(srcdir)/com_err.h ${D=
ESTDIR}$(includedir)=0A! $(INSTALL) -m 644 $(srcdir)/com_err.3 ${DE=
STDIR}$(mandir)/man3=0A! $(INSTALL) -m 644 $(srcdir)/compile_et ${D=
ESTDIR}$(bindir)=0A =0A clean:=0A rm -f $(OBJS) libcom_err.a com=
pile_et.o error_table.o et_lex.lex.c=0Adiff -crtw dist/zephyr-2.0.2/lib/ss/=
Makefile.in zephyr-2.0.2/lib/ss/Makefile.in=0A*** dist/zephyr-2.0.2/lib/ss/=
Makefile.in=09Tue Jul 4 00:27:18 1995=0A--- zephyr-2.0.2/lib/ss/Makefile.i=
n=09Wed Dec 20 18:10:14 1995=0A***************=0A*** 5,14 ****=0A--- 5,16 -=
---=0A datadir=3D@datadir@=0A confdir=3D@confdir@=0A sbindir=3D@sbindir@=
=0A+ lsbindir=3D@lsbindir@=0A =0A includedir=3D$(prefix)/include=0A mand=
ir=3D$(prefix)/man=0A libdir=3D$(exec_prefix)/lib=0A+ bindir=3D$(exec_pref=
ix)/bin=0A =0A srcdir=3D@srcdir@=0A top_srcdir=3D@top_srcdir@=0A********=
*******=0A*** 18,23 ****=0A--- 20,26 ----=0A YACC=3D@YACC@=0A LEX=3D@LEX@=
=0A RANLIB=3D@RANLIB@=0A+ INSTALL=3D@INSTALL@=0A COMPILE_ET=3D@COMPILE_ET=
@=0A =0A DEBUG=3D-O=0A***************=0A*** 34,45 ****=0A $(CC) =
$(LDFLAGS) -o $@ $(MKOBJS) $(LIBS)=0A =0A libss.a: $(OBJS)=0A! $(=
AR) cru $@ $(OBJS)=0A $(RANLIB) $@=0A =0A ss_err.c $(BUILDTOP)/h=
/ss/ss_err.h: ss_err.et=0A $(COMPILE_ET) $(srcdir)/ss_err.et=0A! =
mv ss_err.h $(BUILDTOP)/h/ss/ss_err.h=0A =0A std_rqs.c: std_rqs.ct=
=0A ./mk_cmds $(srcdir)/std_rqs.ct=0A--- 37,48 ----=0A $(=
CC) $(LDFLAGS) -o $@ $(MKOBJS) $(LIBS)=0A =0A libss.a: $(OBJS)=0A! =
ar cru $@ $(OBJS)=0A $(RANLIB) $@=0A =0A ss_err.c $(BUILDTOP)/=
h/ss/ss_err.h: ss_err.et=0A $(COMPILE_ET) $(srcdir)/ss_err.et=0A! =
cp ss_err.h $(BUILDTOP)/h/ss/ss_err.h=0A =0A std_rqs.c: std_rqs.c=
t=0A ./mk_cmds $(srcdir)/std_rqs.ct=0A***************=0A*** 47,52 =
****=0A--- 50,61 ----=0A check:=0A =0A install:=0A+ $(INSTALL) -=
m 644 libss.a ${DESTDIR}$(libdir)=0A+ $(INSTALL) -m 644 $(srcdir)/s=
s.h ${DESTDIR}$(includedir)/ss=0A+ $(INSTALL) -m 644 $(srcdir)/ss_e=
rr.h ${DESTDIR}$(includedir)/ss=0A+ $(INSTALL) -m 644 $(srcdir)/mit=
-sipb-copyright.h \=0A+ ${DESTDIR}$(includedir)/ss=0A+ =
$(INSTALL) -m 755 $(srcdir)/mk_cmds ${DESTDIR}$(bindir)=0A =0A clean:=
=0A rm -f $(OBJS) $(MKOBJS) mk_cmds libss.a ss_err.[ch] std_rqs.c=
=0Adiff -crtw dist/zephyr-2.0.2/lib/zephyr/Makefile.in zephyr-2.0.2/lib/zep=
hyr/Makefile.in=0A*** dist/zephyr-2.0.2/lib/zephyr/Makefile.in=09Fri Jul 7=
18:10:52 1995=0A--- zephyr-2.0.2/lib/zephyr/Makefile.in=09Tue Jan 30 14:29=
:45 1996=0A***************=0A*** 5,10 ****=0A--- 5,11 ----=0A datadir=3D@d=
atadir@=0A confdir=3D@confdir@=0A sbindir=3D@sbindir@=0A+ lsbindir=3D@lsb=
indir@=0A =0A includedir=3D$(prefix)/include=0A mandir=3D$(prefix)/man=
=0A***************=0A*** 21,27 ****=0A =0A DEBUG=3D-O=0A CFLAGS=3D $(DEB=
UG) -DCONFDIR=3D\"$(confdir)\" -I$(top_srcdir)/h -I$(BUILDTOP)/h \=0A! =
@X_CFLAGS@ @CPPFLAGS@=0A =0A OBJS =3D zephyr_err.o ZAsyncLocate.o ZC=
kAuth.o ZCkIfNot.o ZClosePort.o \=0A ZCmpUID.o ZCmpUIDP.o ZFlsLocs=
.o ZFlsSubs.o ZFmtAuth.o ZFmtList.o \=0A--- 22,28 ----=0A =0A DEBUG=3D-O=
=0A CFLAGS=3D $(DEBUG) -DCONFDIR=3D\"$(confdir)\" -I$(top_srcdir)/h -I$(BU=
ILDTOP)/h \=0A! -DPREFIX=3D\"$(prefix)\" -DDATADIR=3D\"$(datadir)\"=
@X_CFLAGS@ @CPPFLAGS@=0A =0A OBJS =3D zephyr_err.o ZAsyncLocate.o ZCkAu=
th.o ZCkIfNot.o ZClosePort.o \=0A ZCmpUID.o ZCmpUIDP.o ZFlsLocs.o =
ZFlsSubs.o ZFmtAuth.o ZFmtList.o \=0A***************=0A*** 31,53 ****=0A =
ZOpenPort.o ZParseNot.o ZPeekIfNot.o ZPeekNot.o ZPeekPkt.o ZPending.=
o \=0A ZReadAscii.o ZRecvNot.o ZRecvPkt.o ZRetSubs.o ZSendList.o Z=
SendNot.o \=0A ZSendPkt.o ZSendRaw.o ZSendRLst.o ZSetDest.o ZSetFD=
.o ZSetSrv.o \=0A! ZSubs.o ZVariables.o ZWait4Not.o Zinternal.o=0A =
=0A all: libzephyr.a=0A =0A libzephyr.a: $(OBJS)=0A! $(AR) cru =
$@ $(OBJS)=0A $(RANLIB) $@=0A =0A zephyr_err.c $(BUILDTOP)/h/zep=
hyr/zephyr_err.h: zephyr_err.et=0A $(COMPILE_ET) $(srcdir)/zephyr_=
err.et=0A! mv zephyr_err.h $(BUILDTOP)/h/zephyr=0A =0A check:=0A =
=0A install: libzephyr.a=0A! $(INSTALL) -m 644 libzephyr.a $(libd=
ir)=0A! $(INSTALL) -m 644 $(srcdir)/zephyr.1 $(mandir)/man1=0A =0A=
clean:=0A rm -f $(OBJS) libzephyr.a zephyr_err.c zephyr_err.h=0A=
--- 32,54 ----=0A ZOpenPort.o ZParseNot.o ZPeekIfNot.o ZPeekNot.o =
ZPeekPkt.o ZPending.o \=0A ZReadAscii.o ZRecvNot.o ZRecvPkt.o ZRet=
Subs.o ZSendList.o ZSendNot.o \=0A ZSendPkt.o ZSendRaw.o ZSendRLst=
.o ZSetDest.o ZSetFD.o ZSetSrv.o \=0A! ZSubs.o ZVariables.o ZWait4N=
ot.o Zinternal.o ZExpnRlm.o ZCnfDir.o=0A =0A all: libzephyr.a=0A =0A li=
bzephyr.a: $(OBJS)=0A! ar cru $@ $(OBJS)=0A $(RANLIB) $@=
=0A =0A zephyr_err.c $(BUILDTOP)/h/zephyr/zephyr_err.h: zephyr_err.et=0A =
$(COMPILE_ET) $(srcdir)/zephyr_err.et=0A! cp zephyr_err.h =
$(BUILDTOP)/h/zephyr=0A =0A check:=0A =0A install: libzephyr.a=0A! =
$(INSTALL) -m 644 libzephyr.a ${DESTDIR}$(libdir)=0A! $(INSTALL=
) -m 644 $(srcdir)/zephyr.1 ${DESTDIR}$(mandir)/man1=0A =0A clean:=0A =
rm -f $(OBJS) libzephyr.a zephyr_err.c zephyr_err.h=0Adiff -crtw dist=
/zephyr-2.0.2/lib/zephyr/ZAsyncLocate.c zephyr-2.0.2/lib/zephyr/ZAsyncLocat=
e.c=0A*** dist/zephyr-2.0.2/lib/zephyr/ZAsyncLocate.c=09Fri Jul 7 18:10:54=
1995=0A--- zephyr-2.0.2/lib/zephyr/ZAsyncLocate.c=09Thu Feb 1 19:39:49 19=
96=0A***************=0A*** 26,31 ****=0A--- 26,34 ----=0A {=0A int re=
tval;=0A ZNotice_t notice;=0A+ #ifdef CMU_INTERREALM=0A+ char *cp,=
*realm;=0A+ #endif /* INTERREALM */=0A =0A if (ZGetFD() < 0)=0A =
if ((retval =3D ZOpenPort((u_short *)0)) !=3D ZERR_NONE)=0A***********=
****=0A*** 35,40 ****=0A--- 38,54 ----=0A notice.z_kind =3D kind;=0A =
notice.z_port =3D __Zephyr_port;=0A notice.z_class =3D LOCATE_CLAS=
S;=0A+ #ifdef CMU_INTERREALM=0A+ cp =3D strchr(user, '@');=0A+ if (=
cp) {=0A+ realm =3D (char *) ZExpandRealm(cp + 1);=0A+ *cp =3D =
'\0';=0A+ if (!(notice.z_class_inst =3D malloc(strlen(user) + strlen(=
realm) + 2)))=0A+ return (ENOMEM);=0A+ =0A+ (void) sprint=
f(notice.z_class_inst, "%s@%s", user, realm);=0A+ } else=0A+ #endif=0A =
notice.z_class_inst =3D user;=0A notice.z_opcode =3D LOCATE_LOCAT=
E;=0A notice.z_sender =3D 0;=0A***************=0A*** 42,49 ****=0A--- =
56,73 ----=0A notice.z_default_format =3D "";=0A notice.z_message=
_len =3D 0;=0A =0A+ #ifdef CMU_INTERREALM=0A+ retval =3D ZSendNotice(&=
notice, auth);=0A+ =0A+ if (cp)=0A+ free(notice.z_class_inst);=0A=
+ =0A+ if (retval !=3D ZERR_NONE)=0A+ return (retval);=0A+ #els=
e /* INTERREALM */=0A if ((retval =3D ZSendNotice(¬ice, auth)) !=3D=
ZERR_NONE)=0A return(retval);=0A+ #endif=0A =0A if ((zald->us=
er =3D (char *) malloc(strlen(user)+1)) =3D=3D NULL) {=0A return(E=
NOMEM);=0Adiff -crtw dist/zephyr-2.0.2/lib/zephyr/ZCkAuth.c zephyr-2.0.2/li=
b/zephyr/ZCkAuth.c=0A*** dist/zephyr-2.0.2/lib/zephyr/ZCkAuth.c=09Fri Jun 3=
0 18:03:53 1995=0A--- zephyr-2.0.2/lib/zephyr/ZCkAuth.c=09Wed Dec 20 19:28:=
40 1995=0A***************=0A*** 32,37 ****=0A--- 32,43 ----=0A struct =
sockaddr_in *from;=0A { =0A #ifdef ZEPHYR_USES_KERBEROS=0A+ # ifdef=
CMU_INTERREALM=0A+ static C_Block key[2];=0A+ char srcprincipal[AN=
AME_SZ+INST_SZ+REALM_SZ+4];=0A+ KTEXT_ST authent, tempauthent;=0A+ =
AUTH_DAT dat;=0A+ # endif /* INTERREALM */=0A int result;=0A ZChe=
cksum_t our_checksum;=0A CREDENTIALS cred;=0A***************=0A*** 43,=
64 ****=0A if (!notice->z_auth)=0A return (ZAUTH_NO);=0A =
=0A if ((result =3D krb_get_cred(SERVER_SERVICE, SERVER_INSTANCE,=
=0A __Zephyr_realm, &cred)) !=3D 0)=0A =
return (ZAUTH_NO);=0A! =0A #ifdef NOENCRYPTION=0A our_checksum =
=3D 0;=0A! #else=0A our_checksum =3D des_quad_cksum(notice->z_packet, =
NULL, =0A notice->z_default_format+=0A =
strlen(notice->z_default_format)+1-=0A =
notice->z_packet, 0, cred.session);=0A! #e=
ndif=0A /* if mismatched checksum, then the packet was corrupted */=0A=
return ((our_checksum =3D=3D notice->z_checksum) ? ZAUTH_YES : ZAUTH_=
FAILED);=0A =0A! #else=0A return (notice->z_auth ? ZAUTH_YES : ZAUTH_=
NO);=0A #endif=0A } =0A--- 49,136 ----=0A if (!notice->z_auth)=0A =
return (ZAUTH_NO);=0A =0A+ #ifdef CMU_INTERREALM=0A+ if=
(__Zephyr_server) {=0A+ if (notice->z_authent_len <=3D 0) /* bogus l=
ength */=0A+ return(ZAUTH_FAILED);=0A+ if (ZReadAscii(notice->z=
_ascii_authent, =0A+ strlen(notice->z_ascii_authent)+1, =
=0A+ (unsigned char *)authent.dat, =0A+ =
notice->z_authent_len) =3D=3D ZERR_BADFIELD) {=0A+ return (ZAUTH_F=
AILED);=0A+ }=0A+ authent.length =3D notice->z_aut=
hent_len;=0A+ result =3D krb_rd_req(&authent, SERVER_SERVICE, =0A+ =
SERVER_INSTANCE, from->sin_addr.s_addr, =0A+ =
&dat, SERVER_SRVTAB);=0A+ if (result =3D=3D RD_AP_OK)=
{=0A+ memcpy((char *)__Zephyr_session, (char *)dat.session, =0A+ =
sizeof(C_Block));=0A+ __Zephyr_session_time =3D dat.time_sec=
;=0A+ (void) sprintf(srcprincipal, "%s%s%s@%s", dat.pname, =0A+ =
dat.pinst[0]?".":"", dat.pinst, dat.prealm);=0A+ if (=
strcmp(srcprincipal, notice->z_sender))=0A+ return (ZAUTH_FAILED);=
=0A+ if (dat.checksum) {=0A+ our_checksum =3D des_quad_cksum(=
notice->z_packet, NULL, =0A+ notice->=
z_default_format+=0A+ strlen(notice->=
z_default_format)+1- =0A+ notice->z_p=
acket, 0, dat.session);=0A+ return ((our_checksum =3D=3D notice->z_=
checksum) ? ZAUTH_YES : ZAUTH_FAILED);=0A+ }=0A+ return(ZAUTH_Y=
ES);=0A+ } else=0A+ return (ZAUTH_FAILED); /* didn=
't decode correctly */=0A+ }=0A+ =0A+ /* Try the most recent key */=
=0A+ our_checksum =3D des_quad_cksum(notice->z_packet, NULL, =0A+ =
notice->z_default_format+=0A+ =
strlen(notice->z_default_format)+1-=0A+ =
notice->z_packet, 0, key[0]);=0A+ if (our_checksum =3D=3D no=
tice->z_checksum)=0A+ return (ZAUTH_YES);=0A+ /* Try an older key=
*/=0A+ our_checksum =3D des_quad_cksum(notice->z_packet, NULL, =0A+ =
notice->z_default_format+=0A+ =
strlen(notice->z_default_format)+1-=0A+ =
notice->z_packet, 0, key[1]);=0A+ if (our_checksum =3D=3D=
notice->z_checksum)=0A+ return (ZAUTH_YES);=0A+ if (result =3D k=
rb_get_cred(SERVER_SERVICE, SERVER_INSTANCE, =0A+ =
__Zephyr_realm, &cred))=0A+ {=0A+ /* let it try to get new=
zephyr.zephyr if it needs it */=0A+ result=3D krb_mk_req(&tempauthen=
t, SERVER_SERVICE, SERVER_INSTANCE, =0A+ __Zephyr_=
realm,1);=0A+ #endif=0A if ((result =3D krb_get_cred(SERVER_SERVICE,=
SERVER_INSTANCE, =0A __Zephyr_realm, &cr=
ed)) !=3D 0)=0A return (ZAUTH_NO);=0A! #ifdef CMU_INTERREALM=0A! =
}=0A! #endif=0A #ifdef NOENCRYPTION=0A our_checksum =3D 0;=0A! #=
else /* NOENCRYPTION */=0A our_checksum =3D des_quad_cksum(notice->z_p=
acket, NULL, =0A notice->z_default_format+=
=0A strlen(notice->z_default_format)+1-=0A=
notice->z_packet, 0, cred.session);=0A! #=
endif /* NOENCRYPTION */=0A! #ifdef CMU_INTERREALM=0A! if (our_checksum=
=3D=3D notice->z_checksum) {=0A! (void) memcpy(key[1], key[0], sizeo=
f(C_Block));=0A! (void) memcpy(key[0], cred.session, sizeof(cred.sess=
ion));=0A! return (ZAUTH_YES);=0A! } else=0A! return (ZAUTH=
_FAILED);=0A! #else=0A /* if mismatched checksum, then the packet was =
corrupted */=0A return ((our_checksum =3D=3D notice->z_checksum) ? ZAU=
TH_YES : ZAUTH_FAILED);=0A+ #endif=0A =0A! #else /* ZEPHYR_USES_KERBEROS *=
/=0A return (notice->z_auth ? ZAUTH_YES : ZAUTH_NO);=0A #endif=0A } =
=0AOnly in zephyr-2.0.2/lib/zephyr: ZCnfDir.c=0AOnly in zephyr-2.0.2/lib/ze=
phyr: ZExpnRlm.c=0Adiff -crtw dist/zephyr-2.0.2/lib/zephyr/ZMkAuth.c zephyr=
-2.0.2/lib/zephyr/ZMkAuth.c=0A*** dist/zephyr-2.0.2/lib/zephyr/ZMkAuth.c=09=
Tue Jul 18 16:28:04 1995=0A--- zephyr-2.0.2/lib/zephyr/ZMkAuth.c=09Wed Dec =
20 19:42:11 1995=0A***************=0A*** 22,27 ****=0A--- 22,30 ----=0A #i=
nclude <krb_err.h>=0A static long last_authent_time =3D 0L;=0A static KTE=
XT_ST last_authent;=0A+ # if defined(CMU_INTERREALM) && !defined(NOENCRYPTI=
ON)=0A+ static CREDENTIALS last_cred;=0A+ # endif /* INTERREALM && !NOENCRY=
PTION */=0A #endif=0A =0A Code_t ZResetAuthentication () {=0A***********=
****=0A*** 45,50 ****=0A--- 48,56 ----=0A ZChecksum_t checksum;=0A =
CREDENTIALS cred;=0A extern unsigned long des_quad_cksum();=0A+ # if=
defined(CMU_INTERREALM) && !defined(NOENCRYPTION)=0A+ char *ptr;=0A+ #=
endif=0A =0A now =3D time(0);=0A if (last_authent_time =3D=3D 0 =
|| (now - last_authent_time > 120)) {=0A***************=0A*** 54,64 ****=0A=
--- 60,80 ----=0A last_authent_time =3D 0;=0A ret=
urn (result+krb_err_base);=0A }=0A+ #ifdef CMU_INTERREALM=0A+ =
/* Compute a checksum over the header and message. */=0A+ if ((result =
=3D krb_get_cred(SERVER_SERVICE, SERVER_INSTANCE, =0A+ =
__Zephyr_realm, &cred)) !=3D 0)=0A+ return (result+krb_err=
_base);=0A+ last_cred =3D cred;=0A+ #endif=0A last_authent_tim=
e =3D now;=0A last_authent =3D authent;=0A }=0A else {=
=0A authent =3D last_authent;=0A+ #if defined(CMU_INTERREALM) && !=
defined(NOENCRYPTION)=0A+ cred =3D last_cred;=0A+ #endif /* INTERRE=
ALM && !NOENCRYPTION */=0A }=0A notice->z_auth =3D 1;=0A not=
ice->z_authent_len =3D authent.length;=0A***************=0A*** 73,78 ****=
=0A--- 89,104 ----=0A free(notice->z_ascii_authent);=0A r=
eturn (result);=0A }=0A+ # if defined(CMU_INTERREALM) && !defined(NOEN=
CRYPTION)=0A+ /* get a port number now */=0A+ if (notice->z_port =
=3D=3D 0) {=0A+ if (ZGetFD() < 0)=0A+ if ((result =3D ZOpenPo=
rt((u_short *)0)) !=3D ZERR_NONE)=0A+ return (result);=0A+ =
=0A+ notice->z_port =3D __Zephyr_port;=0A+ }=0A+ #endif=0A r=
esult =3D Z_FormatRawHeader(notice, buffer, buffer_len, len, &cstart,=0A =
&cend);=0A free(notice->z_ascii_authent)=
;=0A***************=0A*** 80,89 ****=0A--- 106,117 ----=0A if (result)=
=0A return(result);=0A =0A+ #ifndef CMU_INTERREALM=0A /* Com=
pute a checksum over the header and message. */=0A if ((result =3D krb=
_get_cred(SERVER_SERVICE, SERVER_INSTANCE, =0A =
__Zephyr_realm, &cred)) !=3D 0)=0A return result;=0A+ #endif=0A=
checksum =3D des_quad_cksum(buffer, NULL, cstart - buffer, 0, cred.se=
ssion);=0A checksum ^=3D des_quad_cksum(cend, NULL, buffer + *len - ce=
nd, 0,=0A cred.session);=0Adiff -crtw dist/=
zephyr-2.0.2/lib/zephyr/ZRetSubs.c zephyr-2.0.2/lib/zephyr/ZRetSubs.c=0A***=
dist/zephyr-2.0.2/lib/zephyr/ZRetSubs.c=09Tue Jul 18 16:28:14 1995=0A--- z=
ephyr-2.0.2/lib/zephyr/ZRetSubs.c=09Wed Dec 20 17:16:33 1995=0A************=
***=0A*** 167,173 ****=0A--- 167,185 ----=0A ptr2 =
=3D ptr;=0A if (!*ptr2)=0A =
ptr2 =3D "*";=0A+ #ifdef CMU_INTERREALM=0A+ =
if (*ptr2 =3D=3D '@') {=0A __subscriptions_list=
[i].zsub_recipient =3D (char *)=0A+ malloc((unsig=
ned)strlen(ptr2) + 2);=0A+ if (!__subscriptions_lis=
t[i].zsub_recipient) {=0A+ ZFreeNotice(&retnotice=
);=0A+ return (ENOMEM);=0A+ =
}=0A+ (void)sprintf(__subscriptions_list[i].zsub=
_recipient,=0A+ "*%s", ptr2);=0A+ =
} else {=0A+ #endif /* INTERREALM */=0A+ =
__subscriptions_list[i].zsub_recipient =3D (char *)=0A =
malloc((unsigned)strlen(ptr2)+1);=0A =
if (!__subscriptions_list[i].zsub_recipient) {=0A =
ZFreeNotice(&retnotice);=0A***************=0A*** 174,179 ****=0A---=
186,194 ----=0A return (ENOMEM);=0A =
}=0A (void) strcpy(__subscriptions_l=
ist[i].zsub_recipient,ptr2);=0A+ #ifdef CMU_INTERREALM=0A+ =
}=0A+ #endif /* INTERREALM */=0A ptr +=3D =
strlen(ptr)+1;=0A }=0A ZFreeNotice(&retno=
tice);=0Adiff -crtw dist/zephyr-2.0.2/lib/zephyr/ZSubs.c zephyr-2.0.2/lib/z=
ephyr/ZSubs.c=0A*** dist/zephyr-2.0.2/lib/zephyr/ZSubs.c=09Fri Jul 7 18:11=
:18 1995=0A--- zephyr-2.0.2/lib/zephyr/ZSubs.c=09Thu Feb 1 19:18:57 1996=
=0A***************=0A*** 80,85 ****=0A--- 80,88 ----=0A int size_avail=
=3D Z_MAXPKTLEN-Z_FRAGFUDGE; /* space avail for data,=0A =
adjusted below */=0A int size, start,=
numok;=0A+ #ifdef CMU_INTERREALM=0A+ char *cp;=0A+ #endif /* INTERREAL=
M */=0A =0A /* nitems =3D 0 means cancel all subscriptions; still nee=
d to allocate a */=0A /* array for one item so we can cancel, however.=
*/=0A***************=0A*** 117,127 ****=0A--- 120,167 ----=0A for (i=
=3D0;i<nitems;i++) {=0A list[i*3] =3D sublist[i].zsub_class;=0A =
list[i*3+1] =3D sublist[i].zsub_classinst;=0A+ #ifdef CMU_INTERREALM=
=0A+ if (!sublist[i].zsub_recipient || sublist[i].zsub_recipient[0]=
=0A+ =3D=3D '\0' || (sublist[i].zsub_recipient[0] =3D=3D '*' =
=0A+ && sublist[i].zsub_recipient[1] !=3D '@')) =0A=
+ {=0A+ list[i*3+2] =3D "";=0A+ } =0A+ =
else if (sublist[i].zsub_recipient[0] =3D=3D '*' && =0A+ =
sublist[i].zsub_recipient[1] =3D=3D '@') =0A+ {=0A+ =
cp =3D (char *)ZExpandRealm(sublist[i].zsub_recipient + 2);=0A+ =
if (!(list[i*3+2] =3D malloc((unsigned)(strlen(cp) + 2)))) {=0A+ =
for (i--; i >=3D0; i--)=0A+ if (list[i*3+2][0] =3D=
=3D '@')=0A+ free(list[i*3+2]);=0A+ free((c=
har *)list);=0A+ return(ENOMEM);=0A+ }=0A+ =
(void) sprintf(list[i*3+2], "@%s", cp);=0A+ } =0A+ =
else if (sublist[i].zsub_recipient[0] =3D=3D '@') {=0A+ cp =3D (c=
har *) ZExpandRealm(sublist[i].zsub_recipient + 1);=0A+ if (!(lis=
t[i*3+2] =3D malloc((unsigned)(strlen(cp) + 2)))) {=0A+ for (i-=
-; i >=3D0; i--)=0A+ if (list[i*3+2][0] =3D=3D '@')=0A+ =
free(list[i*3+2]);=0A+ free((char *)list);=0A+ =
return(ENOMEM);=0A+ }=0A+ (void) sprintf(list[i*=
3+2], "@%s", cp);=0A+ } =0A+ else=0A+ {=0A+ =
list[i*3+2] =3D ZGetSender();=0A+ }=0A+ #else=0A =
if (sublist[i].zsub_recipient && *sublist[i].zsub_recipient &&=0A =
*sublist[i].zsub_recipient !=3D '*')=0A list[i*3+2] =3D ZG=
etSender();=0A else=0A list[i*3+2] =3D "";=0A+ #endif=
=0A }=0A =0A start =3D -1;=0A***************=0A*** 155,160 ****=
=0A--- 195,205 ----=0A }=0A retval =3D subscr_sendoff(&no=
tice, &list[start*3], numok, authit);=0A if (retval) {=0A+ #ifdef =
CMU_INTERREALM=0A+ for (i=3D0;i<nitems;i++)=0A+ if (l=
ist[i*3+2][0] =3D=3D '@')=0A+ free(list[i*3+2]);=0A+ #endif=
=0A free((char *)list);=0A return(retval);=0A =
}=0Adiff -crtw dist/zephyr-2.0.2/lib/zephyr/ZVariables.c zephyr-2.0.2=
/lib/zephyr/ZVariables.c=0A*** dist/zephyr-2.0.2/lib/zephyr/ZVariables.c=09=
Fri Jun 30 18:04:50 1995=0A--- zephyr-2.0.2/lib/zephyr/ZVariables.c=09Tue J=
an 30 14:29:55 1996=0A***************=0A*** 38,44 ****=0A if ((ret =3D=
get_varval(varfile, var)) !=3D ZERR_NONE)=0A return (ret);=0A =
=0A! sprintf(varfile, "%s/zephyr.vars", CONFDIR);=0A return (get_v=
arval(varfile, var));=0A }=0A =0A--- 38,44 ----=0A if ((ret =3D get_=
varval(varfile, var)) !=3D ZERR_NONE)=0A return (ret);=0A =0A! =
sprintf(varfile, "%s/zephyr.vars", DATADIR);=0A return (get_varval(v=
arfile, var));=0A }=0A =0Adiff -crtw dist/zephyr-2.0.2/lib/zephyr/Zintern=
al.c zephyr-2.0.2/lib/zephyr/Zinternal.c=0A*** dist/zephyr-2.0.2/lib/zephyr=
/Zinternal.c=09Tue Jul 18 16:28:17 1995=0A--- zephyr-2.0.2/lib/zephyr/Zinte=
rnal.c=09Sat Jan 27 04:00:53 1996=0A***************=0A*** 49,54 ****=0A--- =
49,57 ----=0A #ifdef ZEPHYR_USES_KERBEROS=0A C_Block __Zephyr_session;=0A=
char __Zephyr_realm[REALM_SZ];=0A+ # ifdef CMU_INTERREALM=0A+ int __Zephy=
r_session_time;=0A+ # endif /* INTERREALM */=0A #endif=0A =0A #ifdef Z_D=
EBUG=0Adiff -crtw dist/zephyr-2.0.2/server/Makefile.in zephyr-2.0.2/server/=
Makefile.in=0A*** dist/zephyr-2.0.2/server/Makefile.in=09Sun Jul 23 12:10:5=
8 1995=0A--- zephyr-2.0.2/server/Makefile.in=09Thu Jan 18 11:49:53 1996=0A*=
**************=0A*** 21,37 ****=0A =0A DEBUG=3D-O=0A CFLAGS=3D $(DEBUG) =
-DCONFDIR=3D\"$(confdir)\" -I$(top_srcdir)/h -I$(BUILDTOP)/h \=0A! =
-I. @CPPFLAGS@=0A! LDFLAGS=3D$(DEBUG) -L$(BUILDTOP)/lib/zephyr @ET_LDFLAGS@=
@LDFLAGS@=0A LIBS=3D-lzephyr @LIBS@ -lcom_err=0A =0A OBJS=3D zsrv_err=
.o access.o acl_files.o bdump.o class.o client.o common.o \=0A dis=
patch.o kopt.o kstuff.o main.o server.o subscr.o timer.o uloc.o \=0A! =
zstring.o version.o=0A =0A all: zephyrd=0A =0A! zephyrd: $(OBJS) $(BU=
ILDTOP)/lib/zephyr/libzephyr.a @ETDEP@=0A $(CC) $(LDFLAGS) -o $@ $=
(OBJS) $(LIBS)=0A =0A zsrv_err.c zsrv_err.h: zsrv_err.et=0A--- 21,39 ----=
=0A =0A DEBUG=3D-O=0A CFLAGS=3D $(DEBUG) -DCONFDIR=3D\"$(confdir)\" -I$(=
top_srcdir)/h -I$(BUILDTOP)/h \=0A! -I$(top_srcdir)/lib/des -I. @CP=
PFLAGS@=0A! LDFLAGS=3D$(DEBUG) -L$(BUILDTOP)/lib/zephyr -L$(BUILDTOP)/lib/d=
es @ET_LDFLAGS@ \=0A! @LDFLAGS@=0A LIBS=3D-lzephyr @LIBS@ -lcom_er=
r=0A =0A OBJS=3D zsrv_err.o access.o acl_files.o bdump.o class.o client=
.o common.o \=0A dispatch.o kopt.o kstuff.o main.o server.o subscr=
.o timer.o uloc.o \=0A! zstring.o realm.o version.o=0A =0A all: z=
ephyrd=0A =0A! zephyrd: $(OBJS) $(BUILDTOP)/lib/zephyr/libzephyr.a @ETDEP@=
\=0A! $(BUILDTOP)/lib/des/libdes.a=0A $(CC) $(LDFLAGS) -o=
$@ $(OBJS) $(LIBS)=0A =0A zsrv_err.c zsrv_err.h: zsrv_err.et=0A*********=
******=0A*** 46,57 ****=0A =0A # No dependency on zephyrd, to avoid rebui=
lding version.o.=0A install:=0A! $(INSTALL) -m 755 -s zephyrd $(sb=
indir)=0A! $(INSTALL) -m 644 $(srcdir)/zephyrd.8 $(mandir)/man8=0A!=
$(INSTALL) -m 644 $(srcdir)/default.subscriptions $(confdir)=0A! =
rm -f $(confdir)/acl/?*.acl=0A! cp $(srcdir)/acl/?*.acl $(co=
nfdir)/acl=0A! chmod 644 $(confdir)/acl/*=0A =0A clean:=0A =
rm -f $(OBJS) zephyrd zsrv_err.[ch]=0A--- 48,59 ----=0A =0A # No depen=
dency on zephyrd, to avoid rebuilding version.o.=0A install:=0A! $=
(INSTALL) -m 755 -s zephyrd ${DESTDIR}$(sbindir)=0A! $(INSTALL) -m =
644 $(srcdir)/zephyrd.8 ${DESTDIR}$(mandir)/man8=0A! $(INSTALL) -m =
644 $(srcdir)/default.subscriptions ${DESTDIR}$(confdir)=0A! rm -f =
${DESTDIR}$(confdir)/acl/?*.acl=0A! cp $(srcdir)/acl/?*.acl ${DESTD=
IR}$(confdir)/acl=0A! chmod 644 ${DESTDIR}$(confdir)/acl/*=0A =0A =
clean:=0A rm -f $(OBJS) zephyrd zsrv_err.[ch]=0Adiff -crtw dist/z=
ephyr-2.0.2/server/access.c zephyr-2.0.2/server/access.c=0A*** dist/zephyr-=
2.0.2/server/access.c=09Fri Jul 7 18:11:37 1995=0A--- zephyr-2.0.2/server/=
access.c=09Fri Jan 26 15:31:45 1996=0A***************=0A*** 90,96 ****=0A =
syslog(LOG_ERR, "unknown access type %d", (int) accesstype);=0A =
return 0;=0A }=0A! if (!(acl->acl_types) & flag) /* no acl =
=3D=3D> no restriction */=0A return 1;=0A sprintf(buf, "%s/%s=
-%s.acl", acl_dir, prefix, acl->acl_filename);=0A /*=0A--- 90,96 ----=
=0A syslog(LOG_ERR, "unknown access type %d", (int) accesstype);=
=0A return 0;=0A }=0A! if (!((acl->acl_types) & flag)) /*=
no acl =3D=3D> no restriction */=0A return 1;=0A sprintf(buf=
, "%s/%s-%s.acl", acl_dir, prefix, acl->acl_filename);=0A /*=0Adiff -c=
rtw dist/zephyr-2.0.2/server/acl_files.c zephyr-2.0.2/server/acl_files.c=0A=
*** dist/zephyr-2.0.2/server/acl_files.c=09Fri Jul 7 18:11:40 1995=0A--- z=
ephyr-2.0.2/server/acl_files.c=09Thu Jan 25 11:17:56 1996=0A***************=
=0A*** 489,495 ****=0A =0A /* Returns nonzero if it can be determined tha=
t acl contains principal */=0A /* Recognizes wildcards in acl of the form=
=0A! name.*@realm, *.*@realm, and *.*@* */=0A int=0A acl_check(acl, pr=
incipal)=0A char *acl;=0A--- 489,495 ----=0A =0A /* Returns nonzero =
if it can be determined that acl contains principal */=0A /* Recognizes wi=
ldcards in acl of the form=0A! name.*@realm, *.*@realm, name.*@*, and *.=
*@* */=0A int=0A acl_check(acl, principal)=0A char *acl;=0A*********=
******=0A*** 510,515 ****=0A--- 510,518 ----=0A *((char *)strchr(canon=
, INST_SEP)) =3D '\0'; /* Chuck the instance */=0A =0A sprintf(buf, "=
%s.*%s", canon, realm);=0A+ if (acl_exact_match(acl, buf)) return 1;=0A=
+ =0A+ sprintf(buf, "%s.*@*", canon);=0A if (acl_exact_match(acl, =
buf)) return 1;=0A =0A sprintf(buf, "*.*%s", realm);=0Adiff -crtw dis=
t/zephyr-2.0.2/server/bdump.c zephyr-2.0.2/server/bdump.c=0A*** dist/zephyr=
-2.0.2/server/bdump.c=09Tue Jul 18 16:29:04 1995=0A--- zephyr-2.0.2/server/=
bdump.c=09Fri Jan 26 16:22:07 1996=0A***************=0A*** 67,78 ****=0A s=
tatic void cleanup __P((Server *server));=0A =0A #ifdef ZEPHYR_USES_KERBE=
ROS=0A static int get_tgt __P((void));=0A static long ticket_time;=0A- st=
atic char my_realm[REALM_SZ];=0A =0A #define TKTLIFETIME 120=0A #def=
ine tkt_lifetime(val) ((long) val * 5L * 60L)=0A =0A #ifndef NOENCRYPTION=
=0A extern C_Block serv_key;=0A--- 67,86 ----=0A static void cleanup __P=
((Server *server));=0A =0A #ifdef ZEPHYR_USES_KERBEROS=0A+ #ifdef CMU_INT=
ERREALM=0A+ int get_tgt __P((void));=0A+ #else /* CMU_INTERREALM */=0A sta=
tic int get_tgt __P((void));=0A+ #endif /* CMU_INTERREALM */=0A static lon=
g ticket_time;=0A =0A+ #ifdef AFS_LIFETIMES=0A+ #define TKTLIFETIME 141=0A=
+ #define tkt_lifetime(val) krb_life_to_time(0L, (int) val)=0A+ #else /* AF=
S_LIFETIMES */=0A #define TKTLIFETIME 120=0A #define tkt_lifetime(val=
) ((long) val * 5L * 60L)=0A+ #endif /* AFS_LIFETIMES */=0A =0A #ifndef N=
OENCRYPTION=0A extern C_Block serv_key;=0A***************=0A*** 290,296 *=
***=0A }=0A if (strcmp(kdata.pname, SERVER_SERVICE) ||=0A =
strcmp(kdata.pinst, SERVER_INSTANCE) ||=0A! strcmp(kdata.prealm, =
my_realm)) {=0A syslog(LOG_ERR, "bdump_send: peer not zephyr: %s.%=
s@%s",=0A kdata.pname, kdata.pinst, kdata.prealm);=0A =
cleanup(server);=0A--- 298,304 ----=0A }=0A if (strcmp(kdata.=
pname, SERVER_SERVICE) ||=0A strcmp(kdata.pinst, SERVER_INSTANCE) =
||=0A! strcmp(kdata.prealm, ZGetRealm())) {=0A syslog(LOG_=
ERR, "bdump_send: peer not zephyr: %s.%s@%s",=0A kdata.pnam=
e, kdata.pinst, kdata.prealm);=0A cleanup(server);=0A*************=
**=0A*** 476,485 ****=0A cleanup(server);=0A return;=0A =
}=0A! /* my_realm is filled in inside get_tgt() */=0A if (strc=
mp(kdata.pname, SERVER_SERVICE) ||=0A strcmp(kdata.pinst, SERVER_I=
NSTANCE) ||=0A! strcmp(kdata.prealm, my_realm)) {=0A syslo=
g(LOG_ERR, "bdump_get: peer not zephyr in lrealm: %s.%s@%s",=0A =
kdata.pname, kdata.pinst,kdata.prealm);=0A cleanup(server);=
=0A--- 484,493 ----=0A cleanup(server);=0A return;=0A =
}=0A! =0A if (strcmp(kdata.pname, SERVER_SERVICE) ||=0A str=
cmp(kdata.pinst, SERVER_INSTANCE) ||=0A! strcmp(kdata.prealm, ZGetR=
ealm())) {=0A syslog(LOG_ERR, "bdump_get: peer not zephyr in lreal=
m: %s.%s@%s",=0A kdata.pname, kdata.pinst,kdata.prealm);=0A=
cleanup(server);=0A***************=0A*** 682,703 ****=0A }=0A =
=0A #ifdef ZEPHYR_USES_KERBEROS=0A static int=0A get_tgt()=0A {=0A! =
int retval;=0A #ifndef NOENCRYPTION=0A Sched *s;=0A #endif=0A =
=0A- if (!*my_realm) {=0A- retval =3D krb_get_lrealm(my_rea=
lm, 1);=0A- if (retval !=3D KSUCCESS) {=0A- syslog(LOG_=
ERR,"krb_get_lrealm: %s", krb_get_err_text(retval));=0A- *my_re=
alm =3D '\0';=0A- return(1);=0A- }=0A- }=0A /*=
have they expired ? */=0A if (ticket_time < NOW - tkt_lifetime(TKTLIF=
ETIME) + 15L) {=0A /* +15 for leeway */=0A--- 690,708 ----=0A }=
=0A =0A #ifdef ZEPHYR_USES_KERBEROS=0A+ #ifdef CMU_INTERREALM=0A+ int=0A+=
#else=0A static int=0A+ #endif=0A get_tgt()=0A {=0A! int retval =3D=
0;=0A! CREDENTIALS cred;=0A #ifndef NOENCRYPTION=0A Sched *s;=0A=
#endif=0A =0A /* have they expired ? */=0A if (ticket_=
time < NOW - tkt_lifetime(TKTLIFETIME) + 15L) {=0A /* +15 for leew=
ay */=0A***************=0A*** 715,729 ****=0A */=0A =
static char buf[INST_SZ + 1] =3D SERVER_INSTANCE;=0A =0A! =
retval =3D krb_get_svc_in_tkt(SERVER_SERVICE, buf, my_realm,=0A =
SERVER_SERVICE,SERVER_INSTANCE,=0A =
TKTLIFETIME, srvtab_file);=0A }=0A =
if (retval !=3D KSUCCESS) {=0A syslog(LOG_ERR,"get_tg=
t: krb_get_svc_in_tkt: %s",=0A krb_get_err_text(retval)=
);=0A- ticket_time =3D 0L;=0A return(1);=0A =
} else {=0A ticket_time =3D NOW;=0A }=0A--- 720,74=
0 ----=0A */=0A static char buf[INST_SZ + 1] =3D=
SERVER_INSTANCE;=0A =0A! #ifdef CMU_INTERREALM=0A! retval =3D=
krb_get_svc_in_tkt(SERVER_SERVICE, buf, ZGetRealm(),=0A! =
"krbtgt", ZGetRealm(),=0A! =
TKTLIFETIME, srvtab_file);=0A! #else=0A! retval =
=3D krb_get_svc_in_tkt(SERVER_SERVICE, buf, ZGetRealm(),=0A =
SERVER_SERVICE,SERVER_INSTANCE,=0A =
TKTLIFETIME, srvtab_file);=0A+ #endif=0A =
}=0A if (retval !=3D KSUCCESS) {=0A syslog(LOG_ERR,=
"get_tgt: krb_get_svc_in_tkt: %s",=0A krb_get_err_text(=
retval));=0A return(1);=0A+ ticket_time =3D 0L;=0A=
} else {=0A ticket_time =3D NOW;=0A }=0A***=
************=0A*** 730,736 ****=0A =0A #ifndef NOENCRYPTION=0A r=
etval =3D read_service_key(SERVER_SERVICE, SERVER_INSTANCE,=0A! =
my_realm, 0 /*kvno*/,=0A =
srvtab_file, serv_key);=0A if (retval !=3D KSUCCESS) {=0A =
syslog(LOG_ERR, "get_tgt: read_service_key: %s",=0A--- 741,747=
----=0A =0A #ifndef NOENCRYPTION=0A retval =3D read_service_key=
(SERVER_SERVICE, SERVER_INSTANCE,=0A! ZGe=
tRealm(), 0 /*kvno*/,=0A srvtab_file, se=
rv_key);=0A if (retval !=3D KSUCCESS) {=0A syslog(LOG=
_ERR, "get_tgt: read_service_key: %s",=0A***************=0A*** 792,797 ****=
=0A--- 803,811 ----=0A #ifdef ZEPHYR_USES_KERBEROS=0A char *cp;=0A =
C_Block cblock;=0A+ #ifdef CMU_INTERREALM=0A+ Realm *realm =3D NULL;=
=0A+ #endif /* CMU_INTERREALM */=0A #endif /* ZEPHYR_USES_KERBEROS */=0A =
=0A #if 1=0A***************=0A*** 844,849 ****=0A--- 858,871 ----=0A =
if (strcmp(notice.z_opcode, ADMIN_DONE) =3D=3D 0) {=0A /*=
end of brain dump */=0A return ZERR_NONE;=0A+ #ifdef CMU_INTE=
RREALM=0A+ } else if (!strcmp(notice.z_opcode, ADMIN_NEWREALM)) {=
=0A+ /* get a realm from the message */=0A+ realm =3D r=
ealm_get_realm_by_name(notice.z_message);=0A+ if (!realm) {=0A+ =
return(ZERR_NONE);=0A+ }=0A+ #endif /* CMU_INTERREALM =
*/=0A } else if (strcmp(notice.z_class, LOGIN_CLASS) =3D=3D 0) {=
=0A /* 1 =3D tell it we are authentic */=0A retva=
l =3D ulogin_dispatch(¬ice, 1, &who, server);=0A***************=0A*** 89=
1,896 ****=0A--- 913,932 ----=0A error_message(retv=
al));=0A return retval;=0A }=0A+ #ifdef CMU_I=
NTERREALM=0A+ } else if (!strcmp(notice.z_opcode, REALM_SUBSCRIBE))=
{=0A+ /* add a subscription for a realm */=0A+ if (!re=
alm) {=0A+ syslog(LOG_ERR, "brl no realm");=0A+ ret=
urn(ZSRV_NORLM);=0A+ }=0A+ retval =3D subscr_realm(real=
m, ¬ice);=0A+ if (retval !=3D ZERR_NONE) {=0A+ sys=
log(LOG_WARNING, "brl subscr failed: %s",=0A+ error_mess=
age(retval));=0A+ return retval;=0A+ }=0A+ #endif /* =
CMU_INTERREALM */=0A } else {=0A syslog(LOG_ERR, "brl=
bad opcode %s",notice.z_opcode);=0A return ZSRV_UNKNOWNOPCODE=
;=0A***************=0A*** 918,923 ****=0A--- 954,964 ----=0A retval =
=3D client_send_clients();=0A if (retval !=3D ZERR_NONE)=0A r=
eturn retval;=0A+ #ifdef CMU_INTERREALM=0A+ retval =3D realm_send_realm=
s();=0A+ if (retval !=3D ZERR_NONE)=0A+ return retval;=0A+ #endif=
/* CMU_INTERREALM */=0A return send_done();=0A }=0A =0A************=
***=0A*** 1169,1171 ****=0A--- 1210,1228 ----=0A =0A return 0;=0A }=
=0A+ =0A+ #ifdef notdef=0A+ static int=0A+ ticket_expired()=0A+ {=0A+ int=
retval =3D 0;=0A+ CREDENTIALS cred;=0A+ =0A+ retval =3D krb_get_cred("=
krbtgt", ZGetRealm(), ZGetRealm(), &cred);=0A+ if (retval !=3D GC_OK||(cr=
ed.issue_date + cred.lifetime*5*60<NOW + 15L*60)) {=0A+ return 0L;=0A+ =
}=0A+ return NOW;=0A+ }=0A+ #endif=0A+ =0Adiff -crtw dist/zephyr-2.0.2/=
server/class.c zephyr-2.0.2/server/class.c=0A*** dist/zephyr-2.0.2/server/c=
lass.c=09Fri Jul 7 22:48:48 1995=0A--- zephyr-2.0.2/server/class.c=09Fri J=
an 26 18:22:32 1996=0A***************=0A*** 26,34 ****=0A--- 26,42 ----=0A =
*=0A * External functions are:=0A *=0A+ #ifdef CMU_INTERREALM=0A+ * =
Code_t triplet_register(client, subs, realm)=0A+ #else=0A * Code_t triple=
t_register(client, subs)=0A+ #endif=0A *=0A+ #ifdef CMU_INTERREALM=0A+ *=
Code_t triplet_deregister(client, subs, realm)=0A+ #else=0A * Code_t tri=
plet_deregister(client, subs)=0A+ #endif=0A *=0A * Client *triplet_look=
up(subs)=0A * Client *client;=0A***************=0A*** 80,87 ****=0A-=
-- 88,100 ----=0A =0A static Triplet *triplet_bucket[HASHSIZE]; /* the ha=
sh table of pointers */=0A =0A+ #ifdef CMU_INTERREALM=0A+ static Code_t re=
move_client __P((Triplet *triplet, Client *client, Realm *realm));=0A+ stat=
ic Code_t insert_client __P((Triplet *triplet, Client *client, Realm *realm=
));=0A+ #else /* CMU_INTERREALM */=0A static Code_t remove_client __P((Tri=
plet *triplet, Client *client));=0A static Code_t insert_client __P((Tripl=
et *triplet, Client *client));=0A+ #endif /* CMU_INTERREALM */=0A static T=
riplet *triplet_alloc __P((String *classname, String *inst,=0A =
String *recipient));=0A static void free_triplet _=
_P((Triplet *));=0A***************=0A*** 112,120 ****=0A--- 125,140 ----=0A=
/* the client as interested in a triplet */=0A =0A Code_t=0A+ #ifdef CM=
U_INTERREALM=0A+ triplet_register(client, dest, realm)=0A+ #else /* CMU_INT=
ERREALM */=0A triplet_register(client, dest)=0A+ #endif /* CMU_INTERREALM =
*/=0A Client *client;=0A Destination *dest;=0A+ #ifdef CMU_INTERR=
EALM=0A+ Realm *realm;=0A+ #endif /* CMU_INTERREALM */=0A {=0A Tr=
iplet *triplet;=0A unsigned long hashval;=0A***************=0A*** 122,=
142 ****=0A--- 142,177 ----=0A hashval =3D DEST_HASHVAL(*dest);=0A =
for (triplet =3D triplet_bucket[hashval]; triplet; triplet =3D triplet->n=
ext) {=0A if (ZDest_eq(&triplet->dest, dest))=0A+ #ifdef CMU_INTER=
REALM=0A+ return insert_client(triplet, client, realm);=0A+ #else=
/* CMU_INTERREALM */=0A return insert_client(triplet, client);=
=0A+ #endif /* CMU_INTERREALM */=0A }=0A =0A /* Triplet not pres=
ent in hash table, insert it. */=0A triplet =3D triplet_alloc(dest->cl=
assname, dest->inst, dest->recip);=0A LIST_INSERT(triplet_bucket[hashv=
al], triplet);=0A+ #ifdef CMU_INTERREALM=0A+ return insert_client(tripl=
et, client, realm);=0A+ #else /* CMU_INTERREALM */=0A return insert_cl=
ient(triplet, client);=0A+ #endif /* CMU_INTERREALM */=0A }=0A =0A /* di=
ssociate client from the class, garbage collecting if appropriate */=0A =
=0A Code_t=0A+ #ifdef CMU_INTERREALM=0A+ triplet_deregister(client, dest, =
realm)=0A+ #else /* CMU_INTERREALM */=0A triplet_deregister(client, dest)=
=0A+ #endif /* CMU_INTERREALM */=0A Client *client;=0A Destinatio=
n *dest;=0A+ #ifdef CMU_INTERREALM=0A+ Realm *realm;=0A+ #endif /* CMU_=
INTERREALM */=0A {=0A Triplet *triplet;=0A int retval;=0A*******=
********=0A*** 149,155 ****=0A--- 184,194 ----=0A hashval =3D DEST_HAS=
HVAL(*dest);=0A for (triplet =3D triplet_bucket[hashval]; triplet; tri=
plet =3D triplet->next) {=0A if (ZDest_eq(&triplet->dest, dest)) {=
=0A+ #ifdef CMU_INTERREALM=0A+ retval =3D remove_client(triplet=
, client, realm);=0A+ #else /* CMU_INTERREALM */=0A retval =3D=
remove_client(triplet, client);=0A+ #endif /* CMU_INTERREALM */=0A =
if (retval !=3D ZERR_NONE)=0A return retval;=0A =
if (*triplet->clients =3D=3D NULL && !triplet->acl) {=0A**********=
*****=0A*** 296,304 ****=0A--- 335,350 ----=0A /* insert a client into the=
list associated with the class *ptr */=0A =0A static Code_t=0A+ #ifdef C=
MU_INTERREALM=0A+ insert_client(triplet, client, realm)=0A+ #else /* CMU_IN=
TERREALM */=0A insert_client(triplet, client)=0A+ #endif /* CMU_INTERREALM=
*/=0A Triplet *triplet;=0A Client *client;=0A+ #ifdef CMU_INTERR=
EALM=0A+ Realm *realm;=0A+ #endif /* CMU_INTERREALM */=0A {=0A Cl=
ient **clientp, **newclients;=0A int new_size;=0A***************=0A***=
306,312 ****=0A--- 352,363 ----=0A if (triplet->clients) {=0A =
/* Avoid duplication. */=0A for (clientp =3D triplet->clients; *=
clientp; clientp++) {=0A+ #ifdef CMU_INTERREALM=0A+ if ((client=
&& *clientp =3D=3D client)=0A+ || (realm && (*clientp)->real=
m =3D=3D realm))=0A+ #else /* CMU_INTERREALM */=0A if (*client=
p =3D=3D client)=0A+ #endif /* CMU_INTERREALM */=0A return=
ZSRV_CLASSXISTS;=0A }=0A =0A***************=0A*** 339,352 ****=
=0A--- 390,415 ----=0A * collecting if appropriate=0A */=0A =0A+ #ifde=
f CMU_INTERREALM=0A+ static Code_t remove_client(triplet, client, realm)=0A=
+ #else /* CMU_INTERREALM */=0A static Code_t remove_client(triplet, clien=
t)=0A+ #endif /* CMU_INTERREALM */=0A Triplet *triplet;=0A Client=
*client;=0A+ #ifdef CMU_INTERREALM=0A+ Realm *realm;=0A+ #endif /* CMU=
_INTERREALM */=0A {=0A Client **clientp;=0A =0A for (clientp =
=3D triplet->clients; *clientp; clientp++) {=0A+ #ifdef CMU_INTERREALM=0A+ =
if ((client && *clientp =3D=3D client) || =0A+ (realm &=
& (*clientp)->realm =3D=3D realm)) {=0A+ #else /* CMU_INTERREALM */=0A =
if (*clientp =3D=3D client) {=0A+ #endif /* CMU_INTERREALM */=0A =
for (; *clientp; clientp++)=0A *clientp =3D client=
p[1];=0A return ZERR_NONE;=0Adiff -crtw dist/zephyr-2.0.2/serv=
er/client.c zephyr-2.0.2/server/client.c=0A*** dist/zephyr-2.0.2/server/cli=
ent.c=09Fri Jul 7 18:11:53 1995=0A--- zephyr-2.0.2/server/client.c=09Mon J=
an 22 16:04:13 1996=0A***************=0A*** 97,102 ****=0A--- 97,105 ----=
=0A client->addr.sin_addr.s_addr =3D host->s_addr;=0A cli=
ent->addr.sin_port =3D notice->z_port;=0A client->subs =3D NULL;=
=0A+ #ifdef CMU_INTERREALM=0A+ client->realm =3D (Realm *)0;=0A+ #e=
ndif=0A client->principal =3D make_string(notice->z_sender, 0);=0A=
LIST_INSERT(client_bucket[INET_HASH(&client->addr.sin_addr,=0A =
notice->z_port)], client);=0Adif=
f -crtw dist/zephyr-2.0.2/server/dispatch.c zephyr-2.0.2/server/dispatch.c=
=0A*** dist/zephyr-2.0.2/server/dispatch.c=09Fri Jul 7 18:12:00 1995=0A---=
zephyr-2.0.2/server/dispatch.c=09Fri Jan 26 15:29:44 1996=0A**************=
*=0A*** 23,29 ****=0A #endif=0A =0A #ifdef DEBUG=0A! Zconst char *ZNotic=
eKinds[9] =3D {"UNSAFE", "UNACKED", "ACKED", "HMACK",=0A =
"HMCTL", "SERVACK", "SERVNAK", "CLIENTACK",=0A =
"STAT"};=0A #endif=0A--- 23,29 ----=0A #endif=
=0A =0A #ifdef DEBUG=0A! ZCONST char *ZNoticeKinds[9] =3D {"UNSAFE", "UNA=
CKED", "ACKED", "HMACK",=0A "HMCTL", "=
SERVACK", "SERVNAK", "CLIENTACK",=0A "=
STAT"};=0A #endif=0A***************=0A*** 63,70 ****=0A--- 63,77 ----=0A =
=0A static void nack_cancel __P((ZNotice_t *, struct sockaddr_in *));=0A =
static void dispatch __P((ZNotice_t *, int, struct sockaddr_in *, int));=0A=
+ #ifdef CMU_INTERREALM=0A+ static int send_to_dest __P((ZNotice_t *, int, =
Destination *dest, int, int));=0A+ #else /* CMU_INTERREALM */=0A static in=
t send_to_dest __P((ZNotice_t *, int, Destination *dest, int));=0A+ #endif =
/* CMU_INTERREALM */=0A =0A+ #ifdef CMU_INTERREALM=0A+ Statistic realm_not=
ices =3D {0, "inter-realm notices"};=0A+ #endif /* CMU_INTERREALM */=0A St=
atistic interserver_notices =3D {0, "inter-server notices"};=0A Statistic =
hm_packets =3D {0, "hostmanager packets"};=0A Statistic control_notices =
=3D {0, "client control notices"};=0A***************=0A*** 91,96 ****=0A---=
98,106 ----=0A syslog(LOG_INFO, "stats: %s: %d", admin_notices.str, a=
dmin_notices.val);=0A syslog(LOG_INFO, "stats: %s: %d", interserver_no=
tices.str,=0A interserver_notices.val);=0A+ #ifdef CMU_INTERREA=
LM=0A+ syslog(LOG_INFO, "stats: %s: %d", realm_notices.str, realm_notic=
es.val);=0A+ #endif /* CMU_INTERREALM */=0A syslog(LOG_INFO, "stats: %=
s: %d", i_s_ctls.str, i_s_ctls.val);=0A syslog(LOG_INFO, "stats: %s: %=
d", i_s_logins.str, i_s_logins.val);=0A syslog(LOG_INFO, "stats: %s: %=
d", i_s_admins.str, i_s_admins.val);=0A***************=0A*** 120,125 ****=
=0A--- 130,138 ----=0A #ifdef DEBUG=0A static int first_time =3D 1;=
=0A #endif=0A+ #ifdef CMU_INTERREALM=0A+ Realm *realm; /* fo=
reign realm ptr */=0A+ #endif /* CMU_INTERREALM */=0A =0A #ifdef DEBUG=0A=
/* Dump statistics five minutes after startup */=0A***************=0A=
*** 174,183 ****=0A--- 187,210 ----=0A input_sin.sin_addr.s_addr =
=3D new_notice.z_sender_addr.s_addr;=0A input_sin.sin_port =3D new=
_notice.z_port;=0A input_sin.sin_family =3D AF_INET;=0A+ #ifdef CM=
U_INTERREALM=0A+ if (realm =3D realm_which_realm(&input_sin)) {=0A+=
authentic =3D ZCheckRealmAuthentication(&new_notice,=0A+ =
&input_sin,=0A+ =
realm->name);=0A+ } else =0A+ #endif =
/* CMU_INTERREALM */=0A authentic =3D ZCheckAuthentication(&new_=
notice, &input_sin);=0A from_server =3D 1;=0A } else {=0A =
from_server =3D 0;=0A+ #ifdef CMU_INTERREALM=0A+ if (realm =
=3D realm_which_realm(&whoisit)) {=0A+ authentic =3D ZCheckRealmA=
uthentication(&new_notice,=0A+ =
&whoisit,=0A+ realm->na=
me);=0A+ } else=0A+ #endif /* CMU_INTERREALM */=0A authent=
ic =3D ZCheckAuthentication(&new_notice, &whoisit);=0A }=0A =0A******=
*********=0A*** 212,217 ****=0A--- 239,248 ----=0A #ifdef DEBUG=0A ch=
ar dbg_buf[BUFSIZ];=0A #endif=0A+ #ifdef CMU_INTERREALM=0A+ Realm =
*realm;=0A+ char *cp;=0A+ #endif /* CMU_INTERREALM */=0A =0A =
/* Set "authflag" to 1 or 0 for handler functions. Treat=0A * ZAUTH_=
CKSUM_FAILED as authentic except for sendit(), which is=0A***************=
=0A*** 265,270 ****=0A--- 296,306 ----=0A } else if (class_is_hm(notic=
e_class)) {=0A hm_packets.val++;=0A status =3D hostm_disp=
atch(notice, authflag, who, me_server);=0A+ #ifdef CMU_INTERREALM=0A+ }=
else if (realm_which_realm(who) && !(class_is_admin(notice_class))) {=0A+ =
realm_notices.val++;=0A+ status =3D realm_dispatch(notice, auth=
flag, who, me_server);=0A+ #endif /* CMU_INTERREALM */=0A } else if (c=
lass_is_control(notice_class)) {=0A control_notices.val++;=0A =
status =3D control_dispatch(notice, authflag, who, me_server);=0A*****=
**********=0A*** 278,286 ****=0A--- 314,343 ----=0A admin_notices.=
val++;=0A status =3D server_adispatch(notice, authflag, who, me_se=
rver);=0A } else {=0A+ #ifndef NO_SERVER_CKSUM=0A if (auth =
=3D=3D ZAUTH_CKSUM_FAILED)=0A authflag =3D 0;=0A+ #endif=0A+ #=
ifdef CMU_INTERREALM=0A+ /* check the recipient for destination */=
=0A+ if (!bound_for_local_realm(notice)) {=0A+ cp =3D str=
chr(notice->z_recipient, '@');=0A+ if (!cp || !(realm =3D realm_g=
et_realm_by_name(cp + 1))) {=0A+ sendit(notice, authflag, who, =
0);=0A+ free_string(notice_class);=0A+ return;=0A+ =
}=0A+ realm_handoff(notice, authflag, who, realm, 1);=
=0A+ free_string(notice_class);=0A+ return;=0A+ =
}=0A+ if ((notice->z_recipient[0] =3D=3D '@'))=0A+ notic=
e->z_recipient =3D "";=0A+ =0A+ sendit(notice, authflag, who, 1);=
=0A+ #else /* CMU_INTERREALM */=0A sendit(notice, authflag, who);=
=0A+ #endif /* CMU_INTERREALM */=0A free_string(notice_class);=0A =
return;=0A }=0A***************=0A*** 295,304 ****=0A--- 352,3=
68 ----=0A */=0A =0A void=0A+ #ifdef CMU_INTERREALM=0A+ sendit(notice, =
auth, who, external)=0A+ #else /* CMU_INTERREALM */=0A sendit(notice, auth=
, who)=0A+ #endif /* CMU_INTERREALM */=0A ZNotice_t *notice;=0A i=
nt auth;=0A struct sockaddr_in *who;=0A+ #ifdef CMU_INTERREALM=0A+ =
int external;=0A+ #endif /* CMU_INTERREALM */=0A {=0A static int sen=
d_counter =3D 0;=0A int any =3D 0;=0A***************=0A*** 335,340 ***=
*=0A--- 399,408 ----=0A return;=0A }=0A }=0A+ #i=
fdef CMU_INTERREALM=0A+ /* The following checks are only meaningful for=
messages from clients */=0A+ if (!realm_which_realm(who)) { =0A+ #endi=
f=0A if (memcmp(¬ice->z_sender_addr.s_addr, &who->sin_addr.s_addr,=
=0A sizeof(notice->z_sender_addr.s_addr))) {=0A /*=
someone is playing games... */=0A***************=0A*** 360,365 ****=0A--- =
428,436 ----=0A syslog(LOG_WARNING, "sendit addr mismatch: claimed=
%s, real %s",=0A inet_ntoa(notice->z_sender_addr), buffer)=
;=0A }=0A+ #ifdef CMU_INTERREALM=0A+ }=0A+ #endif=0A =0A /* =
Increment the send counter, used to prevent duplicate sends to=0A * c=
lients. On the off-chance that we wrap around to 0, skip over=0A**********=
*****=0A*** 372,379 ****=0A--- 443,459 ----=0A /* Send to clients subs=
cribed to the triplet itself. */=0A dest.classname =3D class;=0A =
dest.inst =3D make_string(notice->z_class_inst, 1);=0A+ #ifdef CMU_INTERREA=
LM=0A+ if (bound_for_local_realm(notice) && *notice->z_recipient =3D=3D=
'@') =0A+ dest.recip =3D make_string("", 0);=0A+ else=0A+ #endif=
/* CMU_INTERREALM */=0A dest.recip =3D make_string(notice->z_recipien=
t, 0);=0A+ #ifdef CMU_INTERREALM=0A+ if (send_to_dest(notice, auth, &de=
st, send_counter, external))=0A+ #else /* CMU_INTERREALM */=0A if (sen=
d_to_dest(notice, auth, &dest, send_counter))=0A+ #endif /* CMU_INTERREALM =
*/=0A any =3D 1;=0A =0A /* Send to clients subscribed to the=
triplet with the instance=0A***************=0A*** 380,386 ****=0A--- 460,4=
70 ----=0A * substituted with the wildcard instance. */=0A free_=
string(dest.inst);=0A dest.inst =3D wildcard_instance;=0A+ #ifdef CMU_=
INTERREALM=0A+ if (send_to_dest(notice, auth, &dest, send_counter, exte=
rnal))=0A+ #else /* CMU_INTERREALM */=0A if (send_to_dest(notice, auth=
, &dest, send_counter))=0A+ #endif /* CMU_INTERREALM */=0A any =3D=
1;=0A =0A free_string(class);=0A***************=0A*** 398,408 ****=
=0A--- 482,499 ----=0A */=0A =0A static int=0A+ #ifdef CMU_INTERREALM=
=0A+ send_to_dest(notice, auth, dest, send_counter, external)=0A+ #else /* =
CMU_INTERREALM */=0A send_to_dest(notice, auth, dest, send_counter)=0A+ #e=
ndif /* CMU_INTERREALM */=0A ZNotice_t *notice;=0A int auth;=0A =
Destination *dest;=0A int send_counter;=0A+ #ifdef CMU_INTERREALM=
=0A+ int external;=0A+ #endif /* CMU_INTERREALM */=0A {=0A Client=
**clientp;=0A int any =3D 0;=0A***************=0A*** 415,420 ****=0A-=
-- 506,520 ----=0A if ((*clientp)->last_send =3D=3D send_counter)=
=0A continue;=0A (*clientp)->last_send =3D send_count=
er;=0A+ #ifdef DEBUG=0A+ zdbug((LOG_DEBUG,"send_to_dest %s",=0A+ =
inet_ntoa((*clientp)->addr.sin_addr)));=0A+ #endif=0A+ #ifdef CMU_INTE=
RREALM=0A+ if ((*clientp)->realm && external) =0A+ realm_=
handoff(notice, auth, &(clientp[0]->addr), clientp[0]->realm, 1);=0A+ =
else=0A+ #endif /* CMU_INTERREALM */=0A xmit(notice, &((*clie=
ntp)->addr), auth, *clientp);=0A any =3D 1;=0A }=0A********=
*******=0A*** 848,853 ****=0A--- 948,957 ----=0A Client *client;=0A =
Code_t retval;=0A int wantdefs;=0A+ #ifdef CMU_INTERREALM=0A+ R=
ealm *realm;=0A+ struct sockaddr_in newwho;=0A+ #endif /* CMU_INTERREAL=
M */=0A =0A /*=0A * ZEPHYR_CTL Opcodes expected are:=0A********=
*******=0A*** 859,864 ****=0A--- 963,976 ----=0A =0A zdbug((LOG_DEBUG=
, "ctl_disp: opc=3D%s", opcode));=0A =0A+ #ifdef CMU_INTERREALM=0A+ ne=
wwho.sin_addr.s_addr =3D notice->z_sender_addr.s_addr;=0A+ newwho.sin_p=
ort =3D notice->z_port;=0A+ realm =3D realm_which_realm(&newwho);=0A+ =
if (realm) =0A+ return(realm_control_dispatch(notice, auth, who, s=
erver, realm));=0A+ #endif /* CMU_INTERREALM */=0A+ =0A if (strcasecmp=
(notice->z_class_inst, ZEPHYR_CTL_HM) =3D=3D 0) {=0A return hostm_=
dispatch(notice, auth, who, server);=0A } else if (strcmp(opcode, CLIE=
NT_GIMMESUBS) =3D=3D 0 ||=0A***************=0A*** 937,943 ****=0A =
syslog(LOG_DEBUG,=0A "subscription =
cancel for %s/%d from %s\n",=0A inet_ntoa(who->=
sin_addr), ntohs (who->sin_port),=0A! server->de=
st.addr);=0A }=0A }=0A #endif=0A--- 1049,105=
5 ----=0A syslog(LOG_DEBUG,=0A =
"subscription cancel for %s/%d from %s\n",=0A =
inet_ntoa(who->sin_addr), ntohs (who->sin_port),=0A! =
server->addr_str);=0A }=0A }=0A #en=
dif=0Adiff -crtw dist/zephyr-2.0.2/server/kopt.c zephyr-2.0.2/server/kopt.c=
=0A*** dist/zephyr-2.0.2/server/kopt.c=09Fri Jul 7 18:12:05 1995=0A--- zep=
hyr-2.0.2/server/kopt.c=09Fri Jan 26 16:19:19 1996=0A***************=0A*** =
446,452 ****=0A--- 446,456 ----=0A if (t_local.tv_sec < ad->time_sec) =
{=0A if (ad->time_sec - t_local.tv_sec > CLOCK_SKEW)=0A =
return RD_AP_NYV;=0A+ #ifdef AFS_LIFETIMES=0A+ } else if (t_local.tv=
_sec - ad->time_sec > krb_life_to_time(0, ad->life)) {=0A+ #else /* AFS_LIF=
ETIMES */=0A } else if (t_local.tv_sec - ad->time_sec > 5 * 60 * ad->l=
ife) {=0A+ #endif /* AFS_LIFETIMES */=0A return RD_AP_EXP;=0A =
}=0A =0A***************=0A*** 506,511 ****=0A--- 510,520 ----=0A if =
(n > 1)=0A return KFAILURE; /* Temporary restriction */=0A =0A+ =
if (my_realm[0]) {=0A+ strcpy(r, my_realm);=0A+ return KSUC=
CESS;=0A+ }=0A+ =0A if (local_realm_buffer[0]) {=0A =
strcpy(r, local_realm_buffer);=0A return KSUCCESS;=0A************=
***=0A*** 520,526 ****=0A return KFAILURE;=0A }=0A =
}=0A- =0A if (fscanf(cnffile,"%s",r) !=3D 1) {=0A fclose(c=
nffile);=0A return KFAILURE;=0A--- 529,534 ----=0A***************=
=0A*** 529,533 ****=0A--- 537,617 ----=0A return KSUCCESS;=0A }=0A =
=0A+ int=0A+ decomp_ticket(tkt, flags, pname, pinstance, prealm, paddress, =
session,=0A+ life, time_sec, sname, sinstance, key, key_s)=0A=
+ KTEXT tkt; /* The ticket to be decoded */=0A+ un=
signed char *flags; /* Kerberos ticket flags */=0A+ char *pname; =
/* Authentication name */=0A+ char *pinstance; =
/* Principal's instance */=0A+ char *prealm; /* Princip=
al's authentication domain */=0A+ unsigned long *paddress; /* Net addre=
ss of entity=0A+ * requesting ticket */=0A=
+ C_Block session; /* Session key inserted in ticket */=0A+ =
int *life; /* Lifetime of the ticket */=0A+ unsign=
ed long *time_sec; /* Issue time and date */=0A+ char *sname; =
/* Service name */=0A+ char *sinstance; /* Service ins=
tance */=0A+ C_Block key; /* Service's secret key=0A+ =
* (to decrypt the ticket) */=0A+ Sched k=
ey_s; /* The precomputed key schedule */=0A+ {=0A+ stati=
c int tkt_swap_bytes;=0A+ unsigned char *uptr;=0A+ char *ptr =3D (c=
har *)tkt->dat;=0A+ =0A+ #ifndef NOENCRYPTION=0A+ /* Do the decryption =
*/=0A+ pcbc_encrypt((C_Block *)tkt->dat,(C_Block *)tkt->dat,=0A+ =
(long) tkt->length,key_s,(C_Block *) key,0);=0A+ #endif /* ! NOE=
NCRYPTION */=0A+ =0A+ *flags =3D *ptr; /* get flags byte *=
/=0A+ ptr +=3D sizeof(*flags);=0A+ tkt_swap_bytes =3D 0;=0A+ if=
(HOST_BYTE_ORDER !=3D ((*flags >> K_FLAG_ORDER)& 1))=0A+ tkt_swap_=
bytes++;=0A+ =0A+ if (strlen(ptr) > ANAME_SZ)=0A+ return(KFAILU=
RE);=0A+ (void) strcpy(pname,ptr); /* pname */=0A+ ptr +=3D strle=
n(pname) + 1;=0A+ =0A+ if (strlen(ptr) > INST_SZ)=0A+ return(KF=
AILURE);=0A+ (void) strcpy(pinstance,ptr); /* instance */=0A+ ptr +=
=3D strlen(pinstance) + 1;=0A+ =0A+ if (strlen(ptr) > REALM_SZ)=0A+ =
return(KFAILURE);=0A+ (void) strcpy(prealm,ptr); /* realm */=0A+ =
ptr +=3D strlen(prealm) + 1;=0A+ /* temporary hack until realms are=
dealt with properly */=0A+ if (*prealm =3D=3D 0)=0A+ (void) st=
rcpy(prealm, ZGetRealm());=0A+ =0A+ memcpy((char *)paddress, ptr, 4); /=
* net address */=0A+ ptr +=3D 4;=0A+ =0A+ memcpy((char *)session, p=
tr, 8); /* session key */=0A+ ptr+=3D 8;=0A+ =0A+ /* get lifetime, =
being certain we don't get negative lifetimes */=0A+ uptr =3D (unsigned=
char *) ptr++;=0A+ *life =3D (int) *uptr;=0A+ =0A+ memcpy((char *)=
time_sec, ptr, 4); /* issue time */=0A+ ptr +=3D 4;=0A+ if (tkt_sw=
ap_bytes)=0A+ swap_u_long(*time_sec);=0A+ =0A+ (void) strcpy(sn=
ame,ptr); /* service name */=0A+ ptr +=3D 1 + strlen(sname);=0A+ =0A+=
(void) strcpy(sinstance,ptr); /* instance */=0A+ ptr +=3D 1 + strl=
en(sinstance);=0A+ =0A+ return(KSUCCESS);=0A+ }=0A #endif /* ZEPHYR_US=
ES_KERBEROS */=0A =0Adiff -crtw dist/zephyr-2.0.2/server/kstuff.c zephyr-2=
.0.2/server/kstuff.c=0A*** dist/zephyr-2.0.2/server/kstuff.c=09Tue Jul 18 1=
6:29:08 1995=0A--- zephyr-2.0.2/server/kstuff.c=09Fri Jan 26 16:21:17 1996=
=0A***************=0A*** 121,138 ****=0A {=0A int rem;=0A char p=
[32];=0A- char krb_realm[REALM_SZ];=0A int written;=0A int si=
ze_to_write;=0A =0A! rem =3D krb_get_lrealm(krb_realm,1);=0A if (=
rem !=3D KSUCCESS)=0A return rem + krb_err_base;=0A =0A- rem =
=3D krb_mk_req( ticket, service, host, krb_realm, (u_long)0 );=0A- if (=
rem !=3D KSUCCESS)=0A- return rem + krb_err_base;=0A- =0A (voi=
d) sprintf(p,"%d ",ticket->length);=0A size_to_write =3D strlen (p);=
=0A if ((written =3D write(fd, p, size_to_write)) !=3D size_to_write)=
=0A--- 121,133 ----=0A {=0A int rem;=0A char p[32];=0A int =
written;=0A int size_to_write;=0A =0A! rem =3D krb_mk_req( ticket=
, service, host, ZGetRealm(), (u_long)0 );=0A if (rem !=3D KSUCCESS)=
=0A return rem + krb_err_base;=0A =0A (void) sprintf(p,"%d "=
,ticket->length);=0A size_to_write =3D strlen (p);=0A if ((writte=
n =3D write(fd, p, size_to_write)) !=3D size_to_write)=0A***************=0A=
*** 144,150 ****=0A--- 139,239 ----=0A return 0;=0A }=0A =0A+ #ifdef=
CMU_INTERREALM=0A int=0A+ ZCheckRealmAuthentication(notice, from, realm)=
=0A+ ZNotice_t *notice;=0A+ struct sockaddr_in *from;=0A+ char =
*realm;=0A+ { =0A+ #ifdef ZEPHYR_USES_KERBEROS=0A+ int result;=0A=
+ char rlmprincipal[ANAME_SZ+INST_SZ+REALM_SZ+4];=0A+ char srcprinc=
ipal[ANAME_SZ+INST_SZ+REALM_SZ+4];=0A+ KTEXT_ST authent, ticket;=0A+ =
AUTH_DAT dat;=0A+ ZChecksum_t checksum;=0A+ CREDENTIALS cred;=0A+=
C_Block session_key;=0A+ =0A+ if (!notice->z_auth)=0A+ ret=
urn ZAUTH_NO;=0A+ =0A+ /* Check for bogus authentication data length. *=
/=0A+ if (notice->z_authent_len <=3D 0)=0A+ return ZAUTH_FAILED=
;=0A+ =0A+ /* Read in the authentication data. */=0A+ if (ZReadAsci=
i(notice->z_ascii_authent, =0A+ strlen(notice->z_ascii_a=
uthent)+1, =0A+ (unsigned char *)authent.dat, =0A+ =
notice->z_authent_len) =3D=3D ZERR_BADFIELD) {=0A+ re=
turn ZAUTH_FAILED;=0A+ }=0A+ authent.length =3D notice->z_authent_l=
en;=0A+ =0A+ /* Copy the ticket out of the authentication data. */=0A+ =
if (krb_find_ticket(&authent, &ticket) !=3D RD_AP_OK)=0A+ retur=
n ZAUTH_FAILED;=0A+ =0A+ /* Try to do a fast check against the cryptogr=
aphic checksum. */=0A+ if (find_session_key(&ticket, session_key, srcpr=
incipal) >=3D 0) {=0A+ if (notice->z_time.tv_sec - NOW > CLOCK_SKEW=
)=0A+ return ZAUTH_FAILED;=0A+ checksum =3D compute_che=
cksum(notice, session_key);=0A+ =0A+ /* If checksum matches, packet=
is authentic. Otherwise, check=0A+ * the authenticator as if we =
didn't have the session key cached=0A+ * and return ZAUTH_CKSUM_FA=
ILED. This is a rare case (since the=0A+ * ticket isn't cached af=
ter a checksum failure), so don't worry=0A+ * about the extra des_=
quad_cksum() call. */=0A+ if (checksum =3D=3D notice->z_checksum)=
=0A+ return ZAUTH_YES;=0A+ }=0A+ =0A+ /* We don't have =
the session key cached; do it the long way. */=0A+ result =3D krb_rd_re=
q(&authent, SERVER_SERVICE, SERVER_INSTANCE,=0A+ fr=
om->sin_addr.s_addr, &dat, srvtab_file);=0A+ if (result =3D=3D RD_AP_OK=
) {=0A+ (void) memcpy((char *)__Zephyr_session, (char *)dat.session=
, =0A+ sizeof(C_Block));=0A+ (void) sprintf(s=
rcprincipal, "%s%s%s@%s", dat.pname, =0A+ dat.pinst[=
0]?".":"", dat.pinst, dat.prealm);=0A+ (void) sprintf(rlmprincipal,=
"%s.%s@%s", SERVER_SERVICE,=0A+ SERVER_INSTANCE, re=
alm);=0A+ if (strcmp(rlmprincipal, srcprincipal))=0A+ r=
eturn ZAUTH_FAILED;=0A+ } else {=0A+ return ZAUTH_FAILED; /*=
didn't decode correctly */=0A+ }=0A+ =0A+ /* Check the cryptograph=
ic checksum. */=0A+ #ifdef NOENCRYPTION=0A+ our_checksum =3D 0;=0A+ #el=
se=0A+ checksum =3D compute_checksum(notice, dat.session);=0A+ #endif=
=0A+ if (checksum !=3D notice->z_checksum)=0A+ return ZAUTH_CKS=
UM_FAILED;=0A+ =0A+ /* Record the session key, expiry time, and source =
principal in the=0A+ * hash table, so we can do a fast check next time=
. */=0A+ add_session_key(&ticket, dat.session, srcprincipal,=0A+ #ifdef=
AFS_LIFETIMES=0A+ (time_t)krb_life_to_time(dat.time_se=
c,dat.life));=0A+ #else /* AFS_LIFETIMES */=0A+ (time_t=
)(dat.time_sec + dat.life * 5 * 60));=0A+ #endif /* AFS_LIFETIMES */=0A+ =
=0A+ return ZAUTH_YES;=0A+ =0A+ #else /* !ZEPHYR_USES_KERBEROS */=0A+ =
return (notice->z_auth) ? ZAUTH_YES : ZAUTH_NO;=0A+ #endif=0A+ }=0A+ #en=
dif /* CMU_INTERREALM */=0A+ =0A+ int=0A ZCheckAuthentication(notice, from=
)=0A ZNotice_t *notice;=0A struct sockaddr_in *from;=0A**********=
*****=0A*** 220,226 ****=0A--- 309,319 ----=0A /* Record the session k=
ey, expiry time, and source principal in the=0A * hash table, so we c=
an do a fast check next time. */=0A add_session_key(&ticket, dat.sessi=
on, srcprincipal,=0A+ #ifdef AFS_LIFETIMES=0A+ (time_t)=
krb_life_to_time(dat.time_sec,dat.life));=0A+ #else /* AFS_LIFETIMES */=0A =
(time_t)(dat.time_sec + dat.life * 5 * 60));=0A+ #endi=
f /* AFS_LIFETIMES */=0A =0A return ZAUTH_YES;=0A =0Adiff -crtw dist=
/zephyr-2.0.2/server/main.c zephyr-2.0.2/server/main.c=0A*** dist/zephyr-2.=
0.2/server/main.c=09Fri Jul 21 15:27:01 1995=0A--- zephyr-2.0.2/server/main=
.c=09Wed Jan 24 11:41:27 1996=0A***************=0A*** 98,103 ****=0A--- 98,=
104 ----=0A #ifdef ZEPHYR_USES_KERBEROS=0A char srvtab_file[128];=0A sta=
tic char tkt_file[128];=0A+ char my_realm[REALM_SZ];=0A #endif=0A char ac=
l_dir[128];=0A char subs_file[128];=0A***************=0A*** 154,160 ****=
=0A programname =3D (programname) ? programname + 1 : argv[0];=0A =0A=
/* process arguments */=0A! while ((optchar =3D getopt(argc, argv=
, "dsnv:f:")) !=3D EOF) {=0A switch(optchar) {=0A case =
'd':=0A zdebug =3D 1;=0A--- 155,161 ----=0A programname =
=3D (programname) ? programname + 1 : argv[0];=0A =0A /* process argu=
ments */=0A! while ((optchar =3D getopt(argc, argv, "dsnv:f:r:")) !=3D =
EOF) {=0A switch(optchar) {=0A case 'd':=0A =
zdebug =3D 1;=0A***************=0A*** 167,172 ****=0A--- 168,178 ----=0A =
case 'n':=0A nofork =3D 1;=0A break;=
=0A+ #ifdef ZEPHYR_USES_KERBEROS=0A+ case 'r':=0A+ st=
rncpy(my_realm,optarg,REALM_SZ);=0A+ break;=0A+ #endif=0A =
case 'v':=0A bdump_version =3D optarg;=0A b=
reak;=0A***************=0A*** 384,391 ****=0A--- 390,404 ----=0A #ifdef ZE=
PHYR_USES_KERBEROS=0A krb_set_tkt_string(tkt_file);=0A #endif=0A+ #if=
def CMU_INTERREALM=0A+ realm_init();=0A+ #endif /* CMU_INTERREALM */=0A=
=0A ZInitialize(); /* set up the library */=0A+ =0A+ =
if (*my_realm)=0A+ strcpy(ZGetRealm(),my_realm); /* Initialize our =
idea of the realm */=0A+ =0A init_zsrv_err_tbl(); /* set up err=
table */=0A =0A ZSetServerState(1);=0A***************=0A*** 476,484 =
****=0A usage()=0A {=0A #ifdef DEBUG=0A! fprintf(stderr,"Usage: =
%s [-d] [-s] [-n] [-f dumpfile]\n",programname);=0A #else=0A! fpri=
ntf(stderr,"Usage: %s [-d] [-n] [-f dumpfile]\n",programname);=0A #endif /=
* DEBUG */=0A exit(2);=0A }=0A--- 489,497 ----=0A usage()=0A {=
=0A #ifdef DEBUG=0A! fprintf(stderr,"Usage: %s [-d] [-s] [-n] [-r realm]=
[-f dumpfile]\n",programname);=0A #else=0A! fprintf(stderr,"Usage: %s [=
-d] [-n] [-r realm] [-f dumpfile]\n",programname);=0A #endif /* DEBUG */=
=0A exit(2);=0A }=0A***************=0A*** 600,605 ****=0A--- 613,=
621 ----=0A uloc_dump_locs(fp);=0A client_dump_clients(fp);=0A =
triplet_dump_subs(fp);=0A+ #ifdef CMU_INTERREALM=0A+ realm_dump_real=
ms(fp);=0A+ #endif /* CMU_INTERREALM */=0A syslog(LOG_INFO, "dump done=
");=0A if (fclose(fp) =3D=3D EOF)=0A syslog(LOG_ERR, "can't c=
lose dump db");=0AOnly in zephyr-2.0.2/server: realm.c=0Adiff -crtw dist/ze=
phyr-2.0.2/server/server.c zephyr-2.0.2/server/server.c=0A*** dist/zephyr-2=
.0.2/server/server.c=09Fri Jul 7 18:12:18 1995=0A--- zephyr-2.0.2/server/s=
erver.c=09Wed Jan 24 20:58:58 1996=0A***************=0A*** 517,522 ****=0A-=
-- 517,527 ----=0A =0A notice_class =3D make_string(notice->z_class, =
1);=0A =0A+ #ifdef CMU_INTERREALM=0A+ if (realm_which_realm(&newwho)) =
=0A+ status =3D realm_dispatch(notice, auth, &newwho, server);=0A+ =
else=0A+ #endif /* CMU_INTERREALM */=0A if (class_is_admin(notice_cl=
ass)) {=0A /* admins don't get acked, else we get a packet loop */=
=0A /* will return requeue if bdump request and dumping */=0Adiff=
-crtw dist/zephyr-2.0.2/server/subscr.c zephyr-2.0.2/server/subscr.c=0A***=
dist/zephyr-2.0.2/server/subscr.c=09Tue Jul 18 16:29:13 1995=0A--- zephyr-=
2.0.2/server/subscr.c=09Fri Jan 26 17:04:50 1996=0A***************=0A*** 93=
,98 ****=0A--- 93,107 ----=0A struct =
sockaddr_in *who,=0A int *found));=0A=
static Destlist *subscr_copy_def_subs __P((char *person));=0A+ #ifdef CMU=
_INTERREALM=0A+ static Code_t subscr_subscribe_realms __P((struct sockaddr_=
in *who,=0A+ Destlist *newsubs,=
=0A+ ZNotice_t *notice));=0A+ st=
atic Code_t subscr_realm_sendit __P((Client *who, Destlist *subs,=0A+ =
ZNotice_t *notice, Realm *realm));=0A+ st=
atic void subscr_unsub_realms __P((Destlist *newsubs));=0A+ static void sub=
scr_unsub_sendit __P((Destlist *subs, Realm *realm));=0A+ #endif /* CMU_INT=
ERREALM */=0A static int cl_match __P((Destlist*, Client *));=0A =0A st=
atic int defaults_read =3D 0; /* set to 1 if the default subs=0A*=
**************=0A*** 132,137 ****=0A--- 141,149 ----=0A Code_t retval;=
=0A Acl *acl;=0A String *sender;=0A+ #ifdef CMU_INTERREALM=0A+ =
Realm *realm =3D NULL;=0A+ #endif /* CMU_INTERREALM */=0A =0A if (!=
subs)=0A return ZERR_NONE; /* no subscr -> no error */=0A***=
************=0A*** 146,152 ****=0A--- 158,168 ----=0A subs=
->dest.inst->string, subs->dest.recip->string));=0A #endif=0A if =
(!bdumping) {=0A+ #ifdef CMU_INTERREALM=0A+ if (subs->dest.recip =
!=3D empty && subs->dest.recip !=3D sender && subs->dest.recip->string[0] !=
=3D '@') {=0A+ #else /* CMU_INTERREALM */=0A if (subs->dest.re=
cip !=3D empty && subs->dest.recip !=3D sender) {=0A+ #endif /* CMU_INTERRE=
ALM */=0A syslog(LOG_WARNING, "subscr unauth %s recipient =
%s",=0A sender->string, subs->dest.recip->string);=
=0A continue;=0A***************=0A*** 162,174 ****=0A =
if (!access_check(sender->string, acl, INSTWILD)) {=0A =
syslog(LOG_WARNING,=0A =
"subscr unauth %s class %s wild inst",=0A! =
notice->z_sender, subs->dest.classname->string);=0A =
continue;=0A }=0A }=0A =
}=0A }=0A retval =3D triplet_register(who, &subs->dest)=
;=0A if (retval !=3D ZERR_NONE) {=0A free(subs);=0A =
if (retval =3D=3D ZSRV_CLASSXISTS) {=0A--- 178,213 ----=0A =
if (!access_check(sender->string, acl, INSTWILD)) {=0A =
syslog(LOG_WARNING,=0A =
"subscr unauth %s class %s wild inst",=0A! =
sender->string, subs->dest.classname->string);=0A =
continue;=0A }=0A }=0A =
}=0A }=0A+ #ifdef CMU_INTERREALM=0A+ /* check the recipien=
t for a realm which isn't ours*/=0A+ realm =3D NULL;=0A+ if=
(subs->dest.recip->string[0] =3D=3D '@' && =0A+ strcmp((subs->=
dest.recip->string + 1),=0A+ ZGetRealm()) !=3D 0) =0A+ =
realm =3D realm_get_realm_by_name(subs->dest.recip->string + 1);=
=0A+ =0A+ if (realm) {=0A+ retval =3D subscr_realm_sendit=
(who, subs, notice, realm);=0A+ #if 0=0A+ zdbug ((LOG_DEBUG, "subsc=
r: realm %s %s/%s/%s", realm->name, subs->dest.classname->string,=0A+ =
subs->dest.inst->string, subs->dest.recip->string));=0A+ #endif=
=0A+ if (retval !=3D ZERR_NONE) {=0A+ free(subs);=0A+=
return(retval);=0A+ }=0A+ }=0A+ =0A+ =
retval =3D triplet_register(who, &subs->dest, realm);=0A+ #else /* CMU_INT=
ERREALM */=0A retval =3D triplet_register(who, &subs->dest);=0A+ #=
endif /* CMU_INTERREALM */=0A if (retval !=3D ZERR_NONE) {=0A =
free(subs);=0A if (retval =3D=3D ZSRV_CLASSXISTS) {=
=0A***************=0A*** 296,301 ****=0A--- 335,343 ----=0A struct soc=
kaddr_in *sin;=0A ZNotice_t *notice;=0A {=0A+ #ifdef CMU_INTERREALM=
=0A+ Realm *realm;=0A+ #endif /* CMU_INTERREALM */=0A Client *who;=
=0A Destlist *cancel_subs, *subs, *client_subs, *next;=0A Code_t =
retval;=0A***************=0A*** 322,328 ****=0A--- 364,382 ----=0A =
next =3D client_subs->next;=0A if (ZDest_eq(&client_subs-=
>dest, &subs->dest)) {=0A LIST_DELETE(client_subs);=0A+ #i=
fdef CMU_INTERREALM=0A+ retval =3D triplet_deregister(who, =
&client_subs->dest, (Realm *)0);=0A+ if (retval =3D=3D ZSRV=
_EMPTYCLASS && =0A+ client_subs->dest.recip->string[0] =
=3D=3D '@') =0A+ {=0A+ realm =3D real=
m_get_realm_by_name(client_subs->dest.recip->string + 1);=0A+ =
if (realm)=0A+ subscr_unsub_sendit(client_subs=
, realm);=0A+ realm =3D NULL;=0A+ } =
=0A+ #else /* CMU_INTERREALM */=0A triplet_deregister(who,=
&client_subs->dest);=0A+ #endif /* CMU_INTERREALM */=0A f=
ree_string(client_subs->dest.classname);=0A free_string(cl=
ient_subs->dest.inst);=0A free_string(client_subs->dest.re=
cip);=0A***************=0A*** 348,353 ****=0A--- 402,462 ----=0A }=0A =
}=0A =0A+ #ifdef CMU_INTERREALM=0A+ Code_t=0A+ subscr_realm_cancel(sin, n=
otice, realm)=0A+ struct sockaddr_in *sin;=0A+ ZNotice_t *notice;=
=0A+ Realm *realm;=0A+ {=0A+ Client *who;=0A+ Destlist *cancel_=
subs, *subs, *client_subs, *next;=0A+ Code_t retval;=0A+ int found =
=3D 0;=0A+ =0A+ if (!realm)=0A+ return ZSRV_NORLM;=0A+ =0A+ =
if (!realm->subs)=0A+ return ZSRV_NOSUB;=0A+ =0A+ cancel_subs =
=3D extract_subscriptions(notice);=0A+ if (!cancel_subs)=0A+ re=
turn ZERR_NONE; /* no subscr -> no error */=0A+ =0A+ for (subs =
=3D cancel_subs; subs; subs =3D next) {=0A+ next =3D subs->next;=0A=
+ for (client_subs =3D realm->subs; client_subs; client_subs =3D ne=
xt) {=0A+ next =3D client_subs->next;=0A+ if (ZDest=
_eq(&client_subs->dest, &subs->dest)) {=0A+ LIST_DELETE(cli=
ent_subs);=0A+ retval =3D triplet_deregister(realm->client,=
&client_subs->dest, realm);=0A+ free_string(client_subs->d=
est.classname);=0A+ free_string(client_subs->dest.inst);=0A=
+ free_string(client_subs->dest.recip);=0A+ =
free(client_subs);=0A+ found =3D 1;=0A+ br=
eak;=0A+ }=0A+ }=0A+ }=0A+ =0A+ free_subscripti=
ons(cancel_subs);=0A+ =0A+ if (found) {=0A+ #if 0=0A+ zdbug((LO=
G_DEBUG, "found & removed"));=0A+ #endif=0A+ return ZERR_NONE;=0A+ =
} else {=0A+ #if 0=0A+ zdbug((LOG_DEBUG, "not found"));=0A+ #en=
dif=0A+ return ZSRV_NOSUB;=0A+ }=0A+ }=0A+ #endif /* CMU_INTERR=
EALM */=0A+ =0A /*=0A * Cancel all the subscriptions for this client.=0A=
*/=0A***************=0A*** 357,362 ****=0A--- 466,475 ----=0A Clien=
t *client;=0A {=0A Destlist *subs, *next;=0A+ #ifdef CMU_INTERREALM=
=0A+ Code_t retval;=0A+ Realm *realm;=0A+ #endif /* CMU_INTERREALM =
*/=0A =0A #if 0=0A zdbug((LOG_DEBUG,"subscr_cancel_client %s",=0A***=
************=0A*** 370,380 ****=0A--- 483,505 ----=0A #if 0=0A zd=
bug((LOG_DEBUG,"sub_can %s", subs->dest.classname->string));=0A #endif=0A+=
#ifdef CMU_INTERREALM=0A+ retval =3D triplet_deregister(client, &s=
ubs->dest, (Realm *)NULL);=0A+ if (retval =3D=3D ZSRV_EMPTYCLASS &&=
=0A+ subs->dest.recip->string[0] =3D=3D '@') =0A+ {=
=0A+ realm =3D realm_get_realm_by_name(subs->dest.recip->string=
+ 1);=0A+ if (realm) =0A+ subscr_unsub_sendit(su=
bs, realm);=0A+ realm =3D NULL;=0A+ }=0A+ #else /* CM=
U_INTERREALM */=0A if (triplet_deregister(client, &subs->dest) !=
=3D ZERR_NONE) {=0A #if 0=0A zdbug((LOG_DEBUG,"sub_can_clt: n=
ot registered!"));=0A #endif=0A }=0A+ #endif /* CMU_INTERREALM */=
=0A free_string(subs->dest.classname);=0A free_string(sub=
s->dest.inst);=0A free_string(subs->dest.recip);=0A***************=
=0A*** 879,885 ****=0A classinst =3D cp;=0A ADVANCE(2);=
=0A recip =3D cp;=0A! #if 0=0A zdbug((LOG_DEBUG, "ext_sub=
: CLS %s INST %s RCPT %s",=0A class_name, classinst, cp));=
=0A #endif=0A--- 1004,1010 ----=0A classinst =3D cp;=0A =
ADVANCE(2);=0A recip =3D cp;=0A! #ifdef DEBUG=0A zdbug((L=
OG_DEBUG, "ext_sub: CLS %s INST %s RCPT %s",=0A class_name,=
classinst, cp));=0A #endif=0A***************=0A*** 895,900 ****=0A--- 102=
0,1032 ----=0A }=0A sub->dest.classname =3D make_string(c=
lass_name, 1);=0A sub->dest.inst =3D make_string(classinst, 1);=0A=
+ #ifdef CMU_INTERREALM=0A+ /* if the recipient is @REALM where REA=
LM is ours,=0A+ then just change it to an empty string */=0A+ =
if (recip[0] =3D=3D '@' && !strcmp(recip + 1, ZGetRealm()))=0A+ =
sub->dest.recip =3D make_string("", 0);=0A+ else=0A+ #endif /*=
CMU_INTERREALM */=0A sub->dest.recip =3D make_string(recip, 0);=
=0A LIST_INSERT(subs, sub);=0A }=0A***************=0A*** 927,=
930 ****=0A--- 1059,1589 ----=0A fputs("'\n", fp);=0A }=0A }=
=0A+ =0A+ #ifdef CMU_INTERREALM=0A+ #define I_ADVANCE(xx) { cp +=3D (strl=
en(cp) + 1); \=0A+ if (cp >=3D notice->z_message + notice=
->z_message_len) { \=0A+ syslog(LOG_WARNING, "mal=
formed subscription %d", \=0A+ xx); \=0A+ =
return (ZERR_NONE); \=0A+ }}=0A=
+ =0A+ /* As it exists, this function expects to take only the first sub fr=
om the =0A+ * Destlist. At some point, it and the calling code should be r=
eplaced */=0A+ static Code_t=0A+ subscr_realm_sendit(who, subs, notice, rea=
lm)=0A+ Client *who;=0A+ Destlist *subs;=0A+ ZNotice_t *notice;=
=0A+ Realm *realm;=0A+ {=0A+ #if 0=0A+ Destlist *subs2;=0A+ #endif=0A=
+ ZNotice_t snotice;=0A+ char *pack;=0A+ int packlen;=0A+ int found=
=3D 0, i;=0A+ char **text;=0A+ Code_t retval;=0A+ char addr[16]; =
/* xxx.xxx.xxx.xxx max */=0A+ char port[16];=0A+ =0A+ #if 0=0A+ =
zdbug((LOG_DEBUG, "subscr_rlm_sendit"));=0A+ #endif=0A+ =0A+ =0A+ #ifdef n=
otdef=0A+ for (subs2 =3D subs; subs2; subs2 =3D subs2->next, found++);=0A=
+ /* found is now the number of subscriptions */=0A+ =0A+ /* coalesce=
the subscription information into a list of char *'s */=0A+ /* one extra=
for client information */=0A+ if ((text =3D (char **) malloc((found * NU=
M_FIELDS + 2)=0A+ * sizeof(char *))) =3D=3D=
(char **) 0) =0A+ {=0A+ syslog(LOG_ERR, "subscr_rlm_sendit mallo=
c");=0A+ return(ENOMEM);=0A+ }=0A+ #endif /* notdef */=0A+ =0A+ =
if ((text=3D(char **)malloc((NUM_FIELDS + 2)*sizeof(char *))) =3D=3D (char=
**)0) {=0A+ syslog(LOG_ERR, "subscr_rlm_sendit malloc");=0A+ r=
eturn(ENOMEM);=0A+ }=0A+ /* convert the address to a string of the form=
x.x.x.x/port */=0A+ strcpy(addr, inet_ntoa(notice->z_sender_addr));=0A+ =
if ((retval =3D ZMakeAscii(port, sizeof(port), (unsigned char *) =0A+ =
¬ice->z_port, sizeof(u_short))) !=3D ZERR_NONE) =
=0A+ {=0A+ syslog(LOG_ERR, "subscr_rlm_sendit make ascii: %s",=0A=
+ error_message(retval));=0A+ return(ZERR_NONE);=0A+ =
}=0A+ text[0] =3D addr;=0A+ text[1] =3D port;=0A+ =0A+ #ifdef notdef=
=0A+ for (i =3D 0, subs2 =3D subs; subs2, i < found ; i++, subs2 =3D subs=
2->next) {=0A+ text[i*NUM_FIELDS + 2] =3D subs2->dest.classname->string=
;=0A+ text[i*NUM_FIELDS + 3] =3D subs2->dest.inst->string;=0A+ text=
[i*NUM_FIELDS + 4] =3D subs2->dest.recip->string;=0A+ }=0A+ #endif /* not=
def */=0A+ =0A+ text[2] =3D subs->dest.classname->string;=0A+ text[3] =
=3D subs->dest.inst->string;=0A+ text[4] =3D subs->dest.recip->string;=0A=
+ =0A+ /* format snotice */=0A+ snotice.z_class_inst =3D ZEPHYR_CTL_R=
EALM;=0A+ snotice.z_opcode =3D REALM_REQ_SUBSCRIBE;=0A+ snotice.z_port =
=3D srv_addr.sin_port;=0A+ =0A+ snotice.z_class =3D ZEPHYR_CTL_CLASS;=0A+=
=0A+ snotice.z_recipient =3D "";=0A+ snotice.z_kind =3D ACKED;=0A+ s=
notice.z_num_other_fields =3D 0;=0A+ snotice.z_default_format =3D "";=0A+=
snotice.z_sender =3D notice->z_sender;=0A+ snotice.z_recipient =3D not=
ice->z_recipient;=0A+ snotice.z_default_format =3D notice->z_default_form=
at;=0A+ =0A+ #ifdef notdef=0A+ if ((retval =3D ZFormatNoticeList(&snoti=
ce, text, found * NUM_FIELDS + 2,=0A+ &pa=
ck, &packlen, ZNOAUTH)) !=3D ZERR_NONE) =0A+ #else=0A+ if ((retval =3D ZF=
ormatNoticeList(&snotice, text, NUM_FIELDS + 2,=0A+ =
&pack, &packlen, ZNOAUTH)) !=3D ZERR_NONE) =0A+ #endif=0A+ {=
=0A+ syslog(LOG_WARNING, "subscr_rlm_sendit format: %s",=0A+ =
error_message(retval));=0A+ free(text);=0A+ return(ZERR_NO=
NE);=0A+ }=0A+ free(text);=0A+ =0A+ if ((retval =3D ZParseNotice(=
pack, packlen, &snotice)) !=3D ZERR_NONE) {=0A+ syslog(LOG_WARNING, "su=
bscr_rlm_sendit parse: %s",=0A+ error_message(retval));=0A+ =
free(pack);=0A+ return(ZERR_NONE);=0A+ }=0A+ =0A+ #if 0=0A+ zdbug=
((LOG_DEBUG,"subscr_rlm_sendit len: %d", snotice.z_message_len));=0A+ #endi=
f=0A+ realm_handoff(&snotice, 1, &(who->addr), realm, 0);=0A+ free(pack=
);=0A+ =0A+ return(ZERR_NONE);=0A+ }=0A+ =0A+ static Code_t=0A+ subscr_=
add_raw(client, realm, newsubs)=0A+ Client *client;=0A+ Realm *real=
m;=0A+ Destlist *newsubs;=0A+ {=0A+ Destlist *subs, *subs2, *subs3, *=
*head;=0A+ Code_t retval;=0A+ =0A+ #if 0=0A+ zdbug((LOG_DEBUG, "subscr_=
add_raw"));=0A+ #endif=0A+ /* create the new subs list if necessary */=0A=
+ if (realm) {=0A+ head =3D &(realm->subs);=0A+ } else {=0A+ he=
ad =3D &(client->subs);=0A+ }=0A+ =0A+ /* Loop over the new subscriptio=
ns. */=0A+ for (subs =3D newsubs; subs; subs =3D subs2) {=0A+ subs2 =
=3D subs->next;=0A+ #ifdef DEBUG=0A+ zdbug((LOG_DEBUG,"subscr_add_raw: =
%s/%s/%s", subs->dest.classname->string, subs->dest.inst->string, subs->des=
t.recip->string));=0A+ if (realm)=0A+ zdbug((LOG_DEBUG,"subscr_ad=
d_raw: realm is %s", realm->name));=0A+ #endif=0A+ retval =3D triplet_r=
egister(client, &subs->dest, realm);=0A+ if (retval !=3D ZERR_NONE) {=
=0A+ free(subs);=0A+ if (retval =3D=3D ZSRV_CLASSXISTS) {=0A+ =
continue;=0A+ } else {=0A+ free_subscriptions(subs2);=
=0A+ return retval;=0A+ }=0A+ }=0A+ LIST_INSERT((*hea=
d), subs);=0A+ }=0A+ return ZERR_NONE;=0A+ }=0A+ =0A+ Code_t=0A+ subscr=
_realm(realm, notice)=0A+ Realm *realm;=0A+ ZNotice_t *notice;=0A+ =
{=0A+ Destlist *newsubs;=0A+ =0A+ newsubs =3D extract_subs=
criptions(notice);=0A+ =0A+ if (!newsubs) {=0A+ sys=
log(LOG_WARNING, "empty subs in subscr_realm");=0A+ return(=
ZERR_NONE);=0A+ }=0A+ =0A+ return(subscr_add_raw(realm->cli=
ent, realm, newsubs));=0A+ }=0A+ =0A+ /* Like realm_sendit, this only takes=
one item from subs */=0A+ static void=0A+ subscr_unsub_sendit(subs, realm)=
=0A+ Destlist *subs;=0A+ Realm *realm;=0A+ {=0A+ ZNotice_t unotic=
e;=0A+ Code_t retval;=0A+ #ifdef notdef=0A+ char *list[7 * NUM_FIELDS];=
=0A+ #else /* notdef */=0A+ char *list[NUM_FIELDS];=0A+ #endif /* notdef =
*/=0A+ char *pack;=0A+ int packlen;=0A+ int found =3D 0;=0A+ Destli=
st *subs2;=0A+ =0A+ unotice.z_class =3D ZEPHYR_CTL_CLASS;=0A+ unotice.z=
_class_inst =3D ZEPHYR_CTL_REALM;=0A+ unotice.z_opcode =3D REALM_UNSUBSCR=
IBE;=0A+ unotice.z_recipient =3D "";=0A+ unotice.z_kind =3D ACKED;=0A+ =
=0A+ unotice.z_sender =3D "";=0A+ unotice.z_port =3D srv_addr.sin_port;=
=0A+ unotice.z_num_other_fields =3D 0;=0A+ unotice.z_default_format =3D=
"";=0A+ =0A+ #ifdef notdef=0A+ found =3D 0;=0A+ for (subs2 =3D subs; s=
ubs2; subs2 =3D subs2->next) {=0A+ list[found * NUM_FIELDS] =3D subs2->=
dest.classname->string;=0A+ list[found * NUM_FIELDS + 1] =3D subs2->des=
t.inst->string;=0A+ list[found * NUM_FIELDS + 2] =3D "";=0A+ =
=0A+ found++;=0A+ =0A+ if (found >=3D 7) {=0A+ if ((retva=
l =3D ZFormatNoticeList(&unotice, list, found * NUM_FIELDS, &pack, &packlen=
, ZNOAUTH)) !=3D ZERR_NONE) {=0A+ syslog(LOG_WARNING, "subscr_unsub=
_sendit format: %s",=0A+ error_message(retval));=0A+ =
return;=0A+ }=0A+ if ((retval =3D ZParseNotice(pack, packlen, =
&unotice)) !=3D ZERR_NONE) {=0A+ syslog(LOG_WARNING, "subscr_unsub_=
sendit parse: %s",=0A+ error_message(retval));=0A+ f=
ree(pack);=0A+ return;=0A+ }=0A+ free(pack);=0A+ =
realm_handoff(&unotice, 1, (struct sockaddr_in *) 0, realm, 0);=0A+ f=
ound =3D 0;=0A+ }=0A+ }=0A+ =0A+ if (found =3D=3D 0)=0A+ retu=
rn;=0A+ =0A+ if ((retval =3D ZFormatNoticeList(&unotice, list, found * NU=
M_FIELDS, &pack, &packlen, ZNOAUTH)) !=3D ZERR_NONE) {=0A+ syslog(LOG_W=
ARNING, "subscr_unsub_sendit format: %s",=0A+ error_message(retv=
al));=0A+ return;=0A+ }=0A+ #else /* notdef */=0A+ list[0] =3D subs=
->dest.classname->string;=0A+ list[1] =3D subs->dest.inst->string;=0A+ =
list[2] =3D "";=0A+ =0A+ if ((retval =3D ZFormatNoticeList(&unotice, list=
, NUM_FIELDS, &pack, &packlen, ZNOAUTH)) !=3D ZERR_NONE) {=0A+ syslog(L=
OG_WARNING, "subscr_unsub_sendit format: %s",=0A+ error_message(=
retval));=0A+ return;=0A+ }=0A+ #endif /* notdef */=0A+ =0A+ if ((r=
etval =3D ZParseNotice(pack, packlen, &unotice)) !=3D ZERR_NONE) {=0A+ =
syslog(LOG_WARNING, "subscr_unsub_sendit parse: %s",=0A+ error_m=
essage(retval));=0A+ free(pack);=0A+ return;=0A+ }=0A+ free(pac=
k);=0A+ realm_handoff(&unotice, 1, (struct sockaddr_in *) 0, realm, 0);=
=0A+ }=0A+ =0A+ Code_t=0A+ subscr_send_realm_subs(realm)=0A+ Realm *rea=
lm;=0A+ {=0A+ int i =3D 0;=0A+ Destlist *subs, *next;=0A+ #ifdef ZEPHYR=
_USES_KERBEROS=0A+ char buf[512];=0A+ C_Block cblock;=0A+ #endif /* ZEP=
HYR_USES_KERBEROS */=0A+ char buf2[512];=0A+ char *list[7 * NUM_FIELDS]=
;=0A+ int num =3D 0;=0A+ Code_t retval;=0A+ =0A+ #if 0=0A+ zdbug((LOG=
_DEBUG, "send_realm_subs"));=0A+ #endif=0A+ =0A+ strcpy(buf, realm->name)=
;=0A+ list[num++] =3D buf;=0A+ =0A+ retval =3D bdump_send_list_tcp(SERV=
ACK, &srv_addr, ZEPHYR_ADMIN_CLASS,=0A+ "", =
ADMIN_NEWREALM, "", "", list, num);=0A+ if (retval !=3D ZERR_NONE) {=0A+ =
syslog(LOG_ERR, "subscr_send_realm_subs newclt: %s", error_message(retv=
al));=0A+ return retval;=0A+ }=0A+ =0A+ if (!realm->subs)=0A+ =
return ZERR_NONE;=0A+ =0A+ for (subs=3Drealm->subs; subs; subs =3D next)=
{=0A+ next =3D subs->next;=0A+ #ifdef DEBUG=0A+ zdbug ((LOG_DEBUG,=
"send_realm_subs: %s/%s/%s", subs->dest.classname->string,=0A+ =
subs->dest.inst->string, subs->dest.recip->string));=0A+ #endif=0A+ /*=
for each subscription */=0A+ list[i * NUM_FIELDS] =3D subs->dest.class=
name->string;=0A+ list[i * NUM_FIELDS + 1] =3D subs->dest.inst->string;=
=0A+ list[i * NUM_FIELDS + 2] =3D subs->dest.recip->string;=0A+ i++=
;=0A+ if (i >=3D 7) {=0A+ /* we only put 7 in each packet, so we =
don't run out of room */=0A+ retval =3D bdump_send_list_tcp(ACKED, &s=
rv_addr,=0A+ ZEPHYR_CTL_CLASS, "",=0A+ =
REALM_SUBSCRIBE, "", "", list,=0A+ =
i * NUM_FIELDS);=0A+ if (retval !=3D ZER=
R_NONE) {=0A+ syslog(LOG_ERR, "subscr_send_realm_subs subs: %s",=0A=
+ error_message(retval));=0A+ return retval;=0A+ =
}=0A+ i =3D 0;=0A+ }=0A+ }=0A+ if (i) {=0A+ retval =3D=
bdump_send_list_tcp(ACKED, &srv_addr, ZEPHYR_CTL_CLASS,=0A+ =
"", REALM_SUBSCRIBE, "", "", list,=0A+ =
i * NUM_FIELDS);=0A+ if (retval !=3D ZERR_NONE) {=0A+ =
syslog(LOG_ERR, "subscr_send_realm_subs subs: %s",=0A+ er=
ror_message(retval));=0A+ return retval;=0A+ }=0A+ }=0A+ =0A+ =
return ZERR_NONE;=0A+ }=0A+ =0A+ static Code_t=0A+ subscr_check_foreign_su=
bs(notice, who, realm, newsubs)=0A+ ZNotice_t *notice;=0A+ struct s=
ockaddr_in *who;=0A+ Realm *realm;=0A+ Destlist *newsubs;=0A+ {=0A+=
Destlist *subs, *subs2, *next;=0A+ Acl *acl;=0A+ char **text;=0A+ =
int found =3D 0;=0A+ ZNotice_t snotice;=0A+ char *pack, *cp;=0A+ int =
packlen;=0A+ Code_t retval;=0A+ String *sender;=0A+ =0A+ for (subs =
=3D newsubs; subs; subs =3D subs->next)=0A+ found++;=0A+ =0A+ if (fou=
nd =3D=3D 0)=0A+ return(ZERR_NONE);=0A+ =0A+ sender =3D make_string=
(notice->z_sender, 0);=0A+ =0A+ if ((text =3D (char **)malloc((found * NU=
M_FIELDS + 2) * sizeof(char *))) =3D=3D (char **) 0) {=0A+ syslog(LOG_E=
RR, "subscr_ck_forn_subs no mem(text)");=0A+ return(ENOMEM);=0A+ }=0A=
+ =0A+ /* grab the client information from the incoming message */=0A+ =
cp =3D notice->z_message;=0A+ text[0] =3D cp;=0A+ =0A+ I_ADVANCE(2);=0A=
+ text[1] =3D cp;=0A+ =0A+ I_ADVANCE(3);=0A+ =0A+ found =3D 0;=0A+ =
for (subs =3D newsubs; subs; subs =3D next) {=0A+ next=3Dsubs->next;=0A=
+ acl =3D class_get_acl(subs->dest.classname);=0A+ if (acl) {=0A+ =
if (!access_check(sender->string, acl, SUBSCRIBE)) {=0A+ syslo=
g(LOG_WARNING, "subscr unauth %s class %s",=0A+ sender->stri=
ng, subs->dest.classname->string);=0A+ continue; /* the for loop */=
=0A+ }=0A+ if (wildcard_instance =3D=3D subs->dest.inst) {=0A+ =
if (!access_check(sender->string, acl, INSTWILD)) {=0A+ s=
yslog(LOG_WARNING,=0A+ "subscr unauth %s class %s wild ins=
t",=0A+ sender->string, subs->dest.classname->string);=0A+=
continue;=0A+ }=0A+ }=0A+ }=0A+ =0A+ /* ok=
ay to subscribe. save for return trip */=0A+ text[found*NUM_FIELDS + 2=
] =3D subs->dest.classname->string;=0A+ text[found*NUM_FIELDS + 3] =3D =
subs->dest.inst->string;=0A+ text[found*NUM_FIELDS + 4] =3D "";=0A+ =
found++;=0A+ =0A+ retval =3D triplet_register(realm->client, &subs->de=
st, realm);=0A+ #ifdef DEBUG=0A+ zdbug ((LOG_DEBUG, "ck_frn_subs: %s/%s=
/%s", subs->dest.classname->string,=0A+ subs->dest.inst->string=
, subs->dest.recip->string));=0A+ #endif=0A+ =0A+ if (retval !=3D ZERR_=
NONE) {=0A+ if (retval =3D=3D ZSRV_CLASSXISTS) {=0A+ continue=
;=0A+ } else {=0A+ free_subscriptions(subs->next);=0A+ =
free(text);=0A+ return retval;=0A+ }=0A+ }=0A+ LIST=
_INSERT(realm->subs,subs);=0A+ }=0A+ /* don't send confirmation if we'r=
e not the initial server contacted */=0A+ if (!(server_which_server(who) =
|| found =3D=3D 0)) {=0A+ snotice =3D *notice;=0A+ snotice.z_opcode=
=3D REALM_ADD_SUBSCRIBE;=0A+ snotice.z_class_inst =3D ZEPHYR_CTL_REALM=
;=0A+ snotice.z_port =3D srv_addr.sin_port;=0A+ if ((retval =3D ZFo=
rmatNoticeList(&snotice, text, found * NUM_FIELDS + 2, &pack, &packlen, ZNO=
AUTH)) !=3D ZERR_NONE) {=0A+ syslog(LOG_WARNING, "subscr_ck_forn_subs=
format: %s",=0A+ error_message(retval));=0A+ free(text)=
;=0A+ return(ZERR_NONE); =0A+ }=0A+ if ((retval =3D ZPar=
seNotice(pack, packlen, &snotice)) !=3D ZERR_NONE) {=0A+ syslog(LOG_W=
ARNING, "subscr_ck_forn_subs parse: %s",=0A+ error_message(ret=
val));=0A+ free(text);=0A+ free(pack);=0A+ return(ZERR_NO=
NE);=0A+ }=0A+ realm_handoff(&snotice, 1, who, realm, 0);=0A+ f=
ree(pack);=0A+ }=0A+ free(text);=0A+ return ZERR_NONE;=0A+ }=0A+ =0A+=
Code_t subscr_foreign_user(notice, who, realm)=0A+ ZNotice_t *notice;=
=0A+ struct sockaddr_in *who;=0A+ Realm *realm;=0A+ {=0A+ Destlis=
t *newsubs, *temp;=0A+ Acl *acl;=0A+ Code_t status;=0A+ Client *clien=
t;=0A+ ZNotice_t snotice;=0A+ struct sockaddr_in newwho;=0A+ char *cp=
;=0A+ char rlm_recipient[REALM_SZ + 1];=0A+ =0A+ #if 0=0A+ zdbug((LOG=
_DEBUG, "subscr_foreign_user"));=0A+ #endif=0A+ =0A+ cp =3D notice->z_m=
essage;=0A+ =0A+ newwho.sin_addr.s_addr =3D inet_addr(cp);=0A+ if (ne=
wwho.sin_addr.s_addr =3D=3D -1) {=0A+ syslog(LOG_ERR, "malformed addr f=
rom %s, notice->z_sender");=0A+ return(ZERR_NONE);=0A+ }=0A+ =0A+ I=
_ADVANCE(0);=0A+ =0A+ snotice =3D *notice;=0A+ =0A+ if ((status =3D=
ZReadAscii(cp, strlen(cp), (unsigned char *)&snotice.z_port, sizeof(u_shor=
t)))=0A+ !=3D ZERR_NONE) =0A+ {=0A+ syslog(LOG_ERR, "subscr=
_foreign_user read ascii: %s",=0A+ error_message(status));=0A+=
return(ZERR_NONE);=0A+ }=0A+ =0A+ I_ADVANCE(1);=0A+ =0A+ s=
notice.z_message =3D cp;=0A+ snotice.z_message_len =3D notice->z_message_=
len - (cp - notice->z_message);=0A+ =0A+ newsubs =3D extract_subscription=
s(&snotice);=0A+ if (!newsubs) {=0A+ syslog(LOG_WARNING, "empty subsc=
r for %s", notice->z_sender);=0A+ return(ZERR_NONE);=0A+ }=0A+ =0A+ =
if (!strcmp(snotice.z_opcode, REALM_ADD_SUBSCRIBE)) {=0A+ /* this was =
approved by the other realm, add subscriptions */=0A+ =0A+ client =
=3D client_which_client(&newwho.sin_addr, &snotice);=0A+ if (client =3D=
=3D (Client *)0) {=0A+ syslog(LOG_WARNING, "no client at %s/%d",=0A+ =
inet_ntoa(newwho.sin_addr), ntohs(snotice.z_port));=0A+ =
free_subscriptions(newsubs);=0A+ return(ZERR_NONE);=0A+ }=0A+ =
=0A+ /* translate the recipient to represent the foreign realm */=0A+ =
sprintf(rlm_recipient, "@%s", realm->name);=0A+ for (temp =3D newsu=
bs; temp; temp =3D temp->next) {=0A+ #if 0=0A+ syslog(LOG_DEBUG, "in =
foreign_user: class is %s", temp->dest.classname->string);=0A+ #endif =
=0A+ temp->dest.recip =3D make_string(rlm_recipient, 0);=0A+ }=
=0A+ =0A+ status =3D subscr_add_raw(client, (Realm *)0, newsubs);=
=0A+ } else if (!strcmp(snotice.z_opcode, REALM_REQ_SUBSCRIBE)) {=0A+ =
status =3D subscr_check_foreign_subs(notice, who, realm, newsubs);=0A+ }=
else {=0A+ syslog(LOG_ERR, "bogus opcode %s in subscr_forn_user",=0A+ =
snotice.z_opcode);=0A+ status =3D ZERR_NONE;=0A+ }=0A+ r=
eturn(status);=0A+ }=0A+ #endif /* CMU_INTERREALM */=0A =0Adiff -crtw dist=
/zephyr-2.0.2/server/uloc.c zephyr-2.0.2/server/uloc.c=0A*** dist/zephyr-2.=
0.2/server/uloc.c=09Fri Jul 7 22:49:01 1995=0A--- zephyr-2.0.2/server/uloc=
.c=09Tue Jan 30 14:19:41 1996=0A***************=0A*** 97,108 ****=0A--- 97,=
115 ----=0A static Exposure_type ulogin_remove_user __P((ZNotice_t *notice=
, int auth,=0A struct sockadd=
r_in *who,=0A int *err_return=
));=0A+ #ifdef CMU_INTERREALM=0A+ static void login_sendit __P((ZNotice_t *=
notice, int auth, struct sockaddr_in *who, int external));=0A+ #else /* CMU=
_INTERREALM */=0A static void login_sendit __P((ZNotice_t *notice, int aut=
h, struct sockaddr_in *who));=0A+ #endif /* CMU_INTERREALM */=0A static ch=
ar **ulogin_marshal_locs __P((ZNotice_t *notice, int *found, int auth));=0A=
=0A static int ul_equiv __P((Location *l1, Location *l2));=0A =0A stat=
ic void free_loc __P((Location *loc));=0A+ #ifdef CMU_INTERREALM=0A+ static=
void ulogin_locate_forward __P((ZNotice_t *notice, struct sockaddr_in *who=
, Realm *realm));=0A+ #endif /* CMU_INTERREALM */=0A =0A static Location =
*locations =3D NULL; /* ptr to first in array */=0A static int num_locs =
=3D 0; /* number in array */=0A***************=0A*** 160,165 ****=0A=
--- 167,178 ----=0A break;=0A case REALM_ANN:=0A =
case NET_VIS:=0A+ #ifdef CMU_INTERREALM=0A+ if (server=
=3D=3D me_server) {=0A+ sendit(notice, 1, who, 0);=0A+ =
}=0A+ break;=0A+ #endif /* CMU_INTERREALM */=0A =
case NET_ANN:=0A /* currently no distinction between these.=
=0A just announce */=0A***************=0A*** 168,174 ****=
=0A--- 181,191 ----=0A authentic. ulogin_remove_user check=
s the=0A ip addrs */=0A if (server =3D=3D me_s=
erver)=0A+ #ifdef CMU_INTERREALM=0A+ sendit(notice, 1, who, 1=
);=0A+ #else /* CMU_INTERREALM */=0A sendit(notice, 1, who);=
=0A+ #endif /* CMU_INTERREALM */=0A break;=0A defau=
lt:=0A syslog(LOG_ERR,"bogus location exposure %d/%s",=0A*****=
**********=0A*** 251,257 ****=0A--- 268,278 ----=0A if (err_re=
t)=0A nack(notice, who);=0A else=0A+ #ifdef C=
MU_INTERREALM=0A+ login_sendit(notice, auth, who, 0);=0A+ #=
else /* CMU_INTERREALM */=0A login_sendit(notice, auth, wh=
o);=0A+ #endif /* CMU_INTERREALM */=0A }=0A } else if (!strcm=
p(notice->z_opcode, EXPOSE_NETVIS)) {=0A #if 0=0A***************=0A*** 262=
,268 ****=0A--- 283,293 ----=0A if (err_ret)=0A =
nack(notice, who);=0A else=0A+ #ifdef CMU_INTERREALM=0A+ =
login_sendit(notice, auth, who, 0);=0A+ #else /* CMU_INTERREA=
LM */=0A login_sendit(notice, auth, who);=0A+ #endif /* CM=
U_INTERREALM */=0A }=0A } else if (!strcmp(notice->z_opcode, =
EXPOSE_NETANN)) {=0A #if 0=0A***************=0A*** 273,279 ****=0A--- 298,=
308 ----=0A if (err_ret)=0A nack(notice, who)=
;=0A else=0A+ #ifdef CMU_INTERREALM=0A+ login_=
sendit(notice, auth, who, 1);=0A+ #else /* CMU_INTERREALM */=0A =
login_sendit(notice, auth, who);=0A+ #endif /* CMU_INTERREALM */=0A =
}=0A } else {=0A syslog(LOG_ERR, "unknown ulog opcode=
%s", notice->z_opcode);=0A***************=0A*** 287,296 ****=0A--- 316,332=
----=0A }=0A =0A static void=0A+ #ifdef CMU_INTERREALM=0A+ login_sendit=
(notice, auth, who, external)=0A+ #else /* CMU_INTERREALM */=0A login_send=
it(notice, auth, who)=0A+ #endif /* CMU_INTERREALM */=0A ZNotice_t *no=
tice;=0A int auth;=0A struct sockaddr_in *who;=0A+ #ifdef CMU_INT=
ERREALM=0A+ int external;=0A+ #endif /* CMU_INTERREALM */=0A {=0A =
ZNotice_t log_notice;=0A =0A***************=0A*** 301,307 ****=0A--- 337,=
347 ----=0A log_notice =3D *notice;=0A =0A log_notice.z_opcode =
=3D LOGIN_USER_LOGIN;=0A+ #ifdef CMU_INTERREALM=0A+ sendit(&log_notice,=
auth, who, external);=0A+ #else /* CMU_INTERREALM */=0A sendit(&log_n=
otice, auth, who);=0A+ #endif /* CMU_INTERREALM */=0A }=0A =0A =0A******=
*********=0A*** 315,320 ****=0A--- 355,364 ----=0A struct sockaddr_in =
*who;=0A Server *server;=0A {=0A+ #ifdef CMU_INTERREALM=0A+ char *c=
p;=0A+ Realm *realm;=0A+ #endif /* CMU_INTERREALM */=0A #if 0=0A zd=
bug((LOG_DEBUG,"ulocate_disp"));=0A #endif=0A***************=0A*** 335,340=
****=0A--- 379,390 ----=0A #endif=0A /* we are talking to a curr=
ent-rev client; send an ack */=0A ack(notice, who);=0A+ #ifdef CMU=
_INTERREALM=0A+ cp =3D strchr(notice->z_class_inst, '@');=0A+ =
if (cp && (realm =3D realm_get_realm_by_name(cp + 1)))=0A+ ulo=
gin_locate_forward(notice, who, realm);=0A+ else=0A+ #endif /* CMU_=
INTERREALM */=0A ulogin_locate(notice, who, auth);=0A ret=
urn ZERR_NONE;=0A } else {=0A***************=0A*** 1048,1053 ****=0A--=
- 1098,1109 ----=0A char **answer;=0A int i =3D 0;=0A String=
*inst;=0A+ #ifdef CMU_INTERREALM=0A+ int local =3D sender_in_realm(not=
ice);=0A+ #endif /* CMU_INTERREALM */=0A+ #ifdef OPSTAFF_LOCATE_SELF=0A+ =
int self =3D !(strcmp(notice->z_sender, notice->z_class_inst));=0A+ #endi=
f =0A =0A *found =3D 0; /* # of matches */=0A =0A=
***************=0A*** 1065,1075 ****=0A--- 1121,1141 ----=0A #endif=0A =
switch (locations[i].exposure) {=0A case OPSTAFF_VIS:=0A+ =
#ifdef OPSTAFF_LOCATE_SELF=0A+ if (!self) {=0A+ #endif =0A =
i++;=0A continue;=0A+ #ifdef OPSTAFF_LOCATE_SELF=0A+=
}=0A+ #endif =0A case REALM_VIS:=0A cas=
e REALM_ANN:=0A+ #ifdef CMU_INTERREALM=0A+ if (!local) {=0A+ #e=
lse /* CMU_INTERREALM */=0A if (!auth) {=0A+ #endif /* CMU_INT=
ERREALM */=0A i++;=0A continue;=0A =
}=0A***************=0A*** 1190,1192 ****=0A--- 1256,1359 ----=0A =
free(loc->time);=0A return;=0A }=0A+ =0A+ #ifdef CMU_INTERREALM=0A+=
static void=0A+ ulogin_locate_forward(notice, who, realm)=0A+ ZNotice_=
t *notice;=0A+ struct sockaddr_in *who;=0A+ Realm *realm;=0A+ {=0A+=
ZNotice_t lnotice;=0A+ =0A+ lnotice =3D *notice;=0A+ lnotice.z_opcod=
e =3D REALM_REQ_LOCATE;=0A+ =0A+ realm_handoff(&lnotice, 1, who, realm,=
0);=0A+ }=0A+ =0A+ void=0A+ ulogin_realm_locate(notice, who, realm)=0A+ =
ZNotice_t *notice;=0A+ struct sockaddr_in *who;=0A+ Realm *realm;=
=0A+ {=0A+ char **answer;=0A+ int found;=0A+ Code_t retval;=0A+ ZNo=
tice_t lnotice;=0A+ char *pack;=0A+ int packlen;=0A+ =0A+ #ifdef DEBU=
G=0A+ if (zdebug)=0A+ zdbug((LOG_DEBUG, "ulogin_realm_locate"));=0A+ =
#endif=0A+ =0A+ answer =3D ulogin_marshal_locs(notice, &found, 0/*AUTH*=
/);=0A+ =0A+ lnotice =3D *notice;=0A+ lnotice.z_opcode =3D REALM_ANS_=
LOCATE;=0A+ =0A+ if ((retval =3D ZFormatRawNoticeList(&lnotice, answer,=
found * NUM_FIELDS, &pack, &packlen)) !=3D ZERR_NONE) {=0A+ syslog(LOG=
_WARNING, "ulog_rlm_loc format: %s",=0A+ error_message(retval));=
=0A+ =0A+ if (answer)=0A+ free(answer);=0A+ return;=0A+ =
}=0A+ if (answer)=0A+ free(answer);=0A+ =0A+ if ((retval =3D ZPa=
rseNotice(pack, packlen, &lnotice)) !=3D ZERR_NONE) {=0A+ syslog(LOG_WA=
RNING, "subscr_rlm_sendit parse: %s",=0A+ error_message(retval))=
;=0A+ free(pack);=0A+ return;=0A+ }=0A+ =0A+ realm_handoff(&l=
notice, 1, who, realm, 0);=0A+ free(pack);=0A+ =0A+ return;=0A+ }=0A+=
=0A+ void=0A+ ulogin_relay_locate(notice, who)=0A+ ZNotice_t *notice;=
=0A+ struct sockaddr_in *who;=0A+ {=0A+ ZNotice_t lnotice;=0A+ Code=
_t retval;=0A+ struct sockaddr_in newwho;=0A+ char *pack;=0A+ int pac=
klen;=0A+ =0A+ newwho.sin_addr.s_addr =3D notice->z_sender_addr.s_addr;=
=0A+ newwho.sin_port =3D notice->z_port;=0A+ newwho.sin_family =3D AF_I=
NET;=0A+ =0A+ if ((retval =3D ZSetDestAddr(&newwho)) !=3D ZERR_NONE) {=
=0A+ syslog(LOG_WARNING, "uloc_relay_loc set addr: %s",=0A+ =
error_message(retval));=0A+ return;=0A+ }=0A+ =0A+ lnotice =3D *n=
otice;=0A+ lnotice.z_opcode =3D LOCATE_LOCATE;=0A+ lnotice.z_kind =3D A=
CKED;=0A+ =0A+ if ((retval =3D ZFormatRawNotice(&lnotice, &pack, &packl=
en)) !=3D ZERR_NONE) {=0A+ syslog(LOG_WARNING, "ulog_relay_loc format: =
%s",=0A+ error_message(retval));=0A+ return;=0A+ }=0A+ =
=0A+ if ((retval =3D ZSendPacket(pack, packlen, 0)) !=3D ZERR_NONE) {=0A+=
syslog(LOG_WARNING, "ulog_relay_loc xmit: %s",=0A+ error_me=
ssage(retval));=0A+ }=0A+ free(pack);=0A+ }=0A+ #endif /* CMU_INTERREAL=
M */=0Adiff -crtw dist/zephyr-2.0.2/server/zserver.h zephyr-2.0.2/server/zs=
erver.h=0A*** dist/zephyr-2.0.2/server/zserver.h=09Fri Jul 7 18:12:40 1995=
=0A--- zephyr-2.0.2/server/zserver.h=09Sat Jan 27 04:09:47 1996=0A*********=
******=0A*** 60,65 ****=0A--- 60,101 ----=0A struct _Destlist *next=
, **prev_p;=0A } Destlist;=0A =0A+ #ifdef CMU_INTERREALM=0A+ typedef stru=
ct _Client Client;=0A+ =0A+ typedef struct _Realm {=0A+ char name[REALM_S=
Z];=0A+ int count;=0A+ struct sockaddr_in *addrs;=0A+ int idx; =
/* which server we are connected to */=0A+ Destlist *subs; =
=0A+ Client *client;=0A+ } Realm;=0A+ =0A+ typedef struct _Realmname {=0A=
+ char name[REALM_SZ];=0A+ char **servers;=0A+ int =
nused;=0A+ int nservers;=0A+ } Realmname;=0A+ =0A+ struct _Client {=
=0A+ struct sockaddr_in addr; /* ipaddr/port of client */=0A=
+ Destlist *subs ; /* subscriptions */=0A+ #ifdef ZE=
PHYR_USES_KERBEROS=0A+ C_Block session_key; /* session k=
ey for this client */=0A+ #endif /* ZEPHYR_USES_KERBEROS */=0A+ String =
*principal; /* krb principal of user */=0A+ long =
last_msg; /* last message sent to this client */=0A+ lo=
ng last_check; /* actually, last time the other=0A+ =
server was asked to check... */=0A+ =
int last_send; /* Counter for last sent packet. */=
=0A+ Realm *realm;=0A+ struct _Client *next, **p=
rev_p;=0A+ };=0A+ =0A+ #else /* CMU_INTERREALM */=0A+ =0A typedef struct _=
Client {=0A struct sockaddr_in addr; /* ipaddr/port of clie=
nt */=0A Destlist *subs ; /* subscriptions */=0A***=
************=0A*** 74,79 ****=0A--- 110,117 ----=0A struct _Client =
*next, **prev_p;=0A } Client;=0A =0A+ #endif /* CMU_INTERREALM */=0A+ =
=0A typedef struct _Triplet {=0A Destination dest;=0A Ac=
l *acl;=0A***************=0A*** 95,103 ****=0A--- 133,150 -=
---=0A short packsz; /* size of packet */=0A =
char *packet; /* ptr to packet */=0A ZUnique_I=
d_t uid; /* uid of packet */=0A+ #ifdef CMU_INTERREALM=0A=
+ struct sockaddr_in ack_addr;=0A+ #endif /* CMU_INTERREALM */=0A =
union { /* address to send to */=0A s=
truct sockaddr_in addr; /* client address */=0A int sr=
v_idx; /* index of server */=0A+ #ifdef CMU_INTERREALM=0A+ =
struct {=0A+ int rlm_idx; /* index of realm */=0A+ =
int rlm_srv_idx; /* index of server in realm */=0A+ } rlm;=0A+ #=
endif /* CMU_INTERREALM */=0A } dest;=0A struct _Unacked *next, *=
*prev_p;=0A } Unacked;=0A***************=0A*** 152,159 ****=0A--- 199,211 =
----=0A extern String *class_control, *class_admin, *class_hm;=0A extern =
String *class_ulogin, *class_ulocate;=0A int ZDest_eq __P((Destination *d1=
, Destination *d2));=0A+ #ifdef CMU_INTERREALM=0A+ Code_t triplet_register =
__P((Client *client, Destination *dest, Realm *realm));=0A+ Code_t triplet_=
deregister __P((Client *client, Destination *dest, Realm *realm));=0A+ #els=
e /* CMU_INTERREALM */=0A Code_t triplet_register __P((Client *client, Des=
tination *dest));=0A Code_t triplet_deregister __P((Client *client, Destin=
ation *dest));=0A+ #endif /* CMU_INTERREALM */=0A Code_t class_restrict __=
P((char *class, Acl *acl));=0A Code_t class_setup_restricted __P((char *cl=
ass, Acl *acl));=0A Client **triplet_lookup __P((Destination *dest));=0A**=
*************=0A*** 180,186 ****=0A--- 232,242 ----=0A void handle_packet =
__P((void));=0A void clt_ack __P((ZNotice_t *notice, struct sockaddr_in *w=
ho, Sent_type sent));=0A void nack_release __P((Client *client));=0A+ #ifd=
ef CMU_INTERREALM=0A+ void sendit __P((ZNotice_t *notice, int auth, struct =
sockaddr_in *who, int external));=0A+ #else /* CMU_INTERREALM */=0A void s=
endit __P((ZNotice_t *notice, int auth, struct sockaddr_in *who));=0A+ #end=
if /* CMU_INTERREALM */=0A void rexmit __P((void *));=0A void xmit __P((Z=
Notice_t *notice, struct sockaddr_in *dest, int auth,=0A Cl=
ient *client));=0A***************=0A*** 251,256 ****=0A--- 307,321 ----=0A =
struct sockaddr_in *who, Server *server));=0A=
Code_t uloc_send_locations __P((void));=0A =0A+ #ifdef CMU_INTERREALM=0A=
+ /* found in realm.c */=0A+ Realm *realm_which_realm __P((struct sockaddr_=
in *who));=0A+ Realm *realm_get_realm_by_name __P((char *name));=0A+ void r=
ealm_handoff(ZNotice_t *, int, struct sockaddr_in *, Realm *, int);=0A+ voi=
d realm_init __P(());=0A+ Code_t ZCheckRealmAuthentication __P((ZNotice_t *=
, struct sockaddr_in *, char *));=0A+ #endif /* CMU_INTERREALM */=0A+ =0A =
/* found in version.c */=0A char *get_version __P((void));=0A =0A********=
*******=0A*** 276,281 ****=0A--- 341,347 ----=0A #endif=0A #ifdef ZEPHYR_=
USES_KERBEROS=0A extern char srvtab_file[];=0A+ extern char my_realm[];=0A=
#endif=0A extern char acl_dir[];=0A extern char subs_file[];=0A********=
*******=0A*** 318,323 ****=0A--- 384,395 ----=0A #define ADMIN_NEWCLT "=
NEXT_CLIENT" /* Opcode: this is a new client */=0A #define ADMIN_KILL_CL=
T "KILL_CLIENT" /* Opcode: client is dead, remove */=0A #define ADMIN_S=
TATUS "STATUS" /* Opcode: please send status */=0A+ =0A+ #ifdef C=
MU_INTERREALM=0A+ #define ADMIN_NEWREALM "NEXT_REALM" /* Opcode: this i=
s a new realm */=0A+ #define REALM_REQ_LOCATE "REQ_LOCATE" /* Opcode: req=
uest a location */=0A+ #define REALM_ANS_LOCATE "ANS_LOCATE" /* Opcode: a=
nswer to location */=0A+ #endif /* CMU_INTERREALM */=0A =0A /* me_server_=
idx is the index into otherservers of this server descriptor. */=0A /* the=
'limbo' server is always the first server */=0Adiff -crtw dist/zephyr-2.0.=
2/server/zsrv_conf.h zephyr-2.0.2/server/zsrv_conf.h=0A*** dist/zephyr-2.0.=
2/server/zsrv_conf.h=09Fri Jun 30 18:11:35 1995=0A--- zephyr-2.0.2/server/z=
srv_conf.h=09Tue Jan 16 17:32:02 1996=0A***************=0A*** 20,26 ****=0A=
--- 20,29 ----=0A =0A #ifndef ZEPHYR_USES_HESIOD=0A #define SERVER_LIST_=
FILE "server.list"=0A+ #ifdef CMU_INTERREALM=0A+ #define REALM_LIST_=
FILE "realm.list"=0A #endif=0A+ #endif=0A #ifdef ZEPHYR_USES_KERB=
EROS=0A #define ZEPHYR_SRVTAB "srvtab"=0A #define ZEPHYR_TKFILE=
"ztkts"=0A***************=0A*** 30,35 ****=0A--- 33,41 ----=0A =
#define DEFAULT_SUBS_FILE "default.subscriptions"=0A =0A #define RE=
XMIT_TIMES { 2, 2, 4, 4, 8, 8, 16, 16, 32, 32, -1 }=0A+ #ifdef CMU_INTERREA=
LM=0A+ #define NUM_REXMIT_TIMES 10=0A+ #endif=0A =0A /* hostmanager defin=
es */=0A #define LOSE_TIMO (60) /* time during which a lo=
sing host=0Adiff -crtw dist/zephyr-2.0.2/server/zsrv_err.et zephyr-2.0.2/se=
rver/zsrv_err.et=0A*** dist/zephyr-2.0.2/server/zsrv_err.et=09Tue Jan 9 12=
:26:13 1990=0A--- zephyr-2.0.2/server/zsrv_err.et=09Wed Jan 17 13:50:49 199=
6=0A***************=0A*** 38,41 ****=0A--- 38,45 ----=0A "zsrv_err=
.et,v 1.8 1990/01/09 17:26:13 jtkohl Exp"=0A ec ZSRV_BADSUBPORT,=0A =
"Illegal port specified in subscription"=0A+ ec ZSRV_NORLM,=0A+ =
"No such realm"=0A+ ec ZSRV_EMPTYCLASS,=0A+ "Class is now empty"=0A=
end=0Adiff -crtw dist/zephyr-2.0.2/zhm/Makefile.in zephyr-2.0.2/z=
hm/Makefile.in=0A*** dist/zephyr-2.0.2/zhm/Makefile.in=09Fri Jul 7 18:17:2=
2 1995=0A--- zephyr-2.0.2/zhm/Makefile.in=09Wed Dec 20 17:26:21 1995=0A****=
***********=0A*** 34,41 ****=0A check:=0A =0A install: zhm=0A! $=
(INSTALL) -m 755 -s zhm $(lsbindir)=0A! $(INSTALL) -m 644 $(srcdir)=
/zhm.8 $(mandir)/man8=0A =0A clean:=0A rm -f $(OBJS) zhm=0A--- 3=
4,41 ----=0A check:=0A =0A install: zhm=0A! $(INSTALL) -m 755 -s=
zhm ${DESTDIR}$(lsbindir)=0A! $(INSTALL) -m 644 $(srcdir)/zhm.8 ${=
DESTDIR}$(mandir)/man8=0A =0A clean:=0A rm -f $(OBJS) zhm=0Adiff=
-crtw dist/zephyr-2.0.2/zhm/zhm.c zephyr-2.0.2/zhm/zhm.c=0A*** dist/zephyr=
-2.0.2/zhm/zhm.c=09Fri Jul 7 18:17:25 1995=0A--- zephyr-2.0.2/zhm/zhm.c=09=
Thu Jan 4 09:51:16 1996=0A***************=0A*** 397,403 ****=0A--- 397,408=
----=0A =0A #ifdef _POSIX_VERSION=0A sigemptyset(&sa.sa_mask);=0A+=
#ifdef SA_INTERRUPT=0A+ /* SunOS restarts recvfrom() if we don't set =
SA_INTERRUPT. */=0A+ sa.sa_flags =3D SA_INTERRUPT;=0A+ #else=0A =
sa.sa_flags =3D 0;=0A+ #endif=0A sa.sa_handler =3D set_sig_type;=0A =
sigaction(SIGHUP, &sa, (struct sigaction *)0);=0A sigaction(SIGA=
LRM, &sa, (struct sigaction *)0);=0A
---559023410-851401618-823636300=:483
Content-Type: APPLICATION/octet-stream
Content-Transfer-Encoding: BASE64
Content-Description: zadd.tar.gz
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
Psx9ydg8odAyF1rOLkT7IZRaEytQqlEH+OlSt9vj+Cnz5W6jwa3TB7BfzUPh
zSq0CPPLBZYmCyxjX9zGckP8MMFrQYEg1VC2rx7bZ1RopHIKs4qpI6brS+rD
oxsWxcOX64vKI58bFaTDnkSympCuQa3pNlZqNI0ry4C6CYZyW+Zts22noC5W
kvx7GvszqZsmcmVVLGOnfrxdp65hxwzp+k4Aq6ZerNZhbbuN1aUv7kUGo2VA
Rdxqnzi5/efr7D8Z/j9GDNi3cQG6xv+/0VjT8V91YFHk/7PcWMn9f+7O/6d+
C/+ffyv3n+/gaHOdsDA1XE3Fq6UC1qyINSNkTcesGUFrOmrNCFvTcWtm4FoS
uXb3oWsqCs0OXjOj16aFryU1MYANI9iMEDYdw2YEsekotq8MY0vi2G4VyGZG
sj2Bn0YsG/7U3zPD2Tie7fsGtMmINu4bfZsW1JZHtX2HqLYnueP5d/X/rd+R
/29taWl12fD/XaL4v7XlPP77n7L/f4X77233/zxcMQ9XzMMV83DFPFwxD1f8
QraWy43X53/4tneAz5b/6iu1tSW2/zTqjbUVzv9Dd4Ln8t93/8sDlvKApTxg
KQ9YygOW8oClPF4pj1fK45XyeKU8XimPV8rjlfJ4pTxeKY9XyuOV8nilPF4p
j1fK45XyeKU8XimPV8rjlfJ4JRmvlB+e/jed/4LA2v8+1//cJv/rSqOxRvf/
NNbqef7XO5//3YGM/fjm5/+rM+7/qa/U1Pn/8hrGguD5fz2//+Fuzv/nFv9d
sLwVf7jpuT/V5X8Lz0DsR79D3N3IOczwuTFPBioi8tibC8lMVi6mvBaLVWEB
v98KxmHHWxdpt83k9srQjz3yXtYkXDkX91X9LfJHXVeOmvr5C88FxW9dmJXq
1Yb44cfF2tJiY0nU6+uN+vrSmuHiqWo7HHgg7v/5tvnqxe8gD+w+vYJf2wcv
yVDEv345fKq+7jRb9BXq7R9N1KVHVn39hGHonwyHfzotGDNIArR8qx3xGVXZ
aoeCHfTjQD4OHCy+s3uIDcO3o4NXV4sWA3C2D3aa8m3rKkGL4wxxAvvt4ORD
Oxz30b3BkT6PJapZuf8ntnlVgS84tiv43N7bbe5T8EE5Fxb+EfxfktG33v9n
+/+vLC8vJ/t/nfz/V1ZWc///u+H/zCSSW1thC/ixJv7PH4i3Xt8bfnRBbzv3
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
rrv/YRV9fZT+t1wn+X+tXsvl/zv4y+9/yO9/mHX/gzQH6ERJ/Ntx9L50t7c/
yOanZEqS4ktWrqRpqY7UeP7BVzh8U/vP98gA+QX2v5XG6mpu//sL7H/fIwPk
dfkfGzVj/1+l+9/XVtZy+98/Lv73h2pjubpSz/M/5vkf/7b5H7+pQPONsj/+
L0s1+enx327/12eAd5P/eXl12ZT/OP8znQnm+/8/LP7n+wsA+Xllfl6Zn1fm
55X5eWV+XpmfV+bnlf/d55XfXznS8j8ltvgu7p83tv8u1WpLyzXy/1teXs39
P+9U/+P53x1I2+83nX/Q/1an63/wlOZ/dbVRX6mt1ej8d6me3/9zF39kPBP3
/2QxAZPTX8Gv7YOXGCUgf/1y+FR93Wm26Kuzt7t/NFGXHln19ROGoX8yHP7p
tA63W7DPMAlWO2SpS34HDhYAAQabgm9HB6+uJLk62wc7Tfm4dSU08TrOEENe
++3g5EM7HPe9UhktxZSxqMRVK/f/xGauKvAFx3EFn9sgC++Tha38P2OUSq3/
7+H+ca3/B/l6oP1naWkV2ACt/5Xc/pP7f/xX+3/sgDz6bPe3zXdFPbJ3xRuc
p7xzCn8LzxDNnfkMQyVGo8+7cQuh44R18yCFOzHlHIXTVt7mGEWO6R9wiuJ8
I/6v9uBvK//P5P+N+nJ9Tcv/S1L+a9Ry/7+7if9B6/YbaWs8uTTs26L0ob+y
lr51uozl8Q8tGNu9MZBiy++jGRoU3Gh5mFl+z41iMR7hacG6qNUXa43FH1ex
NWWXfxq6UQ8NsiWehywoZIa3bn1iq3tFPPXcj63gNMZLJ6oTxVZ0K/+n28FC
L7zID7racBaD6DPk5GCfe4OKYU1+6UaR2+mNMUdrRBmp/Bjt4sEp4eLI6/SG
QT84u6S2s0zu8NgwuvuRMoJzvoC06Z3D/H0KfMdEs1gdvtIjab4OPbTNYcKD
2O3EVUFm6RZMRlR17DRmRbmkezIpFufObcMQVTIxTMshRfjXLZDLXzRbuwc7
MsuEE8Vh5J57MDGjsgwXxmw4/DbSuSZU6qxYGpDgW0bmAZUQZlRG+5+ZYQDK
m/frKNvIMMBMAmjp6o5Hj4zUUkSBJzrrkArKlhlUAFpFRCPbokKd03epUDz1
0PO6jArDfhkFnY8q81BiJ5QZtvCl2+2GbX8oIn9ov8PJxiwcANG0o2EdTIQC
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
ADoCAA==
---559023410-851401618-823636300=:483
Content-Type: TEXT/plain; CHARSET=US-ASCII
Content-Transfer-Encoding: QUOTED-PRINTABLE
Content-Description: zREADME
clients/zlogin is a simple program to send login/logout/flush messages=0Acl=
ients/zmail is a mail check program that works with AMS mail =0A (probabl=
y not terribly useful outside CMU and a small group of other places)=0Aclie=
nts/zstart tries to start a zhm if one isn't running, then runs zwgc=0Aclie=
nts/zrepeat uses a small zwgc.desc hack to replay old zephyrs=0A=0AThe vari=
ous Makefile.in's are changed to allow setting a "DESTDIR" which only=0Aapp=
lies at install time, and to export lsbindir=0A=0Axzwrite/logins.c incorpor=
ates a fix sent to zbugs=0Axzwrite/zephyr.c comments out debugging code whi=
ch is no longer valid=0Aclients/zctl/zctl.c adds a way to cuase hm_flush to=
ask "are you sure?"=0A further, it adds wg_exit=0A (it also re-adds pu=
nt for CMU local use until in-server punts exist)=0Aclients/zctl/zctl_cmds.=
ct adds wg_exit and the punt stuff=0Aclients/zlocate/zlocate.c adds a retur=
n code fix sent into zbugs=0Aclients/znol/znol.c adds interrealm code to ex=
pand realm names,=0A and a standalone mode that causes it to just print l=
ogins and logouts as=0A they occur.=0Aclients/zwgc/X_driver.c adds a call=
to ZConfDir so the zwgc_resources file=0A can be in a directory specifie=
d by an environment variable (used elsewhere)=0Aclients/zwgc/X_gram.c adds =
the "lifespan" X resource which works as per-gram=0A lifetimes. it also a=
dds X resource support for something which can do full =0A name lookups b=
ased on sender using a passwd lookup. Further, it adds an =0A additional =
event mask to grab key presses so certain enhancements =0A detailed furth=
er down work=0A (there's also code ifdef'd sun to deal with broken X serv=
ers)=0Aclients/zwgc/X_gram.h adds support for certain zwgc enhancements=0Ac=
lients/zwgc/eval.c adds support for 2 new opcodes, one of which does a =0A =
stylestrip, the other of which allows a mathematical addition. it also=0A=
adds in support for the aforementioned zwgc enhancement=0Aclients/zwgc/f=
ormatter.c adds the new opcode support=0Aclients/zwgc/lexer.c adds the new =
opcode support=0Aclients/zwgc/main.c adds in support for the aforementioned=
zwgc enhancement=0A it also adds in a call to ZConfDir when looking for =
zwgc.desc=0A (and re-adds punt support)=0Aclients/zwgc/mux.c adds in supp=
ort for the aforementioned zwgc enhancement=0Aclients/zwgc/node.c adds opco=
de support=0Aclients/zwgc/notice.c adds in support for the aforementioned z=
wgc enhancement=0A as well as interrealm broadcast support (printing the =
value of the recipient=0A to be *@REALM instead of @REALM)=0Aclients/zwgc=
/parser.y adds opcode support=0Aclients/zwgc: plus.{c,h} adds in support fo=
r the aforementioned zwgc =0A enhancement=0Aclients/zwgc/subscriptions.c =
re-adds punt support, and recipient interrealm=0A support=0Aclients/zwgc/=
text_operations.h adds opcode support=0Aclients/zwgc/xcut.c adds in support=
for the aforementioned zwgc enhancement=0Aclients/zwgc/xshow.c adds in sup=
port for the aforementioned zwgc enhancement=0A plus support for the X_fo=
reground variable to allow you to set =0A foreground xgram colors=0Aclien=
ts/zwgc/zephyr.c adds in support for the aforementioned zwgc enhancement=0A=
=0A(I will explain the zwgc enhancement in detail below)=0A=0Aclients/zwrit=
e/zwrite.c adds interrealm realm expansion support=0Ah/zephyr/zephyr.h.in a=
dds interrealm functions and opcodes for the server,=0A mostly=0Alib/zeph=
yr/ZAsyncLocate.c adds interrealm realm expansion support=0Alib/zephyr/ZCkA=
uth.c understands how to check authentication in an=0A interrealm packet=
=0Alib/zephyr/ZCnfDir.c is new, allows expansion using an environment varia=
ble=0Alib/zephyr/ZExpnRlm.c expands a partial realm name=0Alib/zephyr/ZMkAu=
th.c adds interrealm authentication handling=0Alib/zephyr/ZRetSubs.c adds i=
nterrealm realm expansion support=0Alib/zephyr/ZSubs.c adds interrealm real=
m expansion support=0Alib/zephyr/ZVariables.c adds ZConfDir support=0Alib/z=
ephyr/Zinternal.c adds an interrealm definition=0Aserver/access.c fixes the=
acl bug mentioned on zbugs=0Aserver/acl_files.c adds name.*@* checking as =
mentioned on zbugs=0Aserver/bdump.c adds interrealm support, also always us=
es ZGetRealm() for realm,=0A as well as support for long (afs kerberos) l=
ifetimes as a compile option=0Aserver/class.c adds interrealm support=0Aser=
ver/client.c adds interrealm support=0Aserver/dispatch.c makes a minor -DDE=
BUG fix, adds interrealm support=0Aserver/kopt.c adds long lifetime support=
, adds decomp_ticket for=0A sites using cygnus kerberos=0Aserver/kstuff.c=
adds interrealm support and long lifetimes=0Aserver/main.c adds interrealm=
support and the -r realm.name switch=0Aserver/subscr.c adds interrealm sup=
port=0Aserver/realm.c adds various interrealm specific functions=0Aserver/u=
loc.c adds interrealm and support for locating yourself when you're=0A op=
staff=0Aserver/zserver.h adds interrealm types, structs and prototypes=0Ase=
rver/zsrv_conf.h adds interrealm support=0Aserver/zsrv_err.et adds interrea=
lm errors=0A=0Athe zwgc enhancements allow a zephyr to replayed if a key is=
pressed on it.=0Athe zephyr_version variable is set to zwgcplus-repeat, an=
d the opcode to=0Akey-<keyname>, like key-t if you hit t on it, allowing yo=
u to, for example,=0Areply to a zephyr including an exceprted body, or log =
a zephyr, or any=0Anumber of things. it also allows you to set per-zephyr t=
ime events, like making=0Aall zephyrs of a given class or class/instance pa=
ir disappear after some amount=0Aof time. or you can combine features, like=
making all zephyrs of a given class disappear some amount of time after a =
key press, or use the key press to save doomed zephyrs. =0A=0Aa man page wi=
ll follow; a tech writer is still sanitizing what I wrote about it.=0A=0ATh=
e following copyright can be stuck in an include file or otherwise included=
with the changes:=0A/* =0A * Copyright (C) 1992,93,94,95 by Carnegie Mell=
on University=0A * =0A * Export of software employing encryption from th=
e United States of=0A * America is assumed to require a specific license=
from the United=0A * States Government. It is the responsibility of an=
y person or=0A * organization contemplating export to obtain such a lice=
nse before=0A * exporting.=0A * =0A * WITHIN THAT CONSTRAINT, permission=
to use, copy, modify, and=0A * distribute this software and its documentat=
ion for any purpose and=0A * without fee is hereby granted, provided that t=
he above copyright=0A * notice appear in all copies and that both that copy=
right notice and=0A * this permission notice appear in supporting documenta=
tion, and that=0A * the CMU's name not be used in advertising or publicity =
pertaining=0A * to distribution of the software without specific, written p=
rior=0A * permission. CMU makes no representations about the suitability o=
f=0A * this software for any purpose. It is provided "as is" without expre=
ss=0A * or implied warranty.=0A * zwgcplus modifications from Andrew Plotki=
n (ap1i+@andrew.cmu.edu)=0A * zwgc time event modifications from Ryan Ingra=
m (ryani+@andrew.cmu.edu)=0A * zmail from Jim Zelenka, (jz1j+@andrew.cmu.ed=
u)=0A * zstart from Jay Laefer, (jl57+@andrew.cmu.edu)=0A * interrealm zeph=
yr code from Jay Laefer and Dmitri Schoeman (vs0r+@andrew.cmu.edu)=0A */=0A
---559023410-851401618-823636300=:483--