aboutsummaryrefslogtreecommitdiff
path: root/src/userprivs.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/userprivs.c')
-rw-r--r--src/userprivs.c49
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);
}

Return to:

Send suggestions and report system problems to the System administrator.