diff options
Diffstat (limited to 'libbb')
-rw-r--r-- | libbb/Makefile.in | 2 | ||||
-rw-r--r-- | libbb/my_getgrgid.c | 30 | ||||
-rw-r--r-- | libbb/my_getpwuid.c | 30 |
3 files changed, 57 insertions, 5 deletions
diff --git a/libbb/Makefile.in b/libbb/Makefile.in index f993b21ea..26ed5b132 100644 --- a/libbb/Makefile.in +++ b/libbb/Makefile.in @@ -34,7 +34,7 @@ LIBBB_SRC:= \ human_readable.c inet_common.c inode_hash.c interface.c isdirectory.c \ kernel_version.c last_char_is.c llist_add_to.c login.c loop.c \ make_directory.c mode_string.c module_syscalls.c mtab.c mtab_file.c \ - my_getgrgid.c my_getgrnam.c my_getpwnam.c my_getpwnamegid.c \ + my_getgrgid.c my_getgrnam.c my_getpwnam.c \ my_getpwuid.c obscure.c parse_mode.c parse_number.c perror_msg.c \ perror_msg_and_die.c print_file.c get_console.c \ process_escape_sequence.c procps.c pwd2spwd.c pw_encrypt.c qmodule.c \ diff --git a/libbb/my_getgrgid.c b/libbb/my_getgrgid.c index e6b877687..8c530964c 100644 --- a/libbb/my_getgrgid.c +++ b/libbb/my_getgrgid.c @@ -19,8 +19,23 @@ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ + /* Hacked by Tito Ragusa (c) 2004 <farmatito@tiscali.it> to make it more + * flexible : + * + * if bufsize is > 0 char *group cannot be set to NULL + * on success groupname is written on static allocated buffer + * on failure gid as string is written to buffer and NULL is returned + * if bufsize is = 0 char *group can be set to NULL + * on success groupname is returned + * on failure NULL is returned + * if bufsize is < 0 char *group can be set to NULL + * on success groupname is returned + * on failure an error message is printed and the program exits + */ + #include <stdio.h> #include <string.h> +#include <assert.h> #include "libbb.h" #include "pwd_.h" #include "grp_.h" @@ -33,10 +48,21 @@ char * my_getgrgid(char *group, long gid, int bufsize) mygroup = getgrgid(gid); if (mygroup==NULL) { - snprintf(group, bufsize, "%ld", gid); + if(bufsize > 0) { + assert(group != NULL); + snprintf(group, bufsize, "%ld", (long)gid); + } + if( bufsize < 0 ) { + bb_error_msg_and_die("unknown gid %ld", (long)gid); + } return NULL; } else { - return safe_strncpy(group, mygroup->gr_name, bufsize); + if(bufsize > 0) + { + assert(group != NULL); + return safe_strncpy(group, mygroup->gr_name, bufsize); + } + return mygroup->gr_name; } } diff --git a/libbb/my_getpwuid.c b/libbb/my_getpwuid.c index 53f6c77ee..1e8b11a09 100644 --- a/libbb/my_getpwuid.c +++ b/libbb/my_getpwuid.c @@ -19,8 +19,23 @@ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ + /* Hacked by Tito Ragusa (c) 2004 <farmatito@tiscali.it> to make it more + * flexible : + * + * if bufsize is > 0 char *user can not be set to NULL + * on success username is written on static allocated buffer + * on failure uid as string is written to buffer and NULL is returned + * if bufsize is = 0 char *user can be set to NULL + * on success username is returned + * on failure NULL is returned + * if bufsize is < 0 char *user can be set to NULL + * on success username is returned + * on failure an error message is printed and the program exits + */ + #include <stdio.h> #include <string.h> +#include <assert.h> #include "libbb.h" #include "pwd_.h" #include "grp_.h" @@ -34,10 +49,21 @@ char * my_getpwuid(char *name, long uid, int bufsize) myuser = getpwuid(uid); if (myuser==NULL) { - snprintf(name, bufsize, "%ld", (long)uid); + if(bufsize > 0) { + assert(name != NULL); + snprintf(name, bufsize, "%ld", (long)uid); + } + if (bufsize < 0 ) { + bb_error_msg_and_die("unknown uid %ld", (long)uid); + } return NULL; } else { - return safe_strncpy(name, myuser->pw_name, bufsize); + if(bufsize > 0 ) + { + assert(name != NULL); + return safe_strncpy(name, myuser->pw_name, bufsize); + } + return myuser->pw_name; } } |