Fix counter for check_dhcp

classic Classic list List threaded Threaded
2 messages Options
Reply | Threaded
Open this post in threaded view
|

Fix counter for check_dhcp

Martijn van Duren-7
monitoring-plugins' check_dhcp has some weird in a counter:
$ doas /usr/local/libexec/nagios/check_dhcp -s 10.17.11.55 -u -i bnx0
OK: Received 260350 DHCPOFFER(s), 1 of 1 requested servers responded, max lease time = 21600 sec.

This is caused by receive_dhcp_packet, which only does
recvfrom(MSG_PEEK), which causes the packet to be found as long as the
timer hasn't expired. The diff below removes the MSG_PEEK flag and
returns the correct value:
$ doas ./check_dhcp -s 10.17.11.55 -u -i trunk0
OK: Received 1 DHCPOFFER(s), 1 of 1 requested servers responded, max lease time = 21600 sec.

OK?

martijn@

Index: patches/patch-plugins-root_check_dhcp_c
===================================================================
RCS file: /cvs/ports/net/monitoring-plugins/patches/patch-plugins-root_check_dhcp_c,v
retrieving revision 1.1
diff -u -p -r1.1 patch-plugins-root_check_dhcp_c
--- patches/patch-plugins-root_check_dhcp_c 19 Jul 2017 12:14:29 -0000 1.1
+++ patches/patch-plugins-root_check_dhcp_c 9 Jan 2019 16:00:36 -0000
@@ -3,8 +3,11 @@ Fix stack smashing.
 
 Upstream merge request:
 https://github.com/monitoring-plugins/monitoring-plugins/pull/1500
---- plugins-root/check_dhcp.c.orig Wed Jul 19 12:53:55 2017
-+++ plugins-root/check_dhcp.c Wed Jul 19 13:46:40 2017
+
+MSG_PEEK causes the packet to be counted multiple times.
+Index: plugins-root/check_dhcp.c
+--- plugins-root/check_dhcp.c.orig
++++ plugins-root/check_dhcp.c
 @@ -323,7 +323,8 @@ int get_hardware_address(int sock,char *interface_name
  #elif defined(__bsd__)
  /* King 2004 see ACKNOWLEDGEMENTS */
@@ -15,3 +18,12 @@ https://github.com/monitoring-plugins/mo
          char                    *buf;
          unsigned char           *ptr;
          struct if_msghdr        *ifm;
+@@ -693,7 +694,7 @@ int receive_dhcp_packet(void *buffer, int buffer_size,
+         else{
+ bzero(&source_address,sizeof(source_address));
+ address_size=sizeof(source_address);
+-                recv_result=recvfrom(sock,(char *)buffer,buffer_size,MSG_PEEK,(struct sockaddr *)&source_address,&address_size);
++                recv_result=recvfrom(sock,(char *)buffer,buffer_size,0,(struct sockaddr *)&source_address,&address_size);
+ if(verbose)
+ printf("recv_result: %d\n",recv_result);
+

Reply | Threaded
Open this post in threaded view
|

Re: Fix counter for check_dhcp

Stuart Henderson
On 2019/01/09 17:01, Martijn van Duren wrote:

> monitoring-plugins' check_dhcp has some weird in a counter:
> $ doas /usr/local/libexec/nagios/check_dhcp -s 10.17.11.55 -u -i bnx0
> OK: Received 260350 DHCPOFFER(s), 1 of 1 requested servers responded, max lease time = 21600 sec.
>
> This is caused by receive_dhcp_packet, which only does
> recvfrom(MSG_PEEK), which causes the packet to be found as long as the
> timer hasn't expired. The diff below removes the MSG_PEEK flag and
> returns the correct value:
> $ doas ./check_dhcp -s 10.17.11.55 -u -i trunk0
> OK: Received 1 DHCPOFFER(s), 1 of 1 requested servers responded, max lease time = 21600 sec.
>
> OK?

Needs a REVISION-main bump, otherwise OK maintainer

>
> martijn@
>
> Index: patches/patch-plugins-root_check_dhcp_c
> ===================================================================
> RCS file: /cvs/ports/net/monitoring-plugins/patches/patch-plugins-root_check_dhcp_c,v
> retrieving revision 1.1
> diff -u -p -r1.1 patch-plugins-root_check_dhcp_c
> --- patches/patch-plugins-root_check_dhcp_c 19 Jul 2017 12:14:29 -0000 1.1
> +++ patches/patch-plugins-root_check_dhcp_c 9 Jan 2019 16:00:36 -0000
> @@ -3,8 +3,11 @@ Fix stack smashing.
>  
>  Upstream merge request:
>  https://github.com/monitoring-plugins/monitoring-plugins/pull/1500
> ---- plugins-root/check_dhcp.c.orig Wed Jul 19 12:53:55 2017
> -+++ plugins-root/check_dhcp.c Wed Jul 19 13:46:40 2017
> +
> +MSG_PEEK causes the packet to be counted multiple times.
> +Index: plugins-root/check_dhcp.c
> +--- plugins-root/check_dhcp.c.orig
> ++++ plugins-root/check_dhcp.c
>  @@ -323,7 +323,8 @@ int get_hardware_address(int sock,char *interface_name
>   #elif defined(__bsd__)
>   /* King 2004 see ACKNOWLEDGEMENTS */
> @@ -15,3 +18,12 @@ https://github.com/monitoring-plugins/mo
>           char                    *buf;
>           unsigned char           *ptr;
>           struct if_msghdr        *ifm;
> +@@ -693,7 +694,7 @@ int receive_dhcp_packet(void *buffer, int buffer_size,
> +         else{
> + bzero(&source_address,sizeof(source_address));
> + address_size=sizeof(source_address);
> +-                recv_result=recvfrom(sock,(char *)buffer,buffer_size,MSG_PEEK,(struct sockaddr *)&source_address,&address_size);
> ++                recv_result=recvfrom(sock,(char *)buffer,buffer_size,0,(struct sockaddr *)&source_address,&address_size);
> + if(verbose)
> + printf("recv_result: %d\n",recv_result);
> +
>