[OE-core] [PATCH] makedevs: Change numeric user/group ids to user/group names in device table
Mark Hatle
mark.hatle at windriver.com
Wed Jul 31 14:29:35 UTC 2013
On 7/31/13 7:14 AM, Prica, Mihai wrote:
>> -----Original Message-----
>> From: Saul Wold [mailto:sgw at linux.intel.com]
>> Sent: Tuesday, July 30, 2013 5:57 PM
>> To: Prica, Mihai
>> Cc: openembedded-core at lists.openembedded.org
>> Subject: Re: [OE-core] [PATCH] makedevs: Change numeric user/group ids to
>> user/group names in device table
>>
>> On 07/30/2013 02:45 AM, Mihai Prica wrote:
>>> Full usernames and groupnames should be used instead of numeric ids
>>> in meta/files/device_table-minimal.txt.
>>>
>>
>> I think this will uses the host's files not the target's rootfs, please verify this.
>>
>> Thanks
>> Sau!
>
> I used strace and it seems it tries to use the files on the rootfs but they don't exist
> when the check is done so the files on the host are used instead. The base-passwd
> package which installs the /etc/passwd and /etc/group files is installed latter in the
> rootfs generation process. I'll search for a solution to this problem or for another
> approach.
The pseudo environment is configured to look in the sysroot's /etc for those
files. If they don't exist it's only alternative is to fall back to the system.
If something needs access to the the name -> number resolution before
/etc/passwd,/etc/group are installed - then I think we have a missing dependency
(automatic or otherwise).
As far as I can tell, we should never have a situation where the (target)
passwd/group are not available to pseudo for local resolution.
We might need to add the installation of those files as a base system dependency.
--Mark
> Thanks,
> Mihai
>>
>>
>>> [YOCTO #1159]
>>>
>>> Signed-off-by: Mihai Prica <mihai.prica at intel.com>
>>> ---
>>> meta/files/device_table-minimal.txt | 47 ++++++++++----------
>>> .../makedevs/makedevs-1.0.0/makedevs.c | 23 ++++++++--
>>> 2 files changed, 43 insertions(+), 27 deletions(-)
>>>
>>> diff --git a/meta/files/device_table-minimal.txt
>>> b/meta/files/device_table-minimal.txt
>>> index 02ed534..41c6e0b 100644
>>> --- a/meta/files/device_table-minimal.txt
>>> +++ b/meta/files/device_table-minimal.txt
>>> @@ -1,5 +1,5 @@
>>> -#<path> <type> <mode> <uid> <gid> <major> <minor>
>> <start> <inc> <count>
>>> -#/dev/mem c 640 0 0 1 1 0 0 -
>>> +#<path> <type> <mode> <username> <groupname> <major>
>> <minor> <start> <inc> <count>
>>> +#/dev/mem c 640 root root 1 1 0 0 -
>>> #
>>> #type can be one of:
>>> # f A regular file
>>> @@ -8,24 +8,25 @@
>>> # b Block special device file
>>> # p Fifo (named pipe)
>>>
>>> -/dev d 755 0 0 - - - - -
>>> -/dev/initctl p 600 0 0 - - - - -
>>> -/dev/apm_bios c 660 0 46 10 134 - -
>> -
>>> -/dev/fb0 c 600 0 0 29 0 - - -
>>> -/dev/hda b 660 0 6 3 0 - - -
>>> -/dev/hda b 660 0 6 3 1 1 1 19
>>> -/dev/kmem c 640 0 15 1 2 - - -
>>> -/dev/kmsg c 600 0 0 1 11 - - -
>>> -/dev/mem c 640 0 15 1 1 - - -
>>> -/dev/null c 666 0 0 1 3 - - -
>>> -/dev/ram b 640 0 0 1 0 0 1 4
>>> -/dev/tty c 662 0 5 5 0 - - -
>>> -/dev/tty c 666 0 5 4 0 0 1 9
>>> -/dev/ttyS c 640 0 5 4 64 0 1 1
>>> -/dev/ttySA c 640 0 5 204 5 0 1 1
>>> -/dev/zero c 644 0 0 1 5 - - -
>>> -/dev/mtd c 660 0 6 90 0 0 2 8
>>> -/dev/mtdblock b 640 0 0 31 0 0 1
>> 8
>>> -/dev/console c 662 0 5 5 1 - -
>> -
>>> -/dev/random c 644 0 0 1 8 - -
>> -
>>> -/dev/urandom c 644 0 0 1 9 - -
>> -
>>> +/dev d 755 root root - - - -
>> -
>>> +/dev/initctl p 600 root root - - - - -
>>> +/dev/apm_bios c 660 root plugdev 10 134 -
>> - -
>>> +/dev/fb0 c 600 root root 29 0 - - -
>>> +/dev/hda b 660 root disk 3 0 - - -
>>> +/dev/hda b 660 root disk 3 1 1 1 20
>>> +/dev/kmem c 640 root kmem 1 2 - - -
>>> +/dev/kmsg c 600 root root 1 11 - - -
>>> +/dev/mem c 640 root kmem 1 1 - - -
>>> +/dev/null c 666 root root 1 3 - - -
>>> +/dev/ram b 640 root root 1 0 0 1 4
>>> +/dev/tty c 662 root tty 5 0 - - -
>>> +/dev/tty c 666 root tty 4 0 0 1 9
>>> +/dev/ttyS c 640 root tty 4 64 0 1 1
>>> +/dev/ttySA c 640 root tty 204 5 0 1 1
>>> +/dev/zero c 644 root root 1 5 - - -
>>> +/dev/mtd c 660 root disk 90 0 0 2 8
>>> +/dev/mtdblock b 640 root root 0 31 0 0
>> 1 8
>>> +/dev/console c 662 root root 5 1 - -
>> -
>>> +/dev/random c 644 root root 1 8 - -
>> -
>>> +/dev/urandom c 644 root root 1 9 - -
>> -
>>> +
>>> diff --git a/meta/recipes-devtools/makedevs/makedevs-1.0.0/makedevs.c
>>> b/meta/recipes-devtools/makedevs/makedevs-1.0.0/makedevs.c
>>> index 6c1f2fb..26bbe33 100644
>>> --- a/meta/recipes-devtools/makedevs/makedevs-1.0.0/makedevs.c
>>> +++ b/meta/recipes-devtools/makedevs/makedevs-1.0.0/makedevs.c
>>> @@ -13,6 +13,8 @@
>>> #include <libgen.h>
>>> #include <sys/types.h>
>>> #include <sys/stat.h>
>>> +#include <pwd.h>
>>> +#include <grp.h>
>>>
>>> #define MINORBITS 8
>>> #define MKDEV(ma,mi) (((ma) << MINORBITS) | (mi))
>>> @@ -180,13 +182,15 @@ static void add_new_fifo(char *name, char *path,
>> unsigned long uid,
>>> */
>>> static int interpret_table_entry(char *line)
>>> {
>>> - char *name;
>>> - char path[4096], type;
>>> + char *name;
>>> + char path[4096], username[32], groupname[32], type;
>>> unsigned long mode = 0755, uid = 0, gid = 0, major = 0, minor = 0;
>>> unsigned long start = 0, increment = 1, count = 0;
>>> + struct passwd *pw;
>>> + struct group *gr;
>>>
>>> - if (0 > sscanf(line, "%40s %c %lo %lu %lu %lu %lu %lu %lu %lu", path,
>>> - &type, &mode, &uid, &gid, &major, &minor, &start,
>>> + if (0 > sscanf(line, "%40s %c %lo %s %s %lu %lu %lu %lu %lu", path,
>>> + &type, &mode, &username, &groupname, &major, &minor,
>> &start,
>>> &increment, &count))
>>> {
>>> return 1;
>>> @@ -198,6 +202,17 @@ static int interpret_table_entry(char *line)
>>> name = xstrdup(path + 1);
>>> sprintf(path, "%s/%s", rootdir, name);
>>>
>>> + pw = getpwnam(username);
>>> + if (pw == NULL) {
>>> + error_msg_and_die("Username does not exist in the user
>> database");
>>> + }
>>> + uid = pw->pw_uid;
>>> + gr = getgrnam(groupname);
>>> + if (gr == NULL) {
>>> + error_msg_and_die("Groupname does not exist in the group
>> database ");
>>> + }
>>> + gid = gr->gr_gid;
>>> +
>>> switch (type) {
>>> case 'd':
>>> mode |= S_IFDIR;
>>>
> _______________________________________________
> Openembedded-core mailing list
> Openembedded-core at lists.openembedded.org
> http://lists.openembedded.org/mailman/listinfo/openembedded-core
>
More information about the Openembedded-core
mailing list