]> jfr.im git - irc/rqf/shadowircd.git/commitdiff
Add privilegeset_extend().
authorWilliam Pitcock <redacted>
Sun, 17 Aug 2008 11:35:49 +0000 (06:35 -0500)
committerWilliam Pitcock <redacted>
Sun, 17 Aug 2008 11:35:49 +0000 (06:35 -0500)
include/privilege.h
src/privilege.c

index b033839ad7d3901a2bbce6d3a992561ef3c789b4..4eb7564bc32867c8a5839da8c23111559a657028 100644 (file)
@@ -40,6 +40,7 @@ struct PrivilegeSet {
 
 int privilegeset_in_set(struct PrivilegeSet *set, const char *priv);
 struct PrivilegeSet *privilegeset_set_new(const char *name, const char *privs, PrivilegeFlags flags);
+struct PrivilegeSet *privilegeset_extend(struct PrivilegeSet *parent, const char *name, const char *privs, PrivilegeFlags flags);
 struct PrivilegeSet *privilegeset_get(const char *name);
 void privilegeset_ref(struct PrivilegeSet *set);
 void privilegeset_unref(struct PrivilegeSet *set);
index 91cc39d226fef91382911e3da4f2f02550c55b79..c2ce6e2b426c054fd62c91008a167be944c7f3d9 100644 (file)
@@ -40,6 +40,8 @@ privilegeset_set_new(const char *name, const char *privs, PrivilegeFlags flags)
 {
        struct PrivilegeSet *set;
 
+       s_assert(privilegeset_get(name) == NULL);
+
        set = rb_malloc(sizeof(struct PrivilegeSet));
        set->refs = 1;
        set->name = rb_strdup(name);
@@ -51,6 +53,28 @@ privilegeset_set_new(const char *name, const char *privs, PrivilegeFlags flags)
        return set;
 }
 
+struct PrivilegeSet *
+privilegeset_extend(struct PrivilegeSet *parent, const char *name, const char *privs, PrivilegeFlags flags)
+{
+       struct PrivilegeSet *set;
+
+       s_assert(parent != NULL);
+       s_assert(name != NULL);
+       s_assert(privs != NULL);
+       s_assert(privilegeset_get(name) == NULL);
+
+       set = rb_malloc(sizeof(struct PrivilegeSet));
+       set->refs = 1;
+       set->name = rb_strdup(name);
+       set->flags = flags;
+       set->privs = rb_malloc(strlen(parent->privs) + 1 + strlen(privs) + 1);
+       strcpy(parent->privs, set->privs);
+       strcat(set->privs, " ");
+       strcat(set->privs, privs);
+
+       return set;
+}
+
 struct PrivilegeSet *
 privilegeset_get(const char *name)
 {