[comp.protocols.appletalk] CAP 6.0 patches 22, 23 & 24

djh@cs.mu.oz.au (David Hornsby) (05/29/91)

The enclosed shar file contains CAP 6.0 patches 22 - 24, a following
article contains CAP 6.0 patch 25. These patches are also available
from rutgers.edu (soon) and munnari.OZ.AU (now).

Patches 22, 24 and 25 are feature additions, patch 23 is a bug fix.

Patch 22: allow AUFS login name to be real name or login name
	This patch lets you use a real Chooser name without having
	to type in your login name for each AUFS connection. The
	code tries to match strings from the gcos field of the
	password file. EG: the real! name "Royal Ugly Dude" will
	be accepted as an AUFS login if that string appears in the
	password file entry for user name "rdude". The substrings
	"Royal", "Ugly" and "Dude" also work if they happen to be
	the first occurrences in the password file. Naturally you
	still need the correct password. Needs to be enabled at
	Configure time (PERMISSIVE_USER_NAME)

Patch 23: fix problems with SIZESERVER code for AUFS vols. & 4.2BSD
	Seems it never did work ...

Patch 24: add ULTRIX enhanced security for AUFS
	Uses the ULTRIX authorization library (if "*" in password file).
	Needs to be enabled at Configure time (ULTRIX_SECURITY)

Patch 25: add Phase 2 support for SUNs
	See the next article for more details.

- David.

