diff options
Diffstat (limited to 'src/userprivs.c')
-rw-r--r-- | src/userprivs.c | 49 |
1 files changed, 20 insertions, 29 deletions
diff --git a/src/userprivs.c b/src/userprivs.c index b224a00..3270905 100644 --- a/src/userprivs.c +++ b/src/userprivs.c @@ -1,3 +1,3 @@ /* This file is part of GNU Pies. - Copyright (C) 2007, 2008, 2009, 2010 Sergey Poznyakoff + Copyright (C) 2007, 2008, 2009, 2010, 2011 Sergey Poznyakoff @@ -40,4 +40,4 @@ str_dispose (const void *elt) -gl_list_t -get_user_groups (gl_list_t init_list, const char *user) +struct grecs_list * +get_user_groups (struct grecs_list *init_list, const char *user) { @@ -45,9 +45,5 @@ get_user_groups (gl_list_t init_list, const char *user) struct group *gr; - gl_list_t list; + struct grecs_list *list; - list = gl_list_create_empty(&gl_linked_list_implementation, - str_eq, - NULL, - str_dispose, - false); + list = grecs_list_create(); @@ -55,11 +51,8 @@ get_user_groups (gl_list_t init_list, const char *user) { - const void *p; - gl_list_iterator_t itr = gl_list_iterator (init_list); - while (gl_list_iterator_next (&itr, &p, NULL)) + struct grecs_list_entry *ep; + + for (ep = init_list->head; ep; ep = ep->next) { - char *s = xstrdup (p); - if (!gl_list_add_last (list, s)) - free (s); + grecs_list_append (list, xstrdup ((char*)ep->data)); } - gl_list_iterator_free (&itr); } @@ -73,5 +66,3 @@ get_user_groups (gl_list_t init_list, const char *user) { - char *s = xstrdup (gr->gr_name); - if (!gl_list_add_last (list, s)) - free (s); + grecs_list_append (list, xstrdup (gr->gr_name)); break; @@ -85,3 +76,3 @@ get_user_groups (gl_list_t init_list, const char *user) int -switch_to_privs (uid_t uid, gid_t gid, gl_list_t retain_groups) +switch_to_privs (uid_t uid, gid_t gid, struct grecs_list *retain_groups) { @@ -92,3 +83,3 @@ switch_to_privs (uid_t uid, gid_t gid, gl_list_t retain_groups) /* Create a list of supplementary groups */ - size = 1 + (retain_groups ? gl_list_size (retain_groups) : 0); + size = 1 + (retain_groups ? grecs_list_size (retain_groups) : 0); emptygidset = xcalloc (size, sizeof emptygidset[0]); @@ -98,10 +89,11 @@ switch_to_privs (uid_t uid, gid_t gid, gl_list_t retain_groups) { - const void *p; - gl_list_iterator_t itr = gl_list_iterator (retain_groups); - while (gl_list_iterator_next (&itr, &p, NULL)) + struct grecs_list_entry *ep; + + for (ep = retain_groups->head; ep; ep = ep->next) { - struct group *group = getgrnam ((const char*)p); + const char *grname = ep->data; + struct group *group = getgrnam (grname); if (!group) { - logmsg (LOG_ERR, _("unknown group: %s"), (const char*)p); + logmsg (LOG_ERR, _("unknown group: %s"), grname); free (emptygidset); @@ -111,3 +103,2 @@ switch_to_privs (uid_t uid, gid_t gid, gl_list_t retain_groups) } - gl_list_iterator_free (&itr); } @@ -211,3 +202,3 @@ pies_priv_setup (struct pies_privs *privs) struct passwd *pw; - gl_list_t grplist = 0; + struct grecs_list *grplist = 0; @@ -229,3 +220,3 @@ pies_priv_setup (struct pies_privs *privs) if (grplist) - gl_list_free (grplist); + grecs_list_free (grplist); } |