]> jfr.im git - irc/freenode/solanum.git/commitdiff
privilege: factor out a null check
authorEd Kellett <redacted>
Fri, 29 Jan 2021 13:13:53 +0000 (13:13 +0000)
committerEd Kellett <redacted>
Mon, 1 Mar 2021 15:45:03 +0000 (15:45 +0000)
include/privilege.h
ircd/privilege.c
ircd/s_user.c
modules/m_privs.c

index ab0931887300c2839b25016ead20b1eec0257ace..555eb868b29189fe0b42a818e5dbd0d226bc1671 100644 (file)
@@ -62,6 +62,7 @@ struct PrivilegeSet {
 };
 
 bool privilegeset_in_set(const struct PrivilegeSet *set, const char *priv);
+const char **privilegeset_privs(const struct PrivilegeSet *set);
 struct PrivilegeSet *privilegeset_set_new(const char *name, const char *privs, PrivilegeFlags flags);
 struct PrivilegeSet *privilegeset_extend(const struct PrivilegeSet *parent, const char *name, const char *privs, PrivilegeFlags flags);
 struct PrivilegeSet *privilegeset_get(const char *name);
index 1bb645810debce3e4ad9c090c913c3915567f20f..2264efaeb57bfdee3d2044806302b1097b845647 100644 (file)
@@ -233,6 +233,13 @@ privilegeset_in_set(const struct PrivilegeSet *set, const char *priv)
        return found != NULL;
 }
 
+const char **
+privilegeset_privs(const struct PrivilegeSet *set)
+{
+       static const char *no_privs[] = { NULL };
+       return set->privs != NULL ? set->privs : no_privs;
+}
+
 struct PrivilegeSet *
 privilegeset_set_new(const char *name, const char *privs, PrivilegeFlags flags)
 {
@@ -355,10 +362,8 @@ privilegeset_diff(const struct PrivilegeSet *old, const struct PrivilegeSet *new
        {
                const char *oldpriv = NULL, *newpriv = NULL;
                int ord = 0;
-               if (i < old->size)
-                       oldpriv = old->privs[i];
-               if (j < new->size)
-                       newpriv = new->privs[j];
+               oldpriv = privilegeset_privs(old)[i];
+               newpriv = privilegeset_privs(new)[j];
 
                if (oldpriv && newpriv)
                        ord = strcmp(oldpriv, newpriv);
@@ -443,7 +448,7 @@ privilegeset_report(struct Client *source_p)
                                set->name);
                send_multiline_remote_pad(source_p, &me);
                send_multiline_remote_pad(source_p, source_p);
-               for (const char **s = set->privs; s && *s; s++)
+               for (const char **s = privilegeset_privs(set); *s != NULL; s++)
                        send_multiline_item(source_p, "%s", *s);
                send_multiline_fini(source_p, NULL);
        }
index 56b901344048f6fa02d2f418a8674c2ba510ad99..4c4103acf429453dbcf96bc69323145ea4dfb5d1 100644 (file)
@@ -1496,7 +1496,7 @@ oper_up(struct Client *source_p, struct oper_conf *oper_p)
        sendto_one(source_p, form_str(RPL_YOUREOPER), me.name, source_p->name);
        sendto_one_notice(source_p, ":*** Oper privilege set is %s", oper_p->privset->name);
        send_multiline_init(source_p, " ", ":%s NOTICE %s :*** Oper privs are ", me.name, source_p->name);
-       for (const char **s = oper_p->privset->privs; s && *s; s++)
+       for (const char **s = privilegeset_privs(oper_p->privset); *s != NULL; s++)
                send_multiline_item(source_p, "%s", *s);
        send_multiline_fini(source_p, NULL);
        send_oper_motd(source_p);
index ea972e92448c496ae95455b1ee29ff38460a5ab3..443530bbca122d45b4d257276ce6ee917b34bf7e 100644 (file)
@@ -95,7 +95,7 @@ static void show_privs(struct Client *source_p, struct Client *target_p)
        send_multiline_remote_pad(source_p, source_p);
 
        if (target_p->user->privset)
-               for (const char **s = target_p->user->privset->privs; *s != NULL; s++)
+               for (const char **s = privilegeset_privs(target_p->user->privset); *s != NULL; s++)
                        send_multiline_item(source_p, "%s", *s);
 
        if (IsOper(target_p))