+jilles 2007/02/04 01:59:38 UTC (20070204-3201)
+ Log:
+ Move find_umode_slot() from libcharybdis/tools.c to src/s_user.c.
+
+
+ Changes: Modified:
+ +1 -0 trunk/include/s_user.h (File Modified)
+ +0 -22 trunk/libcharybdis/tools.c (File Modified)
+ +0 -1 trunk/libcharybdis/tools.h (File Modified)
+ +22 -0 trunk/src/s_user.c (File Modified)
+
+
jilles 2007/02/01 01:44:31 UTC (20070201-3195)
Log:
DNSBL keyword substitution is available as of 2.1.3.
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
* USA
*
- * $Id: s_user.c 3201 2007-02-04 01:59:38Z jilles $
+ * $Id: s_user.c 3203 2007-02-04 15:08:04Z jilles $
*/
#include "stdinc.h"
char umodebuf[128];
+static int orphaned_umodes = 0;
int user_modes[256] = {
/* 0x00 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x0F */
/* 0x10 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x1F */
add_to_id_hash(source_p->id, source_p);
}
- source_p->umodes |= ConfigFileEntry.default_umodes & ~ConfigFileEntry.oper_only_umodes;
+ source_p->umodes |= ConfigFileEntry.default_umodes & ~ConfigFileEntry.oper_only_umodes & ~orphaned_umodes;
if (source_p->umodes & UMODE_INVISIBLE)
Count.invisi++;
if((flag = user_modes[(unsigned char) *pm]))
{
if(MyConnect(source_p)
- && !IsOper(source_p)
- && (ConfigFileEntry.oper_only_umodes & flag))
+ && ((!IsOper(source_p)
+ && (ConfigFileEntry.oper_only_umodes & flag))
+ || (orphaned_umodes & flag)))
{
if (what == MODE_ADD || source_p->umodes & flag)
badflag = YES;
{
int i;
char *ptr = umodebuf;
+ static int prev_user_modes[128];
*ptr = '\0';
for (i = 0; i < 128; i++)
+ {
+ if (prev_user_modes[i] != 0 && prev_user_modes[i] != user_modes[i])
+ {
+ if (user_modes[i] == 0)
+ {
+ orphaned_umodes |= prev_user_modes[i];
+ sendto_realops_snomask(SNO_DEBUG, L_ALL, "Umode +%c is now orphaned", i);
+ }
+ else
+ {
+ orphaned_umodes &= ~prev_user_modes[i];
+ sendto_realops_snomask(SNO_DEBUG, L_ALL, "Orphaned umode +%c is picked up by module", i);
+ }
+ user_modes[i] = prev_user_modes[i];
+ }
+ else
+ prev_user_modes[i] = user_modes[i];
if (user_modes[i])
*ptr++ = (char) i;
+ }
*ptr++ = '\0';
}