home *** CD-ROM | disk | FTP | other *** search
- From: jfh@rpp386.cactus.org (John F Haugh II)
- Newsgroups: alt.sources
- Subject: Shadow Login Suite, patch 3
- Message-ID: <19363@rpp386.cactus.org>
- Date: 6 Jun 91 15:06:34 GMT
-
-
- Chip Rosenthal has provided me with a large collection of fixes for the
- code, and many of them are included here. I've been working on implementing
- the SVR4 "useradd" and "userdel" command, and some of these changes were
- required to support those commands. Patch 4 will include useradd, usermod
- and userdel, as well as the documentation for those three commands. I will
- probably do groupadd, groupmod and groupdel for Patch 5 or 6.
-
- There is someone down under working on a port to SunOS and I expect those
- changes to show up in the next patch or two.
- --
- Changes -
-
- dialup.c 3.4
- made code more robust, added support for shell name default to "*"
-
- utmp.c 3.7
- fixed strncmp and strncpy calls in BSD part of an ifdef
-
- README 3.3
- added DBM and SYSLOG comments
-
- Makefile 3.10
- fixed lint flags to get around command bug
-
- config.h 3.7
- removed NOBLANK option.
-
- passwd.c 3.3
- don't need to print CHANGING message with -S flag
-
- sgroupio.c 3.3
- fixed misspelt function calls
-
- gshadow.c 3.4
- fixed bugs with variable names
-
- pwdbm.c 3.5
- added pw_dbm_remove function
-
- spdbm.c 3.2
- added sp_dbm_remove function
-
- gpmain.c 3.6
- list addition/deletion had bugs
-
- *** rel3/dialup.c Thu May 30 07:02:56 1991
- --- dialup.c Tue Jun 4 08:15:10 1991
- ***************
- *** 1,5 ****
- /*
- ! * Copyright 1989, 1990, John F. Haugh II
- * All rights reserved.
- *
- * Permission is granted to copy and create derivative works for any
- --- 1,5 ----
- /*
- ! * Copyright 1989, 1990, 1991, John F. Haugh II
- * All rights reserved.
- *
- * Permission is granted to copy and create derivative works for any
- ***************
- *** 20,26 ****
- #include "dialup.h"
-
- #ifndef lint
- ! static char sccsid[] = "@(#)dialup.c 3.3 19:44:20 12/10/90";
- #endif
-
- static FILE *dialpwd;
- --- 20,26 ----
- #include "dialup.h"
-
- #ifndef lint
- ! static char sccsid[] = "@(#)dialup.c 3.4 07:58:44 5/30/91";
- #endif
-
- static FILE *dialpwd;
- ***************
- *** 48,57 ****
- FILE *fp;
- {
- static struct dialup dialup; /* static structure to point to */
- ! static char shell[64]; /* some space for a login shell */
- ! static char passwd[16]; /* some space for dialup password */
- char buf[BUFSIZ];
- char *cp;
-
- if (! fp)
- return 0;
- --- 48,58 ----
- FILE *fp;
- {
- static struct dialup dialup; /* static structure to point to */
- ! static char shell[128]; /* some space for a login shell */
- ! static char passwd[128]; /* some space for dialup password */
- char buf[BUFSIZ];
- char *cp;
- + char *cp2;
-
- if (! fp)
- return 0;
- ***************
- *** 65,84 ****
- if (feof (fp))
- return ((struct dialup *) 0);
-
- ! cp = strchr (buf, ':');
- if (cp - buf > sizeof shell) /* something is fishy ... */
- return ((struct dialup *) 0);
-
- ! (void) strncpy (shell, buf, cp - buf);
- shell[cp - buf] = '\0';
-
- ! if (strlen (cp + 1) > sizeof passwd) /* something is REALLY fishy */
- return ((struct dialup *) 0);
-
- ! (void) strcpy (passwd, cp + 1);
- ! passwd[strlen (passwd) - 1] = '\0';
- ! if (cp = strchr (passwd, ':'))
- ! *cp = '\0';
-
- dialup.du_shell = shell;
- dialup.du_passwd = passwd;
- --- 66,88 ----
- if (feof (fp))
- return ((struct dialup *) 0);
-
- ! if (! (cp = strchr (buf, ':')))
- ! return ((struct dialup *) 0);
- !
- if (cp - buf > sizeof shell) /* something is fishy ... */
- return ((struct dialup *) 0);
-
- ! *cp++ = '\0';
- ! (void) strcpy (shell, buf);
- shell[cp - buf] = '\0';
-
- ! if (cp2 = strchr (cp, ':'))
- ! *cp2 = '\0';
- !
- ! if (strlen (cp) + 1 > sizeof passwd) /* something is REALLY fishy */
- return ((struct dialup *) 0);
-
- ! (void) strcpy (passwd, cp);
-
- dialup.du_shell = shell;
- dialup.du_passwd = passwd;
- *** rel3/utmp.c Thu May 30 07:04:51 1991
- --- utmp.c Thu Jun 6 09:32:47 1991
- ***************
- *** 25,44 ****
- #include "config.h"
-
- #ifndef lint
- ! static char sccsid[] = "@(#)utmp.c 3.4 09:08:23 5/28/91";
- #endif
-
- extern struct utmp utent;
- - extern char name[];
-
- extern struct utmp *getutent();
- extern void setutent();
- extern void endutent();
- extern time_t time();
- extern char *ttyname();
-
- #define NO_UTENT \
- "No utmp entry. You must exec \"login\" from the lowest level \"sh\""
-
- /*
- * checkutmp - see if utmp file is correct for this process
- --- 25,47 ----
- #include "config.h"
-
- #ifndef lint
- ! static char sccsid[] = "@(#)utmp.c 3.7 09:49:56 6/5/91";
- #endif
-
- extern struct utmp utent;
-
- extern struct utmp *getutent();
- + extern struct utmp *getutline();
- extern void setutent();
- extern void endutent();
- extern time_t time();
- extern char *ttyname();
- + extern long lseek();
-
- #define NO_UTENT \
- "No utmp entry. You must exec \"login\" from the lowest level \"sh\""
- + #define NO_TTY \
- + "Unable to determine your tty name."
-
- /*
- * checkutmp - see if utmp file is correct for this process
- ***************
- *** 47,52 ****
- --- 50,60 ----
- * and requires that a slot for the current process exist.
- * The utmp file is scanned for an entry with the same process
- * ID. If no entry exists the process exits with a message.
- + *
- + * The "picky" flag is for network and other logins that may
- + * use special flags. It allows the pid checks to be overridden.
- + * This means that getty should never invoke login with any
- + * command line flags.
- */
-
- void
- ***************
- *** 53,65 ****
- checkutmp (picky)
- int picky;
- {
- - struct utmp *ut;
- char *line;
- #ifndef NDEBUG
- int pid = getppid ();
- #else
- int pid = getpid ();
- #endif
- setutent ();
-
- #ifndef BSD
- --- 61,75 ----
- checkutmp (picky)
- int picky;
- {
- char *line;
- + #ifdef USG
- + struct utmp *ut;
- #ifndef NDEBUG
- int pid = getppid ();
- #else
- int pid = getpid ();
- #endif
- + #endif
- setutent ();
-
- #ifndef BSD
- ***************
- *** 76,98 ****
- if (ut && utent.ut_pid == pid)
- return;
-
- ! puts (NO_UTENT);
- exit (1);
- } else {
- ! line = ttyname (0);
- if (strncmp (line, "/dev/", 5) == 0)
- line += 5;
-
- ! strncpy (utent.ut_line, line, sizeof utent.ut_line);
- if (ut = getutline (&utent))
- ! strncpy (utent.ut_id, ut->ut_id, sizeof ut->ut_id);
-
- ! strcpy (utent.ut_user, "LOGIN");
- utent.ut_pid = getpid ();
- utent.ut_type = LOGIN_PROCESS;
- ! time (&utent.ut_time);
- }
- #endif
- }
-
- /*
- --- 86,126 ----
- if (ut && utent.ut_pid == pid)
- return;
-
- ! (void) puts (NO_UTENT);
- exit (1);
- } else {
- ! if (! (line = ttyname (0))) {
- ! (void) puts (NO_TTY);
- ! exit (1);
- ! }
- if (strncmp (line, "/dev/", 5) == 0)
- line += 5;
-
- ! (void) strncpy (utent.ut_line, line,
- ! (int) sizeof utent.ut_line);
- if (ut = getutline (&utent))
- ! (void) strncpy (utent.ut_id, ut->ut_id,
- ! (int) sizeof ut->ut_id);
-
- ! (void) strcpy (utent.ut_user, "LOGIN");
- utent.ut_pid = getpid ();
- utent.ut_type = LOGIN_PROCESS;
- ! (void) time (&utent.ut_time);
- ! return;
- ! }
- ! #else
- ! bzero (&utent, sizeof utent);
- ! if (line = ttyname (0)) {
- ! if (strncmp (line, "/dev/", 5) == 0)
- ! line += 5;
- !
- ! (void) strncpy (utent.ut_line, line, (int) sizeof utent.ut_line);
- ! (void) time (&utent.ut_time);
- ! return;
- }
- #endif
- + (void) puts (NO_TTY);
- + exit (1);
- }
-
- /*
- ***************
- *** 107,144 ****
- char *name;
- char *line;
- {
- ! FILE *wtmp;
- ! struct utmp utent;
- int fd;
- - int i;
- int found = 0;
-
- if (! (fd = open ("/etc/utmp", O_RDWR)))
- return;
-
- ! while (! found && read (fd, &utent, sizeof utent) == sizeof utent) {
- ! if (! strncmp (line, utent.ut_line, sizeof utent.ut_line))
- found++;
- }
- if (! found) {
- ! bzero (&utent, sizeof utent);
- ! strncpy (utent.ut_line, line, sizeof utent.ut_line);
- }
- - (void) strncpy (utent.ut_user, name, sizeof utent.ut_user);
- #ifndef BSD
- ! utent.ut_type = USER_PROCESS;
- ! utent.ut_pid = getpid ();
- #endif
- ! (void) time (&utent.ut_time);
-
- if (found)
- ! lseek (fd, (long) - sizeof utent, 1);
-
- ! write (fd, &utent, sizeof utent);
- ! close (fd);
-
- ! if ((wtmp = fopen (WTMP_FILE, "a+"))) {
- ! fwrite ((char *) &utent, sizeof utent, 1, wtmp);
- ! fclose (wtmp);
- }
- }
- --- 135,173 ----
- char *name;
- char *line;
- {
- ! struct utmp utmp;
- int fd;
- int found = 0;
-
- if (! (fd = open ("/etc/utmp", O_RDWR)))
- return;
-
- ! while (! found && read (fd, &utmp, sizeof utmp) == sizeof utmp) {
- ! if (! strncmp (line, utmp.ut_line, (int) sizeof utmp.ut_line))
- found++;
- }
- if (! found) {
- ! (void) bzero (&utmp, sizeof utmp);
- ! (void) strncpy (utmp.ut_line, line, (int) sizeof utmp.ut_line);
- }
- #ifndef BSD
- ! (void) strncpy (utmp.ut_user, name, (int) sizeof utmp.ut_user);
- ! utmp.ut_type = USER_PROCESS;
- ! utmp.ut_pid = getpid ();
- ! #else
- ! (void) strncpy (utmp.ut_name, name, (int) sizeof utmp.ut_name);
- #endif
- ! (void) time (&utmp.ut_time);
-
- if (found)
- ! (void) lseek (fd, (long) - sizeof utmp, 1);
-
- ! (void) write (fd, &utmp, sizeof utmp);
- ! (void) close (fd);
-
- ! if ((fd = open (WTMP_FILE, O_WRONLY|O_APPEND)) >= 0) {
- ! (void) write (fd, &utmp, sizeof utmp);
- ! (void) close (fd);
- }
- + utent = utmp;
- }
- *** rel3/README Thu May 30 07:02:41 1991
- --- README Thu Jun 6 09:32:49 1991
- ***************
- *** 1,9 ****
- This is the explanatory document for John F. Haugh II's login replacement,
- ! release 3. This document was last updated 11/21/90.
-
- ! This software is copyright 1988, 1989, 1990, John F. Haugh II. All rights
- ! reserved. Use, duplication and disclosure is permitted according to the
- ! guidelines listed below.
-
- This software is being provided as a freely redistributable login clone.
- You may distribute this software provided you do not charge for other than
- --- 1,11 ----
- + [ @(#)README 3.3 08:56:06 5/30/91 ]
- +
- This is the explanatory document for John F. Haugh II's login replacement,
- ! release 3. This document was last updated 5/30/91.
-
- ! This software is copyright 1988, 1989, 1990, 1991, John F. Haugh II. All
- ! rights reserved. Use, duplication and disclosure is permitted according
- ! to the guidelines listed below.
-
- This software is being provided as a freely redistributable login clone.
- You may distribute this software provided you do not charge for other than
- ***************
- *** 27,35 ****
- New for Release 3:
- The objects are being combined into libraries to make maintenance
- easier and to encourage developers to use the modules as the
- ! basis for new tools.
-
- New lint rules have been added to make the code easier to lint.
-
- Begin by reading and editing the config.h file. All options are selected
- by using #define's. A brief description for each available option appears
- --- 29,43 ----
- New for Release 3:
- The objects are being combined into libraries to make maintenance
- easier and to encourage developers to use the modules as the
- ! basis for new tools. New tools are planned based on SVR4 commands.
-
- New lint rules have been added to make the code easier to lint.
- + Files will gradually be fixed so that they lint cleanly.
- +
- + DBM file access has been added to everything that would tolerate
- + it. The files /etc/passwd, /etc/group, and /etc/shadow all have
- + DBM interfaces. The new file, /etc/gshadow, has been added to
- + support shadowed group information and it too has a DBM interface.
-
- Begin by reading and editing the config.h file. All options are selected
- by using #define's. A brief description for each available option appears
- ***************
- *** 70,76 ****
- DBM Password Files -
- This option utilizes the DBM database access routines to
- increase the performance of user name and ID lookups in the
- ! password file.
-
- Select this option by defining both the DBM and GETPWENT
- macros. The FGETPWENT macro must also be defined or the
- --- 78,85 ----
- DBM Password Files -
- This option utilizes the DBM database access routines to
- increase the performance of user name and ID lookups in the
- ! password file. You may select the NDBM database instead
- ! and have DBM-style access to all user information files.
-
- Select this option by defining both the DBM and GETPWENT
- macros. The FGETPWENT macro must also be defined or the
- ***************
- *** 94,108 ****
- Additionally, the PASSLENGTH macro must be defined to
- control the minimum length for a legal password.
-
- - Mandatory Password Prompting -
- - This option requires all passwords, including null ones,
- - to be prompted for. Traditionally an account with a
- - password field of '::' does not require prompting for.
- - This option modifies this behavior to require even
- - null passwords be prompted for.
- -
- - Select this option by defining the NOBLANK macro.
- -
- Password Aging Defaults -
- You may select the default number of days during which a
- password is valid. The pwconv command adds aging
- --- 103,108 ----
- ***************
- *** 169,175 ****
- This option permits you to specify a file which disables
- user logins. This options permits you to keep normal
- users off of the system while performing maintenance
- ! functions.
-
- Select this option by defining NOLOGINS to be the name
- of the file to use.
- --- 169,176 ----
- This option permits you to specify a file which disables
- user logins. This options permits you to keep normal
- users off of the system while performing maintenance
- ! functions. The contents of the file will be displayed if
- ! the file exists at login time.
-
- Select this option by defining NOLOGINS to be the name
- of the file to use.
- ***************
- *** 261,267 ****
-
- Select this option by defining the SULOG macro to
- have the value of the name of the file you want
- ! attempts logged to.
-
- Configurable Editing Keys -
- This options allows the erase and kill characters to
- --- 262,270 ----
-
- Select this option by defining the SULOG macro to
- have the value of the name of the file you want
- ! attempts logged to. If you enable syslog processing,
- ! you may want to define SULOGONLY to prevent multiple
- ! records of su(1) usage. See config.h for more details.
-
- Configurable Editing Keys -
- This options allows the erase and kill characters to
- ***************
- *** 284,289 ****
- --- 287,301 ----
-
- Warning: These values will not apply to processes
- executed by /etc/cron or any of their children.
- +
- + Syslog -
- + This option causes the code to log various errors or
- + special conditions to the syslog daemon. The types of
- + information that are logged security violations, changes
- + to the user database, and program errors.
- +
- + Select syslog processing by defining the USE_SYSLOG
- + macro.
-
- BSD Notes: Steve Simmons scs@iti.org
-
- *** rel3/Makefile Thu May 30 07:04:20 1991
- --- Makefile Thu Jun 6 09:32:51 1991
- ***************
- *** 8,16 ****
- # and conspicuously displayed on all copies of object code or
- # distribution media.
- #
- ! # @(#)Makefile 3.9 09:06:23 - Shadow password system
- #
- ! # @(#)Makefile 3.9 09:06:23 5/28/91
- #
- SHELL = /bin/sh
-
- --- 8,16 ----
- # and conspicuously displayed on all copies of object code or
- # distribution media.
- #
- ! # @(#)Makefile 3.10 09:05:50 - Shadow password system
- #
- ! # @(#)Makefile 3.10 09:05:50 5/30/91
- #
- SHELL = /bin/sh
-
- ***************
- *** 67,73 ****
- LINTFLAGS = $(OS) -Dlint
-
- .c.L:
- ! $(LINT) -u $(LINTFLAGS) $*.c > $*.L
-
- LOBJS = lmain.o login.o env.o valid.o setup.o shell.o age.o \
- utmp.o sub.o mail.o motd.o log.o ttytype.o failure.o
- --- 67,73 ----
- LINTFLAGS = $(OS) -Dlint
-
- .c.L:
- ! $(LINT) -pxu $(LINTFLAGS) $*.c > $*.L
-
- LOBJS = lmain.o login.o env.o valid.o setup.o shell.o age.o \
- utmp.o sub.o mail.o motd.o log.o ttytype.o failure.o
- *** rel3/config.h Thu May 30 07:04:21 1991
- --- config.h Sun Jun 2 16:03:33 1991
- ***************
- *** 12,18 ****
- /*
- * Configuration file for login.
- *
- ! * @(#)config.h 3.6 09:18:23 5/28/91
- */
-
- /*
- --- 12,18 ----
- /*
- * Configuration file for login.
- *
- ! * @(#)config.h 3.7 08:57:09 5/30/91
- */
-
- /*
- ***************
- *** 53,64 ****
- */
-
- #define PASSLENGTH 5
- -
- - /*
- - * Define NOBLANK if you want all passwords prompted for, including
- - * empty ones.
- -
- - #undef NOBLANK
-
- /*
- * Define MAXDAYS to be the default maximum number of days a password
- --- 53,58 ----
- *** rel3/passwd.c Thu May 30 07:04:21 1991
- --- passwd.c Tue Jun 4 09:11:10 1991
- ***************
- *** 16,22 ****
- #include <signal.h>
-
- #ifndef lint
- ! static char sccsid[] = "@(#)passwd.c 3.2 09:06:29 5/28/91";
- #endif
-
- /*
- --- 16,22 ----
- #include <signal.h>
-
- #ifndef lint
- ! static char sccsid[] = "@(#)passwd.c 3.3 08:50:26 6/4/91";
- #endif
-
- /*
- ***************
- *** 605,611 ****
- * Let the user know whose password is being changed.
- */
-
- ! printf (CHANGING, name);
-
- /*
- * The user name is valid, so let's get the shadow file
- --- 605,612 ----
- * Let the user know whose password is being changed.
- */
-
- ! if (! Sflg)
- ! printf (CHANGING, name);
-
- /*
- * The user name is valid, so let's get the shadow file
- *** rel3/sgroupio.c Thu May 30 07:04:49 1991
- --- sgroupio.c Thu Jun 6 07:23:39 1991
- ***************
- *** 38,44 ****
- #include "shadow.h"
-
- #ifndef lint
- ! static char sccsid[] = "@(#)sgroupio.c 3.2 09:08:11 5/28/91";
- #endif
-
- static int islocked;
- --- 38,44 ----
- #include "shadow.h"
-
- #ifndef lint
- ! static char sccsid[] = "@(#)sgroupio.c 3.3 07:06:36 6/6/91";
- #endif
-
- static int islocked;
- ***************
- *** 66,72 ****
- static char sg_filename[BUFSIZ] = SGROUP;
-
- extern char *strdup();
- ! extern struct sgrp *sgetgsent();
- extern char *fgetsx();
- extern char *malloc();
-
- --- 66,72 ----
- static char sg_filename[BUFSIZ] = SGROUP;
-
- extern char *strdup();
- ! extern struct sgrp *sgetsgent();
- extern char *fgetsx();
- extern char *malloc();
-
- ***************
- *** 338,344 ****
-
- sgrf->sgr_changed = 0;
- sgrf->sgr_line = strdup (buf);
- ! if ((sgrent = sgetgsent (buf)) && ! (sgrent = sgr_dup (sgrent)))
- return 0;
-
- sgrf->sgr_entry = sgrent;
- --- 338,344 ----
-
- sgrf->sgr_changed = 0;
- sgrf->sgr_line = strdup (buf);
- ! if ((sgrent = sgetsgent (buf)) && ! (sgrent = sgr_dup (sgrent)))
- return 0;
-
- sgrf->sgr_entry = sgrent;
- ***************
- *** 421,427 ****
-
- for (sgrf = sgr_head;! errors && sgrf;sgrf = sgrf->sgr_next) {
- if (sgrf->sgr_changed) {
- ! if (putgsent (sgrf->sgr_entry, sgrfp))
- errors++;
- } else {
- if (fputsx (sgrf->sgr_line, sgrfp))
- --- 421,427 ----
-
- for (sgrf = sgr_head;! errors && sgrf;sgrf = sgrf->sgr_next) {
- if (sgrf->sgr_changed) {
- ! if (putsgent (sgrf->sgr_entry, sgrfp))
- errors++;
- } else {
- if (fputsx (sgrf->sgr_line, sgrfp))
- *** rel3/gshadow.c Thu May 30 07:03:27 1991
- --- gshadow.c Thu Jun 6 08:08:00 1991
- ***************
- *** 1,5 ****
- /*
- ! * Copyright 1990, John F. Haugh II
- * All rights reserved.
- *
- * Permission is granted to copy and create derivative works for any
- --- 1,5 ----
- /*
- ! * Copyright 1990, 1991, John F. Haugh II
- * All rights reserved.
- *
- * Permission is granted to copy and create derivative works for any
- ***************
- *** 24,31 ****
- #ifdef NDBM
- #include <ndbm.h>
- #include <fcntl.h>
- ! DBM *sg_dbm;
- ! int sg_dbm_mode;
- static int dbmopened;
- static int dbmerror;
- #endif
- --- 24,31 ----
- #ifdef NDBM
- #include <ndbm.h>
- #include <fcntl.h>
- ! DBM *sgr_dbm;
- ! int sg_dbm_mode = -1;
- static int dbmopened;
- static int dbmerror;
- #endif
- ***************
- *** 32,38 ****
-
-
- #ifndef lint
- ! static char sccsid[] = "@(#)gshadow.c 3.3 11:25:55 12/19/90";
- #endif
-
- #define MAXMEM 1024
- --- 32,38 ----
-
-
- #ifndef lint
- ! static char sccsid[] = "@(#)gshadow.c 3.4 07:31:22 6/6/91";
- #endif
-
- #define MAXMEM 1024
- ***************
- *** 88,101 ****
-
- strcpy (dbmfiles, sgrpfile);
- strcat (dbmfiles, ".pag");
- ! if (sg_dbm_mode != -1)
- ! mode = O_RDONLY;
- else
- ! mode = (sg_dbm_mode == O_RDONLY ||
- ! sg_dbm_mode == O_RDWR) ? sg_dbm_mode:O_RDONLY;
-
- if (access (dbmfiles, 0) ||
- ! (! (sg_dbm = dbm_open (sgrpfile, mode, 0))))
- dbmerror = 1;
- else
- dbmopened = 1;
- --- 88,101 ----
-
- strcpy (dbmfiles, sgrpfile);
- strcat (dbmfiles, ".pag");
- !
- ! if (sg_dbm_mode == -1)
- ! mode = O_RDWR;
- else
- ! mode = (sg_dbm_mode == O_RDWR) ? O_RDWR:O_RDONLY;
-
- if (access (dbmfiles, 0) ||
- ! (! (sgr_dbm = dbm_open (sgrpfile, mode, 0))))
- dbmerror = 1;
- else
- dbmopened = 1;
- ***************
- *** 111,120 ****
-
- shadow = (FILE *) 0;
- #ifdef NDBM
- ! if (dbmopened && sg_dbm) {
- ! dbm_close (sg_dbm);
- dbmopened = 0;
- ! sg_dbm = 0;
- }
- #endif
- }
- --- 111,120 ----
-
- shadow = (FILE *) 0;
- #ifdef NDBM
- ! if (dbmopened && sgr_dbm) {
- ! dbm_close (sgr_dbm);
- dbmopened = 0;
- ! sgr_dbm = 0;
- }
- #endif
- }
- ***************
- *** 204,210 ****
- key.dsize = strlen (name);
- key.dptr = name;
-
- ! content = dbm_fetch (sg_dbm, key);
- if (content.dptr != 0) {
- memcpy (sgrbuf, content.dptr, content.dsize);
- sgroup.sg_mem = members;
- --- 204,210 ----
- key.dsize = strlen (name);
- key.dptr = name;
-
- ! content = dbm_fetch (sgr_dbm, key);
- if (content.dptr != 0) {
- memcpy (sgrbuf, content.dptr, content.dsize);
- sgroup.sg_mem = members;
- *** rel3/pwdbm.c Thu May 30 07:04:47 1991
- --- pwdbm.c Thu Jun 6 09:32:51 1991
- ***************
- *** 10,16 ****
- */
-
- #ifndef lint
- ! static char sccsid[] = "@(#)pwdbm.c 3.4 09:08:00 5/28/91";
- #endif
-
- #ifdef BSD
- --- 10,16 ----
- */
-
- #ifndef lint
- ! static char sccsid[] = "@(#)pwdbm.c 3.5 09:29:30 6/6/91";
- #endif
-
- #ifdef BSD
- ***************
- *** 92,97 ****
- --- 92,152 ----
- #endif
- #ifdef NDBM
- if (dbm_store (pw_dbm, key, content, DBM_REPLACE))
- + return 0;
- + #endif
- + return 1;
- + }
- +
- + /*
- + * pw_dbm_remove
- + *
- + * Removes the DBM password entry, if it exists.
- + */
- +
- + int
- + pw_dbm_remove (pw)
- + struct passwd *pw;
- + {
- + datum key;
- + static int once;
- +
- + if (! once) {
- + #ifdef NDBM
- + if (! pw_dbm)
- + setpwent ();
- + #else
- + setpwent ();
- + #endif
- + once++;
- + }
- + #ifdef DBM
- + strcpy (data, PWDFILE);
- + strcat (data, ".pag");
- + if (access (data, 0))
- + return 0;
- + #endif
- + #ifdef NDBM
- + if (! pw_dbm)
- + return 0;
- + #endif
- + key.dsize = strlen (pw->pw_name);
- + key.dptr = pw->pw_name;
- + #ifdef DBM
- + if (delete (key))
- + return 0;
- + #endif
- + #ifdef NDBM
- + if (dbm_delete (pw_dbm, key))
- + return 0;
- + #endif
- + key.dsize = sizeof pw->pw_uid;
- + key.dptr = (char *) &pw->pw_uid;
- + #ifdef DBM
- + if (delete (key))
- + return 0;
- + #endif
- + #ifdef NDBM
- + if (dbm_delete (pw_dbm, key))
- return 0;
- #endif
- return 1;
- *** rel3/spdbm.c Thu May 30 07:03:30 1991
- --- spdbm.c Thu Jun 6 09:32:52 1991
- ***************
- *** 1,5 ****
- /*
- ! * Copyright 1990, John F. Haugh II
- * All rights reserved.
- *
- * Use, duplication, and disclosure prohibited without
- --- 1,5 ----
- /*
- ! * Copyright 1990, 1991, John F. Haugh II
- * All rights reserved.
- *
- * Use, duplication, and disclosure prohibited without
- ***************
- *** 7,13 ****
- */
-
- #ifndef lint
- ! static char sccsid[] = "@(#)spdbm.c 3.1 08:16:16 11/21/90";
- #endif
-
- #include <string.h>
- --- 7,13 ----
- */
-
- #ifndef lint
- ! static char sccsid[] = "@(#)spdbm.c 3.2 09:29:53 6/6/91";
- #endif
-
- #include <string.h>
- ***************
- *** 56,61 ****
- --- 56,91 ----
- key.dsize = strlen (sp->sp_namp);
- key.dptr = sp->sp_namp;
- if (dbm_store (sp_dbm, key, content, DBM_REPLACE))
- + return 0;
- +
- + return 1;
- + }
- +
- + /*
- + * sp_dbm_remove
- + *
- + * Updates the DBM password files, if they exist.
- + */
- +
- + int
- + sp_dbm_remove (user)
- + char *user;
- + {
- + datum key;
- + static int once;
- +
- + if (! once) {
- + if (! sp_dbm)
- + setspent ();
- +
- + once++;
- + }
- + if (! sp_dbm)
- + return 0;
- +
- + key.dsize = strlen (user);
- + key.dptr = user;
- + if (dbm_delete (sp_dbm, key))
- return 0;
-
- return 1;
- *** rel3/gpmain.c Thu May 30 07:04:33 1991
- --- gpmain.c Thu Jun 6 09:32:53 1991
- ***************
- *** 38,44 ****
- #endif
-
- #ifndef lint
- ! static char _sccsid[] = "@(#)gpmain.c 3.5 09:07:24 5/28/91";
- #endif
-
- char name[BUFSIZ];
- --- 38,44 ----
- #endif
-
- #ifndef lint
- ! static char _sccsid[] = "@(#)gpmain.c 3.6 09:28:18 6/6/91";
- #endif
-
- char name[BUFSIZ];
- ***************
- *** 95,116 ****
- char *member;
- {
- int i;
- - int found = 0;
- char **tmp;
-
- ! for (i = 0;!found && list[i] != (char *) 0;i++)
- if (strcmp (list[i], member) == 0)
- ! found++;
-
- ! tmp = (char **) malloc ((i + 2) * sizeof member);
-
- for (i = 0;list[i] != (char *) 0;i++)
- tmp[i] = list[i];
-
- ! if (! found)
- ! tmp[i++] = strdup (member);
- !
- tmp[i] = (char *) 0;
- return tmp;
- }
-
- --- 95,115 ----
- char *member;
- {
- int i;
- char **tmp;
-
- ! for (i = 0;list[i] != (char *) 0;i++)
- if (strcmp (list[i], member) == 0)
- ! return list;
-
- ! if (! (tmp = (char **) malloc ((i + 2) * sizeof member)))
- ! return 0;
-
- for (i = 0;list[i] != (char *) 0;i++)
- tmp[i] = list[i];
-
- ! tmp[i++] = strdup (member);
- tmp[i] = (char *) 0;
- +
- return tmp;
- }
-
- --
- John F. Haugh II | Distribution to | UUCP: ...!cs.utexas.edu!rpp386!jfh
- Ma Bell: (512) 255-8251 | GEnie PROHIBITED :-) | Domain: jfh@rpp386.cactus.org
- "If liberals interpreted the 2nd Amendment the same way they interpret the
- rest of the Constitution, gun ownership would be mandatory."
-