+
+void
+privilegeset_mark_all_illegal(void)
+{
+ rb_dlink_node *iter;
+
+ RB_DLINK_FOREACH(iter, privilegeset_list.head)
+ {
+ struct PrivilegeSet *set = (struct PrivilegeSet *) iter->data;
+
+ /* the "default" privset is special and must remain available */
+ if (!strcmp(set->name, "default"))
+ continue;
+
+ set->status |= CONF_ILLEGAL;
+ rb_free(set->privs);
+ set->privs = rb_strdup("");
+ /* but do not free it yet */
+ }
+}
+
+void
+privilegeset_delete_all_illegal(void)
+{
+ rb_dlink_node *iter, *next;
+
+ RB_DLINK_FOREACH_SAFE(iter, next, privilegeset_list.head)
+ {
+ struct PrivilegeSet *set = (struct PrivilegeSet *) iter->data;
+
+ privilegeset_ref(set);
+ privilegeset_unref(set);
+ }
+}
+
+void
+privilegeset_report(struct Client *source_p)
+{
+ rb_dlink_node *ptr;
+
+ RB_DLINK_FOREACH(ptr, privilegeset_list.head)
+ {
+ struct PrivilegeSet *set = ptr->data;
+
+ /* use RPL_STATSDEBUG for now -- jilles */
+ sendto_one_numeric(source_p, RPL_STATSDEBUG,
+ "O :%s %s",
+ set->name,
+ set->privs);
+ }
+}