aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEric Andersen <andersen@codepoet.org>2002-09-30 20:39:56 +0000
committerEric Andersen <andersen@codepoet.org>2002-09-30 20:39:56 +0000
commit02e6ba91e887bd11146a57185b223582f56f3f09 (patch)
treecc1954165fe7e6efed1ba0dfa7d5c3aea97fffa5
parenta6f6e06107e69b79858acaa511c452a0a73cf207 (diff)
downloadbusybox-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.c8
-rw-r--r--coreutils/id.c7
-rw-r--r--coreutils/logname.c3
-rw-r--r--coreutils/whoami.c3
-rw-r--r--include/libbb.h4
-rw-r--r--libbb/my_getgrgid.c12
-rw-r--r--libbb/my_getpwuid.c12
-rw-r--r--procps/ps.c4
-rw-r--r--sysklogd/logger.c6
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. */
166extern long my_getpwnam(const char *name); 166extern long my_getpwnam(const char *name);
167extern long my_getgrnam(const char *name); 167extern long my_getgrnam(const char *name);
168extern void my_getpwuid(char *name, long uid); 168extern char * my_getpwuid(char *name, long uid);
169extern void my_getgrgid(char *group, long gid); 169extern char * my_getgrgid(char *group, long gid);
170extern long my_getpwnamegid(const char *name); 170extern long my_getpwnamegid(const char *name);
171 171
172extern int device_open(char *device, int mode); 172extern 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 */
30void my_getgrgid(char *group, long gid) 30char * 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 */
31void my_getpwuid(char *name, long uid) 31char * 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