[srvx-commits] CVS: services/src chanserv.c,1.395,1.396 chanserv.h,1.50,1.51 nickserv.c,1.267,1.268
Brought to you by:
entrope
From: Entrope <en...@us...> - 2003-12-09 02:07:41
|
Update of /cvsroot/srvx/services/src In directory sc8-pr-cvs1:/tmp/cvs-serv22415/src Modified Files: chanserv.c chanserv.h nickserv.c Log Message: allow more than one "support" channel for ChanServ Index: chanserv.c =================================================================== RCS file: /cvsroot/srvx/services/src/chanserv.c,v retrieving revision 1.395 retrieving revision 1.396 diff -C2 -r1.395 -r1.396 *** chanserv.c 1 Dec 2003 22:15:21 -0000 1.395 --- chanserv.c 9 Dec 2003 02:07:37 -0000 1.396 *************** *** 428,432 **** static struct { ! struct chanNode *support_channel; unsigned long db_backup_frequency; --- 428,432 ---- static struct { ! struct channelList support_channels; unsigned long db_backup_frequency; *************** *** 4616,4623 **** } ! struct chanNode * ! chanserv_support_channel(void) { ! return chanserv_conf.support_channel; } --- 4616,4623 ---- } ! struct channelList * ! chanserv_support_channels(void) { ! return &chanserv_conf.support_channels; } *************** *** 6069,6075 **** handle = user->handle_info; ! if((channel == chanserv_conf.support_channel) && IsHelper(user)) { ! HANDLE_SET_FLAG(user->handle_info, HELPING); } --- 6069,6083 ---- handle = user->handle_info; ! if(IsHelper(user) && !IsHelping(user)) { ! unsigned int ii; ! for(ii = 0; ii < chanserv_conf.support_channels.used; ++ii) ! { ! if(channel == chanserv_conf.support_channels.list[ii]) ! { ! HANDLE_SET_FLAG(user->handle_info, HELPING); ! break; ! } ! } } *************** *** 6207,6214 **** } ! if(chanserv_conf.support_channel && IsSupportHelper(user) ! && GetUserMode(chanserv_conf.support_channel, user)) { ! HANDLE_SET_FLAG(user->handle_info, HELPING); } } --- 6215,6228 ---- } ! if(IsSupportHelper(user)) { ! for(ii = 0; ii < chanserv_conf.support_channels.used; ++ii) ! { ! if(GetUserMode(chanserv_conf.support_channels.list[ii], user)) ! { ! HANDLE_SET_FLAG(user->handle_info, HELPING); ! break; ! } ! } } } *************** *** 6241,6247 **** } ! if((channel == chanserv_conf.support_channel) && IsSupportHelper(user)) { ! HANDLE_CLEAR_FLAG(user->handle_info, HELPING); } } --- 6255,6266 ---- } ! if(IsSupportHelper(user)) { ! unsigned int ii; ! for(ii = 0; ii < chanserv_conf.support_channels.used; ++ii) ! if(channel == chanserv_conf.support_channels.list[ii]) ! break; ! if(ii == chanserv_conf.support_channels.used) ! HANDLE_CLEAR_FLAG(user->handle_info, HELPING); } } *************** *** 6442,6445 **** --- 6461,6466 ---- const char *str; struct string_list *strlist; + struct chanNode *chan; + unsigned int ii; if(!(conf_node = conf_get_data(CHANSERV_CONF_NAME, RECDB_OBJECT))) *************** *** 6448,6463 **** return; } ! str = database_get_data(conf_node, KEY_SUPPORT_CHANNEL, RECDB_QSTRING); ! if(str) ! { ! const char *str2 = database_get_data(conf_node, KEY_SUPPORT_CHANNEL_MODES, RECDB_QSTRING); ! if(!str2) str2 = "+nt"; ! chanserv_conf.support_channel = AddChannel(str, now, str2, NULL); ! AddChannelUser(chanserv, chanserv_conf.support_channel); ! AddChannelOp(1, &chanserv, chanserv_conf.support_channel, chanserv, 0); ! } ! else ! { ! chanserv_conf.support_channel = NULL; } str = database_get_data(conf_node, KEY_DB_BACKUP_FREQ, RECDB_QSTRING); --- 6469,6496 ---- return; } ! for(ii = 0; ii < chanserv_conf.support_channels.used; ++ii) ! UnlockChannel(chanserv_conf.support_channels.list[ii]); ! chanserv_conf.support_channels.used = 0; ! if((strlist = database_get_data(conf_node, KEY_SUPPORT_CHANNEL, RECDB_STRING_LIST))) ! { ! for(ii = 0; ii < strlist->used; ++ii) ! { ! const char *str2 = database_get_data(conf_node, KEY_SUPPORT_CHANNEL_MODES, RECDB_QSTRING); ! if(!str2) ! str2 = "+nt"; ! chan = AddChannel(strlist->list[ii], now, str2, NULL); ! LockChannel(chan); ! channelList_append(&chanserv_conf.support_channels, chan); ! } ! } ! else if((str = database_get_data(conf_node, KEY_SUPPORT_CHANNEL, RECDB_QSTRING))) ! { ! const char *str2; ! str2 = database_get_data(conf_node, KEY_SUPPORT_CHANNEL_MODES, RECDB_QSTRING); ! if(!str2) ! str2 = "+nt"; ! chan = AddChannel(str, now, str2, NULL); ! LockChannel(chan); ! channelList_append(&chanserv_conf.support_channels, chan); } str = database_get_data(conf_node, KEY_DB_BACKUP_FREQ, RECDB_QSTRING); Index: chanserv.h =================================================================== RCS file: /cvsroot/srvx/services/src/chanserv.h,v retrieving revision 1.50 retrieving revision 1.51 diff -C2 -r1.50 -r1.51 *** chanserv.h 8 Oct 2003 03:04:46 -0000 1.50 --- chanserv.h 9 Dec 2003 02:07:37 -0000 1.51 *************** *** 181,185 **** void init_chanserv(const char *nick); void del_channel_user(struct userData *user, int do_gc); ! struct chanNode *chanserv_support_channel(void); enum userLevel user_level_from_name(const char *name); const char *user_level_from_level(enum userLevel level); --- 181,185 ---- void init_chanserv(const char *nick); void del_channel_user(struct userData *user, int do_gc); ! struct channelList *chanserv_support_channels(void); enum userLevel user_level_from_name(const char *name); const char *user_level_from_level(enum userLevel level); Index: nickserv.c =================================================================== RCS file: /cvsroot/srvx/services/src/nickserv.c,v retrieving revision 1.267 retrieving revision 1.268 diff -C2 -r1.267 -r1.268 *** nickserv.c 4 Dec 2003 22:33:40 -0000 1.267 --- nickserv.c 9 Dec 2003 02:07:37 -0000 1.268 *************** *** 1954,1963 **** * currently in #support. */ if (HANDLE_FLAGGED(hi, HELPING) && (after == HI_FLAG_SUPPORT_HELPER)) { ! struct chanNode *schannel; ! schannel = chanserv_support_channel(); ! for (uNode = hi->users; uNode; uNode = uNode->next_authed) ! if (GetUserMode(schannel, uNode)) break; ! if (!uNode) HANDLE_CLEAR_FLAG(hi, HELPING); } --- 1954,1969 ---- * currently in #support. */ if (HANDLE_FLAGGED(hi, HELPING) && (after == HI_FLAG_SUPPORT_HELPER)) { ! struct channelList *schannels; ! unsigned int ii; ! schannels = chanserv_support_channels(); ! for (uNode = hi->users; uNode; uNode = uNode->next_authed) { ! for (ii = 0; ii < schannels->used; ++ii) ! if (GetUserMode(schannels->list[ii], uNode)) ! break; ! if (ii < schannels->used) break; ! } ! if (!uNode) ! HANDLE_CLEAR_FLAG(hi, HELPING); } |