diff --git a/configure.ac b/configure.ac index 8d339beb5..244df4279 100644 --- a/configure.ac +++ b/configure.ac @@ -90,6 +90,7 @@ ac_cv_uname_m=`uname -m` ac_cv_uname_s=`uname -s` ac_cv_uname_r=`uname -r` ac_cv_uname_v=`uname -v` +ac_cv_uname_o=`uname -o` PKG_ARCH=`uname -p` REV_DATESTAMP=`date '+%Y.%m.%d.%H.%M'` @@ -238,7 +239,7 @@ if test "$ac_cv_lib_crypt_main" = "yes" -a "x$PGSQL" != "xno"; then else AC_SUBST(PGLIBS) AC_SUBST(PGINCLUDE) - EXTRAS="$EXTRAS check_pgsql" + EXTRAS="$EXTRAS check_pgsql\$(EXEEXT)" fi else AC_MSG_WARN([Skipping PostgreSQL plugin (check_pgsql)]) @@ -258,7 +259,7 @@ AS_IF([test "x$with_dbi" != "xno"], [ _SAVEDLIBS="$LIBS" AC_CHECK_LIB(dbi,dbi_initialize) if test "$ac_cv_lib_dbi_dbi_initialize" = "yes"; then - EXTRAS="$EXTRAS check_dbi" + EXTRAS="$EXTRAS check_dbi\$(EXEEXT)" DBILIBS="-ldbi" AC_SUBST(DBILIBS) else @@ -275,13 +276,13 @@ AS_IF([test "x$with_radius" != "xno"], [ _SAVEDLIBS="$LIBS" AC_CHECK_LIB(radiusclient,rc_read_config) if test "$ac_cv_lib_radiusclient_rc_read_config" = "yes"; then - EXTRAS="$EXTRAS check_radius" + EXTRAS="$EXTRAS check_radius\$(EXEEXT)" RADIUSLIBS="-lradiusclient" AC_SUBST(RADIUSLIBS) else AC_CHECK_LIB(radiusclient-ng,rc_read_config) if test "$ac_cv_lib_radiusclient_ng_rc_read_config" = "yes"; then - EXTRAS="$EXTRAS check_radius" + EXTRAS="$EXTRAS check_radius\$(EXEEXT)" RADIUSLIBS="-lradiusclient-ng" AC_SUBST(RADIUSLIBS) else @@ -304,7 +305,7 @@ AS_IF([test "x$with_ldap" != "xno"], [ AC_SUBST(LDAPLIBS) AC_SUBST(LDAPINCLUDE) AC_CHECK_FUNCS(ldap_set_option) - EXTRAS="$EXTRAS check_ldap" + EXTRAS="$EXTRAS check_ldap\$(EXEEXT)" AC_CHECK_FUNCS(ldap_init ldap_set_option ldap_get_option ldap_start_tls_s) else AC_MSG_WARN([Skipping LDAP plugin]) @@ -341,7 +342,7 @@ case $host in esac if test "$FOUNDINCLUDE" = "yes" ; then - EXTRAS="$EXTRAS check_ide_smart" + EXTRAS="$EXTRAS check_ide_smart\$(EXEEXT)" fi dnl Check for mysql libraries @@ -350,7 +351,7 @@ if test $with_mysql = "no" ; then AC_MSG_WARN([Skipping mysql plugin]) AC_MSG_WARN([install mysql client libs to compile this plugin (see REQUIREMENTS).]) else - EXTRAS="$EXTRAS check_mysql check_mysql_query" + EXTRAS="$EXTRAS check_mysql\$(EXEEXT) check_mysql_query\$(EXEEXT)" MYSQLINCLUDE="$np_mysql_include" MYSQLLIBS="$np_mysql_libs" MYSQLCFLAGS="$np_mysql_cflags" @@ -363,8 +364,16 @@ dnl Check for headers used by check_users AC_CHECK_HEADERS(utmpx.h) AM_CONDITIONAL([HAVE_UTMPX], [test "$ac_cv_header_utmpx_h" = "yes"]) +AC_CHECK_HEADERS(wtsapi32.h, [], [], [#include ]) +AM_CONDITIONAL([HAVE_WTS32API], [test "$ac_cv_header_wtsapi32_h" = "yes"]) + +if test "$ac_cv_header_wtsapi32_h" = "yes"; then + WTSAPI32LIBS="-lwtsapi32" + AC_SUBST(WTSAPI32LIBS) +fi + dnl Fallback to who(1) if the system doesn't provide an utmpx(5) interface -if test "$ac_cv_header_utmpx_h" = "no" +if test "$ac_cv_header_utmpx_h" = "no" -a "$ac_cv_header_wtsapi32_h" = "no" then AC_PATH_PROG(PATH_TO_WHO,who) @@ -652,7 +661,7 @@ elif test "$ac_cv_uname_s" = "SunOS"; then else AC_MSG_NOTICE([using 32bit pst3]) fi - EXTRAS_ROOT="$EXTRAS_ROOT pst3" + EXTRAS_ROOT="$EXTRAS_ROOT pst3\$(EXEEXT)" if test "$pst3_use_64bit" = 1; then dnl Test if we can actually compile code in 64bit @@ -977,7 +986,7 @@ if test -n "$ac_cv_ps_varlist" ; then [Format string for scanning ps output in check_procs]) AC_DEFINE_UNQUOTED(PS_COLS,$ac_cv_ps_cols, [Number of columns in ps command]) - EXTRAS="$EXTRAS check_procs check_nagios" + EXTRAS="$EXTRAS check_procs check_nagios\$(EXEEXT)" if echo "$ac_cv_ps_varlist" | grep "procetime" >/dev/null; then AC_DEFINE(PS_USES_PROCETIME,"yes", [Whether the ps utility uses the "procetime" field]) @@ -1011,6 +1020,13 @@ then ac_cv_ping_packets_first=yes fi +elif [[ "z$ac_cv_uname_o" = "zCygwin" ]] +then + with_ping_command="$PATH_TO_PING -n %d -w %d000 %s" + ac_cv_ping_packets_first=yes + ac_cv_ping_has_timeout=yes + AC_MSG_RESULT([$with_ping_command]) + elif [[ "z$ac_cv_uname_s" = "zUnixWare" ]] && \ $PATH_TO_PING -n -s 127.0.0.1 56 1 2>/dev/null | \ egrep -i "^round-trip|^rtt" >/dev/null @@ -1024,7 +1040,7 @@ elif $PATH_TO_PING -n -U -w 10 -c 1 127.0.0.1 2>/dev/null | \ then with_ping_command="$PATH_TO_PING -n -U -w %d -c %d %s" ac_cv_ping_packets_first=yes - ac_cv_ping_has_timeout=yes + ac_cv_ping_has_timeout=yes AC_MSG_RESULT([$with_ping_command]) elif $PATH_TO_PING -n -U -c 1 127.0.0.1 2>/dev/null | \ @@ -1121,7 +1137,11 @@ then then ac_cv_ping6_packets_first=yes fi - +elif [[ "z$ac_cv_uname_o" = "zCygwin" -a "x$PATH_TO_PING" != "x" ]]; then + with_ping6_command="$PATH_TO_PING -6 -n %d -w %d000 %s" + ac_cv_ping6_packets_first=yes + ac_cv_ping_has_timeout=yes + AC_MSG_RESULT([$with_ping6_command]) elif test "x$PATH_TO_PING6" != "x"; then if [[ "z$ac_cv_uname_s" = "zUnixWare" ]] && \ $PATH_TO_PING6 -n -s ::1 56 1 2>/dev/null | \ @@ -1299,7 +1319,7 @@ else fi if test -n "$ac_cv_nslookup_command"; then - EXTRAS="$EXTRAS check_dns" + EXTRAS="$EXTRAS check_dns\$(EXEEXT)" AC_DEFINE_UNQUOTED(NSLOOKUP_COMMAND,"$ac_cv_nslookup_command", [path and args for nslookup]) fi @@ -1359,7 +1379,7 @@ AC_ARG_WITH(snmpget_command, if test -n "$PATH_TO_SNMPGET" then AC_DEFINE_UNQUOTED(PATH_TO_SNMPGET,"$PATH_TO_SNMPGET",[path to snmpget binary]) - EXTRAS="$EXTRAS check_hpjd check_snmp" + EXTRAS="$EXTRAS check_hpjd check_snmp\$(EXEEXT)" else AC_MSG_WARN([Get snmpget from http://net-snmp.sourceforge.net to make check_hpjd and check_snmp plugins]) fi @@ -1391,12 +1411,12 @@ AC_ARG_WITH(qstat_command, if test -x "$PATH_TO_QUAKESTAT" then ac_cv_path_to_qstat="$PATH_TO_QUAKESTAT" - EXTRAS="$EXTRAS check_game" + EXTRAS="$EXTRAS check_game\$(EXEEXT)" elif test -n "$PATH_TO_QSTAT" then ac_cv_path_to_qstat="$PATH_TO_QSTAT" - EXTRAS="$EXTRAS check_game" + EXTRAS="$EXTRAS check_game\$(EXEEXT)" else AC_MSG_WARN([Get qstat from http://www.activesw.com/people/steve/qstat.html in order to make check_game plugin]) fi @@ -1420,7 +1440,7 @@ AC_ARG_WITH(fping6_command, if test -n "$PATH_TO_FPING" then AC_DEFINE_UNQUOTED(PATH_TO_FPING,"$PATH_TO_FPING",[path to fping]) - EXTRAS="$EXTRAS check_fping" + EXTRAS="$EXTRAS check_fping\$(EXEEXT)" if test x"$with_ipv6" != xno && test -n "$PATH_TO_FPING6"; then AC_DEFINE_UNQUOTED(PATH_TO_FPING6,"$PATH_TO_FPING6",[path to fping6]) fi @@ -1435,7 +1455,7 @@ AC_ARG_WITH(ssh_command, if test -n "$PATH_TO_SSH" then AC_DEFINE_UNQUOTED(SSH_COMMAND,"$PATH_TO_SSH",[path to ssh binary]) - EXTRAS="$EXTRAS check_by_ssh" + EXTRAS="$EXTRAS check_by_ssh\$(EXEEXT)" else AC_MSG_WARN([Get ssh in order to make check_by_ssh plugin]) fi @@ -1571,7 +1591,7 @@ AC_CHECK_MEMBERS([struct swapent.se_nblks],,,[ if test "$ac_cv_have_decl_swapctl" = "yes"; then - EXTRAS="$EXTRAS check_swap" + EXTRAS="$EXTRAS check_swap\$(EXEEXT)" AC_MSG_CHECKING([for 2-arg (SVR4) swapctl]) if test "$ac_cv_type_swaptbl_t" = "yes" -a \ "$ac_cv_type_swapent_t" = "yes"; @@ -1627,7 +1647,7 @@ dnl if test "x$ac_cv_have_swap" != "x" then AC_DEFINE(HAVE_SWAP,1,[Define if swap/swapinfo command is found]) - EXTRAS="$EXTRAS check_swap" + EXTRAS="$EXTRAS check_swap\$(EXEEXT)" fi if test "x$ac_cv_swap_command" != "x" then @@ -1659,7 +1679,7 @@ fi if test -n "$ac_cv_proc_meminfo"; then AC_DEFINE(HAVE_PROC_MEMINFO,1,[Define if we have /proc/meminfo]) AC_DEFINE_UNQUOTED(PROC_MEMINFO,"$ac_cv_proc_meminfo",[path to /proc/meminfo if name changes]) - EXTRAS="$EXTRAS check_swap" + EXTRAS="$EXTRAS check_swap\$(EXEEXT)" fi AC_PATH_PROG(PATH_TO_DIG,dig) @@ -1667,7 +1687,7 @@ AC_ARG_WITH(dig_command, ACX_HELP_STRING([--with-dig-command=PATH], [Path to dig command]), PATH_TO_DIG=$withval) if test -n "$PATH_TO_DIG"; then - EXTRAS="$EXTRAS check_dig" + EXTRAS="$EXTRAS check_dig\$(EXEEXT)" AC_DEFINE_UNQUOTED(PATH_TO_DIG,"$PATH_TO_DIG",[Path to dig command, if present]) fi @@ -1679,12 +1699,12 @@ AC_ARG_WITH(apt-get_command, with_apt_get_command=$PATH_TO_APTGET) AC_DEFINE_UNQUOTED(PATH_TO_APTGET,"$PATH_TO_APTGET",[Path to apt-get command, if present]) if test -n "$PATH_TO_APTGET" ; then - EXTRAS="$EXTRAS check_apt" + EXTRAS="$EXTRAS check_apt\$(EXEEXT)" fi if test -f $srcdir/plugins/check_nt.c ; then - EXTRAS="$EXTRAS check_nt" + EXTRAS="$EXTRAS check_nt\$(EXEEXT)" fi diff --git a/plugins/Makefile.am b/plugins/Makefile.am index 6b347fe94..0ddf9bd1a 100644 --- a/plugins/Makefile.am +++ b/plugins/Makefile.am @@ -107,7 +107,7 @@ check_tcp_LDADD = $(SSLOBJS) check_time_LDADD = $(NETLIBS) check_ntp_time_LDADD = $(NETLIBS) $(MATHLIBS) check_ups_LDADD = $(NETLIBS) -check_users_LDADD = $(BASEOBJS) +check_users_LDADD = $(BASEOBJS) $(WTSAPI32LIBS) check_by_ssh_LDADD = $(NETLIBS) check_ide_smart_LDADD = $(BASEOBJS) negate_LDADD = $(BASEOBJS) diff --git a/plugins/check_disk.c b/plugins/check_disk.c index c12b5d980..925dfa82d 100644 --- a/plugins/check_disk.c +++ b/plugins/check_disk.c @@ -52,6 +52,11 @@ const char *email = "devel@monitoring-plugins.org"; #endif #include "regex.h" +#ifdef __CYGWIN__ +# include +# undef ERROR +# define ERROR -1 +#endif /* If nonzero, show inode information. */ static int inode_format = 1; @@ -175,6 +180,10 @@ main (int argc, char **argv) struct fs_usage fsp, tmpfsp; struct parameter_list *temp_list, *path; +#ifdef __CYGWIN__ + char mountdir[32]; +#endif + preamble = strdup (" - free space:"); output = strdup (""); details = strdup (""); @@ -221,7 +230,6 @@ main (int argc, char **argv) /* Process for every path in list */ for (path = path_select_list; path; path=path->name_next) { - if (verbose >= 3 && path->freespace_percent->warning != NULL && path->freespace_percent->critical != NULL) printf("Thresholds(pct) for %s warn: %f crit %f\n",path->name, path->freespace_percent->warning->end, path->freespace_percent->critical->end); @@ -234,6 +242,13 @@ main (int argc, char **argv) me = path->best_match; +#ifdef __CYGWIN__ + if (strncmp(path->name, "/cygdrive/", 10) != 0 || strlen(path->name) > 11) + continue; + snprintf(mountdir, sizeof(mountdir), "%s:\\", me->me_mountdir + 10); + if (GetDriveType(mountdir) != DRIVE_FIXED) + me->me_remote = 1; +#endif /* Filters */ /* Remove filesystems already seen */ @@ -970,6 +985,10 @@ get_stats (struct parameter_list *p, struct fs_usage *fsp) { } else { /* find all group members */ for (p_list = path_select_list; p_list; p_list=p_list->name_next) { +#ifdef __CYGWIN__ + if (strncmp(p_list->name, "/cygdrive/", 10) != 0) + continue; +#endif if (p_list->group && ! (strcmp(p_list->group, p->group))) { stat_path(p_list); get_fs_usage (p_list->best_match->me_mountdir, p_list->best_match->me_devname, &tmpfsp); diff --git a/plugins/check_ping.c b/plugins/check_ping.c index 95ac7b448..dbc5c3e49 100644 --- a/plugins/check_ping.c +++ b/plugins/check_ping.c @@ -458,7 +458,8 @@ run_ping (const char *cmd, const char *addr) (sscanf(buf,"%*d packets transmitted, %*d received, %d%% loss, time%n",&pl,&match) && match) || (sscanf(buf,"%*d packets transmitted, %*d received, %d%% packet loss, time%n",&pl,&match) && match) || (sscanf(buf,"%*d packets transmitted, %*d received, +%*d errors, %d%% packet loss%n",&pl,&match) && match) || - (sscanf(buf,"%*d packets transmitted %*d received, +%*d errors, %d%% packet loss%n",&pl,&match) && match) + (sscanf(buf,"%*d packets transmitted %*d received, +%*d errors, %d%% packet loss%n",&pl,&match) && match) || + (sscanf(buf,"%*[^(](%d%% %*[^)])%n",&pl,&match) && match) ) continue; @@ -471,7 +472,9 @@ run_ping (const char *cmd, const char *addr) (sscanf(buf,"round-trip min/avg/max/std-dev = %*f/%f/%*f/%*f%n",&rta,&match) && match) || (sscanf(buf,"round-trip (ms) min/avg/max = %*f/%f/%*f%n",&rta,&match) && match) || (sscanf(buf,"round-trip (ms) min/avg/max/stddev = %*f/%f/%*f/%*f%n",&rta,&match) && match) || - (sscanf(buf,"rtt min/avg/max/mdev = %*f/%f/%*f/%*f ms%n",&rta,&match) && match)) + (sscanf(buf,"rtt min/avg/max/mdev = %*f/%f/%*f/%*f ms%n",&rta,&match) && match) || + (sscanf(buf, "%*[^=] = %*fms, %*[^=] = %*fms, %*[^=] = %fms%n", &rta, &match) && match) + ) continue; } diff --git a/plugins/check_users.c b/plugins/check_users.c index 458a7ca64..a009f20ba 100644 --- a/plugins/check_users.c +++ b/plugins/check_users.c @@ -37,7 +37,12 @@ const char *email = "devel@monitoring-plugins.org"; #include "common.h" #include "utils.h" -#if HAVE_UTMPX_H +#if HAVE_WTSAPI32_H +# include +# include +# undef ERROR +# define ERROR -1 +#elif HAVE_UTMPX_H # include #else # include "popen.h" @@ -58,7 +63,11 @@ main (int argc, char **argv) int users = -1; int result = STATE_UNKNOWN; char *perf; -#if HAVE_UTMPX_H +#if HAVE_WTSAPI32_H + WTS_SESSION_INFO *wtsinfo; + DWORD wtscount; + DWORD index; +#elif HAVE_UTMPX_H struct utmpx *putmpx; #else char input_buffer[MAX_INPUT_BUFFER]; @@ -78,7 +87,36 @@ main (int argc, char **argv) users = 0; -#if HAVE_UTMPX_H +#if HAVE_WTSAPI32_H + if (!WTSEnumerateSessions(WTS_CURRENT_SERVER_HANDLE, + 0, 1, &wtsinfo, &wtscount)) { + printf(_("Could not enumerate RD sessions: %d\n"), GetLastError()); + return STATE_UNKNOWN; + } + + for (index = 0; index < wtscount; index++) { + LPTSTR username; + DWORD size; + int len; + + if (!WTSQuerySessionInformation(WTS_CURRENT_SERVER_HANDLE, + wtsinfo[index].SessionId, WTSUserName, &username, &size)) + continue; + + len = lstrlen(username); + + WTSFreeMemory(username); + + if (len == 0) + continue; + + if (wtsinfo[index].State == WTSActive || + wtsinfo[index].State == WTSDisconnected) + users++; + } + + WTSFreeMemory(wtsinfo); +#elif HAVE_UTMPX_H /* get currently logged users from utmpx */ setutxent ();