[srvx-commits] CVS: services/src chanserv.c,1.314,1.315
Brought to you by:
entrope
|
From: Zoot <zo...@us...> - 2002-12-12 03:50:36
|
Update of /cvsroot/srvx/services/src
In directory sc8-pr-cvs1:/tmp/cvs-serv21255/src
Modified Files:
chanserv.c
Log Message:
Back out my last commit to this file; it was accidental and contained incomplete changes.
Index: chanserv.c
===================================================================
RCS file: /cvsroot/srvx/services/src/chanserv.c,v
retrieving revision 1.314
retrieving revision 1.315
diff -C2 -r1.314 -r1.315
*** chanserv.c 12 Dec 2002 03:26:33 -0000 1.314
--- chanserv.c 12 Dec 2002 03:50:32 -0000 1.315
***************
*** 255,260 ****
/* Channel banlist */
- #define CSMSG_BAN_LIST_MATCH "$b%s$b permanent and timed bans matching %s:"
- #define CSMSG_BAN_LIST "$b%s$b permanent and timed bans:"
#define CSMSG_BAN_HEADER "$b%-*s%-*s%-*s%-*s%s$b"
#define CSMSG_BAN_DATA "$b%-*s$b%-*s%-*s%-*s%s"
--- 255,258 ----
***************
*** 644,648 ****
struct userData *uData;
! if(!channel->channel_info || !IsJoined(channel->channel_info)) return;
uData = GetTrueChannelAccess(channel->channel_info, handle);
--- 642,646 ----
struct userData *uData;
! if(!channel->channel_info || IsSuspended(channel->channel_info)) return;
uData = GetTrueChannelAccess(channel->channel_info, handle);
***************
*** 676,680 ****
(void)bot;
/* Bail early if channel is inactive or doesn't restrict CTCPs, or sender is a service */
! if(!channel->channel_info || !IsJoined(channel->channel_info)) return;
if(channel->channel_info->options[optCTCPUsers] == 'a') return;
if(IsService(user)) return;
--- 674,678 ----
(void)bot;
/* Bail early if channel is inactive or doesn't restrict CTCPs, or sender is a service */
! if(!channel->channel_info || IsSuspended(channel->channel_info)) return;
if(channel->channel_info->options[optCTCPUsers] == 'a') return;
if(IsService(user)) return;
***************
*** 1156,1206 ****
}
- static struct chanNode *
- chanserv_join(struct chanData *cData, struct chanNode *channel, const char *name)
- {
- struct modeNode *mode;
- int announce = 1;
-
- assert(!(name && channel) && (name || channel));
- if(name)
- {
- channel = GetChannel(name);
- if(!channel)
- {
- channel = AddChannel(name, now, NULL, NULL);
- announce = 0;
- }
- }
-
- mode = GetUserMode(channel, chanserv);
- if(!mode)
- {
- AddChannelUser(chanserv, channel);
- }
- if(!mode || !(mode->modes & MODE_CHANOP))
- {
- AddChannelOp(1, &chanserv, channel, chanserv, announce);
- }
-
- if(cData)
- {
- channel->channel_info = cData;
-
- cData->channel = channel;
- cData->flags |= CHANNEL_JOINED;
- }
-
- return channel;
- }
-
- static void
- chanserv_part(struct chanData *cData, const char *reason)
- {
- assert(cData->flags & CHANNEL_JOINED);
-
- DelChannelUser(chanserv, cData->channel, reason, 0);
- cData->flags &= ~CHANNEL_JOINED;
- }
-
static struct userData*
add_channel_user(struct chanData *channel, struct handle_info *handle, enum userLevel access, time_t seen, const char *info)
--- 1154,1157 ----
***************
*** 1374,1378 ****
channel = bd->channel;
- /* XXX: !IsJoined might be appropriate here. */
if(IsSuspended(channel))
{
--- 1325,1328 ----
***************
*** 1480,1483 ****
--- 1430,1434 ----
{
struct chanData *channel, *next;
+ struct chanNode *save;
struct userData *user;
char delay[INTERVALLEN], reason[INTERVALLEN + 64];
***************
*** 1506,1514 ****
suspended = IsSuspended(channel);
log(CS_LOG, LOG_INFO, "(%s) Channel registration expired.\n", (suspended ? channel->suspended->name : channel->channel->name));
! if(IsJoined(channel))
! {
! chanserv_part(channel, reason);
! }
unregister_channel(channel);
}
--- 1457,1463 ----
suspended = IsSuspended(channel);
log(CS_LOG, LOG_INFO, "(%s) Channel registration expired.\n", (suspended ? channel->suspended->name : channel->channel->name));
! save = channel->channel;
unregister_channel(channel);
+ if(!suspended) DelChannelUser(chanserv, save, reason, 0);
}
***************
*** 1886,1894 ****
}
! cData = register_channel(NULL, user->handle_info->handle, NULL, 0);
add_channel_user(cData, handle, USER_LEVEL_HIGHEST, 0, NULL);
scan_handle_presence(channel, handle, NULL);
! channel = chanserv_join(cData, NULL, chan_name);
parse_mode_lock(&CHANSERV_DEFAULT_MODES, 1, cData);
--- 1835,1850 ----
}
! if(new_channel)
! {
! channel = AddChannel(argv[1], now, NULL, NULL);
! AddChannelUser(chanserv, channel);
! }
!
! cData = register_channel(channel, user->handle_info->handle, NULL, 0);
add_channel_user(cData, handle, USER_LEVEL_HIGHEST, 0, NULL);
scan_handle_presence(channel, handle, NULL);
! if(!new_channel) AddChannelUser(chanserv, channel);
! AddChannelOp(1, &chanserv, channel, chanserv, !new_channel);
parse_mode_lock(&CHANSERV_DEFAULT_MODES, 1, cData);
***************
*** 1943,1952 ****
else
{
! if(IsJoined(cData))
! {
! sprintf(reason, "Channel unregistered by %s.", user->handle_info->handle);
! chanserv_part(cData, reason);
! }
unregister_channel(cData);
}
chanserv_notice(user, CSMSG_UNREG_SUCCESS, name);
--- 1899,1905 ----
else
{
! 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);
***************
*** 1960,1974 ****
{
struct chanNode *target;
! struct chanData *cData;
struct userData *uData;
! int force = 0;
! char *target_name, reason[MAXLEN];
struct do_not_register *dnr;
REQUIRE_PARAMS(2);
! /* Prevent nodelete channels from being moved. */
! cData = channel->channel_info;
! if(IsProtected(cData))
{
chanserv_notice(user, CSMSG_MOVE_NODELETE, channel->name);
--- 1913,1925 ----
{
struct chanNode *target;
! struct modeNode *mn;
struct userData *uData;
! int new_channel = 0, force = 0;
! char reason[MAXLEN];
struct do_not_register *dnr;
REQUIRE_PARAMS(2);
! if(IsProtected(channel->channel_info))
{
chanserv_notice(user, CSMSG_MOVE_NODELETE, channel->name);
***************
*** 1976,1998 ****
}
- /* Don't allow channels with owners whose accounts
- have been DNR'd to move their channels unless it
- is forced. */
force = (argc > 2) && !irccasecmp(argv[2], "force") && IsPrivileged(user);
! if(!force)
{
- for(uData = cData->users; uData; uData = uData->next)
- {
- if(uData->access != ulOwner)
- {
- continue;
- }
-
- dnr = chanserv_is_dnr(NULL, uData->handle);
- if(!dnr)
- {
- continue;
- }
if(IsPrivileged(user))
{
--- 1927,1936 ----
}
force = (argc > 2) && !irccasecmp(argv[2], "force") && IsPrivileged(user);
! if((target = GetChannel(argv[1])))
{
+ if(!force && (dnr = chanserv_is_dnr(target->name, NULL)))
+ {
if(IsPrivileged(user))
{
***************
*** 2006,2091 ****
}
}
-
- /* Locate target information for the channel. */
- if((target = GetChannel(argv[1])))
- {
- struct modeNode *mn;
-
- target_name = target->name;
- if(target->channel_info)
- {
- chanserv_notice(user, CSMSG_ALREADY_REGGED, target_name);
- return 0;
- }
- if((!(mn = GetUserMode(target, user)) || !(mn->modes && MODE_CHANOP)) && !IsPrivileged(user))
- {
- chanserv_notice(user, CSMSG_MUST_BE_OPPED, target_name);
- return 0;
- }
- }
else
{
! target_name = argv[1];
! if(!IsCSChannelName(target_name))
{
chanserv_notice(user, MSG_NOT_CHANNEL_NAME);
return 0;
}
! if(opserv_bad_channel(target_name))
{
! chanserv_notice(user, CSMSG_ILLEGAL_CHANNEL, target_name);
return 0;
}
! if(dict_find(sChannels, target_name, NULL))
{
! chanserv_notice(user, CSMSG_ALREADY_REGGED, target_name);
! return 0;
}
}
! /* Don't allow the move if the target channel is DNR'd. */
! if(!force && (dnr = chanserv_is_dnr(target_name, NULL)))
{
! if(IsPrivileged(user))
! {
! chanserv_notice(user, CSMSG_DNR_INFO, dnr->chan_name, dnr->setter, dnr->reason);
! }
! else
! {
! chanserv_notice(user, CSMSG_DNR_CHANNEL_MOVE, target_name);
! }
! return 0;
}
! /* If ChanServ is joined to the previous channel, part
! and null the channel_info pointer. */
! if(IsJoined(cData))
{
! char reason2[MAXLEN];
! sprintf(reason2, "Channel moved to %s by %s.", target_name, user->handle_info->handle);
! chanserv_part(cData, reason2);
}
channel->channel_info = NULL;
! if(IsSuspended(cData))
{
/* Transfer the suspension information. */
! struct suspended *suspended = cData->suspended;
- dict_remove2(sChannels, suspended->name, 1);
free(suspended->name);
! suspended->name = strdup(target_name);
! dict_insert(sChannels, suspended->name, suspended);
}
else
{
! /* Join ChanServ to the new channel. */
! chanserv_join(cData, NULL, target_name);
}
! chanserv_notice(user, CSMSG_MOVE_SUCCESS, target_name);
! sprintf(reason, "%s moved to %s by %s.", channel->name, target_name, user->handle_info->handle);
! global_message(MESSAGE_RECIPIENT_OPERS | MESSAGE_RECIPIENT_HELPERS, reason); return 1;
}
--- 1944,2044 ----
}
}
else
{
! if(!IsCSChannelName(argv[1]))
{
chanserv_notice(user, MSG_NOT_CHANNEL_NAME);
return 0;
}
!
! if(opserv_bad_channel(argv[1]))
{
! chanserv_notice(user, CSMSG_ILLEGAL_CHANNEL, argv[1]);
return 0;
}
!
! if (!force)
{
! for(uData = channel->channel_info->users; uData; uData = uData->next)
! {
! if((uData->access == ulOwner) && (dnr = chanserv_is_dnr(NULL, uData->handle)))
! {
! if(IsPrivileged(user))
! {
! chanserv_notice(user, CSMSG_DNR_INFO, dnr->chan_name, dnr->setter, dnr->reason);
! }
! else
! {
! chanserv_notice(user, CSMSG_DNR_CHANNEL_MOVE, argv[1]);
! }
! return 0;
! }
! }
!
! if((dnr = chanserv_is_dnr(argv[1], NULL)))
! {
! if(IsPrivileged(user))
! {
! chanserv_notice(user, CSMSG_DNR_INFO, dnr->chan_name, dnr->setter, dnr->reason);
! }
! else
! {
! chanserv_notice(user, CSMSG_DNR_CHANNEL_MOVE, argv[1]);
! }
! return 0;
! }
}
+
+ target = AddChannel(argv[1], now, NULL, NULL);
+ AddChannelUser(chanserv, target);
+ new_channel = 1;
}
! if(target->channel_info)
{
! chanserv_notice(user, CSMSG_ALREADY_REGGED, target->name);
! return 0;
}
! if(!new_channel && (!(mn = GetUserMode(target, user)) || !(mn->modes && MODE_CHANOP)) && !IsPrivileged(user))
{
! chanserv_notice(user, CSMSG_MUST_BE_OPPED, target->name);
! return 0;
}
+
+ /* Move the channel_info to the target channel; it
+ shouldn't be necessary to clear timeq callbacks
+ for the old channel. */
+ target->channel_info = channel->channel_info;
+ target->channel_info->channel = target;
channel->channel_info = NULL;
! if(IsSuspended(target->channel_info))
{
/* Transfer the suspension information. */
! struct suspended *suspended = target->channel_info->suspended;
free(suspended->name);
! suspended->name = strdup(target->name);
}
else
{
! if(!new_channel) AddChannelUser(chanserv, target);
! AddChannelOp(1, &chanserv, target, chanserv, 1);
! }
!
! chanserv_notice(user, CSMSG_MOVE_SUCCESS, target->name);
!
! sprintf(reason, "%s moved to %s by %s.", channel->name, target->name, user->handle_info->handle);
! if(!IsSuspended(target->channel_info))
! {
! char reason2[MAXLEN];
! sprintf(reason2, "Channel moved to %s by %s.", target->name, user->handle_info->handle);
! DelChannelUser(chanserv, channel, reason2, 0);
}
! global_message(MESSAGE_RECIPIENT_OPERS | MESSAGE_RECIPIENT_HELPERS, reason);
! return 1;
}
***************
*** 2346,2353 ****
merge_channel(channel->channel_info, target->channel_info);
sprintf(reason, "Channel merged into %s by %s.", target->name, user->handle_info->handle);
-
- chanserv_part(channel->channel_info, reason);
unregister_channel(channel->channel_info);
!
chanserv_notice(user, CSMSG_MERGE_SUCCESS, target->name);
return 1;
--- 2299,2304 ----
merge_channel(channel->channel_info, target->channel_info);
sprintf(reason, "Channel merged into %s by %s.", target->name, user->handle_info->handle);
unregister_channel(channel->channel_info);
! DelChannelUser(chanserv, channel, reason, 0);
chanserv_notice(user, CSMSG_MERGE_SUCCESS, target->name);
return 1;
***************
*** 2785,2789 ****
{
if(!cList->channel->channel
! || !IsJoined(cList->channel)
|| !GetUserMode(cList->channel->channel, user)
|| IsUserSuspended(cList->user))
--- 2736,2740 ----
{
if(!cList->channel->channel
! || IsSuspended(cList->channel)
|| !GetUserMode(cList->channel->channel, user)
|| IsUserSuspended(cList->user))
***************
*** 3838,3850 ****
durationLength = timed ? INTERVALLEN : 0;
- if(search)
- {
- chanserv_notice(user, CSMSG_BAN_LIST_MATCH, channel->name, search);
- }
- else
- {
- chanserv_notice(user, CSMSG_BAN_LIST, channel->name);
- }
-
chanserv_notice(user, CSMSG_BAN_HEADER, banLength, "Mask:", ownerLength, "Set By:", INTERVALLEN, "Triggered:", durationLength, timed ? "Expires:" : "", "Reason:");
for(i = 0; i < matches; i++)
--- 3789,3792 ----
***************
*** 4793,4805 ****
{
struct suspended *suspended = data;
if(!suspended->expires || (now < suspended->expires)) suspended->revoked = now;
-
- /* Unsuspend the channel. */
- suspended->cData->flags &= ~CHANNEL_SUSPENDED;
dict_remove(sChannels, suspended->name);
!
! /* Join ChanServ to the channel. */
! chanserv_join(suspended->cData, NULL, suspended->name);
}
--- 4735,4748 ----
{
struct suspended *suspended = data;
+ struct chanNode *channel;
if(!suspended->expires || (now < suspended->expires)) suspended->revoked = now;
dict_remove(sChannels, suspended->name);
! channel = AddChannel(suspended->name, now, NULL, NULL);
! AddChannelUser(chanserv, channel);
! AddChannelOp(1, &chanserv, channel, chanserv, 1);
! channel->channel_info = suspended->cData;
! suspended->cData->channel = channel;
! suspended->cData->flags &= ~CHANNEL_SUSPENDED;
}
***************
*** 4855,4866 ****
suspended->previous = suspended->cData->suspended;
suspended->cData->suspended = suspended;
-
- /* Part the channel and mark the channel as suspended. */
- chanserv_part(suspended->cData, suspended->reason);
suspended->cData->channel = NULL;
- suspended->cData->flags |= CHANNEL_SUSPENDED;
- dict_insert(sChannels, suspended->name, suspended);
chanserv_notice(user, CSMSG_SUSPENDED, suspended->name);
sprintf(reason, "%s suspended by %s.", suspended->name, suspended->suspender);
global_message(MESSAGE_RECIPIENT_OPERS | MESSAGE_RECIPIENT_HELPERS, reason);
--- 4798,4809 ----
suspended->previous = suspended->cData->suspended;
suspended->cData->suspended = suspended;
suspended->cData->channel = NULL;
+ /* Mark the channel as suspended, then part. */
+ channel->channel_info->flags |= CHANNEL_SUSPENDED;
+ dict_insert(sChannels, suspended->name, suspended);
+ DelChannelUser(chanserv, channel, suspended->reason, 0);
chanserv_notice(user, CSMSG_SUSPENDED, suspended->name);
+
sprintf(reason, "%s suspended by %s.", suspended->name, suspended->suspender);
global_message(MESSAGE_RECIPIENT_OPERS | MESSAGE_RECIPIENT_HELPERS, reason);
***************
*** 6075,6080 ****
SetChannelTopic(channel, chanserv, channel->channel_info->topic, 1);
}
-
- return;
}
--- 6018,6021 ----
***************
*** 6534,6538 ****
{
chanserv_conf.debug_channel = AddChannel(str, now, "+tinms", NULL);
! chanserv_join(NULL, chanserv_conf.debug_channel, NULL);
}
else
--- 6475,6480 ----
{
chanserv_conf.debug_channel = AddChannel(str, now, "+tinms", NULL);
! AddChannelUser(chanserv, chanserv_conf.debug_channel);
! AddChannelOp(1, &chanserv, chanserv_conf.debug_channel, chanserv, 0);
}
else
***************
*** 6544,6548 ****
{
chanserv_conf.support_channel = AddChannel(str, now, "+nt", NULL);
! chanserv_join(NULL, chanserv_conf.support_channel, NULL);
}
else
--- 6486,6491 ----
{
chanserv_conf.support_channel = AddChannel(str, now, "+nt", NULL);
! AddChannelUser(chanserv, chanserv_conf.support_channel);
! AddChannelOp(1, &chanserv, chanserv_conf.support_channel, chanserv, 0);
}
else
***************
*** 6831,6840 ****
channel = hir->d.object;
- if(!*key)
- {
- log(CS_LOG, LOG_ERROR, "Read channel with empty name; skipping.\n");
- return 0;
- }
-
if((str = database_get_data(channel, KEY_FLAGS, RECDB_QSTRING)))
{
--- 6774,6777 ----
***************
*** 6890,6896 ****
else
{
! /* We create the channel and join ChanServ to it here, but
! defer linking it to a registration record (the "two-step"). */
! cNode = chanserv_join(NULL, NULL, key);
if(!cNode)
{
--- 6827,6831 ----
else
{
! cNode = AddChannel(key, now, NULL, NULL);
if(!cNode)
{
***************
*** 6898,6901 ****
--- 6833,6838 ----
return 0;
}
+ AddChannelUser(chanserv, cNode);
+ AddChannelOp(1, &chanserv, cNode, chanserv, 0);
}
***************
*** 6908,6919 ****
}
- if(!suspended)
- {
- /* Part two of the two-step registration join shuffle.
- Quickly, fix this and put this ugly code out of its
- misery. */
- chanserv_join(cData, cNode, NULL);
- }
-
if((cData->suspended = suspended)) suspended->cData = cData;
str = database_get_data(channel, KEY_REGISTERED, RECDB_QSTRING);
--- 6845,6848 ----
***************
*** 6955,6963 ****
{
log(CS_LOG, LOG_ERROR, "Channel %s had no users in database, unregistering it.\n", key);
- if(IsJoined(cData))
- {
- chanserv_part(cData, "Channel has empty user list.");
- }
unregister_channel(cData);
return 0;
}
--- 6884,6892 ----
{
log(CS_LOG, LOG_ERROR, "Channel %s had no users in database, unregistering it.\n", key);
unregister_channel(cData);
+ if(cNode)
+ {
+ DelChannelUser(chanserv, cNode, "Channel has empty user list.", 0);
+ }
return 0;
}
|