diff options
-rw-r--r-- | Changes | 1 | ||||
-rw-r--r-- | include/extern.h | 1 | ||||
-rw-r--r-- | src/chanserv.c | 35 | ||||
-rw-r--r-- | src/misc.c | 12 | ||||
-rw-r--r-- | version.log | 6 |
5 files changed, 40 insertions, 15 deletions
@@ -5,6 +5,7 @@ Provided by Anope Dev. <dev@anope.org> - 2005 02/13 A Internal Event support, see EVENTS in the doc folder for help [ #00] 02/05 A Support for Unreal 3.2 +I channel mode. [ #00] 02/03 A Merged anope-win32 branch into the main, now Win32 ready. [ #00] +03/03 F ircd admin/ower mode handling. [#307] 03/02 F Fixed LogUser message, normalizes the "realname" on nick change. [#306] 03/02 F ircd protocol support for owner and admin taken from proto. files.[ #00] 03/02 F /ns alist output. [#288] diff --git a/include/extern.h b/include/extern.h index 58495a314..e83df10d7 100644 --- a/include/extern.h +++ b/include/extern.h @@ -678,6 +678,7 @@ E char *myStrGetOnlyToken(const char *str, const char dilim, E char *myStrSubString(const char *src, int start, int end); E char *myStrGetTokenRemainder(const char *str, const char dilim, int token_number); +E char *stripModePrefix(const char *str); E int myNumToken(const char *str, const char dilim); E void doCleanBuffer(char *str); E void EnforceQlinedNick(char *nick, char *killer); diff --git a/src/chanserv.c b/src/chanserv.c index 3e2a4a1cb..521345057 100644 --- a/src/chanserv.c +++ b/src/chanserv.c @@ -1413,6 +1413,7 @@ int check_valid_admin(User * user, Channel * chan, int servermode) int check_valid_op(User * user, Channel * chan, int servermode) { + char *tmp; if (!chan || !chan->ci) return 1; @@ -1425,25 +1426,29 @@ int check_valid_op(User * user, Channel * chan, int servermode) if (ircd->halfop) { if (ircd->owner && ircd->protect) { if (check_access(user, chan->ci, CA_AUTOHALFOP)) { + tmp = stripModePrefix(ircd->ownerunset); anope_cmd_mode(whosends(chan->ci), chan->name, - "-%so%s %s %s %s", ++ircd->adminunset, - ++ircd->ownerunset, user->nick, + "%so%s %s %s %s", ircd->adminunset, + tmp, user->nick, user->nick, user->nick); + free(tmp); } else { + tmp = stripModePrefix(ircd->ownerunset); anope_cmd_mode(whosends(chan->ci), chan->name, - "-%sho%s %s %s %s %s", - ++ircd->adminunset, ++ircd->ownerunset, + "%sho%s %s %s %s %s", + ircd->adminunset, tmp, user->nick, user->nick, user->nick, user->nick); + free(tmp); } } else if (!ircd->owner && ircd->protect) { if (check_access(user, chan->ci, CA_AUTOHALFOP)) { anope_cmd_mode(whosends(chan->ci), chan->name, - "-%so %s %s", ++ircd->adminunset, + "%so %s %s", ircd->adminunset, user->nick, user->nick); } else { anope_cmd_mode(whosends(chan->ci), chan->name, - "-%soh %s %s %s", ++ircd->adminunset, + "%soh %s %s %s", ircd->adminunset, user->nick, user->nick, user->nick); } } else { @@ -1465,10 +1470,12 @@ int check_valid_op(User * user, Channel * chan, int servermode) if (check_access(user, chan->ci, CA_AUTODEOP)) { if (ircd->halfop) { if (ircd->owner && ircd->protect) { + tmp = stripModePrefix(ircd->ownerunset); anope_cmd_mode(whosends(chan->ci), chan->name, - "-%sho%s %s %s %s %s", ++ircd->adminunset, - ++ircd->ownerunset, user->nick, user->nick, + "%sho%s %s %s %s %s", ircd->adminunset, + tmp, user->nick, user->nick, user->nick, user->nick); + free(tmp); } else { anope_cmd_mode(whosends(chan->ci), chan->name, "-ho %s %s", user->nick, user->nick); @@ -6093,13 +6100,13 @@ static int do_clear(User * u) if (!chan_has_user_status(c, cu->user, CUS_OWNER)) { continue; } else { - snprintf(tmp, BUFSIZE, "-%so", - ++ircd->ownerunset); + snprintf(tmp, BUFSIZE, "%so", + ircd->ownerunset); av[1] = sstrdup(tmp); } } else { - snprintf(tmp, BUFSIZE, "-%so", ++ircd->adminunset); + snprintf(tmp, BUFSIZE, "%so", ircd->adminunset); av[1] = sstrdup(tmp); } } else { @@ -6120,12 +6127,12 @@ static int do_clear(User * u) if (!chan_has_user_status(c, cu->user, CUS_OWNER)) { continue; } else { - snprintf(tmp, BUFSIZE, "-%so", - ++ircd->ownerunset); + snprintf(tmp, BUFSIZE, "%so", + ircd->ownerunset); av[1] = sstrdup(tmp); } } else { - snprintf(tmp, BUFSIZE, "-%so", ++ircd->adminunset); + snprintf(tmp, BUFSIZE, "%so", ircd->adminunset); av[1] = sstrdup(tmp); } } else { diff --git a/src/misc.c b/src/misc.c index 5e5038252..3df45aab5 100644 --- a/src/misc.c +++ b/src/misc.c @@ -1135,4 +1135,16 @@ char *str_signed(unsigned char *str) return nstr; } +/** + * Strip the mode prefix from the given string. + * Useful for using the modes stored in things like ircd->ownerset etc.. + **/ + +char *stripModePrefix(const char *str) { + if(str) { + return strdup(str+1); + } + return NULL; +} + /* EOF */ diff --git a/version.log b/version.log index 35764d080..81c4e2537 100644 --- a/version.log +++ b/version.log @@ -8,10 +8,14 @@ VERSION_MAJOR="1" VERSION_MINOR="7" VERSION_PATCH="8" -VERSION_BUILD="591" +VERSION_BUILD="593" # $Log$ # +# BUILD : 1.7.8 (593) +# BUGS : 307 +# NOTES : Fixed admin/owner mode handling +# # BUILD : 1.7.8 (591) # BUGS : 306 # NOTES : Fixed LogUser message, normalizes the "realname" on nick change. |