#! /bin/sh
# This is a shell archive.  Remove anything before this line, then unpack
# it by saving it into a file and typing "sh file".  To overwrite existing
# files, type "sh file -c".  You can also feed this as standard input via
# unshar, or by typing "sh <file", e.g..  If this archive is complete, you
# will see the following message at the end:
#		"End of shell archive."
# Contents:  cap60.patch022 cap60.patch023 cap60.patch024
# Wrapped by djh@munnari.OZ.AU on Thu May 30 01:31:40 1991
PATH=/bin:/usr/bin:/usr/ucb ; export PATH
if test -f 'cap60.patch022' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'cap60.patch022'\"
else
echo shar: Extracting \"'cap60.patch022'\" \(5935 characters\)
sed "s/^X//" >'cap60.patch022' <<'END_OF_FILE'
XPatch #:	22
XType:		operational change
XPriority:	none
XModification:	allow AUFS login name to be real name or login name
XSubmitted:	Jean-Luc Mounier <mounier@masi.ibp.fr>
XArchived:	munnari.OZ.AU	mac/cap.patches/cap60.patch022
XSummary:	try to match supplied name against password gcos field
XFile:		cap60/applications/aufs/afpos.c
XFile:		cap60/Configure
X
X*** applications/aufs/afpos.c.orig	Tue May 28 20:33:37 1991
X--- applications/aufs/afpos.c		Tue May 28 20:35:00 1991
X***************
X*** 1,7 ****
X  /*
X!  * $Author: djh $ $Date: 1991/05/20 12:54:11 $
X!  * $Header: /mac/src/cap60/applications/aufs/RCS/afpos.c,v 2.5 1991/05/20 12:54:11 djh Exp djh $
X!  * $Revision: 2.5 $
X   */
X  
X  /*
X--- 1,7 ----
X  /*
X!  * $Author: djh $ $Date: 1991/05/28 10:34:46 $
X!  * $Header: /local/mulga/mac/src/cap60/applications/aufs/RCS/afpos.c,v 2.7 1991/05/28 10:34:46 djh Exp djh $
X!  * $Revision: 2.7 $
X   */
X  
X  /*
X***************
X*** 17,22 ****
X--- 17,24 ----
X   *  March 1987     Schilit	Created.
X   *  March 1988     CCKIM	cleanup
X   *  December 1990  djh 		tidy up for AFP 2.0
X+  *  May   1991     ber,jlm	accept a part of the gcos or login name
X+  *                              (PERMISSIVE_USER_NAME)
X   *
X   */
X  
X***************
X*** 49,54 ****
X--- 51,58 ----
X   *   how much is free and we need both
X   *  USESTATFS - statfs is the Sun NFS solution to volume information.
X   *
X+  *  PERMISSIVE_USER_NAME - let the Chooser name be from the gcos field
X+  *
X   *  aux has a couple of "ifdefs".
X   *   - one to set full BSD compatibility
X   *   - one to protect against rename("file1","file1"): it will
X***************
X*** 166,171 ****
X--- 170,179 ----
X  #include "sizeserver.h"
X  #endif SIZESERVER
X  
X+ #ifdef PERMISSIVE_USER_NAME
X+ #include <ctype.h>
X+ #endif PERMISSIVE_USER_NAME
X+ 
X  #ifdef MAXBSIZE
X  # define IOBSIZE MAXBSIZE	/* set to max buf entry size by if there */
X  #else
X***************
X*** 2754,2759 ****
X--- 2762,2862 ----
X    return(aeParamErr);
X  }
X  
X+ #ifdef PERMISSIVE_USER_NAME
X+ /*
X+  * allow the specified user name to be
X+  * from the gcos field of the passwd file
X+  * IE: Chooser names don't have to be login names
X+  */
X+ static struct passwd *
X+ getpwgnam(nam)
X+ char *nam;
X+ {
X+   char *ptm;
X+   char nom[40];
X+   char nomi[200];
X+   struct passwd *pw;
X+   int match, i, j;
X+ 
X+   /* map to lower case, translate some special characters */
X+ 
X+   for (i = 0 ; nam[i] ; i++) {
X+     switch (nam[i]) {
X+       case 0x8d:
X+ 	nom[i] = 'c';
X+ 	break;
X+       case 0x8e:
X+       case 0x8f:
X+       case 0x90:
X+       case 0x91:
X+ 	nom[i] = 'e';
X+ 	break;
X+       case 0x92:
X+       case 0x93:
X+       case 0x94:
X+       case 0x95:
X+ 	nom[i] = 'i';
X+ 	break;
X+       case 0x96:
X+ 	nom[i] = 'n';
X+ 	break;
X+       case 0x97:
X+       case 0x98:
X+       case 0x99:
X+       case 0x9a:
X+       case 0x9b:
X+ 	nom[i] = 'o';
X+ 	break;
X+       case 0x9c:
X+       case 0x9d:
X+       case 0x9e:
X+       case 0x9f:
X+ 	nom[i] = 'u';
X+ 	break;
X+       default:
X+ 	if (isupper(nam[i]))
X+ 	  nom[i] = tolower(nam[i]);
X+ 	else
X+ 	  nom[i] = nam[i];
X+ 	break;
X+     }
X+   }
X+   nom[i] = '\0';
X+   setpwent();
X+   while ((pw = getpwent()) != 0) {
X+     ptm = pw->pw_gecos;
X+     for (i = 0 ; *ptm ; ptm++, i++) {
X+       if (isupper(*ptm))
X+ 	nomi[i] = tolower(*ptm);
X+       else
X+ 	nomi[i] = *ptm;
X+     }
X+     nomi[i] = '\0';
X+     for (match=i=j=0 ; ((nom[j] != 0) && (nomi[i] != 0)) ; ) {
X+       if (nomi[i] == nom[j]) {
X+ 	if (match == 0)
X+ 	  match = i+1;
X+ 	j++;
X+ 	i++;
X+       } else {
X+ 	if (match != 0) {
X+ 	  i = match;
X+ 	  match = 0;
X+ 	  j = 0;
X+ 	} else
X+ 	  i++;
X+       }
X+     }
X+     if (nom[j] == '\0') { /* found it */
X+       endpwent();
X+       return(pw);
X+     }
X+   }
X+   endpwent();
X+   return(NILPWD);
X+ }
X+ #endif PERMISSIVE_USER_NAME
X+ 
X  export OSErr
X  OSLogin(nam,pwd,pwdother,uam)
X  char *nam,*pwd;
X***************
X*** 2838,2843 ****
X--- 2941,2952 ----
X    case UAM_CLEAR:
X      if (!apasswdfile) {
X        p = (struct passwd *) getpwnam(nam); /* user name */
X+ #ifdef PERMISSIVE_USER_NAME
X+       if (p == NILPWD) {
X+ 	if ((p = (struct passwd *) getpwgnam(nam)) != NILPWD) /* gcos name */
X+ 	  logit(0, "Login: mapping \"%s\" to login name %s", nam, p->pw_name);
X+       }
X+ #endif PERMISSIVE_USER_NAME
X        if (p == NILPWD) {
X  	logit(0,"Login: Unknown user %s",nam);
X  	return(aeParamErr);			/* unknown user */
X*** Configure.orig	Tue May 28 16:33:13 1991
X--- Configure		Tue May 28 16:28:38 1991
X***************
X*** 1,7 ****
X  #!/bin/sh
X! # $Author: djh $ $Date: 1991/05/20 08:31:35 $
X! # $Header: /mac/src/cap60/RCS/Configure,v 2.5 1991/05/20 08:31:35 djh Exp djh $
X! # $Revision: 2.5 $
X  # CAP configuration shell script.  This ain't perfect, but it's a start.
X  # Execute with /bin/sh Configure if your system won't run it (ksh is okay too)
X  # 
X--- 1,7 ----
X  #!/bin/sh
X! # $Author: djh $ $Date: 1991/05/28 06:10:31 $
X! # $Header: /mac/src/cap60/RCS/Configure,v 2.7 1991/05/28 06:10:31 djh Exp $
X! # $Revision: 2.7 $
X  # CAP configuration shell script.  This ain't perfect, but it's a start.
X  # Execute with /bin/sh Configure if your system won't run it (ksh is okay too)
X  # 
X***************
X*** 435,440 ****
X--- 435,443 ----
X  #
X  # + USE_HOST_ICON provides automatic aufs ICON selection on supported hosts
X  # define(`specialcflags',concat(specialcflags,` -DUSE_HOST_ICON'))
X+ #
X+ # + PERMISSIVE_USER_NAME allows AUFS users to have their real name in Chooser
X+ # define(`specialcflags',concat(specialcflags,` -DPERMISSIVE_USER_NAME'))
X  #
X  EOT0
X  result=0
X*** README.orig		Tue May 28 16:17:42 1991
X--- README		Tue May 28 16:18:37 1991
X***************
X*** 3,9 ****
X  	       (For use with AppleTalk/Ethernet bridge)
X  
X  	o RELEASE NOTES
X! 	o CAP Distribution 6.0, Patch Level 21, May 1991
X  
X  Introduction
X  ------------
X--- 3,9 ----
X  	       (For use with AppleTalk/Ethernet bridge)
X  
X  	o RELEASE NOTES
X! 	o CAP Distribution 6.0, Patch Level 22, May 1991
X  
X  Introduction
X  ------------
END_OF_FILE
if test 5935 -ne `wc -c <'cap60.patch022'`; then
    echo shar: \"'cap60.patch022'\" unpacked with wrong size!
fi
# end of 'cap60.patch022'
fi
if test -f 'cap60.patch023' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'cap60.patch023'\"
else
echo shar: Extracting \"'cap60.patch023'\" \(6234 characters\)
sed "s/^X//" >'cap60.patch023' <<'END_OF_FILE'
XPatch #:	23
XType:		bug fix
XPriority:	low
XAffects:	sites trying to use SIZESERVER code
XReported:	Aloke Majumdar <majumdar@cs.yale.edu>
XArchived:	munnari.OZ.AU	mac/cap.patches/cap60.patch023
XSummary:	fix stupidity in code and makefile
XFile:		cap60/applications/aufs/afpos.c
XFile:		cap60/applications/aufs/sizeserver.c
XFile:		cap60/applications/aufs/Makefile.m4
X
X*** applications/aufs/afpos.c.orig	Tue May 28 20:35:00 1991
X--- applications/aufs/afpos.c		Tue May 28 20:41:18 1991
X***************
X*** 1,7 ****
X  /*
X!  * $Author: djh $ $Date: 1991/05/28 10:34:46 $
X!  * $Header: /local/mulga/mac/src/cap60/applications/aufs/RCS/afpos.c,v 2.7 1991/05/28 10:34:46 djh Exp djh $
X!  * $Revision: 2.7 $
X   */
X  
X  /*
X--- 1,7 ----
X  /*
X!  * $Author: djh $ $Date: 1991/05/28 10:41:05 $
X!  * $Header: /local/mulga/mac/src/cap60/applications/aufs/RCS/afpos.c,v 2.8 1991/05/28 10:41:05 djh Exp djh $
X!  * $Revision: 2.8 $
X   */
X  
X  /*
X***************
X*** 163,168 ****
X--- 163,169 ----
X  #include "afppasswd.h"			/* in case we are using privates */
X  #include "afposncs.h"
X  #include "afpgc.h"
X+ 
X  #ifdef SIZESERVER
X  #include <setjmp.h>
X  #include <signal.h>
X***************
X*** 322,327 ****
X--- 323,329 ----
X  private OSErr ItoEErr();
X  private int filemode();
X  private char *syserr();
X+ 
X  #ifdef SIZESERVER
X  private void getvolsize();
X  #endif SIZESERVER
X***************
X*** 2125,2130 ****
X--- 2127,2137 ----
X  }
X  
X  #ifdef SIZESERVER
X+ 
X+ #ifndef SIZESERVER_PATH
X+ #define SIZESERVER_PATH		"/usr/local/cap/sizeserver"
X+ #endif  SIZESERVER_PATH
X+ 
X  static jmp_buf gotpipe;
X  
X  private void
X***************
X*** 2164,2170 ****
X  				dup2(socket[1], 0);
X  				close(socket[1]);
X  			}
X! 			execl(SIZESERVER, SIZESERVER, 0);
X  			_exit(1);
X  		}
X  		close(socket[1]);
X--- 2171,2177 ----
X  				dup2(socket[1], 0);
X  				close(socket[1]);
X  			}
X! 			execl(SIZESERVER_PATH, "sizeserver", 0);
X  			_exit(1);
X  		}
X  		close(socket[1]);
X*** applications/aufs/sizeserver.c.orig	Thu Mar 14 15:30:24 1991
X--- applications/aufs/sizeserver.c	Tue May 28 20:13:05 1991
X***************
X*** 5,18 ****
X  #include <sys/types.h>
X  #include <sys/param.h>
X  #include <sys/file.h>
X! #ifdef NeXT
X  #include <ufs/fs.h>
X  #include <ufs/inode.h>
X! #else  NeXT
X  #include <sys/fs.h>
X  #include <sys/inode.h>
X! #endif NeXT
X! #include <sys/stat.h>
X  #include "sizeserver.h"
X  
X  main()
X--- 5,23 ----
X  #include <sys/types.h>
X  #include <sys/param.h>
X  #include <sys/file.h>
X! #include <sys/time.h>
X! #include <sys/vnode.h>
X! #include <sys/stat.h>
X  #include <ufs/fs.h>
X  #include <ufs/inode.h>
X! /*
X!  * files could be in
X!  * /usr/include/sys
X!  *
X  #include <sys/fs.h>
X  #include <sys/inode.h>
X!  *
X!  */
X  #include "sizeserver.h"
X  
X  main()
X***************
X*** 76,80 ****
X  }
X  
X  #else  SIZESERVER
X! int serv_dummy_for_ld;	/* keep the loader and ranlib happy */
X  #endif SIZESERVER
X--- 81,89 ----
X  }
X  
X  #else  SIZESERVER
X! #include <stdio.h>
X! main()
X! {
X!  	printf("sizeserver: not compiled with -DSIZESERVER\n");
X! }
X  #endif SIZESERVER
X*** applications/aufs/Makefile.m4.orig	Thu Feb 28 23:44:21 1991
X--- applications/aufs/Makefile.m4	Tue May 28 20:13:08 1991
X***************
X*** 45,64 ****
X  	afpmisc.c afpserver.c aufsicon.c abmisc2.c \
X  	afpdt.c afpdid.c afposenum.c  afpavl.c \
X  	afposfi.c afpgc.c afppasswd.c afposlock.c aufsv.c \
X! 	afpudb.c afposncs.c afpspd.c sizeserver.c
X  OBJS=afpos.o afpvols.o afpfile.o \
X  	afpmisc.o afpserver.o aufsicon.o abmisc2.o \
X  	afpdt.o afpdir.o afpfork.o afpdid.o afposenum.o afpavl.o \
X  	afposfi.o afpgc.o afppasswd.o aufsv.o \
X! 	afpudb.o afposncs.o afpspd.o sizeserver.o
X  SYMLINKS=att_getopt.c
X  
X! all:	aufs 
X  
X  aufs: aufs.o $(OBJS) $(CAPFILES) ${RENAME} $(GETOPT)
X  	${CC} $(LFLAGS) -o aufs aufs.o $(OBJS) $(CAPFILES) ${RENAME} \
X  		$(GETOPT) ${AFPLIB} ${CAPLIB} ${SLIB}
X  
X  newver: 
X  	/bin/sh aufs_vers.sh `cat aufs_vers` aufs_vers aufsv.c
X  	make all
X--- 45,70 ----
X  	afpmisc.c afpserver.c aufsicon.c abmisc2.c \
X  	afpdt.c afpdid.c afposenum.c  afpavl.c \
X  	afposfi.c afpgc.c afppasswd.c afposlock.c aufsv.c \
X! 	afpudb.c afposncs.c afpspd.c
X  OBJS=afpos.o afpvols.o afpfile.o \
X  	afpmisc.o afpserver.o aufsicon.o abmisc2.o \
X  	afpdt.o afpdir.o afpfork.o afpdid.o afposenum.o afpavl.o \
X  	afposfi.o afpgc.o afppasswd.o aufsv.o \
X! 	afpudb.o afposncs.o afpspd.o
X  SYMLINKS=att_getopt.c
X  
X! all:	aufs sizeserver
X  
X  aufs: aufs.o $(OBJS) $(CAPFILES) ${RENAME} $(GETOPT)
X  	${CC} $(LFLAGS) -o aufs aufs.o $(OBJS) $(CAPFILES) ${RENAME} \
X  		$(GETOPT) ${AFPLIB} ${CAPLIB} ${SLIB}
X  
X+ sizeserver: sizeserver.o
X+ 	${CC} ${LFLAGS} -o sizeserver sizeserver.o ${SLIB}
X+ 
X+ sizeserver.o:	sizeserver.c	sizeserver.h
X+ 	${CC} ${OSDEFS} ${CFLAGS} -c sizeserver.c
X+ 
X  newver: 
X  	/bin/sh aufs_vers.sh `cat aufs_vers` aufs_vers aufsv.c
X  	make all
X***************
X*** 67,81 ****
X  	/bin/sh aufs_vers.sh `cat aufs_vers` useold aufsv.c
X  
X  clean:
X! 	-rm -f *.o aufs ${SYMLINKS}
X  
X  lint:	aufs.c $(SRCS)
X  	lint aufs.c $(SRCS)
X  
X! install:	aufs
X  	-strip aufs
X  	ifdef([sysvinstall],[install -f $(DESTDIR) aufs],
X  		[${INSTALLER} aufs $(DESTDIR)])
X  
X  dist:
X  	@cat todist
X--- 73,90 ----
X  	/bin/sh aufs_vers.sh `cat aufs_vers` useold aufsv.c
X  
X  clean:
X! 	-rm -f *.o aufs sizeserver ${SYMLINKS}
X  
X  lint:	aufs.c $(SRCS)
X  	lint aufs.c $(SRCS)
X  
X! install:	aufs sizeserver
X  	-strip aufs
X  	ifdef([sysvinstall],[install -f $(DESTDIR) aufs],
X  		[${INSTALLER} aufs $(DESTDIR)])
X+ 	-strip sizeserver
X+ 	ifdef([sysvinstall],[install -f $(DESTDIR) sizeserver],
X+ 		[${INSTALLER} sizeserver $(DESTDIR)])
X  
X  dist:
X  	@cat todist
X***************
X*** 155,158 ****
X  afppasswd.o:    afppasswd.c	$I/netat/sysvcompat.h afppasswd.h
X  afposncs.o:	afposncs.c	$I/netat/appletalk.h $I/netat/afp.h \
X  				afposncs.h afps.h
X- sizeserver.o:	sizeserver.c	sizeserver.h
X--- 164,166 ----
X*** README.orig		Tue May 28 20:42:04 1991
X--- README		Tue May 28 20:42:13 1991
X***************
X*** 3,9 ****
X  	       (For use with AppleTalk/Ethernet bridge)
X  
X  	o RELEASE NOTES
X! 	o CAP Distribution 6.0, Patch Level 22, May 1991
X  
X  Introduction
X  ------------
X--- 3,9 ----
X  	       (For use with AppleTalk/Ethernet bridge)
X  
X  	o RELEASE NOTES
X! 	o CAP Distribution 6.0, Patch Level 23, May 1991
X  
X  Introduction
X  ------------
END_OF_FILE
if test 6234 -ne `wc -c <'cap60.patch023'`; then
    echo shar: \"'cap60.patch023'\" unpacked with wrong size!
