This is patch #3 to the Zephyr sources. After applying the patch, rebuild the server, zctl, znol, zpopnotify, zmailnotify and zhm. BE SURE TO APPLY THIS PATCH WITH patch -p TO PRESERVE THE DIRECTORY HIERARCHY. CHANGES in this patch file: - remove support for zinit (it is now part of the separate Athena program "attach") - fix unsubscriptions in zctl - turn off ATHENA_COMPAT for zmailnotify - add support for "-f -" for znol - fix bug in zpopnotify which sent all notices to the same recipient - bug fixes for acl_files.c in library - clean up installation step of server so it only removes old .acl files - make server truly case-insensitive - put some fake message logging in server, improve other error messages - fix bad xfree() call in server - parameterize pid file name for zhm - update affected manual pages Prereq: 2 diff -rc patchlevel2/patchlevel.h src/patchlevel.h *** patchlevel2/patchlevel.h Fri Oct 27 13:29:25 1989 --- src/patchlevel.h Mon Dec 18 13:52:21 1989 *************** *** 1 **** ! #define PATCHLEVEL 2 --- 1 ---- ! #define PATCHLEVEL 3 diff -rc patchlevel2/clients/Imakefile src/clients/Imakefile *** patchlevel2/clients/Imakefile Wed Apr 5 16:57:11 1989 --- src/clients/Imakefile Mon Oct 30 16:53:56 1989 *************** *** 3,11 **** /**/# For copying and distribution information, see the file /**/# "mit-copyright.h". /**/# ! /**/# $Source: /mit/zephyr/src/clients/RCS/Imakefile,v $ /**/# $Author: jtkohl $ ! /**/# $Header: Imakefile,v 1.5 89/04/05 16:56:59 jtkohl Exp $ /**/# #define have_subdirs #define no_curdir_lint --- 3,11 ---- /**/# For copying and distribution information, see the file /**/# "mit-copyright.h". /**/# ! /**/# $Source: /afs/athena.mit.edu/astaff/project/zephyr/src/clients/RCS/Imakefile,v $ /**/# $Author: jtkohl $ ! /**/# $Header: /afs/athena.mit.edu/astaff/project/zephyr/src/clients/RCS/Imakefile,v 1.6 89/10/30 16:53:53 jtkohl Exp $ /**/# #define have_subdirs #define no_curdir_lint *************** *** 27,33 **** ZMAILNOTIFY= #endif /* HESIOD && KERBEROS */ ! SUBDIRS = zaway zctl zinit zleave zlocate \ $(ZMAILNOTIFY) znol zpopnotify zshutdown_notify zstat zwrite $(SYSLOGD) #ifdef OLD_ATHENA_COMPAT --- 27,33 ---- ZMAILNOTIFY= #endif /* HESIOD && KERBEROS */ ! SUBDIRS = zaway zctl zleave zlocate \ $(ZMAILNOTIFY) znol zpopnotify zshutdown_notify zstat zwrite $(SYSLOGD) #ifdef OLD_ATHENA_COMPAT diff -rc patchlevel2/clients/zctl/zctl.c src/clients/zctl/zctl.c *** patchlevel2/clients/zctl/zctl.c Thu Mar 23 17:04:18 1989 --- src/clients/zctl/zctl.c Wed Nov 15 12:01:00 1989 *************** *** 3,9 **** * * Created by: Robert French * ! * $Source: /mit/zephyr/src/clients/zctl/RCS/zctl.c,v $ * $Author: jtkohl $ * * Copyright (c) 1987,1988 by the Massachusetts Institute of Technology. --- 3,9 ---- * * Created by: Robert French * ! * $Source: /afs/athena.mit.edu/astaff/project/zephyr/src/clients/zctl/RCS/zctl.c,v $ * $Author: jtkohl $ * * Copyright (c) 1987,1988 by the Massachusetts Institute of Technology. *************** *** 21,27 **** #include #include #ifndef lint ! static char rcsid_zctl_c[] = "$Header: zctl.c,v 1.13 89/03/23 17:03:56 jtkohl Exp $"; #endif lint #define SUBSATONCE 7 --- 21,27 ---- #include #include #ifndef lint ! static char rcsid_zctl_c[] = "$Header: /afs/athena.mit.edu/astaff/project/zephyr/src/clients/zctl/RCS/zctl.c,v 1.14 89/11/15 12:00:51 jtkohl Exp $"; #endif lint #define SUBSATONCE 7 *************** *** 119,125 **** exit((code != 0)); } ! printf("ZCTL $Revision: 1.13 $ (Protocol %s%d.%d) - Type '?' for a list of commands.\n\n", ZVERSIONHDR, ZVERSIONMAJOR,ZVERSIONMINOR); --- 119,125 ---- exit((code != 0)); } ! printf("ZCTL $Revision: 1.14 $ (Protocol %s%d.%d) - Type '?' for a list of commands.\n\n", ZVERSIONHDR, ZVERSIONMAJOR,ZVERSIONMINOR); *************** *** 703,710 **** if (type == UNSUB) continue; unsubs[unind].class = ! malloc((unsigned)(strlen(subline)+1)); ! (void) strcpy(unsubs[unind].class,subline); unsubs[unind].classinst = malloc((unsigned)(strlen(comma+1)+1)); (void) strcpy(unsubs[unind].classinst,comma+1); --- 703,711 ---- if (type == UNSUB) continue; unsubs[unind].class = ! malloc((unsigned)(strlen(subline))); ! /* skip the leading '!' */ ! (void) strcpy(unsubs[unind].class,subline+1); unsubs[unind].classinst = malloc((unsigned)(strlen(comma+1)+1)); (void) strcpy(unsubs[unind].classinst,comma+1); diff -rc patchlevel2/clients/zmailnotify/Imakefile src/clients/zmailnotify/Imakefile *** patchlevel2/clients/zmailnotify/Imakefile Thu Mar 23 11:18:43 1989 --- src/clients/zmailnotify/Imakefile Wed Nov 15 10:31:41 1989 *************** *** 3,16 **** /**/# For copying and distribution information, see the file /**/# "mit-copyright.h". /**/# ! /**/# $Source: /mit/zephyr/src/clients/zmailnotify/RCS/Imakefile,v $ /**/# $Author: jtkohl $ ! /**/# $Header: Imakefile,v 1.2 89/03/23 11:18:38 jtkohl Exp $ /**/# LIBS= ${ZEPHYR_LIB} ${COMERR_LIB} ${KRB_LIB} ${DES_LIB} ${HES_LIB} LINTLIBS= ${ZEPHYR_LINTLIB} ${COMERR_LINTLIB} ${KRB_LINTLIB} ${DES_LINTLIB} ! DEFINES= -DKPOP -DATHENA_COMPAT SRCS = zmailnotify.c OBJS = zmailnotify.o --- 3,16 ---- /**/# For copying and distribution information, see the file /**/# "mit-copyright.h". /**/# ! /**/# $Source: /afs/athena.mit.edu/astaff/project/zephyr/src/clients/zmailnotify/RCS/Imakefile,v $ /**/# $Author: jtkohl $ ! /**/# $Id: Imakefile,v 1.3 89/11/15 10:31:28 jtkohl Exp $ /**/# LIBS= ${ZEPHYR_LIB} ${COMERR_LIB} ${KRB_LIB} ${DES_LIB} ${HES_LIB} LINTLIBS= ${ZEPHYR_LINTLIB} ${COMERR_LINTLIB} ${KRB_LINTLIB} ${DES_LINTLIB} ! DEFINES= -DKPOP SRCS = zmailnotify.c OBJS = zmailnotify.o diff -rc patchlevel2/clients/znol/znol.c src/clients/znol/znol.c *** patchlevel2/clients/znol/znol.c Fri Oct 27 13:29:27 1989 --- src/clients/znol/znol.c Mon Oct 30 09:47:30 1989 *************** *** 19,25 **** #include #ifndef lint ! static char rcsid_znol_c[] = "$Header: /afs/athena.mit.edu/astaff/project/zephyr/src/clients/znol/RCS/znol.c,v 1.6 89/10/25 14:17:51 jtkohl Exp $"; #endif lint #define SUBSATONCE 7 --- 19,25 ---- #include #ifndef lint ! static char rcsid_znol_c[] = "$Header: /afs/athena.mit.edu/astaff/project/zephyr/src/clients/znol/RCS/znol.c,v 1.7 89/10/30 09:47:10 jtkohl Exp $"; #endif lint #define SUBSATONCE 7 *************** *** 47,65 **** exit (1); } - envptr = getenv("HOME"); - if (envptr) - (void) strcpy(anyonename,envptr); - else { - if (!(pwd = getpwuid((int) getuid()))) { - fprintf(stderr,"Who are you?\n"); - exit (1); - } - - (void) strcpy(anyonename,pwd->pw_dir); - } - (void) strcat(anyonename,"/.anyone"); - for (arg=1;argpw_dir); + } + (void) strcat(anyonename,"/.anyone"); + } ! /* if the filename is "-", read stdin */ ! if (strcmp(anyonename,"-") == 0) { ! fp = stdin; ! } else if (!(fp = fopen(anyonename,"r"))) { ! fprintf(stderr,"Can't open %s for input\n",anyonename); ! exit (1); ! } } ind = 0; *** patchlevel2/clients/zpopnotify/zpopnotify.c Wed May 10 16:54:01 1989 --- src/clients/zpopnotify/zpopnotify.c Wed Nov 8 15:42:24 1989 *************** *** 3,9 **** * * Created by: Robert French * ! * $Source: /mit/zephyr/src/clients/zpopnotify/RCS/zpopnotify.c,v $ * $Author: jtkohl $ * * Copyright (c) 1987,1988 by the Massachusetts Institute of Technology. --- 3,9 ---- * * Created by: Robert French * ! * $Source: /afs/athena.mit.edu/astaff/project/zephyr/src/clients/zpopnotify/RCS/zpopnotify.c,v $ * $Author: jtkohl $ * * Copyright (c) 1987,1988 by the Massachusetts Institute of Technology. *************** *** 19,25 **** #include /* for MAXHOSTNAMELEN */ #ifndef lint ! static char rcsid_zpopnotify_c[] = "$Header: zpopnotify.c,v 1.5 89/05/10 16:53:48 jtkohl Exp $"; #endif lint #define MAIL_CLASS "MAIL" --- 19,25 ---- #include /* for MAXHOSTNAMELEN */ #ifndef lint ! static char rcsid_zpopnotify_c[] = "$Header: /afs/athena.mit.edu/astaff/project/zephyr/src/clients/zpopnotify/RCS/zpopnotify.c,v 1.6 89/11/08 15:42:11 jtkohl Exp $"; #endif lint #define MAIL_CLASS "MAIL" *************** *** 78,85 **** notice.z_opcode = ""; notice.z_sender = mysender; notice.z_default_format = "From Post Office $1:\n$2"; ! ! notice.z_recipient = (char *)rindex(argv[1],'/'); if (notice.z_recipient) notice.z_recipient++; else --- 78,86 ---- notice.z_opcode = ""; notice.z_sender = mysender; notice.z_default_format = "From Post Office $1:\n$2"; ! ! /* in case it's a mailbox name (pathname), strip to username */ ! notice.z_recipient = (char *)rindex(argv[i],'/'); if (notice.z_recipient) notice.z_recipient++; else diff -rc patchlevel2/lib/acl_files.c src/lib/acl_files.c *** patchlevel2/lib/acl_files.c Thu Mar 23 09:32:53 1989 --- src/lib/acl_files.c Wed Dec 13 11:19:41 1989 *************** *** 3,9 **** * * Created by: John T. Kohl * ! * $Source: /mit/zephyr/src/lib/RCS/acl_files.c,v $ * $Author: jtkohl $ * * Copyright (c) 1987,1988 by the Massachusetts Institute of Technology. --- 3,9 ---- * * Created by: John T. Kohl * ! * $Source: /afs/athena.mit.edu/astaff/project/zephyr/src/lib/RCS/acl_files.c,v $ * $Author: jtkohl $ * * Copyright (c) 1987,1988 by the Massachusetts Institute of Technology. *************** *** 14,20 **** #include #ifndef lint ! static char rcsid_acl_files_c[] = "$Header: acl_files.c,v 1.2 89/03/23 09:32:41 jtkohl Exp $"; #endif lint /*** Routines for manipulating access control list files ***/ --- 14,20 ---- #include #ifndef lint ! static char rcsid_acl_files_c[] = "$Id: acl_files.c,v 1.3 89/12/13 11:17:56 jtkohl Exp $"; #endif lint /*** Routines for manipulating access control list files ***/ *************** *** 389,395 **** i = acl_cache_next; acl_cache_next = (acl_cache_next + 1) % CACHED_ACLS; close(acl_cache[i].fd); ! if(acl_cache[i].acl) destroy_hash(acl_cache[i].acl); } /* Set up the acl */ --- 389,398 ---- i = acl_cache_next; acl_cache_next = (acl_cache_next + 1) % CACHED_ACLS; close(acl_cache[i].fd); ! if(acl_cache[i].acl) { ! destroy_hash(acl_cache[i].acl); ! acl_cache[i].acl = (struct hashtbl *) 0; ! } } /* Set up the acl */ *************** *** 399,406 **** acl_cache[i].acl = (struct hashtbl *) 0; got_it: ! /* See if the stat matches */ ! if(fstat(acl_cache[i].fd, &s) < 0) return(-1); if(acl_cache[i].acl == (struct hashtbl *) 0 || s.st_nlink != acl_cache[i].status.st_nlink || s.st_mtime != acl_cache[i].status.st_mtime --- 402,415 ---- acl_cache[i].acl = (struct hashtbl *) 0; got_it: ! /* ! * See if the stat matches ! * ! * Use stat(), not fstat(), as the file may have been re-created by ! * acl_add or acl_delete. If this happens, the old inode will have ! * no changes in the mod-time and the following test will fail. ! */ ! if(stat(acl_cache[i].filename, &s) < 0) return(-1); if(acl_cache[i].acl == (struct hashtbl *) 0 || s.st_nlink != acl_cache[i].status.st_nlink || s.st_mtime != acl_cache[i].status.st_mtime *************** *** 416,421 **** --- 425,431 ---- acl_canonicalize_principal(buf, canon); add_hash(acl_cache[i].acl, canon); } + fclose(f); acl_cache[i].status = s; } return(i); diff -rc patchlevel2/man/man1/znol.1 src/man/man1/znol.1 *** patchlevel2/man/man1/znol.1 Fri Oct 27 13:29:35 1989 --- src/man/man1/znol.1 Mon Oct 30 09:47:04 1989 *************** *** 1,6 **** .\" $Source: /afs/athena.mit.edu/astaff/project/zephyr/src/man/man1/RCS/znol.1,v $ .\" $Author: jtkohl $ ! .\" $Header: /afs/athena.mit.edu/astaff/project/zephyr/src/man/man1/RCS/znol.1,v 1.6 89/10/25 14:23:06 jtkohl Exp $ .\" .\" Copyright 1987,1988 by the Massachusetts Institute of Technology .\" All rights reserved. The file /usr/include/zephyr/mit-copyright.h --- 1,6 ---- .\" $Source: /afs/athena.mit.edu/astaff/project/zephyr/src/man/man1/RCS/znol.1,v $ .\" $Author: jtkohl $ ! .\" $Header: /afs/athena.mit.edu/astaff/project/zephyr/src/man/man1/RCS/znol.1,v 1.7 89/10/30 09:46:58 jtkohl Exp $ .\" .\" Copyright 1987,1988 by the Massachusetts Institute of Technology .\" All rights reserved. The file /usr/include/zephyr/mit-copyright.h *************** *** 46,51 **** --- 46,53 ---- The namelist file is taken to be .I file. If + .I file + is "-", then the standard input is used instead of a file. If .I file does not exist, an error message is printed, and .I znol diff -rc patchlevel2/man/man8/Imakefile src/man/man8/Imakefile *** patchlevel2/man/man8/Imakefile Thu Mar 23 11:54:40 1989 --- src/man/man8/Imakefile Fri Dec 15 09:08:30 1989 *************** *** 3,15 **** /**/# For copying and distribution information, see the file /**/# "mit-copyright.h". /**/# ! /**/# $Source: /mit/zephyr/src/man/man8/RCS/Imakefile,v $ /**/# $Author: jtkohl $ ! /**/# $Header: Imakefile,v 1.2 89/03/23 11:54:34 jtkohl Exp $ /**/# #define no_curdir_lint ! MAN8 = zhm.8 zephyrd.8 zstat.8 zinit.8 zpopnotify.8 zshutdown_notify.8 SRCDIR= ${SRCTOP}/man/man8 CODE= ${MAN8} Imakefile --- 3,15 ---- /**/# For copying and distribution information, see the file /**/# "mit-copyright.h". /**/# ! /**/# $Source: /afs/athena.mit.edu/astaff/project/zephyr/src/man/man8/RCS/Imakefile,v $ /**/# $Author: jtkohl $ ! /**/# $Header: /afs/athena.mit.edu/astaff/project/zephyr/src/man/man8/RCS/Imakefile,v 1.4 89/12/15 09:08:28 jtkohl Exp $ /**/# #define no_curdir_lint ! MAN8 = zhm.8 zephyrd.8 zstat.8 zpopnotify.8 zshutdown_notify.8 SRCDIR= ${SRCTOP}/man/man8 CODE= ${MAN8} Imakefile *************** *** 17,22 **** manpage(8,zhm.8) manpage(8,zephyrd.8) manpage(8,zstat.8) - manpage(8,zinit.8) manpage(8,zpopnotify.8) manpage(8,zshutdown_notify.8) --- 17,21 ---- diff -rc patchlevel2/server/Imakefile src/server/Imakefile *** patchlevel2/server/Imakefile Fri Oct 27 13:29:36 1989 --- src/server/Imakefile Mon Dec 18 13:25:11 1989 *************** *** 5,11 **** /**/# /**/# $Source: /afs/athena.mit.edu/astaff/project/zephyr/src/server/RCS/Imakefile,v $ /**/# $Author: jtkohl $ ! /**/# $Header: /afs/athena.mit.edu/astaff/project/zephyr/src/server/RCS/Imakefile,v 1.8 89/10/18 13:10:47 jtkohl Exp $ /**/# #if defined(DO_SYSLOG) && defined(SYSLOG_COMPAT42) --- 5,11 ---- /**/# /**/# $Source: /afs/athena.mit.edu/astaff/project/zephyr/src/server/RCS/Imakefile,v $ /**/# $Author: jtkohl $ ! /**/# $Header: /afs/athena.mit.edu/astaff/project/zephyr/src/server/RCS/Imakefile,v 1.9 89/12/18 13:25:04 jtkohl Exp $ /**/# #if defined(DO_SYSLOG) && defined(SYSLOG_COMPAT42) *************** *** 71,77 **** install:: -mkdir ${DESTDIR}${ACLDIR} ! -rm -f ${DESTDIR}${ACLDIR}/?* cp acldir/?* ${DESTDIR}${ACLDIR} ${INSTALLFILE} default.subscriptions ${DESTDIR}${ACLDIR}/default.subscriptions --- 71,77 ---- install:: -mkdir ${DESTDIR}${ACLDIR} ! -rm -f ${DESTDIR}${ACLDIR}/?*.acl cp acldir/?* ${DESTDIR}${ACLDIR} ${INSTALLFILE} default.subscriptions ${DESTDIR}${ACLDIR}/default.subscriptions diff -rc patchlevel2/server/class.c src/server/class.c *** patchlevel2/server/class.c Wed Oct 19 22:49:38 1988 --- src/server/class.c Thu Dec 14 08:42:18 1989 *************** *** 3,10 **** * * Created by: John T. Kohl * ! * $Source: /paris/source/4.3/athena.lib/zephyr/server/RCS/class.c,v $ ! * $Author: raeburn $ * * Copyright (c) 1987 by the Massachusetts Institute of Technology. * For copying and distribution information, see the file --- 3,10 ---- * * Created by: John T. Kohl * ! * $Source: /afs/athena.mit.edu/astaff/project/zephyr/src/server/RCS/class.c,v $ ! * $Author: jtkohl $ * * Copyright (c) 1987 by the Massachusetts Institute of Technology. * For copying and distribution information, see the file *************** *** 15,26 **** #ifndef lint #ifndef SABER ! static char rcsid_class_c[] = "$Header: class.c,v 1.11 88/10/19 22:49:18 raeburn Exp $"; #endif SABER #endif lint #include "zserver.h" /* includes zephyr/zephyr.h */ /* * Class manager subsystem. * --- 15,28 ---- #ifndef lint #ifndef SABER ! static char rcsid_class_c[] = "$Id: class.c,v 1.13 89/12/14 08:42:10 jtkohl Exp $"; #endif SABER #endif lint #include "zserver.h" /* includes zephyr/zephyr.h */ + #include /* for isupper, tolower */ + /* * Class manager subsystem. * *************** *** 128,134 **** } else { for (ptr2 = ptr->q_forw; ptr2 != ptr; ptr2 = ptr2->q_forw) /* walk down the list, looking for a match */ ! if (!strcmp(ptr2->zct_classname, class_buf)) return(insert_client(ptr2, client)); /* fell off the end, no match */ --- 130,136 ---- } else { for (ptr2 = ptr->q_forw; ptr2 != ptr; ptr2 = ptr2->q_forw) /* walk down the list, looking for a match */ ! if (!strcasecmp(ptr2->zct_classname, class_buf)) return(insert_client(ptr2, client)); /* fell off the end, no match */ *************** *** 157,163 **** for (ptr2 = ptr->q_forw; ptr2 != ptr; ptr2 = ptr2->q_forw) { /* walk down the list, looking for a match */ ! if (!strcmp(ptr2->zct_classname, class_buf)) { if ((retval = remove_client(ptr2, client)) == EMPTY_CLASS) { zdbug((LOG_DEBUG,"empty class")); /* Don't free up restricted classes. */ --- 159,165 ---- for (ptr2 = ptr->q_forw; ptr2 != ptr; ptr2 = ptr2->q_forw) { /* walk down the list, looking for a match */ ! if (!strcasecmp(ptr2->zct_classname, class_buf)) { if ((retval = remove_client(ptr2, client)) == EMPTY_CLASS) { zdbug((LOG_DEBUG,"empty class")); /* Don't free up restricted classes. */ *************** *** 199,205 **** /* go search the list for the class */ for (ptr2 = ptr->q_forw; ptr2 != ptr; ptr2 = ptr2->q_forw) { /* walk down the list, looking for a match */ ! if (!strcmp(ptr2->zct_classname, class_buf)) { list = ptr2->zct_clientlist; break; } --- 201,207 ---- /* go search the list for the class */ for (ptr2 = ptr->q_forw; ptr2 != ptr; ptr2 = ptr2->q_forw) { /* walk down the list, looking for a match */ ! if (!strcasecmp(ptr2->zct_classname, class_buf)) { list = ptr2->zct_clientlist; break; } *************** *** 212,218 **** /* go search the list for the class */ for (ptr2 = ptr->q_forw; ptr2 != ptr; ptr2 = ptr2->q_forw) { /* walk down the list, looking for a match */ ! if (!strcmp(ptr2->zct_classname, class_buf)) { wc_list = ptr2->zct_clientlist; break; } --- 214,220 ---- /* go search the list for the class */ for (ptr2 = ptr->q_forw; ptr2 != ptr; ptr2 = ptr2->q_forw) { /* walk down the list, looking for a match */ ! if (!strcasecmp(ptr2->zct_classname, class_buf)) { wc_list = ptr2->zct_clientlist; break; } *************** *** 274,280 **** class_is_control(notice) ZNotice_t *notice; { ! return(!strcmp(notice->z_class, ZEPHYR_CTL_CLASS)); } int --- 276,282 ---- class_is_control(notice) ZNotice_t *notice; { ! return(!strcasecmp(notice->z_class, ZEPHYR_CTL_CLASS)); } int *************** *** 281,287 **** class_is_admin(notice) ZNotice_t *notice; { ! return(!strcmp(notice->z_class, ZEPHYR_ADMIN_CLASS)); } int --- 283,289 ---- class_is_admin(notice) ZNotice_t *notice; { ! return(!strcasecmp(notice->z_class, ZEPHYR_ADMIN_CLASS)); } int *************** *** 288,294 **** class_is_hm(notice) ZNotice_t *notice; { ! return(!strcmp(notice->z_class, HM_CTL_CLASS)); } int --- 290,296 ---- class_is_hm(notice) ZNotice_t *notice; { ! return(!strcasecmp(notice->z_class, HM_CTL_CLASS)); } int *************** *** 295,301 **** class_is_ulogin(notice) ZNotice_t *notice; { ! return(!strcmp(notice->z_class, LOGIN_CLASS)); } int --- 297,303 ---- class_is_ulogin(notice) ZNotice_t *notice; { ! return(!strcasecmp(notice->z_class, LOGIN_CLASS)); } int *************** *** 302,308 **** class_is_ulocate(notice) ZNotice_t *notice; { ! return(!strcmp(notice->z_class, LOCATE_CLASS)); } /* --- 304,310 ---- class_is_ulocate(notice) ZNotice_t *notice; { ! return(!strcasecmp(notice->z_class, LOCATE_CLASS)); } /* *************** *** 322,328 **** /* walk down the list, looking for a match */ for (ptr2 = ptr->q_forw; ptr2 != ptr; ptr2 = ptr2->q_forw) ! if (!strcmp(ptr2->zct_classname, class)) return(ptr2->zct_acl); /* fell off the end, no match ==> not restricted */ --- 324,330 ---- /* walk down the list, looking for a match */ for (ptr2 = ptr->q_forw; ptr2 != ptr; ptr2 = ptr2->q_forw) ! if (!strcasecmp(ptr2->zct_classname, class)) return(ptr2->zct_acl); /* fell off the end, no match ==> not restricted */ *************** *** 349,355 **** return(ZSRV_NOCLASS); for (ptr2 = ptr->q_forw; ptr2 != ptr; ptr2 = ptr2->q_forw) /* walk down the list, looking for a match */ ! if (!strcmp(ptr2->zct_classname, class)) { if (ptr2->zct_acl) return(ZSRV_CLASSRESTRICTED); ptr2->zct_acl = acl; --- 351,357 ---- return(ZSRV_NOCLASS); for (ptr2 = ptr->q_forw; ptr2 != ptr; ptr2 = ptr2->q_forw) /* walk down the list, looking for a match */ ! if (!strcasecmp(ptr2->zct_classname, class)) { if (ptr2->zct_acl) return(ZSRV_CLASSRESTRICTED); ptr2->zct_acl = acl; *************** *** 397,403 **** } else { for (ptr2 = ptr->q_forw; ptr2 != ptr; ptr2 = ptr2->q_forw) /* walk down the list, looking for a match */ ! if (!strcmp(ptr2->zct_classname, class)) return(ZSRV_CLASSXISTS); if (!(ptr2 = class_alloc(class))) return(ENOMEM); --- 399,405 ---- } else { for (ptr2 = ptr->q_forw; ptr2 != ptr; ptr2 = ptr2->q_forw) /* walk down the list, looking for a match */ ! if (!strcasecmp(ptr2->zct_classname, class)) return(ZSRV_CLASSXISTS); if (!(ptr2 = class_alloc(class))) return(ENOMEM); *************** *** 418,425 **** register unsigned int hval = 0; register unsigned char *cp = (unsigned char *) string; ! while (*cp) hval = (hval + (*cp++) * HASHMUL) % HASHSIZE; return(hval); } --- 420,432 ---- register unsigned int hval = 0; register unsigned char *cp = (unsigned char *) string; ! while (*cp) { ! if (isupper(*cp)) { ! hval = (hval + (tolower(*cp)) * HASHMUL) % HASHSIZE; ! cp++; ! } else hval = (hval + (*cp++) * HASHMUL) % HASHSIZE; + } return(hval); } diff -rc patchlevel2/server/dispatch.c src/server/dispatch.c *** patchlevel2/server/dispatch.c Thu May 4 17:36:51 1989 --- src/server/dispatch.c Wed Dec 13 10:31:59 1989 *************** *** 3,9 **** * * Created by: John T. Kohl * ! * $Source: /mit/zephyr/src/server/RCS/dispatch.c,v $ * $Author: jtkohl $ * * Copyright (c) 1987 by the Massachusetts Institute of Technology. --- 3,9 ---- * * Created by: John T. Kohl * ! * $Source: /afs/athena.mit.edu/astaff/project/zephyr/src/server/RCS/dispatch.c,v $ * $Author: jtkohl $ * * Copyright (c) 1987 by the Massachusetts Institute of Technology. *************** *** 15,21 **** #ifndef lint #ifndef SABER ! static char rcsid_dispatch_c[] = "$Header: dispatch.c,v 1.29 89/05/04 17:36:32 jtkohl Exp $"; #endif SABER #endif lint --- 15,21 ---- #ifndef lint #ifndef SABER ! static char rcsid_dispatch_c[] = "$Id: dispatch.c,v 1.32 89/12/13 10:31:44 jtkohl Exp $"; #endif SABER #endif lint *************** *** 171,177 **** break; } if (whoisit.sin_port != hm_port && ! strcmp(new_notice.z_class,ZEPHYR_ADMIN_CLASS) && whoisit.sin_port != sock_sin.sin_port && new_notice.z_kind != CLIENTACK) { syslog(LOG_ERR, --- 171,177 ---- break; } if (whoisit.sin_port != hm_port && ! strcasecmp(new_notice.z_class,ZEPHYR_ADMIN_CLASS) && whoisit.sin_port != sock_sin.sin_port && new_notice.z_kind != CLIENTACK) { syslog(LOG_ERR, *************** *** 302,307 **** --- 302,317 ---- return; } } + if (bcmp(¬ice->z_sender_addr.s_addr, &who->sin_addr.s_addr, + sizeof(notice->z_sender_addr.s_addr))) { + /* someone is playing games... */ + /* inet_ntoa returns pointer to static area */ + /* max size is 255.255.255.255 */ + char buffer[16]; + (void) strcpy(buffer, inet_ntoa(who->sin_addr)); + syslog(LOG_WARNING, "sendit addr mismatch: claimed %s, real %s", + inet_ntoa(notice->z_sender_addr), buffer); + } if ((clientlist = subscr_match_list(notice))) { for (ptr = clientlist->q_forw; ptr != clientlist; *************** *** 487,493 **** return; } if ((retval = ZSendPacket(noticepack, packlen, 0)) != ZERR_NONE) { ! syslog(LOG_WARNING, "xmit xmit: %s", error_message(retval)); xfree(noticepack); return; } --- 497,505 ---- return; } if ((retval = ZSendPacket(noticepack, packlen, 0)) != ZERR_NONE) { ! syslog(LOG_WARNING, "xmit xmit: (%s/%d) %s", ! inet_ntoa(dest->sin_addr), ntohs(dest->sin_port), ! error_message(retval)); xfree(noticepack); return; } *************** *** 719,725 **** * CLIENT_CANCELSUB: "" */ ! if (!strcmp(notice->z_class_inst, ZEPHYR_CTL_HM)) return(hostm_dispatch(notice, auth, who, server)); else if (!strcmp(opcode, CLIENT_GIMMESUBS) || !strcmp(opcode, CLIENT_GIMMEDEFS)) { --- 731,737 ---- * CLIENT_CANCELSUB: "" */ ! if (!strcasecmp(notice->z_class_inst, ZEPHYR_CTL_HM)) return(hostm_dispatch(notice, auth, who, server)); else if (!strcmp(opcode, CLIENT_GIMMESUBS) || !strcmp(opcode, CLIENT_GIMMEDEFS)) { diff -rc patchlevel2/server/server.c src/server/server.c *** patchlevel2/server/server.c Fri Oct 27 13:29:38 1989 --- src/server/server.c Thu Dec 14 08:36:39 1989 *************** *** 15,21 **** #ifndef lint #ifndef SABER ! static char rcsid_server_c[] = "$Id: server.c,v 1.41 89/10/27 11:33:34 jtkohl Exp $"; #endif SABER #endif lint --- 15,21 ---- #ifndef lint #ifndef SABER ! static char rcsid_server_c[] = "$Id: server.c,v 1.43 89/12/14 08:36:27 jtkohl Exp $"; #endif SABER #endif lint *************** *** 710,726 **** if ((status = extract_addr(notice, &who)) != ZERR_NONE) return(status); if (!(host = hostm_find_host(&who.sin_addr))) { ! syslog(LOG_WARNING, "recover_clt h not found, from %s", ! inet_ntoa(server->zs_addr.sin_addr)); ! syslog(LOG_WARNING, "%s", inet_ntoa(who.sin_addr)); return(ZERR_NONE); /* XXX */ } if (host->zh_locked) return(ZSRV_REQUEUE); if (!(client = client_which_client(&who, notice))) { ! syslog(LOG_WARNING, "recover_clt not found, from %s", ! inet_ntoa(server->zs_addr.sin_addr)); ! syslog(LOG_WARNING, "%s/%d",inet_ntoa(who.sin_addr), ntohs(who.sin_port)); return(ZERR_NONE); /* XXX */ } --- 710,728 ---- if ((status = extract_addr(notice, &who)) != ZERR_NONE) return(status); if (!(host = hostm_find_host(&who.sin_addr))) { ! char buf[16]; /* long enough for 255.255.255.255\0 */ ! (void) strncpy(buf, inet_ntoa(who.sin_addr), sizeof(buf)); ! syslog(LOG_WARNING, "recover_clt h not found, from %s for %s", ! inet_ntoa(server->zs_addr.sin_addr), buf); return(ZERR_NONE); /* XXX */ } if (host->zh_locked) return(ZSRV_REQUEUE); if (!(client = client_which_client(&who, notice))) { ! char buf[16]; /* long enough for 255.255.255.255\0 */ ! (void) strncpy(buf, inet_ntoa(who.sin_addr), sizeof(buf)); ! syslog(LOG_WARNING, "recover_clt not found, from %s for %s/%d", ! inet_ntoa(server->zs_addr.sin_addr), buf, ntohs(who.sin_port)); return(ZERR_NONE); /* XXX */ } *************** *** 1122,1133 **** register char **list; { register int i; if (!nhosts) /* nothing allocated */ return; for (; *list; list++) xfree(*list); ! xfree(list); return; } #endif !HESIOD --- 1124,1136 ---- register char **list; { register int i; + char **orig_list = list; if (!nhosts) /* nothing allocated */ return; for (; *list; list++) xfree(*list); ! xfree(orig_list); return; } #endif !HESIOD diff -rc patchlevel2/server/subscr.c src/server/subscr.c *** patchlevel2/server/subscr.c Fri Oct 27 13:29:39 1989 --- src/server/subscr.c Wed Dec 13 10:32:27 1989 *************** *** 15,21 **** #ifndef lint #ifndef SABER ! static char rcsid_subscr_c[] = "$Header: /afs/athena.mit.edu/astaff/project/zephyr/src/server/RCS/subscr.c,v 1.36 89/10/26 14:18:28 jtkohl Exp $"; #endif SABER #endif lint --- 15,21 ---- #ifndef lint #ifndef SABER ! static char rcsid_subscr_c[] = "$Id: subscr.c,v 1.37 89/12/13 10:32:14 jtkohl Exp $"; #endif SABER #endif lint *************** *** 173,179 **** subs2 != who->zct_subs; subs2 = subs2->q_forw) { /* for each existing subscription */ ! relation = strcmp(subs->zst_class, subs2->zst_class); if (relation > 0) /* we have passed the last possible one */ break; --- 173,179 ---- subs2 != who->zct_subs; subs2 = subs2->q_forw) { /* for each existing subscription */ ! relation = strcasecmp(subs->zst_class, subs2->zst_class); if (relation > 0) /* we have passed the last possible one */ break; *************** *** 372,378 **** subs2 != who->zct_subs;) { /* for each existing subscription */ /* is this what we are canceling? */ ! relation = strcmp(subs4->zst_class, subs2->zst_class); if (relation > 0) /* we have passed the last possible one */ break; --- 372,378 ---- subs2 != who->zct_subs;) { /* for each existing subscription */ /* is this what we are canceling? */ ! relation = strcasecmp(subs4->zst_class, subs2->zst_class); if (relation > 0) /* we have passed the last possible one */ break; *************** *** 1086,1098 **** subs != client->zct_subs; subs = subs->q_forw) { /* for each subscription, do matching */ ! relation = strcmp(notice->z_class, subs->zst_class); if (relation > 0) /* past the last possible one */ return(0); if (relation < 0) continue; /* no match */ if (strcmp(subs->zst_classinst, WILDCARD_INSTANCE) && ! strcmp(subs->zst_classinst, notice->z_class_inst)) continue; if (strcmp(notice->z_recipient, subs->zst_recipient)) continue; --- 1086,1098 ---- subs != client->zct_subs; subs = subs->q_forw) { /* for each subscription, do matching */ ! relation = strcasecmp(notice->z_class, subs->zst_class); if (relation > 0) /* past the last possible one */ return(0); if (relation < 0) continue; /* no match */ if (strcmp(subs->zst_classinst, WILDCARD_INSTANCE) && ! strcasecmp(subs->zst_classinst, notice->z_class_inst)) continue; if (strcmp(notice->z_recipient, subs->zst_recipient)) continue; *************** *** 1143,1149 **** subscr_equiv(s1, s2) register ZSubscr_t *s1, *s2; { ! if (strcmp(s1->zst_classinst,s2->zst_classinst)) return(0); if (strcmp(s1->zst_recipient,s2->zst_recipient)) return(0); --- 1143,1149 ---- subscr_equiv(s1, s2) register ZSubscr_t *s1, *s2; { ! if (strcasecmp(s1->zst_classinst,s2->zst_classinst)) return(0); if (strcmp(s1->zst_recipient,s2->zst_recipient)) return(0); diff -rc patchlevel2/server/uloc.c src/server/uloc.c *** patchlevel2/server/uloc.c Fri Oct 27 13:29:40 1989 --- src/server/uloc.c Wed Dec 13 10:29:58 1989 *************** *** 14,20 **** #include #ifndef lint ! static char rcsid_uloc_c[] = "$Header: /afs/athena.mit.edu/astaff/project/zephyr/src/server/RCS/uloc.c,v 1.33 89/10/26 14:19:13 jtkohl Exp $"; #endif lint #include "zserver.h" --- 14,20 ---- #include #ifndef lint ! static char rcsid_uloc_c[] = "$Id: uloc.c,v 1.34 89/12/13 10:29:46 jtkohl Exp $"; #endif lint #include "zserver.h" *************** *** 895,901 **** ul_equiv(l1, l2) register ZLocation_t *l1, *l2; { ! if (strcmp(l1->zlt_machine, l2->zlt_machine)) return(0); if (strcmp(l1->zlt_tty, l2->zlt_tty)) return(0); --- 895,901 ---- ul_equiv(l1, l2) register ZLocation_t *l1, *l2; { ! if (strcasecmp(l1->zlt_machine, l2->zlt_machine)) return(0); if (strcmp(l1->zlt_tty, l2->zlt_tty)) return(0); *************** *** 1099,1105 **** !strcmp(locations[idx].zlt_user, loc2.zlt_user)) { /* change exposure and owner for each loc on that host */ ! if (!strcmp(locations[idx].zlt_machine, loc2.zlt_machine)) { notfound = 0; locations[idx].zlt_exposure = exposure; locations[idx].zlt_port = notice->z_port; --- 1099,1105 ---- !strcmp(locations[idx].zlt_user, loc2.zlt_user)) { /* change exposure and owner for each loc on that host */ ! if (!strcasecmp(locations[idx].zlt_machine, loc2.zlt_machine)) { notfound = 0; locations[idx].zlt_exposure = exposure; locations[idx].zlt_port = notice->z_port; diff -rc patchlevel2/server/version.c src/server/version.c *** patchlevel2/server/version.c Fri Oct 27 13:29:41 1989 --- src/server/version.c Wed Dec 13 10:33:22 1989 *************** *** 14,26 **** #include #ifdef DEBUG ! char version[] = "Zephyr Server (DEBUG) $Revision: 3.15 $"; #else ! char version[] = "Zephyr Server $Revision: 3.15 $"; #endif DEBUG #ifndef lint #ifndef SABER ! static char rcsid_version_c[] = "$Id: version.c,v 3.15 89/10/26 14:20:07 jtkohl Exp $"; char copyright[] = "Copyright (c) 1987,1988,1989 Massachusetts Institute of Technology.\n"; #ifdef CONCURRENT char concurrent[] = "Brain-dump concurrency enabled"; --- 14,26 ---- #include #ifdef DEBUG ! char version[] = "Zephyr Server (DEBUG) $Revision: 3.19 $"; #else ! char version[] = "Zephyr Server $Revision: 3.19 $"; #endif DEBUG #ifndef lint #ifndef SABER ! static char rcsid_version_c[] = "$Id: version.c,v 3.19 89/12/13 10:32:54 jtkohl Exp $"; char copyright[] = "Copyright (c) 1987,1988,1989 Massachusetts Institute of Technology.\n"; #ifdef CONCURRENT char concurrent[] = "Brain-dump concurrency enabled"; diff -rc patchlevel2/zhm/Imakefile src/zhm/Imakefile *** patchlevel2/zhm/Imakefile Thu May 4 21:14:33 1989 --- src/zhm/Imakefile Mon Dec 18 13:20:04 1989 *************** *** 3,11 **** /**/# For copying and distribution information, see the file /**/# "mit-copyright.h". /**/# ! /**/# $Source: /mit/zephyr/src/zhm/RCS/Imakefile,v $ /**/# $Author: jtkohl $ ! /**/# $Header: Imakefile,v 1.6 89/05/04 21:14:25 jtkohl Exp $ /**/# #if defined(DO_SYSLOG) && defined(SYSLOG_COMPAT42) --- 3,11 ---- /**/# For copying and distribution information, see the file /**/# "mit-copyright.h". /**/# ! /**/# $Source: /afs/athena.mit.edu/astaff/project/zephyr/src/zhm/RCS/Imakefile,v $ /**/# $Author: jtkohl $ ! /**/# $Header: /afs/athena.mit.edu/astaff/project/zephyr/src/zhm/RCS/Imakefile,v 1.7 89/12/18 13:19:55 jtkohl Exp $ /**/# #if defined(DO_SYSLOG) && defined(SYSLOG_COMPAT42) *************** *** 22,27 **** --- 22,34 ---- SRCDIR= ${SRCTOP}/zhm CODE= ${HDRS} ${SRCS} Imakefile + + /* + * The pathname for the pid file. + */ + ZHMPIDFILE=$(ETCATHDIR)/zhm.pid + + DEFINES=-DPIDFILE=\"$(ZHMPIDFILE)\" normal_obj_rule() diff -rc patchlevel2/zhm/zhm.c src/zhm/zhm.c *** patchlevel2/zhm/zhm.c Fri Oct 27 13:29:41 1989 --- src/zhm/zhm.c Mon Dec 18 13:20:20 1989 *************** *** 13,19 **** #include "zhm.h" ! static char rcsid_hm_c[] = "$Id: zhm.c,v 1.42 89/10/27 10:55:13 jtkohl Exp $"; #include #include --- 13,19 ---- #include "zhm.h" ! static char rcsid_hm_c[] = "$Id: zhm.c,v 1.43 89/12/18 13:20:06 jtkohl Exp $"; #include #include *************** *** 29,34 **** --- 29,38 ---- #include #endif HESIOD + #ifndef PIDFILE + #define PIDFILE "/etc/athena/zhm.pid" + #endif /* PIDFILE */ + int hmdebug = 0, rebootflag = 0, errflg = 0, dieflag = 0, inetd = 0, oldpid; int no_server = 1, nservchang = 0, nserv = 0, nclt = 0; int booting = 1, timeout_type = 0, deactivated = 1; *************** *** 42,48 **** struct hostent *hp; char **clust_info; char hostname[MAXHOSTNAMELEN], loopback[4]; ! char *PidFile = "/etc/athena/zhm.pid"; extern int errno; extern char *index(), *strcpy(), *sbrk(); --- 46,52 ---- struct hostent *hp; char **clust_info; char hostname[MAXHOSTNAMELEN], loopback[4]; ! char *PidFile = PIDFILE; extern int errno; extern char *index(), *strcpy(), *sbrk();