Update of /cvsroot/srvx/services/src
In directory usw-pr-cvs1:/tmp/cvs-serv5061/src
Modified Files:
chanserv.c modcmd.c
Log Message:
fix some potential dereferences of null pointers
Index: chanserv.c
===================================================================
RCS file: /cvsroot/srvx/services/src/chanserv.c,v
retrieving revision 1.284
retrieving revision 1.285
diff -C2 -r1.284 -r1.285
*** chanserv.c 16 Sep 2002 14:53:35 -0000 1.284
--- chanserv.c 16 Sep 2002 19:28:10 -0000 1.285
***************
*** 1890,1893 ****
--- 1890,1894 ----
if(IsSuspended(cData))
{
+ unregister_channel(cData);
dict_remove(sChannels, channel->name);
}
***************
*** 1895,1901 ****
{
sprintf(reason, "Channel unregistered by %s.", user->handle_info->handle);
DelChannelUser(chanserv, channel, reason, 0);
}
- unregister_channel(cData);
chanserv_notice(user, CSMSG_UNREG_SUCCESS, name);
sprintf(reason, "%s unregistered by %s.", name, user->handle_info->handle);
--- 1896,1902 ----
{
sprintf(reason, "Channel unregistered by %s.", user->handle_info->handle);
+ unregister_channel(cData);
DelChannelUser(chanserv, channel, reason, 0);
}
chanserv_notice(user, CSMSG_UNREG_SUCCESS, name);
sprintf(reason, "%s unregistered by %s.", name, user->handle_info->handle);
Index: modcmd.c
===================================================================
RCS file: /cvsroot/srvx/services/src/modcmd.c,v
retrieving revision 1.26
retrieving revision 1.27
diff -C2 -r1.26 -r1.27
*** modcmd.c 16 Sep 2002 14:54:01 -0000 1.26
--- modcmd.c 16 Sep 2002 19:28:10 -0000 1.27
***************
*** 614,618 ****
svccmd_invoke_argv(struct userNode *user, struct service *service, struct chanNode *channel, unsigned int argc, unsigned char *argv[], unsigned int server_qualified) {
struct svccmd cmd, *pcmd;
! unsigned int cmd_arg, perms;
/* Find the command argument. */
--- 614,619 ----
svccmd_invoke_argv(struct userNode *user, struct service *service, struct chanNode *channel, unsigned int argc, unsigned char *argv[], unsigned int server_qualified) {
struct svccmd cmd, *pcmd;
! unsigned int cmd_arg, perms, pos;
! char logbuf[2*MAXLEN];
/* Find the command argument. */
***************
*** 665,673 ****
&& (cmd.flags & MODCMD_ACCEPT_CHANNEL)
&& IsChannelName(argv[1])
! && ((argv[1][0] != '+') || (cmd.flags & MODCMD_ACCEPT_PCHANNEL))) {
! if (!(channel = dict_find(channels, argv[1], NULL))) {
! send_message(user, service->bot, MSG_INVALID_CHANNEL);
! return 0;
! }
argv[1] = argv[0];
argv++, argc--;
--- 666,671 ----
&& (cmd.flags & MODCMD_ACCEPT_CHANNEL)
&& IsChannelName(argv[1])
! && ((argv[1][0] != '+') || (cmd.flags & MODCMD_ACCEPT_PCHANNEL))
! && (channel = dict_find(channels, argv[1], NULL))) {
argv[1] = argv[0];
argv++, argc--;
***************
*** 692,700 ****
pcmd->uses++;
if (perms & ACTION_NOCHANNEL) channel = NULL;
- if (!cmd.command->func(user, channel, argc, argv, pcmd)) return 0;
if (!(cmd.flags & MODCMD_NO_LOG)) {
- unsigned int pos;
- char logbuf[2*MAXLEN];
-
/* We reassemble the input line here. This lets services do
* clever things like replace passwords in argv[] with "****"
--- 690,694 ----
***************
*** 714,717 ****
--- 708,716 ----
}
pos += sprintf(logbuf+pos, "]: ");
+ }
+ if (!cmd.command->func(user, channel, argc, argv, pcmd)) return 0;
+ if (!(cmd.flags & MODCMD_NO_LOG)) {
+ /* Unsplit argv after running the function to get the benefit
+ * of any mangling/hiding done by the commands. */
unsplit_string(argv, argc, logbuf+pos);
log(cmd.command->parent->clog, LOG_INFO, "%s\n", logbuf);
|