udev - simple klibc textual uid/gid handling
PATCH 1/1 udev - simple klibc textual uid/gid handling
Here we get a very dumb getpwnam() and getgrnam() for klibc to stop the confusion of not handling textual id's if klibc is used.
If used with initrd we just need to copy the /etc/passwd and /etc/group file and all should work well.
thanks,
Kay
===== klibc_fixups.c 1.4 vs edited =====
klibc_fixups.c +100 -0
@@ -1,10 +1,110 @@ +/* +* klibc_fixups.c - very simple implementation of stuff missing in klibc +* +* Copyright (C) 2003 Greg Kroah-Hartman <[email protected]> +* Copyright (C) 2004 Kay Sievers <[email protected]> +* +* This program is free software; you can redistribute it and/or modify it +* under the terms of the GNU General Public License as published by the +* Free Software Foundation version 2 of the License. +* +* This program is distributed in the hope that it will be useful, but +* WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +* General Public License for more details. +* +* You should have received a copy of the GNU General Public License along +* with this program; if not, write to the Free Software Foundation, Inc., +* 675 Mass Ave, Cambridge, MA 02139, USA. +* +*/ #ifdef __KLIBC__#include <stdlib.h> +#include <stdio.h> #include <string.h> #include <ctype.h> #include <sys/types.h> +#include "klibc_fixups.h" +#include "logging.h" + +#define PW_FILE "/etc/passwd" +#define GR_FILE "/etc/group" + +/* return the id of a passwd style line, selected by the users name */ +static unsigned long get_id_by_name (const char *uname,const char *dbfile) +{ +unsigned long id =-1 ; +FILE *file; +char buf[255 ]; +char *pos; +char *name; +char *idstr; +char *tail; + + file =fopen (dbfile,"r" ); +if (file ==NULL ) { +dbg ("unable to open file '%s'" , dbfile); +return -1 ; + } + +while (1 ) { + pos =fgets (buf,sizeof (buf), file); +if (pos ==NULL ) +break ; + +/* get name */ + name =strsep (&pos,":" ); +if (name ==NULL ) +continue ; + +/* skip pass */ +if (strsep (&pos,":" ) ==NULL ) +continue ; + +/* get id */ + idstr =strsep (&pos,":" ); +if (idstr ==NULL ) +continue ; + +if (strcmp (uname, name) ==0 ) { + id =strtoul (idstr, &tail,10 ); +if (tail ==NULL ) + id =-1 ; +else +dbg ("id for '%s' is '%li'" , name, id); +break ; + } + } + +fclose (file); +return id; +} + +struct passwd *getpwnam (const char *name) +{ +static struct passwd pw; + +memset (&pw,0x00 ,sizeof (struct passwd )); + pw.pw_uid = (uid_t )get_id_by_name (name,PW_FILE ); +if (pw.pw_uid <0 ) +return NULL ; +else +return &pw; +} + +struct group *getgrnam (const char *name) +{ +static struct group gr; + +memset (&gr,0x00 ,sizeof (struct group )); + gr.gr_gid = (gid_t )get_id_by_name (name,GR_FILE ); +if (gr.gr_gid <0 ) +return NULL ; +else +return &gr; +}#endif
===== klibc_fixups.h 1.4 vs edited =====
klibc_fixups.h +8 -17
@@ -3,19 +3,6 @@#ifndef KLIBC_FIXUPS_H #define KLIBC_FIXUPS_H -struct group { - char *gr_name; /* group name */ - char *gr_passwd; /* group password */ - gid_t gr_gid; /* group id */ - char **gr_mem; /* group members */ -}; - -static inline struct group *getgrnam(const char *name) -{ - return NULL; -} - - struct passwd {char *pw_name;/* user name */ char *pw_passwd;/* user password */
@@ -26,11 +13,15 @@ char *pw_shell; /* shell program */ }; -static inline struct passwd *getpwnam (const char *name) -{ -return NULL ; -} +struct group { +char *gr_name;/* group name */ +char *gr_passwd;/* group password */ +gid_t gr_gid;/* group id */ +char **gr_mem;/* group members */ +}; +struct passwd *getpwnam (const char *name); +struct group *getgrnam (const char *name);#endif
Quoted 5 lines · Kay Sievers
Here we get a very dumb
getpwnam()andgetgrnam()for klibc to stop the confusion of not handling textual id's if klibc is used.If used with initrd we just need to copy the
/etc/passwdand/etc/groupfile and all should work well.
Argh! I was just starting to work on this myself! Will I ever get to implement a new feature in udev again... :)
Heh, anyway, thanks a lot for this, I'll go apply it right now...
greg k-h
-------------------------------------------------------
SF.Net is sponsored by: Speed Start Your Linux Apps Now. Build and deploy apps & Web services for Linux with
a free DVD software kit from IBM. Click Now!
http://ads.osdn.com/?ad_id56&alloc_id438&op=click
_______________________________________________
Linux-hotplug-devel mailing list http://linux-hotplug.sourceforge.net
[email protected]
https://lists.sourceforge.net/lists/listinfo/linux-hotplug-devel
Quoted 9 lines · Greg KH
Quoted 5 lines · Kay Sievers
Here we get a very dumb
getpwnam()andgetgrnam()for klibc to stop the confusion of not handling textual id's if klibc is used.If used with initrd we just need to copy the
/etc/passwdand/etc/groupfile and all should work well.Argh! I was just starting to work on this myself! Will I ever get to implement a new feature in udev again... :)
Oh, and I announced it today 4 hours ago on the list. Maybe I need to cc you directly if new things are in work :)
Just to avoid conflicts:
The next thing I will do is to check the string handling for overflows. :)
have a nice day,
Kay
-------------------------------------------------------
SF.Net is sponsored by: Speed Start Your Linux Apps Now. Build and deploy apps & Web services for Linux with
a free DVD software kit from IBM. Click Now!
http://ads.osdn.com/?ad_id56&alloc_id438&op=click
_______________________________________________
Linux-hotplug-devel mailing list http://linux-hotplug.sourceforge.net
[email protected]
https://lists.sourceforge.net/lists/listinfo/linux-hotplug-devel
Quoted 5 lines · Kay Sievers
Quoted 4 lines · Greg KH
Quoted 3 lines · Kay Sievers
Here we get a very dumb
getpwnam()andgetgrnam()for klibc to stop the confusion of not handling textual id's if klibc is used.
Quoted 8 lines
Quoted 5 lines
Quoted 2 lines
If used with initrd we just need to copy the
/etc/passwdand/etc/groupfile and all should work well.Argh! I was just starting to work on this myself! Will I ever get to implement a new feature in udev again... :)
Oh, and I announced it today 4 hours ago on the list. Maybe I need to cc you directly if new things are in work :)
Heh, no, I haven't caught up on email from the weekend yet :)
Quoted 3 lines
Just to avoid conflicts:
The next thing I will do is to check the string handling for overflows. :)
Keep up the great work.
thanks,
greg k-h
-------------------------------------------------------
SF.Net is sponsored by: Speed Start Your Linux Apps Now. Build and deploy apps & Web services for Linux with
a free DVD software kit from IBM. Click Now!
http://ads.osdn.com/?ad_id56&alloc_id438&op=click
_______________________________________________
Linux-hotplug-devel mailing list http://linux-hotplug.sourceforge.net
[email protected]
https://lists.sourceforge.net/lists/listinfo/linux-hotplug-devel