source:
MondoRescue/branches/2.2.9/mindi-busybox/libbb/create_icmp6_socket.c@
2860
Last change on this file since 2860 was 2725, checked in by , 14 years ago | |
---|---|
File size: 895 bytes |
Rev | Line | |
---|---|---|
[821] | 1 | /* vi: set sw=4 ts=4: */ |
2 | /* | |
3 | * Utility routines. | |
4 | * | |
[2725] | 5 | * create raw socket for icmp (IPv6 version) protocol |
[821] | 6 | * and drop root privileges if running setuid |
7 | * | |
[2725] | 8 | * Licensed under GPLv2, see file LICENSE in this source tree. |
[821] | 9 | */ |
10 | ||
11 | #include "libbb.h" | |
12 | ||
[1765] | 13 | #if ENABLE_FEATURE_IPV6 |
[2725] | 14 | int FAST_FUNC create_icmp6_socket(void) |
[821] | 15 | { |
[2725] | 16 | int sock; |
17 | #if 0 | |
[821] | 18 | struct protoent *proto; |
19 | proto = getprotobyname("ipv6-icmp"); | |
20 | /* if getprotobyname failed, just silently force | |
21 | * proto->p_proto to have the correct value for "ipv6-icmp" */ | |
[1765] | 22 | sock = socket(AF_INET6, SOCK_RAW, |
23 | (proto ? proto->p_proto : IPPROTO_ICMPV6)); | |
[2725] | 24 | #else |
25 | sock = socket(AF_INET6, SOCK_RAW, IPPROTO_ICMPV6); | |
26 | #endif | |
[1765] | 27 | if (sock < 0) { |
[821] | 28 | if (errno == EPERM) |
29 | bb_error_msg_and_die(bb_msg_perm_denied_are_you_root); | |
[1765] | 30 | bb_perror_msg_and_die(bb_msg_can_not_create_raw_socket); |
[821] | 31 | } |
32 | ||
33 | /* drop root privs if running setuid */ | |
[1765] | 34 | xsetuid(getuid()); |
[821] | 35 | |
36 | return sock; | |
37 | } | |
38 | #endif |
Note:
See TracBrowser
for help on using the repository browser.