Vodz' last_patch57:
authorEric Andersen <andersen@codepoet.org>
Mon, 30 Sep 2002 20:39:56 +0000 (20:39 -0000)
committerEric Andersen <andersen@codepoet.org>
Mon, 30 Sep 2002 20:39:56 +0000 (20:39 -0000)
    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

archival/tar.c
coreutils/id.c
coreutils/logname.c
coreutils/whoami.c
include/libbb.h
libbb/my_getgrgid.c
libbb/my_getpwuid.c
procps/ps.c
sysklogd/logger.c

index 0f0d4fd6f9335a92a7c97d3fba08bddc252138c7..88a815de65bdd4aa63de6c7ca50b3db9ca2543fb 100644 (file)
@@ -244,12 +244,10 @@ static inline int writeTarHeader(struct TarBallInfo *tbInfo,
                        TAR_MAGIC_LEN + TAR_VERSION_LEN);
 
        /* Enter the user and group names (default to root if it fails) */
-       my_getpwuid(header.uname, statbuf->st_uid);
-       if (!*header.uname)
-               strcpy(header.uname, "root");
-       my_getgrgid(header.gname, statbuf->st_gid);
-       if (!*header.uname)
+       if (my_getpwuid(header.uname, statbuf->st_uid) == NULL)
                strcpy(header.uname, "root");
+       if (my_getgrgid(header.gname, statbuf->st_gid) == NULL)
+               strcpy(header.gname, "root");
 
        if (tbInfo->hlInfo) {
                /* This is a hard link */
index 85b288c0c2dc53d1717c2c9615450eac1099c694..c7f61532d00a0d015362a7b76c8bdeda37a7dca7 100644 (file)
@@ -68,8 +68,7 @@ extern int id_main(int argc, char **argv)
                        my_getgrgid(group, getegid());
                }
        } else {
-               strncpy(user, argv[optind], 8);
-               user[8] = '\0';
+               safe_strncpy(user, argv[optind], sizeof(user));
            gid = my_getpwnamegid(user);
                my_getgrgid(group, gid);
        }
