diff options
author | Eric Andersen <andersen@codepoet.org> | 2002-09-30 20:39:56 +0000 |
---|---|---|
committer | Eric Andersen <andersen@codepoet.org> | 2002-09-30 20:39:56 +0000 |
commit | 02e6ba91e887bd11146a57185b223582f56f3f09 (patch) | |
tree | cc1954165fe7e6efed1ba0dfa7d5c3aea97fffa5 | |
parent | a6f6e06107e69b79858acaa511c452a0a73cf207 (diff) | |
download | busybox-w32-02e6ba91e887bd11146a57185b223582f56f3f09.tar.gz busybox-w32-02e6ba91e887bd11146a57185b223582f56f3f09.tar.bz2 busybox-w32-02e6ba91e887bd11146a57185b223582f56f3f09.zip |
Vodz' last_patch57:
Hi, Erik.
my_getpw(uid/gid) and applets used it have problem:
if username for uid not found, applets can`t detect it
(but code pessent). Also "%8ld " format is bad:
spaces not required (applets have self format
or spec format (tar applet) and overflow for "id" applet...)
This problem also pressent in stable version.
Patch for unstable in attach.
--w
vodz
-rw-r--r-- | archival/tar.c | 8 | ||||
-rw-r--r-- | coreutils/id.c | 7 | ||||
-rw-r--r-- | coreutils/logname.c | 3 | ||||
-rw-r--r-- | coreutils/whoami.c | 3 | ||||
-rw-r--r-- | include/libbb.h | 4 | ||||
-rw-r--r-- | libbb/my_getgrgid.c | 12 | ||||
-rw-r--r-- | libbb/my_getpwuid.c | 12 | ||||
-rw-r--r-- | procps/ps.c | 4 | ||||
-rw-r--r-- | sysklogd/logger.c | 6 |
9 files changed, 27 insertions, 32 deletions
diff --git a/archival/tar.c b/archival/tar.c index 0f0d4fd6f..88a815de6 100644 --- a/archival/tar.c +++ b/archival/tar.c | |||
@@ -244,12 +244,10 @@ static inline int writeTarHeader(struct TarBallInfo *tbInfo, | |||
244 | TAR_MAGIC_LEN + TAR_VERSION_LEN); | 244 | TAR_MAGIC_LEN + TAR_VERSION_LEN); |
245 | 245 | ||
246 | /* Enter the user and group names (default to root if it fails) */ | 246 | /* Enter the user and group names (default to root if it fails) */ |
247 | my_getpwuid(header.uname, statbuf->st_uid); | 247 | if (my_getpwuid(header.uname, statbuf->st_uid) == NULL) |
248 | if (!*header.uname) | ||
249 | strcpy(header.uname, "root"); | ||
250 | my_getgrgid(header.gname, statbuf->st_gid); | ||
251 | if (!*header.uname) | ||
252 | strcpy(header.uname, "root"); | 248 | strcpy(header.uname, "root"); |
249 | if (my_getgrgid(header.gname, statbuf->st_gid) == NULL) | ||
250 | strcpy(header.gname, "root"); | ||
253 | 251 | ||
254 | if (tbInfo->hlInfo) { | 252 | if (tbInfo->hlInfo) { |
255 | /* This is a hard link */ | 253 | /* This is a hard link */ |
diff --git a/coreutils/id.c b/coreutils/id.c index 85b288c0c..c7f61532d 100644 --- a/coreutils/id.c +++ b/coreutils/id.c | |||
@@ -68,8 +68,7 @@ extern int id_main(int argc, char **argv) | |||
68 | my_getgrgid(group, getegid()); | 68 | my_getgrgid(group, getegid()); |
69 | } | 69 | } |
70 | } else { | 70 | } else { |
71 | strncpy(user, argv[optind], 8); | 71 | safe_strncpy(user, argv[optind], sizeof(user)); |
72 | user[8] = '\0'; | ||
73 | gid = my_getpwnamegid(user); | 72 | gid = my_getpwnamegid(user); |
74 | my_getgrgid(group, gid); | 73 | my_getgrgid(group, gid); |
75 | } | 74 | } |
@@ -78,12 +77,12 @@ extern int id_main(int argc, char **argv) | |||
78 | grnam=my_getgrnam(group); | 77 | grnam=my_getgrnam(group); |
79 | 78 | ||
80 | if (no_group) { | 79 | if (no_group) { |
81 | if(name_not_number && user) | 80 | if(name_not_number) |
82 | puts(user); | 81 | puts(user); |
83 | else | 82 | else |
84 | printf("%ld\n", pwnam); | 83 | printf("%ld\n", pwnam); |
85 | } else if (no_user) { | 84 | } else if (no_user) { |
86 | if(name_not_number && group) | 85 | if(name_not_number) |
87 | puts(group); | 86 | puts(group); |
88 | else | 87 | else |
89 | printf("%ld\n", grnam); | 88 | printf("%ld\n", grnam); |
diff --git a/coreutils/logname.c b/coreutils/logname.c index 0924b2471..3e10fba6f 100644 --- a/coreutils/logname.c +++ b/coreutils/logname.c | |||
@@ -32,8 +32,7 @@ extern int logname_main(int argc, char **argv) | |||
32 | if (argc > 1) | 32 | if (argc > 1) |
33 | show_usage(); | 33 | show_usage(); |
34 | 34 | ||
35 | my_getpwuid(user, geteuid()); | 35 | if (my_getpwuid(user, geteuid())) { |
36 | if (*user) { | ||
37 | puts(user); | 36 | puts(user); |
38 | return EXIT_SUCCESS; | 37 | return EXIT_SUCCESS; |
39 | } | 38 | } |
diff --git a/coreutils/whoami.c b/coreutils/whoami.c index c3b1140e6..a9d6ecf26 100644 --- a/coreutils/whoami.c +++ b/coreutils/whoami.c | |||
@@ -35,8 +35,7 @@ extern int whoami_main(int argc, char **argv) | |||
35 | if (argc > 1) | 35 | if (argc > 1) |
36 | show_usage(); | 36 | show_usage(); |
37 | 37 | ||
38 | my_getpwuid(user, uid); | 38 | if (my_getpwuid(user, uid)) { |
39 | if (*user) { | ||
40 | puts(user); | 39 | puts(user); |
41 | return EXIT_SUCCESS; | 40 | return EXIT_SUCCESS; |
42 | } | 41 | } |
diff --git a/include/libbb.h b/include/libbb.h index 2fec93db1..3b5f2979c 100644 --- a/include/libbb.h +++ b/include/libbb.h | |||
@@ -165,8 +165,8 @@ extern unsigned long parse_number(const char *numstr, | |||
165 | * increases target size and is often not needed embedded systems. */ | 165 | * increases target size and is often not needed embedded systems. */ |
166 | extern long my_getpwnam(const char *name); | 166 | extern long my_getpwnam(const char *name); |
167 | extern long my_getgrnam(const char *name); | 167 | extern long my_getgrnam(const char *name); |
168 | extern void my_getpwuid(char *name, long uid); | 168 | extern char * my_getpwuid(char *name, long uid); |
169 | extern void my_getgrgid(char *group, long gid); | 169 | extern char * my_getgrgid(char *group, long gid); |
170 | extern long my_getpwnamegid(const char *name); | 170 | extern long my_getpwnamegid(const char *name); |
171 | 171 | ||
172 | extern int device_open(char *device, int mode); | 172 | extern int device_open(char *device, int mode); |
diff --git a/libbb/my_getgrgid.c b/libbb/my_getgrgid.c index 88bafc97b..5bf905145 100644 --- a/libbb/my_getgrgid.c +++ b/libbb/my_getgrgid.c | |||
@@ -27,15 +27,17 @@ | |||
27 | 27 | ||
28 | 28 | ||
29 | /* gets a groupname given a gid */ | 29 | /* gets a groupname given a gid */ |
30 | void my_getgrgid(char *group, long gid) | 30 | char * my_getgrgid(char *group, long gid) |
31 | { | 31 | { |
32 | struct group *mygroup; | 32 | struct group *mygroup; |
33 | 33 | ||
34 | mygroup = getgrgid(gid); | 34 | mygroup = getgrgid(gid); |
35 | if (mygroup==NULL) | 35 | if (mygroup==NULL) { |
36 | sprintf(group, "%-8ld ", (long)gid); | 36 | sprintf(group, "%ld", gid); |
37 | else | 37 | return NULL; |
38 | strcpy(group, mygroup->gr_name); | 38 | } else { |
39 | return strcpy(group, mygroup->gr_name); | ||
40 | } | ||
39 | } | 41 | } |
40 | 42 | ||
41 | 43 | ||
diff --git a/libbb/my_getpwuid.c b/libbb/my_getpwuid.c index 2abe7a7f3..dfe9b4948 100644 --- a/libbb/my_getpwuid.c +++ b/libbb/my_getpwuid.c | |||
@@ -28,15 +28,17 @@ | |||
28 | 28 | ||
29 | 29 | ||
30 | /* gets a username given a uid */ | 30 | /* gets a username given a uid */ |
31 | void my_getpwuid(char *name, long uid) | 31 | char * my_getpwuid(char *name, long uid) |
32 | { | 32 | { |
33 | struct passwd *myuser; | 33 | struct passwd *myuser; |
34 | 34 | ||
35 | myuser = getpwuid(uid); | 35 | myuser = getpwuid(uid); |
36 | if (myuser==NULL) | 36 | if (myuser==NULL) { |
37 | sprintf(name, "%-8ld ", (long)uid); | 37 | sprintf(name, "%ld", (long)uid); |
38 | else | 38 | return NULL; |
39 | strcpy(name, myuser->pw_name); | 39 | } else { |
40 | return strcpy(name, myuser->pw_name); | ||
41 | } | ||
40 | } | 42 | } |
41 | 43 | ||
42 | /* END CODE */ | 44 | /* END CODE */ |
diff --git a/procps/ps.c b/procps/ps.c index aa408604a..6036ffc1e 100644 --- a/procps/ps.c +++ b/procps/ps.c | |||
@@ -150,8 +150,6 @@ extern int ps_main(int argc, char **argv) | |||
150 | 150 | ||
151 | /* Make some adjustments as needed */ | 151 | /* Make some adjustments as needed */ |
152 | my_getpwuid(uidName, p.ruid); | 152 | my_getpwuid(uidName, p.ruid); |
153 | if (*uidName == '\0') | ||
154 | sprintf(uidName, "%d", p.ruid); | ||
155 | 153 | ||
156 | sprintf(path, "/proc/%s/cmdline", entry->d_name); | 154 | sprintf(path, "/proc/%s/cmdline", entry->d_name); |
157 | file = fopen(path, "r"); | 155 | file = fopen(path, "r"); |
@@ -243,8 +241,6 @@ extern int ps_main(int argc, char **argv) | |||
243 | 241 | ||
244 | /* Make some adjustments as needed */ | 242 | /* Make some adjustments as needed */ |
245 | my_getpwuid(uidName, info.euid); | 243 | my_getpwuid(uidName, info.euid); |
246 | if (*uidName == '\0') | ||
247 | sprintf(uidName, "%ld", info.euid); | ||
248 | 244 | ||
249 | if(p.vmsize == 0) | 245 | if(p.vmsize == 0) |
250 | len = printf("%5d %-8s %c ", p.pid, uidName, p.state); | 246 | len = printf("%5d %-8s %c ", p.pid, uidName, p.state); |
diff --git a/sysklogd/logger.c b/sysklogd/logger.c index 380bde5ca..4aa15101a 100644 --- a/sysklogd/logger.c +++ b/sysklogd/logger.c | |||
@@ -121,7 +121,7 @@ extern int logger_main(int argc, char **argv) | |||
121 | pri = pencode(optarg); | 121 | pri = pencode(optarg); |
122 | break; | 122 | break; |
123 | case 't': | 123 | case 't': |
124 | strncpy(name, optarg, sizeof(name)); | 124 | safe_strncpy(name, optarg, sizeof(name)); |
125 | break; | 125 | break; |
126 | default: | 126 | default: |
127 | show_usage(); | 127 | show_usage(); |
@@ -144,7 +144,7 @@ extern int logger_main(int argc, char **argv) | |||
144 | } while (c != EOF); | 144 | } while (c != EOF); |
145 | } else { | 145 | } else { |
146 | len = 1; /* for the '\0' */ | 146 | len = 1; /* for the '\0' */ |
147 | message=xcalloc(1, 1); | 147 | message = xcalloc(1, 1); |
148 | for (i = optind; i < argc; i++) { | 148 | for (i = optind; i < argc; i++) { |
149 | len += strlen(argv[i]); | 149 | len += strlen(argv[i]); |
150 | len += 1; /* for the space between the args */ | 150 | len += 1; /* for the space between the args */ |
@@ -152,7 +152,7 @@ extern int logger_main(int argc, char **argv) | |||
152 | strcat(message, argv[i]); | 152 | strcat(message, argv[i]); |
153 | strcat(message, " "); | 153 | strcat(message, " "); |
154 | } | 154 | } |
155 | message[strlen(message)-1] = '\0'; | 155 | message[strlen(message) - 2] = '\0'; |
156 | syslog(pri, "%s", message); | 156 | syslog(pri, "%s", message); |
157 | } | 157 | } |
158 | 158 | ||