* Modify pty_update_utmp so it takes additional parameters instead of
authorSam Hartman <hartmans@mit.edu>
Mon, 7 Aug 1995 23:58:26 +0000 (23:58 +0000)
committerSam Hartman <hartmans@mit.edu>
Mon, 7 Aug 1995 23:58:26 +0000 (23:58 +0000)
struct utmp.
* Move pty_update_wtmp to an internal function; pty_update_utmp and
pty_logwtmp call it.
* Don't include utmp.h or utmpx.h in libpty.h; they don't need it any
more.
* Don't use pid_t in libpty.h or any interfaces it defines\.  We'll
have to settle for int.
* Add logic so that UTMP_FILE and WTMP_FILE get defined on NetBSD
(Actually fairly clean).

git-svn-id: svn://anonsvn.mit.edu/krb5/trunk@6453 dc483132-0cff-0310-8789-dd5450dbe970

src/util/pty/ChangeLog
src/util/pty/cleanup.c
src/util/pty/libpty.h
src/util/pty/logwtmp.c
src/util/pty/pty-int.h
src/util/pty/pty_err.et
src/util/pty/update_utmp.c
src/util/pty/update_wtmp.c

index 02566df73a60f970f709db75cff9dfb657b6c0d8..a893b5e0665ccafc792e02c657e8318e69cafcd1 100644 (file)
@@ -1,3 +1,19 @@
+Mon Aug  7 17:41:39 1995  Sam Hartman  <hartmans@tertius.mit.edu>
+
+       * cleanup.c (pty_cleanup): Call pty_update_utmp using new interface.
+
+       * update_utmp.c logwtmp.c : Call ptyint_update_wtmp not pty_update_wtmp.
+
+       * cleanup.c (pty_cleanup): We can't use pid_t because we need to
+        use something in libpty.h and we can't wait for pid_t to be
+        defined there because we may not have configure.
+
+       * update_wtmp.c (pty_update_wtmp): Rename to ptyint_update_wtmp.
+
+       * update_utmp.c (pty_update_utmp): Change interface so it doesn't take a struct utmp.
+
+       * libpty.h: Remove pty_update_wtmp as it's becoming  an internal interface.
+
 Sat Aug  5 01:00:35 1995  Ezra Peisach  <epeisach@kangaroo.mit.edu>
 
        * open_slave.c (pty_open_slave): pty_open_ctty returns != 0 on
index 6c40ce09470ce2cc8118f9466c20c0e1a1d73b4d..50eecc56f8aa610f76238534a33fcb5839988fb6 100644 (file)
 
 long pty_cleanup (slave, pid, update_utmp)
     char *slave;
