xfsprogs: xfs_quota allow user or group names beginning with digits
PATCH 1/1 xfsprogs: xfs_quota allow user or group names beginning with digits
xfs_quota does not properly parse users or groups that begin with a number. Only call atoi when user or group consists of digits only.
--- include/input.h | 1 + libxcmd/input.c | 12 ++++++++++++ quota/quota.c | 4 ++-- quota/quota.h | 1 + 4 files changed, 16 insertions(+), 2 deletions(-)
include/input.h +1 -0
@@ -46,6 +46,7 @@ extern void timestr(struct timeval *tv,extern uid_t uid_from_string (char *user);extern gid_t gid_from_string (char *group);extern prid_t prid_from_string (char *project); +extern boolean_t isdigits_only (const char *str);#define HAVE_FTW_H 1/* TODO: configure me */
libxcmd/input.c +12 -0
@@ -398,6 +398,18 @@ gid_from_string(return -1 ; } +boolean_t isdigits_only ( +const char *str) +{ +int i; + +for (i=0 ; i <strlen (str); i++) { +if (!isdigit (str[i])) +return B_FALSE ; + } +return B_TRUE ; +} +#define HAVE_FTW_H 1/* TODO: configure me */ #ifndef HAVE_FTW_H
quota/quota.c +2 -2
@@ -224,7 +224,7 @@ quota_user_type(uid_t id;if (name) { -if (isdigit (name[0 ])) { +if (isdigits_only (name)) { id =atoi (name); name =getusername (id, flags &NO_LOOKUP_FLAG ); }else if ((u =getpwnam (name))) {
@@ -273,7 +273,7 @@ quota_group_type(int i, ngroups, dofree =0 ;if (name) { -if (isdigit (name[0 ])) { +if (isdigits_only (name)) { gid =atoi (name); name =getgroupname (gid, flags &NO_LOOKUP_FLAG ); }else {
quota/quota.h +1 -0
@@ -80,4 +80,5 @@ enum {extern char *uid_to_name (__uint32_t __uid);extern char *gid_to_name (__uint32_t __gid);extern char *prid_to_name (__uint32_t __prid); +extern boolean_t isdigits_only (const char *);
_______________________________________________
xfs mailing list
[email protected]
http://oss.sgi.com/mailman/listinfo/xfs
On 4/17/13 1:32 PM, [email protected] wrote:
<some kind of email that doesn't show up when I hit reply so repasting ;)>
Quoted 6 lines
xfs_quotadoes not properly parse users or groups that begin with a number. Only call atoi when user or group consists of digits only.Signed-off-by Rich Johnston <[email protected]>
Seems sane to me. I'd change i=0 to i = 0, but *shrug*
[xfsprogs]$ grep -r "i = 0" * | wc -l
404
[xfsprogs]$ grep -r "i=0" * | wc -l
10
Other than that,
Quoted 76 lines
--- include/input.h | 1 + libxcmd/input.c | 12 ++++++++++++ quota/quota.c | 4 ++-- quota/quota.h | 1 + 4 files changed, 16 insertions(+), 2 deletions(-)Index:
b/include/input.h
===================================================================include/input.h +1
-0@@ -46,6 +46,7 @@ extern void timestr(struct timeval *tv,extern uid_t uid_from_string (char *user);extern gid_t gid_from_string (char *group);extern prid_t prid_from_string (char *project); +extern boolean_t isdigits_only (const char *str);#define HAVE_FTW_H 1/* TODO: configure me */ Index:
b/libxcmd/input.c
===================================================================libxcmd/input.c +12
-0@@ -398,6 +398,18 @@ gid_from_string(return -1 ; } +boolean_t isdigits_only ( +const char *str) +{ +int i; + +for (i=0 ; i <strlen (str); i++) { +if (!isdigit (str[i])) +return B_FALSE ; + } +return B_TRUE ; +} +#define HAVE_FTW_H 1/* TODO: configure me */ #ifndef HAVE_FTW_H Index:
b/quota/quota.c
===================================================================quota/quota.c +2
-2@@ -224,7 +224,7 @@ quota_user_type(uid_t id;if (name) { -if (isdigit (name[0 ])) { +if (isdigits_only (name)) { id =atoi (name); name =getusername (id, flags &NO_LOOKUP_FLAG ); }else if ((u =getpwnam (name))) {@@ -273,7 +273,7 @@ quota_group_type(int i, ngroups, dofree =0 ;if (name) { -if (isdigit (name[0 ])) { +if (isdigits_only (name)) { gid =atoi (name); name =getgroupname (gid, flags &NO_LOOKUP_FLAG ); }else {Index:
b/quota/quota.h
===================================================================quota/quota.h +1
-0@@ -80,4 +80,5 @@ enum {extern char *uid_to_name (__uint32_t __uid);extern char *gid_to_name (__uint32_t __gid);extern char *prid_to_name (__uint32_t __prid); +extern boolean_t isdigits_only (const char *);
Quoted 5 lines
_______________________________________________
xfs mailing list
[email protected]
http://oss.sgi.com/mailman/listinfo/xfs
_______________________________________________
xfs mailing list
[email protected]
http://oss.sgi.com/mailman/listinfo/xfs
Quoted 17 lines · On Wed, Apr 17, 2013 at 01:32:53PM -0500, [email protected] wrote:
xfs_quotadoes not properly parse users or groups that begin with a number. Only call atoi when user or group consists of digits only.Signed-off-by Rich Johnston <[email protected]>--- include/input.h | 1 + libxcmd/input.c | 12 ++++++++++++ quota/quota.c | 4 ++-- quota/quota.h | 1 + 4 files changed, 16 insertions(+), 2 deletions(-)Index:
b/include/input.h
===================================================================
include/input.h extern void timestr(struct timeval *tv, · line 49
Quoted 4 lines
include/input.h +1
-0@@ -46,6 +46,7 @@ extern void timestr(struct timeval *tv,extern uid_t uid_from_string (char *user);extern gid_t gid_from_string (char *group);extern prid_t prid_from_string (char *project); +extern boolean_t isdigits_only (const char *str);
bool is the correct type, not boolean_t. My CRC patchset makes userspace fall in line with the removal of boolean_t from the kernel code, so we should probably make this correct from the start. ;)
Cheers,
Dave.
Signature · 7 lines
Dave Chinner [email protected] _______________________________________________ xfs mailing list [email protected] http://oss.sgi.com/mailman/listinfo/xfs