fi
# end of 'cap60.patch023'
fi
if test -f 'cap60.patch024' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'cap60.patch024'\"
else
echo shar: Extracting \"'cap60.patch024'\" \(5275 characters\)
sed "s/^X//" >'cap60.patch024' <<'END_OF_FILE'
XPatch #:	24
XType:		operational change
XPriority:	none
XModification:	add ULTRIX enhanced security for AUFS
XSubmitted:	Rusty Wright <rusty@groan.berkeley.edu>
XArchived:	munnari.OZ.AU	mac/cap.patches/cap60.patch024
XSummary:	use ULTRIX authorization library
XFile:		cap60/applications/aufs/afpos.c
XFile:		cap60/Configure
X
X*** applications/aufs/afpos.c.orig	Tue May 28 21:03:15 1991
X--- applications/aufs/afpos.c		Wed May 29 19:15:37 1991
X***************
X*** 1,7 ****
X  /*
X!  * $Author: djh $ $Date: 1991/05/28 10:41:05 $
X!  * $Header: /local/mulga/mac/src/cap60/applications/aufs/RCS/afpos.c,v 2.8 1991/05/28 10:41:05 djh Exp djh $
X!  * $Revision: 2.8 $
X   */
X  
X  /*
X--- 1,7 ----
X  /*
X!  * $Author: djh $ $Date: 1991/05/29 09:15:27 $
X!  * $Header: /mac/src/cap60/applications/aufs/RCS/afpos.c,v 2.9 1991/05/29 09:15:27 djh Exp djh $
X!  * $Revision: 2.9 $
X   */
X  
X  /*
X***************
X*** 175,180 ****
X--- 175,185 ----
X  #include <ctype.h>
X  #endif PERMISSIVE_USER_NAME
X  
X+ #ifdef ULTRIX_SECURITY
X+ #include <sys/svcinfo.h>
X+ #include <auth.h>
X+ #endif ULTRIX_SECURITY
X+ 
X  #ifdef MAXBSIZE
X  # define IOBSIZE MAXBSIZE	/* set to max buf entry size by if there */
X  #else
X***************
X*** 2876,2881 ****
X--- 2881,2889 ----
X    byte passkey[8];		/* password is 8 bytes max */
X    char *pass;
X    char *crypt();
X+ #ifdef ULTRIX_SECURITY
X+   char *ultrix_crypt();
X+ #endif ULTRIX_SECURITY
X  #ifdef LWSRV_AUFS_SECURITY
X    extern char *userlogindir;
X    int namlen;
X***************
X*** 2962,2968 ****
X--- 2970,2980 ----
X  	logit(0,"Login: user %s has a NULL password",nam);
X  	return(aeUserNotAuth);
X        }
X+ #ifdef ULTRIX_SECURITY
X+       if (strcmp(ultrix_crypt(pwd,p),p->pw_passwd) != 0) {
X+ #else  ULTRIX_SECURITY
X        if (strcmp(crypt(pwd,p->pw_passwd),p->pw_passwd) != 0) {
X+ #endif ULTRIX_SECURITY
X  	logit(0,"Login: Incorrect password for user %s",nam);
X  	if (!safedebug)
X  	  return(aeUserNotAuth);
X***************
X*** 3475,3478 ****
X    }
X  }
X  
X!   
X--- 3487,3530 ----
X    }
X  }
X  
X! #ifdef ULTRIX_SECURITY
X! char *
X! ultrix_crypt(pwd, pw)
X! char *pwd;
X! struct passwd *pw;
X! {
X!   extern char *crypt(), *crypt16();
X!   extern AUTHORIZATION *getauthuid();
X!   AUTHORIZATION *au;
X!   struct svcinfo *si;
X!   char *passwd;
X! 
X!   /*
X!    * the asterisk means that the real encrypted password
X!    * is in the auth file.  But we really should check to
X!    * see if the security level is either SEC_UPGRADE or
X!    * SEC_ENHANCED and the password is an asterisk because
X!    * the security level could be BSD and someone put an
X!    * asterisk in to turn an account off, but if that's the
X!    * case the right thing will happen here anyways (i.e.,
X!    * nothing encrypts to a single asterisk so the test will
X!    * fail).
X!    */
X!   if (strcmp(pw->pw_passwd, "*") == 0) {
X!     si = getsvc();
X!     if ((si->svcauth.seclevel == SEC_UPGRADE) ||
X!         (si->svcauth.seclevel == SEC_ENHANCED)) {
X!       /*
X!        * if they aren't in the auth file return
X!        * the empty string.  this can't match since
X!        * we've already thrown out empty passwords.
X!        */
X!         if ((au = getauthuid(pw->pw_uid)) == NULL)
X!           return("");
X!         pw->pw_passwd = au->a_password;
X!     }
X!     return(crypt16(pwd, pw->pw_passwd));
X!   }
X!   return(crypt(pwd, pw->pw_passwd));
X! }
X! #endif ULTRIX_SECURITY
X*** Configure.orig	Wed May 29 19:18:03 1991
X--- Configure		Wed May 29 19:31:31 1991
X***************
X*** 1,7 ****
X  #!/bin/sh
X! # $Author: djh $ $Date: 1991/05/28 06:10:31 $
X! # $Header: /mac/src/cap60/RCS/Configure,v 2.7 1991/05/28 06:10:31 djh Exp $
X! # $Revision: 2.7 $
X  # CAP configuration shell script.  This ain't perfect, but it's a start.
X  # Execute with /bin/sh Configure if your system won't run it (ksh is okay too)
X  # 
X--- 1,7 ----
X  #!/bin/sh
X! # $Author: djh $ $Date: 1991/05/29 09:31:20 $
X! # $Header: /mac/src/cap60/RCS/Configure,v 2.9 1991/05/29 09:31:20 djh Exp djh $
X! # $Revision: 2.9 $
X  # CAP configuration shell script.  This ain't perfect, but it's a start.
X  # Execute with /bin/sh Configure if your system won't run it (ksh is okay too)
X  # 
X***************
X*** 439,444 ****
X--- 439,447 ----
X  # + PERMISSIVE_USER_NAME allows AUFS users to have their real name in Chooser
X  # define(`specialcflags',concat(specialcflags,` -DPERMISSIVE_USER_NAME'))
X  #
X+ # + ULTRIX_SECURITY adds ULTRIX enhanced security to aufs
X+ # define(`specialcflags',concat(specialcflags,` -DULTRIX_SECURITY'))
X+ #
X  EOT0
X  result=0
X  if [ -f m4.features ]; then
X***************
X*** 805,810 ****
X--- 808,815 ----
X  	[define([libafpc],concat([-L],libdestdir,[ ],libafpc))])
X  # any special libraries
X  define([libspecial],[])
X+ ifelse(os,[ultrix40],[
X+ 	define([libspecial],concat(libspecial,[ -lauth]))])
X  ifelse(os,[xenix5],[
X  	define([libspecial],concat(libspecial,[ -lsocket]))])
X  ifelse(os,[dynix],[
X*** README.orig		Wed May 29 19:18:20 1991
X--- README		Wed May 29 19:23:06 1991
X***************
X*** 3,9 ****
X  	       (For use with AppleTalk/Ethernet bridge)
X  
X  	o RELEASE NOTES
X! 	o CAP Distribution 6.0, Patch Level 23, May 1991
X  
X  Introduction
X  ------------
X--- 3,9 ----
X  	       (For use with AppleTalk/Ethernet bridge)
X  
X  	o RELEASE NOTES
X! 	o CAP Distribution 6.0, Patch Level 24, May 1991
X  
X  Introduction
X  ------------
END_OF_FILE
if test 5275 -ne `wc -c <'cap60.patch024'`; then
    echo shar: \"'cap60.patch024'\" unpacked with wrong size!
fi
# end of 'cap60.patch024'
fi
echo shar: End of shell archive.
exit 0