-    pid_t pid; /* May be zero for unknown.*/
+    int pid; /* May be zero for unknown.*/
     int update_utmp;
 {
-    struct utmp ut;
     int retval, fd;
     
-#ifndef NO_UT_PID
-    ut.ut_pid = 0;
-    ut.ut_type = DEAD_PROCESS;
-#endif
-    pty_update_utmp(&ut, "", slave, (char *)0);
+    pty_update_utmp(PTY_DEAD_PROCESS,0,  "", slave, (char *)0);
     
     (void)chmod(slave, 0666);
     (void)chown(slave, 0, 0);
index 07b34fc386d38e7243c8de5292cb2df35f8a8611..c90a3300e934fc1bdcad1521680fa17fc73f26f8 100644 (file)
  */
 
 #ifndef __LIBPTY_H__
-#include <sys/types.h>
-#ifdef HAVE_UTMP_H
-#include <utmp.h>
-#endif
-#ifdef HAVE_UTMPX_H
-#include <utmpx.h>
-#endif
+
+/* Constants for pty_update_utmp */
+#define PTY_LOGIN_PROCESS 0
+#define PTY_USER_PROCESS 1
+#define PTY_DEAD_PROCESS 2
 
 #ifdef __STDC__ /* use prototypes */
 
@@ -35,12 +33,11 @@ long pty_open_slave (const char *slave, int *fd);
 long pty_open_ctty (const char *slave, int *fd);
 
 long pty_initialize_slave ( int fd);
-long pty_update_utmp (struct utmp *ut, char *user, char *line, char *host);
+long pty_update_utmp (int process_type,int pid,  char *user, char *line, char *host);
 
-long pty_update_wtmp (struct utmp *ut);
 long pty_logwtmp (char *tty, char * user, char *host);
 
-long pty_cleanup(char *slave, pid_t pid, int update_utmp);
+long pty_cleanup(char *slave, int pid, int update_utmp);
 #else /*__STDC__*/
 long pty_init();
 long pty_getpty();
@@ -50,7 +47,6 @@ long pty_open_ctty();
 long pty_initialize_slave();
 
 long pty_update_utmp();
-long pty_utmp_wtmp();
 long pty_logwtmp();
 long pty_cleanup();
 #endif /* __STDC__*/
index 70b4ae6b059ef72483f873bd34cd9e8faebdd9c9..9c88d5606ed8eeda992bc1cf47c47621d26a38d1 100644 (file)
@@ -56,7 +56,7 @@ long pty_logwtmp (tty, user, host )
     strncpy(ut.ut_name, user, sizeof(ut.ut_name));
 #endif
 
-    return pty_update_wtmp(&ut);
+    return ptyint_update_wtmp(&ut);
 #endif /*HAVE_LOGWTMP*/
 }
 
index 6750792594de94cb12bf3f9202d6d22a666b95a9..2bd450c61b008396ef8e829faee2c4617982ac1f 100644 (file)
@@ -2,6 +2,13 @@
 #ifndef __PTY_INT_H__
 #include <pty_err.h>
 #include <sys/types.h>
+#ifdef HAVE_UTMP_H
+#include <utmp.h>
+#endif
+#ifdef HAVE_UTMPX_H
+#include <utmpx.h>
+#endif
+
 #ifdef HAVE_UNISTD_H
 #include <unistd.h>
 #endif
 void initialize_pty_error_table(void);
 long ptyint_void_association(void);
 long ptyint_open_ctty (char *slave, int *fd);
+long ptyint_update_wtmp (struct utmp *ut);
+
 void ptyint_vhangup(void);
 #else /*__STDC__*/
 
 long ptyint_void_association();
 void ptyint_vhangup();
 void initialize_pty_error_table();
+long ptyint_update_wtmp();
 #endif /* __STDC__*/
 
 #define __PTY_INT_H__
index 0c28dfc2dc7641742d54e3bd9a1f15a057b421f2..ac99a6df09b3d29073c7d82f6b3277fc1528c4e7 100644 (file)
@@ -41,3 +41,5 @@ error_code PTY_OPEN_SLAVE_PUSH_FAIL, "Failed to push stream on slave side of pty
 
 
 error_code PTY_OPEN_SLAVE_REVOKEFAIL, "Failed to revoke slave side of pty"
+
+error_code PTY_UPDATE_UTMP_PROCTYPE_INVALID, "bad process type passed to pty_update_utmp"
index 82c67e8b9cefe651175e5863a6f2338827c0c70e..b80d075ebfffdc47b9715eba9a84b9a5b8e3047c 100644 (file)
 #include "libpty.h"
 #include "pty-int.h"
 
