X-Git-Url: https://jfr.im/git/solanum.git/blobdiff_plain/7e1a68eaf8e5c52254b82469244e64842a41dda7..ea41b24fd4807e3565bf5f8f293e2efc4c20b62d:/modules/m_privs.c diff --git a/modules/m_privs.c b/modules/m_privs.c index 7ff25a6b..29e141ae 100644 --- a/modules/m_privs.c +++ b/modules/m_privs.c @@ -106,8 +106,13 @@ static void show_privs(struct Client *source_p, struct Client *target_p) 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)) { @@ -172,6 +177,13 @@ mo_privs(struct MsgBuf *msgbuf_p, struct Client *client_p, struct Client *source } } + 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;