aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Borca <dborca@yahoo.com>2013-11-28 12:50:25 +0100
committerDenys Vlasenko <vda.linux@googlemail.com>2013-11-28 12:50:25 +0100
commit72745632a13ccd12232127b31e1656f2f7ebcaff (patch)
tree2548a6297208698dbab4c4a3db3e16961c2cf800
parentdf0d2cd837e564e2653ce9a8b92a32d4eaf6e9c3 (diff)
downloadbusybox-w32-72745632a13ccd12232127b31e1656f2f7ebcaff.tar.gz
busybox-w32-72745632a13ccd12232127b31e1656f2f7ebcaff.tar.bz2
busybox-w32-72745632a13ccd12232127b31e1656f2f7ebcaff.zip
ping: try SOCK_DGRAM if no root privileges
Signed-off-by: Daniel Borca <dborca@yahoo.com> Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
-rw-r--r--networking/ping.c19
1 files changed, 16 insertions, 3 deletions
diff --git a/networking/ping.c b/networking/ping.c
index 5e4771f5a..5d71fe8cc 100644
--- a/networking/ping.c
+++ b/networking/ping.c
@@ -168,9 +168,22 @@ create_icmp_socket(void)
168#endif 168#endif
169 sock = socket(AF_INET, SOCK_RAW, 1); /* 1 == ICMP */ 169 sock = socket(AF_INET, SOCK_RAW, 1); /* 1 == ICMP */
170 if (sock < 0) { 170 if (sock < 0) {
171 if (errno == EPERM) 171 if (errno != EPERM)
172 bb_error_msg_and_die(bb_msg_perm_denied_are_you_root); 172 bb_perror_msg_and_die(bb_msg_can_not_create_raw_socket);
173 bb_perror_msg_and_die(bb_msg_can_not_create_raw_socket); 173#if defined(__linux__) || defined(__APPLE__)
174 /* We don't have root privileges. Try SOCK_DGRAM instead.
175 * Linux needs net.ipv4.ping_group_range for this to work.
176 * MacOSX allows ICMP_ECHO, ICMP_TSTAMP or ICMP_MASKREQ
177 */
178#if ENABLE_PING6
179 if (lsa->u.sa.sa_family == AF_INET6)
180 sock = socket(AF_INET6, SOCK_DGRAM, IPPROTO_ICMPV6);
181 else
182#endif
183 sock = socket(AF_INET, SOCK_DGRAM, 1); /* 1 == ICMP */
184 if (sock < 0)
185#endif
186 bb_error_msg_and_die(bb_msg_perm_denied_are_you_root);
174 } 187 }
175 188
176 xmove_fd(sock, pingsock); 189 xmove_fd(sock, pingsock);