[Nagiosplug-devel] check_ups causes disconnect errors (nagios-plugins-HEAD-200612091252)

sean finney seanius at seanius.net
Mon Dec 11 10:08:12 CET 2006


hi ric,

thanks for the info.  i've been aware of this problem for a bit via the
debian bts, but the original patch i was given caused more problems than
it solved.  this patch looks much better, i'll check it out.


thanks,
	sean

On Sat, 2006-12-09 at 08:31 -0700, Ric Anderson wrote:
> When check_ups (either the one from plugins 1.4.3, or the one from
> nagios-plugins-HEAD-200612091252) is used, NUT's upsd logs
>  Dec  9 08:06:22 moose upsd[5136]: Host 127.0.0.1 disconnected (read failure)
> This is because of a protocol botch in talking to upsd, which expects
> to get a "LOGOUT\n" before the socket is closed.  check_ups uses the
> normal process_tcp_request which doesn't send the "LOGOUT\n", but
> does close the socket.
> 
> The patch below is based on
>   nagios-plugins-HEAD-200612091252/plugins/check_ups.c
> and fixes this problem by having check_ups do a little more work itself.
> 
> FWIW,
> Ric
> --
> --- check_ups.c.orig	2006-10-19 16:53:28.000000000 -0700
> +++ check_ups.c	2006-12-09 08:26:03.000000000 -0700
> @@ -98,6 +98,8 @@
>  int get_ups_variable (const char *, char *, size_t);
>  
>  int process_arguments (int, char **);
> +int talk2nut( const char *, int , const char *, char *, int);
> +
>  int validate_arguments (void);
>  void print_help (void);
>  void print_usage (void);
> @@ -405,7 +407,7 @@
>  	sprintf (send_buffer, "GET VAR %s %s\n", ups_name, varname);
>  
>  	/* send the command to the daemon and get a response back */
> -	if (process_tcp_request
> +	if (talk2nut
>  			(server_address, server_port, send_buffer, temp_buffer,
>  			 sizeof (temp_buffer)) != STATE_OK) {
>  		printf ("%s\n", _("Invalid response received from host"));
> @@ -653,3 +655,24 @@
>    printf (_("Usage:"));
>  	printf ("%s -H host -u ups [-p port] [-v variable] [-w warn_value] [-c crit_value] [-to to_sec] [-T]\n", progname);
>  }
> +
> +int 
> +talk2nut(const char *server_address, int server_port,
> + const char *send_buffer, char *recv_buffer, int recv_size)
> +{ char buf[32];
> +  int result;
> +  int sd;
> + 
> +  result = np_net_connect(server_address, server_port, &sd,
> +   IPPROTO_TCP);
> +  if(result != STATE_OK)
> +   return STATE_CRITICAL;
> +  result = send_request(sd, IPPROTO_TCP, send_buffer, recv_buffer,
> +   recv_size);
> +  if(result == STATE_OK) {
> +    strcpy(buf,"LOGOUT\n");
> +    (void) send(sd, buf, strlen(buf), 0);
> +  }
> +  close(sd);
> +  return(result);
> +}
> --
> Ric Anderson, Opus One Systems, 1404 E Lind Road, Tucson, AZ 85719
> Phone: +1 520 324 0494 (v) +1 520 324 0495 FAX
> ric at Opus1.COM (RA90-ARIN)  Personal Email: ric at DragonElf.NET
> UNIX *is* user friendly. It's just selective about who its friends are.
> 
> -------------------------------------------------------------------------
> Take Surveys. Earn Cash. Influence the Future of IT
> Join SourceForge.net's Techsay panel and you'll get the chance to share your
> opinions on IT & business topics through brief surveys - and earn cash
> http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV
> _______________________________________________________
> Nagios Plugin Development Mailing List Nagiosplug-devel at lists.sourceforge.net
> Unsubscribe at https://lists.sourceforge.net/lists/listinfo/nagiosplug-devel
> ::: Please include plugins version (-v) and OS when reporting any issue. 
> ::: Messages without supporting info will risk being sent to /dev/null
> 
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 191 bytes
Desc: This is a digitally signed message part
URL: <http://nagios-plugins.org/archive/devel/attachments/20061211/e6297be5/attachment.sig>


More information about the Devel mailing list