12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091 |
- From ac878566eb935fd3ebfb804e6bd9e1690d4a65e3 Mon Sep 17 00:00:00 2001
- From: Tollef Fog Heen <tfheen@err.no>
- Date: Tue, 20 Mar 2018 22:40:32 +0100
- Subject: [PATCH] Open raw sockets when adding hosts, not when doing the
- pinging
- This allows this to run as non-root again, without this, oping will
- have dropped privileges before trying to ping, which then fails to
- open the necessary raw sockets.
- Fixes: #34
- [Upstream: https://github.com/octo/liboping/pull/35/commits/a88c51f38dafa1fba9118045176754bec05d3c94]
- Signed-off-by: Peter Seiderer <ps.report@gmx.net>
- ---
- src/liboping.c | 48 +++++++++++++++++-------------------------------
- 1 file changed, 17 insertions(+), 31 deletions(-)
- diff --git a/src/liboping.c b/src/liboping.c
- index 39b0041..f98e810 100644
- --- a/src/liboping.c
- +++ b/src/liboping.c
- @@ -1344,41 +1344,10 @@ int ping_send (pingobj_t *obj)
- struct timeval nowtime;
- struct timeval timeout;
-
- - _Bool need_ipv4_socket = 0;
- - _Bool need_ipv6_socket = 0;
- -
- for (ptr = obj->head; ptr != NULL; ptr = ptr->next)
- {
- ptr->latency = -1.0;
- ptr->recv_ttl = -1;
- -
- - if (ptr->addrfamily == AF_INET)
- - need_ipv4_socket = 1;
- - else if (ptr->addrfamily == AF_INET6)
- - need_ipv6_socket = 1;
- - }
- -
- - if (!need_ipv4_socket && !need_ipv6_socket)
- - {
- - ping_set_error (obj, "ping_send", "No hosts to ping");
- - return (-1);
- - }
- -
- - if (need_ipv4_socket && obj->fd4 == -1)
- - {
- - obj->fd4 = ping_open_socket(obj, AF_INET);
- - if (obj->fd4 == -1)
- - return (-1);
- - ping_set_ttl (obj, obj->ttl);
- - ping_set_qos (obj, obj->qos);
- - }
- - if (need_ipv6_socket && obj->fd6 == -1)
- - {
- - obj->fd6 = ping_open_socket(obj, AF_INET6);
- - if (obj->fd6 == -1)
- - return (-1);
- - ping_set_ttl (obj, obj->ttl);
- - ping_set_qos (obj, obj->qos);
- }
-
- if (gettimeofday (&nowtime, NULL) == -1)
- @@ -1698,6 +1667,23 @@ int ping_host_add (pingobj_t *obj, const char *host)
- ph->table_next = obj->table[ph->ident % PING_TABLE_LEN];
- obj->table[ph->ident % PING_TABLE_LEN] = ph;
-
- + if (ph->addrfamily == AF_INET && obj->fd4 == -1)
- + {
- + obj->fd4 = ping_open_socket(obj, AF_INET);
- + if (obj->fd4 == -1)
- + return (-1);
- + ping_set_ttl (obj, obj->ttl);
- + ping_set_qos (obj, obj->qos);
- + }
- + if (ph->addrfamily == AF_INET6 && obj->fd6 == -1)
- + {
- + obj->fd6 = ping_open_socket(obj, AF_INET6);
- + if (obj->fd6 == -1)
- + return (-1);
- + ping_set_ttl (obj, obj->ttl);
- + ping_set_qos (obj, obj->qos);
- + }
- +
- return (0);
- } /* int ping_host_add */
-
- --
- 2.25.1
|