};
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);
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)
{
{
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);
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);
}
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);
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))