summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEd Schouten <ed@80386.nl>2011-06-24 15:46:43 +0200
committerAlan Coopersmith <alan.coopersmith@oracle.com>2011-06-24 20:56:32 -0700
commit301cbd433bb698147e05e7dbfb4de2ce2e0e9cbb (patch)
tree0fe15893475a400eb897104e069b53b6c390acfc
parenteb6eb771ff9f53c56bd60f28c5598eee9e2fb9b2 (diff)
Use Autoconf to check for utmp field existence.
Don't use the quirky SYSV and __QNX__ definitions to determine whether the utmp fields exist. Signed-off-by: Ed Schouten <ed@80386.nl> Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com>
-rw-r--r--configure.ac5
-rw-r--r--sessreg.c19
2 files changed, 17 insertions, 7 deletions
diff --git a/configure.ac b/configure.ac
index c7e5e90..be90cf3 100644
--- a/configure.ac
+++ b/configure.ac
@@ -44,6 +44,11 @@ XORG_WITH_LINT
AC_CHECK_HEADERS([lastlog.h utmp.h utmpx.h sys/param.h])
# Checks for typedefs, structures, and compiler characteristics.
+AC_CHECK_MEMBERS([
+ struct utmp.ut_host,
+ struct utmp.ut_id,
+ struct utmp.ut_pid,
+ struct utmp.ut_type], [], [], [#include <utmp.h>])
AC_CHECK_MEMBERS([struct utmpx.ut_syslen], [], [], [#include <utmpx.h>])
# Checks for library functions.
diff --git a/sessreg.c b/sessreg.c
index 6bd593a..9ce4653 100644
--- a/sessreg.c
+++ b/sessreg.c
@@ -399,7 +399,7 @@ set_utmp (struct utmp *u, char *line, char *user, char *host, Time_t date, int a
(void) strncpy (u->ut_name, user, sizeof (u->ut_name));
else
bzero (u->ut_name, sizeof (u->ut_name));
-#ifdef SYSV
+#ifdef HAVE_STRUCT_UTMP_UT_ID
if (line) {
int i;
/*
@@ -417,15 +417,20 @@ set_utmp (struct utmp *u, char *line, char *user, char *host, Time_t date, int a
(void) strncpy (u->ut_id, line + i, sizeof (u->ut_id));
} else
bzero (u->ut_id, sizeof (u->ut_id));
- if (addp) {
+#endif
+#ifdef HAVE_STRUCT_UTMP_UT_PID
+ if (addp)
u->ut_pid = getppid ();
- u->ut_type = USER_PROCESS;
- } else {
+ else
u->ut_pid = 0;
+#endif
+#ifdef HAVE_STRUCT_UTMP_UT_TYPE
+ if (addp)
+ u->ut_type = USER_PROCESS;
+ else
u->ut_type = DEAD_PROCESS;
- }
#endif
-#if (!defined(SYSV) && !defined(__QNX__)) || defined(linux)
+#ifdef HAVE_STRUCT_UTMP_UT_HOST
if (addp && host)
(void) strncpy (u->ut_host, host, sizeof (u->ut_host));
else
@@ -633,7 +638,7 @@ findslot (char *line_name, char *host_name, int addp, int slot)
while (read (utmp, (char *) &entry, sizeof (entry)) == sizeof (entry)) {
if (strncmp(entry.ut_line, line_name,
sizeof(entry.ut_line)) == 0
-#ifndef __QNX__
+#ifdef HAVE_STRUCT_UTMP_UT_HOST
&&
strncmp(entry.ut_host, host_name,
sizeof(entry.ut_host)) == 0