buf[0] = '\0';
if (target_p->user->privset)
- for (const char *s = strtok(target_p->user->privset->privs, " "); s != NULL; s = strtok(NULL, " "))
+ for (char *s = target_p->user->privset->privs; s != NULL; (s = strchr(s, ' ')) && s++)
+ {
+ char *c = strchr(s, ' ');
+ if (c) *c = '\0';
append_priv(source_p, target_p, buf, s, "");
+ if (c) *c = ' ';
+ }
if (IsOper(target_p))
{
}
}
+ if (target_p != source_p && !HasPrivilege(source_p, "oper:privs"))
+ {
+ sendto_one(source_p, form_str(ERR_NOPRIVS),
+ me.name, source_p->name, "privs");
+ return;
+ }
+
if (!IsServer(server_p))
server_p = server_p->servptr;