diff --git a/configure.ac b/configure.ac
index 069cc625..a294b00f 100644
--- a/configure.ac
+++ b/configure.ac
@@ -328,6 +328,25 @@ AS_IF([test "x$with_ldap" != "xno"], [
LIBS="$_SAVEDLIBS"
])
+
+AC_ARG_WITH([systemd], [AS_HELP_STRING([--without-systemd], [Skips systemd support])])
+
+dnl Check for libsystemd
+AS_IF([test "x$with_systemd" != "xno"], [
+ _SAVEDLIBS="$LIBS"
+ AC_CHECK_LIB(systemd,sd_get_sessions,,,-lsystemd)
+ if test "$ac_cv_lib_systemd_sd_get_sessions" = "yes"; then
+ SYSTEMDLIBS="-lsystemd"
+ SYSTEMDINCLUDE=""
+ AC_SUBST(SYSTEMDLIBS)
+ AC_SUBST(SYSTEMDINCLUDE)
+ else
+ AC_MSG_WARN([Skipping systemd support])
+ fi
+ LIBS="$_SAVEDLIBS"
+])
+
+
dnl Check for headers used by check_ide_smart
case $host in
*linux*)
diff --git a/plugins/Makefile.am b/plugins/Makefile.am
index ab59eb73..49086b7a 100644
--- a/plugins/Makefile.am
+++ b/plugins/Makefile.am
@@ -112,7 +112,7 @@ check_tcp_LDADD = $(SSLOBJS)
check_time_LDADD = $(NETLIBS)
check_ntp_time_LDADD = $(NETLIBS) $(MATHLIBS)
check_ups_LDADD = $(NETLIBS)
-check_users_LDADD = $(BASEOBJS) $(WTSAPI32LIBS)
+check_users_LDADD = $(BASEOBJS) $(WTSAPI32LIBS) $(SYSTEMDLIBS)
check_by_ssh_LDADD = $(NETLIBS)
check_ide_smart_LDADD = $(BASEOBJS)
negate_LDADD = $(BASEOBJS)
diff --git a/plugins/check_users.c b/plugins/check_users.c
index f6f4b362..2a9ee986 100644
--- a/plugins/check_users.c
+++ b/plugins/check_users.c
@@ -1,33 +1,33 @@
/*****************************************************************************
-*
+*
* Monitoring check_users plugin
-*
+*
* License: GPL
* Copyright (c) 2000-2012 Monitoring Plugins Development Team
-*
+*
* Description:
-*
+*
* This file contains the check_users plugin
-*
+*
* This plugin checks the number of users currently logged in on the local
* system and generates an error if the number exceeds the thresholds
* specified.
-*
-*
+*
+*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
-*
+*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
-*
+*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see .
-*
-*
+*
+*
*****************************************************************************/
const char *progname = "check_users";
@@ -48,6 +48,11 @@ const char *email = "devel@monitoring-plugins.org";
# include "popen.h"
#endif
+#ifdef HAVE_LIBSYSTEMD
+#include
+#include
+#endif
+
#define possibly_set(a,b) ((a) == 0 ? (b) : 0)
int process_arguments (int, char **);
@@ -85,6 +90,11 @@ main (int argc, char **argv)
users = 0;
+#ifdef HAVE_LIBSYSTEMD
+ if (sd_booted () > 0)
+ users = sd_get_sessions (NULL);
+ else {
+#endif
#if HAVE_WTSAPI32_H
if (!WTSEnumerateSessions(WTS_CURRENT_SERVER_HANDLE,
0, 1, &wtsinfo, &wtscount)) {
@@ -156,6 +166,9 @@ main (int argc, char **argv)
if (spclose (child_process))
result = possibly_set (result, STATE_UNKNOWN);
#endif
+#ifdef HAVE_LIBSYSTEMD
+ }
+#endif
/* check the user count against warning and critical thresholds */
result = get_status((double)users, thlds);
@@ -163,7 +176,7 @@ main (int argc, char **argv)
if (result == STATE_UNKNOWN)
printf ("%s\n", _("Unable to read output"));
else {
- printf (_("USERS %s - %d users currently logged in |%s\n"),
+ printf (_("USERS %s - %d users currently logged in |%s\n"),
state_text(result), users,
sperfdata_int("users", users, "", warning_range,
critical_range, TRUE, 0, FALSE, 0));
diff --git a/po/de.po b/po/de.po
index eb0f8dff..1989dbdd 100644
--- a/po/de.po
+++ b/po/de.po
@@ -9,7 +9,7 @@ msgid ""
msgstr ""
"Project-Id-Version: nagiosplug\n"
"Report-Msgid-Bugs-To: devel@monitoring-plugins.org\n"
-"POT-Creation-Date: 2023-07-11 16:07+0200\n"
+"POT-Creation-Date: 2023-08-28 14:50+0200\n"
"PO-Revision-Date: 2004-12-23 17:46+0100\n"
"Last-Translator: <>\n"
"Language-Team: English \n"
@@ -31,7 +31,7 @@ msgstr ""
#: plugins/check_radius.c:176 plugins/check_real.c:80 plugins/check_smtp.c:146
#: plugins/check_snmp.c:248 plugins/check_ssh.c:74 plugins/check_swap.c:115
#: plugins/check_tcp.c:222 plugins/check_time.c:78 plugins/check_ups.c:122
-#: plugins/check_users.c:84 plugins/negate.c:210 plugins-root/check_dhcp.c:270
+#: plugins/check_users.c:89 plugins/negate.c:210 plugins-root/check_dhcp.c:270
msgid "Could not parse arguments"
msgstr "Argumente konnten nicht ausgewertet werden"
@@ -255,7 +255,7 @@ msgstr ""
#: plugins/check_radius.c:400 plugins/check_real.c:452 plugins/check_smtp.c:891
#: plugins/check_snmp.c:1347 plugins/check_ssh.c:325 plugins/check_swap.c:607
#: plugins/check_tcp.c:710 plugins/check_time.c:371 plugins/check_ups.c:663
-#: plugins/check_users.c:262 plugins/check_ide_smart.c:606 plugins/negate.c:273
+#: plugins/check_users.c:275 plugins/check_ide_smart.c:606 plugins/negate.c:273
#: plugins/urlize.c:196 plugins-root/check_dhcp.c:1390
#: plugins-root/check_icmp.c:1633
msgid "Usage:"
@@ -892,13 +892,13 @@ msgid "of the argument with optional text"
msgstr ""
#: plugins/check_fping.c:127 plugins/check_hpjd.c:134 plugins/check_ping.c:444
-#: plugins/check_swap.c:193 plugins/check_users.c:130 plugins/urlize.c:109
+#: plugins/check_swap.c:193 plugins/check_users.c:140 plugins/urlize.c:109
#, c-format
msgid "Could not open pipe: %s\n"
msgstr "Pipe: %s konnte nicht geöffnet werden\n"
#: plugins/check_fping.c:133 plugins/check_hpjd.c:140 plugins/check_load.c:159
-#: plugins/check_swap.c:199 plugins/check_users.c:136 plugins/urlize.c:115
+#: plugins/check_swap.c:199 plugins/check_users.c:146 plugins/urlize.c:115
#, c-format
msgid "Could not open stderr for %s\n"
msgstr "Konnte stderr nicht öffnen für: %s\n"
@@ -3688,12 +3688,12 @@ msgid " %s - database %s (%f sec.)|%s\n"
msgstr ""
#: plugins/check_pgsql.c:320 plugins/check_time.c:277 plugins/check_time.c:289
-#: plugins/check_users.c:228
+#: plugins/check_users.c:241
msgid "Critical threshold must be a positive integer"
msgstr "Critical threshold muss ein positiver Integer sein"
#: plugins/check_pgsql.c:326 plugins/check_time.c:258 plugins/check_time.c:282
-#: plugins/check_users.c:226
+#: plugins/check_users.c:239
msgid "Warning threshold must be a positive integer"
msgstr "Warning threshold muss ein positiver Integer sein"
@@ -5668,26 +5668,26 @@ msgstr ""
msgid "http://www.networkupstools.org"
msgstr ""
-#: plugins/check_users.c:91
+#: plugins/check_users.c:101
#, fuzzy, c-format
msgid "Could not enumerate RD sessions: %d\n"
msgstr "Konnte·url·nicht·zuweisen\n"
-#: plugins/check_users.c:146
+#: plugins/check_users.c:156
#, c-format
msgid "# users=%d"
msgstr ""
-#: plugins/check_users.c:164
+#: plugins/check_users.c:177
msgid "Unable to read output"
msgstr ""
-#: plugins/check_users.c:166
+#: plugins/check_users.c:179
#, c-format
msgid "USERS %s - %d users currently logged in |%s\n"
msgstr ""
-#: plugins/check_users.c:241
+#: plugins/check_users.c:254
#, fuzzy
msgid "This plugin checks the number of users currently logged in on the local"
msgstr ""
@@ -5696,16 +5696,16 @@ msgstr ""
"unterschritten wird.\n"
"\n"
-#: plugins/check_users.c:242
+#: plugins/check_users.c:255
msgid ""
"system and generates an error if the number exceeds the thresholds specified."
msgstr ""
-#: plugins/check_users.c:252
+#: plugins/check_users.c:265
msgid "Set WARNING status if more than INTEGER users are logged in"
msgstr ""
-#: plugins/check_users.c:254
+#: plugins/check_users.c:267
msgid "Set CRITICAL status if more than INTEGER users are logged in"
msgstr ""
diff --git a/po/fr.po b/po/fr.po
index a20c93c1..e4dffac1 100644
--- a/po/fr.po
+++ b/po/fr.po
@@ -10,7 +10,7 @@ msgid ""
msgstr ""
"Project-Id-Version: fr\n"
"Report-Msgid-Bugs-To: devel@monitoring-plugins.org\n"
-"POT-Creation-Date: 2023-07-11 16:07+0200\n"
+"POT-Creation-Date: 2023-08-28 14:50+0200\n"
"PO-Revision-Date: 2010-04-21 23:38-0400\n"
"Last-Translator: Thomas Guyot-Sionnest \n"
"Language-Team: Nagios Plugin Development Mailing List argument with optional text"
msgstr "du paramètre avec un texte optionnel"
#: plugins/check_fping.c:127 plugins/check_hpjd.c:134 plugins/check_ping.c:444
-#: plugins/check_swap.c:193 plugins/check_users.c:130 plugins/urlize.c:109
+#: plugins/check_swap.c:193 plugins/check_users.c:140 plugins/urlize.c:109
#, c-format
msgid "Could not open pipe: %s\n"
msgstr "Impossible d'ouvrir le pipe: %s\n"
#: plugins/check_fping.c:133 plugins/check_hpjd.c:140 plugins/check_load.c:159
-#: plugins/check_swap.c:199 plugins/check_users.c:136 plugins/urlize.c:115
+#: plugins/check_swap.c:199 plugins/check_users.c:146 plugins/urlize.c:115
#, c-format
msgid "Could not open stderr for %s\n"
msgstr "Impossible d'ouvrir la sortie d'erreur standard pour %s\n"
@@ -1495,8 +1495,8 @@ msgstr ""
#, fuzzy, c-format
msgid "HTTP CRITICAL - redirection creates an infinite loop - %s://%s:%d%s%s\n"
msgstr ""
-"HTTP AVERTISSEMENT - la redirection crée une boucle infinie - %s://%s:"
-"%d%s%s\n"
+"HTTP AVERTISSEMENT - la redirection crée une boucle infinie - %s://%s:%d%s"
+"%s\n"
#: plugins/check_http.c:1630
#, c-format
@@ -3084,8 +3084,8 @@ msgstr ""
#: plugins/check_ntp_peer.c:716
msgid "Critical threshold for number of usable time sources (\"truechimers\")"
msgstr ""
-"Seuil critique pour le nombre de sources de temps utilisable "
-"(\"truechimers\")"
+"Seuil critique pour le nombre de sources de temps utilisable (\"truechimers"
+"\")"
#: plugins/check_ntp_peer.c:721
msgid "This plugin checks an NTP server independent of any commandline"
@@ -3751,12 +3751,12 @@ msgid " %s - database %s (%f sec.)|%s\n"
msgstr " %s - base de données %s (%d sec.)|%s\n"
#: plugins/check_pgsql.c:320 plugins/check_time.c:277 plugins/check_time.c:289
-#: plugins/check_users.c:228
+#: plugins/check_users.c:241
msgid "Critical threshold must be a positive integer"
msgstr "Le seuil critique doit être un entier positif"
#: plugins/check_pgsql.c:326 plugins/check_time.c:258 plugins/check_time.c:282
-#: plugins/check_users.c:226
+#: plugins/check_users.c:239
msgid "Warning threshold must be a positive integer"
msgstr "Le seuil d'avertissement doit être un entier positif"
@@ -5774,43 +5774,43 @@ msgstr ""
msgid "http://www.networkupstools.org"
msgstr ""
-#: plugins/check_users.c:91
+#: plugins/check_users.c:101
#, fuzzy, c-format
msgid "Could not enumerate RD sessions: %d\n"
msgstr "Impossible d'utiliser le protocole version %d\n"
-#: plugins/check_users.c:146
+#: plugins/check_users.c:156
#, c-format
msgid "# users=%d"
msgstr "# utilisateurs=%d"
-#: plugins/check_users.c:164
+#: plugins/check_users.c:177
msgid "Unable to read output"
msgstr "Impossible de lire les données en entrée"
-#: plugins/check_users.c:166
+#: plugins/check_users.c:179
#, c-format
msgid "USERS %s - %d users currently logged in |%s\n"
msgstr "UTILISATEURS %s - %d utilisateurs actuellement connectés sur |%s\n"
-#: plugins/check_users.c:241
+#: plugins/check_users.c:254
msgid "This plugin checks the number of users currently logged in on the local"
msgstr ""
"Ce plugin vérifie le nombre d'utilisateurs actuellement connecté sur le "
"système local"
-#: plugins/check_users.c:242
+#: plugins/check_users.c:255
msgid ""
"system and generates an error if the number exceeds the thresholds specified."
msgstr "et génère une erreur si le nombre excède le seuil spécifié."
-#: plugins/check_users.c:252
+#: plugins/check_users.c:265
msgid "Set WARNING status if more than INTEGER users are logged in"
msgstr ""
"Sortir avec un résultat AVERTISSEMENT si plus de INTEGER utilisateurs sont "
"connectés"
-#: plugins/check_users.c:254
+#: plugins/check_users.c:267
msgid "Set CRITICAL status if more than INTEGER users are logged in"
msgstr ""
"Sortir avec un résultat CRITIQUE si plus de INTEGER utilisateurs sont "
diff --git a/po/monitoring-plugins.pot b/po/monitoring-plugins.pot
index 4f6b2418..012967d4 100644
--- a/po/monitoring-plugins.pot
+++ b/po/monitoring-plugins.pot
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: devel@monitoring-plugins.org\n"
-"POT-Creation-Date: 2023-07-11 16:07+0200\n"
+"POT-Creation-Date: 2023-08-28 14:50+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME \n"
"Language-Team: LANGUAGE \n"
@@ -30,7 +30,7 @@ msgstr ""
#: plugins/check_radius.c:176 plugins/check_real.c:80 plugins/check_smtp.c:146
#: plugins/check_snmp.c:248 plugins/check_ssh.c:74 plugins/check_swap.c:115
#: plugins/check_tcp.c:222 plugins/check_time.c:78 plugins/check_ups.c:122
-#: plugins/check_users.c:84 plugins/negate.c:210 plugins-root/check_dhcp.c:270
+#: plugins/check_users.c:89 plugins/negate.c:210 plugins-root/check_dhcp.c:270
msgid "Could not parse arguments"
msgstr ""
@@ -246,7 +246,7 @@ msgstr ""
#: plugins/check_radius.c:400 plugins/check_real.c:452 plugins/check_smtp.c:891
#: plugins/check_snmp.c:1347 plugins/check_ssh.c:325 plugins/check_swap.c:607
#: plugins/check_tcp.c:710 plugins/check_time.c:371 plugins/check_ups.c:663
-#: plugins/check_users.c:262 plugins/check_ide_smart.c:606 plugins/negate.c:273
+#: plugins/check_users.c:275 plugins/check_ide_smart.c:606 plugins/negate.c:273
#: plugins/urlize.c:196 plugins-root/check_dhcp.c:1390
#: plugins-root/check_icmp.c:1633
msgid "Usage:"
@@ -870,13 +870,13 @@ msgid "of the argument with optional text"
msgstr ""
#: plugins/check_fping.c:127 plugins/check_hpjd.c:134 plugins/check_ping.c:444
-#: plugins/check_swap.c:193 plugins/check_users.c:130 plugins/urlize.c:109
+#: plugins/check_swap.c:193 plugins/check_users.c:140 plugins/urlize.c:109
#, c-format
msgid "Could not open pipe: %s\n"
msgstr ""
#: plugins/check_fping.c:133 plugins/check_hpjd.c:140 plugins/check_load.c:159
-#: plugins/check_swap.c:199 plugins/check_users.c:136 plugins/urlize.c:115
+#: plugins/check_swap.c:199 plugins/check_users.c:146 plugins/urlize.c:115
#, c-format
msgid "Could not open stderr for %s\n"
msgstr ""
@@ -3592,12 +3592,12 @@ msgid " %s - database %s (%f sec.)|%s\n"
msgstr ""
#: plugins/check_pgsql.c:320 plugins/check_time.c:277 plugins/check_time.c:289
-#: plugins/check_users.c:228
+#: plugins/check_users.c:241
msgid "Critical threshold must be a positive integer"
msgstr ""
#: plugins/check_pgsql.c:326 plugins/check_time.c:258 plugins/check_time.c:282
-#: plugins/check_users.c:226
+#: plugins/check_users.c:239
msgid "Warning threshold must be a positive integer"
msgstr ""
@@ -5513,39 +5513,39 @@ msgstr ""
msgid "http://www.networkupstools.org"
msgstr ""
-#: plugins/check_users.c:91
+#: plugins/check_users.c:101
#, c-format
msgid "Could not enumerate RD sessions: %d\n"
msgstr ""
-#: plugins/check_users.c:146
+#: plugins/check_users.c:156
#, c-format
msgid "# users=%d"
msgstr ""
-#: plugins/check_users.c:164
+#: plugins/check_users.c:177
msgid "Unable to read output"
msgstr ""
-#: plugins/check_users.c:166
+#: plugins/check_users.c:179
#, c-format
msgid "USERS %s - %d users currently logged in |%s\n"
msgstr ""
-#: plugins/check_users.c:241
+#: plugins/check_users.c:254
msgid "This plugin checks the number of users currently logged in on the local"
msgstr ""
-#: plugins/check_users.c:242
+#: plugins/check_users.c:255
msgid ""
"system and generates an error if the number exceeds the thresholds specified."
msgstr ""
-#: plugins/check_users.c:252
+#: plugins/check_users.c:265
msgid "Set WARNING status if more than INTEGER users are logged in"
msgstr ""
-#: plugins/check_users.c:254
+#: plugins/check_users.c:267
msgid "Set CRITICAL status if more than INTEGER users are logged in"
msgstr ""