Annotation of /tags/mkinitrd-6_2_0/busybox/libbb/create_icmp6_socket.c
Parent Directory
|
Revision Log
Revision 996 -
(hide annotations)
(download)
Sun May 30 11:54:28 2010 UTC (14 years ago) by niro
File MIME type: text/plain
File size: 903 byte(s)
Sun May 30 11:54:28 2010 UTC (14 years ago) by niro
File MIME type: text/plain
File size: 903 byte(s)
tagged 'mkinitrd-6_2_0'
1 | niro | 532 | /* vi: set sw=4 ts=4: */ |
2 | /* | ||
3 | * Utility routines. | ||
4 | * | ||
5 | niro | 816 | * create raw socket for icmp (IPv6 version) protocol |
6 | niro | 532 | * and drop root privileges if running setuid |
7 | niro | 984 | * |
8 | * Licensed under GPLv2, see file LICENSE in this tarball for details. | ||
9 | niro | 532 | */ |
10 | |||
11 | #include "libbb.h" | ||
12 | |||
13 | niro | 816 | #if ENABLE_FEATURE_IPV6 |
14 | int FAST_FUNC create_icmp6_socket(void) | ||
15 | niro | 532 | { |
16 | niro | 816 | int sock; |
17 | #if 0 | ||
18 | niro | 532 | 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" */ | ||
22 | niro | 816 | sock = socket(AF_INET6, SOCK_RAW, |
23 | (proto ? proto->p_proto : IPPROTO_ICMPV6)); | ||
24 | #else | ||
25 | sock = socket(AF_INET6, SOCK_RAW, IPPROTO_ICMPV6); | ||
26 | #endif | ||
27 | if (sock < 0) { | ||
28 | niro | 532 | if (errno == EPERM) |
29 | bb_error_msg_and_die(bb_msg_perm_denied_are_you_root); | ||
30 | niro | 816 | bb_perror_msg_and_die(bb_msg_can_not_create_raw_socket); |
31 | niro | 532 | } |
32 | |||
33 | /* drop root privs if running setuid */ | ||
34 | xsetuid(getuid()); | ||
35 | |||
36 | return sock; | ||
37 | } | ||
38 | #endif |