@@ -78,12 +77,12 @@ extern int id_main(int argc, char **argv)
        grnam=my_getgrnam(group);
 
        if (no_group) {
-               if(name_not_number && user)
+               if(name_not_number)
                        puts(user);
                else
                        printf("%ld\n", pwnam);
        } else if (no_user) {
-               if(name_not_number && group)
+               if(name_not_number)
                        puts(group);
                else
                        printf("%ld\n", grnam);
index 0924b24712628d4e644a472e2ac68ed8d4b497a7..3e10fba6ffb8042337f46b3575e29b41ec852106 100644 (file)
@@ -32,8 +32,7 @@ extern int logname_main(int argc, char **argv)
        if (argc > 1)
                show_usage();
 
-       my_getpwuid(user, geteuid());
-       if (*user) {
+       if (my_getpwuid(user, geteuid())) {
                puts(user);
                return EXIT_SUCCESS;
        }
index c3b1140e6c940ddd40460eb7900cb5fcf90bf11d..a9d6ecf26b23ea025557c78695cbfe82c65f4116 100644 (file)
@@ -35,8 +35,7 @@ extern int whoami_main(int argc, char **argv)
        if (argc > 1)
                show_usage();
 
-       my_getpwuid(user, uid);
-       if (*user) {
+       if (my_getpwuid(user, uid)) {
                puts(user);
                return EXIT_SUCCESS;
        }
index 2fec93db1002c2792e0d70326a4d88214891ba97..3b5f2979cd3968b764ebcccce4158093ef72223c 100644 (file)
@@ -165,8 +165,8 @@ extern unsigned long parse_number(const char *numstr,
  * increases target size and is often not needed embedded systems.  */
 extern long my_getpwnam(const char *name);
 extern long my_getgrnam(const char *name);
-extern void my_getpwuid(char *name, long uid);
-extern void my_getgrgid(char *group, long gid);
+extern char * my_getpwuid(char *name, long uid);
+extern char * my_getgrgid(char *group, long gid);
 extern long my_getpwnamegid(const char *name);
 
 extern int device_open(char *device, int mode);
index 88bafc97b177b3cda8c90b668c2936679528d9ee..5bf9051450d2fde583b4eedd9507499bbb751dd6 100644 (file)
 
 
 /* gets a groupname given a gid */
-void my_getgrgid(char *group, long gid)
+char * my_getgrgid(char *group, long gid)
 {
        struct group *mygroup;
 
        mygroup  = getgrgid(gid);
-       if (mygroup==NULL)
-               sprintf(group, "%-8ld ", (long)gid);
-       else
-               strcpy(group, mygroup->gr_name);
+       if (mygroup==NULL) {
+               sprintf(group, "%ld", gid);
+               return NULL;
+       } else {
+               return strcpy(group, mygroup->gr_name);
+       }
 }
 
 
index 2abe7a7f326e99ce778b3aa88d7cccbb0a9b70e8..dfe9b4948d9d141217bd24d50093cec4c5f4c9a0 100644 (file)
 
 
 /* gets a username given a uid */
-void my_getpwuid(char *name, long uid)
+char * my_getpwuid(char *name, long uid)
 {
        struct passwd *myuser;
 
        myuser  = getpwuid(uid);
-       if (myuser==NULL)
-               sprintf(name, "%-8ld ", (long)uid);
-       else
-               strcpy(name, myuser->pw_name);
+       if (myuser==NULL) {
+               sprintf(name, "%ld", (long)uid);
+               return NULL;
+       } else {
+               return strcpy(name, myuser->pw_name);
+       }
 }
 
 /* END CODE */
index aa408604ac8e35a5f6119ae83b65062f19f33286..6036ffc1e8127268cbc5ca14ffd9e0d30d0f5395 100644 (file)
@@ -150,8 +150,6 @@ extern int ps_main(int argc, char **argv)
 
                /* Make some adjustments as needed */
                my_getpwuid(uidName, p.ruid);
-               if (*uidName == '\0')
-                       sprintf(uidName, "%d", p.ruid);
 
                sprintf(path, "/proc/%s/cmdline", entry->d_name);
                file = fopen(path, "r");
@@ -243,8 +241,6 @@ extern int ps_main(int argc, char **argv)
            
                /* Make some adjustments as needed */
                my_getpwuid(uidName, info.euid);
-               if (*uidName == '\0')
-                       sprintf(uidName, "%ld", info.euid);
 
                if(p.vmsize == 0)
                        len = printf("%5d %-8s        %c    ", p.pid, uidName, p.state);
index 380bde5ca8a2dce2725c90410d8c8ea217b2d818..4aa15101ae81b389db4c51776d13a84015028246 100644 (file)
@@ -121,7 +121,7 @@ extern int logger_main(int argc, char **argv)
                                pri = pencode(optarg);
                                break;
                        case 't':
-                               strncpy(name, optarg, sizeof(name));
+                               safe_strncpy(name, optarg, sizeof(name));
                                break;
                        default:
                                show_usage();
@@ -144,7 +144,7 @@ extern int logger_main(int argc, char **argv)
                } while (c != EOF);
        } else {
                len = 1; /* for the '\0' */
-               message=xcalloc(1, 1);
+               message = xcalloc(1, 1);
                for (i = optind; i < argc; i++) {
                        len += strlen(argv[i]);
                        len += 1;  /* for the space between the args */
@@ -152,7 +152,7 @@ extern int logger_main(int argc, char **argv)
                        strcat(message, argv[i]);
                        strcat(message, " ");
                }
-               message[strlen(message)-1] = '\0';
+               message[strlen(message) - 2] = '\0';
                syslog(pri, "%s", message);
        }