Check for getlastlogx().
authorBen Kibbey <bjk@luxsci.net>
Sat, 6 Apr 2013 17:38:59 +0000 (6 13:38 -0400)
committerBen Kibbey <bjk@luxsci.net>
Sat, 6 Apr 2013 17:38:59 +0000 (6 13:38 -0400)
Recent NetBSD releases have this.

configure.ac
src/modules/login.c
src/modules/login.h

index 07e84b7..9c99110 100644 (file)
@@ -43,7 +43,7 @@ AC_FUNC_STAT
 AC_FUNC_STRFTIME
 AC_FUNC_MMAP
 AC_CHECK_FUNCS([memset getspnam munmap setpassent setgroupent strchr strdup \
-               strerror strsep getgrent setutxent])
+               strerror strsep getgrent setutxent getlastlogx])
 AC_CHECK_FUNC([__progname])
 
 # Test for struct passwd members.
index 4a80394..3d744a6 100644 (file)
@@ -381,6 +381,22 @@ static void last_strings(char *str)
 }
 
 /* Get the lastlog structure from the lastlog file. */
+#ifdef HAVE_GETLASTLOGX
+static char *lastlogin(const struct passwd *pw, char *tf)
+{
+    struct lastlogx *last =  getlastlogx(_PATH_LASTLOGX, pw->pw_uid, NULL);
+    static char buf[LINE_MAX];
+
+    if (!last)
+       return NULL;
+
+    snprintf(buf, sizeof(buf), "%s,%s,%s",
+       !last->ll_line[0] ? "!" : last->ll_line,
+       (!last->ll_host[0] || !isalnum(last->ll_host[0])) ?  "-" : last->ll_host,
+       stamp(last->ll_tv.tv_sec, tf));
+    return buf;
+}
+#else
 #if __FreeBSD_version >= 900000
 static char *lastlogin(const struct passwd *pw, char *tf)
 {
@@ -458,6 +474,7 @@ static char *lastlogin(const struct passwd *pw, char *tf)
     return buf;
 }
 #endif
+#endif
 
 /* This will return an array of utmp structures if a user is logged in, NULL
  * otherwise. We'll try to keep the utmp file descriptor open if possible to
index dbab0a0..62fd20b 100644 (file)
 #define UT_HOSTSIZE 256
 #define UT_LINESIZE 32
 #define UT_NAMESIZE 32
+#ifndef UTX_NAMESIZE
+#ifdef UTX_USERSIZE
+#define UTX_NAMESIZE UTX_USERSIZE
+#endif
+#endif
 #endif
 typedef struct utmpx UTMP;
 #else