Creating ramdisk on Fedora8

Denys Vlasenko vda.linux at googlemail.com
Tue Feb 26 12:02:49 UTC 2008


On Tuesday 26 February 2008 10:06, Sanjeev Premi wrote:
> Hi,
> 
> I updated my build machine from RHEL machine to Fedora Core
> 8.
> All standard steps to build buisybox (1.9.0) & create a
> ramdisk image go well.
> 
> However, when I browse this ramdisk on my embedded board, I
> see strange characters in "owner" and "group" fields e.g.
> drwxr-xr-x    2 ˆR#@     ˆR#@         2048 Feb 26  2008 bin
> drwxrwxrwt    5 ˆR#@     ˆR#@         2800 Jan  1 00:00 dev
> drwxr-xr-x    3 ˆR#@     ˆR#@         1024 Feb 26  2008 etc
> drwxr-xr-x    2 ˆR#@     ˆR#@         1024 Feb 26  2008
> home
> 
> Disabled selinux completely ...just in case, but did not
> help either.
> 
> Any pointers??

It happens here (coreutils/ls.c):

#if ENABLE_FEATURE_LS_USERNAME
                        printf("%-8.8s %-8.8s",
                                get_cached_username(dn->dstat.st_uid),
                                get_cached_groupname(dn->dstat.st_gid));
                        column += 17;
                        break;
#endif


These functions are here:


static char* get_cached(cache_t *cp, unsigned id, ug_func* fp)
{
...
        fp(cp->cache[i].name, sizeof(cp->cache[i].name), id);
        return cp->cache[i].name;
}
const char* get_cached_username(uid_t uid)
{
        return get_cached(&username, uid, bb_getpwuid);
}
const char* get_cached_groupname(gid_t gid)
{
        return get_cached(&groupname, gid, bb_getgrgid);
}


Lets look at bb_getpwuid. We clearlt have bufsize > 0 (it is set to
sizeof(cp->cache[i].name)), so.. can you add these bb_error_msg's
and see what they print?


static char* bb_getug(char *buffer, int bufsize, char *idname, long id, char prefix)
{
        if (bufsize > 0) {
                assert(buffer != NULL);
                if (idname) {
+bb_error_msg("CASE 1: user found, name '%s'", idname);
                        return safe_strncpy(buffer, idname, bufsize);
                }
+bb_error_msg("CASE 2: user not found, returning numeric '%ld'", id);
                snprintf(buffer, bufsize, "%ld", id);
        } else if (bufsize < 0 && !idname) {
                bb_error_msg_and_die("unknown %cid %ld", prefix, id);
        }
        return idname;
}

char* bb_getpwuid(char *name, int bufsize, long uid)
{
        struct passwd *myuser = getpwuid(uid);
        return bb_getug(name, bufsize,
                        (myuser ? myuser->pw_name : (char*)myuser),
                        uid, 'u');
}


--
vda



More information about the busybox mailing list