0003-Open-raw-sockets-when-adding-hosts-not-when-doing-th.patch 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. From ac878566eb935fd3ebfb804e6bd9e1690d4a65e3 Mon Sep 17 00:00:00 2001
  2. From: Tollef Fog Heen <tfheen@err.no>
  3. Date: Tue, 20 Mar 2018 22:40:32 +0100
  4. Subject: [PATCH] Open raw sockets when adding hosts, not when doing the
  5. pinging
  6. This allows this to run as non-root again, without this, oping will
  7. have dropped privileges before trying to ping, which then fails to
  8. open the necessary raw sockets.
  9. Fixes: #34
  10. [Upstream: https://github.com/octo/liboping/pull/35/commits/a88c51f38dafa1fba9118045176754bec05d3c94]
  11. Signed-off-by: Peter Seiderer <ps.report@gmx.net>
  12. ---
  13. src/liboping.c | 48 +++++++++++++++++-------------------------------
  14. 1 file changed, 17 insertions(+), 31 deletions(-)
  15. diff --git a/src/liboping.c b/src/liboping.c
  16. index 39b0041..f98e810 100644
  17. --- a/src/liboping.c
  18. +++ b/src/liboping.c
  19. @@ -1344,41 +1344,10 @@ int ping_send (pingobj_t *obj)
  20. struct timeval nowtime;
  21. struct timeval timeout;
  22. - _Bool need_ipv4_socket = 0;
  23. - _Bool need_ipv6_socket = 0;
  24. -
  25. for (ptr = obj->head; ptr != NULL; ptr = ptr->next)
  26. {
  27. ptr->latency = -1.0;
  28. ptr->recv_ttl = -1;
  29. -
  30. - if (ptr->addrfamily == AF_INET)
  31. - need_ipv4_socket = 1;
  32. - else if (ptr->addrfamily == AF_INET6)
  33. - need_ipv6_socket = 1;
  34. - }
  35. -
  36. - if (!need_ipv4_socket && !need_ipv6_socket)
  37. - {
  38. - ping_set_error (obj, "ping_send", "No hosts to ping");
  39. - return (-1);
  40. - }
  41. -
  42. - if (need_ipv4_socket && obj->fd4 == -1)
  43. - {
  44. - obj->fd4 = ping_open_socket(obj, AF_INET);
  45. - if (obj->fd4 == -1)
  46. - return (-1);
  47. - ping_set_ttl (obj, obj->ttl);
  48. - ping_set_qos (obj, obj->qos);
  49. - }
  50. - if (need_ipv6_socket && obj->fd6 == -1)
  51. - {
  52. - obj->fd6 = ping_open_socket(obj, AF_INET6);
  53. - if (obj->fd6 == -1)
  54. - return (-1);
  55. - ping_set_ttl (obj, obj->ttl);
  56. - ping_set_qos (obj, obj->qos);
  57. }
  58. if (gettimeofday (&nowtime, NULL) == -1)
  59. @@ -1698,6 +1667,23 @@ int ping_host_add (pingobj_t *obj, const char *host)
  60. ph->table_next = obj->table[ph->ident % PING_TABLE_LEN];
  61. obj->table[ph->ident % PING_TABLE_LEN] = ph;
  62. + if (ph->addrfamily == AF_INET && obj->fd4 == -1)
  63. + {
  64. + obj->fd4 = ping_open_socket(obj, AF_INET);
  65. + if (obj->fd4 == -1)
  66. + return (-1);
  67. + ping_set_ttl (obj, obj->ttl);
  68. + ping_set_qos (obj, obj->qos);
  69. + }
  70. + if (ph->addrfamily == AF_INET6 && obj->fd6 == -1)
  71. + {
  72. + obj->fd6 = ping_open_socket(obj, AF_INET6);
  73. + if (obj->fd6 == -1)
  74. + return (-1);
  75. + ping_set_ttl (obj, obj->ttl);
  76. + ping_set_qos (obj, obj->qos);
  77. + }
  78. +
  79. return (0);
  80. } /* int ping_host_add */
  81. --
  82. 2.25.1