-long pty_update_utmp (ent, username, line, host)
-    struct utmp *ent;
+#if !defined(UTMP_FILE) && defined(_UTMP_PATH)
+#define UTMP_FILE _UTMP_PATH
+#endif
+
+long pty_update_utmp (process_type, pid, username, line, host)
+    int process_type;
+    int pid;
     char *username, *line, *host;
 {
-#ifdef HAVE_SETUTENT
+    struct utmp ent;
+    #ifdef HAVE_SETUTENT
     struct utmp ut;
 #else
     struct stat statb;
@@ -40,41 +46,57 @@ long pty_update_utmp (ent, username, line, host)
 #endif
     int fd;
 
-    strncpy(ent->ut_line, line+sizeof("/dev/")-1, sizeof(ent->ut_line));
-    ent->ut_time = time(0);
+    strncpy(ent.ut_line, line+sizeof("/dev/")-1, sizeof(ent.ut_line));
+    ent.ut_time = time(0);
+#ifdef NO_UT_PID
+    ent.ut_pid = pid;
+    switch ( process_type ) {
+    case PTY_LOGIN_PROCESS:
+       ent . ut_type = LOGIN_PROCESS;
+       break;
+    case PTY_USER_PROCESS:
+       ent.ut_type = USER_PROCESS;
+       break;
+    case PTY_DEAD_PROCESS:
+       ent.ut_type = DEAD_PROCESS;
+       break;
+    default:
+       return PTY_UPDATE_UTMP_PROCTYPE_INVALID;
+    }
+#endif /*NO_UT_PID*/
 
 #ifndef NO_UT_HOST
     if (host)
-       strncpy(ent->ut_host, host, sizeof(ent->ut_host));
+       strncpy(ent.ut_host, host, sizeof(ent.ut_host));
     else
-       ent->ut_host[0] = '\0';
+       ent.ut_host[0] = '\0';
 #endif
 
 #ifndef NO_UT_PID
     tmpx = line + strlen(line)-1;
     if (*(tmpx-1) != '/') tmpx--; /* last two characters, unless it's a / */
     sprintf(utmp_id, "kl%s", tmpx);
-    strncpy(ent->ut_id, utmp_id, sizeof(ent->ut_id));
-    strncpy(ent->ut_user, username, sizeof(ent->ut_user));
+    strncpy(ent.ut_id, utmp_id, sizeof(ent.ut_id));
+    strncpy(ent.ut_user, username, sizeof(ent.ut_user));
 #else
-    strncpy(ent->ut_name, username, sizeof(ent->ut_name));
+    strncpy(ent.ut_name, username, sizeof(ent.ut_name));
 #endif
     
 #ifdef HAVE_SETUTENT
 
     utmpname(UTMP_FILE);
     setutent();
-    pututline(ent);
+    pututline(&ent);
     endutent();
 
 #if 0
     /* XXX -- NOT NEEDED ANYMORE */
 
-    if (ent->ut_type == DEAD_PROCESS) {
+    if (ent.ut_type == DEAD_PROCESS) {
        if ((fd = open(UTMP_FILE, O_RDWR)) >= 0) {
            int cnt = 0;
            while(read(fd, (char *)&ut, sizeof(ut)) == sizeof(ut)) {
-               if (!strncmp(ut.ut_id, ent->ut_id, sizeof(ut.ut_id))) {
+               if (!strncmp(ut.ut_id, ent.ut_id, sizeof(ut.ut_id))) {
                    (void) memset(ut.ut_host, 0, sizeof(ut.ut_host));
                    (void) memset(ut.ut_user, 0, sizeof(ut.ut_user));
                    (void) time(&ut.ut_time);
@@ -108,5 +130,5 @@ long pty_update_utmp (ent, username, line, host)
 
 #endif /* HAVE_SETUTENT */
 
-    return pty_update_wtmp(ent);
+    return ptyint_update_wtmp(&ent);
 }
index 8f7a3c41920b49286681a856f13f601b8191f476..0c07023bf3fb5b00ee06a5f3f9c503b15a1b8e8e 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * pty_update_utmp: Update or create a utmp entry
+ * ptyint_update_utmp: Update or create a utmp entry
  *
  * Copyright 1995 by the Massachusetts Institute of Technology.
  *
 #include "libpty.h"
 #include "pty-int.h"
 
-long pty_update_wtmp (ent)
+#if !defined(WTMP_FILE) && defined(_PATH_WTMP)
+#define WTMP_FILE _PATH_WTMP
+#endif
+
+long ptyint_update_wtmp (ent)
     struct utmp *ent;
     {
     struct utmp ut;