Added backwards compatibility to `users.c', so I can use `utmp' too if `utmpx' is...
authorocto <octo>
Tue, 6 Dec 2005 07:57:44 +0000 (07:57 +0000)
committerocto <octo>
Tue, 6 Dec 2005 07:57:44 +0000 (07:57 +0000)
configure.in
src/config.h.in
src/users.c
src/users.h

index ad43b17..aeda992 100644 (file)
@@ -36,6 +36,7 @@ AC_CHECK_HEADERS(netinet/in.h)
 AC_CHECK_HEADERS(netdb.h)
 AC_CHECK_HEADERS(syslog.h)
 AC_CHECK_HEADERS(dlfcn.h)
+AC_CHECK_HEADERS(utmp.h)
 AC_CHECK_HEADERS(utmpx.h)
 
 dnl Checking for libraries
@@ -54,7 +55,7 @@ AC_CHECK_FUNCS(socket, , AC_CHECK_LIB(socket, socket))
 AC_CHECK_FUNCS(gethostbyname, , AC_CHECK_LIB(nsl, gethostbyname))
 AC_CHECK_FUNCS(strchr memcpy strstr strcmp strncmp strncpy strlen)
 AC_CHECK_FUNCS(strncasecmp strcasecmp strncmp)
-AC_CHECK_FUNCS(getutxent)
+AC_CHECK_FUNCS(getutent getutxent)
 
 AC_MSG_CHECKING([for kernel type ($host_os)])
 case $host_os in
index 72bf7e2..975f16e 100644 (file)
@@ -63,6 +63,9 @@
 /* Define to 1 if you have the `gettimeofday' function. */
 #undef HAVE_GETTIMEOFDAY
 
+/* Define to 1 if you have the `getutent' function. */
+#undef HAVE_GETUTENT
+
 /* Define to 1 if you have the `getutxent' function. */
 #undef HAVE_GETUTXENT
 
 /* Define to 1 if you have the <utmpx.h> header file. */
 #undef HAVE_UTMPX_H
 
+/* Define to 1 if you have the <utmp.h> header file. */
+#undef HAVE_UTMP_H
+
 /* True if program is to be compiled for a Linux kernel */
 #undef KERNEL_LINUX
 
index 36cea0f..96cd621 100644 (file)
 #include "plugin.h"
 #include "common.h"
 
+#ifdef HAVE_UTMPX_H
 #include <utmpx.h>
+#elif defined(HAVE_UTMP_H)
+#include <utmp.h>
+#endif
 
 static char *rrd_file = "users.rrd";
 
@@ -50,6 +54,7 @@ void users_init(void)
 
 void users_read(void)
 {
+#ifdef HAVE_GETUTXENT
     unsigned int users = 0;
     struct utmpx *entry = NULL;
 
@@ -63,7 +68,25 @@ void users_read(void)
     endutxent();
 
     users_submit(users);
-    return;
+/* #endif HAVE_GETUTXENT */
+
+#elif defined(HAVE_GETUTENT)
+    unsigned int users = 0;
+    struct utmp *entry = NULL;
+
+    /* according to the *utent(3) man page none of the functions sets errno in
+     * case of an error, so we cannot do any error-checking here */
+    setutent();
+
+    while (NULL != (entry = getutent()))
+        if (USER_PROCESS == entry->ut_type)
+            ++users;
+    endutent();
+
+    users_submit(users);
+#endif
+
+       return;
 }
 
 /* I don't like this temporary macro definition - well it's used everywhere
index f8b9544..03306cf 100644 (file)
 
 #include "config.h"
 
+#if !defined(HAVE_UTMPX_H) || !defined(HAVE_GETUTXENT)
+#undef HAVE_UTMPX_H
+#undef HAVE_GETUTXENT
+#endif
+
+#if !defined(HAVE_UTMP_H) || !defined(HAVE_GETUTENT)
+#undef HAVE_UTMPX_H
+#undef HAVE_GETUTXENT
+#endif
+
 #ifndef COLLECT_USERS
-#if defined(HAVE_UTMPX_H) && defined(HAVE_GETUTXENT)
+#if defined(HAVE_UTMPX_H) || defined(HAVE_UTMP_H)
 #define COLLECT_USERS 1
 #else
 #define COLLECT_USERS 0
@@ -40,7 +50,5 @@ void users_read(void);
 void users_submit(unsigned int);
 void users_write(char *, char *, char *);
 
-void module_register(void);
-
 #endif /* ! defined(USERS_H) */