extern unsigned int module_dirlen;
extern mode_t orig_umask;
extern char *partial_dir;
-extern struct filter_list_struct daemon_filter_list;
+extern filter_rule_list daemon_filter_list;
int sanitize_paths = 0;
}
}
-/** Turn a user name into a uid */
-int name_to_uid(const char *name, uid_t *uid_p)
+/* Parse a user name or (optionally) a number into a uid */
+int user_to_uid(const char *name, uid_t *uid_p, BOOL num_ok)
{
struct passwd *pass;
if (!name || !*name)
return 0;
+ if (num_ok && name[strspn(name, "0123456789")] == '\0') {
+ *uid_p = atol(name);
+ return 1;
+ }
if (!(pass = getpwnam(name)))
return 0;
*uid_p = pass->pw_uid;
return 1;
}
-/** Turn a group name into a gid */
-int name_to_gid(const char *name, gid_t *gid_p)
+/* Parse a group name or (optionally) a number into a gid */
+int group_to_gid(const char *name, gid_t *gid_p, BOOL num_ok)
{
struct group *grp;
if (!name || !*name)
return 0;
+ if (num_ok && name[strspn(name, "0123456789")] == '\0') {
+ *gid_p = atol(name);
+ return 1;
+ }
if (!(grp = getgrnam(name)))
return 0;
*gid_p = grp->gr_gid;