patch 3 for shadow login package (REPOST)
John F. Haugh II
jfh at rpp386.Dallas.TX.US
Thu Feb 23 00:54:48 AEST 1989
[ This is being reposted. A very serious bug showed up quite rapidly
after the original posting. You should only be seeing this once. ]
OK. This isn't exactly a patch-patch. This is more like some features
and some bug fixes. Some of you may be unable to tell the difference.
Others of you may believe there really is no distinction ...
This is what this patch is supposed to accomplish -
- Login time setting of TERM environmental variable.
- Add close of lastlog if lseek() fails.
- Changed int's in shadow.h to long's.
- Changed gets() in password.c to fgets().
The suggestion to add the first feature is credited to Chip Rosenthal.
The last three may be credited to Jonathan Bayer, who has been involved
with this project since its inception. Read the README file for details
concerning the TERM variable option.
Features in the pipeline include -
- Support for updating the dialup password files
- Longer passwords
Good luck -
- John.
--
*** Makefile
--- new/Makefile
**************
*** 1,5
#
! # @(#)Makefile 1.3 - System V shadow password system
#
# @(#)Makefile 1.3 18:58:25 2/18/89
#
--- 1,5 -----
#
! # @(#)Makefile 1.4 - System V shadow password system
#
# @(#)Makefile 1.4 18:06:16 2/20/89
#
**************
*** 1,7
#
# @(#)Makefile 1.3 - System V shadow password system
#
! # @(#)Makefile 1.3 18:58:25 2/18/89
#
SHELL = /bin/sh
--- 1,7 -----
#
# @(#)Makefile 1.4 - System V shadow password system
#
! # @(#)Makefile 1.4 18:06:16 2/20/89
#
SHELL = /bin/sh
**************
*** 17,23
# LDFLAGS = -g
LOBJS = lmain.o login.o env.o password.o entry.o valid.o setup.o shell.o age.o \
! pwent.o utmp.o sub.o mail.o motd.o log.o shadow.o dialup.o dialchk.o
LSRCS = lmain.c login.c env.c password.c entry.c valid.c setup.c shell.c age.c \
pwent.c utmp.c sub.c mail.c motd.c log.c shadow.c dialup.c dialchk.c
--- 17,24 -----
# LDFLAGS = -g
LOBJS = lmain.o login.o env.o password.o entry.o valid.o setup.o shell.o age.o \
! pwent.o utmp.o sub.o mail.o motd.o log.o shadow.o dialup.o dialchk.o \
! ttytype.o
LSRCS = lmain.c login.c env.c password.c entry.c valid.c setup.c shell.c age.c \
pwent.c utmp.c sub.c mail.c motd.c log.c shadow.c dialup.c dialchk.c \
**************
*** 20,26
pwent.o utmp.o sub.o mail.o motd.o log.o shadow.o dialup.o dialchk.o
LSRCS = lmain.c login.c env.c password.c entry.c valid.c setup.c shell.c age.c \
! pwent.c utmp.c sub.c mail.c motd.c log.c shadow.c dialup.c dialchk.c
SOBJS = smain.o env.o password.o entry.o valid.o susetup.o sushell.o \
pwent.o susub.o mail.o motd.o sulog.o shadow.o age.o
--- 21,28 -----
ttytype.o
LSRCS = lmain.c login.c env.c password.c entry.c valid.c setup.c shell.c age.c \
! pwent.c utmp.c sub.c mail.c motd.c log.c shadow.c dialup.c dialchk.c \
! ttytype.c
SOBJS = smain.o env.o password.o entry.o valid.o susetup.o sushell.o \
pwent.o susub.o mail.o motd.o sulog.o shadow.o age.o
**************
*** 47,53
shadow.c shell.c valid.c
FILES1 = README log.c mail.c shadow.h sulog.c Makefile entry.c obscure.c \
! setup.c sub.c config.h pmain.c sulogin.c dialup.h
FILES2 = lastlog.h login.c motd.c password.c shell.c utmp.c age.c env.c \
pwent.c shadow.c valid.c lmain.c smain.c pwconv.c dialup.c dialchk.c \
--- 49,55 -----
shadow.c shell.c valid.c
FILES1 = README log.c mail.c shadow.h sulog.c Makefile entry.c obscure.c \
! setup.c sub.c config.h pmain.c sulogin.c dialup.h ttytype.c
FILES2 = lastlog.h login.c motd.c password.c shell.c utmp.c age.c env.c \
pwent.c shadow.c valid.c lmain.c smain.c pwconv.c dialup.c dialchk.c \
*** README
--- new/README
**************
*** 128,133
Select this option by defining the TTYPERM macro as
having the desired mode.
File Size Setting -
This option includes code to set the user's ulimit
at login time. Additional code to set the umask and
--- 128,143 -----
Select this option by defining the TTYPERM macro as
having the desired mode.
+ Terminal Type Setup -
+ This option allows the terminal type to be set at
+ login time. The environmental variable TERM will be
+ set from the specified terminal to port mapping
+ file.
+
+ Select this option by defining the TTYTYPE macro as
+ having the value of the name of the type to port
+ mapping file.
+
File Size Setting -
This option includes code to set the user's ulimit
at login time. Additional code to set the umask and
*** config.h
--- new/config.h
**************
*** 1,5
/*
* Configuration file for login.
*/
/*
--- 1,7 -----
/*
* Configuration file for login.
+ *
+ * @(#)config.h 1.2 18:06:19 2/20/89
*/
/*
**************
*** 112,117
*/
#define TTYPERM 0600
/*
* Define QUOTAS if you want the code added in setup.c to support
--- 114,127 -----
*/
#define TTYPERM 0600
+
+ /*
+ * Define TTYTYPE to the be name of the port to terminal type
+ * mapping file. This is used to set the environmental variable
+ * "TERM" to the correct terminal type.
+ */
+
+ #define TTYTYPE "/etc/ttytype"
/*
* Define QUOTAS if you want the code added in setup.c to support
*** lmain.c
--- new/lmain.c
**************
*** 9,15
#include "lastlog.h"
#ifndef lint
! static char _sccsid[] = "@(#)lmain.c 1.2 19:00:57 2/18/89";
#endif
char name[BUFSIZ];
--- 9,15 -----
#include "lastlog.h"
#ifndef lint
! static char _sccsid[] = "@(#)lmain.c 1.3 18:06:20 2/20/89";
#endif
char name[BUFSIZ];
**************
*** 157,162
#endif
#ifdef MAILCHECK
mailcheck (); /* report on the status of mail */
#endif
signal (SIGINT, SIG_DFL); /* default interrupt signal */
signal (SIGQUIT, SIG_DFL); /* default quit signal */
--- 157,165 -----
#endif
#ifdef MAILCHECK
mailcheck (); /* report on the status of mail */
+ #endif
+ #ifdef TTYTYPE
+ ttytype (utent.ut_line);
#endif
signal (SIGINT, SIG_DFL); /* default interrupt signal */
signal (SIGQUIT, SIG_DFL); /* default quit signal */
*** ttytype.c
--- new/ttytype.c
**************
*** 0
--- 1,50 -----
+ #include <stdio.h>
+ #include <string.h>
+ #include "config.h"
+
+ #ifdef TTYTYPE
+ #ifndef lint
+ static char _sccsid[] = "@(#)ttytype.c 1.1 15:31:54 2/19/89";
+ #endif
+
+ /*
+ * ttytype - set ttytype from port to terminal type mapping database
+ */
+
+ void ttytype (line)
+ char *line;
+ {
+ FILE *fp;
+ char buf[BUFSIZ];
+ char termvar[BUFSIZ];
+ char *cp;
+ char *type;
+ char *port;
+ char *getenv ();
+
+ if (getenv ("TERM"))
+ return;
+
+ if (! (fp = fopen (TTYTYPE, "r")))
+ return;
+
+ while (fgets (buf, BUFSIZ, fp)) {
+ if (buf[0] == '#')
+ continue;
+
+ if (cp = strchr (buf, '\n'))
+ *cp = '\0';
+
+ if ((type = strtok (buf, " \t"))
+ && (port = strtok ((char *) 0, " \t"))) {
+ if (strcmp (line, port) == 0)
+ break;
+ }
+ }
+ if (! feof (fp) && ! ferror (fp)) {
+ strcat (strcpy (termvar, "TERM="), type);
+ addenv (termvar);
+ }
+ fclose (fp);
+ }
+ #endif
*** log.c
--- new/log.c
**************
*** 7,13
#include "config.h"
#ifndef lint
! static char _sccsid[] = "@(#)log.c 1.2 13:59:29 2/5/89";
#endif
#ifdef LASTLOG
--- 7,13 -----
#include "config.h"
#ifndef lint
! static char _sccsid[] = "@(#)log.c 1.3 19:00:07 2/21/89";
#endif
#ifdef LASTLOG
**************
*** 33,39
offset = pwent.pw_uid * sizeof lastlog;
! if (lseek (fd, offset, 0) != offset)
return;
if (read (fd, (char *) &lastlog, sizeof lastlog) != sizeof lastlog)
--- 33,40 -----
offset = pwent.pw_uid * sizeof lastlog;
! if (lseek (fd, offset, 0) != offset) {
! (void) close (fd);
return;
}
if (read (fd, (char *) &lastlog, sizeof lastlog) != sizeof lastlog)
**************
*** 35,41
if (lseek (fd, offset, 0) != offset)
return;
!
if (read (fd, (char *) &lastlog, sizeof lastlog) != sizeof lastlog)
memset ((char *) &lastlog, sizeof lastlog, 0);
--- 36,42 -----
if (lseek (fd, offset, 0) != offset) {
(void) close (fd);
return;
! }
if (read (fd, (char *) &lastlog, sizeof lastlog) != sizeof lastlog)
memset ((char *) &lastlog, sizeof lastlog, 0);
*** password.c
--- new/password.c
**************
*** 12,17
* on failure.
*/
int password (prompt, pass)
char *prompt;
char *pass;
--- 12,21 -----
* on failure.
*/
+ #ifndef lint
+ static char _sccsid[] = "@(#)password.c 1.2 19:00:10 2/21/89";
+ #endif
+
int password (prompt, pass)
char *prompt;
char *pass;
**************
*** 17,22
char *pass;
{
char buf[BUFSIZ];
int eof;
int ttyopened = 0;
struct termio termio;
--- 21,27 -----
char *pass;
{
char buf[BUFSIZ];
+ char *cp;
int eof;
int ttyopened = 0;
struct termio termio;
**************
*** 36,42
ioctl (fileno (fp), TCSETAF, &termio);
fputs (prompt, stdout);
! eof = gets (buf) == (char *) 0 || feof (fp) || ferror (fp);
putchar ('\n');
ioctl (fileno (fp), TCSETAF, &save);
--- 41,47 -----
ioctl (fileno (fp), TCSETAF, &termio);
fputs (prompt, stdout);
! eof = fgets (buf, s, BUFSIZ) == (char *) 0 || feof (fp) || ferror (fp);
putchar ('\n');
ioctl (fileno (fp), TCSETAF, &save);
**************
*** 43,48
if (! eof) {
buf[8] = '\0';
(void) strcpy (pass, buf);
}
if (ttyopened)
--- 48,56 -----
if (! eof) {
buf[8] = '\0';
+ if ((cp = strchr (buf, '\n')) || (cp = strchr (buf, '\r')))
+ *cp = '\0';
+
(void) strcpy (pass, buf);
}
if (ttyopened)
*** shadow.h
--- new/shadow.h
**************
*** 1,6
/*
* This information is not derived from AT&T licensed sources. Posted
* to the USENET 11/88.
*/
/*
--- 1,8 -----
/*
* This information is not derived from AT&T licensed sources. Posted
* to the USENET 11/88.
+ *
+ * @(#)shadow.h 1.2 19:00:11 2/21/89
*/
/*
**************
*** 11,18
char *sp_namp; /* login name */
char *sp_pwdp; /* encrypted password */
long sp_lstchg; /* date of last change */
! int sp_max; /* maximum number of days between changes */
! int sp_min; /* minimum number of days between changes */
};
/*
--- 13,20 -----
char *sp_namp; /* login name */
char *sp_pwdp; /* encrypted password */
long sp_lstchg; /* date of last change */
! long sp_max; /* maximum number of days between changes */
! long sp_min; /* minimum number of days between changes */
};
/*
--
John F. Haugh II +--Quote of the Week:------------------
VoiceNet: (214) 250-3311 Data: -6272 | "If I do not want others to quote me,
InterNet: jfh at rpp386.Dallas.TX.US | I do not speak." -- Phil Wayne
UucpNet : <backbone>!killer!rpp386!jfh +--------------------------------------
More information about the Comp.sources.bugs
mailing list