copy fixes to simplify link copying and always do the right thing.

ping could segfault because I'm an idiot, and tried to put a value
in where I hadn't allocated storage.  choke.
 -Erik
This commit is contained in:
Erik Andersen 2000-01-29 05:52:40 +00:00
parent d7a44c76fe
commit 8e759aa31f
3 changed files with 16 additions and 26 deletions

View File

@ -1,5 +1,5 @@
/* /*
* $Id: ping.c,v 1.7 2000/01/26 20:06:48 erik Exp $ * $Id: ping.c,v 1.8 2000/01/29 05:52:40 erik Exp $
* Mini ping implementation for busybox * Mini ping implementation for busybox
* *
* Copyright (C) 1999 by Randolph Chung <tausq@debian.org> * Copyright (C) 1999 by Randolph Chung <tausq@debian.org>
@ -312,18 +312,14 @@ static void unpack(char *buf, int sz, struct sockaddr_in *from)
static void ping(char *host) static void ping(char *host)
{ {
struct protoent *proto; struct protoent *proto=NULL;
struct hostent *h; struct hostent *h;
char buf[MAXHOSTNAMELEN]; char buf[MAXHOSTNAMELEN];
char packet[DEFDATALEN + MAXIPLEN + MAXICMPLEN]; char packet[DEFDATALEN + MAXIPLEN + MAXICMPLEN];
int sockopt; int sockopt;
if (!(proto = getprotobyname("icmp"))) { proto = getprotobyname("icmp");
/* getprotobyname failed, so just silently force if ((pingsock = socket(AF_INET, SOCK_RAW, (proto)? proto->p_proto : 1 )) < 0) { /* 1 == ICMP */
* proto->p_proto to have the correct value for "icmp" */
proto->p_proto = 1;
}
if ((pingsock = socket(AF_INET, SOCK_RAW, proto->p_proto)) < 0) { /* 1 == ICMP */
if (errno == EPERM) { if (errno == EPERM) {
fprintf(stderr, "ping: permission denied. (are you root?)\n"); fprintf(stderr, "ping: permission denied. (are you root?)\n");
} else { } else {

12
ping.c
View File

@ -1,5 +1,5 @@
/* /*
* $Id: ping.c,v 1.7 2000/01/26 20:06:48 erik Exp $ * $Id: ping.c,v 1.8 2000/01/29 05:52:40 erik Exp $
* Mini ping implementation for busybox * Mini ping implementation for busybox
* *
* Copyright (C) 1999 by Randolph Chung <tausq@debian.org> * Copyright (C) 1999 by Randolph Chung <tausq@debian.org>
@ -312,18 +312,14 @@ static void unpack(char *buf, int sz, struct sockaddr_in *from)
static void ping(char *host) static void ping(char *host)
{ {
struct protoent *proto; struct protoent *proto=NULL;
struct hostent *h; struct hostent *h;
char buf[MAXHOSTNAMELEN]; char buf[MAXHOSTNAMELEN];
char packet[DEFDATALEN + MAXIPLEN + MAXICMPLEN]; char packet[DEFDATALEN + MAXIPLEN + MAXICMPLEN];
int sockopt; int sockopt;
if (!(proto = getprotobyname("icmp"))) { proto = getprotobyname("icmp");
/* getprotobyname failed, so just silently force if ((pingsock = socket(AF_INET, SOCK_RAW, (proto)? proto->p_proto : 1 )) < 0) { /* 1 == ICMP */
* proto->p_proto to have the correct value for "icmp" */
proto->p_proto = 1;
}
if ((pingsock = socket(AF_INET, SOCK_RAW, proto->p_proto)) < 0) { /* 1 == ICMP */
if (errno == EPERM) { if (errno == EPERM) {
fprintf(stderr, "ping: permission denied. (are you root?)\n"); fprintf(stderr, "ping: permission denied. (are you root?)\n");
} else { } else {

View File

@ -182,6 +182,11 @@ copyFile( const char *srcName, const char *destName,
perror(destName); perror(destName);
return (FALSE); return (FALSE);
} }
#if (__GLIBC__ >= 2) && (__GLIBC_MINOR__ >= 1)
if (setModes == TRUE) {
lchown(destName, srcStatBuf.st_uid, srcStatBuf.st_gid);
}
#endif
} else if (S_ISFIFO(srcStatBuf.st_mode)) { } else if (S_ISFIFO(srcStatBuf.st_mode)) {
//fprintf(stderr, "copying fifo %s to %s\n", srcName, destName); //fprintf(stderr, "copying fifo %s to %s\n", srcName, destName);
if (mkfifo(destName, 0644)) { if (mkfifo(destName, 0644)) {
@ -225,16 +230,9 @@ copyFile( const char *srcName, const char *destName,
} }
if (setModes == TRUE) { if (setModes == TRUE) {
if (! S_ISLNK(srcStatBuf.st_mode)) { /* This is fine, since symlinks never get here */
chown(destName, srcStatBuf.st_uid, srcStatBuf.st_gid); chown(destName, srcStatBuf.st_uid, srcStatBuf.st_gid);
/* Never chmod a symlink; it follows the link */ chmod(destName, srcStatBuf.st_mode);
chmod(destName, srcStatBuf.st_mode);
}
#if (__GLIBC__ >= 2) && (__GLIBC_MINOR__ >= 1)
else {
lchown(destName, srcStatBuf.st_uid, srcStatBuf.st_gid);
}
#endif
times.actime = srcStatBuf.st_atime; times.actime = srcStatBuf.st_atime;
times.modtime = srcStatBuf.st_mtime; times.modtime = srcStatBuf.st_mtime;
utime(destName, &times); utime(destName, &times);