From 801784ae89224d004dc79af95545acbdf547ce64 Mon Sep 17 00:00:00 2001 From: Thorsten Kukuk Date: Fri, 16 Jun 2023 09:28:21 +0200 Subject: check_users: prefer systemd-logind over utmp Prefer systemd-logind over utmp to get the number of logged in users. utmp is not reliable for this (e.g. some terminals create utmp entries, other not) and utmp is not Y2038 safe with glibc on Linux. --- configure.ac | 19 +++++++++++++++++++ plugins/Makefile.am | 2 +- plugins/check_users.c | 37 +++++++++++++++++++++++++------------ po/de.po | 30 +++++++++++++++--------------- po/fr.po | 38 +++++++++++++++++++------------------- po/monitoring-plugins.pot | 30 +++++++++++++++--------------- 6 files changed, 94 insertions(+), 62 deletions(-) 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 "" -- cgit v1.2.3-74-g34f1