Fixup getty, login, etc so the utmp and wtmp are updated, allowing
authorEric Andersen <andersen@codepoet.org>
Fri, 30 Jul 2004 17:24:47 +0000 (17:24 -0000)
committerEric Andersen <andersen@codepoet.org>
Fri, 30 Jul 2004 17:24:47 +0000 (17:24 -0000)
the 'who' and 'last' applets among other things to work as expected.
 -Erik

coreutils/Config.in
loginutils/Config.in
loginutils/getty.c
loginutils/login.c
miscutils/Config.in

index 5c0180a5e184ab284415f203c6c7438c4c623494..c995e55ff07dd397b18e9fc98a39eb92260ac6d8 100644 (file)
@@ -538,6 +538,7 @@ config CONFIG_WC
 config CONFIG_WHO
        bool "who"
        default n
+       select CONFIG_FEATURE_U_W_TMP
        help
          who is used to show who is logged on.
 
index db038abb0d59db8a956cd19d1a4f6473739f8165..d9938b066ff22b6d2f46d025045aee1cd6ea3638 100644 (file)
@@ -57,6 +57,15 @@ config CONFIG_GETTY
        help
          getty lets you log in on a tty, it is normally invoked by init.
 
+config CONFIG_FEATURE_U_W_TMP
+       bool "  Support utmp and wtmp files"
+       depends on CONFIG_GETTY || CONFIG_LOGIN || CONFIG_SU || CONFIG_WHO || CONFIG_LAST
+       default n
+       help
+         The files /var/run/utmp and /var/run/wtmp can be used to track when
+         user's have logged into and logged out of the system, allowing programs
+         such as 'who' and 'last' to list who is currently logged in.
+
 config CONFIG_LOGIN
        bool "login"
        default n
index b211733eed34bd69e6646c12b387d052907f245b..2b37136fea27358a0e55491e84f5e21a5de79125 100644 (file)
@@ -228,7 +228,7 @@ static void termio_final(struct options *op, struct termio *tp,
 
                                  struct chardata *cp);
 static int caps_lock(const char *s);
-static int bcode(const char *s);
+static int bcode(char *s);
 static void error(const char *fmt, ...) __attribute__ ((noreturn));
 
 #ifdef CONFIG_FEATURE_U_W_TMP
@@ -503,6 +503,9 @@ static void update_utmp(char *line)
         * utmp file can be opened for update, and if we are able to find our
         * entry in the utmp file.
         */
+       if (access(_PATH_UTMP, R_OK|W_OK) == -1) {
+               creat(_PATH_UTMP, O_RDWR);
+       }
        utmpname(_PATH_UTMP);
        setutent();
        while ((utp = getutent())
@@ -531,6 +534,9 @@ static void update_utmp(char *line)
        endutent();
 
        {
+               if (access(_PATH_WTMP, R_OK|W_OK) == -1) {
+                       creat(_PATH_WTMP, O_RDWR);
+               }
                updwtmp(_PATH_WTMP, &ut);
        }
 }
@@ -953,7 +959,7 @@ static int caps_lock(const char *s)
 }
 
 /* bcode - convert speed string to speed code; return 0 on failure */
-static int bcode(const char *s)
+static int bcode(char *s)
 {
        int r;
        unsigned long value;
index 20fab0753d690fbdd26ed37d37934d267f12c072..93d81d3144300ca1504ad033bf24e78dfa47d99a 100644 (file)
@@ -403,8 +403,6 @@ static void motd ( )
 #ifdef CONFIG_FEATURE_U_W_TMP
 // vv  Taken from tinylogin utmp.c  vv
 
-#define _WTMP_FILE "/var/log/wtmp"
-
 #define        NO_UTENT \
        "No utmp entry.  You must exec \"login\" from the lowest level \"sh\""
 #define        NO_TTY \
@@ -480,6 +478,9 @@ static void setutmp(const char *name, const char *line)
        setutent();
        pututline(&utent);
        endutent();
-       updwtmp(_WTMP_FILE, &utent);
+       if (access(_PATH_WTMP, R_OK|W_OK) == -1) {
+               creat(_PATH_WTMP, O_RDWR);
+       }
+       updwtmp(_PATH_WTMP, &utent);
 }
 #endif /* CONFIG_FEATURE_U_W_TMP */
index ded26b3a81d7fd4c4cf0ed761c947fa22279d35a..3c92c467476f59fcdc45786ce4fe058fbf073d80 100644 (file)
@@ -83,6 +83,7 @@ config CONFIG_DEVFSD_VERBOSE
 config CONFIG_LAST
        bool "last"
        default n
+       select CONFIG_FEATURE_U_W_TMP
        help
          'last' displays a list of the last users that logged into the system.