Patch from vodz:

Changed email address
    cmdedit API change
    optimizations for traceroute and md5sum
    added a new shared create_icmp_socket() function
This commit is contained in:
Eric Andersen
2001-07-12 20:26:32 +00:00
parent f69bfc76fa
commit 7467c8d3b6
27 changed files with 641 additions and 788 deletions

View File

@@ -0,0 +1,37 @@
/* vi: set sw=4 ts=4: */
/*
* Utility routines.
*
* create raw socket for icmp protocol test permision
* and drop root privilegies if running setuid
*
*/
#include <sys/types.h>
#include <netdb.h>
#include <sys/socket.h>
#include <errno.h>
#include <unistd.h>
#include "libbb.h"
int create_icmp_socket(void)
{
struct protoent *proto;
int sock;
proto = getprotobyname("icmp");
/* if getprotobyname failed, just silently force
* proto->p_proto to have the correct value for "icmp" */
if ((sock = socket(AF_INET, SOCK_RAW,
(proto ? proto->p_proto : 1))) < 0) { /* 1 == ICMP */
if (errno == EPERM)
error_msg_and_die("permission denied. (are you root?)");
else
perror_msg_and_die(can_not_create_raw_socket);
}
/* drop root privs if running setuid */
setuid(getuid());
return sock;
}

View File

@@ -252,6 +252,7 @@ extern void gz_close(int gunzip_pid);
extern FILE *gz_open(FILE *compressed_file, int *pid);
extern struct hostent *xgethostbyname(const char *name);
extern int create_icmp_socket(void);
char *dirname (const char *path);
@@ -284,5 +285,6 @@ extern const char * const write_error;
extern const char * const too_few_args;
extern const char * const name_longer_than_foo;
extern const char * const unknown;
extern const char * const can_not_create_raw_socket;
#endif /* __LIBBB_H__ */

View File

@@ -62,3 +62,6 @@
const char * const unknown = "(unknown)";
#endif
#ifdef L_can_not_create_raw_socket
const char * const can_not_create_raw_socket = "can`t create raw socket";
#endif