[2.1.1p4] utmp patch for SunOS 4.1.x

Ben Lindstrom mouring at pconline.com
Wed Aug 2 04:13:54 EST 2000


It has the NeXT seal of approval. =)  That makes a few anonying warnings
and readpass.c ctrl-Z/Ctrl-C fix left on the NeXT side of the house
to be a clean port.

My suggestion is to remove the "defined(SUNOS4)" in the loginrec.c and
let it just depend on the existance of HAVE_GETTYENT unless that distrupts
other ports.



On Tue, 1 Aug 2000, Nate Itkin wrote:

> Follow-on to Charles Levert's <charles at comm.polymtl.ca> work on
> utmp_write_direct.
> 
> Fixed:
> 
>   -- At logout, the utmp entry is cleared.   Tested on SunOS 4.1.4. 
>      The code I added to loginrec.c is restricted to SUNOS4 pending 
>      QA testing on other platforms.
> 
>      This patch incorporates the work done by Charles Levert on 
>      7/25/2000 00:43:22.   (Do any of us sleep at night?)
> 
> Remaining:
> 
>   -- Test on NeXT and other operating systems that need utmp_write_direct
>      (those without entutent, getutent, getutid, getutline, ...)  If 
>      successful, the SUNOS4 restriction could be removed and the FIXME
>      can be eliminated.  If not, similar code will need to be added 
>      to support those operating systems.
> 
>   -- In the unlikely case that other operating systems have prereqs. 
>      for ttyent.h, those .h files will need to be added to configure.in,
>      includes.h, and config.h.in.
>      
> Install:  (prereq:  GNU autoconf and Larry Wall's patch)
> 
>   o  save attached context diffs to "patchfile"
> 
>      -- patch < patchfile            (apply patch to 2.1.1p4 release)
>      -- autoconf                     (generate configure, config.h, etc.)
> 
>   o  follow ssh install docs.  In a nutshell,
> 
>      -- configure                    
>      -- gmake
>      -- gmake install
> 
> -- 
> - Nate Itkin
> - Nate.Itkin at europa.com
> - "Looking for an off-ramp on the Information Superhighway"
> 
> --------------------- cut-here --------------------- 
> 
> *** config.h.in.orig	Mon Jul 31 10:06:48 2000
> --- config.h.in	Mon Jul 31 10:10:36 2000
> ***************
> *** 297,302 ****
> --- 297,305 ----
>   /* Define if you have the getutxline function.  */
>   #undef HAVE_GETUTXLINE
>   
> + /* Define if you have the getttyent function.  */
> + #undef HAVE_GETTTYENT
> + 
>   /* Define if you have the inet_aton function.  */
>   #undef HAVE_INET_ATON
>   
> ***************
> *** 482,487 ****
> --- 485,493 ----
>   
>   /* Define if you have the <time.h> header file.  */
>   #undef HAVE_TIME_H
> + 
> + /* Define if you have the <ttyent.h> header file.  */
> + #undef HAVE_TTYENT_H
>   
>   /* Define if you have the <usersec.h> header file.  */
>   #undef HAVE_USERSEC_H
> *** configure.in.orig	Fri Jul 14 21:59:14 2000
> --- configure.in	Mon Jul 31 23:44:12 2000
> ***************
> *** 137,142 ****
> --- 137,147 ----
>   *-*-sunos4*)
>   	CFLAGS="$CFLAGS -DSUNOS4"
>   	AC_CHECK_FUNCS(getpwanam)
> +         conf_utmp_location=/etc/utmp
> +         conf_wtmp_location=/var/adm/wtmp
> +         conf_lastlog_location=/var/adm/lastlog
> +         MANTYPE='$(CATMAN)'
> +         mansubdir=cat
>   	;;
>   *-sni-sysv*)
>   	CFLAGS="$CFLAGS -I/usr/local/include"
> ***************
> *** 216,225 ****
>   fi
>   
>   # Checks for header files.
> ! AC_CHECK_HEADERS(bstring.h endian.h floatingpoint.h lastlog.h limits.h login.h maillock.h netdb.h netgroup.h netinet/in_systm.h paths.h poll.h pty.h shadow.h security/pam_appl.h sys/bitypes.h sys/bsdtty.h sys/cdefs.h sys/poll.h sys/select.h sys/stat.h sys/stropts.h sys/sysmacros.h sys/time.h sys/ttcompat.h stddef.h time.h usersec.h util.h utmp.h utmpx.h)
>   
>   # Checks for library functions.
> ! AC_CHECK_FUNCS(arc4random atexit b64_ntop bcopy bindresvport_af clock freeaddrinfo gai_strerror getaddrinfo getnameinfo getrusage inet_aton innetgr md5_crypt memmove mkdtemp on_exit openpty rresvport_af setenv seteuid setlogin setproctitle setreuid sigaction sigvec snprintf strerror strlcat strlcpy strsep vsnprintf vhangup _getpty __b64_ntop)
>   dnl    checks for time functions
>   AC_CHECK_FUNCS(gettimeofday time)
>   dnl    checks for libutil functions
> --- 221,230 ----
>   fi
>   
>   # Checks for header files.
> ! AC_CHECK_HEADERS(bstring.h endian.h floatingpoint.h lastlog.h limits.h login.h maillock.h netdb.h netgroup.h netinet/in_systm.h paths.h poll.h pty.h shadow.h security/pam_appl.h sys/bitypes.h sys/bsdtty.h sys/cdefs.h sys/poll.h sys/select.h sys/stat.h sys/stropts.h sys/sysmacros.h sys/time.h sys/ttcompat.h stddef.h time.h ttyent.h usersec.h util.h utmp.h utmpx.h)
>   
>   # Checks for library functions.
> ! AC_CHECK_FUNCS(arc4random atexit b64_ntop bcopy bindresvport_af clock freeaddrinfo gai_strerror getaddrinfo getnameinfo getrusage getttyent inet_aton innetgr md5_crypt memmove mkdtemp on_exit openpty rresvport_af setenv seteuid setlogin setproctitle setreuid sigaction sigvec snprintf strerror strlcat strlcpy strsep vsnprintf vhangup _getpty __b64_ntop)
>   dnl    checks for time functions
>   AC_CHECK_FUNCS(gettimeofday time)
>   dnl    checks for libutil functions
> *** defines.h.orig	Thu Jun 22 15:23:34 2000
> --- defines.h	Tue Aug  1 00:33:17 2000
> ***************
> *** 329,346 ****
>   #endif
>   
>   /* FIXME: put default paths back in */
> ! #if !defined(UTMP_FILE) && defined(_PATH_UTMP)
> ! #  define UTMP_FILE _PATH_UTMP
>   #endif
> ! #if !defined(WTMP_FILE) && defined(_PATH_WTMP)
> ! #  define WTMP_FILE _PATH_WTMP
>   #endif
>   /* pick up the user's location for lastlog if given */
> ! #if !defined(LASTLOG_FILE) && defined(_PATH_LASTLOG)
> ! #  define LASTLOG_FILE _PATH_LASTLOG
> ! #endif
> ! #if !defined(LASTLOG_FILE) && defined(CONF_LASTLOG_FILE)
> ! #  define LASTLOG_FILE CONF_LASTLOG_FILE
>   #endif
>   
>   
> --- 329,361 ----
>   #endif
>   
>   /* FIXME: put default paths back in */
> ! #ifndef UTMP_FILE
> ! #  ifdef _PATH_UTMP
> ! #    define UTMP_FILE _PATH_UTMP
> ! #  else
> ! #    ifdef CONF_UTMP_FILE
> ! #      define UTMP_FILE CONF_UTMP_FILE
> ! #    endif
> ! #  endif
>   #endif
> ! #ifndef WTMP_FILE
> ! #  ifdef _PATH_WTMP
> ! #    define WTMP_FILE _PATH_WTMP
> ! #  else
> ! #    ifdef CONF_WTMP_FILE
> ! #      define WTMP_FILE CONF_WTMP_FILE
> ! #    endif
> ! #  endif
>   #endif
>   /* pick up the user's location for lastlog if given */
> ! #ifndef LASTLOG_FILE
> ! #  ifdef _PATH_LASTLOG
> ! #    define LASTLOG_FILE _PATH_LASTLOG
> ! #  else
> ! #    ifdef CONF_LASTLOG_FILE
> ! #      define LASTLOG_FILE CONF_LASTLOG_FILE
> ! #    endif
> ! #  endif
>   #endif
>   
>   
> *** includes.h.orig	Mon Jul 31 10:29:28 2000
> --- includes.h	Mon Jul 31 10:30:39 2000
> ***************
> *** 70,75 ****
> --- 70,78 ----
>   #ifdef HAVE_SYS_BSDTTY_H
>   # include <sys/bsdtty.h>
>   #endif
> + #ifdef HAVE_TTYENT_H
> + # include <ttyent.h>
> + #endif
>   #ifdef USE_PAM
>   # include <security/pam_appl.h>
>   #endif
> *** loginrec.c.orig	Mon Jul 10 19:15:54 2000
> --- loginrec.c	Mon Jul 31 10:37:45 2000
> ***************
> *** 723,730 ****
> --- 723,751 ----
>   	int tty;
>   
>   	/* FIXME: (ATL) ttyslot() needs local implementation */
> + 
> + #if defined(SUNOS4) && defined(HAVE_GETTTYENT)
> + 
> +         register struct ttyent *ty;
> +         tty=0;
> +         setttyent();
> +         while ((struct ttyent *)0 != (ty = getttyent())) {
> +            tty++;
> +            if(0 == strncmp(ty->ty_name,ut->ut_line,sizeof(ut->ut_line)))
> +               break;
> +         }
> +         endttyent();
> +         if((struct ttyent *)0 == ty) {
> +            log("utmp_write_entry: tty not found");
> +            return(1);
> +         }
> + 
> + #else /* FIXME */
> + 
>   	tty = ttyslot(); /* seems only to work for /dev/ttyp? style names */
>   
> + #endif /* SUNOS4 && HAVE_GETTTYENT */
> + 
>   	if (tty > 0 && (fd = open(UTMP_FILE, O_RDWR|O_CREAT, 0644)) >= 0) {
>   		(void)lseek(fd, (off_t)(tty * sizeof(struct utmp)), SEEK_SET);
>   		/*
> ***************
> *** 740,746 ****
>   		}
>   		
>   		(void)lseek(fd, (off_t)(tty * sizeof(struct utmp)), SEEK_SET);
> ! 		if (atomicio(write, fd, ut, sizeof(ut)) != sizeof(ut))
>   			log("utmp_write_direct: error writing %s: %s",
>   			    UTMP_FILE, strerror(errno));
>         
> --- 761,767 ----
>   		}
>   		
>   		(void)lseek(fd, (off_t)(tty * sizeof(struct utmp)), SEEK_SET);
> ! 		if (atomicio(write, fd, ut, sizeof(struct utmp)) != sizeof(struct utmp))
>   			log("utmp_write_direct: error writing %s: %s",
>   			    UTMP_FILE, strerror(errno));
>         
> 
> 






More information about the openssh-unix-dev mailing list