From: nekral-guest Date: Sun, 8 Mar 2009 20:26:56 +0000 (+0000) Subject: * libmisc/get_gid.c, libmisc/get_uid.c, libmisc/Makefile.am, X-Git-Tag: 4.1.3~110 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=0e2a3979f411a5f1100da04baf2214d4eaf329be;p=shadow * libmisc/get_gid.c, libmisc/get_uid.c, libmisc/Makefile.am, lib/prototypes.h: Added get_uid() and get_gid() to parse user and group IDs. --- diff --git a/ChangeLog b/ChangeLog index efa98c80..c8bf7991 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,6 +1,9 @@ 2009-03-07 Nicolas François * libmisc/getlong.c: Make sure the getlong argument is not empty. + * libmisc/get_gid.c, libmisc/get_uid.c, libmisc/Makefile.am, + lib/prototypes.h: Added get_uid() and get_gid() to parse user and + group IDs. 2009-03-07 Nicolas François diff --git a/lib/prototypes.h b/lib/prototypes.h index 5b257aa5..bf86ca28 100644 --- a/lib/prototypes.h +++ b/lib/prototypes.h @@ -2,7 +2,7 @@ * Copyright (c) 1990 - 1994, Julianne Frances Haugh * Copyright (c) 1996 - 2000, Marek Michałkiewicz * Copyright (c) 2003 - 2006, Tomasz Kłoczko - * Copyright (c) 2007 - 2008, Nicolas François + * Copyright (c) 2007 - 2009, Nicolas François * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -139,13 +139,19 @@ extern int find_new_gid (bool sys_group, gid_t *gid, gid_t const *preferred_gid) /* find_new_uid.c */ extern int find_new_uid (bool sys_user, uid_t *uid, uid_t const *preferred_uid); +/* get_gid.c */ +extern int get_gid (const char *gidstr, gid_t *gid); + /* getlong.c */ -extern int getlong(const char *numstr, long int *result); +extern int getlong (const char *numstr, long int *result); /* getrange */ -extern int getrange(char *range, - unsigned long *min, bool *has_min, - unsigned long *max, bool *has_max); +extern int getrange (char *range, + unsigned long *min, bool *has_min, + unsigned long *max, bool *has_max); + +/* get_uid.c */ +extern int get_uid (const char *uidstr, uid_t *uid); /* fputsx.c */ extern char *fgetsx (char *, int, FILE *); diff --git a/libmisc/Makefile.am b/libmisc/Makefile.am index e8cd77bf..a6ff0749 100644 --- a/libmisc/Makefile.am +++ b/libmisc/Makefile.am @@ -28,8 +28,10 @@ libmisc_a_SOURCES = \ find_new_uid.c \ getdate.h \ getdate.y \ + get_gid.c \ getlong.c \ getrange.c \ + get_uid.c \ hushed.c \ isexpired.c \ limits.c \ diff --git a/libmisc/get_gid.c b/libmisc/get_gid.c new file mode 100644 index 00000000..c8962588 --- /dev/null +++ b/libmisc/get_gid.c @@ -0,0 +1,54 @@ +/* + * Copyright (c) 2009 , Nicolas François + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the copyright holders or contributors may not be used to + * endorse or promote products derived from this software without + * specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A + * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include + +#ident "$Id$" + +#include "prototypes.h" +#include "defines.h" + +int get_gid (const char *gidstr, gid_t *gid) +{ + long long int val; + char *endptr; + + errno = 0; + val = strtoll (gidstr, &endptr, 10); + if ( ('\0' == gidstr) + || ('\0' != *endptr) + || (ERANGE == errno) + || (val != (gid_t)val)) { + return 0; + } + + *gid = (gid_t)val; + return 1; +} + diff --git a/libmisc/get_uid.c b/libmisc/get_uid.c new file mode 100644 index 00000000..92a09cae --- /dev/null +++ b/libmisc/get_uid.c @@ -0,0 +1,54 @@ +/* + * Copyright (c) 2009 , Nicolas François + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the copyright holders or contributors may not be used to + * endorse or promote products derived from this software without + * specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A + * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include + +#ident "$Id$" + +#include "prototypes.h" +#include "defines.h" + +int get_uid (const char *uidstr, uid_t *uid) +{ + long long int val; + char *endptr; + + errno = 0; + val = strtoll (uidstr, &endptr, 10); + if ( ('\0' == uidstr) + || ('\0' != *endptr) + || (ERANGE == errno) + || (val != (uid_t)val)) { + return 0; + } + + *uid = (uid_t)val; + return 1; +} + diff --git a/libmisc/getrange.c b/libmisc/getrange.c index 308d32be..9b5e6117 100644 --- a/libmisc/getrange.c +++ b/libmisc/getrange.c @@ -48,9 +48,9 @@ * If the range is valid, getrange returns 1. * If the range is not valid, getrange returns 0. */ -int getrange(char *range, - unsigned long *min, bool *has_min, - unsigned long *max, bool *has_max) +int getrange (char *range, + unsigned long *min, bool *has_min, + unsigned long *max, bool *has_max) { char *endptr; unsigned long n;