1
0
mirror of https://github.com/anope/anope.git synced 2026-07-06 01:13:14 +02:00

Insane commit of doom: s/ \t/g

git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@1681 5417fbe8-f217-4b02-8779-1006273d7864
This commit is contained in:
rburchell
2008-11-14 20:57:20 +00:00
parent 069409cd99
commit 6c55e0a529
213 changed files with 41185 additions and 41185 deletions
+8 -8
View File
@@ -48,14 +48,14 @@ class NickCore
char *url; /* URL associated to the nick */
uint32 flags; /* See NI_* below */
uint16 language; /* Language selected by nickname owner (LANG_*) */
uint16 accesscount; /* # of entries */
char **access; /* Array of strings */
MemoInfo memos;
uint16 channelcount; /* Number of channels currently registered */
uint16 accesscount; /* # of entries */
char **access; /* Array of strings */
MemoInfo memos;
uint16 channelcount; /* Number of channels currently registered */
/* Unsaved data */
ModuleData *moduleData; /* Module saved data attached to the NickCore */
time_t lastmail; /* Last time this nick record got a mail */
SList aliases; /* List of aliases */
/* Unsaved data */
ModuleData *moduleData; /* Module saved data attached to the NickCore */
time_t lastmail; /* Last time this nick record got a mail */
SList aliases; /* List of aliases */
};
+4 -4
View File
@@ -21,10 +21,10 @@ class BotInfo
BotInfo *next, *prev;
std::string uid; /* required for UID supporting servers, as opposed to the shitty struct Uid. */
char *nick; /* Nickname of the bot */
char *user; /* Its user name */
char *host; /* Its hostname */
char *real; /* Its real name */
char *nick; /* Nickname of the bot */
char *user; /* Its user name */
char *host; /* Its hostname */
char *real; /* Its real name */
int16 flags; /* Bot flags -- see BI_* below */
time_t created; /* Birth date ;) */
int16 chancount; /* Number of channels that use the bot. */
+6 -6
View File
@@ -23,12 +23,12 @@
typedef struct dbFILE_ dbFILE;
struct dbFILE_ {
int mode; /* 'r' for reading, 'w' for writing */
FILE *fp; /* The normal file descriptor */
FILE *backupfp; /* Open file pointer to a backup copy of
* the database file (if non-NULL) */
char filename[MAXPATHLEN]; /* Name of the database file */
char backupname[MAXPATHLEN]; /* Name of the backup file */
int mode; /* 'r' for reading, 'w' for writing */
FILE *fp; /* The normal file descriptor */
FILE *backupfp; /* Open file pointer to a backup copy of
* the database file (if non-NULL) */
char filename[MAXPATHLEN]; /* Name of the database file */
char backupname[MAXPATHLEN]; /* Name of the backup file */
};
/*************************************************************************/
+5 -5
View File
@@ -13,10 +13,10 @@
*/
typedef struct encryption_ {
int (*encrypt)(const char *src, int len, char *dest, int size);
int (*encrypt_in_place)(char *buf, int size);
int (*encrypt_check_len)(int passlen, int bufsize);
int (*decrypt)(const char *src, char *dest, int size);
int (*check_password)(const char *plaintext, const char *password);
int (*encrypt)(const char *src, int len, char *dest, int size);
int (*encrypt_in_place)(char *buf, int size);
int (*encrypt_check_len)(int passlen, int bufsize);
int (*decrypt)(const char *src, char *dest, int size);
int (*check_password)(const char *plaintext, const char *password);
} Encryption;
+16 -16
View File
@@ -122,7 +122,7 @@ E User *nc_on_chan(Channel * c, NickCore * nc);
E char *chan_get_modes(Channel * chan, int complete, int plus);
E void chan_set_modes(const char *source, Channel * chan, int ac,
const char **av, int check);
const char **av, int check);
E int chan_get_user_status(Channel * chan, User * user);
E int chan_has_user_status(Channel * chan, User * user, int16 status);
@@ -561,9 +561,9 @@ E void lang_init(void);
#define getstring2(nc,index) \
(langtexts[((nc)?((NickCore*)nc)->language:NSDefLanguage)][(index)])
E int strftime_lang(char *buf, int size, User * u, int format,
struct tm *tm);
struct tm *tm);
E void syntax_error(char *service, User * u, const char *command,
int msgnum);
int msgnum);
/**** log.c ****/
@@ -673,17 +673,17 @@ E int doValidHost(const char *host, int type);
typedef int (*range_callback_t) (User * u, int num, va_list args);
E int process_numlist(const char *numstr, int *count_ret,
range_callback_t callback, User * u, ...);
range_callback_t callback, User * u, ...);
E int isValidHost(const char *host, int type);
E int isvalidchar(const char c);
E char *myStrGetToken(const char *str, const char dilim, int token_number);
E char *myStrGetOnlyToken(const char *str, const char dilim,
int token_number);
int token_number);
E char *myStrSubString(const char *src, int start, int end);
E char *myStrGetTokenRemainder(const char *str, const char dilim,
int token_number);
int token_number);
E char *stripModePrefix(const char *str);
E int myNumToken(const char *str, const char dilim);
E void doCleanBuffer(char *str);
@@ -816,7 +816,7 @@ E void expire_sqlines(void);
E int check_chan_sqline(const char *chan);
E int add_szline(User * u, char *mask, const char *by,
const time_t expires, const char *reason);
const time_t expires, const char *reason);
E void expire_szlines(void);
E int check_szline(const char *nick, char *ip);
@@ -870,7 +870,7 @@ E int is_ulined(const char *server);
E int is_sync(Server *server);
E Server *new_server(Server * uplink, const char *name, const char *desc,
uint16 flags, const char *suid);
uint16 flags, const char *suid);
E Server *findserver(Server *s, const char *name);
@@ -910,8 +910,8 @@ E Session *findsession(const char *host);
E Exception *find_host_exception(const char *host);
E Exception *find_hostip_exception(const char *host, const char *hostip);
E int exception_add(User * u, const char *mask, const int limit,
const char *reason, const char *who,
const time_t expires);
const char *reason, const char *who,
const time_t expires);
/**** slist.c ****/
E int slist_add(SList *slist, void *item);
@@ -964,7 +964,7 @@ E char *TS6UPLINK;
E void update_host(User * user);
E User *do_nick(const char *source, const char *nick, const char *username, const char *host,
const char *server, const char *realname, time_t ts, uint32 svid, uint32 ip, const char *vhost, const char *uid);
const char *server, const char *realname, time_t ts, uint32 svid, uint32 ip, const char *vhost, const char *uid);
E void do_umode(const char *source, int ac, const char **av);
E void do_umode2(const char *source, int ac, const char **av);
@@ -980,12 +980,12 @@ E int is_excepted_mask(ChannelInfo * ci, char *mask);
E int match_usermask(const char *mask, User * user);
E int match_userip(const char *mask, User * user, char *host);
E void split_usermask(const char *mask, char **nick, char **user,
char **host);
char **host);
E char *create_mask(User * u);
#ifdef USE_MYSQL
/**** mysql.c ****/
E MYSQL *mysql;
E MYSQL *mysql;
E MYSQL_RES *mysql_res;
E MYSQL_FIELD *mysql_fields;
E MYSQL_ROW mysql_row;
@@ -1002,8 +1002,8 @@ E int db_mysql_save_ns_alias(NickAlias * na);
E int db_mysql_save_ns_req(NickRequest * nr);
E int db_mysql_save_cs_info(ChannelInfo * ci);
E int db_mysql_save_os_db(unsigned int maxucnt, unsigned int maxutime,
SList * ak, SList * sgl, SList * sql,
SList * szl);
SList * ak, SList * sgl, SList * sql,
SList * szl);
E int db_mysql_save_news(NewsItem * ni);
E int db_mysql_save_exceptions(Exception * e);
E int db_mysql_save_hs_core(HostCore * hc);
@@ -1031,7 +1031,7 @@ E int b64_decode(const char *src, char *target, size_t targsize);
E const char* encode_ip(unsigned char *ip);
E int decode_ip(const char *buf);
#define Anope_Free(x) if ((x) != NULL) free(x)
#define Anope_Free(x) if ((x) != NULL) free(x)
E char *host_resolve(char *host);
+71 -71
View File
@@ -48,7 +48,7 @@ typedef void * ano_module_t;
/*************************************************************************/
#define CMD_HASH(x) (((x)[0]&31)<<5 | ((x)[1]&31)) /* Will gen a hash from a string :) */
#define CMD_HASH(x) (((x)[0]&31)<<5 | ((x)[1]&31)) /* Will gen a hash from a string :) */
#define MAX_CMD_HASH 1024
#define MOD_STOP 1
@@ -69,18 +69,18 @@ typedef void * ano_module_t;
/**********************************************************************
* Module Returns
**********************************************************************/
#define MOD_ERR_OK 0
#define MOD_ERR_MEMORY 1
#define MOD_ERR_PARAMS 2
#define MOD_ERR_EXISTS 3
#define MOD_ERR_NOEXIST 4
#define MOD_ERR_NOUSER 5
#define MOD_ERR_NOLOAD 6
#define MOD_ERR_NOUNLOAD 7
#define MOD_ERR_SYNTAX 8
#define MOD_ERR_NODELETE 9
#define MOD_ERR_UNKNOWN 10
#define MOD_ERR_FILE_IO 11
#define MOD_ERR_OK 0
#define MOD_ERR_MEMORY 1
#define MOD_ERR_PARAMS 2
#define MOD_ERR_EXISTS 3
#define MOD_ERR_NOEXIST 4
#define MOD_ERR_NOUSER 5
#define MOD_ERR_NOLOAD 6
#define MOD_ERR_NOUNLOAD 7
#define MOD_ERR_SYNTAX 8
#define MOD_ERR_NODELETE 9
#define MOD_ERR_UNKNOWN 10
#define MOD_ERR_FILE_IO 11
#define MOD_ERR_NOSERVICE 12
#define MOD_ERR_NO_MOD_NAME 13
@@ -128,8 +128,8 @@ extern MDE EvtMessageHash *EVENT[MAX_CMD_HASH];
extern MDE EvtHookHash *EVENTHOOKS[MAX_CMD_HASH];
struct ModuleLang_ {
int argc;
char **argv;
int argc;
char **argv;
};
/** Every module in Anope is actually a class.
@@ -293,61 +293,61 @@ CoreExport class ModuleManager
struct ModuleHash_ {
char *name;
Module *m;
ModuleHash *next;
char *name;
Module *m;
ModuleHash *next;
};
struct Command_ {
char *name;
int (*routine)(User *u);
int (*has_priv)(User *u); /* Returns 1 if user may use command, else 0 */
char *name;
int (*routine)(User *u);
int (*has_priv)(User *u); /* Returns 1 if user may use command, else 0 */
/* Regrettably, these are hard-coded to correspond to current privilege
* levels (v4.0). Suggestions for better ways to do this are
* appreciated.
*/
int helpmsg_all; /* Displayed to all users; -1 = no message */
int helpmsg_reg; /* Displayed to regular users only */
int helpmsg_oper; /* Displayed to Services operators only */
int helpmsg_admin; /* Displayed to Services admins only */
int helpmsg_root; /* Displayed to Services root only */
char *help_param1;
char *help_param2;
char *help_param3;
char *help_param4;
/* Regrettably, these are hard-coded to correspond to current privilege
* levels (v4.0). Suggestions for better ways to do this are
* appreciated.
*/
int helpmsg_all; /* Displayed to all users; -1 = no message */
int helpmsg_reg; /* Displayed to regular users only */
int helpmsg_oper; /* Displayed to Services operators only */
int helpmsg_admin; /* Displayed to Services admins only */
int helpmsg_root; /* Displayed to Services root only */
char *help_param1;
char *help_param2;
char *help_param3;
char *help_param4;
/* Module related stuff */
int core; /* Can this command be deleted? */
char *mod_name; /* Name of the module who owns us, NULL for core's */
char *service; /* Service we provide this command for */
int (*all_help)(User *u);
int (*regular_help)(User *u);
int (*oper_help)(User *u);
int (*admin_help)(User *u);
int (*root_help)(User *u);
/* Module related stuff */
int core; /* Can this command be deleted? */
char *mod_name; /* Name of the module who owns us, NULL for core's */
char *service; /* Service we provide this command for */
int (*all_help)(User *u);
int (*regular_help)(User *u);
int (*oper_help)(User *u);
int (*admin_help)(User *u);
int (*root_help)(User *u);
Command *next; /* Next command responsible for the same command */
Command *next; /* Next command responsible for the same command */
};
struct CommandHash_ {
char *name; /* Name of the command */
Command *c; /* Actual command */
CommandHash *next; /* Next command */
char *name; /* Name of the command */
Command *c; /* Actual command */
CommandHash *next; /* Next command */
};
struct Message_ {
char *name;
int (*func)(const char *source, int ac, const char **av);
int core;
char *mod_name;
Message *next;
char *name;
int (*func)(const char *source, int ac, const char **av);
int core;
char *mod_name;
Message *next;
};
struct MessageHash_ {
char *name;
Message *m;
MessageHash *next;
char *name;
Message *m;
MessageHash *next;
};
struct ModuleCallBack_ {
@@ -361,38 +361,38 @@ struct ModuleCallBack_ {
};
struct EvtMessage_ {
char *name;
int (*func)(const char *source, int ac, const char **av);
int core;
char *mod_name;
EvtMessage *next;
char *name;
int (*func)(const char *source, int ac, const char **av);
int core;
char *mod_name;
EvtMessage *next;
};
struct EvtMessageHash_ {
char *name;
EvtMessage *evm;
EvtMessageHash *next;
char *name;
EvtMessage *evm;
EvtMessageHash *next;
};
struct EvtHook_ {
int (*func)(int argc, char **argv);
int core;
int (*func)(int argc, char **argv);
int core;
char *name;
char *mod_name;
EvtHook *next;
char *mod_name;
EvtHook *next;
};
struct EvtHookHash_ {
char *name;
EvtHook *evh;
EvtHookHash *next;
char *name;
EvtHook *evh;
EvtHookHash *next;
};
/*************************************************************************/
/* Module Managment Functions */
MDE Module *findModule(const char *name); /* Find a module */
MDE Module *findModule(const char *name); /* Find a module */
int encryption_module_init(void); /* Load the encryption module */
int protocol_module_init(void); /* Load the IRCD Protocol Module up*/
+8 -8
View File
@@ -2,19 +2,19 @@
// Microsoft Developer Studio generated include file.
// Used by Win32GUI.rc
//
#define VER_ANOPE 1
#define MANIFEST_RESOURCE_ID 2
#define ICON_APP 129
#define VER_ANOPE 1
#define MANIFEST_RESOURCE_ID 2
#define ICON_APP 129
// Next default values for new objects
//
#ifdef APSTUDIO_INVOKED
#ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NO_MFC 1
#define _APS_NEXT_RESOURCE_VALUE 152
#define _APS_NEXT_COMMAND_VALUE 40061
#define _APS_NEXT_CONTROL_VALUE 1167
#define _APS_NEXT_SYMED_VALUE 104
#define _APS_NO_MFC 1
#define _APS_NEXT_RESOURCE_VALUE 152
#define _APS_NEXT_COMMAND_VALUE 40061
#define _APS_NEXT_CONTROL_VALUE 1167
#define _APS_NEXT_SYMED_VALUE 104
#endif
#endif
+275 -275
View File
@@ -105,7 +105,7 @@
#ifdef _WIN32
/* VS2008 hates having this define before its own */
#define vsnprintf _vsnprintf
#define vsnprintf _vsnprintf
#endif
#if HAVE_STRINGS_H
@@ -337,9 +337,9 @@ struct ircdvars_ {
const char *adminset; /* Mode to set for admin */
const char *adminunset; /* Mode to unset for admin */
const char *modeonreg; /* Mode on Register */
const char *rootmodeonid; /* Mode on ID for ROOTS */
const char *adminmodeonid; /* Mode on ID for ADMINS */
const char *opermodeonid; /* Mode on ID for OPERS */
const char *rootmodeonid; /* Mode on ID for ROOTS */
const char *adminmodeonid; /* Mode on ID for ADMINS */
const char *opermodeonid; /* Mode on ID for OPERS */
const char *modeonunreg; /* Mode on Unregister */
const char *modeonnick; /* Mode on nick change */
int sgline; /* Supports SGline */
@@ -382,10 +382,10 @@ struct ircdvars_ {
char *chanmodes; /* If the ircd sends CHANMODE in CAPAB this is where we store it */
int token; /* Does Anope support the tokens for the ircd */
int sjb64; /* Base 64 encode TIMESTAMP */
int invitemode; /* +I */
int sjoinbanchar; /* use single quotes to define it */
int sjoinexchar; /* use single quotes to define it */
int sjoininvchar; /* use single quotes to define it */
int invitemode; /* +I */
int sjoinbanchar; /* use single quotes to define it */
int sjoinexchar; /* use single quotes to define it */
int sjoininvchar; /* use single quotes to define it */
int svsmode_ucmode; /* Can remove User Channel Modes with SVSMODE */
int sglineenforce;
const char *vhostchar; /* char used for vhosting */
@@ -443,30 +443,30 @@ struct ircdcapab_ {
/* Configuration directives */
typedef struct {
const char *name;
struct {
int type; /* PARAM_* below */
int flags; /* Same */
void *ptr; /* Pointer to where to store the value */
} params[MAXPARAMS];
const char *name;
struct {
int type; /* PARAM_* below */
int flags; /* Same */
void *ptr; /* Pointer to where to store the value */
} params[MAXPARAMS];
} Directive;
#define PARAM_NONE 0
#define PARAM_INT 1
#define PARAM_POSINT 2 /* Positive integer only */
#define PARAM_PORT 3 /* 1..65535 only */
#define PARAM_POSINT 2 /* Positive integer only */
#define PARAM_PORT 3 /* 1..65535 only */
#define PARAM_STRING 4
#define PARAM_TIME 5
#define PARAM_STRING_ARRAY 6 /* Array of string */
#define PARAM_SET -1 /* Not a real parameter; just set the
* given integer variable to 1 */
#define PARAM_DEPRECATED -2 /* Set for deprecated directives; `ptr'
* is a function pointer to call */
#define PARAM_STRING_ARRAY 6 /* Array of string */
#define PARAM_SET -1 /* Not a real parameter; just set the
* given integer variable to 1 */
#define PARAM_DEPRECATED -2 /* Set for deprecated directives; `ptr'
* is a function pointer to call */
/* Flags: */
#define PARAM_OPTIONAL 0x01
/*#define PARAM_FULLONLY 0x02 unused */
#define PARAM_RELOAD 0x04 /* Directive is reloadable */
#define PARAM_RELOAD 0x04 /* Directive is reloadable */
/*************************************************************************/
@@ -503,20 +503,20 @@ struct ModuleData_ {
* we encapsulate memo data in a MemoList to make it easier to handle. */
struct memo_ {
uint32 number; /* Index number -- not necessarily array position! */
uint16 flags;
time_t time; /* When it was sent */
char sender[NICKMAX];
char *text;
ModuleData *moduleData; /* Module saved data attached to the Memo */
uint32 number; /* Index number -- not necessarily array position! */
uint16 flags;
time_t time; /* When it was sent */
char sender[NICKMAX];
char *text;
ModuleData *moduleData; /* Module saved data attached to the Memo */
#ifdef USE_MYSQL
uint32 id; /* Database ID; see mysql.c */
#endif
};
typedef struct {
int16 memocount, memomax;
Memo *memos;
int16 memocount, memomax;
Memo *memos;
} MemoInfo;
@@ -535,10 +535,10 @@ typedef struct {
/* Access levels for users. */
typedef struct {
uint16 in_use; /* 1 if this entry is in use, else 0 */
int16 level;
NickCore *nc; /* Guaranteed to be non-NULL if in use, NULL if not */
time_t last_seen;
uint16 in_use; /* 1 if this entry is in use, else 0 */
int16 level;
NickCore *nc; /* Guaranteed to be non-NULL if in use, NULL if not */
time_t last_seen;
} ChanAccess;
/* Note that these two levels also serve as exclusive boundaries for valid
@@ -557,28 +557,28 @@ typedef struct {
/* Levels for xOP */
#define ACCESS_VOP 3
#define ACCESS_HOP 4
#define ACCESS_HOP 4
#define ACCESS_AOP 5
#define ACCESS_SOP 10
/* AutoKick data. */
typedef struct {
int16 in_use; /* Always 0 if not in use */
int16 is_nick; /* 1 if a regged nickname, 0 if a nick!user@host mask */
uint16 flags;
union {
int16 in_use; /* Always 0 if not in use */
int16 is_nick; /* 1 if a regged nickname, 0 if a nick!user@host mask */
uint16 flags;
union {
char *mask; /* Guaranteed to be non-NULL if in use, NULL if not */
NickCore *nc; /* Same */
} u;
char *reason;
} u;
char *reason;
char *creator;
time_t addtime;
char *creator;
time_t addtime;
} AutoKick;
#define AK_USED 0x0001
#define AK_ISNICK 0x0002
#define AK_STUCK 0x0004
#define AK_STUCK 0x0004
/* Structure used to contain bad words. */
@@ -595,60 +595,60 @@ struct badword_ {
struct chaninfo_ {
ChannelInfo *next, *prev;
char name[CHANMAX];
NickCore *founder;
NickCore *successor; /* Who gets the channel if the founder
ChannelInfo *next, *prev;
char name[CHANMAX];
NickCore *founder;
NickCore *successor; /* Who gets the channel if the founder
* nick is dropped or expires */
char founderpass[PASSMAX];
char *desc;
char *url;
char *email;
char founderpass[PASSMAX];
char *desc;
char *url;
char *email;
time_t time_registered;
time_t last_used;
char *last_topic; /* Last topic on the channel */
char last_topic_setter[NICKMAX]; /* Who set the last topic */
time_t last_topic_time; /* When the last topic was set */
time_t time_registered;
time_t last_used;
char *last_topic; /* Last topic on the channel */
char last_topic_setter[NICKMAX]; /* Who set the last topic */
time_t last_topic_time; /* When the last topic was set */
uint32 flags; /* See below */
char *forbidby;
char *forbidreason;
uint32 flags; /* See below */
char *forbidby;
char *forbidreason;
int16 bantype;
int16 *levels; /* Access levels for commands */
int16 bantype;
int16 *levels; /* Access levels for commands */
uint16 accesscount;
ChanAccess *access; /* List of authorized users */
uint16 akickcount;
AutoKick *akick; /* List of users to kickban */
uint16 accesscount;
ChanAccess *access; /* List of authorized users */
uint16 akickcount;
AutoKick *akick; /* List of users to kickban */
uint32 mlock_on, mlock_off; /* See channel modes below */
uint32 mlock_limit; /* 0 if no limit */
char *mlock_key; /* NULL if no key */
char *mlock_flood; /* NULL if no +f */
char *mlock_redirect; /* NULL if no +L */
uint32 mlock_on, mlock_off; /* See channel modes below */
uint32 mlock_limit; /* 0 if no limit */
char *mlock_key; /* NULL if no key */
char *mlock_flood; /* NULL if no +f */
char *mlock_redirect; /* NULL if no +L */
char *entry_message; /* Notice sent on entering channel */
char *entry_message; /* Notice sent on entering channel */
MemoInfo memos;
MemoInfo memos;
struct channel_ *c; /* Pointer to channel record (if *
* channel is currently in use) */
struct channel_ *c; /* Pointer to channel record (if *
* channel is currently in use) */
ModuleData *moduleData; /* Module saved data attached to the ChannelInfo */
ModuleData *moduleData; /* Module saved data attached to the ChannelInfo */
/* For BotServ */
/* For BotServ */
BotInfo *bi; /* Bot used on this channel */
uint32 botflags; /* BS_* below */
int16 *ttb; /* Times to ban for each kicker */
BotInfo *bi; /* Bot used on this channel */
uint32 botflags; /* BS_* below */
int16 *ttb; /* Times to ban for each kicker */
uint16 bwcount;
BadWord *badwords; /* For BADWORDS kicker */
int16 capsmin, capspercent; /* For CAPS kicker */
int16 floodlines, floodsecs; /* For FLOOD kicker */
int16 repeattimes; /* For REPEAT kicker */
uint16 bwcount;
BadWord *badwords; /* For BADWORDS kicker */
int16 capsmin, capspercent; /* For CAPS kicker */
int16 floodlines, floodsecs; /* For FLOOD kicker */
int16 repeattimes; /* For REPEAT kicker */
};
/* Retain topic even after last person leaves channel */
@@ -703,43 +703,43 @@ struct chaninfo_ {
#define CA_NOJOIN 10 /* Maximum */
#define CA_ACCESS_CHANGE 11
#define CA_MEMO 12
#define CA_ASSIGN 13 /* BotServ ASSIGN command */
#define CA_BADWORDS 14 /* BotServ BADWORDS command */
#define CA_NOKICK 15 /* Not kicked by the bot */
#define CA_ASSIGN 13 /* BotServ ASSIGN command */
#define CA_BADWORDS 14 /* BotServ BADWORDS command */
#define CA_NOKICK 15 /* Not kicked by the bot */
#define CA_FANTASIA 16
#define CA_SAY 17
#define CA_GREET 18
#define CA_GREET 18
#define CA_VOICEME 19
#define CA_VOICE 20
#define CA_GETKEY 21
#define CA_GETKEY 21
#define CA_AUTOHALFOP 22
#define CA_AUTOPROTECT 23
#define CA_OPDEOPME 24
#define CA_HALFOPME 25
#define CA_HALFOP 26
#define CA_PROTECTME 27
#define CA_PROTECT 28
#define CA_KICKME 29
#define CA_KICK 30
#define CA_OPDEOPME 24
#define CA_HALFOPME 25
#define CA_HALFOP 26
#define CA_PROTECTME 27
#define CA_PROTECT 28
#define CA_KICKME 29
#define CA_KICK 30
#define CA_SIGNKICK 31
/* #define CA_AUTOADMIN 32
#define CA_ADMINME 33
#define CA_ADMIN 34 */
/* #define CA_AUTOADMIN 32
#define CA_ADMINME 33
#define CA_ADMIN 34 */
/* Why are these commented out and not removed? -GD */
#define CA_BANME 32
#define CA_BAN 33
#define CA_TOPIC 34
#define CA_INFO 35
#define CA_BANME 32
#define CA_BAN 33
#define CA_TOPIC 34
#define CA_INFO 35
#define CA_SIZE 36
/* BotServ SET flags */
#define BS_DONTKICKOPS 0x00000001
#define BS_DONTKICKOPS 0x00000001
#define BS_DONTKICKVOICES 0x00000002
#define BS_FANTASY 0x00000004
#define BS_SYMBIOSIS 0x00000008
#define BS_GREET 0x00000010
#define BS_NOBOT 0x00000020
#define BS_FANTASY 0x00000004
#define BS_SYMBIOSIS 0x00000008
#define BS_GREET 0x00000010
#define BS_NOBOT 0x00000020
/* BotServ Kickers flags */
#define BS_KICK_BOLDS 0x80000000
@@ -776,9 +776,9 @@ struct csmodeutil_ {
};
typedef struct {
int what;
const char *name;
int desc;
int what;
const char *name;
int desc;
} LevelInfo;
@@ -787,23 +787,23 @@ typedef struct {
/* Server data */
typedef enum {
SSYNC_UNKNOWN = 0, /* We can't get the sync state */
SSYNC_UNKNOWN = 0, /* We can't get the sync state */
SSYNC_IN_PROGRESS = 1, /* Sync is currently in progress */
SSYNC_DONE = 2 /* We're in sync */
SSYNC_DONE = 2 /* We're in sync */
} SyncState;
struct server_ {
Server *next, *prev;
Server *next, *prev;
char *name; /* Server name */
uint16 hops; /* Hops between services and server */
char *desc; /* Server description */
uint16 flags; /* Some info flags, as defined below */
char *suid; /* Server Univeral ID */
SyncState sync; /* Server sync state (see above) */
char *name; /* Server name */
uint16 hops; /* Hops between services and server */
char *desc; /* Server description */
uint16 flags; /* Some info flags, as defined below */
char *suid; /* Server Univeral ID */
SyncState sync; /* Server sync state (see above) */
Server *links; /* Linked list head for linked servers */
Server *uplink; /* Server which pretends to be the uplink */
Server *links; /* Linked list head for linked servers */
Server *uplink; /* Server which pretends to be the uplink */
};
#define SERVER_ISME 0x0001
@@ -824,7 +824,7 @@ struct cbmode_ {
#define CBM_MINUS_NO_ARG 0x0001 /* No argument for unset */
#define CBM_NO_MLOCK 0x0002 /* Can't be MLOCKed */
#define CBM_NO_USER_MLOCK 0x0004 /* Can't be MLOCKed by non-opers */
#define CBM_NO_USER_MLOCK 0x0004 /* Can't be MLOCKed by non-opers */
struct cbmodeinfo_ {
char mode; /* The mode */
@@ -857,40 +857,40 @@ struct cumode_ {
*/
struct bandata_ {
BanData *next, *prev;
BanData *next, *prev;
char *mask; /* Since a nick is unsure and a User structure
is unsafe */
time_t last_use; /* Since time is the only way to check
whether it's still useful */
int16 ttb[TTB_SIZE];
char *mask; /* Since a nick is unsure and a User structure
is unsafe */
time_t last_use; /* Since time is the only way to check
whether it's still useful */
int16 ttb[TTB_SIZE];
};
/* This structure stocks information on every user that will be used by
* BotServ. */
struct userdata_ {
/* Data validity */
time_t last_use;
/* Data validity */
time_t last_use;
/* for flood kicker */
int16 lines;
time_t last_start;
/* for flood kicker */
int16 lines;
time_t last_start;
/* for repeat kicker */
char *lastline;
int16 times;
/* for repeat kicker */
char *lastline;
int16 times;
};
/* Channelban type flags */
#define ENTRYTYPE_NONE 0x00000000
#define ENTRYTYPE_CIDR4 0x00000001
#define ENTRYTYPE_NICK_WILD 0x00000004
#define ENTRYTYPE_NICK 0x00000008
#define ENTRYTYPE_USER_WILD 0x00000010
#define ENTRYTYPE_USER 0x00000020
#define ENTRYTYPE_HOST_WILD 0x00000040
#define ENTRYTYPE_HOST 0x00000080
#define ENTRYTYPE_NONE 0x00000000
#define ENTRYTYPE_CIDR4 0x00000001
#define ENTRYTYPE_NICK_WILD 0x00000004
#define ENTRYTYPE_NICK 0x00000008
#define ENTRYTYPE_USER_WILD 0x00000010
#define ENTRYTYPE_USER 0x00000020
#define ENTRYTYPE_HOST_WILD 0x00000040
#define ENTRYTYPE_HOST 0x00000080
struct c_userlist {
struct c_userlist *next, *prev;
@@ -899,33 +899,33 @@ struct c_userlist {
};
struct channel_ {
Channel *next, *prev;
char name[CHANMAX];
ChannelInfo *ci; /* Corresponding ChannelInfo */
time_t creation_time; /* When channel was created */
char *topic;
char topic_setter[NICKMAX]; /* Who set the topic */
time_t topic_time; /* When topic was set */
uint32 mode; /* Binary modes only */
uint32 limit; /* 0 if none */
char *key; /* NULL if none */
char *redirect; /* +L; NULL if none */
char *flood; /* +f; NULL if none */
EList *bans;
EList *excepts;
EList *invites;
Channel *next, *prev;
char name[CHANMAX];
ChannelInfo *ci; /* Corresponding ChannelInfo */
time_t creation_time; /* When channel was created */
char *topic;
char topic_setter[NICKMAX]; /* Who set the topic */
time_t topic_time; /* When topic was set */
uint32 mode; /* Binary modes only */
uint32 limit; /* 0 if none */
char *key; /* NULL if none */
char *redirect; /* +L; NULL if none */
char *flood; /* +f; NULL if none */
EList *bans;
EList *excepts;
EList *invites;
struct c_userlist *users;
int16 usercount;
int16 usercount;
BanData *bd;
BanData *bd;
time_t server_modetime; /* Time of last server MODE */
time_t chanserv_modetime; /* Time of last check_modes() */
int16 server_modecount; /* Number of server MODEs this second */
int16 chanserv_modecount; /* Number of check_mode()'s this sec */
int16 bouncy_modes; /* Did we fail to set modes here? */
int16 topic_sync; /* Is the topic in sync? */
time_t server_modetime; /* Time of last server MODE */
time_t chanserv_modetime; /* Time of last check_modes() */
int16 server_modecount; /* Number of server MODEs this second */
int16 chanserv_modecount; /* Number of check_mode()'s this sec */
int16 bouncy_modes; /* Did we fail to set modes here? */
int16 topic_sync; /* Is the topic in sync? */
};
struct c_elist {
@@ -934,11 +934,11 @@ struct c_elist {
};
struct c_elist_entry {
Entry *next, *prev;
uint32 type;
uint32 cidr_ip; /* IP mask for CIDR matching */
uint32 cidr_mask; /* Netmask for CIDR matching */
char *nick, *user, *host, *mask;
Entry *next, *prev;
uint32 type;
uint32 cidr_ip; /* IP mask for CIDR matching */
uint32 cidr_mask; /* Netmask for CIDR matching */
char *nick, *user, *host, *mask;
};
/*************************************************************************/
@@ -954,9 +954,9 @@ struct c_elist_entry {
/* Ignorance list data. */
typedef struct ignore_data {
struct ignore_data *prev, *next;
char *mask;
time_t time; /* When do we stop ignoring them? */
struct ignore_data *prev, *next;
char *mask;
time_t time; /* When do we stop ignoring them? */
} IgnoreData;
/*************************************************************************/
@@ -1001,58 +1001,58 @@ struct sxline_ {
/* Host serv structures */
struct hostcore_ {
HostCore *next;
char *nick; /* Owner of the vHost */
char *vIdent; /* vIdent for the user */
char *vHost; /* Vhost for this user */
char *creator; /* Oper Nick of the oper who set the vhost */
time_t time; /* Date/Time vHost was set */
HostCore *next;
char *nick; /* Owner of the vHost */
char *vIdent; /* vIdent for the user */
char *vHost; /* Vhost for this user */
char *creator; /* Oper Nick of the oper who set the vhost */
time_t time; /* Date/Time vHost was set */
};
/*************************************************************************/
struct newsitem_ {
uint16 type;
uint32 num; /* Numbering is separate for login and oper news */
char *text;
char who[NICKMAX];
time_t time;
uint16 type;
uint32 num; /* Numbering is separate for login and oper news */
char *text;
char who[NICKMAX];
time_t time;
};
/*************************************************************************/
struct exception_ {
char *mask; /* Hosts to which this exception applies */
int limit; /* Session limit for exception */
char who[NICKMAX]; /* Nick of person who added the exception */
char *reason; /* Reason for exception's addition */
time_t time; /* When this exception was added */
time_t expires; /* Time when it expires. 0 == no expiry */
int num; /* Position in exception list; used to track
* positions when deleting entries. It is
* symbolic and used internally. It is
* calculated at load time and never saved. */
char *mask; /* Hosts to which this exception applies */
int limit; /* Session limit for exception */
char who[NICKMAX]; /* Nick of person who added the exception */
char *reason; /* Reason for exception's addition */
time_t time; /* When this exception was added */
time_t expires; /* Time when it expires. 0 == no expiry */
int num; /* Position in exception list; used to track
* positions when deleting entries. It is
* symbolic and used internally. It is
* calculated at load time and never saved. */
};
/*************************************************************************/
struct session_ {
Session *prev, *next;
char *host;
int count; /* Number of clients with this host */
int hits; /* Number of subsequent kills for a host */
Session *prev, *next;
char *host;
int count; /* Number of clients with this host */
int hits; /* Number of subsequent kills for a host */
};
/*************************************************************************/
typedef struct ircd_modes_ {
int user_invis;
int user_oper;
int chan_invite;
int chan_secret;
int chan_private;
int chan_key;
int chan_limit;
int user_invis;
int user_oper;
int chan_invite;
int chan_secret;
int chan_private;
int chan_key;
int chan_limit;
} IRCDModes;
@@ -1077,29 +1077,29 @@ typedef struct ircd_modes_ {
/* Memo Flags */
#define MF_UNREAD 0x0001 /* Memo has not yet been read */
#define MF_RECEIPT 0x0002 /* Sender requested receipt */
#define MF_NOTIFYS 0x0004 /* Memo is a notification of receitp */
#define MF_NOTIFYS 0x0004 /* Memo is a notification of receitp */
/* Nickname status flags: */
#define NS_VERBOTEN 0x0002 /* Nick may not be registered or used */
#define NS_NO_EXPIRE 0x0004 /* Nick never expires */
#define NS_IDENTIFIED 0x8000 /* User has IDENTIFY'd */
#define NS_RECOGNIZED 0x4000 /* ON_ACCESS true && SECURE flag not set */
#define NS_ON_ACCESS 0x2000 /* User comes from a known address */
#define NS_KILL_HELD 0x1000 /* Nick is being held after a kill */
#define NS_GUESTED 0x0100 /* SVSNICK has been sent but nick has not
* yet changed. An enforcer will be
* introduced when it does change. */
#define NS_VERBOTEN 0x0002 /* Nick may not be registered or used */
#define NS_NO_EXPIRE 0x0004 /* Nick never expires */
#define NS_IDENTIFIED 0x8000 /* User has IDENTIFY'd */
#define NS_RECOGNIZED 0x4000 /* ON_ACCESS true && SECURE flag not set */
#define NS_ON_ACCESS 0x2000 /* User comes from a known address */
#define NS_KILL_HELD 0x1000 /* Nick is being held after a kill */
#define NS_GUESTED 0x0100 /* SVSNICK has been sent but nick has not
* yet changed. An enforcer will be
* introduced when it does change. */
#define NS_MASTER 0x0200 /* Was a master nick; used to import old databases */
#define NS_TRANSGROUP 0xC000 /* Status flags that can be passed to a nick of the
same group during nick change */
#define NS_TEMPORARY 0xFF00 /* All temporary status flags */
#define NS_TEMPORARY 0xFF00 /* All temporary status flags */
/* These two are not used anymore */
#define NS_OLD_ENCRYPTEDPW 0x0001 /* Nickname password is encrypted */
/* Nickname setting flags: */
#define NI_KILLPROTECT 0x00000001 /* Kill others who take this nick */
#define NI_SECURE 0x00000002 /* Don't recognize unless IDENTIFY'd */
#define NI_MSG 0x00000004 /* Use PRIVMSGs instead of NOTICEs */
#define NI_MSG 0x00000004 /* Use PRIVMSGs instead of NOTICEs */
#define NI_MEMO_HARDMAX 0x00000008 /* Don't allow user to change memo limit */
#define NI_MEMO_SIGNON 0x00000010 /* Notify of memos at signon and un-away */
#define NI_MEMO_RECEIVE 0x00000020 /* Notify of new memos when sent */
@@ -1112,9 +1112,9 @@ typedef struct ircd_modes_ {
#define NI_SERVICES_OPER 0x00001000 /* User is a Services operator */
#define NI_SERVICES_ADMIN 0x00002000 /* User is a Services admin */
#define NI_ENCRYPTEDPW 0x00004000 /* Nickname password is encrypted */
#define NI_SERVICES_ROOT 0x00008000 /* User is a Services root */
#define NI_MEMO_MAIL 0x00010000 /* User gets email on memo */
#define NI_HIDE_STATUS 0x00020000 /* Don't show services access status */
#define NI_SERVICES_ROOT 0x00008000 /* User is a Services root */
#define NI_MEMO_MAIL 0x00010000 /* User gets email on memo */
#define NI_HIDE_STATUS 0x00020000 /* Don't show services access status */
#define NI_SUSPENDED 0x00040000 /* Nickname is suspended */
#define NI_AUTOOP 0x00080000 /* Autoop nickname in channels */
/* Languages. Never insert anything in the middle of this list, or
@@ -1122,25 +1122,25 @@ typedef struct ircd_modes_ {
* the order the languages are displayed in for NickServ HELP SET LANGUAGE,
* do it in language.c.
*/
#define LANG_EN_US 0 /* United States English */
#define LANG_JA_JIS 1 /* Japanese (JIS encoding) */
#define LANG_JA_EUC 2 /* Japanese (EUC encoding) */
#define LANG_JA_SJIS 3 /* Japanese (SJIS encoding) */
#define LANG_ES 4 /* Spanish */
#define LANG_PT 5 /* Portugese */
#define LANG_FR 6 /* French */
#define LANG_TR 7 /* Turkish */
#define LANG_IT 8 /* Italian */
#define LANG_DE 9 /* German */
#define LANG_CAT 10 /* Catalan */
#define LANG_GR 11 /* Greek */
#define LANG_NL 12 /* Dutch */
#define LANG_RU 13 /* Russian */
#define LANG_HUN 14 /* Hungarian */
#define LANG_PL 15 /* Polish */
#define LANG_EN_US 0 /* United States English */
#define LANG_JA_JIS 1 /* Japanese (JIS encoding) */
#define LANG_JA_EUC 2 /* Japanese (EUC encoding) */
#define LANG_JA_SJIS 3 /* Japanese (SJIS encoding) */
#define LANG_ES 4 /* Spanish */
#define LANG_PT 5 /* Portugese */
#define LANG_FR 6 /* French */
#define LANG_TR 7 /* Turkish */
#define LANG_IT 8 /* Italian */
#define LANG_DE 9 /* German */
#define LANG_CAT 10 /* Catalan */
#define LANG_GR 11 /* Greek */
#define LANG_NL 12 /* Dutch */
#define LANG_RU 13 /* Russian */
#define LANG_HUN 14 /* Hungarian */
#define LANG_PL 15 /* Polish */
#define NUM_LANGS 16 /* Number of languages */
#define USED_LANGS 13 /* Number of languages provided */
#define NUM_LANGS 16 /* Number of languages */
#define USED_LANGS 13 /* Number of languages provided */
#define DEF_LANGUAGE LANG_EN_US
@@ -1161,7 +1161,7 @@ typedef struct ircd_modes_ {
#define MUT_DEHALFOP 4
#define MUT_HALFOP 5
#define MUT_DEPROTECT 6
#define MUT_PROTECT 7
#define MUT_PROTECT 7
/*************************************************************************/
/* CAPAB stuffs */
@@ -1172,36 +1172,36 @@ struct capabinfo_ {
uint32 flag;
};
#define CAPAB_NOQUIT 0x00000001
#define CAPAB_TSMODE 0x00000002
#define CAPAB_NOQUIT 0x00000001
#define CAPAB_TSMODE 0x00000002
#define CAPAB_UNCONNECT 0x00000004
#define CAPAB_NICKIP 0x00000008
#define CAPAB_NSJOIN 0x00000010
#define CAPAB_ZIP 0x00000020
#define CAPAB_BURST 0x00000040
#define CAPAB_TS3 0x00000080
#define CAPAB_TS5 0x00000100
#define CAPAB_DKEY 0x00000200
#define CAPAB_DOZIP 0x00000400
#define CAPAB_DODKEY 0x00000800
#define CAPAB_QS 0x00001000
#define CAPAB_SCS 0x00002000
#define CAPAB_PT4 0x00004000
#define CAPAB_UID 0x00008000
#define CAPAB_KNOCK 0x00010000
#define CAPAB_CLIENT 0x00020000
#define CAPAB_IPV6 0x00040000
#define CAPAB_SSJ5 0x00080000
#define CAPAB_SN2 0x00100000
#define CAPAB_VHOST 0x00200000
#define CAPAB_TOKEN 0x00400000
#define CAPAB_SSJ3 0x00800000
#define CAPAB_NICK2 0x01000000
#define CAPAB_UMODE2 0x02000000
#define CAPAB_VL 0x04000000
#define CAPAB_TLKEXT 0x08000000
#define CAPAB_NICKIP 0x00000008
#define CAPAB_NSJOIN 0x00000010
#define CAPAB_ZIP 0x00000020
#define CAPAB_BURST 0x00000040
#define CAPAB_TS3 0x00000080
#define CAPAB_TS5 0x00000100
#define CAPAB_DKEY 0x00000200
#define CAPAB_DOZIP 0x00000400
#define CAPAB_DODKEY 0x00000800
#define CAPAB_QS 0x00001000
#define CAPAB_SCS 0x00002000
#define CAPAB_PT4 0x00004000
#define CAPAB_UID 0x00008000
#define CAPAB_KNOCK 0x00010000
#define CAPAB_CLIENT 0x00020000
#define CAPAB_IPV6 0x00040000
#define CAPAB_SSJ5 0x00080000
#define CAPAB_SN2 0x00100000
#define CAPAB_VHOST 0x00200000
#define CAPAB_TOKEN 0x00400000
#define CAPAB_SSJ3 0x00800000
#define CAPAB_NICK2 0x01000000
#define CAPAB_UMODE2 0x02000000
#define CAPAB_VL 0x04000000
#define CAPAB_TLKEXT 0x08000000
#define CAPAB_CHANMODE 0x10000000
#define CAPAB_SJB64 0x20000000
#define CAPAB_SJB64 0x20000000
#define CAPAB_NICKCHARS 0x40000000
/*************************************************************************/
@@ -1209,9 +1209,9 @@ struct capabinfo_ {
/**
* RFC: defination of a valid nick
* nickname = ( letter / special ) *8( letter / digit / special / "-" )
* letter = %x41-5A / %x61-7A ; A-Z / a-z
* digit = %x30-39 ; 0-9
* special = %x5B-60 / %x7B-7D ; "[", "]", "\", "`", "_", "^", "{", "|", "}"
* letter = %x41-5A / %x61-7A ; A-Z / a-z
* digit = %x30-39 ; 0-9
* special = %x5B-60 / %x7B-7D ; "[", "]", "\", "`", "_", "^", "{", "|", "}"
**/
#define isvalidnick(c) ( isalnum(c) || ((c) >='\x5B' && (c) <='\x60') || ((c) >='\x7B' && (c) <='\x7D') || (c)=='-' )
@@ -1281,7 +1281,7 @@ private:
}
public:
virtual ~IRCDProto();
virtual ~IRCDProto();
virtual void SendSVSNOOP(const char *, int) { }
virtual void SendAkillDel(const char *, const char *) = 0;
+1 -1
View File
@@ -32,7 +32,7 @@ struct slistopts_ {
int32 flags; /* Flags for the list. See below. */
int (*compareitem) (SList *slist, void *item1, void *item2); /* Called to compare two items */
int (*isequal) (SList *slist, void *item1, void *item2); /* Called by slist_indexof. item1 can be an arbitrary pointer. */
int (*isequal) (SList *slist, void *item1, void *item2); /* Called by slist_indexof. item1 can be an arbitrary pointer. */
void (*freeitem) (SList *slist, void *item); /* Called when an item is removed */
};
+5 -5
View File
@@ -21,11 +21,11 @@
/* Definitions for timeouts: */
typedef struct timeout_ Timeout;
struct timeout_ {
Timeout *next, *prev;
time_t settime, timeout;
int repeat; /* Does this timeout repeat indefinitely? */
void (*code)(Timeout *); /* This structure is passed to the code */
void *data; /* Can be anything */
Timeout *next, *prev;
time_t settime, timeout;
int repeat; /* Does this timeout repeat indefinitely? */
void (*code)(Timeout *); /* This structure is passed to the code */
void *data; /* Can be anything */
};
+1 -1
View File
@@ -29,7 +29,7 @@ class User
char *username; /* ident */
char *host; /* User's real hostname */
char *hostip; /* User's IP number */
char *hostip; /* User's IP number */
char *vhost; /* User's virtual hostname */
std::string chost; /* User's cloaked hostname */
char *vident; /* User's virtual ident */
+129 -129
View File
@@ -37,35 +37,35 @@ void parse_line(FILE *, char *);
int main()
{
FILE *fd = fopen(CTRL, "r");
FILE *fd = fopen(CTRL, "r");
if (!fd) {
fprintf(stderr, "Error: Unable to find control file: " CTRL "\n");
exit(0);
}
if (!fd) {
fprintf(stderr, "Error: Unable to find control file: " CTRL "\n");
exit(0);
}
load_ctrl(fd);
fclose(fd);
load_ctrl(fd);
fclose(fd);
_snprintf(version, 1024, "%ld.%ld.%ld%s (%ld)", version_major, version_minor,
version_patch, (version_extra ? version_extra : ""), version_build);
_snprintf(version, 1024, "%ld.%ld.%ld%s (%ld)", version_major, version_minor,
version_patch, (version_extra ? version_extra : ""), version_build);
_snprintf(version_dotted, 1024, "%ld.%ld.%ld%s.%ld", version_major, version_minor,
version_patch, (version_extra ? version_extra : ""), version_build);
_snprintf(version_dotted, 1024, "%ld.%ld.%ld%s.%ld", version_major, version_minor,
version_patch, (version_extra ? version_extra : ""), version_build);
fd = fopen("version.h", "r");
fd = fopen("version.h", "r");
if (fd) {
parse_version(fd);
fclose(fd);
} else
build = 1;
if (fd) {
parse_version(fd);
fclose(fd);
} else
build = 1;
fd = fopen("version.h", "w");
write_version(fd);
fclose(fd);
fd = fopen("version.h", "w");
write_version(fd);
fclose(fd);
if (version_extra)
free(version_extra);
@@ -73,160 +73,160 @@ int main()
void load_ctrl(FILE * fd)
{
char buf[512];
while (fgets(buf, 511, fd)) {
char *var;
char buf[512];
while (fgets(buf, 511, fd)) {
char *var;
strip(buf);
strip(buf);
var = strtok(buf, "=");
if (!var)
continue;
if (!strcmp(var, "VERSION_MAJOR"))
version_major = get_value(strtok(NULL, ""));
else if (!strcmp(var, "VERSION_MINOR"))
version_minor = get_value(strtok(NULL, ""));
else if (!strcmp(var, "VERSION_PATCH"))
version_patch = get_value(strtok(NULL, ""));
else if (!strcmp(var, "VERSION_BUILD"))
version_build = get_value(strtok(NULL, ""));
else if (!strcmp(var, "VERSION_EXTRA"))
version_extra = get_value_str(strtok(NULL, ""));
var = strtok(buf, "=");
if (!var)
continue;
if (!strcmp(var, "VERSION_MAJOR"))
version_major = get_value(strtok(NULL, ""));
else if (!strcmp(var, "VERSION_MINOR"))
version_minor = get_value(strtok(NULL, ""));
else if (!strcmp(var, "VERSION_PATCH"))
version_patch = get_value(strtok(NULL, ""));
else if (!strcmp(var, "VERSION_BUILD"))
version_build = get_value(strtok(NULL, ""));
else if (!strcmp(var, "VERSION_EXTRA"))
version_extra = get_value_str(strtok(NULL, ""));
}
}
}
char *strip(char *str)
{
char *c;
if ((c = strchr(str, '\n')))
*c = 0;
if ((c = strchr(str, '\r')))
*c = 0;
return str;
char *c;
if ((c = strchr(str, '\n')))
*c = 0;
if ((c = strchr(str, '\r')))
*c = 0;
return str;
}
long get_value(char *string)
{
// XXX : if the fields in version.log are empty strtok returns a double quote, dont try to atol it then
if (*string != '"')
return atol(get_value_str(string));
return atol(get_value_str(string));
else
return 0;
}
char *get_value_str(char *string)
{
int len;
int len;
if (*string == '"')
string++;
if (*string == '"')
string++;
len = strlen(string);
len = strlen(string);
if (string[len - 1] == '"')
string[len - 1] = 0;
if (!*string)
return NULL;
return strdup(string);
if (string[len - 1] == '"')
string[len - 1] = 0;
if (!*string)
return NULL;
return strdup(string);
}
void parse_version(FILE * fd)
{
char buf[1024];
char buf[1024];
while (fgets(buf, 1023, fd)) {
char *para1;
while (fgets(buf, 1023, fd)) {
char *para1;
strip(buf);
para1 = strtok(buf, " \t");
strip(buf);
para1 = strtok(buf, " \t");
if (!para1)
continue;
if (!para1)
continue;
if (!strcmp(para1, "#define")) {
char *para2 = strtok(NULL, " \t");
if (!strcmp(para1, "#define")) {
char *para2 = strtok(NULL, " \t");
if (!para2)
continue;
if (!para2)
continue;
if (!strcmp(para2, "BUILD")) {
char *value = strtok(NULL, "");
build = get_value(value);
build++;
return;
}
}
}
build = 1;
if (!strcmp(para2, "BUILD")) {
char *value = strtok(NULL, "");
build = get_value(value);
build++;
return;
}
}
}
build = 1;
}
void write_version(FILE * fd)
{
FILE *fdin = fopen("include\\version.sh", "r");
char buf[1024];
short until_eof = 0;
FILE *fdin = fopen("include\\version.sh", "r");
char buf[1024];
short until_eof = 0;
while (fgets(buf, 1023, fdin)) {
strip(buf);
while (fgets(buf, 1023, fdin)) {
strip(buf);
if (until_eof)
{
if (!strcmp(buf, "EOF"))
break;
else
parse_line(fd, buf);
}
if (until_eof)
{
if (!strcmp(buf, "EOF"))
break;
else
parse_line(fd, buf);
}
if (!strcmp(buf, "cat >version.h <<EOF"))
until_eof = 1;
}
if (!strcmp(buf, "cat >version.h <<EOF"))
until_eof = 1;
}
}
void parse_line(FILE * fd, char *line)
{
char *c;
for (c = line; *c; c++) {
/* It's a variable, find out which */
if (*c == '$') {
char *var, *varbegin;
char *c;
for (c = line; *c; c++) {
/* It's a variable, find out which */
if (*c == '$') {
char *var, *varbegin;
if (*(c + 1))
c++;
else
continue;
for (var = varbegin = c; var; var++) {
if (!isalnum(*var) && *var != '_')
break;
}
if (var != varbegin) {
char tmp = *var;
if (*(c + 1))
c++;
else
continue;
for (var = varbegin = c; var; var++) {
if (!isalnum(*var) && *var != '_')
break;
}
if (var != varbegin) {
char tmp = *var;
*var = 0;
if (!strcmp(varbegin, "VERSION_MAJOR"))
fprintf(fd, "%ld", version_major);
else if (!strcmp(varbegin, "VERSION_MINOR"))
fprintf(fd, "%ld", version_minor);
else if (!strcmp(varbegin, "VERSION_PATCH"))
fprintf(fd, "%ld", version_patch);
else if (!strcmp(varbegin, "VERSION_EXTRA")) {
if (version_extra)
fprintf(fd, "%s", version_extra);
} else if (!strcmp(varbegin, "VERSION_BUILD"))
fprintf(fd, "%ld", version_build);
else if (!strcmp(varbegin, "BUILD"))
fprintf(fd, "%ld", build);
else if (!strcmp(varbegin, "VERSION"))
fprintf(fd, "%s", version);
else if (!strcmp(varbegin, "VERSIONDOTTED"))
fprintf(fd, "%s", version_dotted);
fputc(tmp, fd);
}
c = var;
} else
fputc(*c, fd);
}
*var = 0;
if (!strcmp(varbegin, "VERSION_MAJOR"))
fprintf(fd, "%ld", version_major);
else if (!strcmp(varbegin, "VERSION_MINOR"))
fprintf(fd, "%ld", version_minor);
else if (!strcmp(varbegin, "VERSION_PATCH"))
fprintf(fd, "%ld", version_patch);
else if (!strcmp(varbegin, "VERSION_EXTRA")) {
if (version_extra)
fprintf(fd, "%s", version_extra);
} else if (!strcmp(varbegin, "VERSION_BUILD"))
fprintf(fd, "%ld", version_build);
else if (!strcmp(varbegin, "BUILD"))
fprintf(fd, "%ld", build);
else if (!strcmp(varbegin, "VERSION"))
fprintf(fd, "%s", version);
else if (!strcmp(varbegin, "VERSIONDOTTED"))
fprintf(fd, "%s", version_dotted);
fputc(tmp, fd);
}
c = var;
} else
fputc(*c, fd);
}
/* We only need \n here - we didn't open the file as binary -GD */
fprintf(fd, "\n");
fprintf(fd, "\n");
}
+100 -100
View File
@@ -66,36 +66,36 @@ char *anopeStrDup(const char *src);
int read_index_file()
{
FILE *f;
char buf[256];
int i;
FILE *f;
char buf[256];
int i;
if (!(f = fopen("index", "rb"))) {
if (!(f = fopen("index", "rb"))) {
perror("fopen(index)");
return -1;
}
while (fgets(buf, sizeof(buf), f))
}
while (fgets(buf, sizeof(buf), f))
numstrings++;
if (!(stringnames = (char **)calloc(sizeof(char *), numstrings))) {
if (!(stringnames = (char **)calloc(sizeof(char *), numstrings))) {
perror("calloc(stringnames)");
return -1;
}
if (!(strings = (char **)calloc(sizeof(char *), numstrings))) {
}
if (!(strings = (char **)calloc(sizeof(char *), numstrings))) {
perror("calloc(strings)");
return -1;
}
fseek(f, 0, SEEK_SET);
i = 0;
while (fgets(buf, sizeof(buf), f)) {
if (buf[strlen(buf)-1] == '\n')
buf[strlen(buf)-1] = '\0';
if (!(stringnames[i++] = anopeStrDup(buf))) {
perror("strdup()");
return -1;
}
}
fclose(f);
return 0;
fseek(f, 0, SEEK_SET);
i = 0;
while (fgets(buf, sizeof(buf), f)) {
if (buf[strlen(buf)-1] == '\n')
buf[strlen(buf)-1] = '\0';
if (!(stringnames[i++] = anopeStrDup(buf))) {
perror("strdup()");
return -1;
}
}
fclose(f);
return 0;
}
/*************************************************************************/
@@ -104,13 +104,13 @@ int read_index_file()
int stringnum(const char *name)
{
int i;
int i;
for (i = 0; i < numstrings; i++) {
for (i = 0; i < numstrings; i++) {
if (strcmp(stringnames[i], name) == 0)
return i;
}
return -1;
return i;
}
return -1;
}
/*************************************************************************/
@@ -120,18 +120,18 @@ int stringnum(const char *name)
char *ano_getline(FILE *f)
{
static char buf[1024];
char *s;
static char buf[1024];
char *s;
do {
do {
if (!(fgets(buf, sizeof(buf), f)))
return NULL;
return NULL;
linenum++;
} while (*buf == '#' || *buf == '\n');
s = buf + strlen(buf)-1;
if (*s == '\n')
} while (*buf == '#' || *buf == '\n');
s = buf + strlen(buf)-1;
if (*s == '\n')
*s = '\0';
return buf;
return buf;
}
/*************************************************************************/
@@ -140,136 +140,136 @@ char *ano_getline(FILE *f)
int fput32(int val, FILE *f)
{
if (fputc(val>>24, f) < 0 ||
fputc(val>>16, f) < 0 ||
fputc(val>> 8, f) < 0 ||
fputc(val , f) < 0
) {
if (fputc(val>>24, f) < 0 ||
fputc(val>>16, f) < 0 ||
fputc(val>> 8, f) < 0 ||
fputc(val , f) < 0
) {
return -1;
} else {
} else {
return 0;
}
}
}
/*************************************************************************/
char *anopeStrDup(const char *src) {
char *ret=NULL;
if(src) {
if( (ret = (char *)malloc(strlen(src)+1)) ) {;
strcpy(ret,src);
}
}
return ret;
char *ret=NULL;
if(src) {
if( (ret = (char *)malloc(strlen(src)+1)) ) {;
strcpy(ret,src);
}
}
return ret;
}
/*************************************************************************/
int main(int ac, char **av)
{
char *filename = NULL, *s;
char langname[254], outfile[256];
FILE *in, *out;
int warn = 0;
int retval = 0;
int curstring = -2, i;
char *line;
int pos;
int maxerr = 50; /* Max errors before we bail out */
char *filename = NULL, *s;
char langname[254], outfile[256];
FILE *in, *out;
int warn = 0;
int retval = 0;
int curstring = -2, i;
char *line;
int pos;
int maxerr = 50; /* Max errors before we bail out */
if (ac >= 2 && strcmp(av[1], "-w") == 0) {
if (ac >= 2 && strcmp(av[1], "-w") == 0) {
warn = 1;
av[1] = av[2];
ac--;
}
if (ac != 2) {
}
if (ac != 2) {
fprintf(stderr, "Usage: %s [-w] <lang-file>\n", av[0]);
return 1;
}
filename = av[1];
s = strrchr(filename, '.');
if (!s)
}
filename = av[1];
s = strrchr(filename, '.');
if (!s)
s = filename + strlen(filename);
if (s-filename > (int)sizeof(langname)-3)
if (s-filename > (int)sizeof(langname)-3)
s = filename + sizeof(langname)-1;
strncpy(langname, filename, s-filename);
langname[s-filename] = '\0';
snprintf(outfile, sizeof(outfile), "%s", langname);
strncpy(langname, filename, s-filename);
langname[s-filename] = '\0';
snprintf(outfile, sizeof(outfile), "%s", langname);
if (read_index_file() < 0)
if (read_index_file() < 0)
return 1;
if (!(in = fopen(filename, "rb"))) {
if (!(in = fopen(filename, "rb"))) {
perror(filename);
return 1;
}
if (!(out = fopen(outfile, "wb"))) {
}
if (!(out = fopen(outfile, "wb"))) {
perror(outfile);
return 1;
}
}
while (maxerr > 0 && (line = ano_getline(in)) != NULL) {
while (maxerr > 0 && (line = ano_getline(in)) != NULL) {
if (*line == '\t') {
if (curstring == -2) {
if (curstring == -2) {
fprintf(stderr, "%s:%d: Junk at beginning of file\n",
filename, linenum);
retval = 1;
} else if (curstring >= 0) {
} else if (curstring >= 0) {
line++;
i = strings[curstring] ? strlen(strings[curstring]) : 0;
if (!(strings[curstring] =
(char *)realloc(strings[curstring], i+strlen(line)+2))) {
fprintf(stderr, "%s:%d: Out of memory!\n",filename,linenum);
return 2;
fprintf(stderr, "%s:%d: Out of memory!\n",filename,linenum);
return 2;
}
sprintf(strings[curstring]+i, "%s\n", line);
}
}
} else {
if ((curstring = stringnum(line)) < 0) {
if ((curstring = stringnum(line)) < 0) {
fprintf(stderr, "%s:%d: Unknown string name `%s'\n",
filename, linenum, line);
retval = 1;
maxerr--;
} else if (strings[curstring]) {
} else if (strings[curstring]) {
fprintf(stderr, "%s:%d: Duplicate occurrence of string `%s'\n",
filename, linenum, line);
retval = 1;
maxerr--;
} else {
} else {
if (!(strings[curstring] = (char *)malloc(1))) {
fprintf(stderr, "%s:%d: Out of memory!\n",filename,linenum);
return 2;
fprintf(stderr, "%s:%d: Out of memory!\n",filename,linenum);
return 2;
}
*strings[curstring] = '\0';
}
}
if (maxerr == 0)
if (maxerr == 0)
fprintf(stderr, "%s:%d: Too many errors!\n", filename, linenum);
}
}
}
fput32(numstrings, out);
pos = numstrings * 8 + 4;
for (i = 0; i < numstrings; i++) {
fput32(numstrings, out);
pos = numstrings * 8 + 4;
for (i = 0; i < numstrings; i++) {
int len = strings[i] && *strings[i] ? strlen(strings[i])-1 : 0;
fput32(pos, out);
fput32(len, out);
pos += len;
}
for (i = 0; i < numstrings; i++) {
}
for (i = 0; i < numstrings; i++) {
if (strings[i]) {
if (*strings[i])
if (*strings[i])
strings[i][strlen(strings[i])-1] = '\0'; /* kill last \n */
if (*strings[i])
if (*strings[i])
fputs(strings[i], out);
} else if (warn) {
fprintf(stderr, "%s: String `%s' missing\n", filename,
fprintf(stderr, "%s: String `%s' missing\n", filename,
stringnames[i]);
}
}
}
fclose(in);
fclose(out);
return retval;
fclose(in);
fclose(out);
return retval;
}
/*************************************************************************/
+2 -2
View File
@@ -62,9 +62,9 @@ int main(int argc, char *argv[])
fprintf(stderr, "Generating language.h... ");
while (fgets(buf, 1023, fd)) {
while (fgets(buf, 1023, fd)) {
fprintf(fdout, "#define %-32s %d\n", strip(buf), i++);
}
}
fprintf(fdout, "#define NUM_STRINGS %d\n", i);
fprintf(stderr, "%d strings\n", i);
+144 -144
View File
@@ -24,20 +24,20 @@
*/
void bad_password(User * u)
{
time_t now = time(NULL);
time_t now = time(NULL);
if (!u || !BadPassLimit) {
return;
}
if (!u || !BadPassLimit) {
return;
}
if (BadPassTimeout > 0 && u->invalid_pw_time > 0
&& u->invalid_pw_time < now - BadPassTimeout)
u->invalid_pw_count = 0;
u->invalid_pw_count++;
u->invalid_pw_time = now;
if (u->invalid_pw_count >= BadPassLimit) {
kill_user(NULL, u->nick, "Too many invalid passwords");
}
if (BadPassTimeout > 0 && u->invalid_pw_time > 0
&& u->invalid_pw_time < now - BadPassTimeout)
u->invalid_pw_count = 0;
u->invalid_pw_count++;
u->invalid_pw_time = now;
if (u->invalid_pw_count >= BadPassLimit) {
kill_user(NULL, u->nick, "Too many invalid passwords");
}
}
/*************************************************************************/
@@ -51,25 +51,25 @@ void bad_password(User * u)
*/
void kill_user(const char *source, const char *user, const char *reason)
{
char buf[BUFSIZE];
char buf[BUFSIZE];
if (!user || !*user) {
return;
}
if (!source || !*source) {
source = ServerName;
}
if (!reason) {
reason = "";
}
if (!user || !*user) {
return;
}
if (!source || !*source) {
source = ServerName;
}
if (!reason) {
reason = "";
}
snprintf(buf, sizeof(buf), "%s (%s)", source, reason);
snprintf(buf, sizeof(buf), "%s (%s)", source, reason);
ircdproto->SendSVSKill(source, user, buf);
ircdproto->SendSVSKill(source, user, buf);
if (!ircd->quitonkill && finduser(user)) {
do_kill(user, buf);
}
if (!ircd->quitonkill && finduser(user)) {
do_kill(user, buf);
}
}
/*************************************************************************/
@@ -82,42 +82,42 @@ void kill_user(const char *source, const char *user, const char *reason)
*/
void sqline(char *mask, char *reason)
{
int i;
Channel *c, *next;
const char *av[3];
struct c_userlist *cu, *cunext;
int i;
Channel *c, *next;
const char *av[3];
struct c_userlist *cu, *cunext;
if (ircd->chansqline) {
if (*mask == '#') {
ircdproto->SendSQLine(mask, reason);
if (ircd->chansqline) {
if (*mask == '#') {
ircdproto->SendSQLine(mask, reason);
for (i = 0; i < 1024; i++) {
for (c = chanlist[i]; c; c = next) {
next = c->next;
for (i = 0; i < 1024; i++) {
for (c = chanlist[i]; c; c = next) {
next = c->next;
if (!match_wild_nocase(mask, c->name)) {
continue;
}
for (cu = c->users; cu; cu = cunext) {
cunext = cu->next;
if (is_oper(cu->user)) {
continue;
}
av[0] = c->name;
av[1] = cu->user->nick;
av[2] = reason;
ircdproto->SendKick(findbot(s_OperServ), av[0], av[1],
"Q-Lined: %s", av[2]);
do_kick(s_ChanServ, 3, av);
}
}
}
} else {
ircdproto->SendSQLine(mask, reason);
}
} else {
ircdproto->SendSQLine(mask, reason);
}
if (!match_wild_nocase(mask, c->name)) {
continue;
}
for (cu = c->users; cu; cu = cunext) {
cunext = cu->next;
if (is_oper(cu->user)) {
continue;
}
av[0] = c->name;
av[1] = cu->user->nick;
av[2] = reason;
ircdproto->SendKick(findbot(s_OperServ), av[0], av[1],
"Q-Lined: %s", av[2]);
do_kick(s_ChanServ, 3, av);
}
}
}
} else {
ircdproto->SendSQLine(mask, reason);
}
} else {
ircdproto->SendSQLine(mask, reason);
}
}
/*************************************************************************/
@@ -130,72 +130,72 @@ void sqline(char *mask, char *reason)
*/
void common_unban(ChannelInfo * ci, char *nick)
{
const char *av[4];
char *host = NULL;
char buf[BUFSIZE];
int ac;
uint32 ip = 0;
User *u;
Entry *ban, *next;
const char *av[4];
char *host = NULL;
char buf[BUFSIZE];
int ac;
uint32 ip = 0;
User *u;
Entry *ban, *next;
if (!ci || !ci->c || !nick) {
return;
}
if (!ci || !ci->c || !nick) {
return;
}
if (!(u = finduser(nick))) {
return;
}
if (!(u = finduser(nick))) {
return;
}
if (!ci->c->bans || (ci->c->bans->count == 0))
return;
if (!ci->c->bans || (ci->c->bans->count == 0))
return;
if (u->hostip == NULL) {
host = host_resolve(u->host);
/* we store the just resolved hostname so we don't
* need to do this again */
if (host) {
u->hostip = sstrdup(host);
}
} else {
host = sstrdup(u->hostip);
}
/* Convert the host to an IP.. */
if (host)
ip = str_is_ip(host);
if (u->hostip == NULL) {
host = host_resolve(u->host);
/* we store the just resolved hostname so we don't
* need to do this again */
if (host) {
u->hostip = sstrdup(host);
}
} else {
host = sstrdup(u->hostip);
}
/* Convert the host to an IP.. */
if (host)
ip = str_is_ip(host);
if (ircd->svsmode_unban) {
ircdproto->SendBanDel(ci->name, nick);
} else {
if (ircdcap->tsmode) {
snprintf(buf, BUFSIZE - 1, "%ld", (long int) time(NULL));
av[0] = ci->name;
av[1] = buf;
av[2] = "-b";
ac = 4;
} else {
av[0] = ci->name;
av[1] = "-b";
ac = 3;
}
if (ircd->svsmode_unban) {
ircdproto->SendBanDel(ci->name, nick);
} else {
if (ircdcap->tsmode) {
snprintf(buf, BUFSIZE - 1, "%ld", (long int) time(NULL));
av[0] = ci->name;
av[1] = buf;
av[2] = "-b";
ac = 4;
} else {
av[0] = ci->name;
av[1] = "-b";
ac = 3;
}
for (ban = ci->c->bans->entries; ban; ban = next) {
next = ban->next;
if (entry_match(ban, u->nick, u->username, u->host, ip) ||
entry_match(ban, u->nick, u->username, u->vhost, ip)) {
ircdproto->SendMode(whosends(ci), ci->name, "-b %s", ban->mask);
if (ircdcap->tsmode)
av[3] = ban->mask;
else
av[2] = ban->mask;
for (ban = ci->c->bans->entries; ban; ban = next) {
next = ban->next;
if (entry_match(ban, u->nick, u->username, u->host, ip) ||
entry_match(ban, u->nick, u->username, u->vhost, ip)) {
ircdproto->SendMode(whosends(ci), ci->name, "-b %s", ban->mask);
if (ircdcap->tsmode)
av[3] = ban->mask;
else
av[2] = ban->mask;
do_cmode(whosends(ci)->nick, ac, av);
}
}
}
/* host_resolve() sstrdup us this info so we gotta free it */
if (host) {
free(host);
}
do_cmode(whosends(ci)->nick, ac, av);
}
}
}
/* host_resolve() sstrdup us this info so we gotta free it */
if (host) {
free(host);
}
}
/*************************************************************************/
@@ -209,17 +209,17 @@ void common_unban(ChannelInfo * ci, char *nick)
*/
void common_svsmode(User * u, const char *modes, const char *arg)
{
int ac = 1;
const char *av[2];
int ac = 1;
const char *av[2];
av[0] = modes;
if (arg) {
av[1] = arg;
ac++;
}
av[0] = modes;
if (arg) {
av[1] = arg;
ac++;
}
ircdproto->SendSVSMode(u, ac, av);
ircdproto->ProcessUsermodes(u, ac, av);
ircdproto->SendSVSMode(u, ac, av);
ircdproto->ProcessUsermodes(u, ac, av);
}
/*************************************************************************/
@@ -232,15 +232,15 @@ void common_svsmode(User * u, const char *modes, const char *arg)
*/
char *common_get_vhost(User * u)
{
if (!u)
return NULL;
if (!u)
return NULL;
if (ircd->vhostmode && (u->mode & ircd->vhostmode))
return u->vhost;
else if (ircd->vhost && u->vhost)
return u->vhost;
else
return u->host;
if (ircd->vhostmode && (u->mode & ircd->vhostmode))
return u->vhost;
else if (ircd->vhost && u->vhost)
return u->vhost;
else
return u->host;
}
/*************************************************************************/
@@ -253,13 +253,13 @@ char *common_get_vhost(User * u)
*/
char *common_get_vident(User * u)
{
if (!u)
return NULL;
if (!u)
return NULL;
if (ircd->vhostmode && (u->mode & ircd->vhostmode))
return u->vident;
else if (ircd->vident && u->vident)
return u->vident;
else
return u->username;
if (ircd->vhostmode && (u->mode & ircd->vhostmode))
return u->vident;
else if (ircd->vident && u->vident)
return u->vident;
else
return u->username;
}
+269 -269
View File
@@ -22,22 +22,22 @@ static long base64_to_int(char *);
const char* base64enc(long i)
{
if (i < 0)
return ("0");
return int_to_base64(i);
if (i < 0)
return ("0");
return int_to_base64(i);
}
long base64dec(char* b64)
{
if (b64)
return base64_to_int(b64);
else
return 0;
if (b64)
return base64_to_int(b64);
else
return 0;
}
static const char Base64[] =
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
static const char Pad64 = '=';
/* (From RFC1521 and draft-ietf-dnssec-secext-03.txt)
@@ -59,26 +59,26 @@ static const char Pad64 = '=';
characters. The character referenced by the index is placed in the
output string.
Table 1: The Base64 Alphabet
Table 1: The Base64 Alphabet
Value Encoding Value Encoding Value Encoding Value Encoding
0 A 17 R 34 i 51 z
1 B 18 S 35 j 52 0
2 C 19 T 36 k 53 1
3 D 20 U 37 l 54 2
4 E 21 V 38 m 55 3
5 F 22 W 39 n 56 4
6 G 23 X 40 o 57 5
7 H 24 Y 41 p 58 6
8 I 25 Z 42 q 59 7
9 J 26 a 43 r 60 8
10 K 27 b 44 s 61 9
11 L 28 c 45 t 62 +
12 M 29 d 46 u 63 /
13 N 30 e 47 v
14 O 31 f 48 w (pad) =
15 P 32 g 49 x
16 Q 33 h 50 y
Value Encoding Value Encoding Value Encoding Value Encoding
0 A 17 R 34 i 51 z
1 B 18 S 35 j 52 0
2 C 19 T 36 k 53 1
3 D 20 U 37 l 54 2
4 E 21 V 38 m 55 3
5 F 22 W 39 n 56 4
6 G 23 X 40 o 57 5
7 H 24 Y 41 p 58 6
8 I 25 Z 42 q 59 7
9 J 26 a 43 r 60 8
10 K 27 b 44 s 61 9
11 L 28 c 45 t 62 +
12 M 29 d 46 u 63 /
13 N 30 e 47 v
14 O 31 f 48 w (pad) =
15 P 32 g 49 x
16 Q 33 h 50 y
Special processing is performed if fewer than 24 bits are available
at the end of the data being encoded. A full encoding quantum is
@@ -88,72 +88,72 @@ static const char Pad64 = '=';
end of the data is performed using the '=' character.
Since all base64 input is an integral number of octets, only the
-------------------------------------------------
-------------------------------------------------
following cases can arise:
(1) the final quantum of encoding input is an integral
multiple of 24 bits; here, the final unit of encoded
(1) the final quantum of encoding input is an integral
multiple of 24 bits; here, the final unit of encoded
output will be an integral multiple of 4 characters
with no "=" padding,
(2) the final quantum of encoding input is exactly 8 bits;
here, the final unit of encoded output will be two
(2) the final quantum of encoding input is exactly 8 bits;
here, the final unit of encoded output will be two
characters followed by two "=" padding characters, or
(3) the final quantum of encoding input is exactly 16 bits;
here, the final unit of encoded output will be three
(3) the final quantum of encoding input is exactly 16 bits;
here, the final unit of encoded output will be three
characters followed by one "=" padding character.
*/
int b64_encode(char *src, size_t srclength, char *target, size_t targsize)
{
size_t datalength = 0;
unsigned char input[3];
unsigned char output[4];
size_t i;
size_t datalength = 0;
unsigned char input[3];
unsigned char output[4];
size_t i;
while (2 < srclength) {
input[0] = *src++;
input[1] = *src++;
input[2] = *src++;
srclength -= 3;
while (2 < srclength) {
input[0] = *src++;
input[1] = *src++;
input[2] = *src++;
srclength -= 3;
output[0] = input[0] >> 2;
output[1] = ((input[0] & 0x03) << 4) + (input[1] >> 4);
output[2] = ((input[1] & 0x0f) << 2) + (input[2] >> 6);
output[3] = input[2] & 0x3f;
output[0] = input[0] >> 2;
output[1] = ((input[0] & 0x03) << 4) + (input[1] >> 4);
output[2] = ((input[1] & 0x0f) << 2) + (input[2] >> 6);
output[3] = input[2] & 0x3f;
if (datalength + 4 > targsize)
return (-1);
target[datalength++] = Base64[output[0]];
target[datalength++] = Base64[output[1]];
target[datalength++] = Base64[output[2]];
target[datalength++] = Base64[output[3]];
}
if (datalength + 4 > targsize)
return (-1);
target[datalength++] = Base64[output[0]];
target[datalength++] = Base64[output[1]];
target[datalength++] = Base64[output[2]];
target[datalength++] = Base64[output[3]];
}
/* Now we worry about padding. */
if (0 != srclength) {
/* Get what's left. */
input[0] = input[1] = input[2] = '\0';
for (i = 0; i < srclength; i++)
input[i] = *src++;
/* Now we worry about padding. */
if (0 != srclength) {
/* Get what's left. */
input[0] = input[1] = input[2] = '\0';
for (i = 0; i < srclength; i++)
input[i] = *src++;
output[0] = input[0] >> 2;
output[1] = ((input[0] & 0x03) << 4) + (input[1] >> 4);
output[2] = ((input[1] & 0x0f) << 2) + (input[2] >> 6);
output[0] = input[0] >> 2;
output[1] = ((input[0] & 0x03) << 4) + (input[1] >> 4);
output[2] = ((input[1] & 0x0f) << 2) + (input[2] >> 6);
if (datalength + 4 > targsize)
return (-1);
target[datalength++] = Base64[output[0]];
target[datalength++] = Base64[output[1]];
if (srclength == 1)
target[datalength++] = Pad64;
else
target[datalength++] = Base64[output[2]];
target[datalength++] = Pad64;
}
if (datalength >= targsize)
return (-1);
target[datalength] = '\0'; /* Returned value doesn't count \0. */
return (datalength);
if (datalength + 4 > targsize)
return (-1);
target[datalength++] = Base64[output[0]];
target[datalength++] = Base64[output[1]];
if (srclength == 1)
target[datalength++] = Pad64;
else
target[datalength++] = Base64[output[2]];
target[datalength++] = Pad64;
}
if (datalength >= targsize)
return (-1);
target[datalength] = '\0'; /* Returned value doesn't count \0. */
return (datalength);
}
/* skips all whitespace anywhere.
@@ -164,247 +164,247 @@ int b64_encode(char *src, size_t srclength, char *target, size_t targsize)
int b64_decode(const char *src, char *target, size_t targsize)
{
int tarindex, state, ch;
char *pos;
int tarindex, state, ch;
char *pos;
state = 0;
tarindex = 0;
state = 0;
tarindex = 0;
while ((ch = *src++) != '\0') {
if (isspace(ch)) /* Skip whitespace anywhere. */
continue;
while ((ch = *src++) != '\0') {
if (isspace(ch)) /* Skip whitespace anywhere. */
continue;
if (ch == Pad64)
break;
if (ch == Pad64)
break;
pos = strchr(Base64, ch);
if (pos == 0) /* A non-base64 character. */
return (-1);
pos = strchr(Base64, ch);
if (pos == 0) /* A non-base64 character. */
return (-1);
switch (state) {
case 0:
if (target) {
if ((size_t) tarindex >= targsize)
return (-1);
target[tarindex] = (pos - Base64) << 2;
}
state = 1;
break;
case 1:
if (target) {
if ((size_t) tarindex + 1 >= targsize)
return (-1);
target[tarindex] |= (pos - Base64) >> 4;
target[tarindex + 1] = ((pos - Base64) & 0x0f)
<< 4;
}
tarindex++;
state = 2;
break;
case 2:
if (target) {
if ((size_t) tarindex + 1 >= targsize)
return (-1);
target[tarindex] |= (pos - Base64) >> 2;
target[tarindex + 1] = ((pos - Base64) & 0x03)
<< 6;
}
tarindex++;
state = 3;
break;
case 3:
if (target) {
if ((size_t) tarindex >= targsize)
return (-1);
target[tarindex] |= (pos - Base64);
}
tarindex++;
state = 0;
break;
default:
abort();
}
}
switch (state) {
case 0:
if (target) {
if ((size_t) tarindex >= targsize)
return (-1);
target[tarindex] = (pos - Base64) << 2;
}
state = 1;
break;
case 1:
if (target) {
if ((size_t) tarindex + 1 >= targsize)
return (-1);
target[tarindex] |= (pos - Base64) >> 4;
target[tarindex + 1] = ((pos - Base64) & 0x0f)
<< 4;
}
tarindex++;
state = 2;
break;
case 2:
if (target) {
if ((size_t) tarindex + 1 >= targsize)
return (-1);
target[tarindex] |= (pos - Base64) >> 2;
target[tarindex + 1] = ((pos - Base64) & 0x03)
<< 6;
}
tarindex++;
state = 3;
break;
case 3:
if (target) {
if ((size_t) tarindex >= targsize)
return (-1);
target[tarindex] |= (pos - Base64);
}
tarindex++;
state = 0;
break;
default:
abort();
}
}
/*
* We are done decoding Base-64 chars. Let's see if we ended
* on a byte boundary, and/or with erroneous trailing characters.
*/
/*
* We are done decoding Base-64 chars. Let's see if we ended
* on a byte boundary, and/or with erroneous trailing characters.
*/
if (ch == Pad64) { /* We got a pad char. */
ch = *src++; /* Skip it, get next. */
switch (state) {
case 0: /* Invalid = in first position */
case 1: /* Invalid = in second position */
return (-1);
if (ch == Pad64) { /* We got a pad char. */
ch = *src++; /* Skip it, get next. */
switch (state) {
case 0: /* Invalid = in first position */
case 1: /* Invalid = in second position */
return (-1);
case 2: /* Valid, means one byte of info */
/* Skip any number of spaces. */
for ((void) NULL; ch != '\0'; ch = *src++)
if (!isspace(ch))
break;
/* Make sure there is another trailing = sign. */
if (ch != Pad64)
return (-1);
ch = *src++; /* Skip the = */
/* Fall through to "single trailing =" case. */
/* FALLTHROUGH */
case 2: /* Valid, means one byte of info */
/* Skip any number of spaces. */
for ((void) NULL; ch != '\0'; ch = *src++)
if (!isspace(ch))
break;
/* Make sure there is another trailing = sign. */
if (ch != Pad64)
return (-1);
ch = *src++; /* Skip the = */
/* Fall through to "single trailing =" case. */
/* FALLTHROUGH */
case 3: /* Valid, means two bytes of info */
/*
* We know this char is an =. Is there anything but
* whitespace after it?
*/
for ((void) NULL; ch != '\0'; ch = *src++)
if (!isspace(ch))
return (-1);
case 3: /* Valid, means two bytes of info */
/*
* We know this char is an =. Is there anything but
* whitespace after it?
*/
for ((void) NULL; ch != '\0'; ch = *src++)
if (!isspace(ch))
return (-1);
/*
* Now make sure for cases 2 and 3 that the "extra"
* bits that slopped past the last full byte were
* zeros. If we don't check them, they become a
* subliminal channel.
*/
if (target && target[tarindex] != 0)
return (-1);
}
} else {
/*
* We ended by seeing the end of the string. Make sure we
* have no partial bytes lying around.
*/
if (state != 0)
return (-1);
}
/*
* Now make sure for cases 2 and 3 that the "extra"
* bits that slopped past the last full byte were
* zeros. If we don't check them, they become a
* subliminal channel.
*/
if (target && target[tarindex] != 0)
return (-1);
}
} else {
/*
* We ended by seeing the end of the string. Make sure we
* have no partial bytes lying around.
*/
if (state != 0)
return (-1);
}
return (tarindex);
return (tarindex);
}
const char* encode_ip(unsigned char *ip)
{
static char buf[25];
unsigned char *cp;
struct in_addr ia; /* For IPv4 */
char *s_ip; /* Signed ip string */
static char buf[25];
unsigned char *cp;
struct in_addr ia; /* For IPv4 */
char *s_ip; /* Signed ip string */
if (!ip)
return "*";
if (!ip)
return "*";
if (strchr((char *) ip, ':')) {
return NULL;
} else {
s_ip = str_signed(ip);
ia.s_addr = inet_addr(s_ip);
cp = (unsigned char *) ia.s_addr;
b64_encode((char *) &cp, sizeof(struct in_addr), buf, 25);
}
return buf;
if (strchr((char *) ip, ':')) {
return NULL;
} else {
s_ip = str_signed(ip);
ia.s_addr = inet_addr(s_ip);
cp = (unsigned char *) ia.s_addr;
b64_encode((char *) &cp, sizeof(struct in_addr), buf, 25);
}
return buf;
}
int decode_ip(const char *buf)
{
int len = strlen(buf);
char targ[25];
struct in_addr ia;
int len = strlen(buf);
char targ[25];
struct in_addr ia;
b64_decode(buf, targ, 25);
ia = *(struct in_addr *) targ;
if (len == 24) { /* IPv6 */
return 0;
} else if (len == 8) /* IPv4 */
return ia.s_addr;
else /* Error?? */
return 0;
b64_decode(buf, targ, 25);
ia = *(struct in_addr *) targ;
if (len == 24) { /* IPv6 */
return 0;
} else if (len == 8) /* IPv4 */
return ia.s_addr;
else /* Error?? */
return 0;
}
/* ':' and '#' and '&' and '+' and '@' must never be in this table. */
/* these tables must NEVER CHANGE! >) */
char int6_to_base64_map[] = {
'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D',
'E', 'F',
'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T',
'U', 'V',
'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j',
'k', 'l',
'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z',
'{', '}'
'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D',
'E', 'F',
'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T',
'U', 'V',
'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j',
'k', 'l',
'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z',
'{', '}'
};
char base64_to_int6_map[] = {
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, -1, -1, -1, -1, -1, -1,
-1, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, -1, -1, -1, -1, -1,
-1, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50,
51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, -1, 63, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, -1, -1, -1, -1, -1, -1,
-1, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, -1, -1, -1, -1, -1,
-1, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50,
51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, -1, 63, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
};
static char *int_to_base64(long val)
{
/* 32/6 == max 6 bytes for representation,
* +1 for the null, +1 for byte boundaries
*/
static char base64buf[8];
long i = 7;
/* 32/6 == max 6 bytes for representation,
* +1 for the null, +1 for byte boundaries
*/
static char base64buf[8];
long i = 7;
base64buf[i] = '\0';
base64buf[i] = '\0';
/* Temporary debugging code.. remove before 2038 ;p.
* This might happen in case of 64bit longs (opteron/ia64),
* if the value is then too large it can easily lead to
* a buffer underflow and thus to a crash. -- Syzop
*/
if (val > 2147483647L) {
abort();
}
/* Temporary debugging code.. remove before 2038 ;p.
* This might happen in case of 64bit longs (opteron/ia64),
* if the value is then too large it can easily lead to
* a buffer underflow and thus to a crash. -- Syzop
*/
if (val > 2147483647L) {
abort();
}
do {
base64buf[--i] = int6_to_base64_map[val & 63];
}
while (val >>= 6);
do {
base64buf[--i] = int6_to_base64_map[val & 63];
}
while (val >>= 6);
return base64buf + i;
return base64buf + i;
}
static long base64_to_int(char *b64)
{
int v = base64_to_int6_map[(unsigned char) *b64++];
int v = base64_to_int6_map[(unsigned char) *b64++];
if (!b64)
return 0;
if (!b64)
return 0;
while (*b64) {
v <<= 6;
v += base64_to_int6_map[(unsigned char) *b64++];
}
while (*b64) {
v <<= 6;
v += base64_to_int6_map[(unsigned char) *b64++];
}
return v;
return v;
}
long base64dects(const char *ts)
{
char *token;
long value;
char *token;
long value;
if (!ts) {
return 0;
}
token = myStrGetToken(ts, '!', 1);
if (!ts) {
return 0;
}
token = myStrGetToken(ts, '!', 1);
if (!token) {
return strtoul(ts, NULL, 10);
}
value = base64dec(token);
Anope_Free(token);
return value;
if (!token) {
return strtoul(ts, NULL, 10);
}
value = base64dec(token);
Anope_Free(token);
return value;
}
+17 -17
View File
@@ -34,27 +34,27 @@ BotInfo::BotInfo(const char *nnick, const char *nuser, const char *nhost, const
BotInfo::~BotInfo()
{
int i;
ChannelInfo *ci;
int i;
ChannelInfo *ci;
for (i = 0; i < 256; i++)
for (ci = chanlists[i]; ci; ci = ci->next)
if (ci->bi == this)
ci->bi = NULL;
for (i = 0; i < 256; i++)
for (ci = chanlists[i]; ci; ci = ci->next)
if (ci->bi == this)
ci->bi = NULL;
if (this->next)
this->next->prev = this->prev;
if (this->prev)
this->prev->next = this->next;
else
botlists[tolower(*this->nick)] = this->next;
if (this->next)
this->next->prev = this->prev;
if (this->prev)
this->prev->next = this->next;
else
botlists[tolower(*this->nick)] = this->next;
nbots--;
nbots--;
free(this->nick);
free(this->user);
free(this->host);
free(this->real);
free(this->nick);
free(this->user);
free(this->host);
free(this->real);
}
+705 -705
View File
File diff suppressed because it is too large Load Diff
+1586 -1586
View File
File diff suppressed because it is too large Load Diff
+1616 -1616
View File
File diff suppressed because it is too large Load Diff
+128 -128
View File
@@ -27,14 +27,14 @@
*/
Command *lookup_cmd(Command * list, char *cmd)
{
Command *c;
Command *c;
for (c = list; c->name; c++) {
if (stricmp(c->name, cmd) == 0) {
return c;
}
}
return NULL;
for (c = list; c->name; c++) {
if (stricmp(c->name, cmd) == 0) {
return c;
}
}
return NULL;
}
/*************************************************************************/
@@ -49,46 +49,46 @@ Command *lookup_cmd(Command * list, char *cmd)
* @return void
*/
void mod_run_cmd(char *service, User * u, CommandHash * cmdTable[],
const char *cmd)
const char *cmd)
{
Command *c = findCommand(cmdTable, cmd);
int retVal = 0;
Command *current;
Command *c = findCommand(cmdTable, cmd);
int retVal = 0;
Command *current;
if (c && c->routine) {
if ((checkDefCon(DEFCON_OPER_ONLY)
|| checkDefCon(DEFCON_SILENT_OPER_ONLY)) && !is_oper(u)) {
if (!checkDefCon(DEFCON_SILENT_OPER_ONLY)) {
notice_lang(service, u, OPER_DEFCON_DENIED);
}
} else {
mod_current_module_name = c->mod_name;
mod_current_module = NULL;
if ((c->has_priv == NULL) || c->has_priv(u)) {
retVal = c->routine(u);
mod_current_module_name = NULL;
if (retVal == MOD_CONT) {
current = c->next;
while (current && retVal == MOD_CONT) {
mod_current_module_name = current->mod_name;
mod_current_module = NULL;
retVal = current->routine(u);
mod_current_module_name = NULL;
current = current->next;
}
}
} else {
notice_lang(service, u, ACCESS_DENIED);
alog("Access denied for %s with service %s and command %s",
u->nick, service, cmd);
}
mod_current_module_name = NULL;
}
} else {
if ((!checkDefCon(DEFCON_SILENT_OPER_ONLY)) || is_oper(u)) {
notice_lang(service, u, UNKNOWN_COMMAND_HELP, cmd, service);
}
}
if (c && c->routine) {
if ((checkDefCon(DEFCON_OPER_ONLY)
|| checkDefCon(DEFCON_SILENT_OPER_ONLY)) && !is_oper(u)) {
if (!checkDefCon(DEFCON_SILENT_OPER_ONLY)) {
notice_lang(service, u, OPER_DEFCON_DENIED);
}
} else {
mod_current_module_name = c->mod_name;
mod_current_module = NULL;
if ((c->has_priv == NULL) || c->has_priv(u)) {
retVal = c->routine(u);
mod_current_module_name = NULL;
if (retVal == MOD_CONT) {
current = c->next;
while (current && retVal == MOD_CONT) {
mod_current_module_name = current->mod_name;
mod_current_module = NULL;
retVal = current->routine(u);
mod_current_module_name = NULL;
current = current->next;
}
}
} else {
notice_lang(service, u, ACCESS_DENIED);
alog("Access denied for %s with service %s and command %s",
u->nick, service, cmd);
}
mod_current_module_name = NULL;
}
} else {
if ((!checkDefCon(DEFCON_SILENT_OPER_ONLY)) || is_oper(u)) {
notice_lang(service, u, UNKNOWN_COMMAND_HELP, cmd, service);
}
}
}
/*************************************************************************/
@@ -102,18 +102,18 @@ void mod_run_cmd(char *service, User * u, CommandHash * cmdTable[],
*/
void do_help_limited(char *service, User * u, Command * c)
{
if (c->has_priv == is_services_oper)
notice_lang(service, u, HELP_LIMIT_SERV_OPER);
else if (c->has_priv == is_services_admin)
notice_lang(service, u, HELP_LIMIT_SERV_ADMIN);
else if (c->has_priv == is_services_root)
notice_lang(service, u, HELP_LIMIT_SERV_ROOT);
else if (c->has_priv == is_oper)
notice_lang(service, u, HELP_LIMIT_IRC_OPER);
else if (c->has_priv == is_host_setter)
notice_lang(service, u, HELP_LIMIT_HOST_SETTER);
else if (c->has_priv == is_host_remover)
notice_lang(service, u, HELP_LIMIT_HOST_REMOVER);
if (c->has_priv == is_services_oper)
notice_lang(service, u, HELP_LIMIT_SERV_OPER);
else if (c->has_priv == is_services_admin)
notice_lang(service, u, HELP_LIMIT_SERV_ADMIN);
else if (c->has_priv == is_services_root)
notice_lang(service, u, HELP_LIMIT_SERV_ROOT);
else if (c->has_priv == is_oper)
notice_lang(service, u, HELP_LIMIT_IRC_OPER);
else if (c->has_priv == is_host_setter)
notice_lang(service, u, HELP_LIMIT_HOST_SETTER);
else if (c->has_priv == is_host_remover)
notice_lang(service, u, HELP_LIMIT_HOST_REMOVER);
}
/*************************************************************************/
@@ -127,81 +127,81 @@ void do_help_limited(char *service, User * u, Command * c)
* @return void
*/
void mod_help_cmd(char *service, User * u, CommandHash * cmdTable[],
const char *cmd)
const char *cmd)
{
Command *c = findCommand(cmdTable, cmd);
Command *current;
int has_had_help = 0;
int cont = MOD_CONT;
const char *p1 = NULL, *p2 = NULL, *p3 = NULL, *p4 = NULL;
Module *calling_module = mod_current_module;
const char *calling_module_name = mod_current_module_name;
Command *c = findCommand(cmdTable, cmd);
Command *current;
int has_had_help = 0;
int cont = MOD_CONT;
const char *p1 = NULL, *p2 = NULL, *p3 = NULL, *p4 = NULL;
Module *calling_module = mod_current_module;
const char *calling_module_name = mod_current_module_name;
for (current = c; (current) && (cont == MOD_CONT);
current = current->next) {
mod_current_module_name = current->mod_name;
if (mod_current_module_name)
mod_current_module = findModule(mod_current_module_name);
else
mod_current_module = NULL;
for (current = c; (current) && (cont == MOD_CONT);
current = current->next) {
mod_current_module_name = current->mod_name;
if (mod_current_module_name)
mod_current_module = findModule(mod_current_module_name);
else
mod_current_module = NULL;
p1 = current->help_param1;
p2 = current->help_param2;
p3 = current->help_param3;
p4 = current->help_param4;
if (current->helpmsg_all >= 0) {
notice_help(service, u, current->helpmsg_all, p1, p2, p3, p4);
has_had_help = 1;
} else if (current->all_help) {
cont = current->all_help(u);
has_had_help = 1;
}
if (is_services_root(u)) {
if (current->helpmsg_root >= 0) {
notice_help(service, u, current->helpmsg_root, p1, p2, p3,
p4);
has_had_help = 1;
} else if (current->root_help) {
cont = current->root_help(u);
has_had_help = 1;
}
} else if (is_services_admin(u)) {
if (current->helpmsg_admin >= 0) {
notice_help(service, u, current->helpmsg_admin, p1, p2, p3,
p4);
has_had_help = 1;
} else if (current->admin_help) {
cont = current->admin_help(u);
has_had_help = 1;
}
} else if (is_services_oper(u)) {
if (current->helpmsg_oper >= 0) {
notice_help(service, u, current->helpmsg_oper, p1, p2, p3,
p4);
has_had_help = 1;
} else if (current->oper_help) {
cont = current->oper_help(u);
has_had_help = 1;
}
} else {
if (current->helpmsg_reg >= 0) {
notice_help(service, u, current->helpmsg_reg, p1, p2, p3,
p4);
has_had_help = 1;
} else if (current->regular_help) {
cont = current->regular_help(u);
has_had_help = 1;
}
}
}
if (has_had_help == 0) {
notice_lang(service, u, NO_HELP_AVAILABLE, cmd);
} else {
do_help_limited(service, u, c);
}
p1 = current->help_param1;
p2 = current->help_param2;
p3 = current->help_param3;
p4 = current->help_param4;
if (current->helpmsg_all >= 0) {
notice_help(service, u, current->helpmsg_all, p1, p2, p3, p4);
has_had_help = 1;
} else if (current->all_help) {
cont = current->all_help(u);
has_had_help = 1;
}
if (is_services_root(u)) {
if (current->helpmsg_root >= 0) {
notice_help(service, u, current->helpmsg_root, p1, p2, p3,
p4);
has_had_help = 1;
} else if (current->root_help) {
cont = current->root_help(u);
has_had_help = 1;
}
} else if (is_services_admin(u)) {
if (current->helpmsg_admin >= 0) {
notice_help(service, u, current->helpmsg_admin, p1, p2, p3,
p4);
has_had_help = 1;
} else if (current->admin_help) {
cont = current->admin_help(u);
has_had_help = 1;
}
} else if (is_services_oper(u)) {
if (current->helpmsg_oper >= 0) {
notice_help(service, u, current->helpmsg_oper, p1, p2, p3,
p4);
has_had_help = 1;
} else if (current->oper_help) {
cont = current->oper_help(u);
has_had_help = 1;
}
} else {
if (current->helpmsg_reg >= 0) {
notice_help(service, u, current->helpmsg_reg, p1, p2, p3,
p4);
has_had_help = 1;
} else if (current->regular_help) {
cont = current->regular_help(u);
has_had_help = 1;
}
}
}
if (has_had_help == 0) {
notice_lang(service, u, NO_HELP_AVAILABLE, cmd);
} else {
do_help_limited(service, u, c);
}
mod_current_module = calling_module;
mod_current_module_name = calling_module_name;
mod_current_module = calling_module;
mod_current_module_name = calling_module_name;
}
/*************************************************************************/
+23 -23
View File
@@ -19,39 +19,39 @@
#if !HAVE_STRICMP && !HAVE_STRCASECMP
/* stricmp, strnicmp: Case-insensitive versions of strcmp() and
* strncmp().
* strncmp().
*/
int stricmp(const char *s1, const char *s2)
{
register int c;
register int c;
while ((c = tolower(*s1)) == tolower(*s2)) {
if (c == 0)
return 0;
s1++;
s2++;
}
if (c < tolower(*s2))
return -1;
return 1;
while ((c = tolower(*s1)) == tolower(*s2)) {
if (c == 0)
return 0;
s1++;
s2++;
}
if (c < tolower(*s2))
return -1;
return 1;
}
int strnicmp(const char *s1, const char *s2, size_t len)
{
register int c;
register int c;
if (!len)
return 0;
while ((c = tolower(*s1)) == tolower(*s2) && len > 0) {
if (c == 0 || --len == 0)
return 0;
s1++;
s2++;
}
if (c < tolower(*s2))
return -1;
return 1;
if (!len)
return 0;
while ((c = tolower(*s1)) == tolower(*s2) && len > 0) {
if (c == 0 || --len == 0)
return 0;
s1++;
s2++;
}
if (c < tolower(*s2))
return -1;
return 1;
}
#endif
+431 -431
View File
@@ -67,9 +67,9 @@ char *desc_HelpServ;
char *desc_OperServ;
char *desc_GlobalNoticer;
char *HostDBName; /* Name of HostServ DB File */
char *s_HostServ; /* HostServ Name */
char *desc_HostServ; /* HostServ Description */
char *HostDBName; /* Name of HostServ DB File */
char *s_HostServ; /* HostServ Name */
char *desc_HostServ; /* HostServ Description */
char *PIDFilename;
char *MOTDFilename;
@@ -83,7 +83,7 @@ char *NewsDBName;
static char *HostSetter;
char **HostSetters;
int HostNumber = 0; /* needs to be set to 0 */
int HostNumber = 0; /* needs to be set to 0 */
int NoBackupOkay;
int StrictPasswords;
@@ -1330,57 +1330,57 @@ bool ValueItem::GetBool()
/*************************************************************************/
Directive directives[] = {
{"BadPassLimit", {{PARAM_POSINT, PARAM_RELOAD, &BadPassLimit}}},
{"BadPassTimeout", {{PARAM_TIME, PARAM_RELOAD, &BadPassTimeout}}},
{"DumpCore", {{PARAM_SET, 0, &DumpCore}}},
{"EncModule", {{PARAM_STRING, 0, &EncModule}}},
{"ExpireTimeout", {{PARAM_TIME, PARAM_RELOAD, &ExpireTimeout}}},
{"ForceForbidReason", {{PARAM_SET, PARAM_RELOAD, &ForceForbidReason}}},
{"KeepBackups", {{PARAM_INT, PARAM_RELOAD, &KeepBackups}}},
{"KeepLogs", {{PARAM_INT, PARAM_RELOAD, &KeepLogs}}},
{"LocalAddress", {{PARAM_STRING, 0, &LocalHost},
{PARAM_PORT, PARAM_OPTIONAL, &LocalPort}}},
{"LogUsers", {{PARAM_SET, PARAM_RELOAD, &LogUsers}}},
{"MysqlHost", {{PARAM_STRING, PARAM_RELOAD, &MysqlHost}}},
{"MysqlUser", {{PARAM_STRING, PARAM_RELOAD, &MysqlUser}}},
{"MysqlPass", {{PARAM_STRING, PARAM_RELOAD, &MysqlPass}}},
{"MysqlName", {{PARAM_STRING, PARAM_RELOAD, &MysqlName}}},
{"MysqlPort", {{PARAM_PORT, PARAM_RELOAD, &MysqlPort}}},
{"MysqlSecure", {{PARAM_STRING, PARAM_RELOAD, &MysqlSecure}}},
{"MysqlSock", {{PARAM_STRING, PARAM_RELOAD, &MysqlSock}}},
{"MysqlRetries", {{PARAM_POSINT, PARAM_RELOAD, &MysqlRetries}}},
{"MysqlRetryGap", {{PARAM_POSINT, PARAM_RELOAD, &MysqlRetryGap}}},
{"ModuleAutoload", {{PARAM_STRING, PARAM_RELOAD, &Modules}}},
{"NewsCount", {{PARAM_POSINT, PARAM_RELOAD, &NewsCount}}},
{"NickRegDelay", {{PARAM_POSINT, PARAM_RELOAD, &NickRegDelay}}},
{"NoBackupOkay", {{PARAM_SET, PARAM_RELOAD, &NoBackupOkay}}},
{"ReadTimeout", {{PARAM_TIME, PARAM_RELOAD, &ReadTimeout}}},
{"RemoteServer2", {{PARAM_STRING, 0, &RemoteServer2},
{PARAM_PORT, 0, &RemotePort2},
{PARAM_STRING, 0, &RemotePassword2}}},
{"RemoteServer3", {{PARAM_STRING, 0, &RemoteServer3},
{PARAM_PORT, 0, &RemotePort3},
{PARAM_STRING, 0, &RemotePassword3}}},
{"RestrictOperNicks", {{PARAM_SET, PARAM_RELOAD, &RestrictOperNicks}}},
{"HideStatsO", {{PARAM_SET, PARAM_RELOAD, &HideStatsO}}},
{"GlobalOnCycle", {{PARAM_SET, PARAM_RELOAD, &GlobalOnCycle}}},
{"AnonymousGlobal", {{PARAM_SET, PARAM_RELOAD, &AnonymousGlobal}}},
{"GlobalOnCycleMessage",
{{PARAM_STRING, PARAM_RELOAD, &GlobalOnCycleMessage}}},
{"GlobalOnCycleUP", {{PARAM_STRING, PARAM_RELOAD, &GlobalOnCycleUP}}},
{"StrictPasswords", {{PARAM_SET, PARAM_RELOAD, &StrictPasswords}}},
{"TimeoutCheck", {{PARAM_TIME, PARAM_RELOAD, &TimeoutCheck}}},
{"UpdateTimeout", {{PARAM_TIME, PARAM_RELOAD, &UpdateTimeout}}},
{"UsePrivmsg", {{PARAM_SET, PARAM_RELOAD, &UsePrivmsg}}},
{"UseStrictPrivMsg", {{PARAM_SET, PARAM_RELOAD, &UseStrictPrivMsg}}},
{"UserKey1", {{PARAM_POSINT, PARAM_RELOAD, &UserKey1}}},
{"UserKey2", {{PARAM_POSINT, PARAM_RELOAD, &UserKey2}}},
{"UserKey3", {{PARAM_POSINT, PARAM_RELOAD, &UserKey3}}},
{"UseSVSHOLD", {{PARAM_SET, PARAM_RELOAD, &UseSVSHOLD}}},
{"UseTS6", {{PARAM_SET, 0, &UseTS6}}},
{"UnRestrictSAdmin", {{PARAM_SET, PARAM_RELOAD, &UnRestrictSAdmin}}},
{"WarningTimeout", {{PARAM_TIME, PARAM_RELOAD, &WarningTimeout}}},
{"UlineServers", {{PARAM_STRING, PARAM_RELOAD, &UlineServers}}},
{"BadPassLimit", {{PARAM_POSINT, PARAM_RELOAD, &BadPassLimit}}},
{"BadPassTimeout", {{PARAM_TIME, PARAM_RELOAD, &BadPassTimeout}}},
{"DumpCore", {{PARAM_SET, 0, &DumpCore}}},
{"EncModule", {{PARAM_STRING, 0, &EncModule}}},
{"ExpireTimeout", {{PARAM_TIME, PARAM_RELOAD, &ExpireTimeout}}},
{"ForceForbidReason", {{PARAM_SET, PARAM_RELOAD, &ForceForbidReason}}},
{"KeepBackups", {{PARAM_INT, PARAM_RELOAD, &KeepBackups}}},
{"KeepLogs", {{PARAM_INT, PARAM_RELOAD, &KeepLogs}}},
{"LocalAddress", {{PARAM_STRING, 0, &LocalHost},
{PARAM_PORT, PARAM_OPTIONAL, &LocalPort}}},
{"LogUsers", {{PARAM_SET, PARAM_RELOAD, &LogUsers}}},
{"MysqlHost", {{PARAM_STRING, PARAM_RELOAD, &MysqlHost}}},
{"MysqlUser", {{PARAM_STRING, PARAM_RELOAD, &MysqlUser}}},
{"MysqlPass", {{PARAM_STRING, PARAM_RELOAD, &MysqlPass}}},
{"MysqlName", {{PARAM_STRING, PARAM_RELOAD, &MysqlName}}},
{"MysqlPort", {{PARAM_PORT, PARAM_RELOAD, &MysqlPort}}},
{"MysqlSecure", {{PARAM_STRING, PARAM_RELOAD, &MysqlSecure}}},
{"MysqlSock", {{PARAM_STRING, PARAM_RELOAD, &MysqlSock}}},
{"MysqlRetries", {{PARAM_POSINT, PARAM_RELOAD, &MysqlRetries}}},
{"MysqlRetryGap", {{PARAM_POSINT, PARAM_RELOAD, &MysqlRetryGap}}},
{"ModuleAutoload", {{PARAM_STRING, PARAM_RELOAD, &Modules}}},
{"NewsCount", {{PARAM_POSINT, PARAM_RELOAD, &NewsCount}}},
{"NickRegDelay", {{PARAM_POSINT, PARAM_RELOAD, &NickRegDelay}}},
{"NoBackupOkay", {{PARAM_SET, PARAM_RELOAD, &NoBackupOkay}}},
{"ReadTimeout", {{PARAM_TIME, PARAM_RELOAD, &ReadTimeout}}},
{"RemoteServer2", {{PARAM_STRING, 0, &RemoteServer2},
{PARAM_PORT, 0, &RemotePort2},
{PARAM_STRING, 0, &RemotePassword2}}},
{"RemoteServer3", {{PARAM_STRING, 0, &RemoteServer3},
{PARAM_PORT, 0, &RemotePort3},
{PARAM_STRING, 0, &RemotePassword3}}},
{"RestrictOperNicks", {{PARAM_SET, PARAM_RELOAD, &RestrictOperNicks}}},
{"HideStatsO", {{PARAM_SET, PARAM_RELOAD, &HideStatsO}}},
{"GlobalOnCycle", {{PARAM_SET, PARAM_RELOAD, &GlobalOnCycle}}},
{"AnonymousGlobal", {{PARAM_SET, PARAM_RELOAD, &AnonymousGlobal}}},
{"GlobalOnCycleMessage",
{{PARAM_STRING, PARAM_RELOAD, &GlobalOnCycleMessage}}},
{"GlobalOnCycleUP", {{PARAM_STRING, PARAM_RELOAD, &GlobalOnCycleUP}}},
{"StrictPasswords", {{PARAM_SET, PARAM_RELOAD, &StrictPasswords}}},
{"TimeoutCheck", {{PARAM_TIME, PARAM_RELOAD, &TimeoutCheck}}},
{"UpdateTimeout", {{PARAM_TIME, PARAM_RELOAD, &UpdateTimeout}}},
{"UsePrivmsg", {{PARAM_SET, PARAM_RELOAD, &UsePrivmsg}}},
{"UseStrictPrivMsg", {{PARAM_SET, PARAM_RELOAD, &UseStrictPrivMsg}}},
{"UserKey1", {{PARAM_POSINT, PARAM_RELOAD, &UserKey1}}},
{"UserKey2", {{PARAM_POSINT, PARAM_RELOAD, &UserKey2}}},
{"UserKey3", {{PARAM_POSINT, PARAM_RELOAD, &UserKey3}}},
{"UseSVSHOLD", {{PARAM_SET, PARAM_RELOAD, &UseSVSHOLD}}},
{"UseTS6", {{PARAM_SET, 0, &UseTS6}}},
{"UnRestrictSAdmin", {{PARAM_SET, PARAM_RELOAD, &UnRestrictSAdmin}}},
{"WarningTimeout", {{PARAM_TIME, PARAM_RELOAD, &WarningTimeout}}},
{"UlineServers", {{PARAM_STRING, PARAM_RELOAD, &UlineServers}}},
};
/*************************************************************************/
@@ -1389,24 +1389,24 @@ Directive directives[] = {
void error(int linenum, const char *message, ...)
{
char buf[4096];
va_list args;
char buf[4096];
va_list args;
va_start(args, message);
vsnprintf(buf, sizeof(buf), message, args);
va_end(args);
va_start(args, message);
vsnprintf(buf, sizeof(buf), message, args);
va_end(args);
if (linenum)
alog("%s:%d: %s", SERVICES_CONF, linenum, buf);
else
alog("%s: %s", SERVICES_CONF, buf);
if (linenum)
alog("%s:%d: %s", SERVICES_CONF, linenum, buf);
else
alog("%s: %s", SERVICES_CONF, buf);
if (!nofork && isatty(2)) {
if (linenum)
fprintf(stderr, "%s:%d: %s\n", SERVICES_CONF, linenum, buf);
else
fprintf(stderr, "%s: %s\n", SERVICES_CONF, buf);
}
if (linenum)
fprintf(stderr, "%s:%d: %s\n", SERVICES_CONF, linenum, buf);
else
fprintf(stderr, "%s: %s\n", SERVICES_CONF, buf);
}
}
/*************************************************************************/
@@ -1417,191 +1417,191 @@ void error(int linenum, const char *message, ...)
*/
int parse_directive(Directive * d, char *dir, int ac, char *av[MAXPARAMS],
int linenum, int reload, char *s)
int linenum, int reload, char *s)
{
int retval = 1;
int i;
long val;
int myoptind;
int retval = 1;
int i;
long val;
int myoptind;
if (stricmp(dir, d->name) != 0)
return 1;
myoptind = 0;
for (i = 0; i < MAXPARAMS && d->params[i].type != PARAM_NONE; i++) {
if (reload && !(d->params[i].flags & PARAM_RELOAD))
continue;
if (stricmp(dir, d->name) != 0)
return 1;
myoptind = 0;
for (i = 0; i < MAXPARAMS && d->params[i].type != PARAM_NONE; i++) {
if (reload && !(d->params[i].flags & PARAM_RELOAD))
continue;
if (d->params[i].type == PARAM_SET) {
*(int *) d->params[i].ptr = 1;
continue;
}
if (d->params[i].type == PARAM_SET) {
*(int *) d->params[i].ptr = 1;
continue;
}
/* Should we remove PARAM_DEPRECATED because it's
* useless right now? -GD */
if (d->params[i].type == PARAM_DEPRECATED) {
void (*func) (void);
error(linenum, "Deprecated directive `%s' used", d->name);
func = (void (*)(void)) (d->params[i].ptr);
func(); /* For clarity */
continue;
}
if (myoptind >= ac) {
if (!(d->params[i].flags & PARAM_OPTIONAL)) {
error(linenum, "Not enough parameters for `%s'", d->name);
retval = 0;
}
break;
}
switch (d->params[i].type) {
case PARAM_INT:
val = strtol(av[myoptind++], &s, 0);
if (*s) {
error(linenum,
"%s: Expected an integer for parameter %d",
d->name, myoptind);
retval = 0;
break;
}
*(int *) d->params[i].ptr = val;
break;
case PARAM_POSINT:
val = strtol(av[myoptind++], &s, 0);
if (*s || val <= 0) {
error(linenum,
"%s: Expected a positive integer for parameter %d",
d->name, myoptind);
retval = 0;
break;
}
if (errno == ERANGE && val == LONG_MAX) {
/* well the true top off is 2,147,483,647 but lets not give them the real top */
error(linenum,
"%s: paramter %d is to large, reduce this value (0 to 2,147,483,646)",
d->name, myoptind);
}
*(int *) d->params[i].ptr = val;
break;
case PARAM_PORT:
val = strtol(av[myoptind++], &s, 0);
if (*s) {
error(linenum,
"%s: Expected a port number for parameter %d",
d->name, myoptind);
retval = 0;
break;
}
if (val < 1 || val > 65535) {
error(linenum,
"Port numbers must be in the range 1..65535");
retval = 0;
break;
}
*(int *) d->params[i].ptr = val;
break;
case PARAM_STRING:
/* if (reload && *(char **)d->params[i].ptr)
free(*(char **)d->params[i].ptr); */
*(char **) d->params[i].ptr = sstrdup(av[myoptind++]);
if (!d->params[i].ptr) {
error(linenum, "%s: Out of memory", d->name);
return 0;
}
break;
case PARAM_TIME:
val = dotime(av[myoptind++]);
if (val < 0) {
error(linenum,
"%s: Expected a time value for parameter %d",
d->name, myoptind);
retval = 0;
break;
}
*(int *) d->params[i].ptr = val;
break;
default:
error(linenum, "%s: Unknown type %d for param %d",
d->name, d->params[i].type, i + 1);
retval = 0; /* don't bother continuing--something's bizarre */
break;
}
}
return retval;;
/* Should we remove PARAM_DEPRECATED because it's
* useless right now? -GD */
if (d->params[i].type == PARAM_DEPRECATED) {
void (*func) (void);
error(linenum, "Deprecated directive `%s' used", d->name);
func = (void (*)(void)) (d->params[i].ptr);
func(); /* For clarity */
continue;
}
if (myoptind >= ac) {
if (!(d->params[i].flags & PARAM_OPTIONAL)) {
error(linenum, "Not enough parameters for `%s'", d->name);
retval = 0;
}
break;
}
switch (d->params[i].type) {
case PARAM_INT:
val = strtol(av[myoptind++], &s, 0);
if (*s) {
error(linenum,
"%s: Expected an integer for parameter %d",
d->name, myoptind);
retval = 0;
break;
}
*(int *) d->params[i].ptr = val;
break;
case PARAM_POSINT:
val = strtol(av[myoptind++], &s, 0);
if (*s || val <= 0) {
error(linenum,
"%s: Expected a positive integer for parameter %d",
d->name, myoptind);
retval = 0;
break;
}
if (errno == ERANGE && val == LONG_MAX) {
/* well the true top off is 2,147,483,647 but lets not give them the real top */
error(linenum,
"%s: paramter %d is to large, reduce this value (0 to 2,147,483,646)",
d->name, myoptind);
}
*(int *) d->params[i].ptr = val;
break;
case PARAM_PORT:
val = strtol(av[myoptind++], &s, 0);
if (*s) {
error(linenum,
"%s: Expected a port number for parameter %d",
d->name, myoptind);
retval = 0;
break;
}
if (val < 1 || val > 65535) {
error(linenum,
"Port numbers must be in the range 1..65535");
retval = 0;
break;
}
*(int *) d->params[i].ptr = val;
break;
case PARAM_STRING:
/* if (reload && *(char **)d->params[i].ptr)
free(*(char **)d->params[i].ptr); */
*(char **) d->params[i].ptr = sstrdup(av[myoptind++]);
if (!d->params[i].ptr) {
error(linenum, "%s: Out of memory", d->name);
return 0;
}
break;
case PARAM_TIME:
val = dotime(av[myoptind++]);
if (val < 0) {
error(linenum,
"%s: Expected a time value for parameter %d",
d->name, myoptind);
retval = 0;
break;
}
*(int *) d->params[i].ptr = val;
break;
default:
error(linenum, "%s: Unknown type %d for param %d",
d->name, d->params[i].type, i + 1);
retval = 0; /* don't bother continuing--something's bizarre */
break;
}
}
return retval;;
}
int parse(char *buf, int linenum, int reload)
{
char *s, *t, *dir;
unsigned int n;
int retval = 1;
int ac = 0;
char *av[MAXPARAMS];
char *s, *t, *dir;
unsigned int n;
int retval = 1;
int ac = 0;
char *av[MAXPARAMS];
dir = strtok(buf, " \t\r\n");
s = strtok(NULL, "");
if (s) {
while (isspace(*s))
s++;
while (*s) {
if (ac >= MAXPARAMS) {
error(linenum, "Warning: too many parameters (%d max)",
MAXPARAMS);
break;
}
t = s;
if (*s == '"') {
t++;
s++;
while (*s && *s != '"') {
if (*s == '\\' && s[1] != 0)
s++;
s++;
}
if (!*s)
error(linenum,
"Warning: unterminated double-quoted string");
else
*s++ = 0;
} else {
s += strcspn(s, " \t\r\n");
if (*s)
*s++ = 0;
}
av[ac++] = t;
while (isspace(*s))
s++;
}
}
dir = strtok(buf, " \t\r\n");
s = strtok(NULL, "");
if (s) {
while (isspace(*s))
s++;
while (*s) {
if (ac >= MAXPARAMS) {
error(linenum, "Warning: too many parameters (%d max)",
MAXPARAMS);
break;
}
t = s;
if (*s == '"') {
t++;
s++;
while (*s && *s != '"') {
if (*s == '\\' && s[1] != 0)
s++;
s++;
}
if (!*s)
error(linenum,
"Warning: unterminated double-quoted string");
else
*s++ = 0;
} else {
s += strcspn(s, " \t\r\n");
if (*s)
*s++ = 0;
}
av[ac++] = t;
while (isspace(*s))
s++;
}
}
if (!dir)
return 1;
if (!dir)
return 1;
for (n = 0; n < lenof(directives); n++) {
Directive *d = &directives[n];
retval = parse_directive(d, dir, ac, av, linenum, reload, s);
if (!retval) {
break;
}
}
for (n = 0; n < lenof(directives); n++) {
Directive *d = &directives[n];
retval = parse_directive(d, dir, ac, av, linenum, reload, s);
if (!retval) {
break;
}
}
return retval;
return retval;
}
/*************************************************************************/
#define CHECK(v) do { \
if (!v) { \
if (!v) { \
error(0, #v " missing"); \
retval = 0; \
} \
} \
} while (0)
#define CHEK2(v,n) do { \
if (!v) { \
if (!v) { \
error(0, #n " missing"); \
retval = 0; \
} \
} \
} while (0)
/* Read the entire configuration file. If an error occurs while reading
@@ -1615,95 +1615,95 @@ int parse(char *buf, int linenum, int reload)
int read_config(int reload)
{
FILE *config;
int linenum = 0, retval = 1;
char buf[1024], *s;
int defconCount = 0;
FILE *config;
int linenum = 0, retval = 1;
char buf[1024], *s;
int defconCount = 0;
if (reload) {
unsigned int i, n;
if (reload) {
unsigned int i, n;
/* Reset all the reloadable settings */
/* Reset all the reloadable settings */
for (n = 0; n < lenof(directives); n++) {
Directive *d = &directives[n];
for (n = 0; n < lenof(directives); n++) {
Directive *d = &directives[n];
for (i = 0; i < MAXPARAMS && d->params[i].type != PARAM_NONE;
i++) {
if (!(d->params[i].flags & PARAM_RELOAD))
continue;
for (i = 0; i < MAXPARAMS && d->params[i].type != PARAM_NONE;
i++) {
if (!(d->params[i].flags & PARAM_RELOAD))
continue;
if (d->params[i].type == PARAM_SET
|| d->params[i].type == PARAM_INT
|| d->params[i].type == PARAM_POSINT
|| d->params[i].type == PARAM_TIME) {
*(int *) d->params[i].ptr = 0;
} else if (d->params[i].type == PARAM_STRING) {
if (*(char **) d->params[i].ptr)
free(*(char **) d->params[i].ptr);
(*(char **) d->params[i].ptr) = NULL;
}
}
}
}
if (d->params[i].type == PARAM_SET
|| d->params[i].type == PARAM_INT
|| d->params[i].type == PARAM_POSINT
|| d->params[i].type == PARAM_TIME) {
*(int *) d->params[i].ptr = 0;
} else if (d->params[i].type == PARAM_STRING) {
if (*(char **) d->params[i].ptr)
free(*(char **) d->params[i].ptr);
(*(char **) d->params[i].ptr) = NULL;
}
}
}
}
retval = serverConfig.Read(reload);
if (!retval) return 0; // Temporary until most of the below is modified to use the new parser -- CyberBotX
config = fopen(SERVICES_CONF, "r");
if (!config) {
log_perror("Can't open " SERVICES_CONF);
if (!nofork && isatty(2)) {
if (!reload)
perror("Can't open " SERVICES_CONF);
else
alog("Can't open %s", SERVICES_CONF);
}
return 0;
}
while (fgets(buf, sizeof(buf), config)) {
linenum++;
if (*buf == '#' || *buf == '\r' || *buf == '\n')
continue;
if (!parse(buf, linenum, reload))
retval = 0;
}
fclose(config);
config = fopen(SERVICES_CONF, "r");
if (!config) {
log_perror("Can't open " SERVICES_CONF);
if (!nofork && isatty(2)) {
if (!reload)
perror("Can't open " SERVICES_CONF);
else
alog("Can't open %s", SERVICES_CONF);
}
return 0;
}
while (fgets(buf, sizeof(buf), config)) {
linenum++;
if (*buf == '#' || *buf == '\r' || *buf == '\n')
continue;
if (!parse(buf, linenum, reload))
retval = 0;
}
fclose(config);
if (!reload) {
if (RemoteServer3)
CHECK(RemoteServer2);
if (!reload) {
if (RemoteServer3)
CHECK(RemoteServer2);
if (LocalHost && RemoteServer) {
if ((!stricmp(LocalHost, RemoteServer))
&& LocalPort == RemotePort) {
printf
("\n*** LocalAddress and RemoteServer are set to use the same IP address\n"
"*** (%s) and port (%d). This would have resulted in errors.\n"
"*** Change the LocalAddress to bind to another port.\n",
RemoteServer, LocalPort);
retval = 0;
}
}
}
if (LocalHost && RemoteServer) {
if ((!stricmp(LocalHost, RemoteServer))
&& LocalPort == RemotePort) {
printf
("\n*** LocalAddress and RemoteServer are set to use the same IP address\n"
"*** (%s) and port (%d). This would have resulted in errors.\n"
"*** Change the LocalAddress to bind to another port.\n",
RemoteServer, LocalPort);
retval = 0;
}
}
}
CHECK(EncModule);
CHECK(EncModule);
CHECK(UpdateTimeout);
CHECK(ExpireTimeout);
CHECK(ReadTimeout);
CHECK(WarningTimeout);
CHECK(TimeoutCheck);
CHECK(UpdateTimeout);
CHECK(ExpireTimeout);
CHECK(ReadTimeout);
CHECK(WarningTimeout);
CHECK(TimeoutCheck);
if (temp_nsuserhost) {
if (!(s = strchr(temp_nsuserhost, '@'))) {
NSEnforcerUser = temp_nsuserhost;
NSEnforcerHost = ServiceHost;
} else {
*s++ = 0;
NSEnforcerUser = temp_nsuserhost;
NSEnforcerHost = s;
}
}
if (temp_nsuserhost) {
if (!(s = strchr(temp_nsuserhost, '@'))) {
NSEnforcerUser = temp_nsuserhost;
NSEnforcerHost = ServiceHost;
} else {
*s++ = 0;
NSEnforcerUser = temp_nsuserhost;
NSEnforcerHost = s;
}
}
NSDefFlags = 0;
if (NSDefaults.empty()) NSDefFlags = NI_SECURE | NI_MEMO_SIGNON | NI_MEMO_RECEIVE;
@@ -1730,30 +1730,30 @@ int read_config(int reload)
if (!hadAutoop) NSDefFlags |= NI_AUTOOP;
}
if (!NewsCount) {
NewsCount = 3;
}
if (!NewsCount) {
NewsCount = 3;
}
if (reload) {
if ((NSDefLanguage = langlist[NSDefLanguage]) < 0)
NSDefLanguage = DEF_LANGUAGE;
}
if (reload) {
if ((NSDefLanguage = langlist[NSDefLanguage]) < 0)
NSDefLanguage = DEF_LANGUAGE;
}
if (CSDefBantype < 0 || CSDefBantype > 3) {
error(0, "Value of CSDefBantype must be between 0 and 3 included");
retval = 0;
}
if (CSDefBantype < 0 || CSDefBantype > 3) {
error(0, "Value of CSDefBantype must be between 0 and 3 included");
retval = 0;
}
if (!MysqlRetries || !MysqlRetryGap) {
MysqlRetries = 5;
MysqlRetryGap = 1;
} else if (((MysqlRetries * MysqlRetryGap) > 60)
|| ((MysqlRetries * MysqlRetryGap) < 1)) {
error(0,
"MysqlRetries * MysqlRetryGap must be between 1 and 60, using standard values.");
MysqlRetries = 5;
MysqlRetryGap = 1;
}
if (!MysqlRetries || !MysqlRetryGap) {
MysqlRetries = 5;
MysqlRetryGap = 1;
} else if (((MysqlRetries * MysqlRetryGap) > 60)
|| ((MysqlRetries * MysqlRetryGap) < 1)) {
error(0,
"MysqlRetries * MysqlRetryGap must be between 1 and 60, using standard values.");
MysqlRetries = 5;
MysqlRetryGap = 1;
}
CSDefFlags = 0;
if (CSDefaults.empty()) CSDefFlags = CI_KEEPTOPIC | CI_SECURE | CI_SECUREFOUNDER | CI_SIGNKICK;
@@ -1821,101 +1821,101 @@ int read_config(int reload)
}
}
/* Services Root building */
/* Services Root building */
if (ServicesRoot && !reload) { /* Check to prevent segmentation fault if it's missing */
RootNumber = 0;
if (ServicesRoot && !reload) { /* Check to prevent segmentation fault if it's missing */
RootNumber = 0;
s = strtok(ServicesRoot, " ");
do {
if (s) {
RootNumber++;
ServicesRoots =
(char **)realloc(ServicesRoots, sizeof(char *) * RootNumber);
ServicesRoots[RootNumber - 1] = sstrdup(s);
}
} while ((s = strtok(NULL, " ")));
}
s = strtok(ServicesRoot, " ");
do {
if (s) {
RootNumber++;
ServicesRoots =
(char **)realloc(ServicesRoots, sizeof(char *) * RootNumber);
ServicesRoots[RootNumber - 1] = sstrdup(s);
}
} while ((s = strtok(NULL, " ")));
}
if (!RootNumber) {
error(0, "No ServicesRoot defined");
retval = 0;
}
if (!RootNumber) {
error(0, "No ServicesRoot defined");
retval = 0;
}
/* Ulines */
/* Ulines */
if (UlineServers) {
NumUlines = 0;
if (UlineServers) {
NumUlines = 0;
s = strtok(UlineServers, " ");
do {
if (s) {
NumUlines++;
Ulines = (char **)realloc(Ulines, sizeof(char *) * NumUlines);
Ulines[NumUlines - 1] = sstrdup(s);
}
} while ((s = strtok(NULL, " ")));
}
s = strtok(UlineServers, " ");
do {
if (s) {
NumUlines++;
Ulines = (char **)realloc(Ulines, sizeof(char *) * NumUlines);
Ulines[NumUlines - 1] = sstrdup(s);
}
} while ((s = strtok(NULL, " ")));
}
/* Host Setters building... :P */
HostSetters = buildStringList(HostSetter, &HostNumber);
/* Host Setters building... :P */
HostSetters = buildStringList(HostSetter, &HostNumber);
/* Modules Autoload building... :P */
ModulesAutoload = buildStringList(Modules, &ModulesNumber);
HostServCoreModules =
buildStringList(HostCoreModules, &HostServCoreNumber);
MemoServCoreModules =
buildStringList(MemoCoreModules, &MemoServCoreNumber);
HelpServCoreModules =
buildStringList(HelpCoreModules, &HelpServCoreNumber);
/* Modules Autoload building... :P */
ModulesAutoload = buildStringList(Modules, &ModulesNumber);
HostServCoreModules =
buildStringList(HostCoreModules, &HostServCoreNumber);
MemoServCoreModules =
buildStringList(MemoCoreModules, &MemoServCoreNumber);
HelpServCoreModules =
buildStringList(HelpCoreModules, &HelpServCoreNumber);
BotServCoreModules =
buildStringList(BotCoreModules, &BotServCoreNumber);
BotServCoreModules =
buildStringList(BotCoreModules, &BotServCoreNumber);
OperServCoreModules =
buildStringList(OperCoreModules, &OperServCoreNumber);
OperServCoreModules =
buildStringList(OperCoreModules, &OperServCoreNumber);
ChanServCoreModules =
buildStringList(ChanCoreModules, &ChanServCoreNumber);
ChanServCoreModules =
buildStringList(ChanCoreModules, &ChanServCoreNumber);
NickServCoreModules =
buildStringList(NickCoreModules, &NickServCoreNumber);
NickServCoreModules =
buildStringList(NickCoreModules, &NickServCoreNumber);
if (LimitSessions) {
if (MaxSessionKill && !SessionAutoKillExpiry)
SessionAutoKillExpiry = 1800; /* 30 minutes */
}
if (LimitSessions) {
if (MaxSessionKill && !SessionAutoKillExpiry)
SessionAutoKillExpiry = 1800; /* 30 minutes */
}
if (s_BotServ) {
if (!BSFantasyCharacter || !*BSFantasyCharacter)
BSFantasyCharacter = sstrdup("!");
if (*BSFantasyCharacter && (strlen(BSFantasyCharacter) > 1)) {
printf
("*** BSFantasyCharacter is more than 1 character long. Only the first\n"
"*** character ('%c') will be used. The others will be ignored.\n",
*BSFantasyCharacter);
}
}
if (s_BotServ) {
if (!BSFantasyCharacter || !*BSFantasyCharacter)
BSFantasyCharacter = sstrdup("!");
if (*BSFantasyCharacter && (strlen(BSFantasyCharacter) > 1)) {
printf
("*** BSFantasyCharacter is more than 1 character long. Only the first\n"
"*** character ('%c') will be used. The others will be ignored.\n",
*BSFantasyCharacter);
}
}
if (GlobalOnCycle) {
if (!GlobalOnCycleMessage && !GlobalOnCycleUP) {
alog("GlobalOnCycleMessage and GlobalOnCycleUP are not defined; disabling GlobalOnCycle");
GlobalOnCycle = 0;
}
}
if (GlobalOnCycle) {
if (!GlobalOnCycleMessage && !GlobalOnCycleUP) {
alog("GlobalOnCycleMessage and GlobalOnCycleUP are not defined; disabling GlobalOnCycle");
GlobalOnCycle = 0;
}
}
/* Check the user keys */
if ((UserKey1 == UserKey2) || (UserKey1 == UserKey3)
|| (UserKey3 == UserKey2))
alog("Every UserKey must be different. It's for YOUR safety! Remember that!");
/* Check the user keys */
if ((UserKey1 == UserKey2) || (UserKey1 == UserKey3)
|| (UserKey3 == UserKey2))
alog("Every UserKey must be different. It's for YOUR safety! Remember that!");
/**
* Check all DEFCON dependiencies...
**/
if (DefConLevel) {
/* Build DefCon's */
DefCon[0] = 0;
/**
* Check all DEFCON dependiencies...
**/
if (DefConLevel) {
/* Build DefCon's */
DefCon[0] = 0;
for (int level = 1; level < 5; ++level) {
DefCon[level] = 0;
std::string *levelDefinition = NULL;
@@ -1947,39 +1947,39 @@ int read_config(int reload)
else if (operation == "nonewmemos") DefCon[level] |= DEFCON_NO_NEW_MEMOS;
}
}
DefCon[5] = 0; /* DefCon level 5 is always normal operation */
for (defconCount = 1; defconCount <= 5; defconCount++) { /* Check any defcon needed settings */
if (DefCon[defconCount] & DEFCON_REDUCE_SESSION) {
CHECK(DefConSessionLimit);
}
if (DefCon[defconCount] & DEFCON_AKILL_NEW_CLIENTS) {
CHECK(DefConAKILL);
CHECK(DefConAkillReason);
}
if (DefCon[defconCount] & DEFCON_FORCE_CHAN_MODES) {
CHECK(DefConChanModes);
}
}
}
DefCon[5] = 0; /* DefCon level 5 is always normal operation */
for (defconCount = 1; defconCount <= 5; defconCount++) { /* Check any defcon needed settings */
if (DefCon[defconCount] & DEFCON_REDUCE_SESSION) {
CHECK(DefConSessionLimit);
}
if (DefCon[defconCount] & DEFCON_AKILL_NEW_CLIENTS) {
CHECK(DefConAKILL);
CHECK(DefConAkillReason);
}
if (DefCon[defconCount] & DEFCON_FORCE_CHAN_MODES) {
CHECK(DefConChanModes);
}
}
}
/**
* If they try to enable any email registration option,
* make sure they have everything else they need too...
*
* rob
**/
if (!NSEmailReg) {
/**
* If they try to enable any email registration option,
* make sure they have everything else they need too...
*
* rob
**/
if (!NSEmailReg) {
delete [] PreNickDBName;
PreNickDBName = NULL;
NSRExpire = 0;
}
PreNickDBName = NULL;
NSRExpire = 0;
}
if (!retval) {
printf
("\n*** Support resources: Read through the services.conf self-contained \n*** documentation. Read the documentation files found in the 'docs' \n*** folder. Visit our portal located at http://www.anope.org/. Join \n*** our support channel on /server irc.anope.org channel #anope.\n\n");
}
if (!retval) {
printf
("\n*** Support resources: Read through the services.conf self-contained \n*** documentation. Read the documentation files found in the 'docs' \n*** folder. Visit our portal located at http://www.anope.org/. Join \n*** our support channel on /server irc.anope.org channel #anope.\n\n");
}
return retval;
return retval;
}
+32 -32
View File
@@ -23,15 +23,15 @@ class BSAct : public Module
public:
BSAct(const std::string &modname, const std::string &creator) : Module(modname, creator)
{
Command *c;
Command *c;
this->SetAuthor("Anope");
this->SetVersion("$Id$");
this->SetType(CORE);
c = createCommand("ACT", do_act, NULL, BOT_HELP_ACT, -1, -1, -1, -1);
this->AddCommand(BOTSERV, c, MOD_UNIQUE);
this->SetAuthor("Anope");
this->SetVersion("$Id$");
this->SetType(CORE);
c = createCommand("ACT", do_act, NULL, BOT_HELP_ACT, -1, -1, -1, -1);
this->AddCommand(BOTSERV, c, MOD_UNIQUE);
moduleSetBotHelp(myBotServHelp);
moduleSetBotHelp(myBotServHelp);
}
};
@@ -42,7 +42,7 @@ class BSAct : public Module
**/
void myBotServHelp(User * u)
{
notice_lang(s_BotServ, u, BOT_HELP_CMD_ACT);
notice_lang(s_BotServ, u, BOT_HELP_CMD_ACT);
}
/**
@@ -52,32 +52,32 @@ void myBotServHelp(User * u)
**/
int do_act(User * u)
{
ChannelInfo *ci;
ChannelInfo *ci;
char *chan = strtok(NULL, " ");
char *text = strtok(NULL, "");
char *chan = strtok(NULL, " ");
char *text = strtok(NULL, "");
if (!chan || !text)
syntax_error(s_BotServ, u, "ACT", BOT_ACT_SYNTAX);
else if (!(ci = cs_findchan(chan)))
notice_lang(s_BotServ, u, CHAN_X_NOT_REGISTERED, chan);
else if (ci->flags & CI_VERBOTEN)
notice_lang(s_BotServ, u, CHAN_X_FORBIDDEN, chan);
else if (!ci->bi)
notice_help(s_BotServ, u, BOT_NOT_ASSIGNED);
else if (!ci->c || ci->c->usercount < BSMinUsers)
notice_lang(s_BotServ, u, BOT_NOT_ON_CHANNEL, ci->name);
else if (!check_access(u, ci, CA_SAY))
notice_lang(s_BotServ, u, ACCESS_DENIED);
else {
strnrepl(text, BUFSIZE, "\001", "");
ircdproto->SendAction(ci->bi, ci->name, "%s", text);
ci->bi->lastmsg = time(NULL);
if (LogBot && LogChannel && logchan && !debug && findchan(LogChannel))
ircdproto->SendPrivmsg(ci->bi, LogChannel, "ACT %s %s %s",
u->nick, ci->name, text);
}
return MOD_CONT;
if (!chan || !text)
syntax_error(s_BotServ, u, "ACT", BOT_ACT_SYNTAX);
else if (!(ci = cs_findchan(chan)))
notice_lang(s_BotServ, u, CHAN_X_NOT_REGISTERED, chan);
else if (ci->flags & CI_VERBOTEN)
notice_lang(s_BotServ, u, CHAN_X_FORBIDDEN, chan);
else if (!ci->bi)
notice_help(s_BotServ, u, BOT_NOT_ASSIGNED);
else if (!ci->c || ci->c->usercount < BSMinUsers)
notice_lang(s_BotServ, u, BOT_NOT_ON_CHANNEL, ci->name);
else if (!check_access(u, ci, CA_SAY))
notice_lang(s_BotServ, u, ACCESS_DENIED);
else {
strnrepl(text, BUFSIZE, "\001", "");
ircdproto->SendAction(ci->bi, ci->name, "%s", text);
ci->bi->lastmsg = time(NULL);
if (LogBot && LogChannel && logchan && !debug && findchan(LogChannel))
ircdproto->SendPrivmsg(ci->bi, LogChannel, "ACT %s %s %s",
u->nick, ci->name, text);
}
return MOD_CONT;
}
MODULE_INIT("bs_act", BSAct)
+26 -26
View File
@@ -41,7 +41,7 @@ class BSAssign : public Module
**/
void myBotServHelp(User * u)
{
notice_lang(s_BotServ, u, BOT_HELP_CMD_ASSIGN);
notice_lang(s_BotServ, u, BOT_HELP_CMD_ASSIGN);
}
/**
@@ -51,33 +51,33 @@ void myBotServHelp(User * u)
**/
int do_assign(User * u)
{
char *chan = strtok(NULL, " ");
char *nick = strtok(NULL, " ");
BotInfo *bi;
ChannelInfo *ci;
char *chan = strtok(NULL, " ");
char *nick = strtok(NULL, " ");
BotInfo *bi;
ChannelInfo *ci;
if (readonly)
notice_lang(s_BotServ, u, BOT_ASSIGN_READONLY);
else if (!chan || !nick)
syntax_error(s_BotServ, u, "ASSIGN", BOT_ASSIGN_SYNTAX);
else if (!(bi = findbot(nick)))
notice_lang(s_BotServ, u, BOT_DOES_NOT_EXIST, nick);
else if (bi->flags & BI_PRIVATE && !is_oper(u))
notice_lang(s_BotServ, u, PERMISSION_DENIED);
else if (!(ci = cs_findchan(chan)))
notice_lang(s_BotServ, u, CHAN_X_NOT_REGISTERED, chan);
else if (ci->flags & CI_VERBOTEN)
notice_lang(s_BotServ, u, CHAN_X_FORBIDDEN, chan);
else if ((ci->bi) && (stricmp(ci->bi->nick, nick) == 0))
notice_lang(s_BotServ, u, BOT_ASSIGN_ALREADY, ci->bi->nick, chan);
else if ((ci->botflags & BS_NOBOT)
|| (!check_access(u, ci, CA_ASSIGN) && !is_services_admin(u)))
notice_lang(s_BotServ, u, PERMISSION_DENIED);
else {
if (readonly)
notice_lang(s_BotServ, u, BOT_ASSIGN_READONLY);
else if (!chan || !nick)
syntax_error(s_BotServ, u, "ASSIGN", BOT_ASSIGN_SYNTAX);
else if (!(bi = findbot(nick)))
notice_lang(s_BotServ, u, BOT_DOES_NOT_EXIST, nick);
else if (bi->flags & BI_PRIVATE && !is_oper(u))
notice_lang(s_BotServ, u, PERMISSION_DENIED);
else if (!(ci = cs_findchan(chan)))
notice_lang(s_BotServ, u, CHAN_X_NOT_REGISTERED, chan);
else if (ci->flags & CI_VERBOTEN)
notice_lang(s_BotServ, u, CHAN_X_FORBIDDEN, chan);
else if ((ci->bi) && (stricmp(ci->bi->nick, nick) == 0))
notice_lang(s_BotServ, u, BOT_ASSIGN_ALREADY, ci->bi->nick, chan);
else if ((ci->botflags & BS_NOBOT)
|| (!check_access(u, ci, CA_ASSIGN) && !is_services_admin(u)))
notice_lang(s_BotServ, u, PERMISSION_DENIED);
else {
bi->Assign(u, ci);
notice_lang(s_BotServ, u, BOT_ASSIGN_ASSIGNED, bi->nick, ci->name);
}
return MOD_CONT;
notice_lang(s_BotServ, u, BOT_ASSIGN_ASSIGNED, bi->nick, ci->name);
}
return MOD_CONT;
}
MODULE_INIT("bs_assign", BSAssign)
+216 -216
View File
@@ -46,7 +46,7 @@ class BSBadwords : public Module
**/
void myBotServHelp(User * u)
{
notice_lang(s_BotServ, u, BOT_HELP_CMD_BADWORDS);
notice_lang(s_BotServ, u, BOT_HELP_CMD_BADWORDS);
}
/**
@@ -56,259 +56,259 @@ void myBotServHelp(User * u)
**/
int do_badwords(User * u)
{
char *chan = strtok(NULL, " ");
char *cmd = strtok(NULL, " ");
char *word = strtok(NULL, "");
ChannelInfo *ci;
BadWord *bw;
char *chan = strtok(NULL, " ");
char *cmd = strtok(NULL, " ");
char *word = strtok(NULL, "");
ChannelInfo *ci;
BadWord *bw;
int i;
int need_args = (cmd
&& (!stricmp(cmd, "LIST") || !stricmp(cmd, "CLEAR")));
int i;
int need_args = (cmd
&& (!stricmp(cmd, "LIST") || !stricmp(cmd, "CLEAR")));
if (!cmd || (need_args ? 0 : !word)) {
syntax_error(s_BotServ, u, "BADWORDS", BOT_BADWORDS_SYNTAX);
} else if (!(ci = cs_findchan(chan))) {
notice_lang(s_BotServ, u, CHAN_X_NOT_REGISTERED, chan);
} else if (ci->flags & CI_VERBOTEN) {
notice_lang(s_BotServ, u, CHAN_X_FORBIDDEN, chan);
} else if (!check_access(u, ci, CA_BADWORDS)
&& (!need_args || !is_services_admin(u))) {
notice_lang(s_BotServ, u, ACCESS_DENIED);
} else if (stricmp(cmd, "ADD") == 0) {
if (!cmd || (need_args ? 0 : !word)) {
syntax_error(s_BotServ, u, "BADWORDS", BOT_BADWORDS_SYNTAX);
} else if (!(ci = cs_findchan(chan))) {
notice_lang(s_BotServ, u, CHAN_X_NOT_REGISTERED, chan);
} else if (ci->flags & CI_VERBOTEN) {
notice_lang(s_BotServ, u, CHAN_X_FORBIDDEN, chan);
} else if (!check_access(u, ci, CA_BADWORDS)
&& (!need_args || !is_services_admin(u))) {
notice_lang(s_BotServ, u, ACCESS_DENIED);
} else if (stricmp(cmd, "ADD") == 0) {
char *opt, *pos;
int type = BW_ANY;
char *opt, *pos;
int type = BW_ANY;
if (readonly) {
notice_lang(s_BotServ, u, BOT_BADWORDS_DISABLED);
return MOD_CONT;
}
if (readonly) {
notice_lang(s_BotServ, u, BOT_BADWORDS_DISABLED);
return MOD_CONT;
}
pos = strrchr(word, ' ');
if (pos) {
opt = pos + 1;
if (*opt) {
if (!stricmp(opt, "SINGLE"))
type = BW_SINGLE;
else if (!stricmp(opt, "START"))
type = BW_START;
else if (!stricmp(opt, "END"))
type = BW_END;
if (type != BW_ANY)
*pos = 0;
}
}
pos = strrchr(word, ' ');
if (pos) {
opt = pos + 1;
if (*opt) {
if (!stricmp(opt, "SINGLE"))
type = BW_SINGLE;
else if (!stricmp(opt, "START"))
type = BW_START;
else if (!stricmp(opt, "END"))
type = BW_END;
if (type != BW_ANY)
*pos = 0;
}
}
for (bw = ci->badwords, i = 0; i < ci->bwcount; bw++, i++) {
if (bw->word && ((BSCaseSensitive && (!strcmp(bw->word, word)))
|| (!BSCaseSensitive
&& (!stricmp(bw->word, word))))) {
notice_lang(s_BotServ, u, BOT_BADWORDS_ALREADY_EXISTS,
bw->word, ci->name);
return MOD_CONT;
}
}
for (bw = ci->badwords, i = 0; i < ci->bwcount; bw++, i++) {
if (bw->word && ((BSCaseSensitive && (!strcmp(bw->word, word)))
|| (!BSCaseSensitive
&& (!stricmp(bw->word, word))))) {
notice_lang(s_BotServ, u, BOT_BADWORDS_ALREADY_EXISTS,
bw->word, ci->name);
return MOD_CONT;
}
}
for (i = 0; i < ci->bwcount; i++) {
if (!ci->badwords[i].in_use)
break;
}
if (i == ci->bwcount) {
if (i < BSBadWordsMax) {
ci->bwcount++;
ci->badwords =
(BadWord *)srealloc(ci->badwords, sizeof(BadWord) * ci->bwcount);
} else {
notice_lang(s_BotServ, u, BOT_BADWORDS_REACHED_LIMIT,
BSBadWordsMax);
return MOD_CONT;
}
}
bw = &ci->badwords[i];
bw->in_use = 1;
bw->word = sstrdup(word);
bw->type = type;
for (i = 0; i < ci->bwcount; i++) {
if (!ci->badwords[i].in_use)
break;
}
if (i == ci->bwcount) {
if (i < BSBadWordsMax) {
ci->bwcount++;
ci->badwords =
(BadWord *)srealloc(ci->badwords, sizeof(BadWord) * ci->bwcount);
} else {
notice_lang(s_BotServ, u, BOT_BADWORDS_REACHED_LIMIT,
BSBadWordsMax);
return MOD_CONT;
}
}
bw = &ci->badwords[i];
bw->in_use = 1;
bw->word = sstrdup(word);
bw->type = type;
notice_lang(s_BotServ, u, BOT_BADWORDS_ADDED, bw->word, ci->name);
notice_lang(s_BotServ, u, BOT_BADWORDS_ADDED, bw->word, ci->name);
} else if (stricmp(cmd, "DEL") == 0) {
int deleted = 0, a, b;
} else if (stricmp(cmd, "DEL") == 0) {
int deleted = 0, a, b;
if (readonly) {
notice_lang(s_BotServ, u, BOT_BADWORDS_DISABLED);
return MOD_CONT;
}
if (readonly) {
notice_lang(s_BotServ, u, BOT_BADWORDS_DISABLED);
return MOD_CONT;
}
/* Special case: is it a number/list? Only do search if it isn't. */
if (isdigit(*word) && strspn(word, "1234567890,-") == strlen(word)) {
int count, last = -1;
deleted =
process_numlist(word, &count, badwords_del_callback, u, ci,
&last);
if (!deleted) {
if (count == 1) {
notice_lang(s_BotServ, u, BOT_BADWORDS_NO_SUCH_ENTRY,
last, ci->name);
} else {
notice_lang(s_BotServ, u, BOT_BADWORDS_NO_MATCH,
ci->name);
}
} else if (deleted == 1) {
notice_lang(s_BotServ, u, BOT_BADWORDS_DELETED_ONE,
ci->name);
} else {
notice_lang(s_BotServ, u, BOT_BADWORDS_DELETED_SEVERAL,
deleted, ci->name);
}
} else {
for (i = 0; i < ci->bwcount; i++) {
if (ci->badwords[i].in_use
&& !stricmp(ci->badwords[i].word, word))
break;
}
if (i == ci->bwcount) {
notice_lang(s_BotServ, u, BOT_BADWORDS_NOT_FOUND, word,
chan);
return MOD_CONT;
}
bw = &ci->badwords[i];
notice_lang(s_BotServ, u, BOT_BADWORDS_DELETED, bw->word,
ci->name);
if (bw->word)
free(bw->word);
bw->word = NULL;
bw->in_use = 0;
deleted = 1;
}
/* Special case: is it a number/list? Only do search if it isn't. */
if (isdigit(*word) && strspn(word, "1234567890,-") == strlen(word)) {
int count, last = -1;
deleted =
process_numlist(word, &count, badwords_del_callback, u, ci,
&last);
if (!deleted) {
if (count == 1) {
notice_lang(s_BotServ, u, BOT_BADWORDS_NO_SUCH_ENTRY,
last, ci->name);
} else {
notice_lang(s_BotServ, u, BOT_BADWORDS_NO_MATCH,
ci->name);
}
} else if (deleted == 1) {
notice_lang(s_BotServ, u, BOT_BADWORDS_DELETED_ONE,
ci->name);
} else {
notice_lang(s_BotServ, u, BOT_BADWORDS_DELETED_SEVERAL,
deleted, ci->name);
}
} else {
for (i = 0; i < ci->bwcount; i++) {
if (ci->badwords[i].in_use
&& !stricmp(ci->badwords[i].word, word))
break;
}
if (i == ci->bwcount) {
notice_lang(s_BotServ, u, BOT_BADWORDS_NOT_FOUND, word,
chan);
return MOD_CONT;
}
bw = &ci->badwords[i];
notice_lang(s_BotServ, u, BOT_BADWORDS_DELETED, bw->word,
ci->name);
if (bw->word)
free(bw->word);
bw->word = NULL;
bw->in_use = 0;
deleted = 1;
}
if (deleted) {
/* Reordering - DrStein */
for (b = 0; b < ci->bwcount; b++) {
if (ci->badwords[b].in_use) {
for (a = 0; a < ci->bwcount; a++) {
if (a > b)
break;
if (!(ci->badwords[a].in_use)) {
ci->badwords[a].in_use = ci->badwords[b].in_use;
ci->badwords[a].type = ci->badwords[b].type;
if (ci->badwords[b].word) {
ci->badwords[a].word = sstrdup(ci->badwords[b].word);
free(ci->badwords[b].word);
}
ci->badwords[b].word = NULL;
ci->badwords[b].in_use = 0;
break;
}
}
}
}
/* After reordering only the entries at the end could still be empty.
* We ll free the places no longer in use... - Viper */
for (i = ci->bwcount - 1; i >= 0; i--) {
if (ci->badwords[i].in_use)
break;
ci->bwcount--;
}
ci->badwords =
(BadWord *)srealloc(ci->badwords,sizeof(BadWord) * ci->bwcount);
}
if (deleted) {
/* Reordering - DrStein */
for (b = 0; b < ci->bwcount; b++) {
if (ci->badwords[b].in_use) {
for (a = 0; a < ci->bwcount; a++) {
if (a > b)
break;
if (!(ci->badwords[a].in_use)) {
ci->badwords[a].in_use = ci->badwords[b].in_use;
ci->badwords[a].type = ci->badwords[b].type;
if (ci->badwords[b].word) {
ci->badwords[a].word = sstrdup(ci->badwords[b].word);
free(ci->badwords[b].word);
}
ci->badwords[b].word = NULL;
ci->badwords[b].in_use = 0;
break;
}
}
}
}
/* After reordering only the entries at the end could still be empty.
* We ll free the places no longer in use... - Viper */
for (i = ci->bwcount - 1; i >= 0; i--) {
if (ci->badwords[i].in_use)
break;
ci->bwcount--;
}
ci->badwords =
(BadWord *)srealloc(ci->badwords,sizeof(BadWord) * ci->bwcount);
}
} else if (stricmp(cmd, "LIST") == 0) {
int sent_header = 0;
} else if (stricmp(cmd, "LIST") == 0) {
int sent_header = 0;
if (ci->bwcount == 0) {
notice_lang(s_BotServ, u, BOT_BADWORDS_LIST_EMPTY, chan);
return MOD_CONT;
}
if (word && strspn(word, "1234567890,-") == strlen(word)) {
process_numlist(word, NULL, badwords_list_callback, u, ci,
&sent_header);
} else {
for (i = 0; i < ci->bwcount; i++) {
if (!(ci->badwords[i].in_use))
continue;
if (word && ci->badwords[i].word
&& !match_wild_nocase(word, ci->badwords[i].word))
continue;
badwords_list(u, i, ci, &sent_header);
}
}
if (!sent_header)
notice_lang(s_BotServ, u, BOT_BADWORDS_NO_MATCH, chan);
if (ci->bwcount == 0) {
notice_lang(s_BotServ, u, BOT_BADWORDS_LIST_EMPTY, chan);
return MOD_CONT;
}
if (word && strspn(word, "1234567890,-") == strlen(word)) {
process_numlist(word, NULL, badwords_list_callback, u, ci,
&sent_header);
} else {
for (i = 0; i < ci->bwcount; i++) {
if (!(ci->badwords[i].in_use))
continue;
if (word && ci->badwords[i].word
&& !match_wild_nocase(word, ci->badwords[i].word))
continue;
badwords_list(u, i, ci, &sent_header);
}
}
if (!sent_header)
notice_lang(s_BotServ, u, BOT_BADWORDS_NO_MATCH, chan);
} else if (stricmp(cmd, "CLEAR") == 0) {
} else if (stricmp(cmd, "CLEAR") == 0) {
if (readonly) {
notice_lang(s_BotServ, u, BOT_BADWORDS_DISABLED);
return MOD_CONT;
}
if (readonly) {
notice_lang(s_BotServ, u, BOT_BADWORDS_DISABLED);
return MOD_CONT;
}
for (i = 0; i < ci->bwcount; i++)
if (ci->badwords[i].word)
free(ci->badwords[i].word);
for (i = 0; i < ci->bwcount; i++)
if (ci->badwords[i].word)
free(ci->badwords[i].word);
free(ci->badwords);
ci->badwords = NULL;
ci->bwcount = 0;
free(ci->badwords);
ci->badwords = NULL;
ci->bwcount = 0;
notice_lang(s_BotServ, u, BOT_BADWORDS_CLEAR);
notice_lang(s_BotServ, u, BOT_BADWORDS_CLEAR);
} else {
syntax_error(s_BotServ, u, "BADWORDS", BOT_BADWORDS_SYNTAX);
}
return MOD_CONT;
} else {
syntax_error(s_BotServ, u, "BADWORDS", BOT_BADWORDS_SYNTAX);
}
return MOD_CONT;
}
int badwords_del_callback(User * u, int num, va_list args)
{
BadWord *bw;
ChannelInfo *ci = va_arg(args, ChannelInfo *);
int *last = va_arg(args, int *);
BadWord *bw;
ChannelInfo *ci = va_arg(args, ChannelInfo *);
int *last = va_arg(args, int *);
*last = num;
*last = num;
if (num < 1 || num > ci->bwcount)
return 0;
if (num < 1 || num > ci->bwcount)
return 0;
bw = &ci->badwords[num - 1];
if (bw->word)
free(bw->word);
bw->word = NULL;
bw->in_use = 0;
bw = &ci->badwords[num - 1];
if (bw->word)
free(bw->word);
bw->word = NULL;
bw->in_use = 0;
return 1;
return 1;
}
int badwords_list(User * u, int index, ChannelInfo * ci, int *sent_header)
{
BadWord *bw = &ci->badwords[index];
BadWord *bw = &ci->badwords[index];
if (!bw->in_use)
return 0;
if (!*sent_header) {
notice_lang(s_BotServ, u, BOT_BADWORDS_LIST_HEADER, ci->name);
*sent_header = 1;
}
if (!bw->in_use)
return 0;
if (!*sent_header) {
notice_lang(s_BotServ, u, BOT_BADWORDS_LIST_HEADER, ci->name);
*sent_header = 1;
}
notice_lang(s_BotServ, u, BOT_BADWORDS_LIST_FORMAT, index + 1,
bw->word,
((bw->type ==
BW_SINGLE) ? "(SINGLE)" : ((bw->type ==
BW_START) ? "(START)"
: ((bw->type ==
BW_END) ? "(END)" : "")))
);
return 1;
notice_lang(s_BotServ, u, BOT_BADWORDS_LIST_FORMAT, index + 1,
bw->word,
((bw->type ==
BW_SINGLE) ? "(SINGLE)" : ((bw->type ==
BW_START) ? "(START)"
: ((bw->type ==
BW_END) ? "(END)" : "")))
);
return 1;
}
int badwords_list_callback(User * u, int num, va_list args)
{
ChannelInfo *ci = va_arg(args, ChannelInfo *);
int *sent_header = va_arg(args, int *);
if (num < 1 || num > ci->bwcount)
return 0;
return badwords_list(u, num - 1, ci, sent_header);
ChannelInfo *ci = va_arg(args, ChannelInfo *);
int *sent_header = va_arg(args, int *);
if (num < 1 || num > ci->bwcount)
return 0;
return badwords_list(u, num - 1, ci, sent_header);
}
MODULE_INIT("bs_badwords", BSBadwords)
+4 -4
View File
@@ -43,9 +43,9 @@ class BSBot : public Module
**/
void myBotServHelp(User * u)
{
if (is_services_admin(u)) {
notice_lang(s_BotServ, u, BOT_HELP_CMD_BOT);
}
if (is_services_admin(u)) {
notice_lang(s_BotServ, u, BOT_HELP_CMD_BOT);
}
}
/**
@@ -61,7 +61,7 @@ int do_bot(User * u)
if (!cmd)
{
syntax_error(s_BotServ, u, "BOT", BOT_BOT_SYNTAX);
syntax_error(s_BotServ, u, "BOT", BOT_BOT_SYNTAX);
return MOD_CONT;
}
+35 -35
View File
@@ -42,7 +42,7 @@ class BSBotList : public Module
**/
void myBotServHelp(User * u)
{
notice_lang(s_BotServ, u, BOT_HELP_CMD_BOTLIST);
notice_lang(s_BotServ, u, BOT_HELP_CMD_BOTLIST);
}
/**
@@ -52,45 +52,45 @@ void myBotServHelp(User * u)
**/
int do_botlist(User * u)
{
int i, count = 0;
BotInfo *bi;
int i, count = 0;
BotInfo *bi;
if (!nbots) {
notice_lang(s_BotServ, u, BOT_BOTLIST_EMPTY);
return MOD_CONT;
}
if (!nbots) {
notice_lang(s_BotServ, u, BOT_BOTLIST_EMPTY);
return MOD_CONT;
}
for (i = 0; i < 256; i++) {
for (bi = botlists[i]; bi; bi = bi->next) {
if (!(bi->flags & BI_PRIVATE)) {
if (!count)
notice_lang(s_BotServ, u, BOT_BOTLIST_HEADER);
count++;
notice_user(s_BotServ, u, " %-15s (%s@%s)", bi->nick,
bi->user, bi->host);
}
}
}
for (i = 0; i < 256; i++) {
for (bi = botlists[i]; bi; bi = bi->next) {
if (!(bi->flags & BI_PRIVATE)) {
if (!count)
notice_lang(s_BotServ, u, BOT_BOTLIST_HEADER);
count++;
notice_user(s_BotServ, u, " %-15s (%s@%s)", bi->nick,
bi->user, bi->host);
}
}
}
if (is_oper(u) && count < nbots) {
notice_lang(s_BotServ, u, BOT_BOTLIST_PRIVATE_HEADER);
if (is_oper(u) && count < nbots) {
notice_lang(s_BotServ, u, BOT_BOTLIST_PRIVATE_HEADER);
for (i = 0; i < 256; i++) {
for (bi = botlists[i]; bi; bi = bi->next) {
if (bi->flags & BI_PRIVATE) {
notice_user(s_BotServ, u, " %-15s (%s@%s)",
bi->nick, bi->user, bi->host);
count++;
}
}
}
}
for (i = 0; i < 256; i++) {
for (bi = botlists[i]; bi; bi = bi->next) {
if (bi->flags & BI_PRIVATE) {
notice_user(s_BotServ, u, " %-15s (%s@%s)",
bi->nick, bi->user, bi->host);
count++;
}
}
}
}
if (!count)
notice_lang(s_BotServ, u, BOT_BOTLIST_EMPTY);
else
notice_lang(s_BotServ, u, BOT_BOTLIST_FOOTER, count);
return MOD_CONT;
if (!count)
notice_lang(s_BotServ, u, BOT_BOTLIST_EMPTY);
else
notice_lang(s_BotServ, u, BOT_BOTLIST_FOOTER, count);
return MOD_CONT;
}
MODULE_INIT("bs_botlist", BSBotList)
+29 -29
View File
@@ -48,40 +48,40 @@ void AnopeFini(void)
**/
int do_fantasy(int argc, char **argv)
{
User *u;
ChannelInfo *ci;
CSModeUtil *util = csmodeutils;
char *target;
User *u;
ChannelInfo *ci;
CSModeUtil *util = csmodeutils;
char *target;
if (argc < 3)
return MOD_CONT;
if (argc < 3)
return MOD_CONT;
do {
if (stricmp(argv[0], util->bsname) == 0) {
/* This could have been moved to its own module
however it would require more coding to handle the pass holders
similar to how PROTECT is done
*/
if (!ircd->halfop) {
if (!stricmp(argv[0], "halfop") || !stricmp(argv[0], "dehalfop")) {
return MOD_CONT;
}
}
u = finduser(argv[1]);
ci = cs_findchan(argv[2]);
if (!u || !ci)
return MOD_CONT;
do {
if (stricmp(argv[0], util->bsname) == 0) {
/* This could have been moved to its own module
however it would require more coding to handle the pass holders
similar to how PROTECT is done
*/
if (!ircd->halfop) {
if (!stricmp(argv[0], "halfop") || !stricmp(argv[0], "dehalfop")) {
return MOD_CONT;
}
}
u = finduser(argv[1]);
ci = cs_findchan(argv[2]);
if (!u || !ci)
return MOD_CONT;
target = ((argc == 4) ? argv[3] : NULL);
target = ((argc == 4) ? argv[3] : NULL);
if (!target && check_access(u, ci, util->levelself))
bot_raw_mode(u, ci, util->mode, u->nick);
else if (target && check_access(u, ci, util->level))
bot_raw_mode(u, ci, util->mode, target);
}
} while ((++util)->name != NULL);
if (!target && check_access(u, ci, util->levelself))
bot_raw_mode(u, ci, util->mode, u->nick);
else if (target && check_access(u, ci, util->level))
bot_raw_mode(u, ci, util->mode, target);
}
} while ((++util)->name != NULL);
return MOD_CONT;
return MOD_CONT;
}
MODULE_INIT("bs_fantasy", BSFantasy)
+36 -36
View File
@@ -41,47 +41,47 @@ class BSFantasyKick : public Module
**/
int do_fantasy(int argc, char **argv)
{
User *u, *u2;
ChannelInfo *ci;
char *target = NULL;
char *reason = NULL;
User *u, *u2;
ChannelInfo *ci;
char *target = NULL;
char *reason = NULL;
if (argc < 3)
return MOD_CONT;
if (argc < 3)
return MOD_CONT;
if ((stricmp(argv[0], "kick") == 0) || (stricmp(argv[0], "k") == 0)) {
u = finduser(argv[1]);
ci = cs_findchan(argv[2]);
if (!u || !ci)
return MOD_CONT;
if ((stricmp(argv[0], "kick") == 0) || (stricmp(argv[0], "k") == 0)) {
u = finduser(argv[1]);
ci = cs_findchan(argv[2]);
if (!u || !ci)
return MOD_CONT;
if (argc >= 4) {
target = myStrGetToken(argv[3], ' ', 0);
reason = myStrGetTokenRemainder(argv[3], ' ', 1);
}
if (!target && check_access(u, ci, CA_KICKME)) {
bot_raw_kick(u, ci, u->nick, "Requested");
} else if (target && check_access(u, ci, CA_KICK)) {
if (!stricmp(target, ci->bi->nick))
bot_raw_kick(u, ci, u->nick, "Oops!");
else {
u2 = finduser(target);
if (u2 && ci->c && is_on_chan(ci->c, u2)) {
if (!reason && !is_protected(u2))
bot_raw_kick(u, ci, target, "Requested");
else if (!is_protected(u2))
bot_raw_kick(u, ci, target, reason);
}
}
}
}
if (argc >= 4) {
target = myStrGetToken(argv[3], ' ', 0);
reason = myStrGetTokenRemainder(argv[3], ' ', 1);
}
if (!target && check_access(u, ci, CA_KICKME)) {
bot_raw_kick(u, ci, u->nick, "Requested");
} else if (target && check_access(u, ci, CA_KICK)) {
if (!stricmp(target, ci->bi->nick))
bot_raw_kick(u, ci, u->nick, "Oops!");
else {
u2 = finduser(target);
if (u2 && ci->c && is_on_chan(ci->c, u2)) {
if (!reason && !is_protected(u2))
bot_raw_kick(u, ci, target, "Requested");
else if (!is_protected(u2))
bot_raw_kick(u, ci, target, reason);
}
}
}
}
if (target)
free(target);
if (reason)
free(reason);
if (target)
free(target);
if (reason)
free(reason);
return MOD_CONT;
return MOD_CONT;
}
MODULE_INIT("bs_fantasy_kick", BSFantasyKick)
+37 -37
View File
@@ -42,48 +42,48 @@ class BSFantasyKickBan : public Module
**/
int do_fantasy(int argc, char **argv)
{
User *u, *u2;
ChannelInfo *ci;
char *target = NULL;
char *reason = NULL;
User *u, *u2;
ChannelInfo *ci;
char *target = NULL;
char *reason = NULL;
if (argc < 3)
return MOD_CONT;
if (argc < 3)
return MOD_CONT;
if ((stricmp(argv[0], "kickban") == 0)
|| (stricmp(argv[0], "kb") == 0)) {
u = finduser(argv[1]);
ci = cs_findchan(argv[2]);
if (!u || !ci)
return MOD_CONT;
if ((stricmp(argv[0], "kickban") == 0)
|| (stricmp(argv[0], "kb") == 0)) {
u = finduser(argv[1]);
ci = cs_findchan(argv[2]);
if (!u || !ci)
return MOD_CONT;
if (argc >= 4) {
target = myStrGetToken(argv[3], ' ', 0);
reason = myStrGetTokenRemainder(argv[3], ' ', 1);
}
if (!target && check_access(u, ci, CA_BANME)) {
bot_raw_ban(u, ci, u->nick, "Requested");
} else if (target && check_access(u, ci, CA_BAN)) {
if (stricmp(target, ci->bi->nick) == 0) {
bot_raw_ban(u, ci, u->nick, "Oops!");
} else {
u2 = finduser(target);
if (u2 && ci->c && is_on_chan(ci->c, u2)) {
if (!reason && !is_protected(u2))
bot_raw_ban(u, ci, target, "Requested");
else if (!is_protected(u2))
bot_raw_ban(u, ci, target, reason);
}
}
}
}
if (argc >= 4) {
target = myStrGetToken(argv[3], ' ', 0);
reason = myStrGetTokenRemainder(argv[3], ' ', 1);
}
if (!target && check_access(u, ci, CA_BANME)) {
bot_raw_ban(u, ci, u->nick, "Requested");
} else if (target && check_access(u, ci, CA_BAN)) {
if (stricmp(target, ci->bi->nick) == 0) {
bot_raw_ban(u, ci, u->nick, "Oops!");
} else {
u2 = finduser(target);
if (u2 && ci->c && is_on_chan(ci->c, u2)) {
if (!reason && !is_protected(u2))
bot_raw_ban(u, ci, target, "Requested");
else if (!is_protected(u2))
bot_raw_ban(u, ci, target, reason);
}
}
}
}
if (target)
free(target);
if (reason)
free(reason);
if (target)
free(target);
if (reason)
free(reason);
return MOD_CONT;
return MOD_CONT;
}
MODULE_INIT("bs_fantasy_kickban", BSFantasyKickBan)
+20 -20
View File
@@ -48,31 +48,31 @@ class BSFantasyOwner : public Module
**/
int do_fantasy(int argc, char **argv)
{
User *u;
ChannelInfo *ci;
User *u;
ChannelInfo *ci;
if (argc < 3)
return MOD_CONT;
if (argc < 3)
return MOD_CONT;
if (stricmp(argv[0], "deowner") == 0) {
u = finduser(argv[1]);
ci = cs_findchan(argv[2]);
if (!u || !ci)
return MOD_CONT;
if (stricmp(argv[0], "deowner") == 0) {
u = finduser(argv[1]);
ci = cs_findchan(argv[2]);
if (!u || !ci)
return MOD_CONT;
if (is_founder(u, ci))
bot_raw_mode(u, ci, ircd->ownerunset, u->nick);
} else if (stricmp(argv[0], "owner") == 0) {
u = finduser(argv[1]);
ci = cs_findchan(argv[2]);
if (!u || !ci)
return MOD_CONT;
if (is_founder(u, ci))
bot_raw_mode(u, ci, ircd->ownerunset, u->nick);
} else if (stricmp(argv[0], "owner") == 0) {
u = finduser(argv[1]);
ci = cs_findchan(argv[2]);
if (!u || !ci)
return MOD_CONT;
if (is_founder(u, ci))
bot_raw_mode(u, ci, ircd->ownerset, u->nick);
}
if (is_founder(u, ci))
bot_raw_mode(u, ci, ircd->ownerset, u->nick);
}
return MOD_CONT;
return MOD_CONT;
}
MODULE_INIT("bs_fantasy_owner", BSFantasyOwner)
+76 -76
View File
@@ -49,88 +49,88 @@ void AnopeFini(void)
**/
int do_fantasy(int argc, char **argv)
{
User *u;
ChannelInfo *ci;
User *u2;
NickAlias *na;
ChanAccess *access;
char buf[BUFSIZE];
char *target = NULL;
User *u;
ChannelInfo *ci;
User *u2;
NickAlias *na;
ChanAccess *access;
char buf[BUFSIZE];
char *target = NULL;
if (argc < 4)
return MOD_CONT;
if (argc < 4)
return MOD_CONT;
if (stricmp(argv[0], "seen") == 0) {
u = finduser(argv[1]);
ci = cs_findchan(argv[2]);
if (!u || !ci)
return MOD_CONT;
if (stricmp(argv[0], "seen") == 0) {
u = finduser(argv[1]);
ci = cs_findchan(argv[2]);
if (!u || !ci)
return MOD_CONT;
target = myStrGetToken(argv[3], ' ', 0);
target = myStrGetToken(argv[3], ' ', 0);
if (stricmp(ci->bi->nick, target) == 0) {
/* If we look for the bot */
snprintf(buf, sizeof(buf), getstring(u->na, BOT_SEEN_BOT),
u->nick);
ircdproto->SendPrivmsg(ci->bi, ci->name, "%s", buf);
} else if (!(na = findnick(target)) || (na->status & NS_VERBOTEN)) {
/* If the nick is not registered or forbidden */
snprintf(buf, sizeof(buf), getstring(u->na, BOT_SEEN_UNKNOWN),
target);
ircdproto->SendPrivmsg(ci->bi, ci->name, "%s", buf);
} else if ((u2 = nc_on_chan(ci->c, na->nc))) {
/* If the nick we're looking for is on the channel,
* there are three possibilities: it's yourself,
* it's the nick we look for, it's an alias of the
* nick we look for.
*/
if (u == u2 || (u->na && u->na->nc == na->nc))
snprintf(buf, sizeof(buf), getstring(u->na, BOT_SEEN_YOU),
u->nick);
else if (!stricmp(u2->nick, target))
snprintf(buf, sizeof(buf),
getstring(u->na, BOT_SEEN_ON_CHANNEL), u2->nick);
else
snprintf(buf, sizeof(buf),
getstring(u->na, BOT_SEEN_ON_CHANNEL_AS), target,
u2->nick);
if (stricmp(ci->bi->nick, target) == 0) {
/* If we look for the bot */
snprintf(buf, sizeof(buf), getstring(u->na, BOT_SEEN_BOT),
u->nick);
ircdproto->SendPrivmsg(ci->bi, ci->name, "%s", buf);
} else if (!(na = findnick(target)) || (na->status & NS_VERBOTEN)) {
/* If the nick is not registered or forbidden */
snprintf(buf, sizeof(buf), getstring(u->na, BOT_SEEN_UNKNOWN),
target);
ircdproto->SendPrivmsg(ci->bi, ci->name, "%s", buf);
} else if ((u2 = nc_on_chan(ci->c, na->nc))) {
/* If the nick we're looking for is on the channel,
* there are three possibilities: it's yourself,
* it's the nick we look for, it's an alias of the
* nick we look for.
*/
if (u == u2 || (u->na && u->na->nc == na->nc))
snprintf(buf, sizeof(buf), getstring(u->na, BOT_SEEN_YOU),
u->nick);
else if (!stricmp(u2->nick, target))
snprintf(buf, sizeof(buf),
getstring(u->na, BOT_SEEN_ON_CHANNEL), u2->nick);
else
snprintf(buf, sizeof(buf),
getstring(u->na, BOT_SEEN_ON_CHANNEL_AS), target,
u2->nick);
ircdproto->SendPrivmsg(ci->bi, ci->name, "%s", buf);
} else if ((access = get_access_entry(na->nc, ci))) {
/* User is on the access list but not present actually.
Special case: if access->last_seen is 0 it's that we
never seen the user.
*/
if (access->last_seen) {
char durastr[192];
duration(u->na, durastr, sizeof(durastr),
time(NULL) - access->last_seen);
snprintf(buf, sizeof(buf), getstring(u->na, BOT_SEEN_ON),
target, durastr);
} else {
snprintf(buf, sizeof(buf),
getstring(u->na, BOT_SEEN_NEVER), target);
}
ircdproto->SendPrivmsg(ci->bi, ci->name, "%s", buf);
} else if (na->nc == ci->founder) {
/* User is the founder of the channel */
char durastr[192];
duration(u->na, durastr, sizeof(durastr),
time(NULL) - na->last_seen);
snprintf(buf, sizeof(buf), getstring(u->na, BOT_SEEN_ON),
target, durastr);
ircdproto->SendPrivmsg(ci->bi, ci->name, "%s", buf);
} else {
/* All other cases */
snprintf(buf, sizeof(buf), getstring(u->na, BOT_SEEN_UNKNOWN),
target);
ircdproto->SendPrivmsg(ci->bi, ci->name, "%s", buf);
}
/* free myStrGetToken(ed) variable target (#851) */
Anope_Free(target);
}
ircdproto->SendPrivmsg(ci->bi, ci->name, "%s", buf);
} else if ((access = get_access_entry(na->nc, ci))) {
/* User is on the access list but not present actually.
Special case: if access->last_seen is 0 it's that we
never seen the user.
*/
if (access->last_seen) {
char durastr[192];
duration(u->na, durastr, sizeof(durastr),
time(NULL) - access->last_seen);
snprintf(buf, sizeof(buf), getstring(u->na, BOT_SEEN_ON),
target, durastr);
} else {
snprintf(buf, sizeof(buf),
getstring(u->na, BOT_SEEN_NEVER), target);
}
ircdproto->SendPrivmsg(ci->bi, ci->name, "%s", buf);
} else if (na->nc == ci->founder) {
/* User is the founder of the channel */
char durastr[192];
duration(u->na, durastr, sizeof(durastr),
time(NULL) - na->last_seen);
snprintf(buf, sizeof(buf), getstring(u->na, BOT_SEEN_ON),
target, durastr);
ircdproto->SendPrivmsg(ci->bi, ci->name, "%s", buf);
} else {
/* All other cases */
snprintf(buf, sizeof(buf), getstring(u->na, BOT_SEEN_UNKNOWN),
target);
ircdproto->SendPrivmsg(ci->bi, ci->name, "%s", buf);
}
/* free myStrGetToken(ed) variable target (#851) */
Anope_Free(target);
}
return MOD_CONT;
return MOD_CONT;
}
MODULE_INIT("bs_fantasy_seen", BSFantasySeen)
+9 -9
View File
@@ -40,16 +40,16 @@ class BSHelp : public Module
**/
int do_help(User * u)
{
char *cmd = strtok(NULL, "");
char *cmd = strtok(NULL, "");
if (!cmd) {
notice_help(s_BotServ, u, BOT_HELP);
moduleDisplayHelp(4, u);
notice_help(s_BotServ, u, BOT_HELP_FOOTER, BSMinUsers);
} else {
mod_help_cmd(s_BotServ, u, BOTSERV, cmd);
}
return MOD_CONT;
if (!cmd) {
notice_help(s_BotServ, u, BOT_HELP);
moduleDisplayHelp(4, u);
notice_help(s_BotServ, u, BOT_HELP_FOOTER, BSMinUsers);
} else {
mod_help_cmd(s_BotServ, u, BOTSERV, cmd);
}
return MOD_CONT;
}
MODULE_INIT("bs_help", BSHelp)
+197 -197
View File
@@ -43,7 +43,7 @@ class BSInfo : public Module
**/
void myBotServHelp(User * u)
{
notice_lang(s_BotServ, u, BOT_HELP_CMD_INFO);
notice_lang(s_BotServ, u, BOT_HELP_CMD_INFO);
}
/**
@@ -53,217 +53,217 @@ void myBotServHelp(User * u)
**/
int do_info(User * u)
{
BotInfo *bi;
ChannelInfo *ci;
char *query = strtok(NULL, " ");
BotInfo *bi;
ChannelInfo *ci;
char *query = strtok(NULL, " ");
int need_comma = 0, is_servadmin = is_services_admin(u);
char buf[BUFSIZE], *end;
const char *commastr = getstring(u->na, COMMA_SPACE);
int need_comma = 0, is_servadmin = is_services_admin(u);
char buf[BUFSIZE], *end;
const char *commastr = getstring(u->na, COMMA_SPACE);
if (!query)
syntax_error(s_BotServ, u, "INFO", BOT_INFO_SYNTAX);
else if ((bi = findbot(query))) {
struct tm *tm;
if (!query)
syntax_error(s_BotServ, u, "INFO", BOT_INFO_SYNTAX);
else if ((bi = findbot(query))) {
struct tm *tm;
notice_lang(s_BotServ, u, BOT_INFO_BOT_HEADER, bi->nick);
notice_lang(s_BotServ, u, BOT_INFO_BOT_MASK, bi->user, bi->host);
notice_lang(s_BotServ, u, BOT_INFO_BOT_REALNAME, bi->real);
tm = localtime(&bi->created);
strftime_lang(buf, sizeof(buf), u, STRFTIME_DATE_TIME_FORMAT, tm);
notice_lang(s_BotServ, u, BOT_INFO_BOT_CREATED, buf);
notice_lang(s_BotServ, u, BOT_INFO_BOT_OPTIONS,
getstring(u->na,
(bi->
flags & BI_PRIVATE) ? BOT_INFO_OPT_PRIVATE :
BOT_INFO_OPT_NONE));
notice_lang(s_BotServ, u, BOT_INFO_BOT_USAGE, bi->chancount);
notice_lang(s_BotServ, u, BOT_INFO_BOT_HEADER, bi->nick);
notice_lang(s_BotServ, u, BOT_INFO_BOT_MASK, bi->user, bi->host);
notice_lang(s_BotServ, u, BOT_INFO_BOT_REALNAME, bi->real);
tm = localtime(&bi->created);
strftime_lang(buf, sizeof(buf), u, STRFTIME_DATE_TIME_FORMAT, tm);
notice_lang(s_BotServ, u, BOT_INFO_BOT_CREATED, buf);
notice_lang(s_BotServ, u, BOT_INFO_BOT_OPTIONS,
getstring(u->na,
(bi->
flags & BI_PRIVATE) ? BOT_INFO_OPT_PRIVATE :
BOT_INFO_OPT_NONE));
notice_lang(s_BotServ, u, BOT_INFO_BOT_USAGE, bi->chancount);
if (is_services_admin(u))
send_bot_channels(u, bi);
} else if ((ci = cs_findchan(query))) {
if (!is_servadmin && !is_founder(u, ci)) {
notice_lang(s_BotServ, u, PERMISSION_DENIED);
return MOD_CONT;
}
if (ci->flags & CI_VERBOTEN) {
notice_lang(s_BotServ, u, CHAN_X_FORBIDDEN, query);
return MOD_CONT;
}
if (is_services_admin(u))
send_bot_channels(u, bi);
} else if ((ci = cs_findchan(query))) {
if (!is_servadmin && !is_founder(u, ci)) {
notice_lang(s_BotServ, u, PERMISSION_DENIED);
return MOD_CONT;
}
if (ci->flags & CI_VERBOTEN) {
notice_lang(s_BotServ, u, CHAN_X_FORBIDDEN, query);
return MOD_CONT;
}
notice_lang(s_BotServ, u, BOT_INFO_CHAN_HEADER, ci->name);
if (ci->bi)
notice_lang(s_BotServ, u, BOT_INFO_CHAN_BOT, ci->bi->nick);
else
notice_lang(s_BotServ, u, BOT_INFO_CHAN_BOT_NONE);
notice_lang(s_BotServ, u, BOT_INFO_CHAN_HEADER, ci->name);
if (ci->bi)
notice_lang(s_BotServ, u, BOT_INFO_CHAN_BOT, ci->bi->nick);
else
notice_lang(s_BotServ, u, BOT_INFO_CHAN_BOT_NONE);
if (ci->botflags & BS_KICK_BADWORDS) {
if (ci->ttb[TTB_BADWORDS])
notice_lang(s_BotServ, u, BOT_INFO_CHAN_KICK_BADWORDS_BAN,
getstring(u->na, BOT_INFO_ACTIVE),
ci->ttb[TTB_BADWORDS]);
else
notice_lang(s_BotServ, u, BOT_INFO_CHAN_KICK_BADWORDS,
getstring(u->na, BOT_INFO_ACTIVE));
} else
notice_lang(s_BotServ, u, BOT_INFO_CHAN_KICK_BADWORDS,
getstring(u->na, BOT_INFO_INACTIVE));
if (ci->botflags & BS_KICK_BOLDS) {
if (ci->ttb[TTB_BOLDS])
notice_lang(s_BotServ, u, BOT_INFO_CHAN_KICK_BOLDS_BAN,
getstring(u->na, BOT_INFO_ACTIVE),
ci->ttb[TTB_BOLDS]);
else
notice_lang(s_BotServ, u, BOT_INFO_CHAN_KICK_BOLDS,
getstring(u->na, BOT_INFO_ACTIVE));
} else
notice_lang(s_BotServ, u, BOT_INFO_CHAN_KICK_BOLDS,
getstring(u->na, BOT_INFO_INACTIVE));
if (ci->botflags & BS_KICK_CAPS) {
if (ci->ttb[TTB_CAPS])
notice_lang(s_BotServ, u, BOT_INFO_CHAN_KICK_CAPS_BAN,
getstring(u->na, BOT_INFO_ACTIVE),
ci->ttb[TTB_CAPS], ci->capsmin,
ci->capspercent);
else
notice_lang(s_BotServ, u, BOT_INFO_CHAN_KICK_CAPS_ON,
getstring(u->na, BOT_INFO_ACTIVE), ci->capsmin,
ci->capspercent);
} else
notice_lang(s_BotServ, u, BOT_INFO_CHAN_KICK_CAPS_OFF,
getstring(u->na, BOT_INFO_INACTIVE));
if (ci->botflags & BS_KICK_COLORS) {
if (ci->ttb[TTB_COLORS])
notice_lang(s_BotServ, u, BOT_INFO_CHAN_KICK_COLORS_BAN,
getstring(u->na, BOT_INFO_ACTIVE),
ci->ttb[TTB_COLORS]);
else
notice_lang(s_BotServ, u, BOT_INFO_CHAN_KICK_COLORS,
getstring(u->na, BOT_INFO_ACTIVE));
} else
notice_lang(s_BotServ, u, BOT_INFO_CHAN_KICK_COLORS,
getstring(u->na, BOT_INFO_INACTIVE));
if (ci->botflags & BS_KICK_FLOOD) {
if (ci->ttb[TTB_FLOOD])
notice_lang(s_BotServ, u, BOT_INFO_CHAN_KICK_FLOOD_BAN,
getstring(u->na, BOT_INFO_ACTIVE),
ci->ttb[TTB_FLOOD], ci->floodlines,
ci->floodsecs);
else
notice_lang(s_BotServ, u, BOT_INFO_CHAN_KICK_FLOOD_ON,
getstring(u->na, BOT_INFO_ACTIVE),
ci->floodlines, ci->floodsecs);
} else
notice_lang(s_BotServ, u, BOT_INFO_CHAN_KICK_FLOOD_OFF,
getstring(u->na, BOT_INFO_INACTIVE));
if (ci->botflags & BS_KICK_REPEAT) {
if (ci->ttb[TTB_REPEAT])
notice_lang(s_BotServ, u, BOT_INFO_CHAN_KICK_REPEAT_BAN,
getstring(u->na, BOT_INFO_ACTIVE),
ci->ttb[TTB_REPEAT], ci->repeattimes);
else
notice_lang(s_BotServ, u, BOT_INFO_CHAN_KICK_REPEAT_ON,
getstring(u->na, BOT_INFO_ACTIVE),
ci->repeattimes);
} else
notice_lang(s_BotServ, u, BOT_INFO_CHAN_KICK_REPEAT_OFF,
getstring(u->na, BOT_INFO_INACTIVE));
if (ci->botflags & BS_KICK_REVERSES) {
if (ci->ttb[TTB_REVERSES])
notice_lang(s_BotServ, u, BOT_INFO_CHAN_KICK_REVERSES_BAN,
getstring(u->na, BOT_INFO_ACTIVE),
ci->ttb[TTB_REVERSES]);
else
notice_lang(s_BotServ, u, BOT_INFO_CHAN_KICK_REVERSES,
getstring(u->na, BOT_INFO_ACTIVE));
} else
notice_lang(s_BotServ, u, BOT_INFO_CHAN_KICK_REVERSES,
getstring(u->na, BOT_INFO_INACTIVE));
if (ci->botflags & BS_KICK_UNDERLINES) {
if (ci->ttb[TTB_UNDERLINES])
notice_lang(s_BotServ, u,
BOT_INFO_CHAN_KICK_UNDERLINES_BAN,
getstring(u->na, BOT_INFO_ACTIVE),
ci->ttb[TTB_UNDERLINES]);
else
notice_lang(s_BotServ, u, BOT_INFO_CHAN_KICK_UNDERLINES,
getstring(u->na, BOT_INFO_ACTIVE));
} else
notice_lang(s_BotServ, u, BOT_INFO_CHAN_KICK_UNDERLINES,
getstring(u->na, BOT_INFO_INACTIVE));
if (ci->botflags & BS_KICK_BADWORDS) {
if (ci->ttb[TTB_BADWORDS])
notice_lang(s_BotServ, u, BOT_INFO_CHAN_KICK_BADWORDS_BAN,
getstring(u->na, BOT_INFO_ACTIVE),
ci->ttb[TTB_BADWORDS]);
else
notice_lang(s_BotServ, u, BOT_INFO_CHAN_KICK_BADWORDS,
getstring(u->na, BOT_INFO_ACTIVE));
} else
notice_lang(s_BotServ, u, BOT_INFO_CHAN_KICK_BADWORDS,
getstring(u->na, BOT_INFO_INACTIVE));
if (ci->botflags & BS_KICK_BOLDS) {
if (ci->ttb[TTB_BOLDS])
notice_lang(s_BotServ, u, BOT_INFO_CHAN_KICK_BOLDS_BAN,
getstring(u->na, BOT_INFO_ACTIVE),
ci->ttb[TTB_BOLDS]);
else
notice_lang(s_BotServ, u, BOT_INFO_CHAN_KICK_BOLDS,
getstring(u->na, BOT_INFO_ACTIVE));
} else
notice_lang(s_BotServ, u, BOT_INFO_CHAN_KICK_BOLDS,
getstring(u->na, BOT_INFO_INACTIVE));
if (ci->botflags & BS_KICK_CAPS) {
if (ci->ttb[TTB_CAPS])
notice_lang(s_BotServ, u, BOT_INFO_CHAN_KICK_CAPS_BAN,
getstring(u->na, BOT_INFO_ACTIVE),
ci->ttb[TTB_CAPS], ci->capsmin,
ci->capspercent);
else
notice_lang(s_BotServ, u, BOT_INFO_CHAN_KICK_CAPS_ON,
getstring(u->na, BOT_INFO_ACTIVE), ci->capsmin,
ci->capspercent);
} else
notice_lang(s_BotServ, u, BOT_INFO_CHAN_KICK_CAPS_OFF,
getstring(u->na, BOT_INFO_INACTIVE));
if (ci->botflags & BS_KICK_COLORS) {
if (ci->ttb[TTB_COLORS])
notice_lang(s_BotServ, u, BOT_INFO_CHAN_KICK_COLORS_BAN,
getstring(u->na, BOT_INFO_ACTIVE),
ci->ttb[TTB_COLORS]);
else
notice_lang(s_BotServ, u, BOT_INFO_CHAN_KICK_COLORS,
getstring(u->na, BOT_INFO_ACTIVE));
} else
notice_lang(s_BotServ, u, BOT_INFO_CHAN_KICK_COLORS,
getstring(u->na, BOT_INFO_INACTIVE));
if (ci->botflags & BS_KICK_FLOOD) {
if (ci->ttb[TTB_FLOOD])
notice_lang(s_BotServ, u, BOT_INFO_CHAN_KICK_FLOOD_BAN,
getstring(u->na, BOT_INFO_ACTIVE),
ci->ttb[TTB_FLOOD], ci->floodlines,
ci->floodsecs);
else
notice_lang(s_BotServ, u, BOT_INFO_CHAN_KICK_FLOOD_ON,
getstring(u->na, BOT_INFO_ACTIVE),
ci->floodlines, ci->floodsecs);
} else
notice_lang(s_BotServ, u, BOT_INFO_CHAN_KICK_FLOOD_OFF,
getstring(u->na, BOT_INFO_INACTIVE));
if (ci->botflags & BS_KICK_REPEAT) {
if (ci->ttb[TTB_REPEAT])
notice_lang(s_BotServ, u, BOT_INFO_CHAN_KICK_REPEAT_BAN,
getstring(u->na, BOT_INFO_ACTIVE),
ci->ttb[TTB_REPEAT], ci->repeattimes);
else
notice_lang(s_BotServ, u, BOT_INFO_CHAN_KICK_REPEAT_ON,
getstring(u->na, BOT_INFO_ACTIVE),
ci->repeattimes);
} else
notice_lang(s_BotServ, u, BOT_INFO_CHAN_KICK_REPEAT_OFF,
getstring(u->na, BOT_INFO_INACTIVE));
if (ci->botflags & BS_KICK_REVERSES) {
if (ci->ttb[TTB_REVERSES])
notice_lang(s_BotServ, u, BOT_INFO_CHAN_KICK_REVERSES_BAN,
getstring(u->na, BOT_INFO_ACTIVE),
ci->ttb[TTB_REVERSES]);
else
notice_lang(s_BotServ, u, BOT_INFO_CHAN_KICK_REVERSES,
getstring(u->na, BOT_INFO_ACTIVE));
} else
notice_lang(s_BotServ, u, BOT_INFO_CHAN_KICK_REVERSES,
getstring(u->na, BOT_INFO_INACTIVE));
if (ci->botflags & BS_KICK_UNDERLINES) {
if (ci->ttb[TTB_UNDERLINES])
notice_lang(s_BotServ, u,
BOT_INFO_CHAN_KICK_UNDERLINES_BAN,
getstring(u->na, BOT_INFO_ACTIVE),
ci->ttb[TTB_UNDERLINES]);
else
notice_lang(s_BotServ, u, BOT_INFO_CHAN_KICK_UNDERLINES,
getstring(u->na, BOT_INFO_ACTIVE));
} else
notice_lang(s_BotServ, u, BOT_INFO_CHAN_KICK_UNDERLINES,
getstring(u->na, BOT_INFO_INACTIVE));
end = buf;
*end = 0;
if (ci->botflags & BS_DONTKICKOPS) {
end += snprintf(end, sizeof(buf) - (end - buf), "%s",
getstring(u->na, BOT_INFO_OPT_DONTKICKOPS));
need_comma = 1;
}
if (ci->botflags & BS_DONTKICKVOICES) {
end += snprintf(end, sizeof(buf) - (end - buf), "%s%s",
need_comma ? commastr : "",
getstring(u->na, BOT_INFO_OPT_DONTKICKVOICES));
need_comma = 1;
}
if (ci->botflags & BS_FANTASY) {
end += snprintf(end, sizeof(buf) - (end - buf), "%s%s",
need_comma ? commastr : "",
getstring(u->na, BOT_INFO_OPT_FANTASY));
need_comma = 1;
}
if (ci->botflags & BS_GREET) {
end += snprintf(end, sizeof(buf) - (end - buf), "%s%s",
need_comma ? commastr : "",
getstring(u->na, BOT_INFO_OPT_GREET));
need_comma = 1;
}
if (ci->botflags & BS_NOBOT) {
end += snprintf(end, sizeof(buf) - (end - buf), "%s%s",
need_comma ? commastr : "",
getstring(u->na, BOT_INFO_OPT_NOBOT));
need_comma = 1;
}
if (ci->botflags & BS_SYMBIOSIS) {
end += snprintf(end, sizeof(buf) - (end - buf), "%s%s",
need_comma ? commastr : "",
getstring(u->na, BOT_INFO_OPT_SYMBIOSIS));
need_comma = 1;
}
notice_lang(s_BotServ, u, BOT_INFO_CHAN_OPTIONS,
*buf ? buf : getstring(u->na, BOT_INFO_OPT_NONE));
end = buf;
*end = 0;
if (ci->botflags & BS_DONTKICKOPS) {
end += snprintf(end, sizeof(buf) - (end - buf), "%s",
getstring(u->na, BOT_INFO_OPT_DONTKICKOPS));
need_comma = 1;
}
if (ci->botflags & BS_DONTKICKVOICES) {
end += snprintf(end, sizeof(buf) - (end - buf), "%s%s",
need_comma ? commastr : "",
getstring(u->na, BOT_INFO_OPT_DONTKICKVOICES));
need_comma = 1;
}
if (ci->botflags & BS_FANTASY) {
end += snprintf(end, sizeof(buf) - (end - buf), "%s%s",
need_comma ? commastr : "",
getstring(u->na, BOT_INFO_OPT_FANTASY));
need_comma = 1;
}
if (ci->botflags & BS_GREET) {
end += snprintf(end, sizeof(buf) - (end - buf), "%s%s",
need_comma ? commastr : "",
getstring(u->na, BOT_INFO_OPT_GREET));
need_comma = 1;
}
if (ci->botflags & BS_NOBOT) {
end += snprintf(end, sizeof(buf) - (end - buf), "%s%s",
need_comma ? commastr : "",
getstring(u->na, BOT_INFO_OPT_NOBOT));
need_comma = 1;
}
if (ci->botflags & BS_SYMBIOSIS) {
end += snprintf(end, sizeof(buf) - (end - buf), "%s%s",
need_comma ? commastr : "",
getstring(u->na, BOT_INFO_OPT_SYMBIOSIS));
need_comma = 1;
}
notice_lang(s_BotServ, u, BOT_INFO_CHAN_OPTIONS,
*buf ? buf : getstring(u->na, BOT_INFO_OPT_NONE));
} else
notice_lang(s_BotServ, u, BOT_INFO_NOT_FOUND, query);
return MOD_CONT;
} else
notice_lang(s_BotServ, u, BOT_INFO_NOT_FOUND, query);
return MOD_CONT;
}
void send_bot_channels(User * u, BotInfo * bi)
{
int i;
ChannelInfo *ci;
char buf[307], *end;
int i;
ChannelInfo *ci;
char buf[307], *end;
*buf = 0;
end = buf;
*buf = 0;
end = buf;
for (i = 0; i < 256; i++) {
for (ci = chanlists[i]; ci; ci = ci->next) {
if (ci->bi == bi) {
if (strlen(buf) + strlen(ci->name) > 300) {
notice_user(s_BotServ, u, "%s", buf);
*buf = 0;
end = buf;
}
end +=
snprintf(end, sizeof(buf) - (end - buf), " %s ",
ci->name);
}
}
}
for (i = 0; i < 256; i++) {
for (ci = chanlists[i]; ci; ci = ci->next) {
if (ci->bi == bi) {
if (strlen(buf) + strlen(ci->name) > 300) {
notice_user(s_BotServ, u, "%s", buf);
*buf = 0;
end = buf;
}
end +=
snprintf(end, sizeof(buf) - (end - buf), " %s ",
ci->name);
}
}
}
if (*buf)
notice_user(s_BotServ, u, "%s", buf);
return;
if (*buf)
notice_user(s_BotServ, u, "%s", buf);
return;
}
MODULE_INIT("bs_info", BSInfo)
+272 -272
View File
@@ -59,7 +59,7 @@ class BSKick : public Module
**/
void myBotServHelp(User * u)
{
notice_lang(s_BotServ, u, BOT_HELP_CMD_KICK);
notice_lang(s_BotServ, u, BOT_HELP_CMD_KICK);
}
/**
@@ -69,290 +69,290 @@ void myBotServHelp(User * u)
**/
int do_kickcmd(User * u)
{
char *chan = strtok(NULL, " ");
char *option = strtok(NULL, " ");
char *value = strtok(NULL, " ");
char *ttb = strtok(NULL, " ");
char *chan = strtok(NULL, " ");
char *option = strtok(NULL, " ");
char *value = strtok(NULL, " ");
char *ttb = strtok(NULL, " ");
ChannelInfo *ci;
ChannelInfo *ci;
if (readonly)
notice_lang(s_BotServ, u, BOT_KICK_DISABLED);
else if (!chan || !option || !value)
syntax_error(s_BotServ, u, "KICK", BOT_KICK_SYNTAX);
else if (stricmp(value, "ON") && stricmp(value, "OFF"))
syntax_error(s_BotServ, u, "KICK", BOT_KICK_SYNTAX);
else if (!(ci = cs_findchan(chan)))
notice_lang(s_BotServ, u, CHAN_X_NOT_REGISTERED, chan);
else if (ci->flags & CI_VERBOTEN)
notice_lang(s_BotServ, u, CHAN_X_FORBIDDEN, chan);
else if (!is_services_admin(u) && !check_access(u, ci, CA_SET))
notice_lang(s_BotServ, u, ACCESS_DENIED);
else if (!ci->bi)
notice_help(s_BotServ, u, BOT_NOT_ASSIGNED);
else {
if (!stricmp(option, "BADWORDS")) {
if (!stricmp(value, "ON")) {
if (ttb) {
ci->ttb[TTB_BADWORDS] =
strtol(ttb, (char **) NULL, 10);
/* Only error if errno returns ERANGE or EINVAL or we are less then 0 - TSL */
if (errno == ERANGE || errno == EINVAL
|| ci->ttb[TTB_BADWORDS] < 0) {
/* leaving the debug behind since we might want to know what these are */
if (debug) {
alog("debug: errno is %d ERANGE %d EINVAL %d ttb %d", errno, ERANGE, EINVAL, ci->ttb[TTB_BADWORDS]);
}
/* reset the value back to 0 - TSL */
ci->ttb[TTB_BADWORDS] = 0;
notice_lang(s_BotServ, u, BOT_KICK_BAD_TTB, ttb);
return MOD_CONT;
}
} else {
ci->ttb[TTB_BADWORDS] = 0;
}
ci->botflags |= BS_KICK_BADWORDS;
if (ci->ttb[TTB_BADWORDS])
notice_lang(s_BotServ, u, BOT_KICK_BADWORDS_ON_BAN,
ci->ttb[TTB_BADWORDS]);
else
notice_lang(s_BotServ, u, BOT_KICK_BADWORDS_ON);
} else {
ci->botflags &= ~BS_KICK_BADWORDS;
notice_lang(s_BotServ, u, BOT_KICK_BADWORDS_OFF);
}
} else if (!stricmp(option, "BOLDS")) {
if (!stricmp(value, "ON")) {
if (ttb) {
ci->ttb[TTB_BOLDS] = strtol(ttb, (char **) NULL, 10);
if (errno == ERANGE || errno == EINVAL
|| ci->ttb[TTB_BOLDS] < 0) {
if (debug) {
alog("debug: errno is %d ERANGE %d EINVAL %d ttb %d", errno, ERANGE, EINVAL, ci->ttb[TTB_BOLDS]);
}
ci->ttb[TTB_BOLDS] = 0;
notice_lang(s_BotServ, u, BOT_KICK_BAD_TTB, ttb);
return MOD_CONT;
}
} else
ci->ttb[TTB_BOLDS] = 0;
ci->botflags |= BS_KICK_BOLDS;
if (ci->ttb[TTB_BOLDS])
notice_lang(s_BotServ, u, BOT_KICK_BOLDS_ON_BAN,
ci->ttb[TTB_BOLDS]);
else
notice_lang(s_BotServ, u, BOT_KICK_BOLDS_ON);
} else {
ci->botflags &= ~BS_KICK_BOLDS;
notice_lang(s_BotServ, u, BOT_KICK_BOLDS_OFF);
}
} else if (!stricmp(option, "CAPS")) {
if (!stricmp(value, "ON")) {
char *min = strtok(NULL, " ");
char *percent = strtok(NULL, " ");
if (readonly)
notice_lang(s_BotServ, u, BOT_KICK_DISABLED);
else if (!chan || !option || !value)
syntax_error(s_BotServ, u, "KICK", BOT_KICK_SYNTAX);
else if (stricmp(value, "ON") && stricmp(value, "OFF"))
syntax_error(s_BotServ, u, "KICK", BOT_KICK_SYNTAX);
else if (!(ci = cs_findchan(chan)))
notice_lang(s_BotServ, u, CHAN_X_NOT_REGISTERED, chan);
else if (ci->flags & CI_VERBOTEN)
notice_lang(s_BotServ, u, CHAN_X_FORBIDDEN, chan);
else if (!is_services_admin(u) && !check_access(u, ci, CA_SET))
notice_lang(s_BotServ, u, ACCESS_DENIED);
else if (!ci->bi)
notice_help(s_BotServ, u, BOT_NOT_ASSIGNED);
else {
if (!stricmp(option, "BADWORDS")) {
if (!stricmp(value, "ON")) {
if (ttb) {
ci->ttb[TTB_BADWORDS] =
strtol(ttb, (char **) NULL, 10);
/* Only error if errno returns ERANGE or EINVAL or we are less then 0 - TSL */
if (errno == ERANGE || errno == EINVAL
|| ci->ttb[TTB_BADWORDS] < 0) {
/* leaving the debug behind since we might want to know what these are */
if (debug) {
alog("debug: errno is %d ERANGE %d EINVAL %d ttb %d", errno, ERANGE, EINVAL, ci->ttb[TTB_BADWORDS]);
}
/* reset the value back to 0 - TSL */
ci->ttb[TTB_BADWORDS] = 0;
notice_lang(s_BotServ, u, BOT_KICK_BAD_TTB, ttb);
return MOD_CONT;
}
} else {
ci->ttb[TTB_BADWORDS] = 0;
}
ci->botflags |= BS_KICK_BADWORDS;
if (ci->ttb[TTB_BADWORDS])
notice_lang(s_BotServ, u, BOT_KICK_BADWORDS_ON_BAN,
ci->ttb[TTB_BADWORDS]);
else
notice_lang(s_BotServ, u, BOT_KICK_BADWORDS_ON);
} else {
ci->botflags &= ~BS_KICK_BADWORDS;
notice_lang(s_BotServ, u, BOT_KICK_BADWORDS_OFF);
}
} else if (!stricmp(option, "BOLDS")) {
if (!stricmp(value, "ON")) {
if (ttb) {
ci->ttb[TTB_BOLDS] = strtol(ttb, (char **) NULL, 10);
if (errno == ERANGE || errno == EINVAL
|| ci->ttb[TTB_BOLDS] < 0) {
if (debug) {
alog("debug: errno is %d ERANGE %d EINVAL %d ttb %d", errno, ERANGE, EINVAL, ci->ttb[TTB_BOLDS]);
}
ci->ttb[TTB_BOLDS] = 0;
notice_lang(s_BotServ, u, BOT_KICK_BAD_TTB, ttb);
return MOD_CONT;
}
} else
ci->ttb[TTB_BOLDS] = 0;
ci->botflags |= BS_KICK_BOLDS;
if (ci->ttb[TTB_BOLDS])
notice_lang(s_BotServ, u, BOT_KICK_BOLDS_ON_BAN,
ci->ttb[TTB_BOLDS]);
else
notice_lang(s_BotServ, u, BOT_KICK_BOLDS_ON);
} else {
ci->botflags &= ~BS_KICK_BOLDS;
notice_lang(s_BotServ, u, BOT_KICK_BOLDS_OFF);
}
} else if (!stricmp(option, "CAPS")) {
if (!stricmp(value, "ON")) {
char *min = strtok(NULL, " ");
char *percent = strtok(NULL, " ");
if (ttb) {
ci->ttb[TTB_CAPS] = strtol(ttb, (char **) NULL, 10);
if (errno == ERANGE || errno == EINVAL
|| ci->ttb[TTB_CAPS] < 0) {
if (debug) {
alog("debug: errno is %d ERANGE %d EINVAL %d ttb %d", errno, ERANGE, EINVAL, ci->ttb[TTB_CAPS]);
}
ci->ttb[TTB_CAPS] = 0;
notice_lang(s_BotServ, u, BOT_KICK_BAD_TTB, ttb);
return MOD_CONT;
}
} else
ci->ttb[TTB_CAPS] = 0;
if (ttb) {
ci->ttb[TTB_CAPS] = strtol(ttb, (char **) NULL, 10);
if (errno == ERANGE || errno == EINVAL
|| ci->ttb[TTB_CAPS] < 0) {
if (debug) {
alog("debug: errno is %d ERANGE %d EINVAL %d ttb %d", errno, ERANGE, EINVAL, ci->ttb[TTB_CAPS]);
}
ci->ttb[TTB_CAPS] = 0;
notice_lang(s_BotServ, u, BOT_KICK_BAD_TTB, ttb);
return MOD_CONT;
}
} else
ci->ttb[TTB_CAPS] = 0;
if (!min)
ci->capsmin = 10;
else
ci->capsmin = atol(min);
if (ci->capsmin < 1)
ci->capsmin = 10;
if (!min)
ci->capsmin = 10;
else
ci->capsmin = atol(min);
if (ci->capsmin < 1)
ci->capsmin = 10;
if (!percent)
ci->capspercent = 25;
else
ci->capspercent = atol(percent);
if (ci->capspercent < 1 || ci->capspercent > 100)
ci->capspercent = 25;
if (!percent)
ci->capspercent = 25;
else
ci->capspercent = atol(percent);
if (ci->capspercent < 1 || ci->capspercent > 100)
ci->capspercent = 25;
ci->botflags |= BS_KICK_CAPS;
if (ci->ttb[TTB_CAPS])
notice_lang(s_BotServ, u, BOT_KICK_CAPS_ON_BAN,
ci->capsmin, ci->capspercent,
ci->ttb[TTB_CAPS]);
else
notice_lang(s_BotServ, u, BOT_KICK_CAPS_ON,
ci->capsmin, ci->capspercent);
} else {
ci->botflags &= ~BS_KICK_CAPS;
notice_lang(s_BotServ, u, BOT_KICK_CAPS_OFF);
}
} else if (!stricmp(option, "COLORS")) {
if (!stricmp(value, "ON")) {
if (ttb) {
ci->ttb[TTB_COLORS] = strtol(ttb, (char **) NULL, 10);
if (errno == ERANGE || errno == EINVAL
|| ci->ttb[TTB_COLORS] < 0) {
if (debug) {
alog("debug: errno is %d ERANGE %d EINVAL %d ttb %d", errno, ERANGE, EINVAL, ci->ttb[TTB_COLORS]);
}
ci->ttb[TTB_COLORS] = 0;
notice_lang(s_BotServ, u, BOT_KICK_BAD_TTB, ttb);
return MOD_CONT;
}
} else
ci->ttb[TTB_COLORS] = 0;
ci->botflags |= BS_KICK_COLORS;
if (ci->ttb[TTB_COLORS])
notice_lang(s_BotServ, u, BOT_KICK_COLORS_ON_BAN,
ci->ttb[TTB_COLORS]);
else
notice_lang(s_BotServ, u, BOT_KICK_COLORS_ON);
} else {
ci->botflags &= ~BS_KICK_COLORS;
notice_lang(s_BotServ, u, BOT_KICK_COLORS_OFF);
}
} else if (!stricmp(option, "FLOOD")) {
if (!stricmp(value, "ON")) {
char *lines = strtok(NULL, " ");
char *secs = strtok(NULL, " ");
ci->botflags |= BS_KICK_CAPS;
if (ci->ttb[TTB_CAPS])
notice_lang(s_BotServ, u, BOT_KICK_CAPS_ON_BAN,
ci->capsmin, ci->capspercent,
ci->ttb[TTB_CAPS]);
else
notice_lang(s_BotServ, u, BOT_KICK_CAPS_ON,
ci->capsmin, ci->capspercent);
} else {
ci->botflags &= ~BS_KICK_CAPS;
notice_lang(s_BotServ, u, BOT_KICK_CAPS_OFF);
}
} else if (!stricmp(option, "COLORS")) {
if (!stricmp(value, "ON")) {
if (ttb) {
ci->ttb[TTB_COLORS] = strtol(ttb, (char **) NULL, 10);
if (errno == ERANGE || errno == EINVAL
|| ci->ttb[TTB_COLORS] < 0) {
if (debug) {
alog("debug: errno is %d ERANGE %d EINVAL %d ttb %d", errno, ERANGE, EINVAL, ci->ttb[TTB_COLORS]);
}
ci->ttb[TTB_COLORS] = 0;
notice_lang(s_BotServ, u, BOT_KICK_BAD_TTB, ttb);
return MOD_CONT;
}
} else
ci->ttb[TTB_COLORS] = 0;
ci->botflags |= BS_KICK_COLORS;
if (ci->ttb[TTB_COLORS])
notice_lang(s_BotServ, u, BOT_KICK_COLORS_ON_BAN,
ci->ttb[TTB_COLORS]);
else
notice_lang(s_BotServ, u, BOT_KICK_COLORS_ON);
} else {
ci->botflags &= ~BS_KICK_COLORS;
notice_lang(s_BotServ, u, BOT_KICK_COLORS_OFF);
}
} else if (!stricmp(option, "FLOOD")) {
if (!stricmp(value, "ON")) {
char *lines = strtok(NULL, " ");
char *secs = strtok(NULL, " ");
if (ttb) {
ci->ttb[TTB_FLOOD] = strtol(ttb, (char **) NULL, 10);
if (errno == ERANGE || errno == EINVAL
|| ci->ttb[TTB_FLOOD] < 0) {
if (debug) {
alog("debug: errno is %d ERANGE %d EINVAL %d ttb %d", errno, ERANGE, EINVAL, ci->ttb[TTB_FLOOD]);
}
ci->ttb[TTB_FLOOD] = 0;
notice_lang(s_BotServ, u, BOT_KICK_BAD_TTB, ttb);
return MOD_CONT;
}
} else
ci->ttb[TTB_FLOOD] = 0;
if (ttb) {
ci->ttb[TTB_FLOOD] = strtol(ttb, (char **) NULL, 10);
if (errno == ERANGE || errno == EINVAL
|| ci->ttb[TTB_FLOOD] < 0) {
if (debug) {
alog("debug: errno is %d ERANGE %d EINVAL %d ttb %d", errno, ERANGE, EINVAL, ci->ttb[TTB_FLOOD]);
}
ci->ttb[TTB_FLOOD] = 0;
notice_lang(s_BotServ, u, BOT_KICK_BAD_TTB, ttb);
return MOD_CONT;
}
} else
ci->ttb[TTB_FLOOD] = 0;
if (!lines)
ci->floodlines = 6;
else
ci->floodlines = atol(lines);
if (ci->floodlines < 2)
ci->floodlines = 6;
if (!lines)
ci->floodlines = 6;
else
ci->floodlines = atol(lines);
if (ci->floodlines < 2)
ci->floodlines = 6;
if (!secs)
ci->floodsecs = 10;
else
ci->floodsecs = atol(secs);
if (ci->floodsecs < 1 || ci->floodsecs > BSKeepData)
ci->floodsecs = 10;
if (!secs)
ci->floodsecs = 10;
else
ci->floodsecs = atol(secs);
if (ci->floodsecs < 1 || ci->floodsecs > BSKeepData)
ci->floodsecs = 10;
ci->botflags |= BS_KICK_FLOOD;
if (ci->ttb[TTB_FLOOD])
notice_lang(s_BotServ, u, BOT_KICK_FLOOD_ON_BAN,
ci->floodlines, ci->floodsecs,
ci->ttb[TTB_FLOOD]);
else
notice_lang(s_BotServ, u, BOT_KICK_FLOOD_ON,
ci->floodlines, ci->floodsecs);
} else {
ci->botflags &= ~BS_KICK_FLOOD;
notice_lang(s_BotServ, u, BOT_KICK_FLOOD_OFF);
}
} else if (!stricmp(option, "REPEAT")) {
if (!stricmp(value, "ON")) {
char *times = strtok(NULL, " ");
ci->botflags |= BS_KICK_FLOOD;
if (ci->ttb[TTB_FLOOD])
notice_lang(s_BotServ, u, BOT_KICK_FLOOD_ON_BAN,
ci->floodlines, ci->floodsecs,
ci->ttb[TTB_FLOOD]);
else
notice_lang(s_BotServ, u, BOT_KICK_FLOOD_ON,
ci->floodlines, ci->floodsecs);
} else {
ci->botflags &= ~BS_KICK_FLOOD;
notice_lang(s_BotServ, u, BOT_KICK_FLOOD_OFF);
}
} else if (!stricmp(option, "REPEAT")) {
if (!stricmp(value, "ON")) {
char *times = strtok(NULL, " ");
if (ttb) {
ci->ttb[TTB_REPEAT] = strtol(ttb, (char **) NULL, 10);
if (errno == ERANGE || errno == EINVAL
|| ci->ttb[TTB_REPEAT] < 0) {
if (debug) {
alog("debug: errno is %d ERANGE %d EINVAL %d ttb %d", errno, ERANGE, EINVAL, ci->ttb[TTB_REPEAT]);
}
ci->ttb[TTB_REPEAT] = 0;
notice_lang(s_BotServ, u, BOT_KICK_BAD_TTB, ttb);
return MOD_CONT;
}
} else
ci->ttb[TTB_REPEAT] = 0;
if (ttb) {
ci->ttb[TTB_REPEAT] = strtol(ttb, (char **) NULL, 10);
if (errno == ERANGE || errno == EINVAL
|| ci->ttb[TTB_REPEAT] < 0) {
if (debug) {
alog("debug: errno is %d ERANGE %d EINVAL %d ttb %d", errno, ERANGE, EINVAL, ci->ttb[TTB_REPEAT]);
}
ci->ttb[TTB_REPEAT] = 0;
notice_lang(s_BotServ, u, BOT_KICK_BAD_TTB, ttb);
return MOD_CONT;
}
} else
ci->ttb[TTB_REPEAT] = 0;
if (!times)
ci->repeattimes = 3;
else
ci->repeattimes = atol(times);
if (ci->repeattimes < 2)
ci->repeattimes = 3;
if (!times)
ci->repeattimes = 3;
else
ci->repeattimes = atol(times);
if (ci->repeattimes < 2)
ci->repeattimes = 3;
ci->botflags |= BS_KICK_REPEAT;
if (ci->ttb[TTB_REPEAT])
notice_lang(s_BotServ, u, BOT_KICK_REPEAT_ON_BAN,
ci->repeattimes, ci->ttb[TTB_REPEAT]);
else
notice_lang(s_BotServ, u, BOT_KICK_REPEAT_ON,
ci->repeattimes);
} else {
ci->botflags &= ~BS_KICK_REPEAT;
notice_lang(s_BotServ, u, BOT_KICK_REPEAT_OFF);
}
} else if (!stricmp(option, "REVERSES")) {
if (!stricmp(value, "ON")) {
if (ttb) {
ci->ttb[TTB_REVERSES] =
strtol(ttb, (char **) NULL, 10);
if (errno == ERANGE || errno == EINVAL
|| ci->ttb[TTB_REVERSES] < 0) {
if (debug) {
alog("debug: errno is %d ERANGE %d EINVAL %d ttb %d", errno, ERANGE, EINVAL, ci->ttb[TTB_REVERSES]);
}
ci->ttb[TTB_REVERSES] = 0;
notice_lang(s_BotServ, u, BOT_KICK_BAD_TTB, ttb);
return MOD_CONT;
}
} else
ci->ttb[TTB_REVERSES] = 0;
ci->botflags |= BS_KICK_REVERSES;
if (ci->ttb[TTB_REVERSES])
notice_lang(s_BotServ, u, BOT_KICK_REVERSES_ON_BAN,
ci->ttb[TTB_REVERSES]);
else
notice_lang(s_BotServ, u, BOT_KICK_REVERSES_ON);
} else {
ci->botflags &= ~BS_KICK_REVERSES;
notice_lang(s_BotServ, u, BOT_KICK_REVERSES_OFF);
}
} else if (!stricmp(option, "UNDERLINES")) {
if (!stricmp(value, "ON")) {
if (ttb) {
ci->ttb[TTB_UNDERLINES] =
strtol(ttb, (char **) NULL, 10);
if (errno == ERANGE || errno == EINVAL
|| ci->ttb[TTB_UNDERLINES] < 0) {
if (debug) {
alog("debug: errno is %d ERANGE %d EINVAL %d ttb %d", errno, ERANGE, EINVAL, ci->ttb[TTB_UNDERLINES]);
}
ci->ttb[TTB_UNDERLINES] = 0;
notice_lang(s_BotServ, u, BOT_KICK_BAD_TTB, ttb);
return MOD_CONT;
}
} else
ci->ttb[TTB_UNDERLINES] = 0;
ci->botflags |= BS_KICK_UNDERLINES;
if (ci->ttb[TTB_UNDERLINES])
notice_lang(s_BotServ, u, BOT_KICK_UNDERLINES_ON_BAN,
ci->ttb[TTB_UNDERLINES]);
else
notice_lang(s_BotServ, u, BOT_KICK_UNDERLINES_ON);
} else {
ci->botflags &= ~BS_KICK_UNDERLINES;
notice_lang(s_BotServ, u, BOT_KICK_UNDERLINES_OFF);
}
} else
notice_help(s_BotServ, u, BOT_KICK_UNKNOWN, option);
}
return MOD_CONT;
ci->botflags |= BS_KICK_REPEAT;
if (ci->ttb[TTB_REPEAT])
notice_lang(s_BotServ, u, BOT_KICK_REPEAT_ON_BAN,
ci->repeattimes, ci->ttb[TTB_REPEAT]);
else
notice_lang(s_BotServ, u, BOT_KICK_REPEAT_ON,
ci->repeattimes);
} else {
ci->botflags &= ~BS_KICK_REPEAT;
notice_lang(s_BotServ, u, BOT_KICK_REPEAT_OFF);
}
} else if (!stricmp(option, "REVERSES")) {
if (!stricmp(value, "ON")) {
if (ttb) {
ci->ttb[TTB_REVERSES] =
strtol(ttb, (char **) NULL, 10);
if (errno == ERANGE || errno == EINVAL
|| ci->ttb[TTB_REVERSES] < 0) {
if (debug) {
alog("debug: errno is %d ERANGE %d EINVAL %d ttb %d", errno, ERANGE, EINVAL, ci->ttb[TTB_REVERSES]);
}
ci->ttb[TTB_REVERSES] = 0;
notice_lang(s_BotServ, u, BOT_KICK_BAD_TTB, ttb);
return MOD_CONT;
}
} else
ci->ttb[TTB_REVERSES] = 0;
ci->botflags |= BS_KICK_REVERSES;
if (ci->ttb[TTB_REVERSES])
notice_lang(s_BotServ, u, BOT_KICK_REVERSES_ON_BAN,
ci->ttb[TTB_REVERSES]);
else
notice_lang(s_BotServ, u, BOT_KICK_REVERSES_ON);
} else {
ci->botflags &= ~BS_KICK_REVERSES;
notice_lang(s_BotServ, u, BOT_KICK_REVERSES_OFF);
}
} else if (!stricmp(option, "UNDERLINES")) {
if (!stricmp(value, "ON")) {
if (ttb) {
ci->ttb[TTB_UNDERLINES] =
strtol(ttb, (char **) NULL, 10);
if (errno == ERANGE || errno == EINVAL
|| ci->ttb[TTB_UNDERLINES] < 0) {
if (debug) {
alog("debug: errno is %d ERANGE %d EINVAL %d ttb %d", errno, ERANGE, EINVAL, ci->ttb[TTB_UNDERLINES]);
}
ci->ttb[TTB_UNDERLINES] = 0;
notice_lang(s_BotServ, u, BOT_KICK_BAD_TTB, ttb);
return MOD_CONT;
}
} else
ci->ttb[TTB_UNDERLINES] = 0;
ci->botflags |= BS_KICK_UNDERLINES;
if (ci->ttb[TTB_UNDERLINES])
notice_lang(s_BotServ, u, BOT_KICK_UNDERLINES_ON_BAN,
ci->ttb[TTB_UNDERLINES]);
else
notice_lang(s_BotServ, u, BOT_KICK_UNDERLINES_ON);
} else {
ci->botflags &= ~BS_KICK_UNDERLINES;
notice_lang(s_BotServ, u, BOT_KICK_UNDERLINES_OFF);
}
} else
notice_help(s_BotServ, u, BOT_KICK_UNKNOWN, option);
}
return MOD_CONT;
}
MODULE_INIT("bs_kick", BSKick)
+28 -28
View File
@@ -42,7 +42,7 @@ class BSSay : public Module
**/
void myBotServHelp(User * u)
{
notice_lang(s_BotServ, u, BOT_HELP_CMD_SAY);
notice_lang(s_BotServ, u, BOT_HELP_CMD_SAY);
}
/**
@@ -52,35 +52,35 @@ void myBotServHelp(User * u)
**/
int do_say(User * u)
{
ChannelInfo *ci;
ChannelInfo *ci;
char *chan = strtok(NULL, " ");
char *text = strtok(NULL, "");
char *chan = strtok(NULL, " ");
char *text = strtok(NULL, "");
if (!chan || !text)
syntax_error(s_BotServ, u, "SAY", BOT_SAY_SYNTAX);
else if (!(ci = cs_findchan(chan)))
notice_lang(s_BotServ, u, CHAN_X_NOT_REGISTERED, chan);
else if (ci->flags & CI_VERBOTEN)
notice_lang(s_BotServ, u, CHAN_X_FORBIDDEN, chan);
else if (!ci->bi)
notice_help(s_BotServ, u, BOT_NOT_ASSIGNED);
else if (!ci->c || ci->c->usercount < BSMinUsers)
notice_lang(s_BotServ, u, BOT_NOT_ON_CHANNEL, ci->name);
else if (!check_access(u, ci, CA_SAY))
notice_lang(s_BotServ, u, ACCESS_DENIED);
else {
if (text[0] != '\001') {
ircdproto->SendPrivmsg(ci->bi, ci->name, "%s", text);
ci->bi->lastmsg = time(NULL);
if (LogBot && LogChannel && logchan && !debug && findchan(LogChannel))
ircdproto->SendPrivmsg(ci->bi, LogChannel,
"SAY %s %s %s", u->nick, ci->name, text);
} else {
syntax_error(s_BotServ, u, "SAY", BOT_SAY_SYNTAX);
}
}
return MOD_CONT;
if (!chan || !text)
syntax_error(s_BotServ, u, "SAY", BOT_SAY_SYNTAX);
else if (!(ci = cs_findchan(chan)))
notice_lang(s_BotServ, u, CHAN_X_NOT_REGISTERED, chan);
else if (ci->flags & CI_VERBOTEN)
notice_lang(s_BotServ, u, CHAN_X_FORBIDDEN, chan);
else if (!ci->bi)
notice_help(s_BotServ, u, BOT_NOT_ASSIGNED);
else if (!ci->c || ci->c->usercount < BSMinUsers)
notice_lang(s_BotServ, u, BOT_NOT_ON_CHANNEL, ci->name);
else if (!check_access(u, ci, CA_SAY))
notice_lang(s_BotServ, u, ACCESS_DENIED);
else {
if (text[0] != '\001') {
ircdproto->SendPrivmsg(ci->bi, ci->name, "%s", text);
ci->bi->lastmsg = time(NULL);
if (LogBot && LogChannel && logchan && !debug && findchan(LogChannel))
ircdproto->SendPrivmsg(ci->bi, LogChannel,
"SAY %s %s %s", u->nick, ci->name, text);
} else {
syntax_error(s_BotServ, u, "SAY", BOT_SAY_SYNTAX);
}
}
return MOD_CONT;
}
MODULE_INIT("bs_say", BSSay)
+111 -111
View File
@@ -60,7 +60,7 @@ class BSSet : public Module
**/
void myBotServHelp(User * u)
{
notice_lang(s_BotServ, u, BOT_HELP_CMD_SET);
notice_lang(s_BotServ, u, BOT_HELP_CMD_SET);
}
/**
@@ -70,119 +70,119 @@ void myBotServHelp(User * u)
**/
int do_set(User * u)
{
char *chan = strtok(NULL, " ");
char *option = strtok(NULL, " ");
char *value = strtok(NULL, " ");
int is_servadmin = is_services_admin(u);
char *chan = strtok(NULL, " ");
char *option = strtok(NULL, " ");
char *value = strtok(NULL, " ");
int is_servadmin = is_services_admin(u);
ChannelInfo *ci;
ChannelInfo *ci;
if (readonly)
notice_lang(s_BotServ, u, BOT_SET_DISABLED);
else if (!chan || !option || !value)
syntax_error(s_BotServ, u, "SET", BOT_SET_SYNTAX);
else if (is_servadmin && !stricmp(option, "PRIVATE")) {
BotInfo *bi;
if (readonly)
notice_lang(s_BotServ, u, BOT_SET_DISABLED);
else if (!chan || !option || !value)
syntax_error(s_BotServ, u, "SET", BOT_SET_SYNTAX);
else if (is_servadmin && !stricmp(option, "PRIVATE")) {
BotInfo *bi;
if ((bi = findbot(chan))) {
if (!stricmp(value, "ON")) {
bi->flags |= BI_PRIVATE;
notice_lang(s_BotServ, u, BOT_SET_PRIVATE_ON, bi->nick);
} else if (!stricmp(value, "OFF")) {
bi->flags &= ~BI_PRIVATE;
notice_lang(s_BotServ, u, BOT_SET_PRIVATE_OFF, bi->nick);
} else {
syntax_error(s_BotServ, u, "SET PRIVATE",
BOT_SET_PRIVATE_SYNTAX);
}
} else {
notice_lang(s_BotServ, u, BOT_DOES_NOT_EXIST, chan);
}
return MOD_CONT;
} else if (!(ci = cs_findchan(chan)))
notice_lang(s_BotServ, u, CHAN_X_NOT_REGISTERED, chan);
else if (ci->flags & CI_VERBOTEN)
notice_lang(s_BotServ, u, CHAN_X_FORBIDDEN, chan);
else if (!is_servadmin && !check_access(u, ci, CA_SET))
notice_lang(s_BotServ, u, ACCESS_DENIED);
else {
if (!stricmp(option, "DONTKICKOPS")) {
if (!stricmp(value, "ON")) {
ci->botflags |= BS_DONTKICKOPS;
notice_lang(s_BotServ, u, BOT_SET_DONTKICKOPS_ON,
ci->name);
} else if (!stricmp(value, "OFF")) {
ci->botflags &= ~BS_DONTKICKOPS;
notice_lang(s_BotServ, u, BOT_SET_DONTKICKOPS_OFF,
ci->name);
} else {
syntax_error(s_BotServ, u, "SET DONTKICKOPS",
BOT_SET_DONTKICKOPS_SYNTAX);
}
} else if (!stricmp(option, "DONTKICKVOICES")) {
if (!stricmp(value, "ON")) {
ci->botflags |= BS_DONTKICKVOICES;
notice_lang(s_BotServ, u, BOT_SET_DONTKICKVOICES_ON,
ci->name);
} else if (!stricmp(value, "OFF")) {
ci->botflags &= ~BS_DONTKICKVOICES;
notice_lang(s_BotServ, u, BOT_SET_DONTKICKVOICES_OFF,
ci->name);
} else {
syntax_error(s_BotServ, u, "SET DONTKICKVOICES",
BOT_SET_DONTKICKVOICES_SYNTAX);
}
} else if (!stricmp(option, "FANTASY")) {
if (!stricmp(value, "ON")) {
ci->botflags |= BS_FANTASY;
notice_lang(s_BotServ, u, BOT_SET_FANTASY_ON, ci->name);
} else if (!stricmp(value, "OFF")) {
ci->botflags &= ~BS_FANTASY;
notice_lang(s_BotServ, u, BOT_SET_FANTASY_OFF, ci->name);
} else {
syntax_error(s_BotServ, u, "SET FANTASY",
BOT_SET_FANTASY_SYNTAX);
}
} else if (!stricmp(option, "GREET")) {
if (!stricmp(value, "ON")) {
ci->botflags |= BS_GREET;
notice_lang(s_BotServ, u, BOT_SET_GREET_ON, ci->name);
} else if (!stricmp(value, "OFF")) {
ci->botflags &= ~BS_GREET;
notice_lang(s_BotServ, u, BOT_SET_GREET_OFF, ci->name);
} else {
syntax_error(s_BotServ, u, "SET GREET",
BOT_SET_GREET_SYNTAX);
}
} else if (is_servadmin && !stricmp(option, "NOBOT")) {
if (!stricmp(value, "ON")) {
ci->botflags |= BS_NOBOT;
if (ci->bi)
ci->bi->UnAssign(u, ci);
notice_lang(s_BotServ, u, BOT_SET_NOBOT_ON, ci->name);
} else if (!stricmp(value, "OFF")) {
ci->botflags &= ~BS_NOBOT;
notice_lang(s_BotServ, u, BOT_SET_NOBOT_OFF, ci->name);
} else {
syntax_error(s_BotServ, u, "SET NOBOT",
BOT_SET_NOBOT_SYNTAX);
}
} else if (!stricmp(option, "SYMBIOSIS")) {
if (!stricmp(value, "ON")) {
ci->botflags |= BS_SYMBIOSIS;
notice_lang(s_BotServ, u, BOT_SET_SYMBIOSIS_ON, ci->name);
} else if (!stricmp(value, "OFF")) {
ci->botflags &= ~BS_SYMBIOSIS;
notice_lang(s_BotServ, u, BOT_SET_SYMBIOSIS_OFF, ci->name);
} else {
syntax_error(s_BotServ, u, "SET SYMBIOSIS",
BOT_SET_SYMBIOSIS_SYNTAX);
}
} else {
notice_help(s_BotServ, u, BOT_SET_UNKNOWN, option);
}
}
return MOD_CONT;
if ((bi = findbot(chan))) {
if (!stricmp(value, "ON")) {
bi->flags |= BI_PRIVATE;
notice_lang(s_BotServ, u, BOT_SET_PRIVATE_ON, bi->nick);
} else if (!stricmp(value, "OFF")) {
bi->flags &= ~BI_PRIVATE;
notice_lang(s_BotServ, u, BOT_SET_PRIVATE_OFF, bi->nick);
} else {
syntax_error(s_BotServ, u, "SET PRIVATE",
BOT_SET_PRIVATE_SYNTAX);
}
} else {
notice_lang(s_BotServ, u, BOT_DOES_NOT_EXIST, chan);
}
return MOD_CONT;
} else if (!(ci = cs_findchan(chan)))
notice_lang(s_BotServ, u, CHAN_X_NOT_REGISTERED, chan);
else if (ci->flags & CI_VERBOTEN)
notice_lang(s_BotServ, u, CHAN_X_FORBIDDEN, chan);
else if (!is_servadmin && !check_access(u, ci, CA_SET))
notice_lang(s_BotServ, u, ACCESS_DENIED);
else {
if (!stricmp(option, "DONTKICKOPS")) {
if (!stricmp(value, "ON")) {
ci->botflags |= BS_DONTKICKOPS;
notice_lang(s_BotServ, u, BOT_SET_DONTKICKOPS_ON,
ci->name);
} else if (!stricmp(value, "OFF")) {
ci->botflags &= ~BS_DONTKICKOPS;
notice_lang(s_BotServ, u, BOT_SET_DONTKICKOPS_OFF,
ci->name);
} else {
syntax_error(s_BotServ, u, "SET DONTKICKOPS",
BOT_SET_DONTKICKOPS_SYNTAX);
}
} else if (!stricmp(option, "DONTKICKVOICES")) {
if (!stricmp(value, "ON")) {
ci->botflags |= BS_DONTKICKVOICES;
notice_lang(s_BotServ, u, BOT_SET_DONTKICKVOICES_ON,
ci->name);
} else if (!stricmp(value, "OFF")) {
ci->botflags &= ~BS_DONTKICKVOICES;
notice_lang(s_BotServ, u, BOT_SET_DONTKICKVOICES_OFF,
ci->name);
} else {
syntax_error(s_BotServ, u, "SET DONTKICKVOICES",
BOT_SET_DONTKICKVOICES_SYNTAX);
}
} else if (!stricmp(option, "FANTASY")) {
if (!stricmp(value, "ON")) {
ci->botflags |= BS_FANTASY;
notice_lang(s_BotServ, u, BOT_SET_FANTASY_ON, ci->name);
} else if (!stricmp(value, "OFF")) {
ci->botflags &= ~BS_FANTASY;
notice_lang(s_BotServ, u, BOT_SET_FANTASY_OFF, ci->name);
} else {
syntax_error(s_BotServ, u, "SET FANTASY",
BOT_SET_FANTASY_SYNTAX);
}
} else if (!stricmp(option, "GREET")) {
if (!stricmp(value, "ON")) {
ci->botflags |= BS_GREET;
notice_lang(s_BotServ, u, BOT_SET_GREET_ON, ci->name);
} else if (!stricmp(value, "OFF")) {
ci->botflags &= ~BS_GREET;
notice_lang(s_BotServ, u, BOT_SET_GREET_OFF, ci->name);
} else {
syntax_error(s_BotServ, u, "SET GREET",
BOT_SET_GREET_SYNTAX);
}
} else if (is_servadmin && !stricmp(option, "NOBOT")) {
if (!stricmp(value, "ON")) {
ci->botflags |= BS_NOBOT;
if (ci->bi)
ci->bi->UnAssign(u, ci);
notice_lang(s_BotServ, u, BOT_SET_NOBOT_ON, ci->name);
} else if (!stricmp(value, "OFF")) {
ci->botflags &= ~BS_NOBOT;
notice_lang(s_BotServ, u, BOT_SET_NOBOT_OFF, ci->name);
} else {
syntax_error(s_BotServ, u, "SET NOBOT",
BOT_SET_NOBOT_SYNTAX);
}
} else if (!stricmp(option, "SYMBIOSIS")) {
if (!stricmp(value, "ON")) {
ci->botflags |= BS_SYMBIOSIS;
notice_lang(s_BotServ, u, BOT_SET_SYMBIOSIS_ON, ci->name);
} else if (!stricmp(value, "OFF")) {
ci->botflags &= ~BS_SYMBIOSIS;
notice_lang(s_BotServ, u, BOT_SET_SYMBIOSIS_OFF, ci->name);
} else {
syntax_error(s_BotServ, u, "SET SYMBIOSIS",
BOT_SET_SYMBIOSIS_SYNTAX);
}
} else {
notice_help(s_BotServ, u, BOT_SET_UNKNOWN, option);
}
}
return MOD_CONT;
}
MODULE_INIT("bs_set", BSSet)
+20 -20
View File
@@ -43,7 +43,7 @@ class BSUnassign : public Module
**/
void myBotServHelp(User * u)
{
notice_lang(s_BotServ, u, BOT_HELP_CMD_UNASSIGN);
notice_lang(s_BotServ, u, BOT_HELP_CMD_UNASSIGN);
}
/**
@@ -53,26 +53,26 @@ void myBotServHelp(User * u)
**/
int do_unassign(User * u)
{
char *chan = strtok(NULL, " ");
ChannelInfo *ci;
char *chan = strtok(NULL, " ");
ChannelInfo *ci;
if (readonly)
notice_lang(s_BotServ, u, BOT_ASSIGN_READONLY);
else if (!chan)
syntax_error(s_BotServ, u, "UNASSIGN", BOT_UNASSIGN_SYNTAX);
else if (!(ci = cs_findchan(chan)))
notice_lang(s_BotServ, u, CHAN_X_NOT_REGISTERED, chan);
else if (ci->flags & CI_VERBOTEN)
notice_lang(s_BotServ, u, CHAN_X_FORBIDDEN, chan);
else if (!is_services_admin(u) && !check_access(u, ci, CA_ASSIGN))
notice_lang(s_BotServ, u, ACCESS_DENIED);
else if (!ci->bi)
notice_help(s_BotServ, u, BOT_NOT_ASSIGNED);
else {
ci->bi->UnAssign(u, ci);
notice_lang(s_BotServ, u, BOT_UNASSIGN_UNASSIGNED, ci->name);
}
return MOD_CONT;
if (readonly)
notice_lang(s_BotServ, u, BOT_ASSIGN_READONLY);
else if (!chan)
syntax_error(s_BotServ, u, "UNASSIGN", BOT_UNASSIGN_SYNTAX);
else if (!(ci = cs_findchan(chan)))
notice_lang(s_BotServ, u, CHAN_X_NOT_REGISTERED, chan);
else if (ci->flags & CI_VERBOTEN)
notice_lang(s_BotServ, u, CHAN_X_FORBIDDEN, chan);
else if (!is_services_admin(u) && !check_access(u, ci, CA_ASSIGN))
notice_lang(s_BotServ, u, ACCESS_DENIED);
else if (!ci->bi)
notice_help(s_BotServ, u, BOT_NOT_ASSIGNED);
else {
ci->bi->UnAssign(u, ci);
notice_lang(s_BotServ, u, BOT_UNASSIGN_UNASSIGNED, ci->name);
}
return MOD_CONT;
}
MODULE_INIT("bs_unassign", BSUnassign)
+393 -393
View File
@@ -51,72 +51,72 @@ class CSAccess : public Module
**/
void myChanServHelp(User * u)
{
notice_lang(s_ChanServ, u, CHAN_HELP_CMD_ACCESS);
notice_lang(s_ChanServ, u, CHAN_HELP_CMD_LEVELS);
notice_lang(s_ChanServ, u, CHAN_HELP_CMD_ACCESS);
notice_lang(s_ChanServ, u, CHAN_HELP_CMD_LEVELS);
}
static int access_del(User * u, ChannelInfo *ci, ChanAccess * access, int *perm, int uacc)
{
char *nick;
if (!access->in_use)
return 0;
if (!is_services_admin(u) && uacc <= access->level) {
(*perm)++;
return 0;
}
nick = access->nc->display;
access->nc = NULL;
access->in_use = 0;
send_event(EVENT_ACCESS_DEL, 3, ci->name, u->nick, nick);
return 1;
if (!access->in_use)
return 0;
if (!is_services_admin(u) && uacc <= access->level) {
(*perm)++;
return 0;
}
nick = access->nc->display;
access->nc = NULL;
access->in_use = 0;
send_event(EVENT_ACCESS_DEL, 3, ci->name, u->nick, nick);
return 1;
}
static int access_del_callback(User * u, int num, va_list args)
{
ChannelInfo *ci = va_arg(args, ChannelInfo *);
int *last = va_arg(args, int *);
int *perm = va_arg(args, int *);
int uacc = va_arg(args, int);
if (num < 1 || num > ci->accesscount)
return 0;
*last = num;
return access_del(u, ci, &ci->access[num - 1], perm, uacc);
ChannelInfo *ci = va_arg(args, ChannelInfo *);
int *last = va_arg(args, int *);
int *perm = va_arg(args, int *);
int uacc = va_arg(args, int);
if (num < 1 || num > ci->accesscount)
return 0;
*last = num;
return access_del(u, ci, &ci->access[num - 1], perm, uacc);
}
static int access_list(User * u, int index, ChannelInfo * ci,
int *sent_header)
int *sent_header)
{
ChanAccess *access = &ci->access[index];
const char *xop;
ChanAccess *access = &ci->access[index];
const char *xop;
if (!access->in_use)
return 0;
if (!access->in_use)
return 0;
if (!*sent_header) {
notice_lang(s_ChanServ, u, CHAN_ACCESS_LIST_HEADER, ci->name);
*sent_header = 1;
}
if (!*sent_header) {
notice_lang(s_ChanServ, u, CHAN_ACCESS_LIST_HEADER, ci->name);
*sent_header = 1;
}
if (ci->flags & CI_XOP) {
xop = get_xop_level(access->level);
notice_lang(s_ChanServ, u, CHAN_ACCESS_LIST_XOP_FORMAT, index + 1,
xop, access->nc->display);
} else {
notice_lang(s_ChanServ, u, CHAN_ACCESS_LIST_AXS_FORMAT, index + 1,
access->level, access->nc->display);
}
return 1;
if (ci->flags & CI_XOP) {
xop = get_xop_level(access->level);
notice_lang(s_ChanServ, u, CHAN_ACCESS_LIST_XOP_FORMAT, index + 1,
xop, access->nc->display);
} else {
notice_lang(s_ChanServ, u, CHAN_ACCESS_LIST_AXS_FORMAT, index + 1,
access->level, access->nc->display);
}
return 1;
}
static int access_list_callback(User * u, int num, va_list args)
{
ChannelInfo *ci = va_arg(args, ChannelInfo *);
int *sent_header = va_arg(args, int *);
if (num < 1 || num > ci->accesscount)
return 0;
return access_list(u, num - 1, ci, sent_header);
ChannelInfo *ci = va_arg(args, ChannelInfo *);
int *sent_header = va_arg(args, int *);
if (num < 1 || num > ci->accesscount)
return 0;
return access_list(u, num - 1, ci, sent_header);
}
@@ -127,402 +127,402 @@ static int access_list_callback(User * u, int num, va_list args)
**/
int do_access(User * u)
{
char *chan = strtok(NULL, " ");
char *cmd = strtok(NULL, " ");
char *nick = strtok(NULL, " ");
char *s = strtok(NULL, " ");
char event_access[BUFSIZE];
char *chan = strtok(NULL, " ");
char *cmd = strtok(NULL, " ");
char *nick = strtok(NULL, " ");
char *s = strtok(NULL, " ");
char event_access[BUFSIZE];
ChannelInfo *ci;
NickAlias *na = NULL;
NickCore *nc;
ChanAccess *access;
ChannelInfo *ci;
NickAlias *na = NULL;
NickCore *nc;
ChanAccess *access;
int i;
int level = 0, ulev;
int is_list = (cmd && stricmp(cmd, "LIST") == 0);
int is_servadmin = is_services_admin(u);
int i;
int level = 0, ulev;
int is_list = (cmd && stricmp(cmd, "LIST") == 0);
int is_servadmin = is_services_admin(u);
/* If LIST, we don't *require* any parameters, but we can take any.
* If DEL, we require a nick and no level.
* Else (ADD), we require a level (which implies a nick). */
if (!cmd || ((is_list || !stricmp(cmd, "CLEAR")) ? 0 :
(stricmp(cmd, "DEL") == 0) ? (!nick || s) : !s)) {
syntax_error(s_ChanServ, u, "ACCESS", CHAN_ACCESS_SYNTAX);
} else if (!(ci = cs_findchan(chan))) {
notice_lang(s_ChanServ, u, CHAN_X_NOT_REGISTERED, chan);
} else if (ci->flags & CI_VERBOTEN) {
notice_lang(s_ChanServ, u, CHAN_X_FORBIDDEN, chan);
/* We still allow LIST in xOP mode, but not others */
} else if ((ci->flags & CI_XOP) && !is_list) {
/* If LIST, we don't *require* any parameters, but we can take any.
* If DEL, we require a nick and no level.
* Else (ADD), we require a level (which implies a nick). */
if (!cmd || ((is_list || !stricmp(cmd, "CLEAR")) ? 0 :
(stricmp(cmd, "DEL") == 0) ? (!nick || s) : !s)) {
syntax_error(s_ChanServ, u, "ACCESS", CHAN_ACCESS_SYNTAX);
} else if (!(ci = cs_findchan(chan))) {
notice_lang(s_ChanServ, u, CHAN_X_NOT_REGISTERED, chan);
} else if (ci->flags & CI_VERBOTEN) {
notice_lang(s_ChanServ, u, CHAN_X_FORBIDDEN, chan);
/* We still allow LIST in xOP mode, but not others */
} else if ((ci->flags & CI_XOP) && !is_list) {
if (ircd->halfop)
notice_lang(s_ChanServ, u, CHAN_ACCESS_XOP_HOP, s_ChanServ);
notice_lang(s_ChanServ, u, CHAN_ACCESS_XOP_HOP, s_ChanServ);
else
notice_lang(s_ChanServ, u, CHAN_ACCESS_XOP, s_ChanServ);
} else if (((is_list && !check_access(u, ci, CA_ACCESS_LIST))
|| (!is_list && !check_access(u, ci, CA_ACCESS_CHANGE)))
&& !is_servadmin) {
notice_lang(s_ChanServ, u, ACCESS_DENIED);
} else if (stricmp(cmd, "ADD") == 0) {
if (readonly) {
notice_lang(s_ChanServ, u, CHAN_ACCESS_DISABLED);
return MOD_CONT;
}
notice_lang(s_ChanServ, u, CHAN_ACCESS_XOP, s_ChanServ);
} else if (((is_list && !check_access(u, ci, CA_ACCESS_LIST))
|| (!is_list && !check_access(u, ci, CA_ACCESS_CHANGE)))
&& !is_servadmin) {
notice_lang(s_ChanServ, u, ACCESS_DENIED);
} else if (stricmp(cmd, "ADD") == 0) {
if (readonly) {
notice_lang(s_ChanServ, u, CHAN_ACCESS_DISABLED);
return MOD_CONT;
}
level = atoi(s);
ulev = get_access(u, ci);
level = atoi(s);
ulev = get_access(u, ci);
if (!is_servadmin && level >= ulev) {
notice_lang(s_ChanServ, u, PERMISSION_DENIED);
return MOD_CONT;
}
if (!is_servadmin && level >= ulev) {
notice_lang(s_ChanServ, u, PERMISSION_DENIED);
return MOD_CONT;
}
if (level == 0) {
notice_lang(s_ChanServ, u, CHAN_ACCESS_LEVEL_NONZERO);
return MOD_CONT;
} else if (level <= ACCESS_INVALID || level >= ACCESS_FOUNDER) {
notice_lang(s_ChanServ, u, CHAN_ACCESS_LEVEL_RANGE,
ACCESS_INVALID + 1, ACCESS_FOUNDER - 1);
return MOD_CONT;
}
if (level == 0) {
notice_lang(s_ChanServ, u, CHAN_ACCESS_LEVEL_NONZERO);
return MOD_CONT;
} else if (level <= ACCESS_INVALID || level >= ACCESS_FOUNDER) {
notice_lang(s_ChanServ, u, CHAN_ACCESS_LEVEL_RANGE,
ACCESS_INVALID + 1, ACCESS_FOUNDER - 1);
return MOD_CONT;
}
na = findnick(nick);
if (!na) {
notice_lang(s_ChanServ, u, CHAN_ACCESS_NICKS_ONLY);
return MOD_CONT;
}
if (na->status & NS_VERBOTEN) {
notice_lang(s_ChanServ, u, NICK_X_FORBIDDEN, nick);
return MOD_CONT;
}
na = findnick(nick);
if (!na) {
notice_lang(s_ChanServ, u, CHAN_ACCESS_NICKS_ONLY);
return MOD_CONT;
}
if (na->status & NS_VERBOTEN) {
notice_lang(s_ChanServ, u, NICK_X_FORBIDDEN, nick);
return MOD_CONT;
}
nc = na->nc;
for (access = ci->access, i = 0; i < ci->accesscount;
access++, i++) {
if (access->nc == nc) {
/* Don't allow lowering from a level >= ulev */
if (!is_servadmin && access->level >= ulev) {
notice_lang(s_ChanServ, u, PERMISSION_DENIED);
return MOD_CONT;
}
if (access->level == level) {
notice_lang(s_ChanServ, u, CHAN_ACCESS_LEVEL_UNCHANGED,
access->nc->display, chan, level);
return MOD_CONT;
}
access->level = level;
snprintf(event_access, BUFSIZE, "%d", access->level);
send_event(EVENT_ACCESS_CHANGE, 4, ci->name, u->nick,
na->nick, event_access);
alog("%s: %s!%s@%s (level %d) set access level %d to %s (group %s) on channel %s", s_ChanServ, u->nick, u->username, u->host, ulev, access->level, na->nick, nc->display, ci->name);
notice_lang(s_ChanServ, u, CHAN_ACCESS_LEVEL_CHANGED,
access->nc->display, chan, level);
return MOD_CONT;
}
}
nc = na->nc;
for (access = ci->access, i = 0; i < ci->accesscount;
access++, i++) {
if (access->nc == nc) {
/* Don't allow lowering from a level >= ulev */
if (!is_servadmin && access->level >= ulev) {
notice_lang(s_ChanServ, u, PERMISSION_DENIED);
return MOD_CONT;
}
if (access->level == level) {
notice_lang(s_ChanServ, u, CHAN_ACCESS_LEVEL_UNCHANGED,
access->nc->display, chan, level);
return MOD_CONT;
}
access->level = level;
snprintf(event_access, BUFSIZE, "%d", access->level);
send_event(EVENT_ACCESS_CHANGE, 4, ci->name, u->nick,
na->nick, event_access);
alog("%s: %s!%s@%s (level %d) set access level %d to %s (group %s) on channel %s", s_ChanServ, u->nick, u->username, u->host, ulev, access->level, na->nick, nc->display, ci->name);
notice_lang(s_ChanServ, u, CHAN_ACCESS_LEVEL_CHANGED,
access->nc->display, chan, level);
return MOD_CONT;
}
}
/* All entries should be in use so we no longer need
* to go over the entire list..
for (i = 0; i < ci->accesscount; i++) {
if (!ci->access[i].in_use)
break;
}
*/
/* All entries should be in use so we no longer need
* to go over the entire list..
for (i = 0; i < ci->accesscount; i++) {
if (!ci->access[i].in_use)
break;
}
*/
if (i < CSAccessMax) {
ci->accesscount++;
ci->access =
(ChanAccess *)srealloc(ci->access,
sizeof(ChanAccess) * ci->accesscount);
} else {
notice_lang(s_ChanServ, u, CHAN_ACCESS_REACHED_LIMIT,
CSAccessMax);
return MOD_CONT;
}
if (i < CSAccessMax) {
ci->accesscount++;
ci->access =
(ChanAccess *)srealloc(ci->access,
sizeof(ChanAccess) * ci->accesscount);
} else {
notice_lang(s_ChanServ, u, CHAN_ACCESS_REACHED_LIMIT,
CSAccessMax);
return MOD_CONT;
}
access = &ci->access[i];
access->nc = nc;
access->in_use = 1;
access->level = level;
access->last_seen = 0;
access = &ci->access[i];
access->nc = nc;
access->in_use = 1;
access->level = level;
access->last_seen = 0;
snprintf(event_access, BUFSIZE, "%d", access->level);
send_event(EVENT_ACCESS_ADD, 4, ci->name, u->nick, na->nick,
event_access);
alog("%s: %s!%s@%s (level %d) set access level %d to %s (group %s) on channel %s", s_ChanServ, u->nick, u->username, u->host, ulev, access->level, na->nick, nc->display, ci->name);
notice_lang(s_ChanServ, u, CHAN_ACCESS_ADDED, nc->display,
ci->name, access->level);
} else if (stricmp(cmd, "DEL") == 0) {
int deleted, a, b;
if (readonly) {
notice_lang(s_ChanServ, u, CHAN_ACCESS_DISABLED);
return MOD_CONT;
}
snprintf(event_access, BUFSIZE, "%d", access->level);
send_event(EVENT_ACCESS_ADD, 4, ci->name, u->nick, na->nick,
event_access);
alog("%s: %s!%s@%s (level %d) set access level %d to %s (group %s) on channel %s", s_ChanServ, u->nick, u->username, u->host, ulev, access->level, na->nick, nc->display, ci->name);
notice_lang(s_ChanServ, u, CHAN_ACCESS_ADDED, nc->display,
ci->name, access->level);
} else if (stricmp(cmd, "DEL") == 0) {
int deleted, a, b;
if (readonly) {
notice_lang(s_ChanServ, u, CHAN_ACCESS_DISABLED);
return MOD_CONT;
}
if (ci->accesscount == 0) {
notice_lang(s_ChanServ, u, CHAN_ACCESS_LIST_EMPTY, chan);
return MOD_CONT;
}
if (ci->accesscount == 0) {
notice_lang(s_ChanServ, u, CHAN_ACCESS_LIST_EMPTY, chan);
return MOD_CONT;
}
/* Special case: is it a number/list? Only do search if it isn't. */
if (isdigit(*nick) && strspn(nick, "1234567890,-") == strlen(nick)) {
int count, last = -1, perm = 0;
deleted = process_numlist(nick, &count, access_del_callback, u,
ci, &last, &perm, get_access(u, ci));
if (!deleted) {
if (perm) {
notice_lang(s_ChanServ, u, PERMISSION_DENIED);
} else if (count == 1) {
notice_lang(s_ChanServ, u, CHAN_ACCESS_NO_SUCH_ENTRY,
last, ci->name);
} else {
notice_lang(s_ChanServ, u, CHAN_ACCESS_NO_MATCH,
ci->name);
}
} else if (deleted == 1) {
notice_lang(s_ChanServ, u, CHAN_ACCESS_DELETED_ONE,
ci->name);
} else {
notice_lang(s_ChanServ, u, CHAN_ACCESS_DELETED_SEVERAL,
deleted, ci->name);
}
} else {
na = findnick(nick);
if (!na) {
notice_lang(s_ChanServ, u, NICK_X_NOT_REGISTERED, nick);
return MOD_CONT;
}
nc = na->nc;
for (i = 0; i < ci->accesscount; i++) {
if (ci->access[i].nc == nc)
break;
}
if (i == ci->accesscount) {
notice_lang(s_ChanServ, u, CHAN_ACCESS_NOT_FOUND, nick,
chan);
return MOD_CONT;
}
access = &ci->access[i];
if (!is_servadmin && get_access(u, ci) <= access->level) {
deleted = 0;
notice_lang(s_ChanServ, u, PERMISSION_DENIED);
} else {
notice_lang(s_ChanServ, u, CHAN_ACCESS_DELETED,
access->nc->display, ci->name);
alog("%s: %s!%s@%s (level %d) deleted access of %s (group %s) on %s", s_ChanServ, u->nick, u->username, u->host, get_access(u, ci), na->nick, access->nc->display, chan);
access->nc = NULL;
access->in_use = 0;
deleted = 1;
}
}
/* Special case: is it a number/list? Only do search if it isn't. */
if (isdigit(*nick) && strspn(nick, "1234567890,-") == strlen(nick)) {
int count, last = -1, perm = 0;
deleted = process_numlist(nick, &count, access_del_callback, u,
ci, &last, &perm, get_access(u, ci));
if (!deleted) {
if (perm) {
notice_lang(s_ChanServ, u, PERMISSION_DENIED);
} else if (count == 1) {
notice_lang(s_ChanServ, u, CHAN_ACCESS_NO_SUCH_ENTRY,
last, ci->name);
} else {
notice_lang(s_ChanServ, u, CHAN_ACCESS_NO_MATCH,
ci->name);
}
} else if (deleted == 1) {
notice_lang(s_ChanServ, u, CHAN_ACCESS_DELETED_ONE,
ci->name);
} else {
notice_lang(s_ChanServ, u, CHAN_ACCESS_DELETED_SEVERAL,
deleted, ci->name);
}
} else {
na = findnick(nick);
if (!na) {
notice_lang(s_ChanServ, u, NICK_X_NOT_REGISTERED, nick);
return MOD_CONT;
}
nc = na->nc;
for (i = 0; i < ci->accesscount; i++) {
if (ci->access[i].nc == nc)
break;
}
if (i == ci->accesscount) {
notice_lang(s_ChanServ, u, CHAN_ACCESS_NOT_FOUND, nick,
chan);
return MOD_CONT;
}
access = &ci->access[i];
if (!is_servadmin && get_access(u, ci) <= access->level) {
deleted = 0;
notice_lang(s_ChanServ, u, PERMISSION_DENIED);
} else {
notice_lang(s_ChanServ, u, CHAN_ACCESS_DELETED,
access->nc->display, ci->name);
alog("%s: %s!%s@%s (level %d) deleted access of %s (group %s) on %s", s_ChanServ, u->nick, u->username, u->host, get_access(u, ci), na->nick, access->nc->display, chan);
access->nc = NULL;
access->in_use = 0;
deleted = 1;
}
}
if (deleted) {
/* Reordering - DrStein */
for (b = 0; b < ci->accesscount; b++) {
if (ci->access[b].in_use) {
for (a = 0; a < ci->accesscount; a++) {
if (a > b)
break;
if (!ci->access[a].in_use) {
ci->access[a].in_use = 1;
ci->access[a].level = ci->access[b].level;
ci->access[a].nc = ci->access[b].nc;
ci->access[a].last_seen =
ci->access[b].last_seen;
ci->access[b].nc = NULL;
ci->access[b].in_use = 0;
break;
}
}
}
}
if (deleted) {
/* Reordering - DrStein */
for (b = 0; b < ci->accesscount; b++) {
if (ci->access[b].in_use) {
for (a = 0; a < ci->accesscount; a++) {
if (a > b)
break;
if (!ci->access[a].in_use) {
ci->access[a].in_use = 1;
ci->access[a].level = ci->access[b].level;
ci->access[a].nc = ci->access[b].nc;
ci->access[a].last_seen =
ci->access[b].last_seen;
ci->access[b].nc = NULL;
ci->access[b].in_use = 0;
break;
}
}
}
}
/* After reordering only the entries at the end could still be empty.
* We ll free the places no longer in use... */
for (i = ci->accesscount - 1; i >= 0; i--) {
if (ci->access[i].in_use == 1)
break;
/* After reordering only the entries at the end could still be empty.
* We ll free the places no longer in use... */
for (i = ci->accesscount - 1; i >= 0; i--) {
if (ci->access[i].in_use == 1)
break;
ci->accesscount--;
}
ci->access =
(ChanAccess *)srealloc(ci->access,sizeof(ChanAccess) * ci->accesscount);
ci->accesscount--;
}
ci->access =
(ChanAccess *)srealloc(ci->access,sizeof(ChanAccess) * ci->accesscount);
/* We don't know the nick if someone used numbers, so we trigger the event without
* nick param. We just do this once, even if someone enters a range. -Certus */
if (na)
send_event(EVENT_ACCESS_DEL, 3, ci->name, u->nick, na->nick);
else
send_event(EVENT_ACCESS_DEL, 2, ci->name, u->nick);
}
} else if (stricmp(cmd, "LIST") == 0) {
int sent_header = 0;
/* We don't know the nick if someone used numbers, so we trigger the event without
* nick param. We just do this once, even if someone enters a range. -Certus */
if (na)
send_event(EVENT_ACCESS_DEL, 3, ci->name, u->nick, na->nick);
else
send_event(EVENT_ACCESS_DEL, 2, ci->name, u->nick);
}
} else if (stricmp(cmd, "LIST") == 0) {
int sent_header = 0;
if (ci->accesscount == 0) {
notice_lang(s_ChanServ, u, CHAN_ACCESS_LIST_EMPTY, chan);
return MOD_CONT;
}
if (nick && strspn(nick, "1234567890,-") == strlen(nick)) {
process_numlist(nick, NULL, access_list_callback, u, ci,
&sent_header);
} else {
for (i = 0; i < ci->accesscount; i++) {
if (nick && ci->access[i].nc
&& !match_wild_nocase(nick, ci->access[i].nc->display))
continue;
access_list(u, i, ci, &sent_header);
}
}
if (!sent_header) {
notice_lang(s_ChanServ, u, CHAN_ACCESS_NO_MATCH, chan);
} else {
notice_lang(s_ChanServ, u, CHAN_ACCESS_LIST_FOOTER, ci->name);
}
} else if (stricmp(cmd, "CLEAR") == 0) {
if (ci->accesscount == 0) {
notice_lang(s_ChanServ, u, CHAN_ACCESS_LIST_EMPTY, chan);
return MOD_CONT;
}
if (nick && strspn(nick, "1234567890,-") == strlen(nick)) {
process_numlist(nick, NULL, access_list_callback, u, ci,
&sent_header);
} else {
for (i = 0; i < ci->accesscount; i++) {
if (nick && ci->access[i].nc
&& !match_wild_nocase(nick, ci->access[i].nc->display))
continue;
access_list(u, i, ci, &sent_header);
}
}
if (!sent_header) {
notice_lang(s_ChanServ, u, CHAN_ACCESS_NO_MATCH, chan);
} else {
notice_lang(s_ChanServ, u, CHAN_ACCESS_LIST_FOOTER, ci->name);
}
} else if (stricmp(cmd, "CLEAR") == 0) {
if (readonly) {
notice_lang(s_ChanServ, u, CHAN_ACCESS_DISABLED);
return MOD_CONT;
}
if (readonly) {
notice_lang(s_ChanServ, u, CHAN_ACCESS_DISABLED);
return MOD_CONT;
}
if (!is_servadmin && !is_founder(u, ci)) {
notice_lang(s_ChanServ, u, PERMISSION_DENIED);
return MOD_CONT;
}
if (!is_servadmin && !is_founder(u, ci)) {
notice_lang(s_ChanServ, u, PERMISSION_DENIED);
return MOD_CONT;
}
free(ci->access);
ci->access = NULL;
ci->accesscount = 0;
send_event(EVENT_ACCESS_CLEAR, 2, ci->name, u->nick);
free(ci->access);
ci->access = NULL;
ci->accesscount = 0;
send_event(EVENT_ACCESS_CLEAR, 2, ci->name, u->nick);
notice_lang(s_ChanServ, u, CHAN_ACCESS_CLEAR, ci->name);
alog("%s: %s!%s@%s (level %d) cleared access list on %s",
s_ChanServ, u->nick, u->username, u->host,
get_access(u, ci), chan);
notice_lang(s_ChanServ, u, CHAN_ACCESS_CLEAR, ci->name);
alog("%s: %s!%s@%s (level %d) cleared access list on %s",
s_ChanServ, u->nick, u->username, u->host,
get_access(u, ci), chan);
} else {
syntax_error(s_ChanServ, u, "ACCESS", CHAN_ACCESS_SYNTAX);
}
return MOD_CONT;
} else {
syntax_error(s_ChanServ, u, "ACCESS", CHAN_ACCESS_SYNTAX);
}
return MOD_CONT;
}
int do_levels(User * u)
{
char *chan = strtok(NULL, " ");
char *cmd = strtok(NULL, " ");
char *what = strtok(NULL, " ");
char *s = strtok(NULL, " ");
char *error;
char *chan = strtok(NULL, " ");
char *cmd = strtok(NULL, " ");
char *what = strtok(NULL, " ");
char *s = strtok(NULL, " ");
char *error;
ChannelInfo *ci;
int level;
int i;
ChannelInfo *ci;
int level;
int i;
/* If SET, we want two extra parameters; if DIS[ABLE] or FOUNDER, we want only
* one; else, we want none.
*/
if (!cmd
|| ((stricmp(cmd, "SET") == 0) ? !s
: ((strnicmp(cmd, "DIS", 3) == 0)) ? (!what || s) : !!what)) {
syntax_error(s_ChanServ, u, "LEVELS", CHAN_LEVELS_SYNTAX);
} else if (!(ci = cs_findchan(chan))) {
notice_lang(s_ChanServ, u, CHAN_X_NOT_REGISTERED, chan);
} else if (ci->flags & CI_VERBOTEN) {
notice_lang(s_ChanServ, u, CHAN_X_FORBIDDEN, chan);
} else if (ci->flags & CI_XOP) {
notice_lang(s_ChanServ, u, CHAN_LEVELS_XOP);
} else if (!is_founder(u, ci) && !is_services_admin(u)) {
notice_lang(s_ChanServ, u, ACCESS_DENIED);
} else if (stricmp(cmd, "SET") == 0) {
level = strtol(s, &error, 10);
/* If SET, we want two extra parameters; if DIS[ABLE] or FOUNDER, we want only
* one; else, we want none.
*/
if (!cmd
|| ((stricmp(cmd, "SET") == 0) ? !s
: ((strnicmp(cmd, "DIS", 3) == 0)) ? (!what || s) : !!what)) {
syntax_error(s_ChanServ, u, "LEVELS", CHAN_LEVELS_SYNTAX);
} else if (!(ci = cs_findchan(chan))) {
notice_lang(s_ChanServ, u, CHAN_X_NOT_REGISTERED, chan);
} else if (ci->flags & CI_VERBOTEN) {
notice_lang(s_ChanServ, u, CHAN_X_FORBIDDEN, chan);
} else if (ci->flags & CI_XOP) {
notice_lang(s_ChanServ, u, CHAN_LEVELS_XOP);
} else if (!is_founder(u, ci) && !is_services_admin(u)) {
notice_lang(s_ChanServ, u, ACCESS_DENIED);
} else if (stricmp(cmd, "SET") == 0) {
level = strtol(s, &error, 10);
if (*error != '\0') {
syntax_error(s_ChanServ, u, "LEVELS", CHAN_LEVELS_SYNTAX);
return MOD_CONT;
}
if (*error != '\0') {
syntax_error(s_ChanServ, u, "LEVELS", CHAN_LEVELS_SYNTAX);
return MOD_CONT;
}
if (level <= ACCESS_INVALID || level >= ACCESS_FOUNDER) {
notice_lang(s_ChanServ, u, CHAN_LEVELS_RANGE,
ACCESS_INVALID + 1, ACCESS_FOUNDER - 1);
return MOD_CONT;
}
if (level <= ACCESS_INVALID || level >= ACCESS_FOUNDER) {
notice_lang(s_ChanServ, u, CHAN_LEVELS_RANGE,
ACCESS_INVALID + 1, ACCESS_FOUNDER - 1);
return MOD_CONT;
}
for (i = 0; levelinfo[i].what >= 0; i++) {
if (stricmp(levelinfo[i].name, what) == 0) {
ci->levels[levelinfo[i].what] = level;
for (i = 0; levelinfo[i].what >= 0; i++) {
if (stricmp(levelinfo[i].name, what) == 0) {
ci->levels[levelinfo[i].what] = level;
alog("%s: %s!%s@%s set level %s on channel %s to %d",
s_ChanServ, u->nick, u->username, u->host,
levelinfo[i].name, ci->name, level);
notice_lang(s_ChanServ, u, CHAN_LEVELS_CHANGED,
levelinfo[i].name, chan, level);
return MOD_CONT;
}
}
alog("%s: %s!%s@%s set level %s on channel %s to %d",
s_ChanServ, u->nick, u->username, u->host,
levelinfo[i].name, ci->name, level);
notice_lang(s_ChanServ, u, CHAN_LEVELS_CHANGED,
levelinfo[i].name, chan, level);
return MOD_CONT;
}
}
notice_lang(s_ChanServ, u, CHAN_LEVELS_UNKNOWN, what, s_ChanServ);
notice_lang(s_ChanServ, u, CHAN_LEVELS_UNKNOWN, what, s_ChanServ);
} else if (stricmp(cmd, "DIS") == 0 || stricmp(cmd, "DISABLE") == 0) {
for (i = 0; levelinfo[i].what >= 0; i++) {
if (stricmp(levelinfo[i].name, what) == 0) {
ci->levels[levelinfo[i].what] = ACCESS_INVALID;
} else if (stricmp(cmd, "DIS") == 0 || stricmp(cmd, "DISABLE") == 0) {
for (i = 0; levelinfo[i].what >= 0; i++) {
if (stricmp(levelinfo[i].name, what) == 0) {
ci->levels[levelinfo[i].what] = ACCESS_INVALID;
alog("%s: %s!%s@%s disabled level %s on channel %s",
s_ChanServ, u->nick, u->username, u->host,
levelinfo[i].name, ci->name);
notice_lang(s_ChanServ, u, CHAN_LEVELS_DISABLED,
levelinfo[i].name, chan);
return MOD_CONT;
}
}
alog("%s: %s!%s@%s disabled level %s on channel %s",
s_ChanServ, u->nick, u->username, u->host,
levelinfo[i].name, ci->name);
notice_lang(s_ChanServ, u, CHAN_LEVELS_DISABLED,
levelinfo[i].name, chan);
return MOD_CONT;
}
}
notice_lang(s_ChanServ, u, CHAN_LEVELS_UNKNOWN, what, s_ChanServ);
} else if (stricmp(cmd, "LIST") == 0) {
notice_lang(s_ChanServ, u, CHAN_LEVELS_LIST_HEADER, chan);
notice_lang(s_ChanServ, u, CHAN_LEVELS_UNKNOWN, what, s_ChanServ);
} else if (stricmp(cmd, "LIST") == 0) {
notice_lang(s_ChanServ, u, CHAN_LEVELS_LIST_HEADER, chan);
if (!levelinfo_maxwidth) {
for (i = 0; levelinfo[i].what >= 0; i++) {
int len = strlen(levelinfo[i].name);
if (len > levelinfo_maxwidth)
levelinfo_maxwidth = len;
}
}
if (!levelinfo_maxwidth) {
for (i = 0; levelinfo[i].what >= 0; i++) {
int len = strlen(levelinfo[i].name);
if (len > levelinfo_maxwidth)
levelinfo_maxwidth = len;
}
}
for (i = 0; levelinfo[i].what >= 0; i++) {
int j = ci->levels[levelinfo[i].what];
for (i = 0; levelinfo[i].what >= 0; i++) {
int j = ci->levels[levelinfo[i].what];
if (j == ACCESS_INVALID) {
j = levelinfo[i].what;
if (j == ACCESS_INVALID) {
j = levelinfo[i].what;
if (j == CA_AUTOOP || j == CA_AUTODEOP || j == CA_AUTOVOICE
|| j == CA_NOJOIN) {
notice_lang(s_ChanServ, u, CHAN_LEVELS_LIST_DISABLED,
levelinfo_maxwidth, levelinfo[i].name);
} else {
notice_lang(s_ChanServ, u, CHAN_LEVELS_LIST_DISABLED,
levelinfo_maxwidth, levelinfo[i].name);
}
} else if (j == ACCESS_FOUNDER) {
notice_lang(s_ChanServ, u, CHAN_LEVELS_LIST_FOUNDER,
levelinfo_maxwidth, levelinfo[i].name);
} else {
notice_lang(s_ChanServ, u, CHAN_LEVELS_LIST_NORMAL,
levelinfo_maxwidth, levelinfo[i].name, j);
}
}
if (j == CA_AUTOOP || j == CA_AUTODEOP || j == CA_AUTOVOICE
|| j == CA_NOJOIN) {
notice_lang(s_ChanServ, u, CHAN_LEVELS_LIST_DISABLED,
levelinfo_maxwidth, levelinfo[i].name);
} else {
notice_lang(s_ChanServ, u, CHAN_LEVELS_LIST_DISABLED,
levelinfo_maxwidth, levelinfo[i].name);
}
} else if (j == ACCESS_FOUNDER) {
notice_lang(s_ChanServ, u, CHAN_LEVELS_LIST_FOUNDER,
levelinfo_maxwidth, levelinfo[i].name);
} else {
notice_lang(s_ChanServ, u, CHAN_LEVELS_LIST_NORMAL,
levelinfo_maxwidth, levelinfo[i].name, j);
}
}
} else if (stricmp(cmd, "RESET") == 0) {
reset_levels(ci);
} else if (stricmp(cmd, "RESET") == 0) {
reset_levels(ci);
alog("%s: %s!%s@%s reset levels definitions on channel %s",
s_ChanServ, u->nick, u->username, u->host, ci->name);
notice_lang(s_ChanServ, u, CHAN_LEVELS_RESET, chan);
} else {
syntax_error(s_ChanServ, u, "LEVELS", CHAN_LEVELS_SYNTAX);
}
return MOD_CONT;
alog("%s: %s!%s@%s reset levels definitions on channel %s",
s_ChanServ, u->nick, u->username, u->host, ci->name);
notice_lang(s_ChanServ, u, CHAN_LEVELS_RESET, chan);
} else {
syntax_error(s_ChanServ, u, "LEVELS", CHAN_LEVELS_SYNTAX);
}
return MOD_CONT;
}
MODULE_INIT("cs_access", CSAccess)
+497 -497
View File
File diff suppressed because it is too large Load Diff
+127 -127
View File
@@ -46,8 +46,8 @@ class CSBan : public Module
**/
void myChanServHelp(User * u)
{
notice_lang(s_ChanServ, u, CHAN_HELP_CMD_BAN);
notice_lang(s_ChanServ, u, CHAN_HELP_CMD_UNBAN);
notice_lang(s_ChanServ, u, CHAN_HELP_CMD_BAN);
notice_lang(s_ChanServ, u, CHAN_HELP_CMD_UNBAN);
}
/**
@@ -57,132 +57,132 @@ void myChanServHelp(User * u)
**/
int do_ban(User * u)
{
char *chan = strtok(NULL, " ");
char *params = strtok(NULL, " ");
char *reason = strtok(NULL, "");
char *chan = strtok(NULL, " ");
char *params = strtok(NULL, " ");
char *reason = strtok(NULL, "");
Channel *c;
ChannelInfo *ci;
User *u2;
Channel *c;
ChannelInfo *ci;
User *u2;
int is_same;
int is_same;
if (!reason) {
reason = (char *)"Requested"; // XXX unsafe cast -- w00t
} else {
if (strlen(reason) > 200)
reason[200] = '\0';
}
if (!reason) {
reason = (char *)"Requested"; // XXX unsafe cast -- w00t
} else {
if (strlen(reason) > 200)
reason[200] = '\0';
}
if (!chan) {
struct u_chanlist *uc, *next;
if (!chan) {
struct u_chanlist *uc, *next;
/* Bans the user on every channels he is on. */
/* Bans the user on every channels he is on. */
for (uc = u->chans; uc; uc = next) {
next = uc->next;
if ((ci = uc->chan->ci) && !(ci->flags & CI_VERBOTEN)
&& check_access(u, ci, CA_BANME)) {
const char *av[3];
char mask[BUFSIZE];
for (uc = u->chans; uc; uc = next) {
next = uc->next;
if ((ci = uc->chan->ci) && !(ci->flags & CI_VERBOTEN)
&& check_access(u, ci, CA_BANME)) {
const char *av[3];
char mask[BUFSIZE];
/*
* Dont ban/kick the user on channels where he is excepted
* to prevent services <-> server wars.
*/
if (ircd->except) {
if (is_excepted(ci, u))
notice_lang(s_ChanServ, u, CHAN_EXCEPTED,
u->nick, ci->name);
continue;
}
if (is_protected(u)) {
notice_lang(s_ChanServ, u, PERMISSION_DENIED);
continue;
}
/*
* Dont ban/kick the user on channels where he is excepted
* to prevent services <-> server wars.
*/
if (ircd->except) {
if (is_excepted(ci, u))
notice_lang(s_ChanServ, u, CHAN_EXCEPTED,
u->nick, ci->name);
continue;
}
if (is_protected(u)) {
notice_lang(s_ChanServ, u, PERMISSION_DENIED);
continue;
}
av[0] = "+b";
get_idealban(ci, u, mask, sizeof(mask));
av[1] = mask;
ircdproto->SendMode(whosends(ci), uc->chan->name, "+b %s",
av[1]);
chan_set_modes(s_ChanServ, uc->chan, 2, av, 1);
av[0] = "+b";
get_idealban(ci, u, mask, sizeof(mask));
av[1] = mask;
ircdproto->SendMode(whosends(ci), uc->chan->name, "+b %s",
av[1]);
chan_set_modes(s_ChanServ, uc->chan, 2, av, 1);
if ((ci->flags & CI_SIGNKICK)
|| ((ci->flags & CI_SIGNKICK_LEVEL)
&& !check_access(u, ci, CA_SIGNKICK)))
ircdproto->SendKick(whosends(ci), ci->name, u->nick,
"%s (%s)", reason, u->nick);
else
ircdproto->SendKick(whosends(ci), ci->name, u->nick, "%s",
reason);
if ((ci->flags & CI_SIGNKICK)
|| ((ci->flags & CI_SIGNKICK_LEVEL)
&& !check_access(u, ci, CA_SIGNKICK)))
ircdproto->SendKick(whosends(ci), ci->name, u->nick,
"%s (%s)", reason, u->nick);
else
ircdproto->SendKick(whosends(ci), ci->name, u->nick, "%s",
reason);
const char *kav[4];
kav[0] = ci->name;
kav[1] = u->nick;
kav[2] = reason;
do_kick(s_ChanServ, 3, kav);
}
}
kav[0] = ci->name;
kav[1] = u->nick;
kav[2] = reason;
do_kick(s_ChanServ, 3, kav);
}
}
return MOD_CONT;
} else if (!params) {
params = u->nick;
}
return MOD_CONT;
} else if (!params) {
params = u->nick;
}
is_same = (params == u->nick) ? 1 : (stricmp(params, u->nick) == 0);
is_same = (params == u->nick) ? 1 : (stricmp(params, u->nick) == 0);
if (!(c = findchan(chan))) {
notice_lang(s_ChanServ, u, CHAN_X_NOT_IN_USE, chan);
} else if (!(ci = c->ci)) {
notice_lang(s_ChanServ, u, CHAN_X_NOT_REGISTERED, chan);
} else if (ci->flags & CI_VERBOTEN) {
notice_lang(s_ChanServ, u, CHAN_X_FORBIDDEN, chan);
} else if (is_same ? !(u2 = u) : !(u2 = finduser(params))) {
notice_lang(s_ChanServ, u, NICK_X_NOT_IN_USE, params);
} else if (!is_same ? !check_access(u, ci, CA_BAN) :
!check_access(u, ci, CA_BANME)) {
notice_lang(s_ChanServ, u, ACCESS_DENIED);
} else if (!is_same && (ci->flags & CI_PEACE)
&& (get_access(u2, ci) >= get_access(u, ci))) {
notice_lang(s_ChanServ, u, PERMISSION_DENIED);
/*
* Dont ban/kick the user on channels where he is excepted
* to prevent services <-> server wars.
*/
} else if (ircd->except && is_excepted(ci, u2)) {
notice_lang(s_ChanServ, u, CHAN_EXCEPTED, u2->nick, ci->name);
} else if (ircd->protectedumode && is_protected(u2)) {
notice_lang(s_ChanServ, u, PERMISSION_DENIED);
} else {
const char *av[3];
char mask[BUFSIZE];
if (!(c = findchan(chan))) {
notice_lang(s_ChanServ, u, CHAN_X_NOT_IN_USE, chan);
} else if (!(ci = c->ci)) {
notice_lang(s_ChanServ, u, CHAN_X_NOT_REGISTERED, chan);
} else if (ci->flags & CI_VERBOTEN) {
notice_lang(s_ChanServ, u, CHAN_X_FORBIDDEN, chan);
} else if (is_same ? !(u2 = u) : !(u2 = finduser(params))) {
notice_lang(s_ChanServ, u, NICK_X_NOT_IN_USE, params);
} else if (!is_same ? !check_access(u, ci, CA_BAN) :
!check_access(u, ci, CA_BANME)) {
notice_lang(s_ChanServ, u, ACCESS_DENIED);
} else if (!is_same && (ci->flags & CI_PEACE)
&& (get_access(u2, ci) >= get_access(u, ci))) {
notice_lang(s_ChanServ, u, PERMISSION_DENIED);
/*
* Dont ban/kick the user on channels where he is excepted
* to prevent services <-> server wars.
*/
} else if (ircd->except && is_excepted(ci, u2)) {
notice_lang(s_ChanServ, u, CHAN_EXCEPTED, u2->nick, ci->name);
} else if (ircd->protectedumode && is_protected(u2)) {
notice_lang(s_ChanServ, u, PERMISSION_DENIED);
} else {
const char *av[3];
char mask[BUFSIZE];
av[0] = "+b";
get_idealban(ci, u2, mask, sizeof(mask));
av[1] = mask;
ircdproto->SendMode(whosends(ci), c->name, "+b %s", av[1]);
chan_set_modes(s_ChanServ, c, 2, av, 1);
av[0] = "+b";
get_idealban(ci, u2, mask, sizeof(mask));
av[1] = mask;
ircdproto->SendMode(whosends(ci), c->name, "+b %s", av[1]);
chan_set_modes(s_ChanServ, c, 2, av, 1);
/* We still allow host banning while not allowing to kick */
if (!is_on_chan(c, u2))
return MOD_CONT;
/* We still allow host banning while not allowing to kick */
if (!is_on_chan(c, u2))
return MOD_CONT;
if ((ci->flags & CI_SIGNKICK)
|| ((ci->flags & CI_SIGNKICK_LEVEL)
&& !check_access(u, ci, CA_SIGNKICK)))
ircdproto->SendKick(whosends(ci), ci->name, params, "%s (%s)",
reason, u->nick);
else
ircdproto->SendKick(whosends(ci), ci->name, params, "%s", reason);
if ((ci->flags & CI_SIGNKICK)
|| ((ci->flags & CI_SIGNKICK_LEVEL)
&& !check_access(u, ci, CA_SIGNKICK)))
ircdproto->SendKick(whosends(ci), ci->name, params, "%s (%s)",
reason, u->nick);
else
ircdproto->SendKick(whosends(ci), ci->name, params, "%s", reason);
const char *kav[4];
kav[0] = ci->name;
kav[1] = params;
kav[2] = reason;
do_kick(s_ChanServ, 3, kav);
}
return MOD_CONT;
kav[0] = ci->name;
kav[1] = params;
kav[2] = reason;
do_kick(s_ChanServ, 3, kav);
}
return MOD_CONT;
}
/**
@@ -192,25 +192,25 @@ int do_ban(User * u)
**/
int do_unban(User * u)
{
char *chan = strtok(NULL, " ");
Channel *c;
ChannelInfo *ci;
char *chan = strtok(NULL, " ");
Channel *c;
ChannelInfo *ci;
if (!chan) {
syntax_error(s_ChanServ, u, "UNBAN", CHAN_UNBAN_SYNTAX);
} else if (!(c = findchan(chan))) {
notice_lang(s_ChanServ, u, CHAN_X_NOT_IN_USE, chan);
} else if (!(ci = c->ci)) {
notice_lang(s_ChanServ, u, CHAN_X_NOT_REGISTERED, chan);
} else if (ci->flags & CI_VERBOTEN) {
notice_lang(s_ChanServ, u, CHAN_X_FORBIDDEN, chan);
} else if (!check_access(u, ci, CA_UNBAN)) {
notice_lang(s_ChanServ, u, PERMISSION_DENIED);
} else {
common_unban(ci, u->nick);
notice_lang(s_ChanServ, u, CHAN_UNBANNED, chan);
}
return MOD_CONT;
if (!chan) {
syntax_error(s_ChanServ, u, "UNBAN", CHAN_UNBAN_SYNTAX);
} else if (!(c = findchan(chan))) {
notice_lang(s_ChanServ, u, CHAN_X_NOT_IN_USE, chan);
} else if (!(ci = c->ci)) {
notice_lang(s_ChanServ, u, CHAN_X_NOT_REGISTERED, chan);
} else if (ci->flags & CI_VERBOTEN) {
notice_lang(s_ChanServ, u, CHAN_X_FORBIDDEN, chan);
} else if (!check_access(u, ci, CA_UNBAN)) {
notice_lang(s_ChanServ, u, PERMISSION_DENIED);
} else {
common_unban(ci, u->nick);
notice_lang(s_ChanServ, u, CHAN_UNBANNED, chan);
}
return MOD_CONT;
}
MODULE_INIT("cs_ban", CSBan)
+272 -272
View File
@@ -44,7 +44,7 @@ class CSClear : public Module
**/
void myChanServHelp(User * u)
{
notice_lang(s_ChanServ, u, CHAN_HELP_CMD_CLEAR);
notice_lang(s_ChanServ, u, CHAN_HELP_CMD_CLEAR);
}
/**
@@ -54,308 +54,308 @@ void myChanServHelp(User * u)
**/
int do_clear(User * u)
{
char *chan = strtok(NULL, " ");
char *what = strtok(NULL, " ");
Channel *c;
ChannelInfo *ci;
char *chan = strtok(NULL, " ");
char *what = strtok(NULL, " ");
Channel *c;
ChannelInfo *ci;
if (!what) {
syntax_error(s_ChanServ, u, "CLEAR", CHAN_CLEAR_SYNTAX);
} else if (!(c = findchan(chan))) {
notice_lang(s_ChanServ, u, CHAN_X_NOT_IN_USE, chan);
} else if (!(ci = c->ci)) {
notice_lang(s_ChanServ, u, CHAN_X_NOT_REGISTERED, chan);
} else if (ci->flags & CI_VERBOTEN) {
notice_lang(s_ChanServ, u, CHAN_X_FORBIDDEN, chan);
} else if (!u || !check_access(u, ci, CA_CLEAR)) {
notice_lang(s_ChanServ, u, PERMISSION_DENIED);
} else if (stricmp(what, "bans") == 0) {
const char *av[2];
Entry *ban, *next;
if (!what) {
syntax_error(s_ChanServ, u, "CLEAR", CHAN_CLEAR_SYNTAX);
} else if (!(c = findchan(chan))) {
notice_lang(s_ChanServ, u, CHAN_X_NOT_IN_USE, chan);
} else if (!(ci = c->ci)) {
notice_lang(s_ChanServ, u, CHAN_X_NOT_REGISTERED, chan);
} else if (ci->flags & CI_VERBOTEN) {
notice_lang(s_ChanServ, u, CHAN_X_FORBIDDEN, chan);
} else if (!u || !check_access(u, ci, CA_CLEAR)) {
notice_lang(s_ChanServ, u, PERMISSION_DENIED);
} else if (stricmp(what, "bans") == 0) {
const char *av[2];
Entry *ban, *next;
if (c->bans && c->bans->count) {
for (ban = c->bans->entries; ban; ban = next) {
next = ban->next;
av[0] = "-b";
av[1] = ban->mask;
ircdproto->SendMode(whosends(ci), chan, "-b %s", ban->mask);
chan_set_modes(whosends(ci)->nick, c, 2, av, 0);
}
}
if (c->bans && c->bans->count) {
for (ban = c->bans->entries; ban; ban = next) {
next = ban->next;
av[0] = "-b";
av[1] = ban->mask;
ircdproto->SendMode(whosends(ci), chan, "-b %s", ban->mask);
chan_set_modes(whosends(ci)->nick, c, 2, av, 0);
}
}
notice_lang(s_ChanServ, u, CHAN_CLEARED_BANS, chan);
} else if (ircd->except && stricmp(what, "excepts") == 0) {
const char *av[2];
Entry *except, *next;
notice_lang(s_ChanServ, u, CHAN_CLEARED_BANS, chan);
} else if (ircd->except && stricmp(what, "excepts") == 0) {
const char *av[2];
Entry *except, *next;
if (c->excepts && c->excepts->count) {
for (except = c->excepts->entries; except; except = next) {
next = except->next;
av[0] = "-e";
av[1] = except->mask;
ircdproto->SendMode(whosends(ci), chan, "-e %s", except->mask);
chan_set_modes(whosends(ci)->nick, c, 2, av, 0);
}
}
notice_lang(s_ChanServ, u, CHAN_CLEARED_EXCEPTS, chan);
if (c->excepts && c->excepts->count) {
for (except = c->excepts->entries; except; except = next) {
next = except->next;
av[0] = "-e";
av[1] = except->mask;
ircdproto->SendMode(whosends(ci), chan, "-e %s", except->mask);
chan_set_modes(whosends(ci)->nick, c, 2, av, 0);
}
}
notice_lang(s_ChanServ, u, CHAN_CLEARED_EXCEPTS, chan);
} else if (ircd->invitemode && stricmp(what, "invites") == 0) {
const char *av[2];
Entry *invite, *next;
} else if (ircd->invitemode && stricmp(what, "invites") == 0) {
const char *av[2];
Entry *invite, *next;
if (c->invites && c->invites->count) {
for (invite = c->invites->entries; invite; invite = next) {
next = invite->next;
av[0] = "-I";
av[1] = invite->mask;
ircdproto->SendMode(whosends(ci), chan, "-I %s", invite->mask);
chan_set_modes(whosends(ci)->nick, c, 2, av, 0);
}
}
notice_lang(s_ChanServ, u, CHAN_CLEARED_INVITES, chan);
if (c->invites && c->invites->count) {
for (invite = c->invites->entries; invite; invite = next) {
next = invite->next;
av[0] = "-I";
av[1] = invite->mask;
ircdproto->SendMode(whosends(ci), chan, "-I %s", invite->mask);
chan_set_modes(whosends(ci)->nick, c, 2, av, 0);
}
}
notice_lang(s_ChanServ, u, CHAN_CLEARED_INVITES, chan);
} else if (stricmp(what, "modes") == 0) {
const char *argv[2];
} else if (stricmp(what, "modes") == 0) {
const char *argv[2];
if (c->mode) {
/* Clear modes the bulk of the modes */
ircdproto->SendMode(whosends(ci), c->name, "%s",
ircd->modestoremove);
argv[0] = ircd->modestoremove;
chan_set_modes(whosends(ci)->nick, c, 1, argv, 0);
if (c->mode) {
/* Clear modes the bulk of the modes */
ircdproto->SendMode(whosends(ci), c->name, "%s",
ircd->modestoremove);
argv[0] = ircd->modestoremove;
chan_set_modes(whosends(ci)->nick, c, 1, argv, 0);
/* to prevent the internals from complaining send -k, -L, -f by themselves if we need
to send them - TSL */
if (c->key) {
ircdproto->SendMode(whosends(ci), c->name, "-k %s", c->key);
argv[0] = "-k";
argv[1] = c->key;
chan_set_modes(whosends(ci)->nick, c, 2, argv, 0);
}
if (ircd->Lmode && c->redirect) {
ircdproto->SendMode(whosends(ci), c->name, "-L %s",
c->redirect);
argv[0] = "-L";
argv[1] = c->redirect;
chan_set_modes(whosends(ci)->nick, c, 2, argv, 0);
}
if (ircd->fmode && c->flood) {
if (flood_mode_char_remove) {
ircdproto->SendMode(whosends(ci), c->name, "%s %s",
flood_mode_char_remove, c->flood);
argv[0] = flood_mode_char_remove;
argv[1] = c->flood;
chan_set_modes(whosends(ci)->nick, c, 2, argv, 0);
} else {
if (debug) {
alog("debug: flood_mode_char_remove was not set unable to remove flood/throttle modes");
}
}
}
check_modes(c);
}
/* to prevent the internals from complaining send -k, -L, -f by themselves if we need
to send them - TSL */
if (c->key) {
ircdproto->SendMode(whosends(ci), c->name, "-k %s", c->key);
argv[0] = "-k";
argv[1] = c->key;
chan_set_modes(whosends(ci)->nick, c, 2, argv, 0);
}
if (ircd->Lmode && c->redirect) {
ircdproto->SendMode(whosends(ci), c->name, "-L %s",
c->redirect);
argv[0] = "-L";
argv[1] = c->redirect;
chan_set_modes(whosends(ci)->nick, c, 2, argv, 0);
}
if (ircd->fmode && c->flood) {
if (flood_mode_char_remove) {
ircdproto->SendMode(whosends(ci), c->name, "%s %s",
flood_mode_char_remove, c->flood);
argv[0] = flood_mode_char_remove;
argv[1] = c->flood;
chan_set_modes(whosends(ci)->nick, c, 2, argv, 0);
} else {
if (debug) {
alog("debug: flood_mode_char_remove was not set unable to remove flood/throttle modes");
}
}
}
check_modes(c);
}
notice_lang(s_ChanServ, u, CHAN_CLEARED_MODES, chan);
} else if (stricmp(what, "ops") == 0) {
const char *av[6]; /* The max we have to hold: chan, ts, modes(max3), nick, nick, nick */
int ac, isop, isadmin, isown, count, i;
char buf[BUFSIZE], tmp[BUFSIZE], tmp2[BUFSIZE];
struct c_userlist *cu, *next;
notice_lang(s_ChanServ, u, CHAN_CLEARED_MODES, chan);
} else if (stricmp(what, "ops") == 0) {
const char *av[6]; /* The max we have to hold: chan, ts, modes(max3), nick, nick, nick */
int ac, isop, isadmin, isown, count, i;
char buf[BUFSIZE], tmp[BUFSIZE], tmp2[BUFSIZE];
struct c_userlist *cu, *next;
if (ircd->svsmode_ucmode) {
av[0] = chan;
ircdproto->SendSVSModeChan(av[0], "-o", NULL);
if (ircd->owner) {
ircdproto->SendSVSModeChan(av[0], ircd->ownerunset, NULL);
}
if (ircd->protect || ircd->admin) {
ircdproto->SendSVSModeChan(av[0], ircd->adminunset, NULL);
}
for (cu = c->users; cu; cu = next) {
next = cu->next;
isop = chan_has_user_status(c, cu->user, CUS_OP);
isadmin = chan_has_user_status(c, cu->user, CUS_PROTECT);
isown = chan_has_user_status(c, cu->user, CUS_OWNER);
count = (isop ? 1 : 0) + (isadmin ? 1 : 0) + (isown ? 1 : 0);
if (ircd->svsmode_ucmode) {
av[0] = chan;
ircdproto->SendSVSModeChan(av[0], "-o", NULL);
if (ircd->owner) {
ircdproto->SendSVSModeChan(av[0], ircd->ownerunset, NULL);
}
if (ircd->protect || ircd->admin) {
ircdproto->SendSVSModeChan(av[0], ircd->adminunset, NULL);
}
for (cu = c->users; cu; cu = next) {
next = cu->next;
isop = chan_has_user_status(c, cu->user, CUS_OP);
isadmin = chan_has_user_status(c, cu->user, CUS_PROTECT);
isown = chan_has_user_status(c, cu->user, CUS_OWNER);
count = (isop ? 1 : 0) + (isadmin ? 1 : 0) + (isown ? 1 : 0);
if (!isop && !isadmin && !isown)
continue;
if (!isop && !isadmin && !isown)
continue;
snprintf(tmp, BUFSIZE, "-%s%s%s", (isop ? "o" : ""), (isadmin ?
ircd->adminunset+1 : ""), (isown ? ircd->ownerunset+1 : ""));
snprintf(tmp, BUFSIZE, "-%s%s%s", (isop ? "o" : ""), (isadmin ?
ircd->adminunset+1 : ""), (isown ? ircd->ownerunset+1 : ""));
if (ircdcap->tsmode) {
snprintf(buf, BUFSIZE - 1, "%ld", (long int) time(NULL));
av[1] = buf;
av[2] = tmp;
/* We have to give as much nicks as modes.. - Viper */
for (i = 0; i < count; i++)
av[i+3] = cu->user->nick;
ac = 3 + i;
} else {
av[1] = tmp;
/* We have to give as much nicks as modes.. - Viper */
for (i = 0; i < count; i++)
av[i+2] = cu->user->nick;
ac = 2 + i;
}
if (ircdcap->tsmode) {
snprintf(buf, BUFSIZE - 1, "%ld", (long int) time(NULL));
av[1] = buf;
av[2] = tmp;
/* We have to give as much nicks as modes.. - Viper */
for (i = 0; i < count; i++)
av[i+3] = cu->user->nick;
ac = 3 + i;
} else {
av[1] = tmp;
/* We have to give as much nicks as modes.. - Viper */
for (i = 0; i < count; i++)
av[i+2] = cu->user->nick;
ac = 2 + i;
}
do_cmode(s_ChanServ, ac, av);
}
} else {
av[0] = chan;
for (cu = c->users; cu; cu = next) {
next = cu->next;
isop = chan_has_user_status(c, cu->user, CUS_OP);
isadmin = chan_has_user_status(c, cu->user, CUS_PROTECT);
isown = chan_has_user_status(c, cu->user, CUS_OWNER);
count = (isop ? 1 : 0) + (isadmin ? 1 : 0) + (isown ? 1 : 0);
do_cmode(s_ChanServ, ac, av);
}
} else {
av[0] = chan;
for (cu = c->users; cu; cu = next) {
next = cu->next;
isop = chan_has_user_status(c, cu->user, CUS_OP);
isadmin = chan_has_user_status(c, cu->user, CUS_PROTECT);
isown = chan_has_user_status(c, cu->user, CUS_OWNER);
count = (isop ? 1 : 0) + (isadmin ? 1 : 0) + (isown ? 1 : 0);
if (!isop && !isadmin && !isown)
continue;
if (!isop && !isadmin && !isown)
continue;
snprintf(tmp, BUFSIZE, "-%s%s%s", (isop ? "o" : ""), (isadmin ?
ircd->adminunset+1 : ""), (isown ? ircd->ownerunset+1 : ""));
/* We need to send the IRCd a nick for every mode.. - Viper */
snprintf(tmp2, BUFSIZE, "%s %s %s", (isop ? cu->user->nick : ""),
(isadmin ? cu->user->nick : ""), (isown ? cu->user->nick : ""));
snprintf(tmp, BUFSIZE, "-%s%s%s", (isop ? "o" : ""), (isadmin ?
ircd->adminunset+1 : ""), (isown ? ircd->ownerunset+1 : ""));
/* We need to send the IRCd a nick for every mode.. - Viper */
snprintf(tmp2, BUFSIZE, "%s %s %s", (isop ? cu->user->nick : ""),
(isadmin ? cu->user->nick : ""), (isown ? cu->user->nick : ""));
if (ircdcap->tsmode) {
snprintf(buf, BUFSIZE - 1, "%ld", (long int) time(NULL));
av[1] = buf;
av[2] = tmp;
/* We have to give as much nicks as modes.. - Viper */
for (i = 0; i < count; i++)
av[i+3] = cu->user->nick;
ac = 3 + i;
if (ircdcap->tsmode) {
snprintf(buf, BUFSIZE - 1, "%ld", (long int) time(NULL));
av[1] = buf;
av[2] = tmp;
/* We have to give as much nicks as modes.. - Viper */
for (i = 0; i < count; i++)
av[i+3] = cu->user->nick;
ac = 3 + i;
ircdproto->SendMode(whosends(ci), av[0], "%s %s", av[2], tmp2);
} else {
av[1] = tmp;
/* We have to give as much nicks as modes.. - Viper */
for (i = 0; i < count; i++)
av[i+2] = cu->user->nick;
ac = 2 + i;
ircdproto->SendMode(whosends(ci), av[0], "%s %s", av[2], tmp2);
} else {
av[1] = tmp;
/* We have to give as much nicks as modes.. - Viper */
for (i = 0; i < count; i++)
av[i+2] = cu->user->nick;
ac = 2 + i;
ircdproto->SendMode(whosends(ci), av[0], "%s %s", av[1], tmp2);
}
ircdproto->SendMode(whosends(ci), av[0], "%s %s", av[1], tmp2);
}
do_cmode(s_ChanServ, ac, av);
}
}
notice_lang(s_ChanServ, u, CHAN_CLEARED_OPS, chan);
} else if (ircd->halfop && stricmp(what, "hops") == 0) {
const char *av[4];
int ac;
char buf[BUFSIZE];
struct c_userlist *cu, *next;
do_cmode(s_ChanServ, ac, av);
}
}
notice_lang(s_ChanServ, u, CHAN_CLEARED_OPS, chan);
} else if (ircd->halfop && stricmp(what, "hops") == 0) {
const char *av[4];
int ac;
char buf[BUFSIZE];
struct c_userlist *cu, *next;
for (cu = c->users; cu; cu = next) {
next = cu->next;
if (!chan_has_user_status(c, cu->user, CUS_HALFOP))
continue;
for (cu = c->users; cu; cu = next) {
next = cu->next;
if (!chan_has_user_status(c, cu->user, CUS_HALFOP))
continue;
if (ircdcap->tsmode) {
snprintf(buf, BUFSIZE - 1, "%ld", (long int) time(NULL));
av[0] = chan;
av[1] = buf;
av[2] = "-h";
av[3] = cu->user->nick;
ac = 4;
} else {
av[0] = chan;
av[1] = "-h";
av[2] = cu->user->nick;
ac = 3;
}
if (ircdcap->tsmode) {
snprintf(buf, BUFSIZE - 1, "%ld", (long int) time(NULL));
av[0] = chan;
av[1] = buf;
av[2] = "-h";
av[3] = cu->user->nick;
ac = 4;
} else {
av[0] = chan;
av[1] = "-h";
av[2] = cu->user->nick;
ac = 3;
}
if (ircd->svsmode_ucmode) {
if (ircdcap->tsmode)
ircdproto->SendSVSModeChan(av[0], av[2], NULL);
else
ircdproto->SendSVSModeChan(av[0], av[1], NULL);
if (ircd->svsmode_ucmode) {
if (ircdcap->tsmode)
ircdproto->SendSVSModeChan(av[0], av[2], NULL);
else
ircdproto->SendSVSModeChan(av[0], av[1], NULL);
do_cmode(s_ChanServ, ac, av);
break;
} else {
if (ircdcap->tsmode)
ircdproto->SendMode(whosends(ci), av[0], "%s %s", av[2],
av[3]);
else
ircdproto->SendMode(whosends(ci), av[0], "%s %s", av[1],
av[2]);
}
do_cmode(s_ChanServ, ac, av);
}
notice_lang(s_ChanServ, u, CHAN_CLEARED_HOPS, chan);
} else if (stricmp(what, "voices") == 0) {
const char *av[4];
int ac;
char buf[BUFSIZE];
struct c_userlist *cu, *next;
do_cmode(s_ChanServ, ac, av);
break;
} else {
if (ircdcap->tsmode)
ircdproto->SendMode(whosends(ci), av[0], "%s %s", av[2],
av[3]);
else
ircdproto->SendMode(whosends(ci), av[0], "%s %s", av[1],
av[2]);
}
do_cmode(s_ChanServ, ac, av);
}
notice_lang(s_ChanServ, u, CHAN_CLEARED_HOPS, chan);
} else if (stricmp(what, "voices") == 0) {
const char *av[4];
int ac;
char buf[BUFSIZE];
struct c_userlist *cu, *next;
for (cu = c->users; cu; cu = next) {
next = cu->next;
if (!chan_has_user_status(c, cu->user, CUS_VOICE))
continue;
for (cu = c->users; cu; cu = next) {
next = cu->next;
if (!chan_has_user_status(c, cu->user, CUS_VOICE))
continue;
if (ircdcap->tsmode) {
snprintf(buf, BUFSIZE - 1, "%ld", (long int) time(NULL));
av[0] = chan;
av[1] = buf;
av[2] = "-v";
av[3] = cu->user->nick;
ac = 4;
} else {
av[0] = chan;
av[1] = "-v";
av[2] = cu->user->nick;
ac = 3;
}
if (ircdcap->tsmode) {
snprintf(buf, BUFSIZE - 1, "%ld", (long int) time(NULL));
av[0] = chan;
av[1] = buf;
av[2] = "-v";
av[3] = cu->user->nick;
ac = 4;
} else {
av[0] = chan;
av[1] = "-v";
av[2] = cu->user->nick;
ac = 3;
}
if (ircd->svsmode_ucmode) {
if (ircdcap->tsmode)
ircdproto->SendSVSModeChan(av[0], av[2], NULL);
else
ircdproto->SendSVSModeChan(av[0], av[1], NULL);
if (ircd->svsmode_ucmode) {
if (ircdcap->tsmode)
ircdproto->SendSVSModeChan(av[0], av[2], NULL);
else
ircdproto->SendSVSModeChan(av[0], av[1], NULL);
do_cmode(s_ChanServ, ac, av);
break;
} else {
if (ircdcap->tsmode) {
ircdproto->SendMode(whosends(ci), av[0], "%s %s", av[2],
av[3]);
} else {
ircdproto->SendMode(whosends(ci), av[0], "%s %s", av[1],
av[2]);
}
}
do_cmode(s_ChanServ, ac, av);
}
notice_lang(s_ChanServ, u, CHAN_CLEARED_VOICES, chan);
} else if (stricmp(what, "users") == 0) {
const char *av[3];
struct c_userlist *cu, *next;
char buf[256];
do_cmode(s_ChanServ, ac, av);
break;
} else {
if (ircdcap->tsmode) {
ircdproto->SendMode(whosends(ci), av[0], "%s %s", av[2],
av[3]);
} else {
ircdproto->SendMode(whosends(ci), av[0], "%s %s", av[1],
av[2]);
}
}
do_cmode(s_ChanServ, ac, av);
}
notice_lang(s_ChanServ, u, CHAN_CLEARED_VOICES, chan);
} else if (stricmp(what, "users") == 0) {
const char *av[3];
struct c_userlist *cu, *next;
char buf[256];
snprintf(buf, sizeof(buf), "CLEAR USERS command from %s", u->nick);
snprintf(buf, sizeof(buf), "CLEAR USERS command from %s", u->nick);
for (cu = c->users; cu; cu = next) {
next = cu->next;
av[0] = sstrdup(chan);
av[1] = sstrdup(cu->user->nick);
av[2] = sstrdup(buf);
ircdproto->SendKick(whosends(ci), av[0], av[1], av[2]);
do_kick(s_ChanServ, 3, av);
free((void *)av[2]);
free((void *)av[1]);
free((void *)av[0]);
}
notice_lang(s_ChanServ, u, CHAN_CLEARED_USERS, chan);
} else {
syntax_error(s_ChanServ, u, "CLEAR", CHAN_CLEAR_SYNTAX);
}
return MOD_CONT;
for (cu = c->users; cu; cu = next) {
next = cu->next;
av[0] = sstrdup(chan);
av[1] = sstrdup(cu->user->nick);
av[2] = sstrdup(buf);
ircdproto->SendKick(whosends(ci), av[0], av[1], av[2]);
do_kick(s_ChanServ, 3, av);
free((void *)av[2]);
free((void *)av[1]);
free((void *)av[0]);
}
notice_lang(s_ChanServ, u, CHAN_CLEARED_USERS, chan);
} else {
syntax_error(s_ChanServ, u, "CLEAR", CHAN_CLEAR_SYNTAX);
}
return MOD_CONT;
}
MODULE_INIT("cs_clear", CSClear)
+50 -50
View File
@@ -45,7 +45,7 @@ class CSDrop : public Module
**/
void myChanServHelp(User * u)
{
notice_lang(s_ChanServ, u, CHAN_HELP_CMD_DROP);
notice_lang(s_ChanServ, u, CHAN_HELP_CMD_DROP);
}
/**
@@ -55,64 +55,64 @@ void myChanServHelp(User * u)
**/
int do_drop(User * u)
{
char *chan = strtok(NULL, " ");
ChannelInfo *ci;
int is_servadmin = is_services_admin(u);
char *chan = strtok(NULL, " ");
ChannelInfo *ci;
int is_servadmin = is_services_admin(u);
if (readonly && !is_servadmin) {
notice_lang(s_ChanServ, u, CHAN_DROP_DISABLED);
return MOD_CONT;
}
if (readonly && !is_servadmin) {
notice_lang(s_ChanServ, u, CHAN_DROP_DISABLED);
return MOD_CONT;
}
if (!chan) {
syntax_error(s_ChanServ, u, "DROP", CHAN_DROP_SYNTAX);
} else if (!(ci = cs_findchan(chan))) {
notice_lang(s_ChanServ, u, CHAN_X_NOT_REGISTERED, chan);
} else if (!is_servadmin && (ci->flags & CI_VERBOTEN)) {
notice_lang(s_ChanServ, u, CHAN_X_FORBIDDEN, chan);
} else if (!is_servadmin && (ci->flags & CI_SUSPENDED)) {
notice_lang(s_ChanServ, u, CHAN_X_FORBIDDEN, chan);
} else if (!is_servadmin
&& (ci->
flags & CI_SECUREFOUNDER ? !is_real_founder(u,
ci) :
!is_founder(u, ci))) {
notice_lang(s_ChanServ, u, ACCESS_DENIED);
} else {
int level = get_access(u, ci);
if (!chan) {
syntax_error(s_ChanServ, u, "DROP", CHAN_DROP_SYNTAX);
} else if (!(ci = cs_findchan(chan))) {
notice_lang(s_ChanServ, u, CHAN_X_NOT_REGISTERED, chan);
} else if (!is_servadmin && (ci->flags & CI_VERBOTEN)) {
notice_lang(s_ChanServ, u, CHAN_X_FORBIDDEN, chan);
} else if (!is_servadmin && (ci->flags & CI_SUSPENDED)) {
notice_lang(s_ChanServ, u, CHAN_X_FORBIDDEN, chan);
} else if (!is_servadmin
&& (ci->
flags & CI_SECUREFOUNDER ? !is_real_founder(u,
ci) :
!is_founder(u, ci))) {
notice_lang(s_ChanServ, u, ACCESS_DENIED);
} else {
int level = get_access(u, ci);
if (readonly) /* in this case we know they're a Services admin */
notice_lang(s_ChanServ, u, READ_ONLY_MODE);
if (readonly) /* in this case we know they're a Services admin */
notice_lang(s_ChanServ, u, READ_ONLY_MODE);
if (ci->c) {
if (ircd->regmode) {
ci->c->mode &= ~ircd->regmode;
ircdproto->SendMode(whosends(ci), ci->name, "-r");
}
}
if (ci->c) {
if (ircd->regmode) {
ci->c->mode &= ~ircd->regmode;
ircdproto->SendMode(whosends(ci), ci->name, "-r");
}
}
if (ircd->chansqline && (ci->flags & CI_VERBOTEN)) {
ircdproto->SendSQLineDel(ci->name);
}
if (ircd->chansqline && (ci->flags & CI_VERBOTEN)) {
ircdproto->SendSQLineDel(ci->name);
}
alog("%s: Channel %s dropped by %s!%s@%s (founder: %s)",
s_ChanServ, ci->name, u->nick, u->username,
u->host, (ci->founder ? ci->founder->display : "(none)"));
alog("%s: Channel %s dropped by %s!%s@%s (founder: %s)",
s_ChanServ, ci->name, u->nick, u->username,
u->host, (ci->founder ? ci->founder->display : "(none)"));
delchan(ci);
delchan(ci);
/* We must make sure that the Services admin has not normally the right to
* drop the channel before issuing the wallops.
*/
if (WallDrop && is_servadmin && level < ACCESS_FOUNDER)
ircdproto->SendGlobops(s_ChanServ,
"\2%s\2 used DROP on channel \2%s\2", u->nick,
chan);
/* We must make sure that the Services admin has not normally the right to
* drop the channel before issuing the wallops.
*/
if (WallDrop && is_servadmin && level < ACCESS_FOUNDER)
ircdproto->SendGlobops(s_ChanServ,
"\2%s\2 used DROP on channel \2%s\2", u->nick,
chan);
notice_lang(s_ChanServ, u, CHAN_DROPPED, chan);
send_event(EVENT_CHAN_DROP, 1, chan);
}
return MOD_CONT;
notice_lang(s_ChanServ, u, CHAN_DROPPED, chan);
send_event(EVENT_CHAN_DROP, 1, chan);
}
return MOD_CONT;
}
MODULE_INIT("cs_drop", CSDrop)
+62 -62
View File
@@ -43,9 +43,9 @@ class CSForbid : public Module
**/
void myChanServHelp(User * u)
{
if (is_services_admin(u)) {
notice_lang(s_ChanServ, u, CHAN_HELP_CMD_FORBID);
}
if (is_services_admin(u)) {
notice_lang(s_ChanServ, u, CHAN_HELP_CMD_FORBID);
}
}
/**
@@ -55,74 +55,74 @@ void myChanServHelp(User * u)
**/
int do_forbid(User * u)
{
ChannelInfo *ci;
char *chan = strtok(NULL, " ");
char *reason = strtok(NULL, "");
ChannelInfo *ci;
char *chan = strtok(NULL, " ");
char *reason = strtok(NULL, "");
Channel *c;
Channel *c;
/* Assumes that permission checking has already been done. */
if (!chan || (ForceForbidReason && !reason)) {
syntax_error(s_ChanServ, u, "FORBID",
(ForceForbidReason ? CHAN_FORBID_SYNTAX_REASON :
CHAN_FORBID_SYNTAX));
return MOD_CONT;
}
if (*chan != '#') {
notice_lang(s_ChanServ, u, CHAN_SYMBOL_REQUIRED);
return MOD_CONT;
} else if (!ircdproto->IsChannelValid(chan)) {
notice_lang(s_ChanServ, u, CHAN_X_INVALID, chan);
return MOD_CONT;
}
if (readonly)
notice_lang(s_ChanServ, u, READ_ONLY_MODE);
if ((ci = cs_findchan(chan)) != NULL)
delchan(ci);
ci = makechan(chan);
if (ci) {
ci->flags |= CI_VERBOTEN;
ci->forbidby = sstrdup(u->nick);
if (reason)
ci->forbidreason = sstrdup(reason);
/* Assumes that permission checking has already been done. */
if (!chan || (ForceForbidReason && !reason)) {
syntax_error(s_ChanServ, u, "FORBID",
(ForceForbidReason ? CHAN_FORBID_SYNTAX_REASON :
CHAN_FORBID_SYNTAX));
return MOD_CONT;
}
if (*chan != '#') {
notice_lang(s_ChanServ, u, CHAN_SYMBOL_REQUIRED);
return MOD_CONT;
} else if (!ircdproto->IsChannelValid(chan)) {
notice_lang(s_ChanServ, u, CHAN_X_INVALID, chan);
return MOD_CONT;
}
if (readonly)
notice_lang(s_ChanServ, u, READ_ONLY_MODE);
if ((ci = cs_findchan(chan)) != NULL)
delchan(ci);
ci = makechan(chan);
if (ci) {
ci->flags |= CI_VERBOTEN;
ci->forbidby = sstrdup(u->nick);
if (reason)
ci->forbidreason = sstrdup(reason);
if ((c = findchan(ci->name))) {
struct c_userlist *cu, *next;
const char *av[3];
if ((c = findchan(ci->name))) {
struct c_userlist *cu, *next;
const char *av[3];
for (cu = c->users; cu; cu = next) {
next = cu->next;
for (cu = c->users; cu; cu = next) {
next = cu->next;
if (is_oper(cu->user))
continue;
if (is_oper(cu->user))
continue;
av[0] = c->name;
av[1] = cu->user->nick;
av[2] = reason ? reason : "CHAN_FORBID_REASON";
ircdproto->SendKick(findbot(s_ChanServ), av[0], av[1], av[2]);
do_kick(s_ChanServ, 3, av);
}
}
av[0] = c->name;
av[1] = cu->user->nick;
av[2] = reason ? reason : "CHAN_FORBID_REASON";
ircdproto->SendKick(findbot(s_ChanServ), av[0], av[1], av[2]);
do_kick(s_ChanServ, 3, av);
}
}
if (WallForbid)
ircdproto->SendGlobops(s_ChanServ,
"\2%s\2 used FORBID on channel \2%s\2",
u->nick, ci->name);
if (WallForbid)
ircdproto->SendGlobops(s_ChanServ,
"\2%s\2 used FORBID on channel \2%s\2",
u->nick, ci->name);
if (ircd->chansqline) {
ircdproto->SendSQLine(ci->name, ((reason) ? reason : "Forbidden"));
}
if (ircd->chansqline) {
ircdproto->SendSQLine(ci->name, ((reason) ? reason : "Forbidden"));
}
alog("%s: %s set FORBID for channel %s", s_ChanServ, u->nick,
ci->name);
notice_lang(s_ChanServ, u, CHAN_FORBID_SUCCEEDED, chan);
send_event(EVENT_CHAN_FORBIDDEN, 1, chan);
} else {
alog("%s: Valid FORBID for %s by %s failed", s_ChanServ, ci->name,
u->nick);
notice_lang(s_ChanServ, u, CHAN_FORBID_FAILED, chan);
}
return MOD_CONT;
alog("%s: %s set FORBID for channel %s", s_ChanServ, u->nick,
ci->name);
notice_lang(s_ChanServ, u, CHAN_FORBID_SUCCEEDED, chan);
send_event(EVENT_CHAN_FORBIDDEN, 1, chan);
} else {
alog("%s: Valid FORBID for %s by %s failed", s_ChanServ, ci->name,
u->nick);
notice_lang(s_ChanServ, u, CHAN_FORBID_FAILED, chan);
}
return MOD_CONT;
}
MODULE_INIT("cs_forbid", CSForbid)
+17 -17
View File
@@ -44,7 +44,7 @@ class CSGetKey : public Module
**/
void myChanServHelp(User * u)
{
notice_lang(s_ChanServ, u, CHAN_HELP_CMD_GETKEY);
notice_lang(s_ChanServ, u, CHAN_HELP_CMD_GETKEY);
}
/**
@@ -54,24 +54,24 @@ void myChanServHelp(User * u)
**/
int do_getkey(User * u)
{
char *chan = strtok(NULL, " ");
ChannelInfo *ci;
char *chan = strtok(NULL, " ");
ChannelInfo *ci;
if (!chan) {
syntax_error(s_ChanServ, u, "GETKEY", CHAN_GETKEY_SYNTAX);
} else if (!(ci = cs_findchan(chan))) {
notice_lang(s_ChanServ, u, CHAN_X_NOT_REGISTERED, chan);
} else if (ci->flags & CI_VERBOTEN) {
notice_lang(s_ChanServ, u, CHAN_X_FORBIDDEN, chan);
} else if (!check_access(u, ci, CA_GETKEY)) {
notice_lang(s_ChanServ, u, ACCESS_DENIED);
} else if (!ci->c || !ci->c->key) {
notice_lang(s_ChanServ, u, CHAN_GETKEY_NOKEY, chan);
} else {
notice_lang(s_ChanServ, u, CHAN_GETKEY_KEY, chan, ci->c->key);
}
if (!chan) {
syntax_error(s_ChanServ, u, "GETKEY", CHAN_GETKEY_SYNTAX);
} else if (!(ci = cs_findchan(chan))) {
notice_lang(s_ChanServ, u, CHAN_X_NOT_REGISTERED, chan);
} else if (ci->flags & CI_VERBOTEN) {
notice_lang(s_ChanServ, u, CHAN_X_FORBIDDEN, chan);
} else if (!check_access(u, ci, CA_GETKEY)) {
notice_lang(s_ChanServ, u, ACCESS_DENIED);
} else if (!ci->c || !ci->c->key) {
notice_lang(s_ChanServ, u, CHAN_GETKEY_NOKEY, chan);
} else {
notice_lang(s_ChanServ, u, CHAN_GETKEY_KEY, chan, ci->c->key);
}
return MOD_CONT;
return MOD_CONT;
}
MODULE_INIT("cs_getkey", CSGetKey)
+30 -30
View File
@@ -44,9 +44,9 @@ class CSGetPass : public Module
**/
void myChanServHelp(User * u)
{
if (is_services_admin(u)) {
notice_lang(s_ChanServ, u, CHAN_HELP_CMD_GETPASS);
}
if (is_services_admin(u)) {
notice_lang(s_ChanServ, u, CHAN_HELP_CMD_GETPASS);
}
}
/**
@@ -57,34 +57,34 @@ void myChanServHelp(User * u)
int do_getpass(User * u)
{
char *chan = strtok(NULL, " ");
char tmp_pass[PASSMAX];
ChannelInfo *ci;
char *chan = strtok(NULL, " ");
char tmp_pass[PASSMAX];
ChannelInfo *ci;
if (!chan) {
syntax_error(s_ChanServ, u, "GETPASS", CHAN_GETPASS_SYNTAX);
} else if (!(ci = cs_findchan(chan))) {
notice_lang(s_ChanServ, u, CHAN_X_NOT_REGISTERED, chan);
} else if (ci->flags & CI_VERBOTEN) {
notice_lang(s_ChanServ, u, CHAN_X_FORBIDDEN, chan);
} else if (CSRestrictGetPass && !is_services_root(u)) {
notice_lang(s_ChanServ, u, PERMISSION_DENIED);
} else {
if(enc_decrypt(ci->founderpass, tmp_pass, PASSMAX - 1)==1) {
alog("%s: %s!%s@%s used GETPASS on %s",
s_ChanServ, u->nick, u->username, u->host, ci->name);
if (WallGetpass) {
ircdproto->SendGlobops(s_ChanServ,
"\2%s\2 used GETPASS on channel \2%s\2",
u->nick, chan);
}
notice_lang(s_ChanServ, u, CHAN_GETPASS_PASSWORD_IS,
chan, tmp_pass);
} else {
notice_lang(s_ChanServ, u, CHAN_GETPASS_UNAVAILABLE);
}
}
return MOD_CONT;
if (!chan) {
syntax_error(s_ChanServ, u, "GETPASS", CHAN_GETPASS_SYNTAX);
} else if (!(ci = cs_findchan(chan))) {
notice_lang(s_ChanServ, u, CHAN_X_NOT_REGISTERED, chan);
} else if (ci->flags & CI_VERBOTEN) {
notice_lang(s_ChanServ, u, CHAN_X_FORBIDDEN, chan);
} else if (CSRestrictGetPass && !is_services_root(u)) {
notice_lang(s_ChanServ, u, PERMISSION_DENIED);
} else {
if(enc_decrypt(ci->founderpass, tmp_pass, PASSMAX - 1)==1) {
alog("%s: %s!%s@%s used GETPASS on %s",
s_ChanServ, u->nick, u->username, u->host, ci->name);
if (WallGetpass) {
ircdproto->SendGlobops(s_ChanServ,
"\2%s\2 used GETPASS on channel \2%s\2",
u->nick, chan);
}
notice_lang(s_ChanServ, u, CHAN_GETPASS_PASSWORD_IS,
chan, tmp_pass);
} else {
notice_lang(s_ChanServ, u, CHAN_GETPASS_UNAVAILABLE);
}
}
return MOD_CONT;
}
MODULE_INIT("cs_getpass", CSGetPass)
+28 -28
View File
@@ -40,35 +40,35 @@ class CSHelp : public Module
**/
int do_help(User * u)
{
char *cmd = strtok(NULL, "");
char *cmd = strtok(NULL, "");
if (!cmd) {
notice_help(s_ChanServ, u, CHAN_HELP);
moduleDisplayHelp(2, u);
if (CSExpire >= 86400)
notice_help(s_ChanServ, u, CHAN_HELP_EXPIRES,
CSExpire / 86400);
if (is_services_oper(u))
notice_help(s_ChanServ, u, CHAN_SERVADMIN_HELP);
} else if (stricmp(cmd, "LEVELS DESC") == 0) {
int i;
notice_help(s_ChanServ, u, CHAN_HELP_LEVELS_DESC);
if (!levelinfo_maxwidth) {
for (i = 0; levelinfo[i].what >= 0; i++) {
int len = strlen(levelinfo[i].name);
if (len > levelinfo_maxwidth)
levelinfo_maxwidth = len;
}
}
for (i = 0; levelinfo[i].what >= 0; i++) {
notice_help(s_ChanServ, u, CHAN_HELP_LEVELS_DESC_FORMAT,
levelinfo_maxwidth, levelinfo[i].name,
getstring(u->na, levelinfo[i].desc));
}
} else {
mod_help_cmd(s_ChanServ, u, CHANSERV, cmd);
}
return MOD_CONT;
if (!cmd) {
notice_help(s_ChanServ, u, CHAN_HELP);
moduleDisplayHelp(2, u);
if (CSExpire >= 86400)
notice_help(s_ChanServ, u, CHAN_HELP_EXPIRES,
CSExpire / 86400);
if (is_services_oper(u))
notice_help(s_ChanServ, u, CHAN_SERVADMIN_HELP);
} else if (stricmp(cmd, "LEVELS DESC") == 0) {
int i;
notice_help(s_ChanServ, u, CHAN_HELP_LEVELS_DESC);
if (!levelinfo_maxwidth) {
for (i = 0; levelinfo[i].what >= 0; i++) {
int len = strlen(levelinfo[i].name);
if (len > levelinfo_maxwidth)
levelinfo_maxwidth = len;
}
}
for (i = 0; levelinfo[i].what >= 0; i++) {
notice_help(s_ChanServ, u, CHAN_HELP_LEVELS_DESC_FORMAT,
levelinfo_maxwidth, levelinfo[i].name,
getstring(u->na, levelinfo[i].desc));
}
} else {
mod_help_cmd(s_ChanServ, u, CHANSERV, cmd);
}
return MOD_CONT;
}
MODULE_INIT("cs_help", CSHelp)
+40 -40
View File
@@ -47,7 +47,7 @@ class CSIdentify : public Module
**/
void myChanServHelp(User * u)
{
notice_lang(s_ChanServ, u, CHAN_HELP_CMD_IDENTIFY);
notice_lang(s_ChanServ, u, CHAN_HELP_CMD_IDENTIFY);
}
/**
@@ -57,49 +57,49 @@ void myChanServHelp(User * u)
**/
int do_identify(User * u)
{
char *chan = strtok(NULL, " ");
char *pass = strtok(NULL, " ");
ChannelInfo *ci;
struct u_chaninfolist *uc;
char *chan = strtok(NULL, " ");
char *pass = strtok(NULL, " ");
ChannelInfo *ci;
struct u_chaninfolist *uc;
if (!pass) {
syntax_error(s_ChanServ, u, "IDENTIFY", CHAN_IDENTIFY_SYNTAX);
} else if (!(ci = cs_findchan(chan))) {
notice_lang(s_ChanServ, u, CHAN_X_NOT_REGISTERED, chan);
} else if (ci->flags & CI_VERBOTEN) {
notice_lang(s_ChanServ, u, CHAN_X_FORBIDDEN, chan);
} else if (!nick_identified(u)) {
notice_lang(s_ChanServ, u, NICK_IDENTIFY_REQUIRED, s_NickServ);
} else if (is_founder(u, ci)) {
notice_lang(s_ChanServ, u, NICK_ALREADY_IDENTIFIED);
} else {
int res;
if (!pass) {
syntax_error(s_ChanServ, u, "IDENTIFY", CHAN_IDENTIFY_SYNTAX);
} else if (!(ci = cs_findchan(chan))) {
notice_lang(s_ChanServ, u, CHAN_X_NOT_REGISTERED, chan);
} else if (ci->flags & CI_VERBOTEN) {
notice_lang(s_ChanServ, u, CHAN_X_FORBIDDEN, chan);
} else if (!nick_identified(u)) {
notice_lang(s_ChanServ, u, NICK_IDENTIFY_REQUIRED, s_NickServ);
} else if (is_founder(u, ci)) {
notice_lang(s_ChanServ, u, NICK_ALREADY_IDENTIFIED);
} else {
int res;
if ((res = enc_check_password(pass, ci->founderpass)) == 1) {
if (!is_identified(u, ci)) {
uc = (struct u_chaninfolist *)scalloc(sizeof(*uc), 1);
uc->next = u->founder_chans;
if (u->founder_chans)
u->founder_chans->prev = uc;
u->founder_chans = uc;
uc->chan = ci;
alog("%s: %s!%s@%s identified for %s", s_ChanServ, u->nick,
u->username, u->host, ci->name);
}
if ((res = enc_check_password(pass, ci->founderpass)) == 1) {
if (!is_identified(u, ci)) {
uc = (struct u_chaninfolist *)scalloc(sizeof(*uc), 1);
uc->next = u->founder_chans;
if (u->founder_chans)
u->founder_chans->prev = uc;
u->founder_chans = uc;
uc->chan = ci;
alog("%s: %s!%s@%s identified for %s", s_ChanServ, u->nick,
u->username, u->host, ci->name);
}
notice_lang(s_ChanServ, u, CHAN_IDENTIFY_SUCCEEDED, chan);
} else if (res < 0) {
alog("%s: check_password failed for %s", s_ChanServ, ci->name);
notice_lang(s_ChanServ, u, CHAN_IDENTIFY_FAILED);
} else {
alog("%s: Failed IDENTIFY for %s by %s!%s@%s",
s_ChanServ, ci->name, u->nick, u->username, u->host);
notice_lang(s_ChanServ, u, PASSWORD_INCORRECT);
bad_password(u);
}
notice_lang(s_ChanServ, u, CHAN_IDENTIFY_SUCCEEDED, chan);
} else if (res < 0) {
alog("%s: check_password failed for %s", s_ChanServ, ci->name);
notice_lang(s_ChanServ, u, CHAN_IDENTIFY_FAILED);
} else {
alog("%s: Failed IDENTIFY for %s by %s!%s@%s",
s_ChanServ, ci->name, u->nick, u->username, u->host);
notice_lang(s_ChanServ, u, PASSWORD_INCORRECT);
bad_password(u);
}
}
return MOD_CONT;
}
return MOD_CONT;
}
MODULE_INIT("cs_identify", CSIdentify)
+163 -163
View File
@@ -44,7 +44,7 @@ class CSInfo : public Module
**/
void myChanServHelp(User * u)
{
notice_lang(s_ChanServ, u, CHAN_HELP_CMD_INFO);
notice_lang(s_ChanServ, u, CHAN_HELP_CMD_INFO);
}
/**
@@ -59,179 +59,179 @@ int do_info(User * u)
* Syntax: INFO channel [ALL]
* -TheShadow (29 Mar 1999)
*/
char *chan = strtok(NULL, " ");
char *param = strtok(NULL, " ");
ChannelInfo *ci;
char buf[BUFSIZE], *end;
struct tm *tm;
int need_comma = 0;
const char *commastr = getstring(u->na, COMMA_SPACE);
int is_servadmin = is_services_admin(u);
int show_all = 0;
time_t expt;
char *chan = strtok(NULL, " ");
char *param = strtok(NULL, " ");
ChannelInfo *ci;
char buf[BUFSIZE], *end;
struct tm *tm;
int need_comma = 0;
const char *commastr = getstring(u->na, COMMA_SPACE);
int is_servadmin = is_services_admin(u);
int show_all = 0;
time_t expt;
if (!chan) {
syntax_error(s_ChanServ, u, "INFO", CHAN_INFO_SYNTAX);
} else if (!(ci = cs_findchan(chan))) {
notice_lang(s_ChanServ, u, CHAN_X_NOT_REGISTERED, chan);
} else if (ci->flags & CI_VERBOTEN) {
if (is_oper(u) && ci->forbidby)
notice_lang(s_ChanServ, u, CHAN_X_FORBIDDEN_OPER, chan,
ci->forbidby,
(ci->forbidreason ? ci->
forbidreason : getstring(u->na, NO_REASON)));
else
notice_lang(s_ChanServ, u, CHAN_X_FORBIDDEN, chan);
} else if (!ci->founder) {
/* Paranoia... this shouldn't be able to happen */
delchan(ci);
notice_lang(s_ChanServ, u, CHAN_X_NOT_REGISTERED, chan);
} else {
if (!chan) {
syntax_error(s_ChanServ, u, "INFO", CHAN_INFO_SYNTAX);
} else if (!(ci = cs_findchan(chan))) {
notice_lang(s_ChanServ, u, CHAN_X_NOT_REGISTERED, chan);
} else if (ci->flags & CI_VERBOTEN) {
if (is_oper(u) && ci->forbidby)
notice_lang(s_ChanServ, u, CHAN_X_FORBIDDEN_OPER, chan,
ci->forbidby,
(ci->forbidreason ? ci->
forbidreason : getstring(u->na, NO_REASON)));
else
notice_lang(s_ChanServ, u, CHAN_X_FORBIDDEN, chan);
} else if (!ci->founder) {
/* Paranoia... this shouldn't be able to happen */
delchan(ci);
notice_lang(s_ChanServ, u, CHAN_X_NOT_REGISTERED, chan);
} else {
/* Should we show all fields? Only for sadmins and identified users */
if (param && stricmp(param, "ALL") == 0 &&
(check_access(u, ci, CA_INFO) || is_servadmin))
show_all = 1;
/* Should we show all fields? Only for sadmins and identified users */
if (param && stricmp(param, "ALL") == 0 &&
(check_access(u, ci, CA_INFO) || is_servadmin))
show_all = 1;
notice_lang(s_ChanServ, u, CHAN_INFO_HEADER, chan);
notice_lang(s_ChanServ, u, CHAN_INFO_NO_FOUNDER,
ci->founder->display);
notice_lang(s_ChanServ, u, CHAN_INFO_HEADER, chan);
notice_lang(s_ChanServ, u, CHAN_INFO_NO_FOUNDER,
ci->founder->display);
if (show_all && ci->successor)
notice_lang(s_ChanServ, u, CHAN_INFO_NO_SUCCESSOR,
ci->successor->display);
if (show_all && ci->successor)
notice_lang(s_ChanServ, u, CHAN_INFO_NO_SUCCESSOR,
ci->successor->display);
notice_lang(s_ChanServ, u, CHAN_INFO_DESCRIPTION, ci->desc);
tm = localtime(&ci->time_registered);
strftime_lang(buf, sizeof(buf), u, STRFTIME_DATE_TIME_FORMAT, tm);
notice_lang(s_ChanServ, u, CHAN_INFO_TIME_REGGED, buf);
tm = localtime(&ci->last_used);
strftime_lang(buf, sizeof(buf), u, STRFTIME_DATE_TIME_FORMAT, tm);
notice_lang(s_ChanServ, u, CHAN_INFO_LAST_USED, buf);
if (ci->last_topic
&& (show_all || (!(ci->mlock_on & anope_get_secret_mode())
&& (!ci->c
|| !(ci->c->
mode & anope_get_secret_mode()))))) {
notice_lang(s_ChanServ, u, CHAN_INFO_LAST_TOPIC,
ci->last_topic);
notice_lang(s_ChanServ, u, CHAN_INFO_TOPIC_SET_BY,
ci->last_topic_setter);
}
notice_lang(s_ChanServ, u, CHAN_INFO_DESCRIPTION, ci->desc);
tm = localtime(&ci->time_registered);
strftime_lang(buf, sizeof(buf), u, STRFTIME_DATE_TIME_FORMAT, tm);
notice_lang(s_ChanServ, u, CHAN_INFO_TIME_REGGED, buf);
tm = localtime(&ci->last_used);
strftime_lang(buf, sizeof(buf), u, STRFTIME_DATE_TIME_FORMAT, tm);
notice_lang(s_ChanServ, u, CHAN_INFO_LAST_USED, buf);
if (ci->last_topic
&& (show_all || (!(ci->mlock_on & anope_get_secret_mode())
&& (!ci->c
|| !(ci->c->
mode & anope_get_secret_mode()))))) {
notice_lang(s_ChanServ, u, CHAN_INFO_LAST_TOPIC,
ci->last_topic);
notice_lang(s_ChanServ, u, CHAN_INFO_TOPIC_SET_BY,
ci->last_topic_setter);
}
if (ci->entry_message && show_all)
notice_lang(s_ChanServ, u, CHAN_INFO_ENTRYMSG,
ci->entry_message);
if (ci->url)
notice_lang(s_ChanServ, u, CHAN_INFO_URL, ci->url);
if (ci->email)
notice_lang(s_ChanServ, u, CHAN_INFO_EMAIL, ci->email);
if (ci->entry_message && show_all)
notice_lang(s_ChanServ, u, CHAN_INFO_ENTRYMSG,
ci->entry_message);
if (ci->url)
notice_lang(s_ChanServ, u, CHAN_INFO_URL, ci->url);
if (ci->email)
notice_lang(s_ChanServ, u, CHAN_INFO_EMAIL, ci->email);
if (show_all) {
notice_lang(s_ChanServ, u, CHAN_INFO_BANTYPE, ci->bantype);
if (show_all) {
notice_lang(s_ChanServ, u, CHAN_INFO_BANTYPE, ci->bantype);
end = buf;
*end = 0;
if (ci->flags & CI_KEEPTOPIC) {
end += snprintf(end, sizeof(buf) - (end - buf), "%s",
getstring(u->na, CHAN_INFO_OPT_KEEPTOPIC));
need_comma = 1;
}
if (ci->flags & CI_OPNOTICE) {
end += snprintf(end, sizeof(buf) - (end - buf), "%s%s",
need_comma ? commastr : "",
getstring(u->na, CHAN_INFO_OPT_OPNOTICE));
need_comma = 1;
}
if (ci->flags & CI_PEACE) {
end += snprintf(end, sizeof(buf) - (end - buf), "%s%s",
need_comma ? commastr : "",
getstring(u->na, CHAN_INFO_OPT_PEACE));
need_comma = 1;
}
if (ci->flags & CI_PRIVATE) {
end += snprintf(end, sizeof(buf) - (end - buf), "%s%s",
need_comma ? commastr : "",
getstring(u->na, CHAN_INFO_OPT_PRIVATE));
need_comma = 1;
}
if (ci->flags & CI_RESTRICTED) {
end += snprintf(end, sizeof(buf) - (end - buf), "%s%s",
need_comma ? commastr : "",
getstring(u->na,
CHAN_INFO_OPT_RESTRICTED));
need_comma = 1;
}
if (ci->flags & CI_SECURE) {
end += snprintf(end, sizeof(buf) - (end - buf), "%s%s",
need_comma ? commastr : "",
getstring(u->na, CHAN_INFO_OPT_SECURE));
need_comma = 1;
}
if (ci->flags & CI_SECUREOPS) {
end += snprintf(end, sizeof(buf) - (end - buf), "%s%s",
need_comma ? commastr : "",
getstring(u->na, CHAN_INFO_OPT_SECUREOPS));
need_comma = 1;
}
if (ci->flags & CI_SECUREFOUNDER) {
end += snprintf(end, sizeof(buf) - (end - buf), "%s%s",
need_comma ? commastr : "",
getstring(u->na,
CHAN_INFO_OPT_SECUREFOUNDER));
need_comma = 1;
}
if ((ci->flags & CI_SIGNKICK)
|| (ci->flags & CI_SIGNKICK_LEVEL)) {
end +=
snprintf(end, sizeof(buf) - (end - buf), "%s%s",
need_comma ? commastr : "", getstring(u->na,
CHAN_INFO_OPT_SIGNKICK));
need_comma = 1;
}
if (ci->flags & CI_TOPICLOCK) {
end += snprintf(end, sizeof(buf) - (end - buf), "%s%s",
need_comma ? commastr : "",
getstring(u->na, CHAN_INFO_OPT_TOPICLOCK));
need_comma = 1;
}
if (ci->flags & CI_XOP) {
end += snprintf(end, sizeof(buf) - (end - buf), "%s%s",
need_comma ? commastr : "",
getstring(u->na, CHAN_INFO_OPT_XOP));
need_comma = 1;
}
notice_lang(s_ChanServ, u, CHAN_INFO_OPTIONS,
*buf ? buf : getstring(u->na, CHAN_INFO_OPT_NONE));
notice_lang(s_ChanServ, u, CHAN_INFO_MODE_LOCK,
get_mlock_modes(ci, 1));
end = buf;
*end = 0;
if (ci->flags & CI_KEEPTOPIC) {
end += snprintf(end, sizeof(buf) - (end - buf), "%s",
getstring(u->na, CHAN_INFO_OPT_KEEPTOPIC));
need_comma = 1;
}
if (ci->flags & CI_OPNOTICE) {
end += snprintf(end, sizeof(buf) - (end - buf), "%s%s",
need_comma ? commastr : "",
getstring(u->na, CHAN_INFO_OPT_OPNOTICE));
need_comma = 1;
}
if (ci->flags & CI_PEACE) {
end += snprintf(end, sizeof(buf) - (end - buf), "%s%s",
need_comma ? commastr : "",
getstring(u->na, CHAN_INFO_OPT_PEACE));
need_comma = 1;
}
if (ci->flags & CI_PRIVATE) {
end += snprintf(end, sizeof(buf) - (end - buf), "%s%s",
need_comma ? commastr : "",
getstring(u->na, CHAN_INFO_OPT_PRIVATE));
need_comma = 1;
}
if (ci->flags & CI_RESTRICTED) {
end += snprintf(end, sizeof(buf) - (end - buf), "%s%s",
need_comma ? commastr : "",
getstring(u->na,
CHAN_INFO_OPT_RESTRICTED));
need_comma = 1;
}
if (ci->flags & CI_SECURE) {
end += snprintf(end, sizeof(buf) - (end - buf), "%s%s",
need_comma ? commastr : "",
getstring(u->na, CHAN_INFO_OPT_SECURE));
need_comma = 1;
}
if (ci->flags & CI_SECUREOPS) {
end += snprintf(end, sizeof(buf) - (end - buf), "%s%s",
need_comma ? commastr : "",
getstring(u->na, CHAN_INFO_OPT_SECUREOPS));
need_comma = 1;
}
if (ci->flags & CI_SECUREFOUNDER) {
end += snprintf(end, sizeof(buf) - (end - buf), "%s%s",
need_comma ? commastr : "",
getstring(u->na,
CHAN_INFO_OPT_SECUREFOUNDER));
need_comma = 1;
}
if ((ci->flags & CI_SIGNKICK)
|| (ci->flags & CI_SIGNKICK_LEVEL)) {
end +=
snprintf(end, sizeof(buf) - (end - buf), "%s%s",
need_comma ? commastr : "", getstring(u->na,
CHAN_INFO_OPT_SIGNKICK));
need_comma = 1;
}
if (ci->flags & CI_TOPICLOCK) {
end += snprintf(end, sizeof(buf) - (end - buf), "%s%s",
need_comma ? commastr : "",
getstring(u->na, CHAN_INFO_OPT_TOPICLOCK));
need_comma = 1;
}
if (ci->flags & CI_XOP) {
end += snprintf(end, sizeof(buf) - (end - buf), "%s%s",
need_comma ? commastr : "",
getstring(u->na, CHAN_INFO_OPT_XOP));
need_comma = 1;
}
notice_lang(s_ChanServ, u, CHAN_INFO_OPTIONS,
*buf ? buf : getstring(u->na, CHAN_INFO_OPT_NONE));
notice_lang(s_ChanServ, u, CHAN_INFO_MODE_LOCK,
get_mlock_modes(ci, 1));
}
if (show_all) {
if (ci->flags & CI_NO_EXPIRE) {
notice_lang(s_ChanServ, u, CHAN_INFO_NO_EXPIRE);
} else {
if (is_servadmin) {
expt = ci->last_used + CSExpire;
tm = localtime(&expt);
strftime_lang(buf, sizeof(buf), u,
STRFTIME_DATE_TIME_FORMAT, tm);
notice_lang(s_ChanServ, u, CHAN_INFO_EXPIRE, buf);
}
}
}
if (ci->flags & CI_SUSPENDED) {
notice_lang(s_ChanServ, u, CHAN_X_SUSPENDED, ci->forbidby,
(ci->forbidreason ? ci->
forbidreason : getstring(u->na, NO_REASON)));
}
}
if (show_all) {
if (ci->flags & CI_NO_EXPIRE) {
notice_lang(s_ChanServ, u, CHAN_INFO_NO_EXPIRE);
} else {
if (is_servadmin) {
expt = ci->last_used + CSExpire;
tm = localtime(&expt);
strftime_lang(buf, sizeof(buf), u,
STRFTIME_DATE_TIME_FORMAT, tm);
notice_lang(s_ChanServ, u, CHAN_INFO_EXPIRE, buf);
}
}
}
if (ci->flags & CI_SUSPENDED) {
notice_lang(s_ChanServ, u, CHAN_X_SUSPENDED, ci->forbidby,
(ci->forbidreason ? ci->
forbidreason : getstring(u->na, NO_REASON)));
}
if (!show_all && (check_access(u, ci, CA_INFO) || is_servadmin))
notice_lang(s_ChanServ, u, NICK_INFO_FOR_MORE, s_ChanServ,
ci->name);
if (!show_all && (check_access(u, ci, CA_INFO) || is_servadmin))
notice_lang(s_ChanServ, u, NICK_INFO_FOR_MORE, s_ChanServ,
ci->name);
}
return MOD_CONT;
}
return MOD_CONT;
}
MODULE_INIT("cs_info", CSInfo)
+20 -20
View File
@@ -44,7 +44,7 @@ class CSInvite : public Module
**/
void myChanServHelp(User * u)
{
notice_lang(s_ChanServ, u, CHAN_HELP_CMD_INVITE);
notice_lang(s_ChanServ, u, CHAN_HELP_CMD_INVITE);
}
/**
@@ -54,26 +54,26 @@ void myChanServHelp(User * u)
**/
int do_invite(User * u)
{
char *chan = strtok(NULL, " ");
Channel *c;
ChannelInfo *ci;
char *chan = strtok(NULL, " ");
Channel *c;
ChannelInfo *ci;
if (!chan) {
syntax_error(s_ChanServ, u, "INVITE", CHAN_INVITE_SYNTAX);
} else if (!(c = findchan(chan))) {
notice_lang(s_ChanServ, u, CHAN_X_NOT_IN_USE, chan);
} else if (!(ci = c->ci)) {
notice_lang(s_ChanServ, u, CHAN_X_NOT_REGISTERED, chan);
} else if (ci->flags & CI_VERBOTEN) {
notice_lang(s_ChanServ, u, CHAN_X_FORBIDDEN, chan);
} else if (ci->flags & CI_SUSPENDED) {
notice_lang(s_ChanServ, u, CHAN_X_FORBIDDEN, chan);
} else if (!u || !check_access(u, ci, CA_INVITE)) {
notice_lang(s_ChanServ, u, PERMISSION_DENIED);
} else {
ircdproto->SendInvite(whosends(ci), chan, u->nick);
}
return MOD_CONT;
if (!chan) {
syntax_error(s_ChanServ, u, "INVITE", CHAN_INVITE_SYNTAX);
} else if (!(c = findchan(chan))) {
notice_lang(s_ChanServ, u, CHAN_X_NOT_IN_USE, chan);
} else if (!(ci = c->ci)) {
notice_lang(s_ChanServ, u, CHAN_X_NOT_REGISTERED, chan);
} else if (ci->flags & CI_VERBOTEN) {
notice_lang(s_ChanServ, u, CHAN_X_FORBIDDEN, chan);
} else if (ci->flags & CI_SUSPENDED) {
notice_lang(s_ChanServ, u, CHAN_X_FORBIDDEN, chan);
} else if (!u || !check_access(u, ci, CA_INVITE)) {
notice_lang(s_ChanServ, u, PERMISSION_DENIED);
} else {
ircdproto->SendInvite(whosends(ci), chan, u->nick);
}
return MOD_CONT;
}
MODULE_INIT("cs_invite", CSInvite)
+74 -74
View File
@@ -42,7 +42,7 @@ class CSKick : public Module
**/
void myChanServHelp(User * u)
{
notice_lang(s_ChanServ, u, CHAN_HELP_CMD_KICK);
notice_lang(s_ChanServ, u, CHAN_HELP_CMD_KICK);
}
/**
@@ -52,90 +52,90 @@ void myChanServHelp(User * u)
**/
int do_cs_kick(User * u)
{
char *chan = strtok(NULL, " ");
char *params = strtok(NULL, " ");
char *reason = strtok(NULL, "");
char *chan = strtok(NULL, " ");
char *params = strtok(NULL, " ");
char *reason = strtok(NULL, "");
Channel *c;
ChannelInfo *ci;
User *u2;
Channel *c;
ChannelInfo *ci;
User *u2;
int is_same;
int is_same;
if (!reason) {
reason = "Requested";
} else {
if (strlen(reason) > 200)
reason[200] = '\0';
}
if (!reason) {
reason = "Requested";
} else {
if (strlen(reason) > 200)
reason[200] = '\0';
}
if (!chan) {
struct u_chanlist *uc, *next;
if (!chan) {
struct u_chanlist *uc, *next;
/* Kicks the user on every channels he is on. */
/* Kicks the user on every channels he is on. */
for (uc = u->chans; uc; uc = next) {
next = uc->next;
if ((ci = uc->chan->ci) && !(ci->flags & CI_VERBOTEN)
&& check_access(u, ci, CA_KICKME)) {
const char *av[3];
for (uc = u->chans; uc; uc = next) {
next = uc->next;
if ((ci = uc->chan->ci) && !(ci->flags & CI_VERBOTEN)
&& check_access(u, ci, CA_KICKME)) {
const char *av[3];
if ((ci->flags & CI_SIGNKICK)
|| ((ci->flags & CI_SIGNKICK_LEVEL)
&& !check_access(u, ci, CA_SIGNKICK)))
ircdproto->SendKick(whosends(ci), ci->name, u->nick,
"%s (%s)", reason, u->nick);
else
ircdproto->SendKick(whosends(ci), ci->name, u->nick, "%s",
reason);
av[0] = ci->name;
av[1] = u->nick;
av[2] = reason;
do_kick(s_ChanServ, 3, av);
}
}
if ((ci->flags & CI_SIGNKICK)
|| ((ci->flags & CI_SIGNKICK_LEVEL)
&& !check_access(u, ci, CA_SIGNKICK)))
ircdproto->SendKick(whosends(ci), ci->name, u->nick,
"%s (%s)", reason, u->nick);
else
ircdproto->SendKick(whosends(ci), ci->name, u->nick, "%s",
reason);
av[0] = ci->name;
av[1] = u->nick;
av[2] = reason;
do_kick(s_ChanServ, 3, av);
}
}
return MOD_CONT;
} else if (!params) {
params = u->nick;
}
return MOD_CONT;
} else if (!params) {
params = u->nick;
}
is_same = (params == u->nick) ? 1 : (stricmp(params, u->nick) == 0);
is_same = (params == u->nick) ? 1 : (stricmp(params, u->nick) == 0);
if (!(c = findchan(chan))) {
notice_lang(s_ChanServ, u, CHAN_X_NOT_IN_USE, chan);
} else if (!(ci = c->ci)) {
notice_lang(s_ChanServ, u, CHAN_X_NOT_REGISTERED, chan);
} else if (ci->flags & CI_VERBOTEN) {
notice_lang(s_ChanServ, u, CHAN_X_FORBIDDEN, chan);
} else if (is_same ? !(u2 = u) : !(u2 = finduser(params))) {
notice_lang(s_ChanServ, u, NICK_X_NOT_IN_USE, params);
} else if (!is_on_chan(c, u2)) {
notice_lang(s_ChanServ, u, NICK_X_NOT_ON_CHAN, u2->nick, c->name);
} else if (!is_same ? !check_access(u, ci, CA_KICK) :
!check_access(u, ci, CA_KICKME)) {
notice_lang(s_ChanServ, u, ACCESS_DENIED);
} else if (!is_same && (ci->flags & CI_PEACE)
&& (get_access(u2, ci) >= get_access(u, ci))) {
notice_lang(s_ChanServ, u, PERMISSION_DENIED);
} else if (is_protected(u2)) {
notice_lang(s_ChanServ, u, PERMISSION_DENIED);
} else {
const char *av[3];
if (!(c = findchan(chan))) {
notice_lang(s_ChanServ, u, CHAN_X_NOT_IN_USE, chan);
} else if (!(ci = c->ci)) {
notice_lang(s_ChanServ, u, CHAN_X_NOT_REGISTERED, chan);
} else if (ci->flags & CI_VERBOTEN) {
notice_lang(s_ChanServ, u, CHAN_X_FORBIDDEN, chan);
} else if (is_same ? !(u2 = u) : !(u2 = finduser(params))) {
notice_lang(s_ChanServ, u, NICK_X_NOT_IN_USE, params);
} else if (!is_on_chan(c, u2)) {
notice_lang(s_ChanServ, u, NICK_X_NOT_ON_CHAN, u2->nick, c->name);
} else if (!is_same ? !check_access(u, ci, CA_KICK) :
!check_access(u, ci, CA_KICKME)) {
notice_lang(s_ChanServ, u, ACCESS_DENIED);
} else if (!is_same && (ci->flags & CI_PEACE)
&& (get_access(u2, ci) >= get_access(u, ci))) {
notice_lang(s_ChanServ, u, PERMISSION_DENIED);
} else if (is_protected(u2)) {
notice_lang(s_ChanServ, u, PERMISSION_DENIED);
} else {
const char *av[3];
if ((ci->flags & CI_SIGNKICK)
|| ((ci->flags & CI_SIGNKICK_LEVEL)
&& !check_access(u, ci, CA_SIGNKICK)))
ircdproto->SendKick(whosends(ci), ci->name, params, "%s (%s)",
reason, u->nick);
else
ircdproto->SendKick(whosends(ci), ci->name, params, "%s", reason);
av[0] = ci->name;
av[1] = params;
av[2] = reason;
do_kick(s_ChanServ, 3, av);
}
return MOD_CONT;
if ((ci->flags & CI_SIGNKICK)
|| ((ci->flags & CI_SIGNKICK_LEVEL)
&& !check_access(u, ci, CA_SIGNKICK)))
ircdproto->SendKick(whosends(ci), ci->name, params, "%s (%s)",
reason, u->nick);
else
ircdproto->SendKick(whosends(ci), ci->name, params, "%s", reason);
av[0] = ci->name;
av[1] = params;
av[2] = reason;
do_kick(s_ChanServ, 3, av);
}
return MOD_CONT;
}
MODULE_INIT("cs_kick", CSKick)
+118 -118
View File
@@ -45,9 +45,9 @@ class CSList : public Module
**/
void myChanServHelp(User * u)
{
if (!CSListOpersOnly || (is_oper(u))) {
notice_lang(s_ChanServ, u, CHAN_HELP_CMD_LIST);
}
if (!CSListOpersOnly || (is_oper(u))) {
notice_lang(s_ChanServ, u, CHAN_HELP_CMD_LIST);
}
}
/**
@@ -57,130 +57,130 @@ void myChanServHelp(User * u)
**/
int do_list(User * u)
{
char *pattern = strtok(NULL, " ");
int spattern_size;
char *spattern;
ChannelInfo *ci;
int nchans, i;
char buf[BUFSIZE];
int is_servadmin = is_services_admin(u);
int count = 0, from = 0, to = 0, tofree = 0;
char *tmp = NULL;
char *s = NULL;
char *keyword;
int32 matchflags = 0;
char *pattern = strtok(NULL, " ");
int spattern_size;
char *spattern;
ChannelInfo *ci;
int nchans, i;
char buf[BUFSIZE];
int is_servadmin = is_services_admin(u);
int count = 0, from = 0, to = 0, tofree = 0;
char *tmp = NULL;
char *s = NULL;
char *keyword;
int32 matchflags = 0;
if (!(!CSListOpersOnly || (is_oper(u)))) {
notice_lang(s_ChanServ, u, ACCESS_DENIED);
return MOD_STOP;
}
if (!(!CSListOpersOnly || (is_oper(u)))) {
notice_lang(s_ChanServ, u, ACCESS_DENIED);
return MOD_STOP;
}
if (!pattern) {
syntax_error(s_ChanServ, u, "LIST",
is_servadmin ? CHAN_LIST_SERVADMIN_SYNTAX :
CHAN_LIST_SYNTAX);
} else {
if (!pattern) {
syntax_error(s_ChanServ, u, "LIST",
is_servadmin ? CHAN_LIST_SERVADMIN_SYNTAX :
CHAN_LIST_SYNTAX);
} else {
if (pattern) {
if (pattern[0] == '#') {
tmp = myStrGetOnlyToken((pattern + 1), '-', 0); /* Read FROM out */
if (!tmp) {
notice_lang(s_ChanServ, u, LIST_INCORRECT_RANGE);
notice_lang(s_ChanServ, u, CS_LIST_INCORRECT_RANGE);
return MOD_CONT;
}
for (s = tmp; *s; s++) {
if (!isdigit(*s)) {
free(tmp);
notice_lang(s_ChanServ, u, LIST_INCORRECT_RANGE);
notice_lang(s_ChanServ, u, CS_LIST_INCORRECT_RANGE);
return MOD_CONT;
}
}
from = atoi(tmp);
free(tmp);
tmp = myStrGetTokenRemainder(pattern, '-', 1); /* Read TO out */
if (!tmp) {
notice_lang(s_ChanServ, u, LIST_INCORRECT_RANGE);
notice_lang(s_ChanServ, u, CS_LIST_INCORRECT_RANGE);
return MOD_CONT;
}
for (s = tmp; *s; s++) {
if (!isdigit(*s)) {
free(tmp);
notice_lang(s_ChanServ, u, LIST_INCORRECT_RANGE);
notice_lang(s_ChanServ, u, CS_LIST_INCORRECT_RANGE);
return MOD_CONT;
}
}
to = atoi(tmp);
free(tmp);
pattern = sstrdup("*");
tofree = 1;
}
}
if (pattern) {
if (pattern[0] == '#') {
tmp = myStrGetOnlyToken((pattern + 1), '-', 0); /* Read FROM out */
if (!tmp) {
notice_lang(s_ChanServ, u, LIST_INCORRECT_RANGE);
notice_lang(s_ChanServ, u, CS_LIST_INCORRECT_RANGE);
return MOD_CONT;
}
for (s = tmp; *s; s++) {
if (!isdigit(*s)) {
free(tmp);
notice_lang(s_ChanServ, u, LIST_INCORRECT_RANGE);
notice_lang(s_ChanServ, u, CS_LIST_INCORRECT_RANGE);
return MOD_CONT;
}
}
from = atoi(tmp);
free(tmp);
tmp = myStrGetTokenRemainder(pattern, '-', 1); /* Read TO out */
if (!tmp) {
notice_lang(s_ChanServ, u, LIST_INCORRECT_RANGE);
notice_lang(s_ChanServ, u, CS_LIST_INCORRECT_RANGE);
return MOD_CONT;
}
for (s = tmp; *s; s++) {
if (!isdigit(*s)) {
free(tmp);
notice_lang(s_ChanServ, u, LIST_INCORRECT_RANGE);
notice_lang(s_ChanServ, u, CS_LIST_INCORRECT_RANGE);
return MOD_CONT;
}
}
to = atoi(tmp);
free(tmp);
pattern = sstrdup("*");
tofree = 1;
}
}
nchans = 0;
nchans = 0;
while (is_servadmin && (keyword = strtok(NULL, " "))) {
if (stricmp(keyword, "FORBIDDEN") == 0)
matchflags |= CI_VERBOTEN;
if (stricmp(keyword, "SUSPENDED") == 0)
matchflags |= CI_SUSPENDED;
if (stricmp(keyword, "NOEXPIRE") == 0)
matchflags |= CI_NO_EXPIRE;
}
spattern_size = (strlen(pattern) + 2) * sizeof(char);
spattern = (char *)smalloc(spattern_size);
snprintf(spattern, spattern_size, "#%s", pattern);
while (is_servadmin && (keyword = strtok(NULL, " "))) {
if (stricmp(keyword, "FORBIDDEN") == 0)
matchflags |= CI_VERBOTEN;
if (stricmp(keyword, "SUSPENDED") == 0)
matchflags |= CI_SUSPENDED;
if (stricmp(keyword, "NOEXPIRE") == 0)
matchflags |= CI_NO_EXPIRE;
}
spattern_size = (strlen(pattern) + 2) * sizeof(char);
spattern = (char *)smalloc(spattern_size);
snprintf(spattern, spattern_size, "#%s", pattern);
notice_lang(s_ChanServ, u, CHAN_LIST_HEADER, pattern);
for (i = 0; i < 256; i++) {
for (ci = chanlists[i]; ci; ci = ci->next) {
if (!is_servadmin && ((ci->flags & CI_PRIVATE)
|| (ci->flags & CI_VERBOTEN)))
continue;
if ((matchflags != 0) && !(ci->flags & matchflags))
continue;
notice_lang(s_ChanServ, u, CHAN_LIST_HEADER, pattern);
for (i = 0; i < 256; i++) {
for (ci = chanlists[i]; ci; ci = ci->next) {
if (!is_servadmin && ((ci->flags & CI_PRIVATE)
|| (ci->flags & CI_VERBOTEN)))
continue;
if ((matchflags != 0) && !(ci->flags & matchflags))
continue;
if ((stricmp(pattern, ci->name) == 0)
|| (stricmp(spattern, ci->name) == 0)
|| match_wild_nocase(pattern, ci->name)
|| match_wild_nocase(spattern, ci->name)) {
if ((((count + 1 >= from) && (count + 1 <= to))
|| ((from == 0) && (to == 0)))
&& (++nchans <= CSListMax)) {
char noexpire_char = ' ';
if (is_servadmin && (ci->flags & CI_NO_EXPIRE))
noexpire_char = '!';
if ((stricmp(pattern, ci->name) == 0)
|| (stricmp(spattern, ci->name) == 0)
|| match_wild_nocase(pattern, ci->name)
|| match_wild_nocase(spattern, ci->name)) {
if ((((count + 1 >= from) && (count + 1 <= to))
|| ((from == 0) && (to == 0)))
&& (++nchans <= CSListMax)) {
char noexpire_char = ' ';
if (is_servadmin && (ci->flags & CI_NO_EXPIRE))
noexpire_char = '!';
if (ci->flags & CI_VERBOTEN) {
snprintf(buf, sizeof(buf),
"%-20s [Forbidden]", ci->name);
} else if (ci->flags & CI_SUSPENDED) {
snprintf(buf, sizeof(buf),
"%-20s [Suspended]", ci->name);
} else {
snprintf(buf, sizeof(buf), "%-20s %s",
ci->name, ci->desc ? ci->desc : "");
}
if (ci->flags & CI_VERBOTEN) {
snprintf(buf, sizeof(buf),
"%-20s [Forbidden]", ci->name);
} else if (ci->flags & CI_SUSPENDED) {
snprintf(buf, sizeof(buf),
"%-20s [Suspended]", ci->name);
} else {
snprintf(buf, sizeof(buf), "%-20s %s",
ci->name, ci->desc ? ci->desc : "");
}
notice_user(s_ChanServ, u, " %c%s",
noexpire_char, buf);
}
count++;
}
}
}
notice_lang(s_ChanServ, u, CHAN_LIST_END,
nchans > CSListMax ? CSListMax : nchans, nchans);
free(spattern);
}
if (tofree)
free(pattern);
return MOD_CONT;
notice_user(s_ChanServ, u, " %c%s",
noexpire_char, buf);
}
count++;
}
}
}
notice_lang(s_ChanServ, u, CHAN_LIST_END,
nchans > CSListMax ? CSListMax : nchans, nchans);
free(spattern);
}
if (tofree)
free(pattern);
return MOD_CONT;
}
+50 -50
View File
@@ -44,7 +44,7 @@ class CSLogout : public Module
**/
void myChanServHelp(User * u)
{
notice_lang(s_ChanServ, u, CHAN_HELP_CMD_LOGOUT);
notice_lang(s_ChanServ, u, CHAN_HELP_CMD_LOGOUT);
}
/**
@@ -54,65 +54,65 @@ void myChanServHelp(User * u)
**/
int do_logout(User * u)
{
char *chan = strtok(NULL, " ");
char *nick = strtok(NULL, " ");
ChannelInfo *ci;
User *u2 = NULL;
int is_servadmin = is_services_admin(u);
char *chan = strtok(NULL, " ");
char *nick = strtok(NULL, " ");
ChannelInfo *ci;
User *u2 = NULL;
int is_servadmin = is_services_admin(u);
if (!chan || (!nick && !is_servadmin)) {
syntax_error(s_ChanServ, u, "LOGOUT",
(!is_servadmin ? CHAN_LOGOUT_SYNTAX :
CHAN_LOGOUT_SERVADMIN_SYNTAX));
} else if (!(ci = cs_findchan(chan))) {
notice_lang(s_ChanServ, u, CHAN_X_NOT_REGISTERED, chan);
} else if (!is_servadmin && (ci->flags & CI_VERBOTEN)) {
notice_lang(s_ChanServ, u, CHAN_X_FORBIDDEN, chan);
} else if (nick && !(u2 = finduser(nick))) {
notice_lang(s_ChanServ, u, NICK_X_NOT_IN_USE, nick);
} else if (!is_servadmin && u2 != u && !is_real_founder(u, ci)) {
notice_lang(s_ChanServ, u, ACCESS_DENIED);
if (!chan || (!nick && !is_servadmin)) {
syntax_error(s_ChanServ, u, "LOGOUT",
(!is_servadmin ? CHAN_LOGOUT_SYNTAX :
CHAN_LOGOUT_SERVADMIN_SYNTAX));
} else if (!(ci = cs_findchan(chan))) {
notice_lang(s_ChanServ, u, CHAN_X_NOT_REGISTERED, chan);
} else if (!is_servadmin && (ci->flags & CI_VERBOTEN)) {
notice_lang(s_ChanServ, u, CHAN_X_FORBIDDEN, chan);
} else if (nick && !(u2 = finduser(nick))) {
notice_lang(s_ChanServ, u, NICK_X_NOT_IN_USE, nick);
} else if (!is_servadmin && u2 != u && !is_real_founder(u, ci)) {
notice_lang(s_ChanServ, u, ACCESS_DENIED);
/* Since founders can not logout we should tell them -katsklaw */
} else if (u2 == u && is_real_founder(u, ci)) {
} else if (u2 == u && is_real_founder(u, ci)) {
notice_lang(s_ChanServ, u, CHAN_LOGOUT_FOUNDER_FAILED, chan);
} else {
if (u2) {
make_unidentified(u2, ci);
notice_lang(s_ChanServ, u, CHAN_LOGOUT_SUCCEEDED, nick, chan);
alog("%s: User %s!%s@%s has been logged out of channel %s.",
s_ChanServ, u2->nick, u2->username, u2->host, chan);
} else {
int i;
for (i = 0; i < 1024; i++)
for (u2 = userlist[i]; u2; u2 = u2->next)
make_unidentified(u2, ci);
notice_lang(s_ChanServ, u, CHAN_LOGOUT_ALL_SUCCEEDED, chan);
alog("%s: All users identified have been logged out of channel %s.", s_ChanServ, chan);
}
} else {
if (u2) {
make_unidentified(u2, ci);
notice_lang(s_ChanServ, u, CHAN_LOGOUT_SUCCEEDED, nick, chan);
alog("%s: User %s!%s@%s has been logged out of channel %s.",
s_ChanServ, u2->nick, u2->username, u2->host, chan);
} else {
int i;
for (i = 0; i < 1024; i++)
for (u2 = userlist[i]; u2; u2 = u2->next)
make_unidentified(u2, ci);
notice_lang(s_ChanServ, u, CHAN_LOGOUT_ALL_SUCCEEDED, chan);
alog("%s: All users identified have been logged out of channel %s.", s_ChanServ, chan);
}
}
return MOD_CONT;
}
return MOD_CONT;
}
void make_unidentified(User * u, ChannelInfo * ci)
{
struct u_chaninfolist *uci;
struct u_chaninfolist *uci;
if (!u || !ci)
return;
if (!u || !ci)
return;
for (uci = u->founder_chans; uci; uci = uci->next) {
if (uci->chan == ci) {
if (uci->next)
uci->next->prev = uci->prev;
if (uci->prev)
uci->prev->next = uci->next;
else
u->founder_chans = uci->next;
free(uci);
break;
}
}
for (uci = u->founder_chans; uci; uci = uci->next) {
if (uci->chan == ci) {
if (uci->next)
uci->next->prev = uci->prev;
if (uci->prev)
uci->prev->next = uci->next;
else
u->founder_chans = uci->next;
free(uci);
break;
}
}
}
MODULE_INIT("cs_logout", CSLogout)
+181 -181
View File
@@ -86,26 +86,26 @@ class CSModes : public Module
**/
void myChanServHelp(User * u)
{
if (ircd->owner) {
notice_lang(s_ChanServ, u, CHAN_HELP_CMD_OWNER);
notice_lang(s_ChanServ, u, CHAN_HELP_CMD_DEOWNER);
}
if (ircd->protect) {
notice_lang(s_ChanServ, u, CHAN_HELP_CMD_PROTECT);
notice_lang(s_ChanServ, u, CHAN_HELP_CMD_DEPROTECT);
} else if (ircd->admin) {
notice_lang(s_ChanServ, u, CHAN_HELP_CMD_ADMIN);
notice_lang(s_ChanServ, u, CHAN_HELP_CMD_DEADMIN);
}
if (ircd->owner) {
notice_lang(s_ChanServ, u, CHAN_HELP_CMD_OWNER);
notice_lang(s_ChanServ, u, CHAN_HELP_CMD_DEOWNER);
}
if (ircd->protect) {
notice_lang(s_ChanServ, u, CHAN_HELP_CMD_PROTECT);
notice_lang(s_ChanServ, u, CHAN_HELP_CMD_DEPROTECT);
} else if (ircd->admin) {
notice_lang(s_ChanServ, u, CHAN_HELP_CMD_ADMIN);
notice_lang(s_ChanServ, u, CHAN_HELP_CMD_DEADMIN);
}
notice_lang(s_ChanServ, u, CHAN_HELP_CMD_OP);
notice_lang(s_ChanServ, u, CHAN_HELP_CMD_DEOP);
if (ircd->halfop) {
notice_lang(s_ChanServ, u, CHAN_HELP_CMD_HALFOP);
notice_lang(s_ChanServ, u, CHAN_HELP_CMD_DEHALFOP);
}
notice_lang(s_ChanServ, u, CHAN_HELP_CMD_VOICE);
notice_lang(s_ChanServ, u, CHAN_HELP_CMD_DEVOICE);
notice_lang(s_ChanServ, u, CHAN_HELP_CMD_OP);
notice_lang(s_ChanServ, u, CHAN_HELP_CMD_DEOP);
if (ircd->halfop) {
notice_lang(s_ChanServ, u, CHAN_HELP_CMD_HALFOP);
notice_lang(s_ChanServ, u, CHAN_HELP_CMD_DEHALFOP);
}
notice_lang(s_ChanServ, u, CHAN_HELP_CMD_VOICE);
notice_lang(s_ChanServ, u, CHAN_HELP_CMD_DEVOICE);
}
/**
@@ -116,256 +116,256 @@ void myChanServHelp(User * u)
int do_op(User * u)
{
return do_util(u, &csmodeutils[MUT_OP]);
return do_util(u, &csmodeutils[MUT_OP]);
}
/*************************************************************************/
int do_deop(User * u)
{
return do_util(u, &csmodeutils[MUT_DEOP]);
return do_util(u, &csmodeutils[MUT_DEOP]);
}
/*************************************************************************/
int do_voice(User * u)
{
return do_util(u, &csmodeutils[MUT_VOICE]);
return do_util(u, &csmodeutils[MUT_VOICE]);
}
/*************************************************************************/
int do_devoice(User * u)
{
return do_util(u, &csmodeutils[MUT_DEVOICE]);
return do_util(u, &csmodeutils[MUT_DEVOICE]);
}
/*************************************************************************/
int do_halfop(User * u)
{
if (ircd->halfop) {
return do_util(u, &csmodeutils[MUT_HALFOP]);
} else {
return MOD_CONT;
}
if (ircd->halfop) {
return do_util(u, &csmodeutils[MUT_HALFOP]);
} else {
return MOD_CONT;
}
}
/*************************************************************************/
int do_dehalfop(User * u)
{
if (ircd->halfop) {
return do_util(u, &csmodeutils[MUT_DEHALFOP]);
} else {
return MOD_CONT;
}
if (ircd->halfop) {
return do_util(u, &csmodeutils[MUT_DEHALFOP]);
} else {
return MOD_CONT;
}
}
/*************************************************************************/
int do_protect(User * u)
{
if (ircd->protect || ircd->admin) {
return do_util(u, &csmodeutils[MUT_PROTECT]);
} else {
return MOD_CONT;
}
if (ircd->protect || ircd->admin) {
return do_util(u, &csmodeutils[MUT_PROTECT]);
} else {
return MOD_CONT;
}
}
/*************************************************************************/
int do_deprotect(User * u)
{
if (ircd->protect || ircd->admin) {
return do_util(u, &csmodeutils[MUT_DEPROTECT]);
} else {
return MOD_CONT;
}
if (ircd->protect || ircd->admin) {
return do_util(u, &csmodeutils[MUT_DEPROTECT]);
} else {
return MOD_CONT;
}
}
/*************************************************************************/
int do_owner(User * u)
{
const char *av[2];
char *chan = strtok(NULL, " ");
const char *av[2];
char *chan = strtok(NULL, " ");
Channel *c;
ChannelInfo *ci;
struct u_chanlist *uc;
Channel *c;
ChannelInfo *ci;
struct u_chanlist *uc;
if (!ircd->owner) {
return MOD_CONT;
}
if (!ircd->owner) {
return MOD_CONT;
}
if (!chan) {
av[0] = ircd->ownerset;
av[1] = u->nick;
if (!chan) {
av[0] = ircd->ownerset;
av[1] = u->nick;
/* Sets the mode to the user on every channels he is on. */
/* Sets the mode to the user on every channels he is on. */
for (uc = u->chans; uc; uc = uc->next) {
if ((ci = uc->chan->ci) && !(ci->flags & CI_VERBOTEN)
&& is_founder(u, ci)) {
ircdproto->SendMode(whosends(ci), uc->chan->name, "%s %s",
av[0], u->nick);
chan_set_modes(s_ChanServ, uc->chan, 2, av, 1);
}
}
for (uc = u->chans; uc; uc = uc->next) {
if ((ci = uc->chan->ci) && !(ci->flags & CI_VERBOTEN)
&& is_founder(u, ci)) {
ircdproto->SendMode(whosends(ci), uc->chan->name, "%s %s",
av[0], u->nick);
chan_set_modes(s_ChanServ, uc->chan, 2, av, 1);
}
}
return MOD_CONT;
}
return MOD_CONT;
}
if (!(c = findchan(chan))) {
notice_lang(s_ChanServ, u, CHAN_X_NOT_IN_USE, chan);
} else if (!(ci = c->ci)) {
notice_lang(s_ChanServ, u, CHAN_X_NOT_REGISTERED, c->name);
} else if (ci->flags & CI_VERBOTEN) {
notice_lang(s_ChanServ, u, CHAN_X_FORBIDDEN, ci->name);
} else if (!is_on_chan(c, u)) {
notice_lang(s_ChanServ, u, NICK_X_NOT_ON_CHAN, u->nick, c->name);
} else if (!is_founder(u, ci)) {
notice_lang(s_ChanServ, u, ACCESS_DENIED);
} else {
ircdproto->SendMode(whosends(ci), c->name, "%s %s", ircd->ownerset,
u->nick);
if (!(c = findchan(chan))) {
notice_lang(s_ChanServ, u, CHAN_X_NOT_IN_USE, chan);
} else if (!(ci = c->ci)) {
notice_lang(s_ChanServ, u, CHAN_X_NOT_REGISTERED, c->name);
} else if (ci->flags & CI_VERBOTEN) {
notice_lang(s_ChanServ, u, CHAN_X_FORBIDDEN, ci->name);
} else if (!is_on_chan(c, u)) {
notice_lang(s_ChanServ, u, NICK_X_NOT_ON_CHAN, u->nick, c->name);
} else if (!is_founder(u, ci)) {
notice_lang(s_ChanServ, u, ACCESS_DENIED);
} else {
ircdproto->SendMode(whosends(ci), c->name, "%s %s", ircd->ownerset,
u->nick);
av[0] = ircd->ownerset;
av[1] = u->nick;
chan_set_modes(s_ChanServ, c, 2, av, 1);
}
return MOD_CONT;
av[0] = ircd->ownerset;
av[1] = u->nick;
chan_set_modes(s_ChanServ, c, 2, av, 1);
}
return MOD_CONT;
}
/*************************************************************************/
int do_deowner(User * u)
{
const char *av[2];
char *chan = strtok(NULL, " ");
const char *av[2];
char *chan = strtok(NULL, " ");
Channel *c;
ChannelInfo *ci;
struct u_chanlist *uc;
Channel *c;
ChannelInfo *ci;
struct u_chanlist *uc;
if (!ircd->owner) {
return MOD_CONT;
}
if (!ircd->owner) {
return MOD_CONT;
}
if (!chan) {
av[0] = ircd->ownerunset;
av[1] = u->nick;
if (!chan) {
av[0] = ircd->ownerunset;
av[1] = u->nick;
/* Sets the mode to the user on every channels he is on. */
/* Sets the mode to the user on every channels he is on. */
for (uc = u->chans; uc; uc = uc->next) {
if ((ci = uc->chan->ci) && !(ci->flags & CI_VERBOTEN)
&& is_founder(u, ci)) {
ircdproto->SendMode(whosends(ci), uc->chan->name, "%s %s",
av[0], u->nick);
chan_set_modes(s_ChanServ, uc->chan, 2, av, 1);
}
}
for (uc = u->chans; uc; uc = uc->next) {
if ((ci = uc->chan->ci) && !(ci->flags & CI_VERBOTEN)
&& is_founder(u, ci)) {
ircdproto->SendMode(whosends(ci), uc->chan->name, "%s %s",
av[0], u->nick);
chan_set_modes(s_ChanServ, uc->chan, 2, av, 1);
}
}
return MOD_CONT;
}
return MOD_CONT;
}
if (!(c = findchan(chan))) {
notice_lang(s_ChanServ, u, CHAN_X_NOT_IN_USE, chan);
} else if (!(ci = c->ci)) {
notice_lang(s_ChanServ, u, CHAN_X_NOT_REGISTERED, c->name);
} else if (ci->flags & CI_VERBOTEN) {
notice_lang(s_ChanServ, u, CHAN_X_FORBIDDEN, ci->name);
} else if (!is_on_chan(c, u)) {
notice_lang(s_ChanServ, u, NICK_X_NOT_ON_CHAN, u->nick, c->name);
} else if (!is_founder(u, ci)) {
notice_lang(s_ChanServ, u, ACCESS_DENIED);
} else {
ircdproto->SendMode(whosends(ci), c->name, "%s %s", ircd->ownerunset,
u->nick);
if (!(c = findchan(chan))) {
notice_lang(s_ChanServ, u, CHAN_X_NOT_IN_USE, chan);
} else if (!(ci = c->ci)) {
notice_lang(s_ChanServ, u, CHAN_X_NOT_REGISTERED, c->name);
} else if (ci->flags & CI_VERBOTEN) {
notice_lang(s_ChanServ, u, CHAN_X_FORBIDDEN, ci->name);
} else if (!is_on_chan(c, u)) {
notice_lang(s_ChanServ, u, NICK_X_NOT_ON_CHAN, u->nick, c->name);
} else if (!is_founder(u, ci)) {
notice_lang(s_ChanServ, u, ACCESS_DENIED);
} else {
ircdproto->SendMode(whosends(ci), c->name, "%s %s", ircd->ownerunset,
u->nick);
av[0] = ircd->ownerunset;
av[1] = u->nick;
chan_set_modes(s_ChanServ, c, 2, av, 1);
}
return MOD_CONT;
av[0] = ircd->ownerunset;
av[1] = u->nick;
chan_set_modes(s_ChanServ, c, 2, av, 1);
}
return MOD_CONT;
}
/* do_util: not a command, but does the job of other */
int do_util(User * u, CSModeUtil * util)
{
const char *av[2];
char *chan = strtok(NULL, " ");
char *nick = strtok(NULL, " ");
const char *av[2];
char *chan = strtok(NULL, " ");
char *nick = strtok(NULL, " ");
Channel *c;
ChannelInfo *ci;
User *u2;
Channel *c;
ChannelInfo *ci;
User *u2;
int is_same;
int is_same;
if (!chan) {
struct u_chanlist *uc;
if (!chan) {
struct u_chanlist *uc;
av[0] = util->mode;
av[1] = u->nick;
av[0] = util->mode;
av[1] = u->nick;
/* Sets the mode to the user on every channels he is on. */
/* Sets the mode to the user on every channels he is on. */
for (uc = u->chans; uc; uc = uc->next) {
if ((ci = uc->chan->ci) && !(ci->flags & CI_VERBOTEN)
&& check_access(u, ci, util->levelself)) {
ircdproto->SendMode(whosends(ci), uc->chan->name, "%s %s",
util->mode, u->nick);
chan_set_modes(s_ChanServ, uc->chan, 2, av, 2);
for (uc = u->chans; uc; uc = uc->next) {
if ((ci = uc->chan->ci) && !(ci->flags & CI_VERBOTEN)
&& check_access(u, ci, util->levelself)) {
ircdproto->SendMode(whosends(ci), uc->chan->name, "%s %s",
util->mode, u->nick);
chan_set_modes(s_ChanServ, uc->chan, 2, av, 2);
if (util->notice && ci->flags & util->notice)
ircdproto->SendMessage(whosends(ci), uc->chan->name,
"%s command used for %s by %s", util->name,
u->nick, u->nick);
}
}
if (util->notice && ci->flags & util->notice)
ircdproto->SendMessage(whosends(ci), uc->chan->name,
"%s command used for %s by %s", util->name,
u->nick, u->nick);
}
}
return MOD_CONT;
} else if (!nick) {
nick = u->nick;
}
return MOD_CONT;
} else if (!nick) {
nick = u->nick;
}
is_same = (nick == u->nick) ? 1 : (stricmp(nick, u->nick) == 0);
is_same = (nick == u->nick) ? 1 : (stricmp(nick, u->nick) == 0);
if (!(c = findchan(chan))) {
notice_lang(s_ChanServ, u, CHAN_X_NOT_IN_USE, chan);
} else if (!(ci = c->ci)) {
notice_lang(s_ChanServ, u, CHAN_X_NOT_REGISTERED, c->name);
} else if (ci->flags & CI_VERBOTEN) {
notice_lang(s_ChanServ, u, CHAN_X_FORBIDDEN, ci->name);
} else if (is_same ? !(u2 = u) : !(u2 = finduser(nick))) {
notice_lang(s_ChanServ, u, NICK_X_NOT_IN_USE, nick);
} else if (!is_on_chan(c, u2)) {
notice_lang(s_ChanServ, u, NICK_X_NOT_ON_CHAN, u2->nick, c->name);
} else if (is_same ? !check_access(u, ci, util->levelself) :
!check_access(u, ci, util->level)) {
notice_lang(s_ChanServ, u, ACCESS_DENIED);
} else if (*util->mode == '-' && !is_same && (ci->flags & CI_PEACE)
&& (get_access(u2, ci) >= get_access(u, ci))) {
notice_lang(s_ChanServ, u, PERMISSION_DENIED);
} else if (*util->mode == '-' && is_protected(u2) && !is_same) {
notice_lang(s_ChanServ, u, PERMISSION_DENIED);
} else {
ircdproto->SendMode(whosends(ci), c->name, "%s %s", util->mode,
u2->nick);
if (!(c = findchan(chan))) {
notice_lang(s_ChanServ, u, CHAN_X_NOT_IN_USE, chan);
} else if (!(ci = c->ci)) {
notice_lang(s_ChanServ, u, CHAN_X_NOT_REGISTERED, c->name);
} else if (ci->flags & CI_VERBOTEN) {
notice_lang(s_ChanServ, u, CHAN_X_FORBIDDEN, ci->name);
} else if (is_same ? !(u2 = u) : !(u2 = finduser(nick))) {
notice_lang(s_ChanServ, u, NICK_X_NOT_IN_USE, nick);
} else if (!is_on_chan(c, u2)) {
notice_lang(s_ChanServ, u, NICK_X_NOT_ON_CHAN, u2->nick, c->name);
} else if (is_same ? !check_access(u, ci, util->levelself) :
!check_access(u, ci, util->level)) {
notice_lang(s_ChanServ, u, ACCESS_DENIED);
} else if (*util->mode == '-' && !is_same && (ci->flags & CI_PEACE)
&& (get_access(u2, ci) >= get_access(u, ci))) {
notice_lang(s_ChanServ, u, PERMISSION_DENIED);
} else if (*util->mode == '-' && is_protected(u2) && !is_same) {
notice_lang(s_ChanServ, u, PERMISSION_DENIED);
} else {
ircdproto->SendMode(whosends(ci), c->name, "%s %s", util->mode,
u2->nick);
av[0] = util->mode;
av[1] = u2->nick;
chan_set_modes(s_ChanServ, c, 2, av, 2);
av[0] = util->mode;
av[1] = u2->nick;
chan_set_modes(s_ChanServ, c, 2, av, 2);
if (util->notice && ci->flags & util->notice)
ircdproto->SendMessage(whosends(ci), c->name, "%s command used for %s by %s",
util->name, u2->nick, u->nick);
}
return MOD_CONT;
if (util->notice && ci->flags & util->notice)
ircdproto->SendMessage(whosends(ci), c->name, "%s command used for %s by %s",
util->name, u2->nick, u->nick);
}
return MOD_CONT;
}
MODULE_INIT("cs_modes", CSModes)
+112 -112
View File
@@ -45,7 +45,7 @@ class CSRegister : public Module
**/
void myChanServHelp(User * u)
{
notice_lang(s_ChanServ, u, CHAN_HELP_CMD_REGISTER);
notice_lang(s_ChanServ, u, CHAN_HELP_CMD_REGISTER);
}
/**
@@ -55,125 +55,125 @@ void myChanServHelp(User * u)
**/
int do_register(User * u)
{
char *chan = strtok(NULL, " ");
char *pass = strtok(NULL, " ");
char *desc = strtok(NULL, "");
NickCore *nc;
Channel *c;
ChannelInfo *ci;
struct u_chaninfolist *uc;
int is_servadmin = is_services_admin(u);
char founderpass[PASSMAX];
char tmp_pass[PASSMAX];
char *chan = strtok(NULL, " ");
char *pass = strtok(NULL, " ");
char *desc = strtok(NULL, "");
NickCore *nc;
Channel *c;
ChannelInfo *ci;
struct u_chaninfolist *uc;
int is_servadmin = is_services_admin(u);
char founderpass[PASSMAX];
char tmp_pass[PASSMAX];
if (readonly) {
notice_lang(s_ChanServ, u, CHAN_REGISTER_DISABLED);
return MOD_CONT;
}
if (readonly) {
notice_lang(s_ChanServ, u, CHAN_REGISTER_DISABLED);
return MOD_CONT;
}
if (checkDefCon(DEFCON_NO_NEW_CHANNELS)) {
notice_lang(s_ChanServ, u, OPER_DEFCON_DENIED);
return MOD_CONT;
}
if (checkDefCon(DEFCON_NO_NEW_CHANNELS)) {
notice_lang(s_ChanServ, u, OPER_DEFCON_DENIED);
return MOD_CONT;
}
if (!desc) {
syntax_error(s_ChanServ, u, "REGISTER", CHAN_REGISTER_SYNTAX);
} else if (*chan == '&') {
notice_lang(s_ChanServ, u, CHAN_REGISTER_NOT_LOCAL);
} else if (*chan != '#') {
notice_lang(s_ChanServ, u, CHAN_SYMBOL_REQUIRED);
} else if (!ircdproto->IsChannelValid(chan)) {
notice_lang(s_ChanServ, u, CHAN_X_INVALID, chan);
} else if (!u->na || !(nc = u->na->nc)) {
notice_lang(s_ChanServ, u, CHAN_MUST_REGISTER_NICK, s_NickServ);
} else if (!nick_recognized(u)) {
notice_lang(s_ChanServ, u, CHAN_MUST_IDENTIFY_NICK, s_NickServ,
s_NickServ);
} else if (!(c = findchan(chan))) {
notice_lang(s_ChanServ, u, CHAN_REGISTER_NONE_CHANNEL, chan);
} else if ((ci = cs_findchan(chan)) != NULL) {
if (ci->flags & CI_VERBOTEN) {
alog("%s: Attempt to register FORBIDden channel %s by %s!%s@%s", s_ChanServ, ci->name, u->nick, u->username, u->host);
notice_lang(s_ChanServ, u, CHAN_MAY_NOT_BE_REGISTERED, chan);
} else {
notice_lang(s_ChanServ, u, CHAN_ALREADY_REGISTERED, chan);
}
} else if (!stricmp(chan, "#")) {
notice_lang(s_ChanServ, u, CHAN_MAY_NOT_BE_REGISTERED, chan);
} else if (!chan_has_user_status(c, u, CUS_OP)) {
notice_lang(s_ChanServ, u, CHAN_MUST_BE_CHANOP);
if (!desc) {
syntax_error(s_ChanServ, u, "REGISTER", CHAN_REGISTER_SYNTAX);
} else if (*chan == '&') {
notice_lang(s_ChanServ, u, CHAN_REGISTER_NOT_LOCAL);
} else if (*chan != '#') {
notice_lang(s_ChanServ, u, CHAN_SYMBOL_REQUIRED);
} else if (!ircdproto->IsChannelValid(chan)) {
notice_lang(s_ChanServ, u, CHAN_X_INVALID, chan);
} else if (!u->na || !(nc = u->na->nc)) {
notice_lang(s_ChanServ, u, CHAN_MUST_REGISTER_NICK, s_NickServ);
} else if (!nick_recognized(u)) {
notice_lang(s_ChanServ, u, CHAN_MUST_IDENTIFY_NICK, s_NickServ,
s_NickServ);
} else if (!(c = findchan(chan))) {
notice_lang(s_ChanServ, u, CHAN_REGISTER_NONE_CHANNEL, chan);
} else if ((ci = cs_findchan(chan)) != NULL) {
if (ci->flags & CI_VERBOTEN) {
alog("%s: Attempt to register FORBIDden channel %s by %s!%s@%s", s_ChanServ, ci->name, u->nick, u->username, u->host);
notice_lang(s_ChanServ, u, CHAN_MAY_NOT_BE_REGISTERED, chan);
} else {
notice_lang(s_ChanServ, u, CHAN_ALREADY_REGISTERED, chan);
}
} else if (!stricmp(chan, "#")) {
notice_lang(s_ChanServ, u, CHAN_MAY_NOT_BE_REGISTERED, chan);
} else if (!chan_has_user_status(c, u, CUS_OP)) {
notice_lang(s_ChanServ, u, CHAN_MUST_BE_CHANOP);
} else if (!is_servadmin && CSMaxReg && nc->channelcount >= CSMaxReg) {
notice_lang(s_ChanServ, u, nc->channelcount >
CSMaxReg ? CHAN_EXCEEDED_CHANNEL_LIMIT : CHAN_REACHED_CHANNEL_LIMIT, CSMaxReg);
} else if (stricmp(u->nick, pass) == 0
|| (StrictPasswords && strlen(pass) < 5)) {
notice_lang(s_ChanServ, u, MORE_OBSCURE_PASSWORD);
} else if(enc_encrypt_check_len(strlen(pass), PASSMAX - 1)) {
notice_lang(s_ChanServ, u, PASSWORD_TOO_LONG);
} else if (!(ci = makechan(chan))) {
alog("%s: makechan() failed for REGISTER %s", s_ChanServ, chan);
notice_lang(s_ChanServ, u, CHAN_REGISTRATION_FAILED);
} else if (!is_servadmin && CSMaxReg && nc->channelcount >= CSMaxReg) {
notice_lang(s_ChanServ, u, nc->channelcount >
CSMaxReg ? CHAN_EXCEEDED_CHANNEL_LIMIT : CHAN_REACHED_CHANNEL_LIMIT, CSMaxReg);
} else if (stricmp(u->nick, pass) == 0
|| (StrictPasswords && strlen(pass) < 5)) {
notice_lang(s_ChanServ, u, MORE_OBSCURE_PASSWORD);
} else if(enc_encrypt_check_len(strlen(pass), PASSMAX - 1)) {
notice_lang(s_ChanServ, u, PASSWORD_TOO_LONG);
} else if (!(ci = makechan(chan))) {
alog("%s: makechan() failed for REGISTER %s", s_ChanServ, chan);
notice_lang(s_ChanServ, u, CHAN_REGISTRATION_FAILED);
} else if (strscpy(founderpass, pass, PASSMAX),
enc_encrypt_in_place(founderpass, PASSMAX) < 0) {
alog("%s: Couldn't encrypt password for %s (REGISTER)",
s_ChanServ, chan);
notice_lang(s_ChanServ, u, CHAN_REGISTRATION_FAILED);
delchan(ci);
} else {
c->ci = ci;
ci->c = c;
ci->bantype = CSDefBantype;
ci->flags = CSDefFlags;
ci->mlock_on = ircd->defmlock;
ci->memos.memomax = MSMaxMemos;
ci->last_used = ci->time_registered;
ci->founder = nc;
} else if (strscpy(founderpass, pass, PASSMAX),
enc_encrypt_in_place(founderpass, PASSMAX) < 0) {
alog("%s: Couldn't encrypt password for %s (REGISTER)",
s_ChanServ, chan);
notice_lang(s_ChanServ, u, CHAN_REGISTRATION_FAILED);
delchan(ci);
} else {
c->ci = ci;
ci->c = c;
ci->bantype = CSDefBantype;
ci->flags = CSDefFlags;
ci->mlock_on = ircd->defmlock;
ci->memos.memomax = MSMaxMemos;
ci->last_used = ci->time_registered;
ci->founder = nc;
memset(pass, 0, strlen(pass));
memcpy(ci->founderpass, founderpass, PASSMAX);
ci->desc = sstrdup(desc);
if (c->topic) {
ci->last_topic = sstrdup(c->topic);
strscpy(ci->last_topic_setter, c->topic_setter, NICKMAX);
ci->last_topic_time = c->topic_time;
} else {
/* Set this to something, otherwise it will maliform the topic */
strscpy(ci->last_topic_setter, s_ChanServ, NICKMAX);
}
ci->bi = NULL;
ci->botflags = BSDefFlags;
ci->founder->channelcount++;
alog("%s: Channel '%s' registered by %s!%s@%s", s_ChanServ, chan,
u->nick, u->username, u->host);
notice_lang(s_ChanServ, u, CHAN_REGISTERED, chan, u->nick);
memset(pass, 0, strlen(pass));
memcpy(ci->founderpass, founderpass, PASSMAX);
ci->desc = sstrdup(desc);
if (c->topic) {
ci->last_topic = sstrdup(c->topic);
strscpy(ci->last_topic_setter, c->topic_setter, NICKMAX);
ci->last_topic_time = c->topic_time;
} else {
/* Set this to something, otherwise it will maliform the topic */
strscpy(ci->last_topic_setter, s_ChanServ, NICKMAX);
}
ci->bi = NULL;
ci->botflags = BSDefFlags;
ci->founder->channelcount++;
alog("%s: Channel '%s' registered by %s!%s@%s", s_ChanServ, chan,
u->nick, u->username, u->host);
notice_lang(s_ChanServ, u, CHAN_REGISTERED, chan, u->nick);
if(enc_decrypt(ci->founderpass,tmp_pass,PASSMAX - 1) == 1) {
notice_lang(s_ChanServ, u, CHAN_PASSWORD_IS, tmp_pass);
}
if(enc_decrypt(ci->founderpass,tmp_pass,PASSMAX - 1) == 1) {
notice_lang(s_ChanServ, u, CHAN_PASSWORD_IS, tmp_pass);
}
uc = (struct u_chaninfolist *)scalloc(sizeof(*uc), 1);
uc->next = u->founder_chans;
uc->prev = NULL;
if (u->founder_chans)
u->founder_chans->prev = uc;
u->founder_chans = uc;
uc->chan = ci;
/* Implement new mode lock */
check_modes(c);
/* On most ircds you do not receive the admin/owner mode till its registered */
if (ircd->admin) {
ircdproto->SendMode(findbot(s_ChanServ), chan, "%s %s", ircd->adminset,
u->nick);
}
if (ircd->owner && ircd->ownerset) {
ircdproto->SendMode(findbot(s_ChanServ), chan, "%s %s", ircd->ownerset,
u->nick);
}
send_event(EVENT_CHAN_REGISTERED, 1, chan);
}
return MOD_CONT;
uc = (struct u_chaninfolist *)scalloc(sizeof(*uc), 1);
uc->next = u->founder_chans;
uc->prev = NULL;
if (u->founder_chans)
u->founder_chans->prev = uc;
u->founder_chans = uc;
uc->chan = ci;
/* Implement new mode lock */
check_modes(c);
/* On most ircds you do not receive the admin/owner mode till its registered */
if (ircd->admin) {
ircdproto->SendMode(findbot(s_ChanServ), chan, "%s %s", ircd->adminset,
u->nick);
}
if (ircd->owner && ircd->ownerset) {
ircdproto->SendMode(findbot(s_ChanServ), chan, "%s %s", ircd->ownerset,
u->nick);
}
send_event(EVENT_CHAN_REGISTERED, 1, chan);
}
return MOD_CONT;
}
MODULE_INIT("cs_register", CSRegister)
+46 -46
View File
@@ -51,7 +51,7 @@ class CSSendPass : public Module
**/
void myChanServHelp(User * u)
{
notice_lang(s_ChanServ, u, CHAN_HELP_CMD_SENDPASS);
notice_lang(s_ChanServ, u, CHAN_HELP_CMD_SENDPASS);
}
/**
@@ -62,56 +62,56 @@ void myChanServHelp(User * u)
int do_sendpass(User * u)
{
char *chan = strtok(NULL, " ");
ChannelInfo *ci;
NickCore *founder;
char *chan = strtok(NULL, " ");
ChannelInfo *ci;
NickCore *founder;
if (!chan) {
syntax_error(s_ChanServ, u, "SENDPASS", CHAN_SENDPASS_SYNTAX);
} else if (RestrictMail && !is_services_oper(u)) {
notice_lang(s_ChanServ, u, PERMISSION_DENIED);
} else if (!(ci = cs_findchan(chan)) || !(founder = ci->founder)) {
notice_lang(s_ChanServ, u, CHAN_X_NOT_REGISTERED, chan);
} else if (ci->flags & CI_VERBOTEN) {
notice_lang(s_ChanServ, u, CHAN_X_FORBIDDEN, chan);
} else {
char buf[BUFSIZE];
char tmp_pass[PASSMAX];
if(enc_decrypt(ci->founderpass,tmp_pass,PASSMAX - 1)==1) {
MailInfo *mail;
if (!chan) {
syntax_error(s_ChanServ, u, "SENDPASS", CHAN_SENDPASS_SYNTAX);
} else if (RestrictMail && !is_services_oper(u)) {
notice_lang(s_ChanServ, u, PERMISSION_DENIED);
} else if (!(ci = cs_findchan(chan)) || !(founder = ci->founder)) {
notice_lang(s_ChanServ, u, CHAN_X_NOT_REGISTERED, chan);
} else if (ci->flags & CI_VERBOTEN) {
notice_lang(s_ChanServ, u, CHAN_X_FORBIDDEN, chan);
} else {
char buf[BUFSIZE];
char tmp_pass[PASSMAX];
if(enc_decrypt(ci->founderpass,tmp_pass,PASSMAX - 1)==1) {
MailInfo *mail;
snprintf(buf, sizeof(buf),
getstring2(founder, CHAN_SENDPASS_SUBJECT), ci->name);
mail = MailBegin(u, founder, buf, s_ChanServ);
if (!mail)
return MOD_CONT;
snprintf(buf, sizeof(buf),
getstring2(founder, CHAN_SENDPASS_SUBJECT), ci->name);
mail = MailBegin(u, founder, buf, s_ChanServ);
if (!mail)
return MOD_CONT;
fprintf(mail->pipe, getstring2(founder, CHAN_SENDPASS_HEAD));
fprintf(mail->pipe, "\n\n");
fprintf(mail->pipe, getstring2(founder, CHAN_SENDPASS_LINE_1),
ci->name);
fprintf(mail->pipe, "\n\n");
fprintf(mail->pipe, getstring2(founder, CHAN_SENDPASS_LINE_2),
tmp_pass);
fprintf(mail->pipe, "\n\n");
fprintf(mail->pipe, getstring2(founder, CHAN_SENDPASS_LINE_3));
fprintf(mail->pipe, "\n\n");
fprintf(mail->pipe, getstring2(founder, CHAN_SENDPASS_LINE_4));
fprintf(mail->pipe, "\n\n");
fprintf(mail->pipe, getstring2(founder, CHAN_SENDPASS_LINE_5),
NetworkName);
fprintf(mail->pipe, "\n.\n");
fprintf(mail->pipe, getstring2(founder, CHAN_SENDPASS_HEAD));
fprintf(mail->pipe, "\n\n");
fprintf(mail->pipe, getstring2(founder, CHAN_SENDPASS_LINE_1),
ci->name);
fprintf(mail->pipe, "\n\n");
fprintf(mail->pipe, getstring2(founder, CHAN_SENDPASS_LINE_2),
tmp_pass);
fprintf(mail->pipe, "\n\n");
fprintf(mail->pipe, getstring2(founder, CHAN_SENDPASS_LINE_3));
fprintf(mail->pipe, "\n\n");
fprintf(mail->pipe, getstring2(founder, CHAN_SENDPASS_LINE_4));
fprintf(mail->pipe, "\n\n");
fprintf(mail->pipe, getstring2(founder, CHAN_SENDPASS_LINE_5),
NetworkName);
fprintf(mail->pipe, "\n.\n");
MailEnd(mail);
MailEnd(mail);
alog("%s: %s!%s@%s used SENDPASS on %s", s_ChanServ, u->nick,
u->username, u->host, chan);
notice_lang(s_ChanServ, u, CHAN_SENDPASS_OK, chan);
} else {
notice_lang(s_ChanServ, u, CHAN_SENDPASS_UNAVAILABLE);
}
}
return MOD_CONT;
alog("%s: %s!%s@%s used SENDPASS on %s", s_ChanServ, u->nick,
u->username, u->host, chan);
notice_lang(s_ChanServ, u, CHAN_SENDPASS_OK, chan);
} else {
notice_lang(s_ChanServ, u, CHAN_SENDPASS_UNAVAILABLE);
}
}
return MOD_CONT;
}
MODULE_INIT("cs_sendpass", CSSendPass)
+508 -508
View File
File diff suppressed because it is too large Load Diff
+31 -31
View File
@@ -44,9 +44,9 @@ class CSStatus : public Module
**/
void myChanServHelp(User * u)
{
if (is_services_admin(u)) {
notice_lang(s_ChanServ, u, CHAN_HELP_CMD_STATUS);
}
if (is_services_admin(u)) {
notice_lang(s_ChanServ, u, CHAN_HELP_CMD_STATUS);
}
}
/**
@@ -56,35 +56,35 @@ void myChanServHelp(User * u)
**/
int do_status(User * u)
{
ChannelInfo *ci;
User *u2;
char *nick, *chan;
char *temp = NULL;
ChannelInfo *ci;
User *u2;
char *nick, *chan;
char *temp = NULL;
chan = strtok(NULL, " ");
nick = strtok(NULL, " ");
if (!nick || strtok(NULL, " ")) {
notice_lang(s_ChanServ, u, CHAN_STATUS_SYNTAX);
return MOD_CONT;
}
if (!(ci = cs_findchan(chan))) {
temp = chan;
chan = nick;
nick = temp;
ci = cs_findchan(chan);
}
if (!ci) {
notice_lang(s_ChanServ, u, CHAN_STATUS_NOT_REGGED, temp);
} else if (ci->flags & CI_VERBOTEN) {
notice_lang(s_ChanServ, u, CHAN_STATUS_FORBIDDEN, chan);
return MOD_CONT;
} else if ((u2 = finduser(nick)) != NULL) {
notice_lang(s_ChanServ, u, CHAN_STATUS_INFO, chan, nick,
get_access(u2, ci));
} else { /* !u2 */
notice_lang(s_ChanServ, u, CHAN_STATUS_NOTONLINE, nick);
}
return MOD_CONT;
chan = strtok(NULL, " ");
nick = strtok(NULL, " ");
if (!nick || strtok(NULL, " ")) {
notice_lang(s_ChanServ, u, CHAN_STATUS_SYNTAX);
return MOD_CONT;
}
if (!(ci = cs_findchan(chan))) {
temp = chan;
chan = nick;
nick = temp;
ci = cs_findchan(chan);
}
if (!ci) {
notice_lang(s_ChanServ, u, CHAN_STATUS_NOT_REGGED, temp);
} else if (ci->flags & CI_VERBOTEN) {
notice_lang(s_ChanServ, u, CHAN_STATUS_FORBIDDEN, chan);
return MOD_CONT;
} else if ((u2 = finduser(nick)) != NULL) {
notice_lang(s_ChanServ, u, CHAN_STATUS_INFO, chan, nick,
get_access(u2, ci));
} else { /* !u2 */
notice_lang(s_ChanServ, u, CHAN_STATUS_NOTONLINE, nick);
}
return MOD_CONT;
}
MODULE_INIT("cs_status", CSStatus)
+113 -113
View File
@@ -46,10 +46,10 @@ class CSSuspend : public Module
**/
void myChanServHelp(User * u)
{
if (is_services_oper(u)) {
notice_lang(s_ChanServ, u, CHAN_HELP_CMD_SUSPEND);
notice_lang(s_ChanServ, u, CHAN_HELP_CMD_UNSUSPEND);
}
if (is_services_oper(u)) {
notice_lang(s_ChanServ, u, CHAN_HELP_CMD_SUSPEND);
notice_lang(s_ChanServ, u, CHAN_HELP_CMD_UNSUSPEND);
}
}
/**
@@ -59,140 +59,140 @@ void myChanServHelp(User * u)
**/
int do_suspend(User * u)
{
ChannelInfo *ci;
char *chan = strtok(NULL, " ");
char *reason = strtok(NULL, "");
ChannelInfo *ci;
char *chan = strtok(NULL, " ");
char *reason = strtok(NULL, "");
Channel *c;
Channel *c;
/* Assumes that permission checking has already been done. */
if (!chan || (ForceForbidReason && !reason)) {
syntax_error(s_ChanServ, u, "SUSPEND",
(ForceForbidReason ? CHAN_SUSPEND_SYNTAX_REASON :
CHAN_SUSPEND_SYNTAX));
return MOD_CONT;
}
/* Assumes that permission checking has already been done. */
if (!chan || (ForceForbidReason && !reason)) {
syntax_error(s_ChanServ, u, "SUSPEND",
(ForceForbidReason ? CHAN_SUSPEND_SYNTAX_REASON :
CHAN_SUSPEND_SYNTAX));
return MOD_CONT;
}
if (chan[0] != '#') {
notice_lang(s_ChanServ, u, CHAN_UNSUSPEND_ERROR);
return MOD_CONT;
}
if (chan[0] != '#') {
notice_lang(s_ChanServ, u, CHAN_UNSUSPEND_ERROR);
return MOD_CONT;
}
/* Only SUSPEND existing channels, otherwise use FORBID (bug #54) */
if ((ci = cs_findchan(chan)) == NULL) {
notice_lang(s_ChanServ, u, CHAN_X_NOT_REGISTERED, chan);
return MOD_CONT;
}
/* Only SUSPEND existing channels, otherwise use FORBID (bug #54) */
if ((ci = cs_findchan(chan)) == NULL) {
notice_lang(s_ChanServ, u, CHAN_X_NOT_REGISTERED, chan);
return MOD_CONT;
}
/* You should not SUSPEND a FORBIDEN channel */
if (ci->flags & CI_VERBOTEN) {
notice_lang(s_ChanServ, u, CHAN_MAY_NOT_BE_REGISTERED, chan);
return MOD_CONT;
}
/* You should not SUSPEND a FORBIDEN channel */
if (ci->flags & CI_VERBOTEN) {
notice_lang(s_ChanServ, u, CHAN_MAY_NOT_BE_REGISTERED, chan);
return MOD_CONT;
}
if (readonly)
notice_lang(s_ChanServ, u, READ_ONLY_MODE);
if (readonly)
notice_lang(s_ChanServ, u, READ_ONLY_MODE);
if (ci) {
ci->flags |= CI_SUSPENDED;
ci->forbidby = sstrdup(u->nick);
if (reason)
ci->forbidreason = sstrdup(reason);
if (ci) {
ci->flags |= CI_SUSPENDED;
ci->forbidby = sstrdup(u->nick);
if (reason)
ci->forbidreason = sstrdup(reason);
if ((c = findchan(ci->name))) {
struct c_userlist *cu, *next;
const char *av[3];
if ((c = findchan(ci->name))) {
struct c_userlist *cu, *next;
const char *av[3];
for (cu = c->users; cu; cu = next) {
next = cu->next;
for (cu = c->users; cu; cu = next) {
next = cu->next;
if (is_oper(cu->user))
continue;
if (is_oper(cu->user))
continue;
av[0] = c->name;
av[1] = cu->user->nick;
av[2] = reason ? reason : "CHAN_SUSPEND_REASON";
ircdproto->SendKick(findbot(s_ChanServ), av[0], av[1], av[2]);
do_kick(s_ChanServ, 3, av);
}
}
av[0] = c->name;
av[1] = cu->user->nick;
av[2] = reason ? reason : "CHAN_SUSPEND_REASON";
ircdproto->SendKick(findbot(s_ChanServ), av[0], av[1], av[2]);
do_kick(s_ChanServ, 3, av);
}
}
if (WallForbid)
ircdproto->SendGlobops(s_ChanServ,
"\2%s\2 used SUSPEND on channel \2%s\2",
u->nick, ci->name);
if (WallForbid)
ircdproto->SendGlobops(s_ChanServ,
"\2%s\2 used SUSPEND on channel \2%s\2",
u->nick, ci->name);
alog("%s: %s set SUSPEND for channel %s", s_ChanServ, u->nick,
ci->name);
notice_lang(s_ChanServ, u, CHAN_SUSPEND_SUCCEEDED, chan);
send_event(EVENT_CHAN_SUSPENDED, 1, chan);
} else {
alog("%s: Valid SUSPEND for %s by %s failed", s_ChanServ, ci->name,
u->nick);
notice_lang(s_ChanServ, u, CHAN_SUSPEND_FAILED, chan);
}
return MOD_CONT;
alog("%s: %s set SUSPEND for channel %s", s_ChanServ, u->nick,
ci->name);
notice_lang(s_ChanServ, u, CHAN_SUSPEND_SUCCEEDED, chan);
send_event(EVENT_CHAN_SUSPENDED, 1, chan);
} else {
alog("%s: Valid SUSPEND for %s by %s failed", s_ChanServ, ci->name,
u->nick);
notice_lang(s_ChanServ, u, CHAN_SUSPEND_FAILED, chan);
}
return MOD_CONT;
}
/*************************************************************************/
int do_unsuspend(User * u)
{
ChannelInfo *ci;
char *chan = strtok(NULL, " ");
ChannelInfo *ci;
char *chan = strtok(NULL, " ");
/* Assumes that permission checking has already been done. */
if (!chan) {
syntax_error(s_ChanServ, u, "UNSUSPEND", CHAN_UNSUSPEND_SYNTAX);
return MOD_CONT;
}
if (chan[0] != '#') {
notice_lang(s_ChanServ, u, CHAN_UNSUSPEND_ERROR);
return MOD_CONT;
}
if (readonly)
notice_lang(s_ChanServ, u, READ_ONLY_MODE);
/* Assumes that permission checking has already been done. */
if (!chan) {
syntax_error(s_ChanServ, u, "UNSUSPEND", CHAN_UNSUSPEND_SYNTAX);
return MOD_CONT;
}
if (chan[0] != '#') {
notice_lang(s_ChanServ, u, CHAN_UNSUSPEND_ERROR);
return MOD_CONT;
}
if (readonly)
notice_lang(s_ChanServ, u, READ_ONLY_MODE);
/* Only UNSUSPEND already suspended channels */
if ((ci = cs_findchan(chan)) == NULL) {
notice_lang(s_ChanServ, u, CHAN_X_NOT_REGISTERED, chan);
return MOD_CONT;
}
/* Only UNSUSPEND already suspended channels */
if ((ci = cs_findchan(chan)) == NULL) {
notice_lang(s_ChanServ, u, CHAN_X_NOT_REGISTERED, chan);
return MOD_CONT;
}
if (!(ci->flags & CI_SUSPENDED))
{
notice_lang(s_ChanServ, u, CHAN_UNSUSPEND_FAILED, chan);
return MOD_CONT;
}
if (!(ci->flags & CI_SUSPENDED))
{
notice_lang(s_ChanServ, u, CHAN_UNSUSPEND_FAILED, chan);
return MOD_CONT;
}
if (ci) {
ci->flags &= ~CI_SUSPENDED;
if (ci->forbidreason)
{
free(ci->forbidreason);
ci->forbidreason = NULL;
}
if (ci->forbidby)
{
free(ci->forbidby);
ci->forbidby = NULL;
}
if (ci) {
ci->flags &= ~CI_SUSPENDED;
if (ci->forbidreason)
{
free(ci->forbidreason);
ci->forbidreason = NULL;
}
if (ci->forbidby)
{
free(ci->forbidby);
ci->forbidby = NULL;
}
if (WallForbid)
ircdproto->SendGlobops(s_ChanServ,
"\2%s\2 used UNSUSPEND on channel \2%s\2",
u->nick, ci->name);
if (WallForbid)
ircdproto->SendGlobops(s_ChanServ,
"\2%s\2 used UNSUSPEND on channel \2%s\2",
u->nick, ci->name);
alog("%s: %s set UNSUSPEND for channel %s", s_ChanServ, u->nick,
ci->name);
notice_lang(s_ChanServ, u, CHAN_UNSUSPEND_SUCCEEDED, chan);
send_event(EVENT_CHAN_UNSUSPEND, 1, chan);
} else {
alog("%s: Valid UNSUSPEND for %s by %s failed", s_ChanServ,
chan, u->nick);
notice_lang(s_ChanServ, u, CHAN_UNSUSPEND_FAILED, chan);
}
return MOD_CONT;
alog("%s: %s set UNSUSPEND for channel %s", s_ChanServ, u->nick,
ci->name);
notice_lang(s_ChanServ, u, CHAN_UNSUSPEND_SUCCEEDED, chan);
send_event(EVENT_CHAN_UNSUSPEND, 1, chan);
} else {
alog("%s: Valid UNSUSPEND for %s by %s failed", s_ChanServ,
chan, u->nick);
notice_lang(s_ChanServ, u, CHAN_UNSUSPEND_FAILED, chan);
}
return MOD_CONT;
}
MODULE_INIT("cs_suspend", CSSuspend)
+48 -48
View File
@@ -43,7 +43,7 @@ class CSTopic : public Module
**/
void myChanServHelp(User * u)
{
notice_lang(s_ChanServ, u, CHAN_HELP_CMD_TOPIC);
notice_lang(s_ChanServ, u, CHAN_HELP_CMD_TOPIC);
}
/**
@@ -53,57 +53,57 @@ void myChanServHelp(User * u)
**/
int do_cs_topic(User * u)
{
char *chan = strtok(NULL, " ");
char *topic = strtok(NULL, "");
char *chan = strtok(NULL, " ");
char *topic = strtok(NULL, "");
Channel *c;
ChannelInfo *ci;
Channel *c;
ChannelInfo *ci;
if (!chan) {
syntax_error(s_ChanServ, u, "TOPIC", CHAN_TOPIC_SYNTAX);
} else if (!(c = findchan(chan))) {
notice_lang(s_ChanServ, u, CHAN_X_NOT_IN_USE, chan);
} else if (!(ci = c->ci)) {
notice_lang(s_ChanServ, u, CHAN_X_NOT_REGISTERED, c->name);
} else if (ci->flags & CI_VERBOTEN) {
notice_lang(s_ChanServ, u, CHAN_X_FORBIDDEN, ci->name);
} else if (!is_services_admin(u) && !check_access(u, ci, CA_TOPIC)) {
notice_lang(s_ChanServ, u, PERMISSION_DENIED);
} else {
if (ci->last_topic)
free(ci->last_topic);
ci->last_topic = topic ? sstrdup(topic) : NULL;
strscpy(ci->last_topic_setter, u->nick, NICKMAX);
ci->last_topic_time = time(NULL);
if (!chan) {
syntax_error(s_ChanServ, u, "TOPIC", CHAN_TOPIC_SYNTAX);
} else if (!(c = findchan(chan))) {
notice_lang(s_ChanServ, u, CHAN_X_NOT_IN_USE, chan);
} else if (!(ci = c->ci)) {
notice_lang(s_ChanServ, u, CHAN_X_NOT_REGISTERED, c->name);
} else if (ci->flags & CI_VERBOTEN) {
notice_lang(s_ChanServ, u, CHAN_X_FORBIDDEN, ci->name);
} else if (!is_services_admin(u) && !check_access(u, ci, CA_TOPIC)) {
notice_lang(s_ChanServ, u, PERMISSION_DENIED);
} else {
if (ci->last_topic)
free(ci->last_topic);
ci->last_topic = topic ? sstrdup(topic) : NULL;
strscpy(ci->last_topic_setter, u->nick, NICKMAX);
ci->last_topic_time = time(NULL);
if (c->topic)
free(c->topic);
c->topic = topic ? sstrdup(topic) : NULL;
strscpy(c->topic_setter, u->nick, NICKMAX);
if (ircd->topictsbackward) {
c->topic_time = c->topic_time - 1;
} else {
c->topic_time = ci->last_topic_time;
}
if (c->topic)
free(c->topic);
c->topic = topic ? sstrdup(topic) : NULL;
strscpy(c->topic_setter, u->nick, NICKMAX);
if (ircd->topictsbackward) {
c->topic_time = c->topic_time - 1;
} else {
c->topic_time = ci->last_topic_time;
}
if (is_services_admin(u) && !check_access(u, ci, CA_TOPIC))
alog("%s: %s!%s@%s changed topic of %s as services admin.",
s_ChanServ, u->nick, u->username, u->host, c->name);
if (ircd->join2set) {
if (whosends(ci) == findbot(s_ChanServ)) {
ircdproto->SendJoin(findbot(s_ChanServ), c->name, c->creation_time);
ircdproto->SendMode(NULL, c->name, "+o %s", s_ChanServ);
}
}
ircdproto->SendTopic(whosends(ci), c->name, u->nick, topic ? topic : "",
c->topic_time);
if (ircd->join2set) {
if (whosends(ci) == findbot(s_ChanServ)) {
ircdproto->SendPart(findbot(s_ChanServ), c->name, NULL);
}
}
}
return MOD_CONT;
if (is_services_admin(u) && !check_access(u, ci, CA_TOPIC))
alog("%s: %s!%s@%s changed topic of %s as services admin.",
s_ChanServ, u->nick, u->username, u->host, c->name);
if (ircd->join2set) {
if (whosends(ci) == findbot(s_ChanServ)) {
ircdproto->SendJoin(findbot(s_ChanServ), c->name, c->creation_time);
ircdproto->SendMode(NULL, c->name, "+o %s", s_ChanServ);
}
}
ircdproto->SendTopic(whosends(ci), c->name, u->nick, topic ? topic : "",
c->topic_time);
if (ircd->join2set) {
if (whosends(ci) == findbot(s_ChanServ)) {
ircdproto->SendPart(findbot(s_ChanServ), c->name, NULL);
}
}
}
return MOD_CONT;
}
MODULE_INIT("cs_topic", CSTopic)
+340 -340
View File
@@ -24,62 +24,62 @@ int do_vop(User * u);
void myChanServHelp(User * u);
int xop_msgs[4][14] = {
{CHAN_AOP_SYNTAX,
CHAN_AOP_DISABLED,
CHAN_AOP_NICKS_ONLY,
CHAN_AOP_ADDED,
CHAN_AOP_MOVED,
CHAN_AOP_NO_SUCH_ENTRY,
CHAN_AOP_NOT_FOUND,
CHAN_AOP_NO_MATCH,
CHAN_AOP_DELETED,
CHAN_AOP_DELETED_ONE,
CHAN_AOP_DELETED_SEVERAL,
CHAN_AOP_LIST_EMPTY,
CHAN_AOP_LIST_HEADER,
CHAN_AOP_CLEAR},
{CHAN_SOP_SYNTAX,
CHAN_SOP_DISABLED,
CHAN_SOP_NICKS_ONLY,
CHAN_SOP_ADDED,
CHAN_SOP_MOVED,
CHAN_SOP_NO_SUCH_ENTRY,
CHAN_SOP_NOT_FOUND,
CHAN_SOP_NO_MATCH,
CHAN_SOP_DELETED,
CHAN_SOP_DELETED_ONE,
CHAN_SOP_DELETED_SEVERAL,
CHAN_SOP_LIST_EMPTY,
CHAN_SOP_LIST_HEADER,
CHAN_SOP_CLEAR},
{CHAN_VOP_SYNTAX,
CHAN_VOP_DISABLED,
CHAN_VOP_NICKS_ONLY,
CHAN_VOP_ADDED,
CHAN_VOP_MOVED,
CHAN_VOP_NO_SUCH_ENTRY,
CHAN_VOP_NOT_FOUND,
CHAN_VOP_NO_MATCH,
CHAN_VOP_DELETED,
CHAN_VOP_DELETED_ONE,
CHAN_VOP_DELETED_SEVERAL,
CHAN_VOP_LIST_EMPTY,
CHAN_VOP_LIST_HEADER,
CHAN_VOP_CLEAR},
{CHAN_HOP_SYNTAX,
CHAN_HOP_DISABLED,
CHAN_HOP_NICKS_ONLY,
CHAN_HOP_ADDED,
CHAN_HOP_MOVED,
CHAN_HOP_NO_SUCH_ENTRY,
CHAN_HOP_NOT_FOUND,
CHAN_HOP_NO_MATCH,
CHAN_HOP_DELETED,
CHAN_HOP_DELETED_ONE,
CHAN_HOP_DELETED_SEVERAL,
CHAN_HOP_LIST_EMPTY,
CHAN_HOP_LIST_HEADER,
CHAN_HOP_CLEAR}
{CHAN_AOP_SYNTAX,
CHAN_AOP_DISABLED,
CHAN_AOP_NICKS_ONLY,
CHAN_AOP_ADDED,
CHAN_AOP_MOVED,
CHAN_AOP_NO_SUCH_ENTRY,
CHAN_AOP_NOT_FOUND,
CHAN_AOP_NO_MATCH,
CHAN_AOP_DELETED,
CHAN_AOP_DELETED_ONE,
CHAN_AOP_DELETED_SEVERAL,
CHAN_AOP_LIST_EMPTY,
CHAN_AOP_LIST_HEADER,
CHAN_AOP_CLEAR},
{CHAN_SOP_SYNTAX,
CHAN_SOP_DISABLED,
CHAN_SOP_NICKS_ONLY,
CHAN_SOP_ADDED,
CHAN_SOP_MOVED,
CHAN_SOP_NO_SUCH_ENTRY,
CHAN_SOP_NOT_FOUND,
CHAN_SOP_NO_MATCH,
CHAN_SOP_DELETED,
CHAN_SOP_DELETED_ONE,
CHAN_SOP_DELETED_SEVERAL,
CHAN_SOP_LIST_EMPTY,
CHAN_SOP_LIST_HEADER,
CHAN_SOP_CLEAR},
{CHAN_VOP_SYNTAX,
CHAN_VOP_DISABLED,
CHAN_VOP_NICKS_ONLY,
CHAN_VOP_ADDED,
CHAN_VOP_MOVED,
CHAN_VOP_NO_SUCH_ENTRY,
CHAN_VOP_NOT_FOUND,
CHAN_VOP_NO_MATCH,
CHAN_VOP_DELETED,
CHAN_VOP_DELETED_ONE,
CHAN_VOP_DELETED_SEVERAL,
CHAN_VOP_LIST_EMPTY,
CHAN_VOP_LIST_HEADER,
CHAN_VOP_CLEAR},
{CHAN_HOP_SYNTAX,
CHAN_HOP_DISABLED,
CHAN_HOP_NICKS_ONLY,
CHAN_HOP_ADDED,
CHAN_HOP_MOVED,
CHAN_HOP_NO_SUCH_ENTRY,
CHAN_HOP_NOT_FOUND,
CHAN_HOP_NO_MATCH,
CHAN_HOP_DELETED,
CHAN_HOP_DELETED_ONE,
CHAN_HOP_DELETED_SEVERAL,
CHAN_HOP_LIST_EMPTY,
CHAN_HOP_LIST_HEADER,
CHAN_HOP_CLEAR}
};
class CSXOP : public Module
@@ -117,12 +117,12 @@ class CSXOP : public Module
**/
void myChanServHelp(User * u)
{
notice_lang(s_ChanServ, u, CHAN_HELP_CMD_SOP);
notice_lang(s_ChanServ, u, CHAN_HELP_CMD_AOP);
if (ircd->halfop) {
notice_lang(s_ChanServ, u, CHAN_HELP_CMD_HOP);
}
notice_lang(s_ChanServ, u, CHAN_HELP_CMD_VOP);
notice_lang(s_ChanServ, u, CHAN_HELP_CMD_SOP);
notice_lang(s_ChanServ, u, CHAN_HELP_CMD_AOP);
if (ircd->halfop) {
notice_lang(s_ChanServ, u, CHAN_HELP_CMD_HOP);
}
notice_lang(s_ChanServ, u, CHAN_HELP_CMD_VOP);
}
/**
@@ -132,28 +132,28 @@ void myChanServHelp(User * u)
**/
int do_aop(User * u)
{
return do_xop(u, "AOP", ACCESS_AOP, xop_msgs[0]);
return do_xop(u, "AOP", ACCESS_AOP, xop_msgs[0]);
}
/*************************************************************************/
int do_hop(User * u)
{
return do_xop(u, "HOP", ACCESS_HOP, xop_msgs[3]);
return do_xop(u, "HOP", ACCESS_HOP, xop_msgs[3]);
}
/*************************************************************************/
int do_sop(User * u)
{
return do_xop(u, "SOP", ACCESS_SOP, xop_msgs[1]);
return do_xop(u, "SOP", ACCESS_SOP, xop_msgs[1]);
}
/*************************************************************************/
int do_vop(User * u)
{
return do_xop(u, "VOP", ACCESS_VOP, xop_msgs[2]);
return do_xop(u, "VOP", ACCESS_VOP, xop_msgs[2]);
}
/* `last' is set to the last index this routine was called with
@@ -162,338 +162,338 @@ int do_vop(User * u)
int xop_del(User * u, ChannelInfo * ci, ChanAccess * access, int *perm, int uacc, int xlev)
{
char *nick = access->nc->display;
if (!access->in_use || access->level != xlev)
return 0;
if (!is_services_admin(u) && uacc <= access->level) {
(*perm)++;
return 0;
}
access->nc = NULL;
access->in_use = 0;
send_event(EVENT_ACCESS_DEL, 3, ci->name, u->nick, nick);
return 1;
char *nick = access->nc->display;
if (!access->in_use || access->level != xlev)
return 0;
if (!is_services_admin(u) && uacc <= access->level) {
(*perm)++;
return 0;
}
access->nc = NULL;
access->in_use = 0;
send_event(EVENT_ACCESS_DEL, 3, ci->name, u->nick, nick);
return 1;
}
int xop_del_callback(User * u, int num, va_list args)
{
ChannelInfo *ci = va_arg(args, ChannelInfo *);
int *last = va_arg(args, int *);
int *perm = va_arg(args, int *);
int uacc = va_arg(args, int);
int xlev = va_arg(args, int);
ChannelInfo *ci = va_arg(args, ChannelInfo *);
int *last = va_arg(args, int *);
int *perm = va_arg(args, int *);
int uacc = va_arg(args, int);
int xlev = va_arg(args, int);
if (num < 1 || num > ci->accesscount)
return 0;
*last = num;
if (num < 1 || num > ci->accesscount)
return 0;
*last = num;
return xop_del(u, ci, &ci->access[num - 1], perm, uacc, xlev);
return xop_del(u, ci, &ci->access[num - 1], perm, uacc, xlev);
}
int xop_list(User * u, int index, ChannelInfo * ci,
int *sent_header, int xlev, int xmsg)
int *sent_header, int xlev, int xmsg)
{
ChanAccess *access = &ci->access[index];
ChanAccess *access = &ci->access[index];
if (!access->in_use || access->level != xlev)
return 0;
if (!access->in_use || access->level != xlev)
return 0;
if (!*sent_header) {
notice_lang(s_ChanServ, u, xmsg, ci->name);
*sent_header = 1;
}
if (!*sent_header) {
notice_lang(s_ChanServ, u, xmsg, ci->name);
*sent_header = 1;
}
notice_lang(s_ChanServ, u, CHAN_XOP_LIST_FORMAT, index + 1,
access->nc->display);
return 1;
notice_lang(s_ChanServ, u, CHAN_XOP_LIST_FORMAT, index + 1,
access->nc->display);
return 1;
}
int xop_list_callback(User * u, int num, va_list args)
{
ChannelInfo *ci = va_arg(args, ChannelInfo *);
int *sent_header = va_arg(args, int *);
int xlev = va_arg(args, int);
int xmsg = va_arg(args, int);
ChannelInfo *ci = va_arg(args, ChannelInfo *);
int *sent_header = va_arg(args, int *);
int xlev = va_arg(args, int);
int xmsg = va_arg(args, int);
if (num < 1 || num > ci->accesscount)
return 0;
if (num < 1 || num > ci->accesscount)
return 0;
return xop_list(u, num - 1, ci, sent_header, xlev, xmsg);
return xop_list(u, num - 1, ci, sent_header, xlev, xmsg);
}
int do_xop(User * u, const char *xname, int xlev, int *xmsgs)
{
char *chan = strtok(NULL, " ");
char *cmd = strtok(NULL, " ");
char *nick = strtok(NULL, " ");
char event_access[BUFSIZE];
char *chan = strtok(NULL, " ");
char *cmd = strtok(NULL, " ");
char *nick = strtok(NULL, " ");
char event_access[BUFSIZE];
ChannelInfo *ci;
NickAlias *na;
NickCore *nc;
ChannelInfo *ci;
NickAlias *na;
NickCore *nc;
int i;
int change = 0;
short ulev;
int is_list = (cmd && stricmp(cmd, "LIST") == 0);
int is_servadmin = is_services_admin(u);
ChanAccess *access;
int i;
int change = 0;
short ulev;
int is_list = (cmd && stricmp(cmd, "LIST") == 0);
int is_servadmin = is_services_admin(u);
ChanAccess *access;
/* If CLEAR, we don't need any parameters.
* If LIST, we don't *require* any parameters, but we can take any.
* If DEL or ADD we require a nick. */
if (!cmd || ((is_list || !stricmp(cmd, "CLEAR")) ? 0 : !nick)) {
syntax_error(s_ChanServ, u, xname, xmsgs[0]);
} else if (!(ci = cs_findchan(chan))) {
notice_lang(s_ChanServ, u, CHAN_X_NOT_REGISTERED, chan);
} else if (ci->flags & CI_VERBOTEN) {
notice_lang(s_ChanServ, u, CHAN_X_FORBIDDEN, chan);
} else if (!(ci->flags & CI_XOP)) {
notice_lang(s_ChanServ, u, CHAN_XOP_ACCESS, s_ChanServ);
} else if (stricmp(cmd, "ADD") == 0) {
if (readonly) {
notice_lang(s_ChanServ, u, xmsgs[1]);
return MOD_CONT;
}
/* If CLEAR, we don't need any parameters.
* If LIST, we don't *require* any parameters, but we can take any.
* If DEL or ADD we require a nick. */
if (!cmd || ((is_list || !stricmp(cmd, "CLEAR")) ? 0 : !nick)) {
syntax_error(s_ChanServ, u, xname, xmsgs[0]);
} else if (!(ci = cs_findchan(chan))) {
notice_lang(s_ChanServ, u, CHAN_X_NOT_REGISTERED, chan);
} else if (ci->flags & CI_VERBOTEN) {
notice_lang(s_ChanServ, u, CHAN_X_FORBIDDEN, chan);
} else if (!(ci->flags & CI_XOP)) {
notice_lang(s_ChanServ, u, CHAN_XOP_ACCESS, s_ChanServ);
} else if (stricmp(cmd, "ADD") == 0) {
if (readonly) {
notice_lang(s_ChanServ, u, xmsgs[1]);
return MOD_CONT;
}
ulev = get_access(u, ci);
ulev = get_access(u, ci);
if ((xlev >= ulev || ulev < ACCESS_AOP) && !is_servadmin) {
notice_lang(s_ChanServ, u, PERMISSION_DENIED);
return MOD_CONT;
}
if ((xlev >= ulev || ulev < ACCESS_AOP) && !is_servadmin) {
notice_lang(s_ChanServ, u, PERMISSION_DENIED);
return MOD_CONT;
}
na = findnick(nick);
if (!na) {
notice_lang(s_ChanServ, u, xmsgs[2]);
return MOD_CONT;
} else if (na->status & NS_VERBOTEN) {
notice_lang(s_ChanServ, u, NICK_X_FORBIDDEN, na->nick);
return MOD_CONT;
}
na = findnick(nick);
if (!na) {
notice_lang(s_ChanServ, u, xmsgs[2]);
return MOD_CONT;
} else if (na->status & NS_VERBOTEN) {
notice_lang(s_ChanServ, u, NICK_X_FORBIDDEN, na->nick);
return MOD_CONT;
}
nc = na->nc;
for (access = ci->access, i = 0; i < ci->accesscount;
access++, i++) {
if (access->nc == nc) {
/**
* Patch provided by PopCorn to prevert AOP's reducing SOP's levels
**/
if ((access->level >= ulev) && (!is_servadmin)) {
notice_lang(s_ChanServ, u, PERMISSION_DENIED);
return MOD_CONT;
}
change++;
break;
}
}
nc = na->nc;
for (access = ci->access, i = 0; i < ci->accesscount;
access++, i++) {
if (access->nc == nc) {
/**
* Patch provided by PopCorn to prevert AOP's reducing SOP's levels
**/
if ((access->level >= ulev) && (!is_servadmin)) {
notice_lang(s_ChanServ, u, PERMISSION_DENIED);
return MOD_CONT;
}
change++;
break;
}
}
if (!change) {
/* All entries should be in use so we no longer need
* to go over the entire list..
for (i = 0; i < ci->accesscount; i++)
if (!ci->access[i].in_use)
break;
*/
if (!change) {
/* All entries should be in use so we no longer need
* to go over the entire list..
for (i = 0; i < ci->accesscount; i++)
if (!ci->access[i].in_use)
break;
*/
if (i < CSAccessMax) {
ci->accesscount++;
ci->access =
(ChanAccess *)srealloc(ci->access,
sizeof(ChanAccess) * ci->accesscount);
} else {
notice_lang(s_ChanServ, u, CHAN_XOP_REACHED_LIMIT,
CSAccessMax);
return MOD_CONT;
}
if (i < CSAccessMax) {
ci->accesscount++;
ci->access =
(ChanAccess *)srealloc(ci->access,
sizeof(ChanAccess) * ci->accesscount);
} else {
notice_lang(s_ChanServ, u, CHAN_XOP_REACHED_LIMIT,
CSAccessMax);
return MOD_CONT;
}
access = &ci->access[i];
access->nc = nc;
}
access = &ci->access[i];
access->nc = nc;
}
access->in_use = 1;
access->level = xlev;
access->last_seen = 0;
access->in_use = 1;
access->level = xlev;
access->last_seen = 0;
alog("%s: %s!%s@%s (level %d) %s access level %d to %s (group %s) on channel %s", s_ChanServ, u->nick, u->username, u->host, ulev, change ? "changed" : "set", access->level, na->nick, nc->display, ci->name);
alog("%s: %s!%s@%s (level %d) %s access level %d to %s (group %s) on channel %s", s_ChanServ, u->nick, u->username, u->host, ulev, change ? "changed" : "set", access->level, na->nick, nc->display, ci->name);
snprintf(event_access, BUFSIZE, "%d", access->level);
snprintf(event_access, BUFSIZE, "%d", access->level);
if (!change) {
send_event(EVENT_ACCESS_ADD, 4, ci->name, u->nick, na->nick,
event_access);
notice_lang(s_ChanServ, u, xmsgs[3], access->nc->display,
ci->name);
} else {
send_event(EVENT_ACCESS_CHANGE, 4, ci->name, u->nick, na->nick,
event_access);
notice_lang(s_ChanServ, u, xmsgs[4], access->nc->display,
ci->name);
}
if (!change) {
send_event(EVENT_ACCESS_ADD, 4, ci->name, u->nick, na->nick,
event_access);
notice_lang(s_ChanServ, u, xmsgs[3], access->nc->display,
ci->name);
} else {
send_event(EVENT_ACCESS_CHANGE, 4, ci->name, u->nick, na->nick,
event_access);
notice_lang(s_ChanServ, u, xmsgs[4], access->nc->display,
ci->name);
}
} else if (stricmp(cmd, "DEL") == 0) {
int deleted, a, b;
if (readonly) {
notice_lang(s_ChanServ, u, xmsgs[1]);
return MOD_CONT;
}
} else if (stricmp(cmd, "DEL") == 0) {
int deleted, a, b;
if (readonly) {
notice_lang(s_ChanServ, u, xmsgs[1]);
return MOD_CONT;
}
if (ci->accesscount == 0) {
notice_lang(s_ChanServ, u, xmsgs[11], chan);
return MOD_CONT;
}
if (ci->accesscount == 0) {
notice_lang(s_ChanServ, u, xmsgs[11], chan);
return MOD_CONT;
}
ulev = get_access(u, ci);
ulev = get_access(u, ci);
if ((xlev >= ulev || ulev < ACCESS_AOP) && !is_servadmin) {
notice_lang(s_ChanServ, u, PERMISSION_DENIED);
return MOD_CONT;
}
if ((xlev >= ulev || ulev < ACCESS_AOP) && !is_servadmin) {
notice_lang(s_ChanServ, u, PERMISSION_DENIED);
return MOD_CONT;
}
/* Special case: is it a number/list? Only do search if it isn't. */
if (isdigit(*nick) && strspn(nick, "1234567890,-") == strlen(nick)) {
int count, last = -1, perm = 0;
deleted =
process_numlist(nick, &count, xop_del_callback, u, ci,
&last, &perm, ulev, xlev);
if (!deleted) {
if (perm) {
notice_lang(s_ChanServ, u, PERMISSION_DENIED);
} else if (count == 1) {
notice_lang(s_ChanServ, u, xmsgs[5], last, ci->name);
} else {
notice_lang(s_ChanServ, u, xmsgs[7], ci->name);
}
} else if (deleted == 1) {
notice_lang(s_ChanServ, u, xmsgs[9], ci->name);
} else {
notice_lang(s_ChanServ, u, xmsgs[10], deleted, ci->name);
}
} else {
na = findnick(nick);
if (!na) {
notice_lang(s_ChanServ, u, NICK_X_NOT_REGISTERED, nick);
return MOD_CONT;
}
nc = na->nc;
/* Special case: is it a number/list? Only do search if it isn't. */
if (isdigit(*nick) && strspn(nick, "1234567890,-") == strlen(nick)) {
int count, last = -1, perm = 0;
deleted =
process_numlist(nick, &count, xop_del_callback, u, ci,
&last, &perm, ulev, xlev);
if (!deleted) {
if (perm) {
notice_lang(s_ChanServ, u, PERMISSION_DENIED);
} else if (count == 1) {
notice_lang(s_ChanServ, u, xmsgs[5], last, ci->name);
} else {
notice_lang(s_ChanServ, u, xmsgs[7], ci->name);
}
} else if (deleted == 1) {
notice_lang(s_ChanServ, u, xmsgs[9], ci->name);
} else {
notice_lang(s_ChanServ, u, xmsgs[10], deleted, ci->name);
}
} else {
na = findnick(nick);
if (!na) {
notice_lang(s_ChanServ, u, NICK_X_NOT_REGISTERED, nick);
return MOD_CONT;
}
nc = na->nc;
for (i = 0; i < ci->accesscount; i++)
if (ci->access[i].nc == nc && ci->access[i].level == xlev)
break;
for (i = 0; i < ci->accesscount; i++)
if (ci->access[i].nc == nc && ci->access[i].level == xlev)
break;
if (i == ci->accesscount) {
notice_lang(s_ChanServ, u, xmsgs[6], nick, chan);
return MOD_CONT;
}
if (i == ci->accesscount) {
notice_lang(s_ChanServ, u, xmsgs[6], nick, chan);
return MOD_CONT;
}
access = &ci->access[i];
if (!is_servadmin && ulev <= access->level) {
deleted = 0;
notice_lang(s_ChanServ, u, PERMISSION_DENIED);
} else {
notice_lang(s_ChanServ, u, xmsgs[8], access->nc->display,
ci->name);
access->nc = NULL;
access->in_use = 0;
send_event(EVENT_ACCESS_DEL, 3, ci->name, u->nick,
na->nick);
deleted = 1;
}
}
if (deleted) {
/* Reordering - DrStein */
for (b = 0; b < ci->accesscount; b++) {
if (ci->access[b].in_use) {
for (a = 0; a < ci->accesscount; a++) {
if (a > b)
break;
if (!ci->access[a].in_use) {
ci->access[a].in_use = 1;
ci->access[a].level = ci->access[b].level;
ci->access[a].nc = ci->access[b].nc;
ci->access[a].last_seen =
ci->access[b].last_seen;
ci->access[b].nc = NULL;
ci->access[b].in_use = 0;
break;
}
}
}
}
access = &ci->access[i];
if (!is_servadmin && ulev <= access->level) {
deleted = 0;
notice_lang(s_ChanServ, u, PERMISSION_DENIED);
} else {
notice_lang(s_ChanServ, u, xmsgs[8], access->nc->display,
ci->name);
access->nc = NULL;
access->in_use = 0;
send_event(EVENT_ACCESS_DEL, 3, ci->name, u->nick,
na->nick);
deleted = 1;
}
}
if (deleted) {
/* Reordering - DrStein */
for (b = 0; b < ci->accesscount; b++) {
if (ci->access[b].in_use) {
for (a = 0; a < ci->accesscount; a++) {
if (a > b)
break;
if (!ci->access[a].in_use) {
ci->access[a].in_use = 1;
ci->access[a].level = ci->access[b].level;
ci->access[a].nc = ci->access[b].nc;
ci->access[a].last_seen =
ci->access[b].last_seen;
ci->access[b].nc = NULL;
ci->access[b].in_use = 0;
break;
}
}
}
}
/* If the patch provided in bug #706 is applied, this should be placed
* before sending the events! */
/* After reordering only the entries at the end could still be empty.
* We ll free the places no longer in use... */
for (i = ci->accesscount - 1; i >= 0; i--) {
if (ci->access[i].in_use == 1)
break;
/* If the patch provided in bug #706 is applied, this should be placed
* before sending the events! */
/* After reordering only the entries at the end could still be empty.
* We ll free the places no longer in use... */
for (i = ci->accesscount - 1; i >= 0; i--) {
if (ci->access[i].in_use == 1)
break;
ci->accesscount--;
}
ci->access =
(ChanAccess *)srealloc(ci->access,sizeof(ChanAccess) * ci->accesscount);
}
} else if (stricmp(cmd, "LIST") == 0) {
int sent_header = 0;
ci->accesscount--;
}
ci->access =
(ChanAccess *)srealloc(ci->access,sizeof(ChanAccess) * ci->accesscount);
}
} else if (stricmp(cmd, "LIST") == 0) {
int sent_header = 0;
ulev = get_access(u, ci);
ulev = get_access(u, ci);
if (!is_servadmin && ulev < ACCESS_AOP) {
notice_lang(s_ChanServ, u, ACCESS_DENIED);
return MOD_CONT;
}
if (!is_servadmin && ulev < ACCESS_AOP) {
notice_lang(s_ChanServ, u, ACCESS_DENIED);
return MOD_CONT;
}
if (ci->accesscount == 0) {
notice_lang(s_ChanServ, u, xmsgs[11], ci->name);
return MOD_CONT;
}
if (ci->accesscount == 0) {
notice_lang(s_ChanServ, u, xmsgs[11], ci->name);
return MOD_CONT;
}
if (nick && strspn(nick, "1234567890,-") == strlen(nick)) {
process_numlist(nick, NULL, xop_list_callback, u, ci,
&sent_header, xlev, xmsgs[12]);
} else {
for (i = 0; i < ci->accesscount; i++) {
if (nick && ci->access[i].nc
&& !match_wild_nocase(nick, ci->access[i].nc->display))
continue;
xop_list(u, i, ci, &sent_header, xlev, xmsgs[12]);
}
}
if (!sent_header)
notice_lang(s_ChanServ, u, xmsgs[7], chan);
} else if (stricmp(cmd, "CLEAR") == 0) {
if (readonly) {
notice_lang(s_ChanServ, u, CHAN_ACCESS_DISABLED);
return MOD_CONT;
}
if (nick && strspn(nick, "1234567890,-") == strlen(nick)) {
process_numlist(nick, NULL, xop_list_callback, u, ci,
&sent_header, xlev, xmsgs[12]);
} else {
for (i = 0; i < ci->accesscount; i++) {
if (nick && ci->access[i].nc
&& !match_wild_nocase(nick, ci->access[i].nc->display))
continue;
xop_list(u, i, ci, &sent_header, xlev, xmsgs[12]);
}
}
if (!sent_header)
notice_lang(s_ChanServ, u, xmsgs[7], chan);
} else if (stricmp(cmd, "CLEAR") == 0) {
if (readonly) {
notice_lang(s_ChanServ, u, CHAN_ACCESS_DISABLED);
return MOD_CONT;
}
if (ci->accesscount == 0) {
notice_lang(s_ChanServ, u, CHAN_ACCESS_LIST_EMPTY, chan);
return MOD_CONT;
}
if (ci->accesscount == 0) {
notice_lang(s_ChanServ, u, CHAN_ACCESS_LIST_EMPTY, chan);
return MOD_CONT;
}
if (!is_servadmin && !is_founder(u, ci)) {
notice_lang(s_ChanServ, u, PERMISSION_DENIED);
return MOD_CONT;
}
if (!is_servadmin && !is_founder(u, ci)) {
notice_lang(s_ChanServ, u, PERMISSION_DENIED);
return MOD_CONT;
}
for (i = 0; i < ci->accesscount; i++) {
if (ci->access[i].in_use && ci->access[i].level == xlev) {
ci->access[i].nc = NULL;
ci->access[i].in_use = 0;
}
}
for (i = 0; i < ci->accesscount; i++) {
if (ci->access[i].in_use && ci->access[i].level == xlev) {
ci->access[i].nc = NULL;
ci->access[i].in_use = 0;
}
}
send_event(EVENT_ACCESS_CLEAR, 2, ci->name, u->nick);
send_event(EVENT_ACCESS_CLEAR, 2, ci->name, u->nick);
notice_lang(s_ChanServ, u, xmsgs[13], ci->name);
} else {
syntax_error(s_ChanServ, u, xname, xmsgs[0]);
}
return MOD_CONT;
notice_lang(s_ChanServ, u, xmsgs[13], ci->name);
} else {
syntax_error(s_ChanServ, u, xname, xmsgs[0]);
}
return MOD_CONT;
}
MODULE_INIT("cs_xop", CSXOP)
+28 -28
View File
@@ -5,7 +5,7 @@
* Contact us at dev@anope.org
*
* Taken from IRC Services and is copyright (c) 1996-2002 Andrew Church.
* E-mail: <achurch@achurch.org>
* E-mail: <achurch@achurch.org>
* Parts written by Andrew Kempe and others.
* This program is free but copyrighted software; see the file COPYING for
* details.
@@ -44,9 +44,9 @@ typedef unsigned int UINT4;
/* MD5 context. */
typedef struct {
UINT4 state[4]; /* state (ABCD) */
UINT4 count[2]; /* number of bits, modulo 2^64 (lsb first) */
unsigned char buffer[64]; /* input buffer */
UINT4 state[4]; /* state (ABCD) */
UINT4 count[2]; /* number of bits, modulo 2^64 (lsb first) */
unsigned char buffer[64]; /* input buffer */
} MD5_CTX;
/* MD5C.C - RSA Data Security, Inc., MD5 message-digest algorithm
@@ -323,60 +323,60 @@ void Decode (UINT4 *output, unsigned char *input, unsigned int len)
int md5_encrypt(const char *src, int len, char *dest, int size)
{
MD5_CTX context;
char tmp[33];
MD5_CTX context;
char tmp[33];
if (size < 16)
if (size < 16)
return -1;
MD5Init(&context);
MD5Update(&context, (unsigned char *)src, len);
MD5Final((unsigned char *)dest, &context);
if(debug) {
memset(tmp,0,33);
binary_to_hex((unsigned char *)dest,tmp,16);
MD5Init(&context);
MD5Update(&context, (unsigned char *)src, len);
MD5Final((unsigned char *)dest, &context);
if(debug) {
memset(tmp,0,33);
binary_to_hex((unsigned char *)dest,tmp,16);
/* Dont log source if we were encrypting in place :) */
if (memcmp(src, dest, 16) != 0) {
alog("enc_md5: hashed from [%s] to [%s]",src,tmp);
if (memcmp(src, dest, 16) != 0) {
alog("enc_md5: hashed from [%s] to [%s]",src,tmp);
} else {
alog("enc_md5: hashed password to [%s]",tmp);
alog("enc_md5: hashed password to [%s]",tmp);
}
}
return 0;
}
return 0;
}
int md5_encrypt_in_place(char *buf, int size)
{
return md5_encrypt(buf, strlen(buf), buf, size);
return md5_encrypt(buf, strlen(buf), buf, size);
}
int md5_encrypt_check_len(int passlen, int bufsize)
{
if (bufsize < 16)
if (bufsize < 16)
fatal("enc_md5: md5_check_len(): buffer too small (%d)", bufsize);
return 0;
return 0;
}
int md5_decrypt(const char *src, char *dest, int size)
{
return 0;
return 0;
}
int md5_check_password(const char *plaintext, const char *password)
{
char buf[BUFSIZE];
char buf[BUFSIZE];
if (md5_encrypt(plaintext, strlen(plaintext), buf, sizeof(buf)) < 0)
if (md5_encrypt(plaintext, strlen(plaintext), buf, sizeof(buf)) < 0)
return -1;
if (memcmp(buf, password, 16) == 0)
if (memcmp(buf, password, 16) == 0)
return 1;
return 0;
return 0;
}
/*************************************************************************/
+20 -20
View File
@@ -42,38 +42,38 @@ class ENone : public Module
};
int plain_encrypt(const char *src,int len,char *dest,int size) {
if(size>=len) {
memset(dest,0,size);
strncpy(dest,src,len);
dest[len] = '\0';
return 0;
}
return -1;
if(size>=len) {
memset(dest,0,size);
strncpy(dest,src,len);
dest[len] = '\0';
return 0;
}
return -1;
}
int plain_encrypt_in_place(char *buf, int size) {
return 0;
return 0;
}
int plain_encrypt_check_len(int passlen, int bufsize) {
if(bufsize>=passlen) {
return 0;
}
return bufsize;
if(bufsize>=passlen) {
return 0;
}
return bufsize;
}
int plain_decrypt(const char *src, char *dest, int size) {
memset(dest,0,size);
strncpy(dest,src,size);
dest[size] = '\0';
return 1;
memset(dest,0,size);
strncpy(dest,src,size);
dest[size] = '\0';
return 1;
}
int plain_check_password(const char *plaintext, const char *password) {
if(strcmp(plaintext,password)==0) {
return 1;
}
return 0;
if(strcmp(plaintext,password)==0) {
return 1;
}
return 0;
}
/* EOF */
+181 -181
View File
@@ -16,16 +16,16 @@
void binary_to_hex(unsigned char *bin, char *hex, int length)
{
static const char trans[] = "0123456789ABCDEF";
int i;
static const char trans[] = "0123456789ABCDEF";
int i;
for(i = 0; i < length; i++)
{
hex[i << 1] = trans[bin[i] >> 4];
hex[(i << 1) + 1] = trans[bin[i] & 0xf];
}
for(i = 0; i < length; i++)
{
hex[i << 1] = trans[bin[i] >> 4];
hex[(i << 1) + 1] = trans[bin[i] & 0xf];
}
hex[i << 1] = '\0';
hex[i << 1] = '\0';
}
@@ -62,9 +62,9 @@ typedef unsigned int UINT4;
/* MD5 context. */
typedef struct {
UINT4 state[4]; /* state (ABCD) */
UINT4 count[2]; /* number of bits, modulo 2^64 (lsb first) */
unsigned char buffer[64]; /* input buffer */
UINT4 state[4]; /* state (ABCD) */
UINT4 count[2]; /* number of bits, modulo 2^64 (lsb first) */
unsigned char buffer[64]; /* input buffer */
} MD5_CTX;
/* MD5C.C - RSA Data Security, Inc., MD5 message-digest algorithm
@@ -96,9 +96,9 @@ static void Encode(unsigned char *, UINT4 *, unsigned int);
static void Decode(UINT4 *, unsigned char *, unsigned int);
static unsigned char PADDING[64] = {
0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
};
/* F, G, H and I are basic MD5 functions.
@@ -140,13 +140,13 @@ Rotation is separate from addition to prevent recomputation.
*/
static void MD5Init(MD5_CTX *context)
{
context->count[0] = context->count[1] = 0;
/* Load magic initialization constants.
*/
context->state[0] = 0x67452301;
context->state[1] = 0xefcdab89;
context->state[2] = 0x98badcfe;
context->state[3] = 0x10325476;
context->count[0] = context->count[1] = 0;
/* Load magic initialization constants.
*/
context->state[0] = 0x67452301;
context->state[1] = 0xefcdab89;
context->state[2] = 0x98badcfe;
context->state[3] = 0x10325476;
}
/* MD5 block update operation. Continues an MD5 message-digest
@@ -155,37 +155,37 @@ static void MD5Init(MD5_CTX *context)
*/
static void MD5Update(MD5_CTX *context, unsigned char *input, unsigned int inputLen)
{
unsigned int i, index, partLen;
unsigned int i, index, partLen;
/* Compute number of bytes mod 64 */
index = (unsigned int) ((context->count[0] >> 3) & 0x3F);
/* Compute number of bytes mod 64 */
index = (unsigned int) ((context->count[0] >> 3) & 0x3F);
/* Update number of bits */
if ((context->count[0] += ((UINT4) inputLen << 3))
< ((UINT4) inputLen << 3))
context->count[1]++;
context->count[1] += ((UINT4) inputLen >> 29);
/* Update number of bits */
if ((context->count[0] += ((UINT4) inputLen << 3))
< ((UINT4) inputLen << 3))
context->count[1]++;
context->count[1] += ((UINT4) inputLen >> 29);
partLen = 64 - index;
partLen = 64 - index;
/* Transform as many times as possible.
*/
if (inputLen >= partLen) {
memcpy
((POINTER) & context->buffer[index], (POINTER) input, partLen);
MD5Transform(context->state, context->buffer);
/* Transform as many times as possible.
*/
if (inputLen >= partLen) {
memcpy
((POINTER) & context->buffer[index], (POINTER) input, partLen);
MD5Transform(context->state, context->buffer);
for (i = partLen; i + 63 < inputLen; i += 64)
MD5Transform(context->state, &input[i]);
for (i = partLen; i + 63 < inputLen; i += 64)
MD5Transform(context->state, &input[i]);
index = 0;
} else
i = 0;
index = 0;
} else
i = 0;
/* Buffer remaining input */
memcpy
((POINTER) & context->buffer[index], (POINTER) & input[i],
inputLen - i);
/* Buffer remaining input */
memcpy
((POINTER) & context->buffer[index], (POINTER) & input[i],
inputLen - i);
}
/* MD5 finalization. Ends an MD5 message-digest operation, writing the
@@ -193,116 +193,116 @@ static void MD5Update(MD5_CTX *context, unsigned char *input, unsigned int input
*/
static void MD5Final(unsigned char digest[16], MD5_CTX *context)
{
unsigned char bits[8];
unsigned int index, padLen;
unsigned char bits[8];
unsigned int index, padLen;
/* Save number of bits */
Encode(bits, context->count, 8);
/* Save number of bits */
Encode(bits, context->count, 8);
/* Pad out to 56 mod 64.
*/
index = (unsigned int) ((context->count[0] >> 3) & 0x3f);
padLen = (index < 56) ? (56 - index) : (120 - index);
MD5Update(context, PADDING, padLen);
/* Pad out to 56 mod 64.
*/
index = (unsigned int) ((context->count[0] >> 3) & 0x3f);
padLen = (index < 56) ? (56 - index) : (120 - index);
MD5Update(context, PADDING, padLen);
/* Append length (before padding) */
MD5Update(context, bits, 8);
/* Store state in digest */
Encode(digest, context->state, 16);
/* Append length (before padding) */
MD5Update(context, bits, 8);
/* Store state in digest */
Encode(digest, context->state, 16);
/* Zeroize sensitive information.
*/
memset((POINTER) context, 0, sizeof(*context));
/* Zeroize sensitive information.
*/
memset((POINTER) context, 0, sizeof(*context));
}
/* MD5 basic transformation. Transforms state based on block.
*/
static void MD5Transform(UINT4 state[4], unsigned char block[64])
{
UINT4 a = state[0], b = state[1], c = state[2], d = state[3], x[16];
UINT4 a = state[0], b = state[1], c = state[2], d = state[3], x[16];
Decode(x, block, 64);
Decode(x, block, 64);
/* Round 1 */
FF(a, b, c, d, x[0], S11, 0xd76aa478); /* 1 */
FF(d, a, b, c, x[1], S12, 0xe8c7b756); /* 2 */
FF(c, d, a, b, x[2], S13, 0x242070db); /* 3 */
FF(b, c, d, a, x[3], S14, 0xc1bdceee); /* 4 */
FF(a, b, c, d, x[4], S11, 0xf57c0faf); /* 5 */
FF(d, a, b, c, x[5], S12, 0x4787c62a); /* 6 */
FF(c, d, a, b, x[6], S13, 0xa8304613); /* 7 */
FF(b, c, d, a, x[7], S14, 0xfd469501); /* 8 */
FF(a, b, c, d, x[8], S11, 0x698098d8); /* 9 */
FF(d, a, b, c, x[9], S12, 0x8b44f7af); /* 10 */
FF(c, d, a, b, x[10], S13, 0xffff5bb1); /* 11 */
FF(b, c, d, a, x[11], S14, 0x895cd7be); /* 12 */
FF(a, b, c, d, x[12], S11, 0x6b901122); /* 13 */
FF(d, a, b, c, x[13], S12, 0xfd987193); /* 14 */
FF(c, d, a, b, x[14], S13, 0xa679438e); /* 15 */
FF(b, c, d, a, x[15], S14, 0x49b40821); /* 16 */
/* Round 1 */
FF(a, b, c, d, x[0], S11, 0xd76aa478); /* 1 */
FF(d, a, b, c, x[1], S12, 0xe8c7b756); /* 2 */
FF(c, d, a, b, x[2], S13, 0x242070db); /* 3 */
FF(b, c, d, a, x[3], S14, 0xc1bdceee); /* 4 */
FF(a, b, c, d, x[4], S11, 0xf57c0faf); /* 5 */
FF(d, a, b, c, x[5], S12, 0x4787c62a); /* 6 */
FF(c, d, a, b, x[6], S13, 0xa8304613); /* 7 */
FF(b, c, d, a, x[7], S14, 0xfd469501); /* 8 */
FF(a, b, c, d, x[8], S11, 0x698098d8); /* 9 */
FF(d, a, b, c, x[9], S12, 0x8b44f7af); /* 10 */
FF(c, d, a, b, x[10], S13, 0xffff5bb1); /* 11 */
FF(b, c, d, a, x[11], S14, 0x895cd7be); /* 12 */
FF(a, b, c, d, x[12], S11, 0x6b901122); /* 13 */
FF(d, a, b, c, x[13], S12, 0xfd987193); /* 14 */
FF(c, d, a, b, x[14], S13, 0xa679438e); /* 15 */
FF(b, c, d, a, x[15], S14, 0x49b40821); /* 16 */
/* Round 2 */
GG(a, b, c, d, x[1], S21, 0xf61e2562); /* 17 */
GG(d, a, b, c, x[6], S22, 0xc040b340); /* 18 */
GG(c, d, a, b, x[11], S23, 0x265e5a51); /* 19 */
GG(b, c, d, a, x[0], S24, 0xe9b6c7aa); /* 20 */
GG(a, b, c, d, x[5], S21, 0xd62f105d); /* 21 */
GG(d, a, b, c, x[10], S22, 0x2441453); /* 22 */
GG(c, d, a, b, x[15], S23, 0xd8a1e681); /* 23 */
GG(b, c, d, a, x[4], S24, 0xe7d3fbc8); /* 24 */
GG(a, b, c, d, x[9], S21, 0x21e1cde6); /* 25 */
GG(d, a, b, c, x[14], S22, 0xc33707d6); /* 26 */
GG(c, d, a, b, x[3], S23, 0xf4d50d87); /* 27 */
GG(b, c, d, a, x[8], S24, 0x455a14ed); /* 28 */
GG(a, b, c, d, x[13], S21, 0xa9e3e905); /* 29 */
GG(d, a, b, c, x[2], S22, 0xfcefa3f8); /* 30 */
GG(c, d, a, b, x[7], S23, 0x676f02d9); /* 31 */
GG(b, c, d, a, x[12], S24, 0x8d2a4c8a); /* 32 */
/* Round 2 */
GG(a, b, c, d, x[1], S21, 0xf61e2562); /* 17 */
GG(d, a, b, c, x[6], S22, 0xc040b340); /* 18 */
GG(c, d, a, b, x[11], S23, 0x265e5a51); /* 19 */
GG(b, c, d, a, x[0], S24, 0xe9b6c7aa); /* 20 */
GG(a, b, c, d, x[5], S21, 0xd62f105d); /* 21 */
GG(d, a, b, c, x[10], S22, 0x2441453); /* 22 */
GG(c, d, a, b, x[15], S23, 0xd8a1e681); /* 23 */
GG(b, c, d, a, x[4], S24, 0xe7d3fbc8); /* 24 */
GG(a, b, c, d, x[9], S21, 0x21e1cde6); /* 25 */
GG(d, a, b, c, x[14], S22, 0xc33707d6); /* 26 */
GG(c, d, a, b, x[3], S23, 0xf4d50d87); /* 27 */
GG(b, c, d, a, x[8], S24, 0x455a14ed); /* 28 */
GG(a, b, c, d, x[13], S21, 0xa9e3e905); /* 29 */
GG(d, a, b, c, x[2], S22, 0xfcefa3f8); /* 30 */
GG(c, d, a, b, x[7], S23, 0x676f02d9); /* 31 */
GG(b, c, d, a, x[12], S24, 0x8d2a4c8a); /* 32 */
/* Round 3 */
HH(a, b, c, d, x[5], S31, 0xfffa3942); /* 33 */
HH(d, a, b, c, x[8], S32, 0x8771f681); /* 34 */
HH(c, d, a, b, x[11], S33, 0x6d9d6122); /* 35 */
HH(b, c, d, a, x[14], S34, 0xfde5380c); /* 36 */
HH(a, b, c, d, x[1], S31, 0xa4beea44); /* 37 */
HH(d, a, b, c, x[4], S32, 0x4bdecfa9); /* 38 */
HH(c, d, a, b, x[7], S33, 0xf6bb4b60); /* 39 */
HH(b, c, d, a, x[10], S34, 0xbebfbc70); /* 40 */
HH(a, b, c, d, x[13], S31, 0x289b7ec6); /* 41 */
HH(d, a, b, c, x[0], S32, 0xeaa127fa); /* 42 */
HH(c, d, a, b, x[3], S33, 0xd4ef3085); /* 43 */
HH(b, c, d, a, x[6], S34, 0x4881d05); /* 44 */
HH(a, b, c, d, x[9], S31, 0xd9d4d039); /* 45 */
HH(d, a, b, c, x[12], S32, 0xe6db99e5); /* 46 */
HH(c, d, a, b, x[15], S33, 0x1fa27cf8); /* 47 */
HH(b, c, d, a, x[2], S34, 0xc4ac5665); /* 48 */
/* Round 3 */
HH(a, b, c, d, x[5], S31, 0xfffa3942); /* 33 */
HH(d, a, b, c, x[8], S32, 0x8771f681); /* 34 */
HH(c, d, a, b, x[11], S33, 0x6d9d6122); /* 35 */
HH(b, c, d, a, x[14], S34, 0xfde5380c); /* 36 */
HH(a, b, c, d, x[1], S31, 0xa4beea44); /* 37 */
HH(d, a, b, c, x[4], S32, 0x4bdecfa9); /* 38 */
HH(c, d, a, b, x[7], S33, 0xf6bb4b60); /* 39 */
HH(b, c, d, a, x[10], S34, 0xbebfbc70); /* 40 */
HH(a, b, c, d, x[13], S31, 0x289b7ec6); /* 41 */
HH(d, a, b, c, x[0], S32, 0xeaa127fa); /* 42 */
HH(c, d, a, b, x[3], S33, 0xd4ef3085); /* 43 */
HH(b, c, d, a, x[6], S34, 0x4881d05); /* 44 */
HH(a, b, c, d, x[9], S31, 0xd9d4d039); /* 45 */
HH(d, a, b, c, x[12], S32, 0xe6db99e5); /* 46 */
HH(c, d, a, b, x[15], S33, 0x1fa27cf8); /* 47 */
HH(b, c, d, a, x[2], S34, 0xc4ac5665); /* 48 */
/* Round 4 */
II(a, b, c, d, x[0], S41, 0xf4292244); /* 49 */
II(d, a, b, c, x[7], S42, 0x432aff97); /* 50 */
II(c, d, a, b, x[14], S43, 0xab9423a7); /* 51 */
II(b, c, d, a, x[5], S44, 0xfc93a039); /* 52 */
II(a, b, c, d, x[12], S41, 0x655b59c3); /* 53 */
II(d, a, b, c, x[3], S42, 0x8f0ccc92); /* 54 */
II(c, d, a, b, x[10], S43, 0xffeff47d); /* 55 */
II(b, c, d, a, x[1], S44, 0x85845dd1); /* 56 */
II(a, b, c, d, x[8], S41, 0x6fa87e4f); /* 57 */
II(d, a, b, c, x[15], S42, 0xfe2ce6e0); /* 58 */
II(c, d, a, b, x[6], S43, 0xa3014314); /* 59 */
II(b, c, d, a, x[13], S44, 0x4e0811a1); /* 60 */
II(a, b, c, d, x[4], S41, 0xf7537e82); /* 61 */
II(d, a, b, c, x[11], S42, 0xbd3af235); /* 62 */
II(c, d, a, b, x[2], S43, 0x2ad7d2bb); /* 63 */
II(b, c, d, a, x[9], S44, 0xeb86d391); /* 64 */
/* Round 4 */
II(a, b, c, d, x[0], S41, 0xf4292244); /* 49 */
II(d, a, b, c, x[7], S42, 0x432aff97); /* 50 */
II(c, d, a, b, x[14], S43, 0xab9423a7); /* 51 */
II(b, c, d, a, x[5], S44, 0xfc93a039); /* 52 */
II(a, b, c, d, x[12], S41, 0x655b59c3); /* 53 */
II(d, a, b, c, x[3], S42, 0x8f0ccc92); /* 54 */
II(c, d, a, b, x[10], S43, 0xffeff47d); /* 55 */
II(b, c, d, a, x[1], S44, 0x85845dd1); /* 56 */
II(a, b, c, d, x[8], S41, 0x6fa87e4f); /* 57 */
II(d, a, b, c, x[15], S42, 0xfe2ce6e0); /* 58 */
II(c, d, a, b, x[6], S43, 0xa3014314); /* 59 */
II(b, c, d, a, x[13], S44, 0x4e0811a1); /* 60 */
II(a, b, c, d, x[4], S41, 0xf7537e82); /* 61 */
II(d, a, b, c, x[11], S42, 0xbd3af235); /* 62 */
II(c, d, a, b, x[2], S43, 0x2ad7d2bb); /* 63 */
II(b, c, d, a, x[9], S44, 0xeb86d391); /* 64 */
state[0] += a;
state[1] += b;
state[2] += c;
state[3] += d;
state[0] += a;
state[1] += b;
state[2] += c;
state[3] += d;
/* Zeroize sensitive information.
*/
memset((POINTER) x, 0, sizeof(x));
/* Zeroize sensitive information.
*/
memset((POINTER) x, 0, sizeof(x));
}
/* Encodes input (UINT4) into output (unsigned char). Assumes len is
@@ -310,14 +310,14 @@ static void MD5Transform(UINT4 state[4], unsigned char block[64])
*/
static void Encode(unsigned char *output, UINT4 *input, unsigned int len)
{
unsigned int i, j;
unsigned int i, j;
for (i = 0, j = 0; j < len; i++, j += 4) {
output[j] = (unsigned char) (input[i] & 0xff);
output[j + 1] = (unsigned char) ((input[i] >> 8) & 0xff);
output[j + 2] = (unsigned char) ((input[i] >> 16) & 0xff);
output[j + 3] = (unsigned char) ((input[i] >> 24) & 0xff);
}
for (i = 0, j = 0; j < len; i++, j += 4) {
output[j] = (unsigned char) (input[i] & 0xff);
output[j + 1] = (unsigned char) ((input[i] >> 8) & 0xff);
output[j + 2] = (unsigned char) ((input[i] >> 16) & 0xff);
output[j + 3] = (unsigned char) ((input[i] >> 24) & 0xff);
}
}
/* Decodes input (unsigned char) into output (UINT4). Assumes len is
@@ -325,12 +325,12 @@ static void Encode(unsigned char *output, UINT4 *input, unsigned int len)
*/
static void Decode(UINT4 *output, unsigned char *input, unsigned int len)
{
unsigned int i, j;
unsigned int i, j;
for (i = 0, j = 0; j < len; i++, j += 4)
output[i] = ((UINT4) input[j]) | (((UINT4) input[j + 1]) << 8) |
(((UINT4) input[j + 2]) << 16) | (((UINT4) input[j + 3]) <<
24);
for (i = 0, j = 0; j < len; i++, j += 4)
output[i] = ((UINT4) input[j]) | (((UINT4) input[j + 1]) << 8) |
(((UINT4) input[j + 2]) << 16) | (((UINT4) input[j + 3]) <<
24);
}
/*************************************************************************/
@@ -348,30 +348,30 @@ static void Decode(UINT4 *output, unsigned char *input, unsigned int len)
int old_encrypt(const char *src, int len, char *dest, int size)
{
MD5_CTX context;
char digest[33];
char tmp[33];
int i;
MD5_CTX context;
char digest[33];
char tmp[33];
int i;
if (size < 16)
return -1;
if (size < 16)
return -1;
memset(&context, 0, sizeof(context));
memset(&digest, 0, sizeof(digest));
memset(&context, 0, sizeof(context));
memset(&digest, 0, sizeof(digest));
MD5Init(&context);
MD5Update(&context, (unsigned char *)src, len);
MD5Final((unsigned char *)digest, &context);
for (i = 0; i < 32; i += 2)
dest[i / 2] = XTOI(digest[i]) << 4 | XTOI(digest[i + 1]);
MD5Init(&context);
MD5Update(&context, (unsigned char *)src, len);
MD5Final((unsigned char *)digest, &context);
for (i = 0; i < 32; i += 2)
dest[i / 2] = XTOI(digest[i]) << 4 | XTOI(digest[i + 1]);
if(debug) {
memset(tmp,0,33);
binary_to_hex((unsigned char *)dest,tmp,16);
alog("enc_old: Converted [%s] to [%s]",src,tmp);
}
if(debug) {
memset(tmp,0,33);
binary_to_hex((unsigned char *)dest,tmp,16);
alog("enc_old: Converted [%s] to [%s]",src,tmp);
}
return 0;
return 0;
}
@@ -379,14 +379,14 @@ int old_encrypt(const char *src, int len, char *dest, int size)
/* Shortcut for encrypting a null-terminated string in place. */
int old_encrypt_in_place(char *buf, int size)
{
return old_encrypt(buf, strlen(buf), buf, size);
return old_encrypt(buf, strlen(buf), buf, size);
}
int old_encrypt_check_len(int passlen, int bufsize)
{
if (bufsize < 16)
fatal("enc_old: old_check_len(): buffer too small (%d)", bufsize);
return 0;
if (bufsize < 16)
fatal("enc_old: old_check_len(): buffer too small (%d)", bufsize);
return 0;
}
@@ -395,19 +395,19 @@ int old_encrypt_check_len(int passlen, int bufsize)
int old_check_password(const char *plaintext, const char *password)
{
char buf[BUFSIZE];
char buf[BUFSIZE];
if (old_encrypt(plaintext, strlen(plaintext), buf, sizeof(buf)) < 0)
return -1;
if (memcmp(buf, password, 16) == 0)
return 1;
else
return 0;
if (old_encrypt(plaintext, strlen(plaintext), buf, sizeof(buf)) < 0)
return -1;
if (memcmp(buf, password, 16) == 0)
return 1;
else
return 0;
}
int old_decrypt(const char *src, char *dest, int size)
{
return 0;
return 0;
}
class EOld : public Module
+126 -126
View File
@@ -20,9 +20,9 @@ A million repetitions of "a"
#include <string.h>
typedef struct {
uint32 state[5];
uint32 count[2];
unsigned char buffer[64];
uint32 state[5];
uint32 count[2];
unsigned char buffer[64];
} SHA1_CTX;
void SHA1Transform(uint32 state[5], unsigned char const buffer[64]);
@@ -36,12 +36,12 @@ void SHA1Final(unsigned char digest[20], SHA1_CTX* context);
/* I got the idea of expanding during the round function from SSLeay */
#ifdef LITTLE_ENDIAN
#define blk0(i) (block->l[i] = (rol(block->l[i],24)&0xFF00FF00) \
|(rol(block->l[i],8)&0x00FF00FF))
|(rol(block->l[i],8)&0x00FF00FF))
#else
#define blk0(i) block->l[i]
#endif
#define blk(i) (block->l[i&15] = rol(block->l[(i+13)&15]^block->l[(i+8)&15] \
^block->l[(i+2)&15]^block->l[i&15],1))
^block->l[(i+2)&15]^block->l[i&15],1))
/* (R0+R1), R2, R3, R4 are the different operations used in SHA1 */
#define R0(v,w,x,y,z,i) z+=((w&(x^y))^y)+blk0(i)+0x5A827999+rol(v,5);w=rol(w,30);
@@ -57,52 +57,52 @@ void SHA1Transform(uint32 state[5], unsigned char const buffer[64])
{
uint32 a, b, c, d, e;
typedef union {
unsigned char c[64];
uint32 l[16];
unsigned char c[64];
uint32 l[16];
} CHAR64LONG16;
CHAR64LONG16* block;
#ifdef SHA1HANDSOFF
static unsigned char workspace[64];
block = (CHAR64LONG16*)workspace;
memcpy(block, buffer, 64);
block = (CHAR64LONG16*)workspace;
memcpy(block, buffer, 64);
#else
block = (CHAR64LONG16*)buffer;
block = (CHAR64LONG16*)buffer;
#endif
/* Copy context->state[] to working vars */
a = state[0];
b = state[1];
c = state[2];
d = state[3];
e = state[4];
/* 4 rounds of 20 operations each. Loop unrolled. */
R0(a,b,c,d,e, 0); R0(e,a,b,c,d, 1); R0(d,e,a,b,c, 2); R0(c,d,e,a,b, 3);
R0(b,c,d,e,a, 4); R0(a,b,c,d,e, 5); R0(e,a,b,c,d, 6); R0(d,e,a,b,c, 7);
R0(c,d,e,a,b, 8); R0(b,c,d,e,a, 9); R0(a,b,c,d,e,10); R0(e,a,b,c,d,11);
R0(d,e,a,b,c,12); R0(c,d,e,a,b,13); R0(b,c,d,e,a,14); R0(a,b,c,d,e,15);
R1(e,a,b,c,d,16); R1(d,e,a,b,c,17); R1(c,d,e,a,b,18); R1(b,c,d,e,a,19);
R2(a,b,c,d,e,20); R2(e,a,b,c,d,21); R2(d,e,a,b,c,22); R2(c,d,e,a,b,23);
R2(b,c,d,e,a,24); R2(a,b,c,d,e,25); R2(e,a,b,c,d,26); R2(d,e,a,b,c,27);
R2(c,d,e,a,b,28); R2(b,c,d,e,a,29); R2(a,b,c,d,e,30); R2(e,a,b,c,d,31);
R2(d,e,a,b,c,32); R2(c,d,e,a,b,33); R2(b,c,d,e,a,34); R2(a,b,c,d,e,35);
R2(e,a,b,c,d,36); R2(d,e,a,b,c,37); R2(c,d,e,a,b,38); R2(b,c,d,e,a,39);
R3(a,b,c,d,e,40); R3(e,a,b,c,d,41); R3(d,e,a,b,c,42); R3(c,d,e,a,b,43);
R3(b,c,d,e,a,44); R3(a,b,c,d,e,45); R3(e,a,b,c,d,46); R3(d,e,a,b,c,47);
R3(c,d,e,a,b,48); R3(b,c,d,e,a,49); R3(a,b,c,d,e,50); R3(e,a,b,c,d,51);
R3(d,e,a,b,c,52); R3(c,d,e,a,b,53); R3(b,c,d,e,a,54); R3(a,b,c,d,e,55);
R3(e,a,b,c,d,56); R3(d,e,a,b,c,57); R3(c,d,e,a,b,58); R3(b,c,d,e,a,59);
R4(a,b,c,d,e,60); R4(e,a,b,c,d,61); R4(d,e,a,b,c,62); R4(c,d,e,a,b,63);
R4(b,c,d,e,a,64); R4(a,b,c,d,e,65); R4(e,a,b,c,d,66); R4(d,e,a,b,c,67);
R4(c,d,e,a,b,68); R4(b,c,d,e,a,69); R4(a,b,c,d,e,70); R4(e,a,b,c,d,71);
R4(d,e,a,b,c,72); R4(c,d,e,a,b,73); R4(b,c,d,e,a,74); R4(a,b,c,d,e,75);
R4(e,a,b,c,d,76); R4(d,e,a,b,c,77); R4(c,d,e,a,b,78); R4(b,c,d,e,a,79);
/* Add the working vars back into context.state[] */
state[0] += a;
state[1] += b;
state[2] += c;
state[3] += d;
state[4] += e;
/* Wipe variables */
a = b = c = d = e = 0;
/* Copy context->state[] to working vars */
a = state[0];
b = state[1];
c = state[2];
d = state[3];
e = state[4];
/* 4 rounds of 20 operations each. Loop unrolled. */
R0(a,b,c,d,e, 0); R0(e,a,b,c,d, 1); R0(d,e,a,b,c, 2); R0(c,d,e,a,b, 3);
R0(b,c,d,e,a, 4); R0(a,b,c,d,e, 5); R0(e,a,b,c,d, 6); R0(d,e,a,b,c, 7);
R0(c,d,e,a,b, 8); R0(b,c,d,e,a, 9); R0(a,b,c,d,e,10); R0(e,a,b,c,d,11);
R0(d,e,a,b,c,12); R0(c,d,e,a,b,13); R0(b,c,d,e,a,14); R0(a,b,c,d,e,15);
R1(e,a,b,c,d,16); R1(d,e,a,b,c,17); R1(c,d,e,a,b,18); R1(b,c,d,e,a,19);
R2(a,b,c,d,e,20); R2(e,a,b,c,d,21); R2(d,e,a,b,c,22); R2(c,d,e,a,b,23);
R2(b,c,d,e,a,24); R2(a,b,c,d,e,25); R2(e,a,b,c,d,26); R2(d,e,a,b,c,27);
R2(c,d,e,a,b,28); R2(b,c,d,e,a,29); R2(a,b,c,d,e,30); R2(e,a,b,c,d,31);
R2(d,e,a,b,c,32); R2(c,d,e,a,b,33); R2(b,c,d,e,a,34); R2(a,b,c,d,e,35);
R2(e,a,b,c,d,36); R2(d,e,a,b,c,37); R2(c,d,e,a,b,38); R2(b,c,d,e,a,39);
R3(a,b,c,d,e,40); R3(e,a,b,c,d,41); R3(d,e,a,b,c,42); R3(c,d,e,a,b,43);
R3(b,c,d,e,a,44); R3(a,b,c,d,e,45); R3(e,a,b,c,d,46); R3(d,e,a,b,c,47);
R3(c,d,e,a,b,48); R3(b,c,d,e,a,49); R3(a,b,c,d,e,50); R3(e,a,b,c,d,51);
R3(d,e,a,b,c,52); R3(c,d,e,a,b,53); R3(b,c,d,e,a,54); R3(a,b,c,d,e,55);
R3(e,a,b,c,d,56); R3(d,e,a,b,c,57); R3(c,d,e,a,b,58); R3(b,c,d,e,a,59);
R4(a,b,c,d,e,60); R4(e,a,b,c,d,61); R4(d,e,a,b,c,62); R4(c,d,e,a,b,63);
R4(b,c,d,e,a,64); R4(a,b,c,d,e,65); R4(e,a,b,c,d,66); R4(d,e,a,b,c,67);
R4(c,d,e,a,b,68); R4(b,c,d,e,a,69); R4(a,b,c,d,e,70); R4(e,a,b,c,d,71);
R4(d,e,a,b,c,72); R4(c,d,e,a,b,73); R4(b,c,d,e,a,74); R4(a,b,c,d,e,75);
R4(e,a,b,c,d,76); R4(d,e,a,b,c,77); R4(c,d,e,a,b,78); R4(b,c,d,e,a,79);
/* Add the working vars back into context.state[] */
state[0] += a;
state[1] += b;
state[2] += c;
state[3] += d;
state[4] += e;
/* Wipe variables */
a = b = c = d = e = 0;
}
@@ -110,13 +110,13 @@ static unsigned char workspace[64];
void SHA1Init(SHA1_CTX* context)
{
/* SHA1 initialization constants */
context->state[0] = 0x67452301;
context->state[1] = 0xEFCDAB89;
context->state[2] = 0x98BADCFE;
context->state[3] = 0x10325476;
context->state[4] = 0xC3D2E1F0;
context->count[0] = context->count[1] = 0;
/* SHA1 initialization constants */
context->state[0] = 0x67452301;
context->state[1] = 0xEFCDAB89;
context->state[2] = 0x98BADCFE;
context->state[3] = 0x10325476;
context->state[4] = 0xC3D2E1F0;
context->count[0] = context->count[1] = 0;
}
@@ -124,21 +124,21 @@ void SHA1Init(SHA1_CTX* context)
void SHA1Update(SHA1_CTX* context, unsigned char const * data, uint32 len)
{
uint32 i, j;
uint32 i, j;
j = (context->count[0] >> 3) & 63;
if ((context->count[0] += len << 3) < (len << 3)) context->count[1]++;
context->count[1] += (len >> 29);
if ((j + len) > 63) {
memcpy(&context->buffer[j], data, (i = 64-j));
SHA1Transform(context->state, context->buffer);
for ( ; i + 63 < len; i += 64) {
SHA1Transform(context->state, &data[i]);
}
j = 0;
}
else i = 0;
memcpy(&context->buffer[j], &data[i], len - i);
j = (context->count[0] >> 3) & 63;
if ((context->count[0] += len << 3) < (len << 3)) context->count[1]++;
context->count[1] += (len >> 29);
if ((j + len) > 63) {
memcpy(&context->buffer[j], data, (i = 64-j));
SHA1Transform(context->state, context->buffer);
for ( ; i + 63 < len; i += 64) {
SHA1Transform(context->state, &data[i]);
}
j = 0;
}
else i = 0;
memcpy(&context->buffer[j], &data[i], len - i);
}
@@ -146,30 +146,30 @@ void SHA1Update(SHA1_CTX* context, unsigned char const * data, uint32 len)
void SHA1Final(unsigned char digest[20], SHA1_CTX* context)
{
uint32 i;
unsigned char finalcount[8];
uint32 i;
unsigned char finalcount[8];
for (i = 0; i < 8; i++) {
finalcount[i] = (unsigned char)((context->count[(i >= 4 ? 0 : 1)]
>> ((3-(i & 3)) * 8) ) & 255); /* Endian independent */
}
SHA1Update(context, (unsigned char *)"\200", 1);
while ((context->count[0] & 504) != 448) {
SHA1Update(context, (unsigned char *)"\0", 1);
}
SHA1Update(context, finalcount, 8); /* Should cause a SHA1Transform() */
for (i = 0; i < 20; i++) {
digest[i] = (unsigned char)
((context->state[i>>2] >> ((3-(i & 3)) * 8) ) & 255);
}
/* Wipe variables */
i = 0;
memset(context->buffer, 0, 64);
memset(context->state, 0, 20);
memset(context->count, 0, 8);
memset(&finalcount, 0, 8);
for (i = 0; i < 8; i++) {
finalcount[i] = (unsigned char)((context->count[(i >= 4 ? 0 : 1)]
>> ((3-(i & 3)) * 8) ) & 255); /* Endian independent */
}
SHA1Update(context, (unsigned char *)"\200", 1);
while ((context->count[0] & 504) != 448) {
SHA1Update(context, (unsigned char *)"\0", 1);
}
SHA1Update(context, finalcount, 8); /* Should cause a SHA1Transform() */
for (i = 0; i < 20; i++) {
digest[i] = (unsigned char)
((context->state[i>>2] >> ((3-(i & 3)) * 8) ) & 255);
}
/* Wipe variables */
i = 0;
memset(context->buffer, 0, 64);
memset(context->state, 0, 20);
memset(context->count, 0, 8);
memset(&finalcount, 0, 8);
#ifdef SHA1HANDSOFF /* make SHA1Transform overwrite it's own static vars */
SHA1Transform(context->state, context->buffer);
SHA1Transform(context->state, context->buffer);
#endif
}
@@ -177,71 +177,71 @@ void SHA1Final(unsigned char digest[20], SHA1_CTX* context)
int sha1_encrypt(const char *src, int len, char *dest, int size)
{
SHA1_CTX context;
unsigned char tmp[41];
SHA1_CTX context;
unsigned char tmp[41];
if (size < 20)
return -1;
if (size < 20)
return -1;
memset(dest,0,size);
memset(dest,0,size);
SHA1Init(&context);
SHA1Update(&context, (unsigned char *)src, len);
SHA1Final((unsigned char *)dest, &context);
SHA1Init(&context);
SHA1Update(&context, (unsigned char *)src, len);
SHA1Final((unsigned char *)dest, &context);
if(debug) {
memset(tmp,0,41);
binary_to_hex((unsigned char *)dest,(char *)tmp,20);
/* Dont log source if we were encrypting in place :) */
if (memcmp(src, dest, 20) != 0) {
alog("enc_sha1: hashed from [%s] to [%s]",src,tmp);
} else {
alog("enc_sha1: hashed password to [%s]",tmp);
}
}
return 0;
if(debug) {
memset(tmp,0,41);
binary_to_hex((unsigned char *)dest,(char *)tmp,20);
/* Dont log source if we were encrypting in place :) */
if (memcmp(src, dest, 20) != 0) {
alog("enc_sha1: hashed from [%s] to [%s]",src,tmp);
} else {
alog("enc_sha1: hashed password to [%s]",tmp);
}
}
return 0;
}
int sha1_encrypt_in_place(char *buf, int size)
{
char tmp[41];
char tmp[41];
memset(tmp,0,41);
if(sha1_encrypt(buf, strlen(buf), tmp, size)==0) {
memcpy(buf, tmp, size);
} else {
return -1;
}
return 0;
memset(tmp,0,41);
if(sha1_encrypt(buf, strlen(buf), tmp, size)==0) {
memcpy(buf, tmp, size);
} else {
return -1;
}
return 0;
}
int sha1_encrypt_check_len(int passlen, int bufsize)
{
if (bufsize < 20)
fatal("enc_sha1: sha1_check_len(): buffer too small (%d)", bufsize);
return 0;
if (bufsize < 20)
fatal("enc_sha1: sha1_check_len(): buffer too small (%d)", bufsize);
return 0;
}
int sha1_decrypt(const char *src, char *dest, int size)
{
return 0;
return 0;
}
int sha1_check_password(const char *plaintext, const char *password)
{
char buf[BUFSIZE];
char buf[BUFSIZE];
if (sha1_encrypt(plaintext, strlen(plaintext), buf, sizeof(buf)) < 0)
return -1;
if (memcmp(buf, password, 20) == 0)
return 1;
if (sha1_encrypt(plaintext, strlen(plaintext), buf, sizeof(buf)) < 0)
return -1;
if (memcmp(buf, password, 20) == 0)
return 1;
return 0;
return 0;
}
/*************************************************************************/
+15 -15
View File
@@ -45,22 +45,22 @@ class HEHelp : public Module
*/
int do_help(User * u)
{
char *cmd = strtok(NULL, "");
char *cmd = strtok(NULL, "");
if (!cmd) {
notice_help(s_HelpServ, u, HELP_HELP, s_NickServ, s_ChanServ,
s_MemoServ);
if (s_BotServ) {
notice_help(s_HelpServ, u, HELP_HELP_BOT, s_BotServ);
}
if (s_HostServ) {
notice_help(s_HelpServ, u, HELP_HELP_HOST, s_HostServ);
}
moduleDisplayHelp(7, u);
} else {
mod_help_cmd(s_HelpServ, u, HELPSERV, cmd);
}
return MOD_CONT;
if (!cmd) {
notice_help(s_HelpServ, u, HELP_HELP, s_NickServ, s_ChanServ,
s_MemoServ);
if (s_BotServ) {
notice_help(s_HelpServ, u, HELP_HELP_BOT, s_BotServ);
}
if (s_HostServ) {
notice_help(s_HelpServ, u, HELP_HELP_HOST, s_HostServ);
}
moduleDisplayHelp(7, u);
} else {
mod_help_cmd(s_HelpServ, u, HELPSERV, cmd);
}
return MOD_CONT;
}
MODULE_INIT("he_help", HEHelp)
+22 -22
View File
@@ -45,9 +45,9 @@ class HSDel : public Module
**/
void myHostServHelp(User * u)
{
if (is_host_remover(u)) {
notice_lang(s_HostServ, u, HOST_HELP_CMD_DEL);
}
if (is_host_remover(u)) {
notice_lang(s_HostServ, u, HOST_HELP_CMD_DEL);
}
}
/**
@@ -57,25 +57,25 @@ void myHostServHelp(User * u)
**/
int do_del(User * u)
{
NickAlias *na;
char *nick = strtok(NULL, " ");
if (nick) {
if ((na = findnick(nick))) {
if (na->status & NS_VERBOTEN) {
notice_lang(s_HostServ, u, NICK_X_FORBIDDEN, nick);
return MOD_CONT;
}
alog("vHost for user \002%s\002 deleted by oper \002%s\002",
nick, u->nick);
delHostCore(nick);
notice_lang(s_HostServ, u, HOST_DEL, nick);
} else {
notice_lang(s_HostServ, u, HOST_NOREG, nick);
}
} else {
notice_lang(s_HostServ, u, HOST_DEL_SYNTAX, s_HostServ);
}
return MOD_CONT;
NickAlias *na;
char *nick = strtok(NULL, " ");
if (nick) {
if ((na = findnick(nick))) {
if (na->status & NS_VERBOTEN) {
notice_lang(s_HostServ, u, NICK_X_FORBIDDEN, nick);
return MOD_CONT;
}
alog("vHost for user \002%s\002 deleted by oper \002%s\002",
nick, u->nick);
delHostCore(nick);
notice_lang(s_HostServ, u, HOST_DEL, nick);
} else {
notice_lang(s_HostServ, u, HOST_NOREG, nick);
}
} else {
notice_lang(s_HostServ, u, HOST_DEL_SYNTAX, s_HostServ);
}
return MOD_CONT;
}
MODULE_INIT("hs_del", HSDel)
+27 -27
View File
@@ -45,9 +45,9 @@ class HSDelAll : public Module
**/
void myHostServHelp(User * u)
{
if (is_host_remover(u)) {
notice_lang(s_HostServ, u, HOST_HELP_CMD_DELALL);
}
if (is_host_remover(u)) {
notice_lang(s_HostServ, u, HOST_HELP_CMD_DELALL);
}
}
/**
@@ -57,30 +57,30 @@ void myHostServHelp(User * u)
**/
int do_delall(User * u)
{
int i;
char *nick = strtok(NULL, " ");
NickAlias *na;
NickCore *nc;
if (!nick) {
notice_lang(s_HostServ, u, HOST_DELALL_SYNTAX, s_HostServ);
return MOD_CONT;
}
if ((na = findnick(nick))) {
if (na->status & NS_VERBOTEN) {
notice_lang(s_HostServ, u, NICK_X_FORBIDDEN, nick);
return MOD_CONT;
}
nc = na->nc;
for (i = 0; i < nc->aliases.count; i++) {
na = (NickAlias *)nc->aliases.list[i];
delHostCore(na->nick);
}
alog("vHosts for all nicks in group \002%s\002 deleted by oper \002%s\002", nc->display, u->nick);
notice_lang(s_HostServ, u, HOST_DELALL, nc->display);
} else {
notice_lang(s_HostServ, u, HOST_NOREG, nick);
}
return MOD_CONT;
int i;
char *nick = strtok(NULL, " ");
NickAlias *na;
NickCore *nc;
if (!nick) {
notice_lang(s_HostServ, u, HOST_DELALL_SYNTAX, s_HostServ);
return MOD_CONT;
}
if ((na = findnick(nick))) {
if (na->status & NS_VERBOTEN) {
notice_lang(s_HostServ, u, NICK_X_FORBIDDEN, nick);
return MOD_CONT;
}
nc = na->nc;
for (i = 0; i < nc->aliases.count; i++) {
na = (NickAlias *)nc->aliases.list[i];
delHostCore(na->nick);
}
alog("vHosts for all nicks in group \002%s\002 deleted by oper \002%s\002", nc->display, u->nick);
notice_lang(s_HostServ, u, HOST_DELALL, nc->display);
} else {
notice_lang(s_HostServ, u, HOST_NOREG, nick);
}
return MOD_CONT;
}
MODULE_INIT("hs_delall", HSDelAll)
+47 -47
View File
@@ -18,7 +18,7 @@
int do_group(User * u);
void myHostServHelp(User * u);
extern int do_hs_sync(NickCore * nc, char *vIdent, char *hostmask,
char *creator, time_t time);
char *creator, time_t time);
class HSGroup : public Module
@@ -47,7 +47,7 @@ class HSGroup : public Module
**/
void myHostServHelp(User * u)
{
notice_lang(s_HostServ, u, HOST_HELP_CMD_GROUP);
notice_lang(s_HostServ, u, HOST_HELP_CMD_GROUP);
}
/**
@@ -57,57 +57,57 @@ void myHostServHelp(User * u)
**/
int do_group(User * u)
{
NickAlias *na;
HostCore *tmp;
char *vHost = NULL;
char *vIdent = NULL;
char *creator = NULL;
HostCore *head = NULL;
time_t time;
bool found = false;
NickAlias *na;
HostCore *tmp;
char *vHost = NULL;
char *vIdent = NULL;
char *creator = NULL;
HostCore *head = NULL;
time_t time;
bool found = false;
head = hostCoreListHead();
head = hostCoreListHead();
if ((na = findnick(u->nick))) {
if (na->status & NS_IDENTIFIED) {
if ((na = findnick(u->nick))) {
if (na->status & NS_IDENTIFIED) {
tmp = findHostCore(head, u->nick, &found);
if (found) {
if (tmp == NULL) {
tmp = head; /* incase first in list */
} else if (tmp->next) { /* we dont want the previous entry were not inserting! */
tmp = tmp->next; /* jump to the next */
}
tmp = findHostCore(head, u->nick, &found);
if (found) {
if (tmp == NULL) {
tmp = head; /* incase first in list */
} else if (tmp->next) { /* we dont want the previous entry were not inserting! */
tmp = tmp->next; /* jump to the next */
}
vHost = sstrdup(tmp->vHost);
if (tmp->vIdent)
vIdent = sstrdup(tmp->vIdent);
creator = sstrdup(tmp->creator);
time = tmp->time;
vHost = sstrdup(tmp->vHost);
if (tmp->vIdent)
vIdent = sstrdup(tmp->vIdent);
creator = sstrdup(tmp->creator);
time = tmp->time;
do_hs_sync(na->nc, vIdent, vHost, creator, time);
if (tmp->vIdent) {
notice_lang(s_HostServ, u, HOST_IDENT_GROUP,
na->nc->display, vIdent, vHost);
} else {
notice_lang(s_HostServ, u, HOST_GROUP, na->nc->display,
vHost);
}
free(vHost);
if (vIdent)
free(vIdent);
free(creator);
do_hs_sync(na->nc, vIdent, vHost, creator, time);
if (tmp->vIdent) {
notice_lang(s_HostServ, u, HOST_IDENT_GROUP,
na->nc->display, vIdent, vHost);
} else {
notice_lang(s_HostServ, u, HOST_GROUP, na->nc->display,
vHost);
}
free(vHost);
if (vIdent)
free(vIdent);
free(creator);
} else {
notice_lang(s_HostServ, u, HOST_NOT_ASSIGNED);
}
} else {
notice_lang(s_HostServ, u, HOST_ID);
}
} else {
notice_lang(s_HostServ, u, HOST_NOT_REGED);
}
return MOD_CONT;
} else {
notice_lang(s_HostServ, u, HOST_NOT_ASSIGNED);
}
} else {
notice_lang(s_HostServ, u, HOST_ID);
}
} else {
notice_lang(s_HostServ, u, HOST_NOT_REGED);
}
return MOD_CONT;
}
MODULE_INIT("hs_group", HSGroup)
+8 -8
View File
@@ -42,15 +42,15 @@ class HSHelp : public Module
**/
int do_help(User * u)
{
char *cmd = strtok(NULL, "");
char *cmd = strtok(NULL, "");
if (!cmd) {
notice_help(s_HostServ, u, HOST_HELP, s_HostServ);
moduleDisplayHelp(6, u);
} else {
mod_help_cmd(s_HostServ, u, HOSTSERV, cmd);
}
return MOD_CONT;
if (!cmd) {
notice_help(s_HostServ, u, HOST_HELP, s_HostServ);
moduleDisplayHelp(6, u);
} else {
mod_help_cmd(s_HostServ, u, HOSTSERV, cmd);
}
return MOD_CONT;
}
MODULE_INIT("hs_help", HSHelp)
+110 -110
View File
@@ -43,9 +43,9 @@ class HSList : public Module
**/
void myHostServHelp(User * u)
{
if (is_services_oper(u)) {
notice_lang(s_HostServ, u, HOST_HELP_CMD_LIST);
}
if (is_services_oper(u)) {
notice_lang(s_HostServ, u, HOST_HELP_CMD_LIST);
}
}
/**
@@ -55,122 +55,122 @@ void myHostServHelp(User * u)
**/
int listOut(User * u)
{
char *key = strtok(NULL, "");
struct tm *tm;
char buf[BUFSIZE];
int counter = 1;
int from = 0, to = 0;
char *tmp = NULL;
char *s = NULL;
int display_counter = 0;
HostCore *head = NULL;
HostCore *current;
char *key = strtok(NULL, "");
struct tm *tm;
char buf[BUFSIZE];
int counter = 1;
int from = 0, to = 0;
char *tmp = NULL;
char *s = NULL;
int display_counter = 0;
HostCore *head = NULL;
HostCore *current;
head = hostCoreListHead();
head = hostCoreListHead();
current = head;
if (current == NULL)
notice_lang(s_HostServ, u, HOST_EMPTY);
else {
/**
current = head;
if (current == NULL)
notice_lang(s_HostServ, u, HOST_EMPTY);
else {
/**
* Do a check for a range here, then in the next loop
* we'll only display what has been requested..
**/
if (key) {
if (key[0] == '#') {
tmp = myStrGetOnlyToken((key + 1), '-', 0); /* Read FROM out */
if (!tmp) {
notice_lang(s_ChanServ, u, LIST_INCORRECT_RANGE);
return MOD_CONT;
}
for (s = tmp; *s; s++) {
if (!isdigit(*s)) {
free(tmp);
notice_lang(s_ChanServ, u, LIST_INCORRECT_RANGE);
return MOD_CONT;
}
}
from = atoi(tmp);
free(tmp);
tmp = myStrGetTokenRemainder(key, '-', 1); /* Read TO out */
if (!tmp) {
notice_lang(s_ChanServ, u, LIST_INCORRECT_RANGE);
return MOD_CONT;
}
for (s = tmp; *s; s++) {
if (!isdigit(*s)) {
free(tmp);
notice_lang(s_ChanServ, u, LIST_INCORRECT_RANGE);
return MOD_CONT;
}
}
to = atoi(tmp);
free(tmp);
key = NULL;
}
}
if (key) {
if (key[0] == '#') {
tmp = myStrGetOnlyToken((key + 1), '-', 0); /* Read FROM out */
if (!tmp) {
notice_lang(s_ChanServ, u, LIST_INCORRECT_RANGE);
return MOD_CONT;
}
for (s = tmp; *s; s++) {
if (!isdigit(*s)) {
free(tmp);
notice_lang(s_ChanServ, u, LIST_INCORRECT_RANGE);
return MOD_CONT;
}
}
from = atoi(tmp);
free(tmp);
tmp = myStrGetTokenRemainder(key, '-', 1); /* Read TO out */
if (!tmp) {
notice_lang(s_ChanServ, u, LIST_INCORRECT_RANGE);
return MOD_CONT;
}
for (s = tmp; *s; s++) {
if (!isdigit(*s)) {
free(tmp);
notice_lang(s_ChanServ, u, LIST_INCORRECT_RANGE);
return MOD_CONT;
}
}
to = atoi(tmp);
free(tmp);
key = NULL;
}
}
while (current != NULL) {
if (key) {
if (((match_wild_nocase(key, current->nick))
|| (match_wild_nocase(key, current->vHost)))
&& (display_counter < NSListMax)) {
display_counter++;
tm = localtime(&current->time);
strftime_lang(buf, sizeof(buf), u,
STRFTIME_DATE_TIME_FORMAT, tm);
if (current->vIdent) {
notice_lang(s_HostServ, u, HOST_IDENT_ENTRY,
counter, current->nick,
current->vIdent, current->vHost,
current->creator, buf);
} else {
notice_lang(s_HostServ, u, HOST_ENTRY, counter,
current->nick, current->vHost,
current->creator, buf);
}
}
} else {
/**
while (current != NULL) {
if (key) {
if (((match_wild_nocase(key, current->nick))
|| (match_wild_nocase(key, current->vHost)))
&& (display_counter < NSListMax)) {
display_counter++;
tm = localtime(&current->time);
strftime_lang(buf, sizeof(buf), u,
STRFTIME_DATE_TIME_FORMAT, tm);
if (current->vIdent) {
notice_lang(s_HostServ, u, HOST_IDENT_ENTRY,
counter, current->nick,
current->vIdent, current->vHost,
current->creator, buf);
} else {
notice_lang(s_HostServ, u, HOST_ENTRY, counter,
current->nick, current->vHost,
current->creator, buf);
}
}
} else {
/**
* List the host if its in the display range, and not more
* than NSListMax records have been displayed...
**/
if ((((counter >= from) && (counter <= to))
|| ((from == 0) && (to == 0)))
&& (display_counter < NSListMax)) {
display_counter++;
tm = localtime(&current->time);
strftime_lang(buf, sizeof(buf), u,
STRFTIME_DATE_TIME_FORMAT, tm);
if (current->vIdent) {
notice_lang(s_HostServ, u, HOST_IDENT_ENTRY,
counter, current->nick,
current->vIdent, current->vHost,
current->creator, buf);
} else {
notice_lang(s_HostServ, u, HOST_ENTRY, counter,
current->nick, current->vHost,
current->creator, buf);
}
}
}
counter++;
current = current->next;
}
if (key) {
notice_lang(s_HostServ, u, HOST_LIST_KEY_FOOTER, key,
display_counter);
} else {
if (from != 0) {
notice_lang(s_HostServ, u, HOST_LIST_RANGE_FOOTER, from,
to);
} else {
notice_lang(s_HostServ, u, HOST_LIST_FOOTER,
display_counter);
}
}
}
return MOD_CONT;
if ((((counter >= from) && (counter <= to))
|| ((from == 0) && (to == 0)))
&& (display_counter < NSListMax)) {
display_counter++;
tm = localtime(&current->time);
strftime_lang(buf, sizeof(buf), u,
STRFTIME_DATE_TIME_FORMAT, tm);
if (current->vIdent) {
notice_lang(s_HostServ, u, HOST_IDENT_ENTRY,
counter, current->nick,
current->vIdent, current->vHost,
current->creator, buf);
} else {
notice_lang(s_HostServ, u, HOST_ENTRY, counter,
current->nick, current->vHost,
current->creator, buf);
}
}
}
counter++;
current = current->next;
}
if (key) {
notice_lang(s_HostServ, u, HOST_LIST_KEY_FOOTER, key,
display_counter);
} else {
if (from != 0) {
notice_lang(s_HostServ, u, HOST_LIST_RANGE_FOOTER, from,
to);
} else {
notice_lang(s_HostServ, u, HOST_LIST_FOOTER,
display_counter);
}
}
}
return MOD_CONT;
}
MODULE_INIT("hs_list", HSList)
+19 -19
View File
@@ -44,7 +44,7 @@ class HSOff : public Module
**/
void myHostServHelp(User * u)
{
notice_lang(s_HostServ, u, HOST_HELP_CMD_OFF);
notice_lang(s_HostServ, u, HOST_HELP_CMD_OFF);
}
/**
@@ -54,24 +54,24 @@ void myHostServHelp(User * u)
**/
int do_off(User * u)
{
NickAlias *na;
char *vhost;
char *vident = NULL;
if ((na = findnick(u->nick))) {
if (na->status & NS_IDENTIFIED) {
vhost = getvHost(u->nick);
vident = getvIdent(u->nick);
if (vhost == NULL && vident == NULL)
notice_lang(s_HostServ, u, HOST_NOT_ASSIGNED);
else
ircdproto->SendVhostDel(u);
} else {
notice_lang(s_HostServ, u, HOST_ID);
}
} else {
notice_lang(s_HostServ, u, HOST_NOT_REGED);
}
return MOD_CONT;
NickAlias *na;
char *vhost;
char *vident = NULL;
if ((na = findnick(u->nick))) {
if (na->status & NS_IDENTIFIED) {
vhost = getvHost(u->nick);
vident = getvIdent(u->nick);
if (vhost == NULL && vident == NULL)
notice_lang(s_HostServ, u, HOST_NOT_ASSIGNED);
else
ircdproto->SendVhostDel(u);
} else {
notice_lang(s_HostServ, u, HOST_ID);
}
} else {
notice_lang(s_HostServ, u, HOST_NOT_REGED);
}
return MOD_CONT;
}
MODULE_INIT("hs_off", HSOff)
+34 -34
View File
@@ -44,7 +44,7 @@ class HSOn : public Module
**/
void myHostServHelp(User * u)
{
notice_lang(s_HostServ, u, HOST_HELP_CMD_ON);
notice_lang(s_HostServ, u, HOST_HELP_CMD_ON);
}
/**
@@ -54,39 +54,39 @@ void myHostServHelp(User * u)
**/
int do_on(User * u)
{
NickAlias *na;
char *vHost;
char *vIdent = NULL;
if ((na = findnick(u->nick))) {
if (na->status & NS_IDENTIFIED) {
vHost = getvHost(u->nick);
vIdent = getvIdent(u->nick);
if (vHost == NULL) {
notice_lang(s_HostServ, u, HOST_NOT_ASSIGNED);
} else {
if (vIdent) {
notice_lang(s_HostServ, u, HOST_IDENT_ACTIVATED,
vIdent, vHost);
} else {
notice_lang(s_HostServ, u, HOST_ACTIVATED, vHost);
}
ircdproto->SendVhost(u->nick, vIdent, vHost);
if (ircd->vhost) {
u->vhost = sstrdup(vHost);
}
if (ircd->vident) {
if (vIdent)
u->vident = sstrdup(vIdent);
}
set_lastmask(u);
}
} else {
notice_lang(s_HostServ, u, HOST_ID);
}
} else {
notice_lang(s_HostServ, u, HOST_NOT_REGED);
}
return MOD_CONT;
NickAlias *na;
char *vHost;
char *vIdent = NULL;
if ((na = findnick(u->nick))) {
if (na->status & NS_IDENTIFIED) {
vHost = getvHost(u->nick);
vIdent = getvIdent(u->nick);
if (vHost == NULL) {
notice_lang(s_HostServ, u, HOST_NOT_ASSIGNED);
} else {
if (vIdent) {
notice_lang(s_HostServ, u, HOST_IDENT_ACTIVATED,
vIdent, vHost);
} else {
notice_lang(s_HostServ, u, HOST_ACTIVATED, vHost);
}
ircdproto->SendVhost(u->nick, vIdent, vHost);
if (ircd->vhost) {
u->vhost = sstrdup(vHost);
}
if (ircd->vident) {
if (vIdent)
u->vident = sstrdup(vIdent);
}
set_lastmask(u);
}
} else {
notice_lang(s_HostServ, u, HOST_ID);
}
} else {
notice_lang(s_HostServ, u, HOST_NOT_REGED);
}
return MOD_CONT;
}
MODULE_INIT("hs_on", HSOn)
+101 -101
View File
@@ -44,9 +44,9 @@ class HSSet : public Module
**/
void myHostServHelp(User * u)
{
if (is_host_setter(u)) {
notice_lang(s_HostServ, u, HOST_HELP_CMD_SET);
}
if (is_host_setter(u)) {
notice_lang(s_HostServ, u, HOST_HELP_CMD_SET);
}
}
/**
@@ -56,112 +56,112 @@ void myHostServHelp(User * u)
**/
int myDoSet(User * u)
{
char *nick = strtok(NULL, " ");
char *rawhostmask = strtok(NULL, " ");
char *hostmask = (char *)smalloc(HOSTMAX);
char *nick = strtok(NULL, " ");
char *rawhostmask = strtok(NULL, " ");
char *hostmask = (char *)smalloc(HOSTMAX);
NickAlias *na;
int32 tmp_time;
char *s;
NickAlias *na;
int32 tmp_time;
char *s;
char *vIdent = NULL;
char *vIdent = NULL;
if (!nick || !rawhostmask) {
notice_lang(s_HostServ, u, HOST_SET_SYNTAX, s_HostServ);
free(hostmask);
return MOD_CONT;
}
if (!nick || !rawhostmask) {
notice_lang(s_HostServ, u, HOST_SET_SYNTAX, s_HostServ);
free(hostmask);
return MOD_CONT;
}
vIdent = myStrGetOnlyToken(rawhostmask, '@', 0); /* Get the first substring, @ as delimiter */
if (vIdent) {
rawhostmask = myStrGetTokenRemainder(rawhostmask, '@', 1); /* get the remaining string */
if (!rawhostmask) {
notice_lang(s_HostServ, u, HOST_SET_SYNTAX, s_HostServ);
free(vIdent);
free(hostmask);
return MOD_CONT;
}
if (strlen(vIdent) > USERMAX - 1) {
notice_lang(s_HostServ, u, HOST_SET_IDENTTOOLONG, USERMAX);
free(vIdent);
free(rawhostmask);
free(hostmask);
return MOD_CONT;
} else {
for (s = vIdent; *s; s++) {
if (!isvalidchar(*s)) {
notice_lang(s_HostServ, u, HOST_SET_IDENT_ERROR);
free(vIdent);
free(rawhostmask);
free(hostmask);
return MOD_CONT;
}
}
}
if (!ircd->vident) {
notice_lang(s_HostServ, u, HOST_NO_VIDENT);
free(vIdent);
free(rawhostmask);
free(hostmask);
return MOD_CONT;
}
}
if (strlen(rawhostmask) < HOSTMAX - 1)
snprintf(hostmask, HOSTMAX - 1, "%s", rawhostmask);
else {
notice_lang(s_HostServ, u, HOST_SET_TOOLONG, HOSTMAX);
if (vIdent) {
free(vIdent);
free(rawhostmask);
}
free(hostmask);
return MOD_CONT;
}
vIdent = myStrGetOnlyToken(rawhostmask, '@', 0); /* Get the first substring, @ as delimiter */
if (vIdent) {
rawhostmask = myStrGetTokenRemainder(rawhostmask, '@', 1); /* get the remaining string */
if (!rawhostmask) {
notice_lang(s_HostServ, u, HOST_SET_SYNTAX, s_HostServ);
free(vIdent);
free(hostmask);
return MOD_CONT;
}
if (strlen(vIdent) > USERMAX - 1) {
notice_lang(s_HostServ, u, HOST_SET_IDENTTOOLONG, USERMAX);
free(vIdent);
free(rawhostmask);
free(hostmask);
return MOD_CONT;
} else {
for (s = vIdent; *s; s++) {
if (!isvalidchar(*s)) {
notice_lang(s_HostServ, u, HOST_SET_IDENT_ERROR);
free(vIdent);
free(rawhostmask);
free(hostmask);
return MOD_CONT;
}
}
}
if (!ircd->vident) {
notice_lang(s_HostServ, u, HOST_NO_VIDENT);
free(vIdent);
free(rawhostmask);
free(hostmask);
return MOD_CONT;
}
}
if (strlen(rawhostmask) < HOSTMAX - 1)
snprintf(hostmask, HOSTMAX - 1, "%s", rawhostmask);
else {
notice_lang(s_HostServ, u, HOST_SET_TOOLONG, HOSTMAX);
if (vIdent) {
free(vIdent);
free(rawhostmask);
}
free(hostmask);
return MOD_CONT;
}
if (!isValidHost(hostmask, 3)) {
notice_lang(s_HostServ, u, HOST_SET_ERROR);
if (vIdent) {
free(vIdent);
free(rawhostmask);
}
free(hostmask);
return MOD_CONT;
}
if (!isValidHost(hostmask, 3)) {
notice_lang(s_HostServ, u, HOST_SET_ERROR);
if (vIdent) {
free(vIdent);
free(rawhostmask);
}
free(hostmask);
return MOD_CONT;
}
tmp_time = time(NULL);
tmp_time = time(NULL);
if ((na = findnick(nick))) {
if (na->status & NS_VERBOTEN) {
notice_lang(s_HostServ, u, NICK_X_FORBIDDEN, nick);
if (vIdent) {
free(vIdent);
free(rawhostmask);
}
free(hostmask);
return MOD_CONT;
}
if (vIdent && ircd->vident) {
alog("vHost for user \002%s\002 set to \002%s@%s\002 by oper \002%s\002", nick, vIdent, hostmask, u->nick);
} else {
alog("vHost for user \002%s\002 set to \002%s\002 by oper \002%s\002", nick, hostmask, u->nick);
}
addHostCore(nick, vIdent, hostmask, u->nick, tmp_time);
if (vIdent) {
notice_lang(s_HostServ, u, HOST_IDENT_SET, nick, vIdent,
hostmask);
} else {
notice_lang(s_HostServ, u, HOST_SET, nick, hostmask);
}
} else {
notice_lang(s_HostServ, u, HOST_NOREG, nick);
}
free(hostmask);
if (vIdent) {
free(vIdent);
free(rawhostmask);
}
return MOD_CONT;
if ((na = findnick(nick))) {
if (na->status & NS_VERBOTEN) {
notice_lang(s_HostServ, u, NICK_X_FORBIDDEN, nick);
if (vIdent) {
free(vIdent);
free(rawhostmask);
}
free(hostmask);
return MOD_CONT;
}
if (vIdent && ircd->vident) {
alog("vHost for user \002%s\002 set to \002%s@%s\002 by oper \002%s\002", nick, vIdent, hostmask, u->nick);
} else {
alog("vHost for user \002%s\002 set to \002%s\002 by oper \002%s\002", nick, hostmask, u->nick);
}
addHostCore(nick, vIdent, hostmask, u->nick, tmp_time);
if (vIdent) {
notice_lang(s_HostServ, u, HOST_IDENT_SET, nick, vIdent,
hostmask);
} else {
notice_lang(s_HostServ, u, HOST_SET, nick, hostmask);
}
} else {
notice_lang(s_HostServ, u, HOST_NOREG, nick);
}
free(hostmask);
if (vIdent) {
free(vIdent);
free(rawhostmask);
}
return MOD_CONT;
}
MODULE_INIT("hs_set", HSSet)
+102 -102
View File
@@ -18,7 +18,7 @@
int do_setall(User * u);
void myHostServHelp(User * u);
extern int do_hs_sync(NickCore * nc, char *vIdent, char *hostmask,
char *creator, time_t time);
char *creator, time_t time);
class HSSetAll : public Module
{
@@ -45,9 +45,9 @@ class HSSetAll : public Module
**/
void myHostServHelp(User * u)
{
if (is_host_setter(u)) {
notice_lang(s_HostServ, u, HOST_HELP_CMD_SETALL);
}
if (is_host_setter(u)) {
notice_lang(s_HostServ, u, HOST_HELP_CMD_SETALL);
}
}
/**
@@ -57,112 +57,112 @@ void myHostServHelp(User * u)
**/
int do_setall(User * u)
{
char *nick = (char *)strtok(NULL, " ");
char *rawhostmask = strtok(NULL, " ");
char *hostmask = (char *)smalloc(HOSTMAX);
char *nick = (char *)strtok(NULL, " ");
char *rawhostmask = strtok(NULL, " ");
char *hostmask = (char *)smalloc(HOSTMAX);
NickAlias *na;
int32 tmp_time;
char *s;
NickAlias *na;
int32 tmp_time;
char *s;
char *vIdent = NULL;
char *vIdent = NULL;
if (!nick || !rawhostmask) {
notice_lang(s_HostServ, u, HOST_SETALL_SYNTAX, s_HostServ);
free(hostmask);
return MOD_CONT;
}
if (!nick || !rawhostmask) {
notice_lang(s_HostServ, u, HOST_SETALL_SYNTAX, s_HostServ);
free(hostmask);
return MOD_CONT;
}
vIdent = myStrGetOnlyToken(rawhostmask, '@', 0); /* Get the first substring, @ as delimiter */
if (vIdent) {
rawhostmask = myStrGetTokenRemainder(rawhostmask, '@', 1); /* get the remaining string */
if (!rawhostmask) {
notice_lang(s_HostServ, u, HOST_SETALL_SYNTAX, s_HostServ);
free(vIdent);
free(hostmask);
return MOD_CONT;
}
if (strlen(vIdent) > USERMAX - 1) {
notice_lang(s_HostServ, u, HOST_SET_IDENTTOOLONG, USERMAX);
free(vIdent);
free(rawhostmask);
free(hostmask);
return MOD_CONT;
} else {
for (s = vIdent; *s; s++) {
if (!isvalidchar(*s)) {
notice_lang(s_HostServ, u, HOST_SET_IDENT_ERROR);
free(vIdent);
free(rawhostmask);
free(hostmask);
return MOD_CONT;
}
}
}
if (!ircd->vident) {
notice_lang(s_HostServ, u, HOST_NO_VIDENT);
free(vIdent);
free(rawhostmask);
free(hostmask);
return MOD_CONT;
}
}
vIdent = myStrGetOnlyToken(rawhostmask, '@', 0); /* Get the first substring, @ as delimiter */
if (vIdent) {
rawhostmask = myStrGetTokenRemainder(rawhostmask, '@', 1); /* get the remaining string */
if (!rawhostmask) {
notice_lang(s_HostServ, u, HOST_SETALL_SYNTAX, s_HostServ);
free(vIdent);
free(hostmask);
return MOD_CONT;
}
if (strlen(vIdent) > USERMAX - 1) {
notice_lang(s_HostServ, u, HOST_SET_IDENTTOOLONG, USERMAX);
free(vIdent);
free(rawhostmask);
free(hostmask);
return MOD_CONT;
} else {
for (s = vIdent; *s; s++) {
if (!isvalidchar(*s)) {
notice_lang(s_HostServ, u, HOST_SET_IDENT_ERROR);
free(vIdent);
free(rawhostmask);
free(hostmask);
return MOD_CONT;
}
}
}
if (!ircd->vident) {
notice_lang(s_HostServ, u, HOST_NO_VIDENT);
free(vIdent);
free(rawhostmask);
free(hostmask);
return MOD_CONT;
}
}
if (strlen(rawhostmask) < HOSTMAX - 1)
snprintf(hostmask, HOSTMAX - 1, "%s", rawhostmask);
else {
notice_lang(s_HostServ, u, HOST_SET_TOOLONG, HOSTMAX);
if (vIdent) {
free(vIdent);
free(rawhostmask);
}
free(hostmask);
return MOD_CONT;
}
if (strlen(rawhostmask) < HOSTMAX - 1)
snprintf(hostmask, HOSTMAX - 1, "%s", rawhostmask);
else {
notice_lang(s_HostServ, u, HOST_SET_TOOLONG, HOSTMAX);
if (vIdent) {
free(vIdent);
free(rawhostmask);
}
free(hostmask);
return MOD_CONT;
}
if (!isValidHost(hostmask, 3)) {
notice_lang(s_HostServ, u, HOST_SET_ERROR);
if (vIdent) {
free(vIdent);
free(rawhostmask);
}
free(hostmask);
return MOD_CONT;
}
if (!isValidHost(hostmask, 3)) {
notice_lang(s_HostServ, u, HOST_SET_ERROR);
if (vIdent) {
free(vIdent);
free(rawhostmask);
}
free(hostmask);
return MOD_CONT;
}
tmp_time = time(NULL);
tmp_time = time(NULL);
if ((na = findnick(nick))) {
if (na->status & NS_VERBOTEN) {
notice_lang(s_HostServ, u, NICK_X_FORBIDDEN, nick);
if (vIdent) {
free(vIdent);
free(rawhostmask);
}
free(hostmask);
return MOD_CONT;
}
if (vIdent && ircd->vident) {
alog("vHost for all nicks in group \002%s\002 set to \002%s@%s\002 by oper \002%s\002", nick, vIdent, hostmask, u->nick);
} else {
alog("vHost for all nicks in group \002%s\002 set to \002%s\002 by oper \002%s\002", nick, hostmask, u->nick);
}
do_hs_sync(na->nc, vIdent, hostmask, u->nick, tmp_time);
if (vIdent) {
notice_lang(s_HostServ, u, HOST_IDENT_SETALL, nick, vIdent,
hostmask);
} else {
notice_lang(s_HostServ, u, HOST_SETALL, nick, hostmask);
}
} else {
notice_lang(s_HostServ, u, HOST_NOREG, nick);
}
if (vIdent) {
free(vIdent);
free(rawhostmask);
}
free(hostmask);
return MOD_CONT;
if ((na = findnick(nick))) {
if (na->status & NS_VERBOTEN) {
notice_lang(s_HostServ, u, NICK_X_FORBIDDEN, nick);
if (vIdent) {
free(vIdent);
free(rawhostmask);
}
free(hostmask);
return MOD_CONT;
}
if (vIdent && ircd->vident) {
alog("vHost for all nicks in group \002%s\002 set to \002%s@%s\002 by oper \002%s\002", nick, vIdent, hostmask, u->nick);
} else {
alog("vHost for all nicks in group \002%s\002 set to \002%s\002 by oper \002%s\002", nick, hostmask, u->nick);
}
do_hs_sync(na->nc, vIdent, hostmask, u->nick, tmp_time);
if (vIdent) {
notice_lang(s_HostServ, u, HOST_IDENT_SETALL, nick, vIdent,
hostmask);
} else {
notice_lang(s_HostServ, u, HOST_SETALL, nick, hostmask);
}
} else {
notice_lang(s_HostServ, u, HOST_NOREG, nick);
}
if (vIdent) {
free(vIdent);
free(rawhostmask);
}
free(hostmask);
return MOD_CONT;
}
MODULE_INIT("hs_setall", HSSetAll)
+33 -33
View File
@@ -42,7 +42,7 @@ class MSCancel : public Module
**/
void myMemoServHelp(User * u)
{
notice_lang(s_MemoServ, u, MEMO_HELP_CMD_CANCEL);
notice_lang(s_MemoServ, u, MEMO_HELP_CMD_CANCEL);
}
/**
@@ -52,43 +52,43 @@ void myMemoServHelp(User * u)
**/
int do_cancel(User * u)
{
int ischan;
int isforbid;
char *name = strtok(NULL, " ");
MemoInfo *mi;
int ischan;
int isforbid;
char *name = strtok(NULL, " ");
MemoInfo *mi;
if (!name) {
syntax_error(s_MemoServ, u, "CANCEL", MEMO_CANCEL_SYNTAX);
if (!name) {
syntax_error(s_MemoServ, u, "CANCEL", MEMO_CANCEL_SYNTAX);
} else if (!nick_recognized(u)) {
notice_lang(s_MemoServ, u, NICK_IDENTIFY_REQUIRED, s_NickServ);
} else if (!nick_recognized(u)) {
notice_lang(s_MemoServ, u, NICK_IDENTIFY_REQUIRED, s_NickServ);
} else if (!(mi = getmemoinfo(name, &ischan, &isforbid))) {
if (isforbid) {
notice_lang(s_MemoServ, u,
ischan ? CHAN_X_FORBIDDEN :
NICK_X_FORBIDDEN, name);
} else {
notice_lang(s_MemoServ, u,
ischan ? CHAN_X_NOT_REGISTERED :
NICK_X_NOT_REGISTERED, name);
}
} else {
int i;
} else if (!(mi = getmemoinfo(name, &ischan, &isforbid))) {
if (isforbid) {
notice_lang(s_MemoServ, u,
ischan ? CHAN_X_FORBIDDEN :
NICK_X_FORBIDDEN, name);
} else {
notice_lang(s_MemoServ, u,
ischan ? CHAN_X_NOT_REGISTERED :
NICK_X_NOT_REGISTERED, name);
}
} else {
int i;
for (i = mi->memocount - 1; i >= 0; i--) {
if ((mi->memos[i].flags & MF_UNREAD)
&& !stricmp(mi->memos[i].sender, u->na->nc->display)
&& (!(mi->memos[i].flags & MF_NOTIFYS))) {
delmemo(mi, mi->memos[i].number);
notice_lang(s_MemoServ, u, MEMO_CANCELLED, name);
return MOD_CONT;
}
}
for (i = mi->memocount - 1; i >= 0; i--) {
if ((mi->memos[i].flags & MF_UNREAD)
&& !stricmp(mi->memos[i].sender, u->na->nc->display)
&& (!(mi->memos[i].flags & MF_NOTIFYS))) {
delmemo(mi, mi->memos[i].number);
notice_lang(s_MemoServ, u, MEMO_CANCELLED, name);
return MOD_CONT;
}
}
notice_lang(s_MemoServ, u, MEMO_CANCEL_NONE);
}
return MOD_CONT;
notice_lang(s_MemoServ, u, MEMO_CANCEL_NONE);
}
return MOD_CONT;
}
MODULE_INIT("ms_cancel", MSCancel)
+41 -41
View File
@@ -42,7 +42,7 @@ class MSCheck : public Module
**/
void myMemoServHelp(User * u)
{
notice_lang(s_MemoServ, u, MEMO_HELP_CMD_CHECK);
notice_lang(s_MemoServ, u, MEMO_HELP_CMD_CHECK);
}
/**
@@ -52,56 +52,56 @@ void myMemoServHelp(User * u)
**/
int do_memocheck(User * u)
{
NickAlias *na = NULL;
MemoInfo *mi = NULL;
int i, found = 0;
char *recipient = strtok(NULL, "");
struct tm *tm;
char timebuf[64];
NickAlias *na = NULL;
MemoInfo *mi = NULL;
int i, found = 0;
char *recipient = strtok(NULL, "");
struct tm *tm;
char timebuf[64];
if (!recipient) {
syntax_error(s_MemoServ, u, "CHECK", MEMO_CHECK_SYNTAX);
return MOD_CONT;
} else if (!nick_recognized(u)) {
notice_lang(s_MemoServ, u, NICK_IDENTIFY_REQUIRED, s_NickServ);
return MOD_CONT;
} else if (!(na = findnick(recipient))) {
notice_lang(s_MemoServ, u, NICK_X_NOT_REGISTERED, recipient);
return MOD_CONT;
}
if (!recipient) {
syntax_error(s_MemoServ, u, "CHECK", MEMO_CHECK_SYNTAX);
return MOD_CONT;
} else if (!nick_recognized(u)) {
notice_lang(s_MemoServ, u, NICK_IDENTIFY_REQUIRED, s_NickServ);
return MOD_CONT;
} else if (!(na = findnick(recipient))) {
notice_lang(s_MemoServ, u, NICK_X_NOT_REGISTERED, recipient);
return MOD_CONT;
}
if ((na->status & NS_VERBOTEN)) {
notice_lang(s_MemoServ, u, NICK_X_FORBIDDEN, recipient);
return MOD_CONT;
}
if ((na->status & NS_VERBOTEN)) {
notice_lang(s_MemoServ, u, NICK_X_FORBIDDEN, recipient);
return MOD_CONT;
}
mi = &na->nc->memos;
mi = &na->nc->memos;
/* Okay, I know this looks strange but we wanna get the LAST memo, so we
have to loop backwards */
have to loop backwards */
for (i = (mi->memocount - 1); i >= 0; i--) {
if (!stricmp(mi->memos[i].sender, u->na->nc->display)) {
found = 1; /* Yes, we've found the memo */
for (i = (mi->memocount - 1); i >= 0; i--) {
if (!stricmp(mi->memos[i].sender, u->na->nc->display)) {
found = 1; /* Yes, we've found the memo */
tm = localtime(&mi->memos[i].time);
strftime_lang(timebuf, sizeof(timebuf), u,
STRFTIME_DATE_TIME_FORMAT, tm);
tm = localtime(&mi->memos[i].time);
strftime_lang(timebuf, sizeof(timebuf), u,
STRFTIME_DATE_TIME_FORMAT, tm);
if (mi->memos[i].flags & MF_UNREAD)
notice_lang(s_MemoServ, u, MEMO_CHECK_NOT_READ, na->nick,
timebuf);
else
notice_lang(s_MemoServ, u, MEMO_CHECK_READ, na->nick,
timebuf);
break;
}
}
if (mi->memos[i].flags & MF_UNREAD)
notice_lang(s_MemoServ, u, MEMO_CHECK_NOT_READ, na->nick,
timebuf);
else
notice_lang(s_MemoServ, u, MEMO_CHECK_READ, na->nick,
timebuf);
break;
}
}
if (!found)
notice_lang(s_MemoServ, u, MEMO_CHECK_NO_MEMO, na->nick);
if (!found)
notice_lang(s_MemoServ, u, MEMO_CHECK_NO_MEMO, na->nick);
return MOD_CONT;
return MOD_CONT;
}
MODULE_INIT("ms_check", MSCheck)
+121 -121
View File
@@ -43,7 +43,7 @@ class MSDel : public Module
**/
void myMemoServHelp(User * u)
{
notice_lang(s_MemoServ, u, MEMO_HELP_CMD_DEL);
notice_lang(s_MemoServ, u, MEMO_HELP_CMD_DEL);
}
/**
@@ -53,105 +53,105 @@ void myMemoServHelp(User * u)
**/
int do_del(User * u)
{
MemoInfo *mi;
ChannelInfo *ci;
char *numstr = strtok(NULL, ""), *chan = NULL;
int last, last0, i;
char buf[BUFSIZE], *end;
int delcount, count, left;
MemoInfo *mi;
ChannelInfo *ci;
char *numstr = strtok(NULL, ""), *chan = NULL;
int last, last0, i;
char buf[BUFSIZE], *end;
int delcount, count, left;
if (numstr && *numstr == '#') {
chan = strtok(numstr, " ");
numstr = strtok(NULL, "");
if (!(ci = cs_findchan(chan))) {
notice_lang(s_MemoServ, u, CHAN_X_NOT_REGISTERED, chan);
return MOD_CONT;
} else if (readonly) {
notice_lang(s_MemoServ, u, READ_ONLY_MODE);
return MOD_CONT;
} else if (ci->flags & CI_VERBOTEN) {
notice_lang(s_MemoServ, u, CHAN_X_FORBIDDEN, chan);
return MOD_CONT;
} else if (!check_access(u, ci, CA_MEMO)) {
notice_lang(s_MemoServ, u, ACCESS_DENIED);
return MOD_CONT;
}
mi = &ci->memos;
} else {
if (!nick_identified(u)) {
notice_lang(s_MemoServ, u, NICK_IDENTIFY_REQUIRED, s_NickServ);
return MOD_CONT;
}
mi = &u->na->nc->memos;
}
if (!numstr
|| (!isdigit(*numstr) && stricmp(numstr, "ALL") != 0
&& stricmp(numstr, "LAST") != 0)) {
syntax_error(s_MemoServ, u, "DEL", MEMO_DEL_SYNTAX);
} else if (mi->memocount == 0) {
if (chan)
notice_lang(s_MemoServ, u, MEMO_X_HAS_NO_MEMOS, chan);
else
notice_lang(s_MemoServ, u, MEMO_HAVE_NO_MEMOS);
} else {
if (isdigit(*numstr)) {
/* Delete a specific memo or memos. */
last = -1; /* Last memo deleted */
last0 = -1; /* Beginning of range of last memos deleted */
end = buf;
left = sizeof(buf);
delcount =
process_numlist(numstr, &count, del_memo_callback, u, mi,
&last, &last0, &end, &left);
if (last != -1) {
/* Some memos got deleted; tell them which ones. */
if (delcount > 1) {
if (last0 != last)
end += snprintf(end, sizeof(buf) - (end - buf),
",%d-%d", last0, last);
else
end += snprintf(end, sizeof(buf) - (end - buf),
",%d", last);
/* "buf+1" here because *buf == ',' */
notice_lang(s_MemoServ, u, MEMO_DELETED_SEVERAL,
buf + 1);
} else {
notice_lang(s_MemoServ, u, MEMO_DELETED_ONE, last);
}
} else {
/* No memos were deleted. Tell them so. */
if (count == 1)
notice_lang(s_MemoServ, u, MEMO_DOES_NOT_EXIST,
atoi(numstr));
else
notice_lang(s_MemoServ, u, MEMO_DELETED_NONE);
}
} else if (stricmp(numstr, "LAST") == 0) {
/* Delete last memo. */
for (i = 0; i < mi->memocount; i++)
last = mi->memos[i].number;
delmemo(mi, last);
notice_lang(s_MemoServ, u, MEMO_DELETED_ONE, last);
} else {
/* Delete all memos. */
for (i = 0; i < mi->memocount; i++) {
free(mi->memos[i].text);
moduleCleanStruct(&mi->memos[i].moduleData);
}
free(mi->memos);
mi->memos = NULL;
mi->memocount = 0;
if (chan)
notice_lang(s_MemoServ, u, MEMO_CHAN_DELETED_ALL, chan);
else
notice_lang(s_MemoServ, u, MEMO_DELETED_ALL);
}
if (numstr && *numstr == '#') {
chan = strtok(numstr, " ");
numstr = strtok(NULL, "");
if (!(ci = cs_findchan(chan))) {
notice_lang(s_MemoServ, u, CHAN_X_NOT_REGISTERED, chan);
return MOD_CONT;
} else if (readonly) {
notice_lang(s_MemoServ, u, READ_ONLY_MODE);
return MOD_CONT;
} else if (ci->flags & CI_VERBOTEN) {
notice_lang(s_MemoServ, u, CHAN_X_FORBIDDEN, chan);
return MOD_CONT;
} else if (!check_access(u, ci, CA_MEMO)) {
notice_lang(s_MemoServ, u, ACCESS_DENIED);
return MOD_CONT;
}
mi = &ci->memos;
} else {
if (!nick_identified(u)) {
notice_lang(s_MemoServ, u, NICK_IDENTIFY_REQUIRED, s_NickServ);
return MOD_CONT;
}
mi = &u->na->nc->memos;
}
if (!numstr
|| (!isdigit(*numstr) && stricmp(numstr, "ALL") != 0
&& stricmp(numstr, "LAST") != 0)) {
syntax_error(s_MemoServ, u, "DEL", MEMO_DEL_SYNTAX);
} else if (mi->memocount == 0) {
if (chan)
notice_lang(s_MemoServ, u, MEMO_X_HAS_NO_MEMOS, chan);
else
notice_lang(s_MemoServ, u, MEMO_HAVE_NO_MEMOS);
} else {
if (isdigit(*numstr)) {
/* Delete a specific memo or memos. */
last = -1; /* Last memo deleted */
last0 = -1; /* Beginning of range of last memos deleted */
end = buf;
left = sizeof(buf);
delcount =
process_numlist(numstr, &count, del_memo_callback, u, mi,
&last, &last0, &end, &left);
if (last != -1) {
/* Some memos got deleted; tell them which ones. */
if (delcount > 1) {
if (last0 != last)
end += snprintf(end, sizeof(buf) - (end - buf),
",%d-%d", last0, last);
else
end += snprintf(end, sizeof(buf) - (end - buf),
",%d", last);
/* "buf+1" here because *buf == ',' */
notice_lang(s_MemoServ, u, MEMO_DELETED_SEVERAL,
buf + 1);
} else {
notice_lang(s_MemoServ, u, MEMO_DELETED_ONE, last);
}
} else {
/* No memos were deleted. Tell them so. */
if (count == 1)
notice_lang(s_MemoServ, u, MEMO_DOES_NOT_EXIST,
atoi(numstr));
else
notice_lang(s_MemoServ, u, MEMO_DELETED_NONE);
}
} else if (stricmp(numstr, "LAST") == 0) {
/* Delete last memo. */
for (i = 0; i < mi->memocount; i++)
last = mi->memos[i].number;
delmemo(mi, last);
notice_lang(s_MemoServ, u, MEMO_DELETED_ONE, last);
} else {
/* Delete all memos. */
for (i = 0; i < mi->memocount; i++) {
free(mi->memos[i].text);
moduleCleanStruct(&mi->memos[i].moduleData);
}
free(mi->memos);
mi->memos = NULL;
mi->memocount = 0;
if (chan)
notice_lang(s_MemoServ, u, MEMO_CHAN_DELETED_ALL, chan);
else
notice_lang(s_MemoServ, u, MEMO_DELETED_ALL);
}
/* Reset the order */
for (i = 0; i < mi->memocount; i++)
mi->memos[i].number = i + 1;
}
return MOD_CONT;
/* Reset the order */
for (i = 0; i < mi->memocount; i++)
mi->memos[i].number = i + 1;
}
return MOD_CONT;
}
/**
@@ -163,30 +163,30 @@ int do_del(User * u)
*/
int del_memo_callback(User * u, int num, va_list args)
{
MemoInfo *mi = va_arg(args, MemoInfo *);
int *last = va_arg(args, int *);
int *last0 = va_arg(args, int *);
char **end = va_arg(args, char **);
int *left = va_arg(args, int *);
MemoInfo *mi = va_arg(args, MemoInfo *);
int *last = va_arg(args, int *);
int *last0 = va_arg(args, int *);
char **end = va_arg(args, char **);
int *left = va_arg(args, int *);
if (delmemo(mi, num)) {
if (num != (*last) + 1) {
if (*last != -1) {
int len;
if (*last0 != *last)
len = snprintf(*end, *left, ",%d-%d", *last0, *last);
else
len = snprintf(*end, *left, ",%d", *last);
*end += len;
*left -= len;
}
*last0 = num;
}
*last = num;
return 1;
} else {
return 0;
}
if (delmemo(mi, num)) {
if (num != (*last) + 1) {
if (*last != -1) {
int len;
if (*last0 != *last)
len = snprintf(*end, *left, ",%d-%d", *last0, *last);
else
len = snprintf(*end, *left, ",%d", *last);
*end += len;
*left -= len;
}
*last0 = num;
}
*last = num;
return 1;
} else {
return 0;
}
}
MODULE_INIT("ms_del", MSDel)
+9 -9
View File
@@ -42,16 +42,16 @@ class MSHelp : public Module
**/
int do_help(User * u)
{
char *cmd = strtok(NULL, "");
char *cmd = strtok(NULL, "");
if (!cmd) {
notice_help(s_MemoServ, u, MEMO_HELP_HEADER);
moduleDisplayHelp(3, u);
notice_help(s_MemoServ, u, MEMO_HELP_FOOTER, s_ChanServ);
} else {
mod_help_cmd(s_MemoServ, u, MEMOSERV, cmd);
}
return MOD_CONT;
if (!cmd) {
notice_help(s_MemoServ, u, MEMO_HELP_HEADER);
moduleDisplayHelp(3, u);
notice_help(s_MemoServ, u, MEMO_HELP_FOOTER, s_ChanServ);
} else {
mod_help_cmd(s_MemoServ, u, MEMOSERV, cmd);
}
return MOD_CONT;
}
MODULE_INIT("ms_help", MSHelp)
+156 -156
View File
@@ -42,7 +42,7 @@ class MSInfo : public Module
**/
void myMemoServHelp(User * u)
{
notice_lang(s_MemoServ, u, MEMO_HELP_CMD_INFO);
notice_lang(s_MemoServ, u, MEMO_HELP_CMD_INFO);
}
/**
@@ -52,169 +52,169 @@ void myMemoServHelp(User * u)
**/
int do_info(User * u)
{
MemoInfo *mi;
NickAlias *na = NULL;
ChannelInfo *ci = NULL;
char *name = strtok(NULL, " ");
int is_servadmin = is_services_admin(u);
int hardmax = 0;
MemoInfo *mi;
NickAlias *na = NULL;
ChannelInfo *ci = NULL;
char *name = strtok(NULL, " ");
int is_servadmin = is_services_admin(u);
int hardmax = 0;
if (is_servadmin && name && *name != '#') {
na = findnick(name);
if (!na) {
notice_lang(s_MemoServ, u, NICK_X_NOT_REGISTERED, name);
return MOD_CONT;
} else if (na->status & NS_VERBOTEN) {
notice_lang(s_MemoServ, u, NICK_X_FORBIDDEN, name);
return MOD_CONT;
}
mi = &na->nc->memos;
hardmax = na->nc->flags & NI_MEMO_HARDMAX ? 1 : 0;
} else if (name && *name == '#') {
ci = cs_findchan(name);
if (!ci) {
notice_lang(s_MemoServ, u, CHAN_X_NOT_REGISTERED, name);
return MOD_CONT;
} else if (ci->flags & CI_VERBOTEN) {
notice_lang(s_MemoServ, u, CHAN_X_FORBIDDEN, name);
return MOD_CONT;
} else if (!check_access(u, ci, CA_MEMO)) {
notice_lang(s_MemoServ, u, ACCESS_DENIED);
return MOD_CONT;
}
mi = &ci->memos;
hardmax = ci->flags & CI_MEMO_HARDMAX ? 1 : 0;
} else if (name) { /* It's not a chan and we aren't services admin */
notice_lang(s_MemoServ, u, ACCESS_DENIED);
return MOD_CONT;
} else { /* !name */
if (!nick_identified(u)) {
notice_lang(s_MemoServ, u, NICK_IDENTIFY_REQUIRED, s_NickServ);
return MOD_CONT;
}
mi = &u->na->nc->memos;
hardmax = u->na->nc->flags & NI_MEMO_HARDMAX ? 1 : 0;
}
if (is_servadmin && name && *name != '#') {
na = findnick(name);
if (!na) {
notice_lang(s_MemoServ, u, NICK_X_NOT_REGISTERED, name);
return MOD_CONT;
} else if (na->status & NS_VERBOTEN) {
notice_lang(s_MemoServ, u, NICK_X_FORBIDDEN, name);
return MOD_CONT;
}
mi = &na->nc->memos;
hardmax = na->nc->flags & NI_MEMO_HARDMAX ? 1 : 0;
} else if (name && *name == '#') {
ci = cs_findchan(name);
if (!ci) {
notice_lang(s_MemoServ, u, CHAN_X_NOT_REGISTERED, name);
return MOD_CONT;
} else if (ci->flags & CI_VERBOTEN) {
notice_lang(s_MemoServ, u, CHAN_X_FORBIDDEN, name);
return MOD_CONT;
} else if (!check_access(u, ci, CA_MEMO)) {
notice_lang(s_MemoServ, u, ACCESS_DENIED);
return MOD_CONT;
}
mi = &ci->memos;
hardmax = ci->flags & CI_MEMO_HARDMAX ? 1 : 0;
} else if (name) { /* It's not a chan and we aren't services admin */
notice_lang(s_MemoServ, u, ACCESS_DENIED);
return MOD_CONT;
} else { /* !name */
if (!nick_identified(u)) {
notice_lang(s_MemoServ, u, NICK_IDENTIFY_REQUIRED, s_NickServ);
return MOD_CONT;
}
mi = &u->na->nc->memos;
hardmax = u->na->nc->flags & NI_MEMO_HARDMAX ? 1 : 0;
}
if (name && (ci || na->nc != u->na->nc)) {
if (name && (ci || na->nc != u->na->nc)) {
if (!mi->memocount) {
notice_lang(s_MemoServ, u, MEMO_INFO_X_NO_MEMOS, name);
} else if (mi->memocount == 1) {
if (mi->memos[0].flags & MF_UNREAD)
notice_lang(s_MemoServ, u, MEMO_INFO_X_MEMO_UNREAD, name);
else
notice_lang(s_MemoServ, u, MEMO_INFO_X_MEMO, name);
} else {
int count = 0, i;
for (i = 0; i < mi->memocount; i++) {
if (mi->memos[i].flags & MF_UNREAD)
count++;
}
if (count == mi->memocount)
notice_lang(s_MemoServ, u, MEMO_INFO_X_MEMOS_ALL_UNREAD,
name, count);
else if (count == 0)
notice_lang(s_MemoServ, u, MEMO_INFO_X_MEMOS, name,
mi->memocount);
else if (count == 1)
notice_lang(s_MemoServ, u, MEMO_INFO_X_MEMOS_ONE_UNREAD,
name, mi->memocount);
else
notice_lang(s_MemoServ, u, MEMO_INFO_X_MEMOS_SOME_UNREAD,
name, mi->memocount, count);
}
if (mi->memomax == 0) {
if (hardmax)
notice_lang(s_MemoServ, u, MEMO_INFO_X_HARD_LIMIT, name,
mi->memomax);
else
notice_lang(s_MemoServ, u, MEMO_INFO_X_LIMIT, name,
mi->memomax);
} else if (mi->memomax > 0) {
if (hardmax)
notice_lang(s_MemoServ, u, MEMO_INFO_X_HARD_LIMIT, name,
mi->memomax);
else
notice_lang(s_MemoServ, u, MEMO_INFO_X_LIMIT, name,
mi->memomax);
} else {
notice_lang(s_MemoServ, u, MEMO_INFO_X_NO_LIMIT, name);
}
if (!mi->memocount) {
notice_lang(s_MemoServ, u, MEMO_INFO_X_NO_MEMOS, name);
} else if (mi->memocount == 1) {
if (mi->memos[0].flags & MF_UNREAD)
notice_lang(s_MemoServ, u, MEMO_INFO_X_MEMO_UNREAD, name);
else
notice_lang(s_MemoServ, u, MEMO_INFO_X_MEMO, name);
} else {
int count = 0, i;
for (i = 0; i < mi->memocount; i++) {
if (mi->memos[i].flags & MF_UNREAD)
count++;
}
if (count == mi->memocount)
notice_lang(s_MemoServ, u, MEMO_INFO_X_MEMOS_ALL_UNREAD,
name, count);
else if (count == 0)
notice_lang(s_MemoServ, u, MEMO_INFO_X_MEMOS, name,
mi->memocount);
else if (count == 1)
notice_lang(s_MemoServ, u, MEMO_INFO_X_MEMOS_ONE_UNREAD,
name, mi->memocount);
else
notice_lang(s_MemoServ, u, MEMO_INFO_X_MEMOS_SOME_UNREAD,
name, mi->memocount, count);
}
if (mi->memomax == 0) {
if (hardmax)
notice_lang(s_MemoServ, u, MEMO_INFO_X_HARD_LIMIT, name,
mi->memomax);
else
notice_lang(s_MemoServ, u, MEMO_INFO_X_LIMIT, name,
mi->memomax);
} else if (mi->memomax > 0) {
if (hardmax)
notice_lang(s_MemoServ, u, MEMO_INFO_X_HARD_LIMIT, name,
mi->memomax);
else
notice_lang(s_MemoServ, u, MEMO_INFO_X_LIMIT, name,
mi->memomax);
} else {
notice_lang(s_MemoServ, u, MEMO_INFO_X_NO_LIMIT, name);
}
/* I ripped this code out of ircservices 4.4.5, since I didn't want
to rewrite the whole thing (it pisses me off). */
if (na) {
if ((na->nc->flags & NI_MEMO_RECEIVE)
&& (na->nc->flags & NI_MEMO_SIGNON)) {
notice_lang(s_MemoServ, u, MEMO_INFO_X_NOTIFY_ON, name);
} else if (na->nc->flags & NI_MEMO_RECEIVE) {
notice_lang(s_MemoServ, u, MEMO_INFO_X_NOTIFY_RECEIVE,
name);
} else if (na->nc->flags & NI_MEMO_SIGNON) {
notice_lang(s_MemoServ, u, MEMO_INFO_X_NOTIFY_SIGNON,
name);
} else {
notice_lang(s_MemoServ, u, MEMO_INFO_X_NOTIFY_OFF, name);
}
}
/* I ripped this code out of ircservices 4.4.5, since I didn't want
to rewrite the whole thing (it pisses me off). */
if (na) {
if ((na->nc->flags & NI_MEMO_RECEIVE)
&& (na->nc->flags & NI_MEMO_SIGNON)) {
notice_lang(s_MemoServ, u, MEMO_INFO_X_NOTIFY_ON, name);
} else if (na->nc->flags & NI_MEMO_RECEIVE) {
notice_lang(s_MemoServ, u, MEMO_INFO_X_NOTIFY_RECEIVE,
name);
} else if (na->nc->flags & NI_MEMO_SIGNON) {
notice_lang(s_MemoServ, u, MEMO_INFO_X_NOTIFY_SIGNON,
name);
} else {
notice_lang(s_MemoServ, u, MEMO_INFO_X_NOTIFY_OFF, name);
}
}
} else { /* !name || (!ci || na->nc == u->na->nc) */
} else { /* !name || (!ci || na->nc == u->na->nc) */
if (!mi->memocount) {
notice_lang(s_MemoServ, u, MEMO_INFO_NO_MEMOS);
} else if (mi->memocount == 1) {
if (mi->memos[0].flags & MF_UNREAD)
notice_lang(s_MemoServ, u, MEMO_INFO_MEMO_UNREAD);
else
notice_lang(s_MemoServ, u, MEMO_INFO_MEMO);
} else {
int count = 0, i;
for (i = 0; i < mi->memocount; i++) {
if (mi->memos[i].flags & MF_UNREAD)
count++;
}
if (count == mi->memocount)
notice_lang(s_MemoServ, u, MEMO_INFO_MEMOS_ALL_UNREAD,
count);
else if (count == 0)
notice_lang(s_MemoServ, u, MEMO_INFO_MEMOS, mi->memocount);
else if (count == 1)
notice_lang(s_MemoServ, u, MEMO_INFO_MEMOS_ONE_UNREAD,
mi->memocount);
else
notice_lang(s_MemoServ, u, MEMO_INFO_MEMOS_SOME_UNREAD,
mi->memocount, count);
}
if (!mi->memocount) {
notice_lang(s_MemoServ, u, MEMO_INFO_NO_MEMOS);
} else if (mi->memocount == 1) {
if (mi->memos[0].flags & MF_UNREAD)
notice_lang(s_MemoServ, u, MEMO_INFO_MEMO_UNREAD);
else
notice_lang(s_MemoServ, u, MEMO_INFO_MEMO);
} else {
int count = 0, i;
for (i = 0; i < mi->memocount; i++) {
if (mi->memos[i].flags & MF_UNREAD)
count++;
}
if (count == mi->memocount)
notice_lang(s_MemoServ, u, MEMO_INFO_MEMOS_ALL_UNREAD,
count);
else if (count == 0)
notice_lang(s_MemoServ, u, MEMO_INFO_MEMOS, mi->memocount);
else if (count == 1)
notice_lang(s_MemoServ, u, MEMO_INFO_MEMOS_ONE_UNREAD,
mi->memocount);
else
notice_lang(s_MemoServ, u, MEMO_INFO_MEMOS_SOME_UNREAD,
mi->memocount, count);
}
if (mi->memomax == 0) {
if (!is_servadmin && hardmax)
notice_lang(s_MemoServ, u, MEMO_INFO_HARD_LIMIT_ZERO);
else
notice_lang(s_MemoServ, u, MEMO_INFO_LIMIT_ZERO);
} else if (mi->memomax > 0) {
if (!is_servadmin && hardmax)
notice_lang(s_MemoServ, u, MEMO_INFO_HARD_LIMIT,
mi->memomax);
else
notice_lang(s_MemoServ, u, MEMO_INFO_LIMIT, mi->memomax);
} else {
notice_lang(s_MemoServ, u, MEMO_INFO_NO_LIMIT);
}
if (mi->memomax == 0) {
if (!is_servadmin && hardmax)
notice_lang(s_MemoServ, u, MEMO_INFO_HARD_LIMIT_ZERO);
else
notice_lang(s_MemoServ, u, MEMO_INFO_LIMIT_ZERO);
} else if (mi->memomax > 0) {
if (!is_servadmin && hardmax)
notice_lang(s_MemoServ, u, MEMO_INFO_HARD_LIMIT,
mi->memomax);
else
notice_lang(s_MemoServ, u, MEMO_INFO_LIMIT, mi->memomax);
} else {
notice_lang(s_MemoServ, u, MEMO_INFO_NO_LIMIT);
}
/* Ripped too. But differently because of a seg fault (loughs) */
if ((u->na->nc->flags & NI_MEMO_RECEIVE)
&& (u->na->nc->flags & NI_MEMO_SIGNON)) {
notice_lang(s_MemoServ, u, MEMO_INFO_NOTIFY_ON);
} else if (u->na->nc->flags & NI_MEMO_RECEIVE) {
notice_lang(s_MemoServ, u, MEMO_INFO_NOTIFY_RECEIVE);
} else if (u->na->nc->flags & NI_MEMO_SIGNON) {
notice_lang(s_MemoServ, u, MEMO_INFO_NOTIFY_SIGNON);
} else {
notice_lang(s_MemoServ, u, MEMO_INFO_NOTIFY_OFF);
}
}
return MOD_CONT; /* if (name && (ci || na->nc != u->na->nc)) */
/* Ripped too. But differently because of a seg fault (loughs) */
if ((u->na->nc->flags & NI_MEMO_RECEIVE)
&& (u->na->nc->flags & NI_MEMO_SIGNON)) {
notice_lang(s_MemoServ, u, MEMO_INFO_NOTIFY_ON);
} else if (u->na->nc->flags & NI_MEMO_RECEIVE) {
notice_lang(s_MemoServ, u, MEMO_INFO_NOTIFY_RECEIVE);
} else if (u->na->nc->flags & NI_MEMO_SIGNON) {
notice_lang(s_MemoServ, u, MEMO_INFO_NOTIFY_SIGNON);
} else {
notice_lang(s_MemoServ, u, MEMO_INFO_NOTIFY_OFF);
}
}
return MOD_CONT; /* if (name && (ci || na->nc != u->na->nc)) */
}
MODULE_INIT("ms_info", MSInfo)
+99 -99
View File
@@ -44,7 +44,7 @@ class MSList : public Module
**/
void myMemoServHelp(User * u)
{
notice_lang(s_MemoServ, u, MEMO_HELP_CMD_LIST);
notice_lang(s_MemoServ, u, MEMO_HELP_CMD_LIST);
}
/**
@@ -54,68 +54,68 @@ void myMemoServHelp(User * u)
**/
int do_list(User * u)
{
char *param = strtok(NULL, " "), *chan = NULL;
ChannelInfo *ci;
MemoInfo *mi;
Memo *m;
int i;
char *param = strtok(NULL, " "), *chan = NULL;
ChannelInfo *ci;
MemoInfo *mi;
Memo *m;
int i;
if (param && *param == '#') {
chan = param;
param = strtok(NULL, " ");
if (!(ci = cs_findchan(chan))) {
notice_lang(s_MemoServ, u, CHAN_X_NOT_REGISTERED, chan);
return MOD_CONT;
} else if (ci->flags & CI_VERBOTEN) {
notice_lang(s_MemoServ, u, CHAN_X_FORBIDDEN, chan);
return MOD_CONT;
} else if (!check_access(u, ci, CA_MEMO)) {
notice_lang(s_MemoServ, u, ACCESS_DENIED);
return MOD_CONT;
}
mi = &ci->memos;
} else {
if (!nick_identified(u)) {
notice_lang(s_MemoServ, u, NICK_IDENTIFY_REQUIRED, s_NickServ);
return MOD_CONT;
}
mi = &u->na->nc->memos;
}
if (param && !isdigit(*param) && stricmp(param, "NEW") != 0) {
syntax_error(s_MemoServ, u, "LIST", MEMO_LIST_SYNTAX);
} else if (mi->memocount == 0) {
if (chan)
notice_lang(s_MemoServ, u, MEMO_X_HAS_NO_MEMOS, chan);
else
notice_lang(s_MemoServ, u, MEMO_HAVE_NO_MEMOS);
} else {
int sent_header = 0;
if (param && isdigit(*param)) {
process_numlist(param, NULL, list_memo_callback, u,
mi, &sent_header, chan);
} else {
if (param) {
for (i = 0, m = mi->memos; i < mi->memocount; i++, m++) {
if (m->flags & MF_UNREAD)
break;
}
if (i == mi->memocount) {
if (chan)
notice_lang(s_MemoServ, u, MEMO_X_HAS_NO_NEW_MEMOS,
chan);
else
notice_lang(s_MemoServ, u, MEMO_HAVE_NO_NEW_MEMOS);
return MOD_CONT;
}
}
for (i = 0, m = mi->memos; i < mi->memocount; i++, m++) {
if (param && !(m->flags & MF_UNREAD))
continue;
list_memo(u, i, mi, &sent_header, param != NULL, chan);
}
}
}
return MOD_CONT;
if (param && *param == '#') {
chan = param;
param = strtok(NULL, " ");
if (!(ci = cs_findchan(chan))) {
notice_lang(s_MemoServ, u, CHAN_X_NOT_REGISTERED, chan);
return MOD_CONT;
} else if (ci->flags & CI_VERBOTEN) {
notice_lang(s_MemoServ, u, CHAN_X_FORBIDDEN, chan);
return MOD_CONT;
} else if (!check_access(u, ci, CA_MEMO)) {
notice_lang(s_MemoServ, u, ACCESS_DENIED);
return MOD_CONT;
}
mi = &ci->memos;
} else {
if (!nick_identified(u)) {
notice_lang(s_MemoServ, u, NICK_IDENTIFY_REQUIRED, s_NickServ);
return MOD_CONT;
}
mi = &u->na->nc->memos;
}
if (param && !isdigit(*param) && stricmp(param, "NEW") != 0) {
syntax_error(s_MemoServ, u, "LIST", MEMO_LIST_SYNTAX);
} else if (mi->memocount == 0) {
if (chan)
notice_lang(s_MemoServ, u, MEMO_X_HAS_NO_MEMOS, chan);
else
notice_lang(s_MemoServ, u, MEMO_HAVE_NO_MEMOS);
} else {
int sent_header = 0;
if (param && isdigit(*param)) {
process_numlist(param, NULL, list_memo_callback, u,
mi, &sent_header, chan);
} else {
if (param) {
for (i = 0, m = mi->memos; i < mi->memocount; i++, m++) {
if (m->flags & MF_UNREAD)
break;
}
if (i == mi->memocount) {
if (chan)
notice_lang(s_MemoServ, u, MEMO_X_HAS_NO_NEW_MEMOS,
chan);
else
notice_lang(s_MemoServ, u, MEMO_HAVE_NO_NEW_MEMOS);
return MOD_CONT;
}
}
for (i = 0, m = mi->memos; i < mi->memocount; i++, m++) {
if (param && !(m->flags & MF_UNREAD))
continue;
list_memo(u, i, mi, &sent_header, param != NULL, chan);
}
}
}
return MOD_CONT;
}
/**
@@ -127,17 +127,17 @@ int do_list(User * u)
*/
int list_memo_callback(User * u, int num, va_list args)
{
MemoInfo *mi = va_arg(args, MemoInfo *);
int *sent_header = va_arg(args, int *);
const char *chan = va_arg(args, const char *);
int i;
MemoInfo *mi = va_arg(args, MemoInfo *);
int *sent_header = va_arg(args, int *);
const char *chan = va_arg(args, const char *);
int i;
for (i = 0; i < mi->memocount; i++) {
if (mi->memos[i].number == num)
break;
}
/* Range checking done by list_memo() */
return list_memo(u, i, mi, sent_header, 0, chan);
for (i = 0; i < mi->memocount; i++) {
if (mi->memos[i].number == num)
break;
}
/* Range checking done by list_memo() */
return list_memo(u, i, mi, sent_header, 0, chan);
}
/**
@@ -152,34 +152,34 @@ int list_memo_callback(User * u, int num, va_list args)
*/
int list_memo(User * u, int index, MemoInfo * mi, int *sent_header, int newi, const char *chan)
{
Memo *m;
char timebuf[64];
struct tm tm;
Memo *m;
char timebuf[64];
struct tm tm;
if (index < 0 || index >= mi->memocount)
return 0;
if (!*sent_header) {
if (chan) {
notice_lang(s_MemoServ, u,
newi ? MEMO_LIST_CHAN_NEW_MEMOS :
MEMO_LIST_CHAN_MEMOS, chan, s_MemoServ, chan);
} else {
notice_lang(s_MemoServ, u,
newi ? MEMO_LIST_NEW_MEMOS : MEMO_LIST_MEMOS,
u->nick, s_MemoServ);
}
notice_lang(s_MemoServ, u, MEMO_LIST_HEADER);
*sent_header = 1;
}
m = &mi->memos[index];
tm = *localtime(&m->time);
strftime_lang(timebuf, sizeof(timebuf),
u, STRFTIME_DATE_TIME_FORMAT, &tm);
timebuf[sizeof(timebuf) - 1] = 0; /* just in case */
notice_lang(s_MemoServ, u, MEMO_LIST_FORMAT,
(m->flags & MF_UNREAD) ? '*' : ' ',
m->number, m->sender, timebuf);
return 1;
if (index < 0 || index >= mi->memocount)
return 0;
if (!*sent_header) {
if (chan) {
notice_lang(s_MemoServ, u,
newi ? MEMO_LIST_CHAN_NEW_MEMOS :
MEMO_LIST_CHAN_MEMOS, chan, s_MemoServ, chan);
} else {
notice_lang(s_MemoServ, u,
newi ? MEMO_LIST_NEW_MEMOS : MEMO_LIST_MEMOS,
u->nick, s_MemoServ);
}
notice_lang(s_MemoServ, u, MEMO_LIST_HEADER);
*sent_header = 1;
}
m = &mi->memos[index];
tm = *localtime(&m->time);
strftime_lang(timebuf, sizeof(timebuf),
u, STRFTIME_DATE_TIME_FORMAT, &tm);
timebuf[sizeof(timebuf) - 1] = 0; /* just in case */
notice_lang(s_MemoServ, u, MEMO_LIST_FORMAT,
(m->flags & MF_UNREAD) ? '*' : ' ',
m->number, m->sender, timebuf);
return 1;
}
MODULE_INIT("ms_list", MSList)
+100 -100
View File
@@ -46,7 +46,7 @@ class MSRead : public Module
**/
void myMemoServHelp(User * u)
{
notice_lang(s_MemoServ, u, MEMO_HELP_CMD_READ);
notice_lang(s_MemoServ, u, MEMO_HELP_CMD_READ);
}
/**
@@ -56,78 +56,78 @@ void myMemoServHelp(User * u)
**/
int do_read(User * u)
{
MemoInfo *mi;
ChannelInfo *ci;
char *numstr = strtok(NULL, " "), *chan = NULL;
int num, count;
MemoInfo *mi;
ChannelInfo *ci;
char *numstr = strtok(NULL, " "), *chan = NULL;
int num, count;
if (numstr && *numstr == '#') {
chan = numstr;
numstr = strtok(NULL, " ");
if (!(ci = cs_findchan(chan))) {
notice_lang(s_MemoServ, u, CHAN_X_NOT_REGISTERED, chan);
return MOD_CONT;
} else if (ci->flags & CI_VERBOTEN) {
notice_lang(s_MemoServ, u, CHAN_X_FORBIDDEN, chan);
return MOD_CONT;
} else if (!check_access(u, ci, CA_MEMO)) {
notice_lang(s_MemoServ, u, ACCESS_DENIED);
return MOD_CONT;
}
mi = &ci->memos;
} else {
if (!nick_identified(u)) {
notice_lang(s_MemoServ, u, NICK_IDENTIFY_REQUIRED, s_NickServ);
return MOD_CONT;
}
mi = &u->na->nc->memos;
}
num = numstr ? atoi(numstr) : -1;
if (!numstr
|| (stricmp(numstr, "LAST") != 0 && stricmp(numstr, "NEW") != 0
&& num <= 0)) {
syntax_error(s_MemoServ, u, "READ", MEMO_READ_SYNTAX);
if (numstr && *numstr == '#') {
chan = numstr;
numstr = strtok(NULL, " ");
if (!(ci = cs_findchan(chan))) {
notice_lang(s_MemoServ, u, CHAN_X_NOT_REGISTERED, chan);
return MOD_CONT;
} else if (ci->flags & CI_VERBOTEN) {
notice_lang(s_MemoServ, u, CHAN_X_FORBIDDEN, chan);
return MOD_CONT;
} else if (!check_access(u, ci, CA_MEMO)) {
notice_lang(s_MemoServ, u, ACCESS_DENIED);
return MOD_CONT;
}
mi = &ci->memos;
} else {
if (!nick_identified(u)) {
notice_lang(s_MemoServ, u, NICK_IDENTIFY_REQUIRED, s_NickServ);
return MOD_CONT;
}
mi = &u->na->nc->memos;
}
num = numstr ? atoi(numstr) : -1;
if (!numstr
|| (stricmp(numstr, "LAST") != 0 && stricmp(numstr, "NEW") != 0
&& num <= 0)) {
syntax_error(s_MemoServ, u, "READ", MEMO_READ_SYNTAX);
} else if (mi->memocount == 0) {
if (chan)
notice_lang(s_MemoServ, u, MEMO_X_HAS_NO_MEMOS, chan);
else
notice_lang(s_MemoServ, u, MEMO_HAVE_NO_MEMOS);
} else if (mi->memocount == 0) {
if (chan)
notice_lang(s_MemoServ, u, MEMO_X_HAS_NO_MEMOS, chan);
else
notice_lang(s_MemoServ, u, MEMO_HAVE_NO_MEMOS);
} else {
int i;
} else {
int i;
if (stricmp(numstr, "NEW") == 0) {
int readcount = 0;
for (i = 0; i < mi->memocount; i++) {
if (mi->memos[i].flags & MF_UNREAD) {
read_memo(u, i, mi, chan);
readcount++;
}
}
if (!readcount) {
if (chan)
notice_lang(s_MemoServ, u, MEMO_X_HAS_NO_NEW_MEMOS,
chan);
else
notice_lang(s_MemoServ, u, MEMO_HAVE_NO_NEW_MEMOS);
}
} else if (stricmp(numstr, "LAST") == 0) {
for (i = 0; i < mi->memocount - 1; i++);
read_memo(u, i, mi, chan);
} else { /* number[s] */
if (!process_numlist(numstr, &count, read_memo_callback, u,
mi, chan)) {
if (count == 1)
notice_lang(s_MemoServ, u, MEMO_DOES_NOT_EXIST, num);
else
notice_lang(s_MemoServ, u, MEMO_LIST_NOT_FOUND,
numstr);
}
}
if (stricmp(numstr, "NEW") == 0) {
int readcount = 0;
for (i = 0; i < mi->memocount; i++) {
if (mi->memos[i].flags & MF_UNREAD) {
read_memo(u, i, mi, chan);
readcount++;
}
}
if (!readcount) {
if (chan)
notice_lang(s_MemoServ, u, MEMO_X_HAS_NO_NEW_MEMOS,
chan);
else
notice_lang(s_MemoServ, u, MEMO_HAVE_NO_NEW_MEMOS);
}
} else if (stricmp(numstr, "LAST") == 0) {
for (i = 0; i < mi->memocount - 1; i++);
read_memo(u, i, mi, chan);
} else { /* number[s] */
if (!process_numlist(numstr, &count, read_memo_callback, u,
mi, chan)) {
if (count == 1)
notice_lang(s_MemoServ, u, MEMO_DOES_NOT_EXIST, num);
else
notice_lang(s_MemoServ, u, MEMO_LIST_NOT_FOUND,
numstr);
}
}
}
return MOD_CONT;
}
return MOD_CONT;
}
/**
@@ -139,16 +139,16 @@ int do_read(User * u)
*/
int read_memo_callback(User * u, int num, va_list args)
{
MemoInfo *mi = va_arg(args, MemoInfo *);
const char *chan = va_arg(args, const char *);
int i;
MemoInfo *mi = va_arg(args, MemoInfo *);
const char *chan = va_arg(args, const char *);
int i;
for (i = 0; i < mi->memocount; i++) {
if (mi->memos[i].number == num)
break;
}
/* Range check done in read_memo */
return read_memo(u, i, mi, chan);
for (i = 0; i < mi->memocount; i++) {
if (mi->memos[i].number == num)
break;
}
/* Range check done in read_memo */
return read_memo(u, i, mi, chan);
}
/**
@@ -161,32 +161,32 @@ int read_memo_callback(User * u, int num, va_list args)
*/
int read_memo(User * u, int index, MemoInfo * mi, const char *chan)
{
Memo *m;
char timebuf[64];
struct tm tm;
Memo *m;
char timebuf[64];
struct tm tm;
if (index < 0 || index >= mi->memocount)
return 0;
m = &mi->memos[index];
tm = *localtime(&m->time);
strftime_lang(timebuf, sizeof(timebuf),
u, STRFTIME_DATE_TIME_FORMAT, &tm);
timebuf[sizeof(timebuf) - 1] = 0;
if (chan)
notice_lang(s_MemoServ, u, MEMO_CHAN_HEADER, m->number,
m->sender, timebuf, s_MemoServ, chan, m->number);
else
notice_lang(s_MemoServ, u, MEMO_HEADER, m->number,
m->sender, timebuf, s_MemoServ, m->number);
notice_lang(s_MemoServ, u, MEMO_TEXT, m->text);
m->flags &= ~MF_UNREAD;
if (index < 0 || index >= mi->memocount)
return 0;
m = &mi->memos[index];
tm = *localtime(&m->time);
strftime_lang(timebuf, sizeof(timebuf),
u, STRFTIME_DATE_TIME_FORMAT, &tm);
timebuf[sizeof(timebuf) - 1] = 0;
if (chan)
notice_lang(s_MemoServ, u, MEMO_CHAN_HEADER, m->number,
m->sender, timebuf, s_MemoServ, chan, m->number);
else
notice_lang(s_MemoServ, u, MEMO_HEADER, m->number,
m->sender, timebuf, s_MemoServ, m->number);
notice_lang(s_MemoServ, u, MEMO_TEXT, m->text);
m->flags &= ~MF_UNREAD;
/* Check if a receipt notification was requested */
if (m->flags & MF_RECEIPT) {
rsend_notify(u, m, chan);
}
/* Check if a receipt notification was requested */
if (m->flags & MF_RECEIPT) {
rsend_notify(u, m, chan);
}
return 1;
return 1;
}
MODULE_INIT("ms_read", MSRead)
+44 -44
View File
@@ -51,10 +51,10 @@ void AnopeFini(void)
**/
void myMemoServHelp(User * u)
{
if (((MSMemoReceipt == 1) && (is_services_oper(u)))
|| (MSMemoReceipt == 2)) {
notice_lang(s_MemoServ, u, MEMO_HELP_CMD_RSEND);
}
if (((MSMemoReceipt == 1) && (is_services_oper(u)))
|| (MSMemoReceipt == 2)) {
notice_lang(s_MemoServ, u, MEMO_HELP_CMD_RSEND);
}
}
/**
@@ -64,52 +64,52 @@ void myMemoServHelp(User * u)
**/
int do_rsend(User * u)
{
char *name = strtok(NULL, " ");
char *text = strtok(NULL, "");
NickAlias *na = NULL;
int z = 3;
char *name = strtok(NULL, " ");
char *text = strtok(NULL, "");
NickAlias *na = NULL;
int z = 3;
/* check if the variables are here */
if (!name || !text) {
notice_lang(s_MemoServ, u, MEMO_RSEND_SYNTAX);
return MOD_CONT;
}
/* check if the variables are here */
if (!name || !text) {
notice_lang(s_MemoServ, u, MEMO_RSEND_SYNTAX);
return MOD_CONT;
}
/* prevent user from rsend to themselves */
if ((na = findnick(name))) {
if (u->na) {
if (stricmp(na->nc->display, u->na->nc->display) == 0) {
notice_lang(s_MemoServ, u, MEMO_NO_RSEND_SELF);
return MOD_CONT;
}
} else {
notice_lang(s_MemoServ, u, NICK_X_NOT_REGISTERED, name);
return MOD_CONT;
}
}
/* prevent user from rsend to themselves */
if ((na = findnick(name))) {
if (u->na) {
if (stricmp(na->nc->display, u->na->nc->display) == 0) {
notice_lang(s_MemoServ, u, MEMO_NO_RSEND_SELF);
return MOD_CONT;
}
} else {
notice_lang(s_MemoServ, u, NICK_X_NOT_REGISTERED, name);
return MOD_CONT;
}
}
if (MSMemoReceipt == 1) {
/* Services opers and above can use rsend */
if (is_services_oper(u)) {
memo_send(u, name, text, z);
} else {
notice_lang(s_MemoServ, u, ACCESS_DENIED);
}
} else if (MSMemoReceipt == 2) {
/* Everybody can use rsend */
memo_send(u, name, text, z);
} else {
/* rsend has been disabled */
if (debug) {
alog("debug: MSMemoReceipt is set misconfigured to %d",
MSMemoReceipt);
}
notice_lang(s_MemoServ, u, MEMO_RSEND_DISABLED);
}
if (MSMemoReceipt == 1) {
/* Services opers and above can use rsend */
if (is_services_oper(u)) {
memo_send(u, name, text, z);
} else {
notice_lang(s_MemoServ, u, ACCESS_DENIED);
}
} else if (MSMemoReceipt == 2) {
/* Everybody can use rsend */
memo_send(u, name, text, z);
} else {
/* rsend has been disabled */
if (debug) {
alog("debug: MSMemoReceipt is set misconfigured to %d",
MSMemoReceipt);
}
notice_lang(s_MemoServ, u, MEMO_RSEND_DISABLED);
}
return MOD_CONT;
return MOD_CONT;
}
MODULE_INIT("ms_rsend", MSRSend)
+6 -6
View File
@@ -42,7 +42,7 @@ class MSSend : public Module
**/
void myMemoServHelp(User * u)
{
notice_lang(s_MemoServ, u, MEMO_HELP_CMD_SEND);
notice_lang(s_MemoServ, u, MEMO_HELP_CMD_SEND);
}
/**
@@ -52,11 +52,11 @@ void myMemoServHelp(User * u)
**/
int do_send(User * u)
{
char *name = strtok(NULL, " ");
char *text = strtok(NULL, "");
int z = 0;
memo_send(u, name, text, z);
return MOD_CONT;
char *name = strtok(NULL, " ");
char *text = strtok(NULL, "");
int z = 0;
memo_send(u, name, text, z);
return MOD_CONT;
}
MODULE_INIT("ms_send", MSSend)
+24 -24
View File
@@ -42,9 +42,9 @@ class MSSendAll : public Module
**/
void myMemoServHelp(User * u)
{
if (is_services_admin(u)) {
notice_lang(s_MemoServ, u, MEMO_HELP_CMD_SENDALL);
}
if (is_services_admin(u)) {
notice_lang(s_MemoServ, u, MEMO_HELP_CMD_SENDALL);
}
}
/**
@@ -54,31 +54,31 @@ void myMemoServHelp(User * u)
**/
int do_sendall(User * u)
{
int i, z = 1;
NickCore *nc;
char *text = strtok(NULL, "");
int i, z = 1;
NickCore *nc;
char *text = strtok(NULL, "");
if (readonly) {
notice_lang(s_MemoServ, u, MEMO_SEND_DISABLED);
return MOD_CONT;
} else if (checkDefCon(DEFCON_NO_NEW_MEMOS)) {
notice_lang(s_MemoServ, u, OPER_DEFCON_DENIED);
return MOD_CONT;
} else if (!text) {
syntax_error(s_MemoServ, u, "SENDALL", MEMO_SEND_SYNTAX);
return MOD_CONT;
}
if (readonly) {
notice_lang(s_MemoServ, u, MEMO_SEND_DISABLED);
return MOD_CONT;
} else if (checkDefCon(DEFCON_NO_NEW_MEMOS)) {
notice_lang(s_MemoServ, u, OPER_DEFCON_DENIED);
return MOD_CONT;
} else if (!text) {
syntax_error(s_MemoServ, u, "SENDALL", MEMO_SEND_SYNTAX);
return MOD_CONT;
}
for (i = 0; i < 1024; i++) {
for (nc = nclists[i]; nc; nc = nc->next) {
if (stricmp(u->nick, nc->display) != 0)
memo_send(u, nc->display, text, z);
} /* /nc */
} /* /i */
for (i = 0; i < 1024; i++) {
for (nc = nclists[i]; nc; nc = nc->next) {
if (stricmp(u->nick, nc->display) != 0)
memo_send(u, nc->display, text, z);
} /* /nc */
} /* /i */
notice_lang(s_MemoServ, u, MEMO_MASS_SENT);
return MOD_CONT;
notice_lang(s_MemoServ, u, MEMO_MASS_SENT);
return MOD_CONT;
}
MODULE_INIT("ms_sendall", MSSendAll)
+165 -165
View File
@@ -53,7 +53,7 @@ class MSSet : public Module
**/
void myMemoServHelp(User * u)
{
notice_lang(s_MemoServ, u, MEMO_HELP_CMD_SET);
notice_lang(s_MemoServ, u, MEMO_HELP_CMD_SET);
}
/**
@@ -63,28 +63,28 @@ void myMemoServHelp(User * u)
**/
int do_set(User * u)
{
char *cmd = strtok(NULL, " ");
char *param = strtok(NULL, "");
MemoInfo *mi = &u->na->nc->memos;
char *cmd = strtok(NULL, " ");
char *param = strtok(NULL, "");
MemoInfo *mi = &u->na->nc->memos;
if (readonly) {
notice_lang(s_MemoServ, u, MEMO_SET_DISABLED);
return MOD_CONT;
}
if (!param) {
syntax_error(s_MemoServ, u, "SET", MEMO_SET_SYNTAX);
} else if (!nick_identified(u)) {
notice_lang(s_MemoServ, u, NICK_IDENTIFY_REQUIRED, s_NickServ);
return MOD_CONT;
} else if (stricmp(cmd, "NOTIFY") == 0) {
do_set_notify(u, mi, param);
} else if (stricmp(cmd, "LIMIT") == 0) {
do_set_limit(u, mi, param);
} else {
notice_lang(s_MemoServ, u, MEMO_SET_UNKNOWN_OPTION, cmd);
notice_lang(s_MemoServ, u, MORE_INFO, s_MemoServ, "SET");
}
return MOD_CONT;
if (readonly) {
notice_lang(s_MemoServ, u, MEMO_SET_DISABLED);
return MOD_CONT;
}
if (!param) {
syntax_error(s_MemoServ, u, "SET", MEMO_SET_SYNTAX);
} else if (!nick_identified(u)) {
notice_lang(s_MemoServ, u, NICK_IDENTIFY_REQUIRED, s_NickServ);
return MOD_CONT;
} else if (stricmp(cmd, "NOTIFY") == 0) {
do_set_notify(u, mi, param);
} else if (stricmp(cmd, "LIMIT") == 0) {
do_set_limit(u, mi, param);
} else {
notice_lang(s_MemoServ, u, MEMO_SET_UNKNOWN_OPTION, cmd);
notice_lang(s_MemoServ, u, MORE_INFO, s_MemoServ, "SET");
}
return MOD_CONT;
}
/**
@@ -94,34 +94,34 @@ int do_set(User * u)
**/
int do_set_notify(User * u, MemoInfo * mi, char *param)
{
if (stricmp(param, "ON") == 0) {
u->na->nc->flags |= NI_MEMO_SIGNON | NI_MEMO_RECEIVE;
notice_lang(s_MemoServ, u, MEMO_SET_NOTIFY_ON, s_MemoServ);
} else if (stricmp(param, "LOGON") == 0) {
u->na->nc->flags |= NI_MEMO_SIGNON;
u->na->nc->flags &= ~NI_MEMO_RECEIVE;
notice_lang(s_MemoServ, u, MEMO_SET_NOTIFY_LOGON, s_MemoServ);
} else if (stricmp(param, "NEW") == 0) {
u->na->nc->flags &= ~NI_MEMO_SIGNON;
u->na->nc->flags |= NI_MEMO_RECEIVE;
notice_lang(s_MemoServ, u, MEMO_SET_NOTIFY_NEW, s_MemoServ);
} else if (stricmp(param, "MAIL") == 0) {
if (u->na->nc->email) {
u->na->nc->flags |= NI_MEMO_MAIL;
notice_lang(s_MemoServ, u, MEMO_SET_NOTIFY_MAIL);
} else {
notice_lang(s_MemoServ, u, MEMO_SET_NOTIFY_INVALIDMAIL);
}
} else if (stricmp(param, "NOMAIL") == 0) {
u->na->nc->flags &= ~NI_MEMO_MAIL;
notice_lang(s_MemoServ, u, MEMO_SET_NOTIFY_NOMAIL);
} else if (stricmp(param, "OFF") == 0) {
u->na->nc->flags &= ~(NI_MEMO_SIGNON | NI_MEMO_RECEIVE);
notice_lang(s_MemoServ, u, MEMO_SET_NOTIFY_OFF, s_MemoServ);
} else {
syntax_error(s_MemoServ, u, "SET NOTIFY", MEMO_SET_NOTIFY_SYNTAX);
}
return MOD_CONT;
if (stricmp(param, "ON") == 0) {
u->na->nc->flags |= NI_MEMO_SIGNON | NI_MEMO_RECEIVE;
notice_lang(s_MemoServ, u, MEMO_SET_NOTIFY_ON, s_MemoServ);
} else if (stricmp(param, "LOGON") == 0) {
u->na->nc->flags |= NI_MEMO_SIGNON;
u->na->nc->flags &= ~NI_MEMO_RECEIVE;
notice_lang(s_MemoServ, u, MEMO_SET_NOTIFY_LOGON, s_MemoServ);
} else if (stricmp(param, "NEW") == 0) {
u->na->nc->flags &= ~NI_MEMO_SIGNON;
u->na->nc->flags |= NI_MEMO_RECEIVE;
notice_lang(s_MemoServ, u, MEMO_SET_NOTIFY_NEW, s_MemoServ);
} else if (stricmp(param, "MAIL") == 0) {
if (u->na->nc->email) {
u->na->nc->flags |= NI_MEMO_MAIL;
notice_lang(s_MemoServ, u, MEMO_SET_NOTIFY_MAIL);
} else {
notice_lang(s_MemoServ, u, MEMO_SET_NOTIFY_INVALIDMAIL);
}
} else if (stricmp(param, "NOMAIL") == 0) {
u->na->nc->flags &= ~NI_MEMO_MAIL;
notice_lang(s_MemoServ, u, MEMO_SET_NOTIFY_NOMAIL);
} else if (stricmp(param, "OFF") == 0) {
u->na->nc->flags &= ~(NI_MEMO_SIGNON | NI_MEMO_RECEIVE);
notice_lang(s_MemoServ, u, MEMO_SET_NOTIFY_OFF, s_MemoServ);
} else {
syntax_error(s_MemoServ, u, "SET NOTIFY", MEMO_SET_NOTIFY_SYNTAX);
}
return MOD_CONT;
}
/**
@@ -131,122 +131,122 @@ int do_set_notify(User * u, MemoInfo * mi, char *param)
**/
int do_set_limit(User * u, MemoInfo * mi, char *param)
{
char *p1 = strtok(param, " ");
char *p2 = strtok(NULL, " ");
char *p3 = strtok(NULL, " ");
char *user = NULL, *chan = NULL;
int32 limit;
NickAlias *na = u->na;
ChannelInfo *ci = NULL;
int is_servadmin = is_services_admin(u);
char *p1 = strtok(param, " ");
char *p2 = strtok(NULL, " ");
char *p3 = strtok(NULL, " ");
char *user = NULL, *chan = NULL;
int32 limit;
NickAlias *na = u->na;
ChannelInfo *ci = NULL;
int is_servadmin = is_services_admin(u);
if (p1 && *p1 == '#') {
chan = p1;
p1 = p2;
p2 = p3;
p3 = strtok(NULL, " ");
if (!(ci = cs_findchan(chan))) {
notice_lang(s_MemoServ, u, CHAN_X_NOT_REGISTERED, chan);
return MOD_CONT;
} else if (ci->flags & CI_VERBOTEN) {
notice_lang(s_MemoServ, u, CHAN_X_FORBIDDEN, chan);
return MOD_CONT;
} else if (!is_servadmin && !check_access(u, ci, CA_MEMO)) {
notice_lang(s_MemoServ, u, ACCESS_DENIED);
return MOD_CONT;
}
mi = &ci->memos;
}
if (is_servadmin) {
if (p2 && stricmp(p2, "HARD") != 0 && !chan) {
if (!(na = findnick(p1))) {
notice_lang(s_MemoServ, u, NICK_X_NOT_REGISTERED, p1);
return MOD_CONT;
}
user = p1;
mi = &na->nc->memos;
p1 = p2;
p2 = p3;
} else if (!p1) {
syntax_error(s_MemoServ, u, "SET LIMIT",
MEMO_SET_LIMIT_SERVADMIN_SYNTAX);
return MOD_CONT;
}
if ((!isdigit(*p1) && stricmp(p1, "NONE") != 0) ||
(p2 && stricmp(p2, "HARD") != 0)) {
syntax_error(s_MemoServ, u, "SET LIMIT",
MEMO_SET_LIMIT_SERVADMIN_SYNTAX);
return MOD_CONT;
}
if (chan) {
if (p2)
ci->flags |= CI_MEMO_HARDMAX;
else
ci->flags &= ~CI_MEMO_HARDMAX;
} else {
if (p2)
na->nc->flags |= NI_MEMO_HARDMAX;
else
na->nc->flags &= ~NI_MEMO_HARDMAX;
}
limit = atoi(p1);
if (limit < 0 || limit > 32767) {
notice_lang(s_MemoServ, u, MEMO_SET_LIMIT_OVERFLOW, 32767);
limit = 32767;
}
if (stricmp(p1, "NONE") == 0)
limit = -1;
} else {
if (!p1 || p2 || !isdigit(*p1)) {
syntax_error(s_MemoServ, u, "SET LIMIT",
MEMO_SET_LIMIT_SYNTAX);
return MOD_CONT;
}
if (chan && (ci->flags & CI_MEMO_HARDMAX)) {
notice_lang(s_MemoServ, u, MEMO_SET_LIMIT_FORBIDDEN, chan);
return MOD_CONT;
} else if (!chan && (na->nc->flags & NI_MEMO_HARDMAX)) {
notice_lang(s_MemoServ, u, MEMO_SET_YOUR_LIMIT_FORBIDDEN);
return MOD_CONT;
}
limit = atoi(p1);
/* The first character is a digit, but we could still go negative
* from overflow... watch out! */
if (limit < 0 || (MSMaxMemos > 0 && limit > MSMaxMemos)) {
if (chan) {
notice_lang(s_MemoServ, u, MEMO_SET_LIMIT_TOO_HIGH,
chan, MSMaxMemos);
} else {
notice_lang(s_MemoServ, u, MEMO_SET_YOUR_LIMIT_TOO_HIGH,
MSMaxMemos);
}
return MOD_CONT;
} else if (limit > 32767) {
notice_lang(s_MemoServ, u, MEMO_SET_LIMIT_OVERFLOW, 32767);
limit = 32767;
}
}
mi->memomax = limit;
if (limit > 0) {
if (!chan && na->nc == u->na->nc)
notice_lang(s_MemoServ, u, MEMO_SET_YOUR_LIMIT, limit);
else
notice_lang(s_MemoServ, u, MEMO_SET_LIMIT,
chan ? chan : user, limit);
} else if (limit == 0) {
if (!chan && na->nc == u->na->nc)
notice_lang(s_MemoServ, u, MEMO_SET_YOUR_LIMIT_ZERO);
else
notice_lang(s_MemoServ, u, MEMO_SET_LIMIT_ZERO,
chan ? chan : user);
} else {
if (!chan && na->nc == u->na->nc)
notice_lang(s_MemoServ, u, MEMO_UNSET_YOUR_LIMIT);
else
notice_lang(s_MemoServ, u, MEMO_UNSET_LIMIT,
chan ? chan : user);
}
return MOD_CONT;
if (p1 && *p1 == '#') {
chan = p1;
p1 = p2;
p2 = p3;
p3 = strtok(NULL, " ");
if (!(ci = cs_findchan(chan))) {
notice_lang(s_MemoServ, u, CHAN_X_NOT_REGISTERED, chan);
return MOD_CONT;
} else if (ci->flags & CI_VERBOTEN) {
notice_lang(s_MemoServ, u, CHAN_X_FORBIDDEN, chan);
return MOD_CONT;
} else if (!is_servadmin && !check_access(u, ci, CA_MEMO)) {
notice_lang(s_MemoServ, u, ACCESS_DENIED);
return MOD_CONT;
}
mi = &ci->memos;
}
if (is_servadmin) {
if (p2 && stricmp(p2, "HARD") != 0 && !chan) {
if (!(na = findnick(p1))) {
notice_lang(s_MemoServ, u, NICK_X_NOT_REGISTERED, p1);
return MOD_CONT;
}
user = p1;
mi = &na->nc->memos;
p1 = p2;
p2 = p3;
} else if (!p1) {
syntax_error(s_MemoServ, u, "SET LIMIT",
MEMO_SET_LIMIT_SERVADMIN_SYNTAX);
return MOD_CONT;
}
if ((!isdigit(*p1) && stricmp(p1, "NONE") != 0) ||
(p2 && stricmp(p2, "HARD") != 0)) {
syntax_error(s_MemoServ, u, "SET LIMIT",
MEMO_SET_LIMIT_SERVADMIN_SYNTAX);
return MOD_CONT;
}
if (chan) {
if (p2)
ci->flags |= CI_MEMO_HARDMAX;
else
ci->flags &= ~CI_MEMO_HARDMAX;
} else {
if (p2)
na->nc->flags |= NI_MEMO_HARDMAX;
else
na->nc->flags &= ~NI_MEMO_HARDMAX;
}
limit = atoi(p1);
if (limit < 0 || limit > 32767) {
notice_lang(s_MemoServ, u, MEMO_SET_LIMIT_OVERFLOW, 32767);
limit = 32767;
}
if (stricmp(p1, "NONE") == 0)
limit = -1;
} else {
if (!p1 || p2 || !isdigit(*p1)) {
syntax_error(s_MemoServ, u, "SET LIMIT",
MEMO_SET_LIMIT_SYNTAX);
return MOD_CONT;
}
if (chan && (ci->flags & CI_MEMO_HARDMAX)) {
notice_lang(s_MemoServ, u, MEMO_SET_LIMIT_FORBIDDEN, chan);
return MOD_CONT;
} else if (!chan && (na->nc->flags & NI_MEMO_HARDMAX)) {
notice_lang(s_MemoServ, u, MEMO_SET_YOUR_LIMIT_FORBIDDEN);
return MOD_CONT;
}
limit = atoi(p1);
/* The first character is a digit, but we could still go negative
* from overflow... watch out! */
if (limit < 0 || (MSMaxMemos > 0 && limit > MSMaxMemos)) {
if (chan) {
notice_lang(s_MemoServ, u, MEMO_SET_LIMIT_TOO_HIGH,
chan, MSMaxMemos);
} else {
notice_lang(s_MemoServ, u, MEMO_SET_YOUR_LIMIT_TOO_HIGH,
MSMaxMemos);
}
return MOD_CONT;
} else if (limit > 32767) {
notice_lang(s_MemoServ, u, MEMO_SET_LIMIT_OVERFLOW, 32767);
limit = 32767;
}
}
mi->memomax = limit;
if (limit > 0) {
if (!chan && na->nc == u->na->nc)
notice_lang(s_MemoServ, u, MEMO_SET_YOUR_LIMIT, limit);
else
notice_lang(s_MemoServ, u, MEMO_SET_LIMIT,
chan ? chan : user, limit);
} else if (limit == 0) {
if (!chan && na->nc == u->na->nc)
notice_lang(s_MemoServ, u, MEMO_SET_YOUR_LIMIT_ZERO);
else
notice_lang(s_MemoServ, u, MEMO_SET_LIMIT_ZERO,
chan ? chan : user);
} else {
if (!chan && na->nc == u->na->nc)
notice_lang(s_MemoServ, u, MEMO_UNSET_YOUR_LIMIT);
else
notice_lang(s_MemoServ, u, MEMO_UNSET_LIMIT,
chan ? chan : user);
}
return MOD_CONT;
}
MODULE_INIT("ms_set", MSSet)
+23 -23
View File
@@ -42,9 +42,9 @@ class MSStaff : public Module
**/
void myMemoServHelp(User * u)
{
if (is_services_oper(u)) {
notice_lang(s_MemoServ, u, MEMO_HELP_CMD_STAFF);
}
if (is_services_oper(u)) {
notice_lang(s_MemoServ, u, MEMO_HELP_CMD_STAFF);
}
}
/**
@@ -54,28 +54,28 @@ void myMemoServHelp(User * u)
**/
int do_staff(User * u)
{
NickCore *nc;
int i, z = 0;
char *text = strtok(NULL, "");
NickCore *nc;
int i, z = 0;
char *text = strtok(NULL, "");
if (readonly) {
notice_lang(s_MemoServ, u, MEMO_SEND_DISABLED);
return MOD_CONT;
} else if (checkDefCon(DEFCON_NO_NEW_MEMOS)) {
notice_lang(s_MemoServ, u, OPER_DEFCON_DENIED);
return MOD_CONT;
} else if (text == NULL) {
syntax_error(s_MemoServ, u, "SEND", MEMO_SEND_SYNTAX);
return MOD_CONT;
}
if (readonly) {
notice_lang(s_MemoServ, u, MEMO_SEND_DISABLED);
return MOD_CONT;
} else if (checkDefCon(DEFCON_NO_NEW_MEMOS)) {
notice_lang(s_MemoServ, u, OPER_DEFCON_DENIED);
return MOD_CONT;
} else if (text == NULL) {
syntax_error(s_MemoServ, u, "SEND", MEMO_SEND_SYNTAX);
return MOD_CONT;
}
for (i = 0; i < 1024; i++) {
for (nc = nclists[i]; nc; nc = nc->next) {
if (nick_is_services_oper(nc))
memo_send(u, nc->display, text, z);
}
}
return MOD_CONT;
for (i = 0; i < 1024; i++) {
for (nc = nclists[i]; nc; nc = nc->next) {
if (nick_is_services_oper(nc))
memo_send(u, nc->display, text, z);
}
}
return MOD_CONT;
}
MODULE_INIT("ms_staff", MSStaff)
+100 -100
View File
@@ -44,7 +44,7 @@ class NSAccess : public Module
**/
void myNickServHelp(User * u)
{
notice_lang(s_NickServ, u, NICK_HELP_CMD_ACCESS);
notice_lang(s_NickServ, u, NICK_HELP_CMD_ACCESS);
}
/**
@@ -54,125 +54,125 @@ void myNickServHelp(User * u)
**/
int do_access(User * u)
{
char *cmd = strtok(NULL, " ");
char *mask = strtok(NULL, " ");
NickAlias *na;
int i;
char **access;
char *cmd = strtok(NULL, " ");
char *mask = strtok(NULL, " ");
NickAlias *na;
int i;
char **access;
if (cmd && stricmp(cmd, "LIST") == 0 && mask && is_services_admin(u)
&& (na = findnick(mask))) {
if (cmd && stricmp(cmd, "LIST") == 0 && mask && is_services_admin(u)
&& (na = findnick(mask))) {
if (na->nc->accesscount == 0) {
notice_lang(s_NickServ, u, NICK_ACCESS_LIST_X_EMPTY, na->nick);
return MOD_CONT;
}
if (na->nc->accesscount == 0) {
notice_lang(s_NickServ, u, NICK_ACCESS_LIST_X_EMPTY, na->nick);
return MOD_CONT;
}
if (na->status & NS_VERBOTEN) {
notice_lang(s_NickServ, u, NICK_X_FORBIDDEN, na->nick);
return MOD_CONT;
}
if (na->status & NS_VERBOTEN) {
notice_lang(s_NickServ, u, NICK_X_FORBIDDEN, na->nick);
return MOD_CONT;
}
if (na->nc->flags & NI_SUSPENDED) {
notice_lang(s_NickServ, u, NICK_X_SUSPENDED, na->nick);
return MOD_CONT;
}
if (na->nc->flags & NI_SUSPENDED) {
notice_lang(s_NickServ, u, NICK_X_SUSPENDED, na->nick);
return MOD_CONT;
}
notice_lang(s_NickServ, u, NICK_ACCESS_LIST_X, mask);
mask = strtok(NULL, " ");
for (access = na->nc->access, i = 0; i < na->nc->accesscount;
access++, i++) {
if (mask && !match_wild(mask, *access))
continue;
notice_user(s_NickServ, u, " %s", *access);
}
notice_lang(s_NickServ, u, NICK_ACCESS_LIST_X, mask);
mask = strtok(NULL, " ");
for (access = na->nc->access, i = 0; i < na->nc->accesscount;
access++, i++) {
if (mask && !match_wild(mask, *access))
continue;
notice_user(s_NickServ, u, " %s", *access);
}
} else if (!cmd || ((stricmp(cmd, "LIST") == 0) ? !!mask : !mask)) {
syntax_error(s_NickServ, u, "ACCESS", NICK_ACCESS_SYNTAX);
} else if (!cmd || ((stricmp(cmd, "LIST") == 0) ? !!mask : !mask)) {
syntax_error(s_NickServ, u, "ACCESS", NICK_ACCESS_SYNTAX);
} else if (mask && !strchr(mask, '@')) {
notice_lang(s_NickServ, u, BAD_USERHOST_MASK);
notice_lang(s_NickServ, u, MORE_INFO, s_NickServ, "ACCESS");
} else if (mask && !strchr(mask, '@')) {
notice_lang(s_NickServ, u, BAD_USERHOST_MASK);
notice_lang(s_NickServ, u, MORE_INFO, s_NickServ, "ACCESS");
} else if (!(na = u->na)) {
notice_lang(s_NickServ, u, NICK_NOT_REGISTERED);
} else if (!(na = u->na)) {
notice_lang(s_NickServ, u, NICK_NOT_REGISTERED);
} else if (na->status & NS_VERBOTEN) {
notice_lang(s_NickServ, u, NICK_X_FORBIDDEN, na->nick);
} else if (na->status & NS_VERBOTEN) {
notice_lang(s_NickServ, u, NICK_X_FORBIDDEN, na->nick);
} else if (na->nc->flags & NI_SUSPENDED) {
notice_lang(s_NickServ, u, NICK_X_SUSPENDED, na->nick);
} else if (na->nc->flags & NI_SUSPENDED) {
notice_lang(s_NickServ, u, NICK_X_SUSPENDED, na->nick);
} else if (!nick_identified(u)) {
notice_lang(s_NickServ, u, NICK_IDENTIFY_REQUIRED, s_NickServ);
} else if (!nick_identified(u)) {
notice_lang(s_NickServ, u, NICK_IDENTIFY_REQUIRED, s_NickServ);
} else if (stricmp(cmd, "ADD") == 0) {
if (na->nc->accesscount >= NSAccessMax) {
notice_lang(s_NickServ, u, NICK_ACCESS_REACHED_LIMIT,
NSAccessMax);
return MOD_CONT;
}
} else if (stricmp(cmd, "ADD") == 0) {
if (na->nc->accesscount >= NSAccessMax) {
notice_lang(s_NickServ, u, NICK_ACCESS_REACHED_LIMIT,
NSAccessMax);
return MOD_CONT;
}
for (access = na->nc->access, i = 0; i < na->nc->accesscount;
access++, i++) {
if (strcmp(*access, mask) == 0) {
notice_lang(s_NickServ, u, NICK_ACCESS_ALREADY_PRESENT,
*access);
return MOD_CONT;
}
}
for (access = na->nc->access, i = 0; i < na->nc->accesscount;
access++, i++) {
if (strcmp(*access, mask) == 0) {
notice_lang(s_NickServ, u, NICK_ACCESS_ALREADY_PRESENT,
*access);
return MOD_CONT;
}
}
na->nc->accesscount++;
na->nc->access =
(char **)srealloc(na->nc->access, sizeof(char *) * na->nc->accesscount);
na->nc->access[na->nc->accesscount - 1] = sstrdup(mask);
notice_lang(s_NickServ, u, NICK_ACCESS_ADDED, mask);
na->nc->accesscount++;
na->nc->access =
(char **)srealloc(na->nc->access, sizeof(char *) * na->nc->accesscount);
na->nc->access[na->nc->accesscount - 1] = sstrdup(mask);
notice_lang(s_NickServ, u, NICK_ACCESS_ADDED, mask);
} else if (stricmp(cmd, "DEL") == 0) {
} else if (stricmp(cmd, "DEL") == 0) {
for (access = na->nc->access, i = 0; i < na->nc->accesscount;
access++, i++) {
if (stricmp(*access, mask) == 0)
break;
}
if (i == na->nc->accesscount) {
notice_lang(s_NickServ, u, NICK_ACCESS_NOT_FOUND, mask);
return MOD_CONT;
}
for (access = na->nc->access, i = 0; i < na->nc->accesscount;
access++, i++) {
if (stricmp(*access, mask) == 0)
break;
}
if (i == na->nc->accesscount) {
notice_lang(s_NickServ, u, NICK_ACCESS_NOT_FOUND, mask);
return MOD_CONT;
}
notice_lang(s_NickServ, u, NICK_ACCESS_DELETED, *access);
free(*access);
na->nc->accesscount--;
if (i < na->nc->accesscount) /* if it wasn't the last entry... */
memmove(access, access + 1,
(na->nc->accesscount - i) * sizeof(char *));
if (na->nc->accesscount) /* if there are any entries left... */
na->nc->access =
(char **)srealloc(na->nc->access,
na->nc->accesscount * sizeof(char *));
else {
free(na->nc->access);
na->nc->access = NULL;
}
} else if (stricmp(cmd, "LIST") == 0) {
if (na->nc->accesscount == 0) {
notice_lang(s_NickServ, u, NICK_ACCESS_LIST_EMPTY, u->nick);
return MOD_CONT;
}
notice_lang(s_NickServ, u, NICK_ACCESS_DELETED, *access);
free(*access);
na->nc->accesscount--;
if (i < na->nc->accesscount) /* if it wasn't the last entry... */
memmove(access, access + 1,
(na->nc->accesscount - i) * sizeof(char *));
if (na->nc->accesscount) /* if there are any entries left... */
na->nc->access =
(char **)srealloc(na->nc->access,
na->nc->accesscount * sizeof(char *));
else {
free(na->nc->access);
na->nc->access = NULL;
}
} else if (stricmp(cmd, "LIST") == 0) {
if (na->nc->accesscount == 0) {
notice_lang(s_NickServ, u, NICK_ACCESS_LIST_EMPTY, u->nick);
return MOD_CONT;
}
notice_lang(s_NickServ, u, NICK_ACCESS_LIST);
for (access = na->nc->access, i = 0; i < na->nc->accesscount;
access++, i++) {
if (mask && !match_wild(mask, *access))
continue;
notice_user(s_NickServ, u, " %s", *access);
}
} else {
syntax_error(s_NickServ, u, "ACCESS", NICK_ACCESS_SYNTAX);
notice_lang(s_NickServ, u, NICK_ACCESS_LIST);
for (access = na->nc->access, i = 0; i < na->nc->accesscount;
access++, i++) {
if (mask && !match_wild(mask, *access))
continue;
notice_user(s_NickServ, u, " %s", *access);
}
} else {
syntax_error(s_NickServ, u, "ACCESS", NICK_ACCESS_SYNTAX);
}
return MOD_CONT;
}
return MOD_CONT;
}
MODULE_INIT("ns_access", NSAccess)
+89 -89
View File
@@ -44,7 +44,7 @@ class NSAList : public Module
**/
void myNickServHelp(User * u)
{
notice_lang(s_NickServ, u, NICK_HELP_CMD_ALIST);
notice_lang(s_NickServ, u, NICK_HELP_CMD_ALIST);
}
/**
@@ -64,111 +64,111 @@ int do_alist(User * u)
* -jester
*/
char *nick = NULL;
char *lev = NULL;
char *nick = NULL;
char *lev = NULL;
NickAlias *na;
NickAlias *na;
int min_level = 0;
int is_servadmin = is_services_admin(u);
int min_level = 0;
int is_servadmin = is_services_admin(u);
if (!is_servadmin) {
/* Non service admins can only see their own levels */
na = u->na;
} else {
/* Services admins can request ALIST on nicks.
* The first argument for service admins must
* always be a nickname.
*/
nick = strtok(NULL, " ");
if (!is_servadmin) {
/* Non service admins can only see their own levels */
na = u->na;
} else {
/* Services admins can request ALIST on nicks.
* The first argument for service admins must
* always be a nickname.
*/
nick = strtok(NULL, " ");
/* If an argument was passed, use it as the nick to see levels
* for, else check levels for the user calling the command */
if (nick) {
na = findnick(nick);
} else {
na = u->na;
}
}
/* If an argument was passed, use it as the nick to see levels
* for, else check levels for the user calling the command */
if (nick) {
na = findnick(nick);
} else {
na = u->na;
}
}
/* If available, get level from arguments */
lev = strtok(NULL, " ");
/* If available, get level from arguments */
lev = strtok(NULL, " ");
/* if a level was given, make sure it's an int for later */
if (lev) {
if (stricmp(lev, "FOUNDER") == 0) {
min_level = ACCESS_FOUNDER;
} else if (stricmp(lev, "SOP") == 0) {
min_level = ACCESS_SOP;
} else if (stricmp(lev, "AOP") == 0) {
min_level = ACCESS_AOP;
} else if (stricmp(lev, "HOP") == 0) {
min_level = ACCESS_HOP;
} else if (stricmp(lev, "VOP") == 0) {
min_level = ACCESS_VOP;
} else {
min_level = atoi(lev);
}
}
/* if a level was given, make sure it's an int for later */
if (lev) {
if (stricmp(lev, "FOUNDER") == 0) {
min_level = ACCESS_FOUNDER;
} else if (stricmp(lev, "SOP") == 0) {
min_level = ACCESS_SOP;
} else if (stricmp(lev, "AOP") == 0) {
min_level = ACCESS_AOP;
} else if (stricmp(lev, "HOP") == 0) {
min_level = ACCESS_HOP;
} else if (stricmp(lev, "VOP") == 0) {
min_level = ACCESS_VOP;
} else {
min_level = atoi(lev);
}
}
if (!nick_identified(u)) {
notice_lang(s_NickServ, u, NICK_IDENTIFY_REQUIRED, s_NickServ);
} else if (is_servadmin && nick && !na) {
notice_lang(s_NickServ, u, NICK_X_NOT_REGISTERED, nick);
} else if (na->status & NS_VERBOTEN) {
notice_lang(s_NickServ, u, NICK_X_FORBIDDEN, na->nick);
} else if (min_level <= ACCESS_INVALID || min_level > ACCESS_FOUNDER) {
notice_lang(s_NickServ, u, CHAN_ACCESS_LEVEL_RANGE,
ACCESS_INVALID + 1, ACCESS_FOUNDER - 1);
} else {
int i, level;
int chan_count = 0;
int match_count = 0;
ChannelInfo *ci;
if (!nick_identified(u)) {
notice_lang(s_NickServ, u, NICK_IDENTIFY_REQUIRED, s_NickServ);
} else if (is_servadmin && nick && !na) {
notice_lang(s_NickServ, u, NICK_X_NOT_REGISTERED, nick);
} else if (na->status & NS_VERBOTEN) {
notice_lang(s_NickServ, u, NICK_X_FORBIDDEN, na->nick);
} else if (min_level <= ACCESS_INVALID || min_level > ACCESS_FOUNDER) {
notice_lang(s_NickServ, u, CHAN_ACCESS_LEVEL_RANGE,
ACCESS_INVALID + 1, ACCESS_FOUNDER - 1);
} else {
int i, level;
int chan_count = 0;
int match_count = 0;
ChannelInfo *ci;
notice_lang(s_NickServ, u, (is_servadmin ? NICK_ALIST_HEADER_X :
NICK_ALIST_HEADER), na->nick);
notice_lang(s_NickServ, u, (is_servadmin ? NICK_ALIST_HEADER_X :
NICK_ALIST_HEADER), na->nick);
for (i = 0; i < 256; i++) {
for ((ci = chanlists[i]); ci; (ci = ci->next)) {
for (i = 0; i < 256; i++) {
for ((ci = chanlists[i]); ci; (ci = ci->next)) {
if ((level = get_access_level(ci, na))) {
chan_count++;
if ((level = get_access_level(ci, na))) {
chan_count++;
if (min_level > level) {
continue;
}
if (min_level > level) {
continue;
}
match_count++;
match_count++;
if ((ci->flags & CI_XOP) || (level == ACCESS_FOUNDER)) {
const char *xop;
if ((ci->flags & CI_XOP) || (level == ACCESS_FOUNDER)) {
const char *xop;
xop = get_xop_level(level);
xop = get_xop_level(level);
notice_lang(s_NickServ, u, NICK_ALIST_XOP_FORMAT,
match_count,
((ci->
flags & CI_NO_EXPIRE) ? '!' : ' '),
ci->name, xop,
(ci->desc ? ci->desc : ""));
} else {
notice_lang(s_NickServ, u,
NICK_ALIST_ACCESS_FORMAT, match_count,
((ci->
flags & CI_NO_EXPIRE) ? '!' : ' '),
ci->name, level,
(ci->desc ? ci->desc : ""));
notice_lang(s_NickServ, u, NICK_ALIST_XOP_FORMAT,
match_count,
((ci->
flags & CI_NO_EXPIRE) ? '!' : ' '),
ci->name, xop,
(ci->desc ? ci->desc : ""));
} else {
notice_lang(s_NickServ, u,
NICK_ALIST_ACCESS_FORMAT, match_count,
((ci->
flags & CI_NO_EXPIRE) ? '!' : ' '),
ci->name, level,
(ci->desc ? ci->desc : ""));
}
}
}
}
}
}
}
}
notice_lang(s_NickServ, u, NICK_ALIST_FOOTER, match_count,
chan_count);
}
return MOD_CONT;
notice_lang(s_NickServ, u, NICK_ALIST_FOOTER, match_count,
chan_count);
}
return MOD_CONT;
}
MODULE_INIT("ns_alist", NSAList)
+72 -72
View File
@@ -46,7 +46,7 @@ class NSDrop : public Module
**/
void myNickServHelp(User * u)
{
notice_lang(s_NickServ, u, NICK_HELP_CMD_DROP);
notice_lang(s_NickServ, u, NICK_HELP_CMD_DROP);
}
/**
@@ -56,89 +56,89 @@ void myNickServHelp(User * u)
**/
int do_drop(User * u)
{
char *nick = strtok(NULL, " ");
NickAlias *na;
NickRequest *nr = NULL;
int is_servadmin = is_services_admin(u);
int is_mine; /* Does the nick being dropped belong to the user that is dropping? */
char *my_nick = NULL;
char *nick = strtok(NULL, " ");
NickAlias *na;
NickRequest *nr = NULL;
int is_servadmin = is_services_admin(u);
int is_mine; /* Does the nick being dropped belong to the user that is dropping? */
char *my_nick = NULL;
if (readonly && !is_servadmin) {
notice_lang(s_NickServ, u, NICK_DROP_DISABLED);
return MOD_CONT;
}
if (readonly && !is_servadmin) {
notice_lang(s_NickServ, u, NICK_DROP_DISABLED);
return MOD_CONT;
}
if (!(na = (nick ? findnick(nick) : u->na))) {
if (nick) {
if ((nr = findrequestnick(nick)) && is_servadmin) {
if (readonly)
notice_lang(s_NickServ, u, READ_ONLY_MODE);
if (WallDrop)
ircdproto->SendGlobops(s_NickServ,
"\2%s\2 used DROP on \2%s\2", u->nick,
nick);
alog("%s: %s!%s@%s dropped nickname %s (e-mail: %s)",
s_NickServ, u->nick, u->username, u->host,
nr->nick, nr->email);
delnickrequest(nr);
notice_lang(s_NickServ, u, NICK_X_DROPPED, nick);
} else {
notice_lang(s_NickServ, u, NICK_X_NOT_REGISTERED, nick);
}
} else
notice_lang(s_NickServ, u, NICK_NOT_REGISTERED);
return MOD_CONT;
}
if (!(na = (nick ? findnick(nick) : u->na))) {
if (nick) {
if ((nr = findrequestnick(nick)) && is_servadmin) {
if (readonly)
notice_lang(s_NickServ, u, READ_ONLY_MODE);
if (WallDrop)
ircdproto->SendGlobops(s_NickServ,
"\2%s\2 used DROP on \2%s\2", u->nick,
nick);
alog("%s: %s!%s@%s dropped nickname %s (e-mail: %s)",
s_NickServ, u->nick, u->username, u->host,
nr->nick, nr->email);
delnickrequest(nr);
notice_lang(s_NickServ, u, NICK_X_DROPPED, nick);
} else {
notice_lang(s_NickServ, u, NICK_X_NOT_REGISTERED, nick);
}
} else
notice_lang(s_NickServ, u, NICK_NOT_REGISTERED);
return MOD_CONT;
}
is_mine = (u->na && (u->na->nc == na->nc));
if (is_mine && !nick)
my_nick = sstrdup(na->nick);
is_mine = (u->na && (u->na->nc == na->nc));
if (is_mine && !nick)
my_nick = sstrdup(na->nick);
if (is_mine && !nick_identified(u)) {
notice_lang(s_NickServ, u, NICK_IDENTIFY_REQUIRED, s_NickServ);
} else if (!is_mine && !is_servadmin) {
notice_lang(s_NickServ, u, ACCESS_DENIED);
} else if (NSSecureAdmins && !is_mine && nick_is_services_admin(na->nc)
&& !is_services_root(u)) {
notice_lang(s_NickServ, u, PERMISSION_DENIED);
} else {
if (readonly)
notice_lang(s_NickServ, u, READ_ONLY_MODE);
if (is_mine && !nick_identified(u)) {
notice_lang(s_NickServ, u, NICK_IDENTIFY_REQUIRED, s_NickServ);
} else if (!is_mine && !is_servadmin) {
notice_lang(s_NickServ, u, ACCESS_DENIED);
} else if (NSSecureAdmins && !is_mine && nick_is_services_admin(na->nc)
&& !is_services_root(u)) {
notice_lang(s_NickServ, u, PERMISSION_DENIED);
} else {
if (readonly)
notice_lang(s_NickServ, u, READ_ONLY_MODE);
if (ircd->sqline && (na->status & NS_VERBOTEN)) {
ircdproto->SendSQLineDel(na->nick);
}
if (ircd->sqline && (na->status & NS_VERBOTEN)) {
ircdproto->SendSQLineDel(na->nick);
}
alog("%s: %s!%s@%s dropped nickname %s (group %s) (e-mail: %s)",
s_NickServ, u->nick, u->username, u->host,
na->nick, na->nc->display,
(na->nc->email ? na->nc->email : "none"));
delnick(na);
send_event(EVENT_NICK_DROPPED, 1, (my_nick ? my_nick : nick));
alog("%s: %s!%s@%s dropped nickname %s (group %s) (e-mail: %s)",
s_NickServ, u->nick, u->username, u->host,
na->nick, na->nc->display,
(na->nc->email ? na->nc->email : "none"));
delnick(na);
send_event(EVENT_NICK_DROPPED, 1, (my_nick ? my_nick : nick));
if (!is_mine) {
if (WallDrop)
ircdproto->SendGlobops(s_NickServ, "\2%s\2 used DROP on \2%s\2",
u->nick, nick);
notice_lang(s_NickServ, u, NICK_X_DROPPED, nick);
} else {
if (nick)
notice_lang(s_NickServ, u, NICK_X_DROPPED, nick);
else
notice_lang(s_NickServ, u, NICK_DROPPED);
if (my_nick) {
free(my_nick);
}
}
}
return MOD_CONT;
if (!is_mine) {
if (WallDrop)
ircdproto->SendGlobops(s_NickServ, "\2%s\2 used DROP on \2%s\2",
u->nick, nick);
notice_lang(s_NickServ, u, NICK_X_DROPPED, nick);
} else {
if (nick)
notice_lang(s_NickServ, u, NICK_X_DROPPED, nick);
else
notice_lang(s_NickServ, u, NICK_DROPPED);
if (my_nick) {
free(my_nick);
}
}
}
return MOD_CONT;
}
int do_unlink(User * u)
{
notice_lang(s_NickServ, u, OBSOLETE_COMMAND, "DROP");
return MOD_CONT;
notice_lang(s_NickServ, u, OBSOLETE_COMMAND, "DROP");
return MOD_CONT;
}
MODULE_INIT("ns_drop", NSDrop)
+70 -70
View File
@@ -45,9 +45,9 @@ class NSForbid : public Module
**/
void myNickServHelp(User * u)
{
if (is_services_admin(u)) {
notice_lang(s_NickServ, u, NICK_HELP_CMD_FORBID);
}
if (is_services_admin(u)) {
notice_lang(s_NickServ, u, NICK_HELP_CMD_FORBID);
}
}
/**
@@ -57,87 +57,87 @@ void myNickServHelp(User * u)
**/
int do_forbid(User * u)
{
NickAlias *na;
char *nick = strtok(NULL, " ");
char *reason = strtok(NULL, "");
NickAlias *na;
char *nick = strtok(NULL, " ");
char *reason = strtok(NULL, "");
/* Assumes that permission checking has already been done. */
if (!nick || (ForceForbidReason && !reason)) {
syntax_error(s_NickServ, u, "FORBID",
(ForceForbidReason ? NICK_FORBID_SYNTAX_REASON :
NICK_FORBID_SYNTAX));
return MOD_CONT;
}
/* Assumes that permission checking has already been done. */
if (!nick || (ForceForbidReason && !reason)) {
syntax_error(s_NickServ, u, "FORBID",
(ForceForbidReason ? NICK_FORBID_SYNTAX_REASON :
NICK_FORBID_SYNTAX));
return MOD_CONT;
}
if (readonly)
notice_lang(s_NickServ, u, READ_ONLY_MODE);
if (!ircdproto->IsNickValid(nick)) {
notice_lang(s_NickServ, u, NICK_X_FORBIDDEN, nick);
return MOD_CONT;
}
if ((na = findnick(nick)) != NULL) {
if (NSSecureAdmins && nick_is_services_admin(na->nc)
&& !is_services_root(u)) {
notice_lang(s_NickServ, u, PERMISSION_DENIED);
return MOD_CONT;
}
delnick(na);
}
na = makenick(nick);
if (na) {
na->status |= NS_VERBOTEN;
na->last_usermask = sstrdup(u->nick);
if (reason)
na->last_realname = sstrdup(reason);
if (readonly)
notice_lang(s_NickServ, u, READ_ONLY_MODE);
if (!ircdproto->IsNickValid(nick)) {
notice_lang(s_NickServ, u, NICK_X_FORBIDDEN, nick);
return MOD_CONT;
}
if ((na = findnick(nick)) != NULL) {
if (NSSecureAdmins && nick_is_services_admin(na->nc)
&& !is_services_root(u)) {
notice_lang(s_NickServ, u, PERMISSION_DENIED);
return MOD_CONT;
}
delnick(na);
}
na = makenick(nick);
if (na) {
na->status |= NS_VERBOTEN;
na->last_usermask = sstrdup(u->nick);
if (reason)
na->last_realname = sstrdup(reason);
na->u = finduser(na->nick);
if (na->u)
na->u->na = na;
na->u = finduser(na->nick);
if (na->u)
na->u->na = na;
if (na->u) {
notice_lang(s_NickServ, na->u, FORCENICKCHANGE_NOW);
collide(na, 0);
}
if (na->u) {
notice_lang(s_NickServ, na->u, FORCENICKCHANGE_NOW);
collide(na, 0);
}
if (ircd->sqline) {
ircdproto->SendSQLine(na->nick, ((reason) ? reason : "Forbidden"));
}
if (ircd->sqline) {
ircdproto->SendSQLine(na->nick, ((reason) ? reason : "Forbidden"));
}
if (WallForbid)
ircdproto->SendGlobops(s_NickServ, "\2%s\2 used FORBID on \2%s\2",
u->nick, nick);
if (WallForbid)
ircdproto->SendGlobops(s_NickServ, "\2%s\2 used FORBID on \2%s\2",
u->nick, nick);
alog("%s: %s set FORBID for nick %s", s_NickServ, u->nick, nick);
notice_lang(s_NickServ, u, NICK_FORBID_SUCCEEDED, nick);
send_event(EVENT_NICK_FORBIDDEN, 1, nick);
} else {
alog("%s: Valid FORBID for %s by %s failed", s_NickServ, nick,
u->nick);
notice_lang(s_NickServ, u, NICK_FORBID_FAILED, nick);
}
return MOD_CONT;
alog("%s: %s set FORBID for nick %s", s_NickServ, u->nick, nick);
notice_lang(s_NickServ, u, NICK_FORBID_SUCCEEDED, nick);
send_event(EVENT_NICK_FORBIDDEN, 1, nick);
} else {
alog("%s: Valid FORBID for %s by %s failed", s_NickServ, nick,
u->nick);
notice_lang(s_NickServ, u, NICK_FORBID_FAILED, nick);
}
return MOD_CONT;
}
NickAlias *makenick(const char *nick)
{
NickAlias *na;
NickCore *nc;
NickAlias *na;
NickCore *nc;
/* First make the core */
nc = (NickCore *)scalloc(1, sizeof(NickCore));
nc->display = sstrdup(nick);
slist_init(&nc->aliases);
insert_core(nc);
alog("%s: group %s has been created", s_NickServ, nc->display);
/* First make the core */
nc = (NickCore *)scalloc(1, sizeof(NickCore));
nc->display = sstrdup(nick);
slist_init(&nc->aliases);
insert_core(nc);
alog("%s: group %s has been created", s_NickServ, nc->display);
/* Then make the alias */
na = (NickAlias *)scalloc(1, sizeof(NickAlias));
na->nick = sstrdup(nick);
na->nc = nc;
slist_add(&nc->aliases, na);
alpha_insert_alias(na);
return na;
/* Then make the alias */
na = (NickAlias *)scalloc(1, sizeof(NickAlias));
na->nick = sstrdup(nick);
na->nc = nc;
slist_add(&nc->aliases, na);
alpha_insert_alias(na);
return na;
}
MODULE_INIT("ns_forbid", NSForbid)
+30 -30
View File
@@ -10,8 +10,8 @@
*
*
* A simple call to check for all emails that a user may have registered
* with. It returns the nicks that match the email you provide. Wild
* Cards are not excepted. Must use user@email-host.
* with. It returns the nicks that match the email you provide. Wild
* Cards are not excepted. Must use user@email-host.
*
* $Id$
*
@@ -47,9 +47,9 @@ class NSGetEMail : public Module
**/
void myNickServHelp(User * u)
{
if (is_services_admin(u)) {
notice_lang(s_NickServ, u, NICK_HELP_CMD_GETEMAIL);
}
if (is_services_admin(u)) {
notice_lang(s_NickServ, u, NICK_HELP_CMD_GETEMAIL);
}
}
/**
@@ -59,32 +59,32 @@ void myNickServHelp(User * u)
**/
int do_getemail(User * u)
{
char *email = strtok(NULL, " ");
int i, j = 0;
NickCore *nc;
char *email = strtok(NULL, " ");
int i, j = 0;
NickCore *nc;
if (!email) {
syntax_error(s_NickServ, u, "GETMAIL", NICK_GETEMAIL_SYNTAX);
return MOD_CONT;
}
alog("%s: %s!%s@%s used GETEMAIL on %s", s_NickServ, u->nick,
u->username, u->host, email);
for (i = 0; i < 1024; i++) {
for (nc = nclists[i]; nc; nc = nc->next) {
if (nc->email) {
if (stricmp(nc->email, email) == 0) {
j++;
notice_lang(s_NickServ, u, NICK_GETEMAIL_EMAILS_ARE,
nc->display, email);
}
}
}
}
if (j <= 0) {
notice_lang(s_NickServ, u, NICK_GETEMAIL_NOT_USED, email);
return MOD_CONT;
}
return MOD_CONT;
if (!email) {
syntax_error(s_NickServ, u, "GETMAIL", NICK_GETEMAIL_SYNTAX);
return MOD_CONT;
}
alog("%s: %s!%s@%s used GETEMAIL on %s", s_NickServ, u->nick,
u->username, u->host, email);
for (i = 0; i < 1024; i++) {
for (nc = nclists[i]; nc; nc = nc->next) {
if (nc->email) {
if (stricmp(nc->email, email) == 0) {
j++;
notice_lang(s_NickServ, u, NICK_GETEMAIL_EMAILS_ARE,
nc->display, email);
}
}
}
}
if (j <= 0) {
notice_lang(s_NickServ, u, NICK_GETEMAIL_NOT_USED, email);
return MOD_CONT;
}
return MOD_CONT;
}
MODULE_INIT("ns_getemail", NSGetEMail)
+43 -43
View File
@@ -42,9 +42,9 @@ class NSGetPass : public Module
**/
void myNickServHelp(User * u)
{
if (is_services_admin(u)) {
notice_lang(s_NickServ, u, NICK_HELP_CMD_GETPASS);
}
if (is_services_admin(u)) {
notice_lang(s_NickServ, u, NICK_HELP_CMD_GETPASS);
}
}
/**
@@ -54,47 +54,47 @@ void myNickServHelp(User * u)
**/
int do_getpass(User * u)
{
char *nick = strtok(NULL, " ");
char tmp_pass[PASSMAX];
NickAlias *na;
NickRequest *nr = NULL;
char *nick = strtok(NULL, " ");
char tmp_pass[PASSMAX];
NickAlias *na;
NickRequest *nr = NULL;
if (!nick) {
syntax_error(s_NickServ, u, "GETPASS", NICK_GETPASS_SYNTAX);
} else if (!(na = findnick(nick))) {
if ((nr = findrequestnick(nick))) {
alog("%s: %s!%s@%s used GETPASS on %s", s_NickServ, u->nick,
u->username, u->host, nick);
if (WallGetpass)
ircdproto->SendGlobops(s_NickServ,
"\2%s\2 used GETPASS on \2%s\2", u->nick,
nick);
notice_lang(s_NickServ, u, NICK_GETPASS_PASSCODE_IS, nick,
nr->passcode);
} else {
notice_lang(s_NickServ, u, NICK_X_NOT_REGISTERED, nick);
}
} else if (na->status & NS_VERBOTEN) {
notice_lang(s_NickServ, u, NICK_X_FORBIDDEN, na->nick);
} else if (NSSecureAdmins && nick_is_services_admin(na->nc)
&& !is_services_root(u)) {
notice_lang(s_NickServ, u, PERMISSION_DENIED);
} else if (NSRestrictGetPass && !is_services_root(u)) {
notice_lang(s_NickServ, u, PERMISSION_DENIED);
} else {
if(enc_decrypt(na->nc->pass,tmp_pass,PASSMAX - 1)==1) {
alog("%s: %s!%s@%s used GETPASS on %s", s_NickServ, u->nick,
u->username, u->host, nick);
if (WallGetpass)
ircdproto->SendGlobops(s_NickServ, "\2%s\2 used GETPASS on \2%s\2",
u->nick, nick);
notice_lang(s_NickServ, u, NICK_GETPASS_PASSWORD_IS, nick,
tmp_pass);
} else {
notice_lang(s_NickServ, u, NICK_GETPASS_UNAVAILABLE);
}
}
return MOD_CONT;
if (!nick) {
syntax_error(s_NickServ, u, "GETPASS", NICK_GETPASS_SYNTAX);
} else if (!(na = findnick(nick))) {
if ((nr = findrequestnick(nick))) {
alog("%s: %s!%s@%s used GETPASS on %s", s_NickServ, u->nick,
u->username, u->host, nick);
if (WallGetpass)
ircdproto->SendGlobops(s_NickServ,
"\2%s\2 used GETPASS on \2%s\2", u->nick,
nick);
notice_lang(s_NickServ, u, NICK_GETPASS_PASSCODE_IS, nick,
nr->passcode);
} else {
notice_lang(s_NickServ, u, NICK_X_NOT_REGISTERED, nick);
}
} else if (na->status & NS_VERBOTEN) {
notice_lang(s_NickServ, u, NICK_X_FORBIDDEN, na->nick);
} else if (NSSecureAdmins && nick_is_services_admin(na->nc)
&& !is_services_root(u)) {
notice_lang(s_NickServ, u, PERMISSION_DENIED);
} else if (NSRestrictGetPass && !is_services_root(u)) {
notice_lang(s_NickServ, u, PERMISSION_DENIED);
} else {
if(enc_decrypt(na->nc->pass,tmp_pass,PASSMAX - 1)==1) {
alog("%s: %s!%s@%s used GETPASS on %s", s_NickServ, u->nick,
u->username, u->host, nick);
if (WallGetpass)
ircdproto->SendGlobops(s_NickServ, "\2%s\2 used GETPASS on \2%s\2",
u->nick, nick);
notice_lang(s_NickServ, u, NICK_GETPASS_PASSWORD_IS, nick,
tmp_pass);
} else {
notice_lang(s_NickServ, u, NICK_GETPASS_UNAVAILABLE);
}
}
return MOD_CONT;
}
MODULE_INIT("ns_getpass", NSGetPass)
+52 -52
View File
@@ -44,7 +44,7 @@ class NSGhost : public Module
**/
void myNickServHelp(User * u)
{
notice_lang(s_NickServ, u, NICK_HELP_CMD_GHOST);
notice_lang(s_NickServ, u, NICK_HELP_CMD_GHOST);
}
/**
@@ -54,58 +54,58 @@ void myNickServHelp(User * u)
**/
int do_ghost(User * u)
{
char *nick = strtok(NULL, " ");
char *pass = strtok(NULL, " ");
NickAlias *na;
User *u2;
char *nick = strtok(NULL, " ");
char *pass = strtok(NULL, " ");
NickAlias *na;
User *u2;
if (!nick) {
syntax_error(s_NickServ, u, "GHOST", NICK_GHOST_SYNTAX);
} else if (!(u2 = finduser(nick))) {
notice_lang(s_NickServ, u, NICK_X_NOT_IN_USE, nick);
} else if (!(na = u2->na)) {
notice_lang(s_NickServ, u, NICK_X_NOT_REGISTERED, nick);
} else if (na->status & NS_VERBOTEN) {
notice_lang(s_NickServ, u, NICK_X_FORBIDDEN, na->nick);
} else if (na->nc->flags & NI_SUSPENDED) {
notice_lang(s_NickServ, u, NICK_X_SUSPENDED, na->nick);
} else if (stricmp(nick, u->nick) == 0) {
notice_lang(s_NickServ, u, NICK_NO_GHOST_SELF);
} else if (pass) {
int res = enc_check_password(pass, na->nc->pass);
if (res == 1) {
char buf[NICKMAX + 32];
snprintf(buf, sizeof(buf), "GHOST command used by %s",
u->nick);
if (LimitSessions) {
del_session(u2->host);
}
kill_user(s_NickServ, nick, buf);
notice_lang(s_NickServ, u, NICK_GHOST_KILLED, nick);
} else {
notice_lang(s_NickServ, u, ACCESS_DENIED);
if (res == 0) {
alog("%s: GHOST: invalid password for %s by %s!%s@%s",
s_NickServ, nick, u->nick, u->username, u->host);
bad_password(u);
}
}
} else {
if (group_identified(u, na->nc)
|| (!(na->nc->flags & NI_SECURE) && is_on_access(u, na->nc))) {
char buf[NICKMAX + 32];
snprintf(buf, sizeof(buf), "GHOST command used by %s",
u->nick);
if (LimitSessions) {
del_session(u2->host);
}
kill_user(s_NickServ, nick, buf);
notice_lang(s_NickServ, u, NICK_GHOST_KILLED, nick);
} else {
notice_lang(s_NickServ, u, ACCESS_DENIED);
}
}
return MOD_CONT;
if (!nick) {
syntax_error(s_NickServ, u, "GHOST", NICK_GHOST_SYNTAX);
} else if (!(u2 = finduser(nick))) {
notice_lang(s_NickServ, u, NICK_X_NOT_IN_USE, nick);
} else if (!(na = u2->na)) {
notice_lang(s_NickServ, u, NICK_X_NOT_REGISTERED, nick);
} else if (na->status & NS_VERBOTEN) {
notice_lang(s_NickServ, u, NICK_X_FORBIDDEN, na->nick);
} else if (na->nc->flags & NI_SUSPENDED) {
notice_lang(s_NickServ, u, NICK_X_SUSPENDED, na->nick);
} else if (stricmp(nick, u->nick) == 0) {
notice_lang(s_NickServ, u, NICK_NO_GHOST_SELF);
} else if (pass) {
int res = enc_check_password(pass, na->nc->pass);
if (res == 1) {
char buf[NICKMAX + 32];
snprintf(buf, sizeof(buf), "GHOST command used by %s",
u->nick);
if (LimitSessions) {
del_session(u2->host);
}
kill_user(s_NickServ, nick, buf);
notice_lang(s_NickServ, u, NICK_GHOST_KILLED, nick);
} else {
notice_lang(s_NickServ, u, ACCESS_DENIED);
if (res == 0) {
alog("%s: GHOST: invalid password for %s by %s!%s@%s",
s_NickServ, nick, u->nick, u->username, u->host);
bad_password(u);
}
}
} else {
if (group_identified(u, na->nc)
|| (!(na->nc->flags & NI_SECURE) && is_on_access(u, na->nc))) {
char buf[NICKMAX + 32];
snprintf(buf, sizeof(buf), "GHOST command used by %s",
u->nick);
if (LimitSessions) {
del_session(u2->host);
}
kill_user(s_NickServ, nick, buf);
notice_lang(s_NickServ, u, NICK_GHOST_KILLED, nick);
} else {
notice_lang(s_NickServ, u, ACCESS_DENIED);
}
}
return MOD_CONT;
}
MODULE_INIT("ns_ghost", NSGhost)
+202 -202
View File
@@ -60,8 +60,8 @@ class NSGroup : public Module
**/
void myNickServHelp(User * u)
{
notice_lang(s_NickServ, u, NICK_HELP_CMD_GROUP);
notice_lang(s_NickServ, u, NICK_HELP_CMD_GLIST);
notice_lang(s_NickServ, u, NICK_HELP_CMD_GROUP);
notice_lang(s_NickServ, u, NICK_HELP_CMD_GLIST);
}
/**
@@ -73,162 +73,162 @@ void myNickServHelp(User * u)
int do_group(User * u)
{
NickAlias *na, *target;
NickCore *nc;
char *nick = strtok(NULL, " ");
char *pass = strtok(NULL, " ");
int i;
char tsbuf[16];
char modes[512];
int len;
NickAlias *na, *target;
NickCore *nc;
char *nick = strtok(NULL, " ");
char *pass = strtok(NULL, " ");
int i;
char tsbuf[16];
char modes[512];
int len;
if (NSEmailReg && (findrequestnick(u->nick))) {
notice_lang(s_NickServ, u, NICK_REQUESTED);
return MOD_CONT;
}
if (NSEmailReg && (findrequestnick(u->nick))) {
notice_lang(s_NickServ, u, NICK_REQUESTED);
return MOD_CONT;
}
if (readonly) {
notice_lang(s_NickServ, u, NICK_GROUP_DISABLED);
return MOD_CONT;
}
if (checkDefCon(DEFCON_NO_NEW_NICKS)) {
notice_lang(s_NickServ, u, OPER_DEFCON_DENIED);
return MOD_CONT;
}
if (readonly) {
notice_lang(s_NickServ, u, NICK_GROUP_DISABLED);
return MOD_CONT;
}
if (checkDefCon(DEFCON_NO_NEW_NICKS)) {
notice_lang(s_NickServ, u, OPER_DEFCON_DENIED);
return MOD_CONT;
}
if (RestrictOperNicks) {
for (i = 0; i < RootNumber; i++) {
if (stristr(u->nick, ServicesRoots[i]) && !is_oper(u)) {
notice_lang(s_NickServ, u, NICK_CANNOT_BE_REGISTERED,
u->nick);
return MOD_CONT;
}
}
for (i = 0; i < servadmins.count && (nc = (NickCore *)servadmins.list[i]); i++) {
if (stristr(u->nick, nc->display) && !is_oper(u)) {
notice_lang(s_NickServ, u, NICK_CANNOT_BE_REGISTERED,
u->nick);
return MOD_CONT;
}
}
for (i = 0; i < servopers.count && (nc = (NickCore *)servopers.list[i]); i++) {
if (stristr(u->nick, nc->display) && !is_oper(u)) {
notice_lang(s_NickServ, u, NICK_CANNOT_BE_REGISTERED,
u->nick);
return MOD_CONT;
}
}
}
if (RestrictOperNicks) {
for (i = 0; i < RootNumber; i++) {
if (stristr(u->nick, ServicesRoots[i]) && !is_oper(u)) {
notice_lang(s_NickServ, u, NICK_CANNOT_BE_REGISTERED,
u->nick);
return MOD_CONT;
}
}
for (i = 0; i < servadmins.count && (nc = (NickCore *)servadmins.list[i]); i++) {
if (stristr(u->nick, nc->display) && !is_oper(u)) {
notice_lang(s_NickServ, u, NICK_CANNOT_BE_REGISTERED,
u->nick);
return MOD_CONT;
}
}
for (i = 0; i < servopers.count && (nc = (NickCore *)servopers.list[i]); i++) {
if (stristr(u->nick, nc->display) && !is_oper(u)) {
notice_lang(s_NickServ, u, NICK_CANNOT_BE_REGISTERED,
u->nick);
return MOD_CONT;
}
}
}
if (!nick || !pass) {
syntax_error(s_NickServ, u, "GROUP", NICK_GROUP_SYNTAX);
} else if (!(target = findnick(nick))) {
notice_lang(s_NickServ, u, NICK_X_NOT_REGISTERED, nick);
} else if (time(NULL) < u->lastnickreg + NSRegDelay) {
notice_lang(s_NickServ, u, NICK_GROUP_PLEASE_WAIT, NSRegDelay);
} else if (u->na && (u->na->status & NS_VERBOTEN)) {
alog("%s: %s@%s tried to use GROUP from FORBIDden nick %s",
s_NickServ, u->username, u->host, u->nick);
notice_lang(s_NickServ, u, NICK_X_FORBIDDEN, u->nick);
} else if (u->na && (u->na->nc->flags & NI_SUSPENDED)) {
alog("%s: %s!%s@%s tried to use GROUP from SUSPENDED nick %s",
s_NickServ, u->nick, u->username, u->host, target->nick);
notice_lang(s_NickServ, u, NICK_X_SUSPENDED, u->nick);
} else if (u->na && NSNoGroupChange) {
notice_lang(s_NickServ, u, NICK_GROUP_CHANGE_DISABLED, s_NickServ);
} else if (u->na && !nick_identified(u)) {
notice_lang(s_NickServ, u, NICK_IDENTIFY_REQUIRED, s_NickServ);
} else if (target && (target->nc->flags & NI_SUSPENDED)) {
alog("%s: %s!%s@%s tried to use GROUP from SUSPENDED nick %s",
s_NickServ, u->nick, u->username, u->host, target->nick);
notice_lang(s_NickServ, u, NICK_X_SUSPENDED, target->nick);
} else if (target->status & NS_VERBOTEN) {
notice_lang(s_NickServ, u, NICK_X_FORBIDDEN, nick);
} else if (u->na && target->nc == u->na->nc) {
notice_lang(s_NickServ, u, NICK_GROUP_SAME, target->nick);
} else if (NSMaxAliases && (target->nc->aliases.count >= NSMaxAliases)
&& !nick_is_services_admin(target->nc)) {
notice_lang(s_NickServ, u, NICK_GROUP_TOO_MANY, target->nick,
s_NickServ, s_NickServ);
} else if (enc_check_password(pass, target->nc->pass) != 1) {
alog("%s: Failed GROUP for %s!%s@%s (invalid password)",
s_NickServ, u->nick, u->username, u->host);
notice_lang(s_NickServ, u, PASSWORD_INCORRECT);
bad_password(u);
} else {
/* If the nick is already registered, drop it.
* If not, check that it is valid.
*/
if (u->na) {
delnick(u->na);
} else {
int prefixlen = strlen(NSGuestNickPrefix);
int nicklen = strlen(u->nick);
if (!nick || !pass) {
syntax_error(s_NickServ, u, "GROUP", NICK_GROUP_SYNTAX);
} else if (!(target = findnick(nick))) {
notice_lang(s_NickServ, u, NICK_X_NOT_REGISTERED, nick);
} else if (time(NULL) < u->lastnickreg + NSRegDelay) {
notice_lang(s_NickServ, u, NICK_GROUP_PLEASE_WAIT, NSRegDelay);
} else if (u->na && (u->na->status & NS_VERBOTEN)) {
alog("%s: %s@%s tried to use GROUP from FORBIDden nick %s",
s_NickServ, u->username, u->host, u->nick);
notice_lang(s_NickServ, u, NICK_X_FORBIDDEN, u->nick);
} else if (u->na && (u->na->nc->flags & NI_SUSPENDED)) {
alog("%s: %s!%s@%s tried to use GROUP from SUSPENDED nick %s",
s_NickServ, u->nick, u->username, u->host, target->nick);
notice_lang(s_NickServ, u, NICK_X_SUSPENDED, u->nick);
} else if (u->na && NSNoGroupChange) {
notice_lang(s_NickServ, u, NICK_GROUP_CHANGE_DISABLED, s_NickServ);
} else if (u->na && !nick_identified(u)) {
notice_lang(s_NickServ, u, NICK_IDENTIFY_REQUIRED, s_NickServ);
} else if (target && (target->nc->flags & NI_SUSPENDED)) {
alog("%s: %s!%s@%s tried to use GROUP from SUSPENDED nick %s",
s_NickServ, u->nick, u->username, u->host, target->nick);
notice_lang(s_NickServ, u, NICK_X_SUSPENDED, target->nick);
} else if (target->status & NS_VERBOTEN) {
notice_lang(s_NickServ, u, NICK_X_FORBIDDEN, nick);
} else if (u->na && target->nc == u->na->nc) {
notice_lang(s_NickServ, u, NICK_GROUP_SAME, target->nick);
} else if (NSMaxAliases && (target->nc->aliases.count >= NSMaxAliases)
&& !nick_is_services_admin(target->nc)) {
notice_lang(s_NickServ, u, NICK_GROUP_TOO_MANY, target->nick,
s_NickServ, s_NickServ);
} else if (enc_check_password(pass, target->nc->pass) != 1) {
alog("%s: Failed GROUP for %s!%s@%s (invalid password)",
s_NickServ, u->nick, u->username, u->host);
notice_lang(s_NickServ, u, PASSWORD_INCORRECT);
bad_password(u);
} else {
/* If the nick is already registered, drop it.
* If not, check that it is valid.
*/
if (u->na) {
delnick(u->na);
} else {
int prefixlen = strlen(NSGuestNickPrefix);
int nicklen = strlen(u->nick);
if (nicklen <= prefixlen + 7 && nicklen >= prefixlen + 1
&& stristr(u->nick, NSGuestNickPrefix) == u->nick
&& strspn(u->nick + prefixlen,
"1234567890") == nicklen - prefixlen) {
notice_lang(s_NickServ, u, NICK_CANNOT_BE_REGISTERED,
u->nick);
return MOD_CONT;
}
}
na = makealias(u->nick, target->nc);
if (nicklen <= prefixlen + 7 && nicklen >= prefixlen + 1
&& stristr(u->nick, NSGuestNickPrefix) == u->nick
&& strspn(u->nick + prefixlen,
"1234567890") == nicklen - prefixlen) {
notice_lang(s_NickServ, u, NICK_CANNOT_BE_REGISTERED,
u->nick);
return MOD_CONT;
}
}
na = makealias(u->nick, target->nc);
if (na) {
na->last_usermask =
(char *)scalloc(strlen(common_get_vident(u)) +
strlen(common_get_vhost(u)) + 2, 1);
sprintf(na->last_usermask, "%s@%s", common_get_vident(u),
common_get_vhost(u));
na->last_realname = sstrdup(u->realname);
na->time_registered = na->last_seen = time(NULL);
na->status = (int16) (NS_IDENTIFIED | NS_RECOGNIZED);
if (na) {
na->last_usermask =
(char *)scalloc(strlen(common_get_vident(u)) +
strlen(common_get_vhost(u)) + 2, 1);
sprintf(na->last_usermask, "%s@%s", common_get_vident(u),
common_get_vhost(u));
na->last_realname = sstrdup(u->realname);
na->time_registered = na->last_seen = time(NULL);
na->status = (int16) (NS_IDENTIFIED | NS_RECOGNIZED);
if (!(na->nc->flags & NI_SERVICES_ROOT)) {
for (i = 0; i < RootNumber; i++) {
if (!stricmp(ServicesRoots[i], u->nick)) {
na->nc->flags |= NI_SERVICES_ROOT;
break;
}
}
}
if (!(na->nc->flags & NI_SERVICES_ROOT)) {
for (i = 0; i < RootNumber; i++) {
if (!stricmp(ServicesRoots[i], u->nick)) {
na->nc->flags |= NI_SERVICES_ROOT;
break;
}
}
}
u->na = na;
na->u = u;
u->na = na;
na->u = u;
send_event(EVENT_GROUP, 1, u->nick);
alog("%s: %s!%s@%s makes %s join group of %s (%s) (e-mail: %s)", s_NickServ, u->nick, u->username, u->host, u->nick, target->nick, target->nc->display, (target->nc->email ? target->nc->email : "none"));
notice_lang(s_NickServ, u, NICK_GROUP_JOINED, target->nick);
send_event(EVENT_GROUP, 1, u->nick);
alog("%s: %s!%s@%s makes %s join group of %s (%s) (e-mail: %s)", s_NickServ, u->nick, u->username, u->host, u->nick, target->nick, target->nc->display, (target->nc->email ? target->nc->email : "none"));
notice_lang(s_NickServ, u, NICK_GROUP_JOINED, target->nick);
u->lastnickreg = time(NULL);
snprintf(tsbuf, sizeof(tsbuf), "%lu",
(unsigned long int) u->timestamp);
if (ircd->modeonreg) {
len = strlen(ircd->modeonreg);
strncpy(modes,ircd->modeonreg,512);
if(ircd->rootmodeonid && is_services_root(u)) {
strncat(modes,ircd->rootmodeonid,512-len);
} else if(ircd->adminmodeonid && is_services_admin(u)) {
strncat(modes,ircd->adminmodeonid,512-len);
} else if(ircd->opermodeonid && is_services_oper(u)) {
strncat(modes,ircd->opermodeonid,512-len);
}
if (ircd->tsonmode) {
common_svsmode(u, modes, tsbuf);
} else {
common_svsmode(u, modes, NULL);
}
}
u->lastnickreg = time(NULL);
snprintf(tsbuf, sizeof(tsbuf), "%lu",
(unsigned long int) u->timestamp);
if (ircd->modeonreg) {
len = strlen(ircd->modeonreg);
strncpy(modes,ircd->modeonreg,512);
if(ircd->rootmodeonid && is_services_root(u)) {
strncat(modes,ircd->rootmodeonid,512-len);
} else if(ircd->adminmodeonid && is_services_admin(u)) {
strncat(modes,ircd->adminmodeonid,512-len);
} else if(ircd->opermodeonid && is_services_oper(u)) {
strncat(modes,ircd->opermodeonid,512-len);
}
if (ircd->tsonmode) {
common_svsmode(u, modes, tsbuf);
} else {
common_svsmode(u, modes, NULL);
}
}
check_memos(u);
} else {
alog("%s: makealias(%s) failed", s_NickServ, u->nick);
notice_lang(s_NickServ, u, NICK_GROUP_FAILED);
}
}
return MOD_CONT;
check_memos(u);
} else {
alog("%s: makealias(%s) failed", s_NickServ, u->nick);
notice_lang(s_NickServ, u, NICK_GROUP_FAILED);
}
}
return MOD_CONT;
}
@@ -236,79 +236,79 @@ int do_group(User * u)
NickAlias *makealias(const char *nick, NickCore * nc)
{
NickAlias *na;
NickAlias *na;
/* Just need to make the alias */
na = (NickAlias *)scalloc(1, sizeof(NickAlias));
na->nick = sstrdup(nick);
na->nc = nc;
slist_add(&nc->aliases, na);
alpha_insert_alias(na);
return na;
/* Just need to make the alias */
na = (NickAlias *)scalloc(1, sizeof(NickAlias));
na->nick = sstrdup(nick);
na->nc = nc;
slist_add(&nc->aliases, na);
alpha_insert_alias(na);
return na;
}
int do_link(User * u)
{
notice_lang(s_NickServ, u, OBSOLETE_COMMAND, "GROUP");
return MOD_CONT;
notice_lang(s_NickServ, u, OBSOLETE_COMMAND, "GROUP");
return MOD_CONT;
}
int do_glist(User * u)
{
char *nick = strtok(NULL, " ");
char *nick = strtok(NULL, " ");
NickAlias *na, *na2;
int is_servadmin = is_services_admin(u);
int nick_ided = nick_identified(u);
int i;
NickAlias *na, *na2;
int is_servadmin = is_services_admin(u);
int nick_ided = nick_identified(u);
int i;
if ((nick ? (stricmp(nick, u->nick) ? !is_servadmin : !nick_ided)
: !nick_ided)) {
notice_lang(s_NickServ, u,
(nick_ided ? ACCESS_DENIED :
NICK_IDENTIFY_REQUIRED), s_NickServ);
} else if ((!nick ? !(na = u->na) : !(na = findnick(nick)))) {
notice_lang(s_NickServ, u,
(!nick ? NICK_NOT_REGISTERED : NICK_X_NOT_REGISTERED),
nick);
} else if (na->status & NS_VERBOTEN) {
notice_lang(s_NickServ, u, NICK_X_FORBIDDEN, na->nick);
} else {
time_t expt;
struct tm *tm;
char buf[BUFSIZE];
int wont_expire;
if ((nick ? (stricmp(nick, u->nick) ? !is_servadmin : !nick_ided)
: !nick_ided)) {
notice_lang(s_NickServ, u,
(nick_ided ? ACCESS_DENIED :
NICK_IDENTIFY_REQUIRED), s_NickServ);
} else if ((!nick ? !(na = u->na) : !(na = findnick(nick)))) {
notice_lang(s_NickServ, u,
(!nick ? NICK_NOT_REGISTERED : NICK_X_NOT_REGISTERED),
nick);
} else if (na->status & NS_VERBOTEN) {
notice_lang(s_NickServ, u, NICK_X_FORBIDDEN, na->nick);
} else {
time_t expt;
struct tm *tm;
char buf[BUFSIZE];
int wont_expire;
notice_lang(s_NickServ, u,
nick ? NICK_GLIST_HEADER_X : NICK_GLIST_HEADER,
na->nc->display);
for (i = 0; i < na->nc->aliases.count; i++) {
na2 = (NickAlias *)na->nc->aliases.list[i];
if (na2->nc == na->nc) {
if (!(wont_expire = na2->status & NS_NO_EXPIRE)) {
expt = na2->last_seen + NSExpire;
tm = localtime(&expt);
strftime_lang(buf, sizeof(buf), na2->u,
STRFTIME_DATE_TIME_FORMAT, tm);
}
notice_lang(s_NickServ, u,
((is_services_admin(u) && !wont_expire)
? NICK_GLIST_REPLY_ADMIN : NICK_GLIST_REPLY),
(wont_expire ? '!' : ' '), na2->nick, buf);
}
}
notice_lang(s_NickServ, u, NICK_GLIST_FOOTER,
na->nc->aliases.count);
}
return MOD_CONT;
notice_lang(s_NickServ, u,
nick ? NICK_GLIST_HEADER_X : NICK_GLIST_HEADER,
na->nc->display);
for (i = 0; i < na->nc->aliases.count; i++) {
na2 = (NickAlias *)na->nc->aliases.list[i];
if (na2->nc == na->nc) {
if (!(wont_expire = na2->status & NS_NO_EXPIRE)) {
expt = na2->last_seen + NSExpire;
tm = localtime(&expt);
strftime_lang(buf, sizeof(buf), na2->u,
STRFTIME_DATE_TIME_FORMAT, tm);
}
notice_lang(s_NickServ, u,
((is_services_admin(u) && !wont_expire)
? NICK_GLIST_REPLY_ADMIN : NICK_GLIST_REPLY),
(wont_expire ? '!' : ' '), na2->nick, buf);
}
}
notice_lang(s_NickServ, u, NICK_GLIST_FOOTER,
na->nc->aliases.count);
}
return MOD_CONT;
}
int do_listlinks(User * u)
{
notice_lang(s_NickServ, u, OBSOLETE_COMMAND, "GLIST");
return MOD_CONT;
notice_lang(s_NickServ, u, OBSOLETE_COMMAND, "GLIST");
return MOD_CONT;
}
MODULE_INIT("ns_group", NSGroup)
+21 -21
View File
@@ -41,28 +41,28 @@ class NSHelp : public Module
**/
int do_help(User * u)
{
char *cmd = strtok(NULL, "");
char *cmd = strtok(NULL, "");
if (!cmd) {
notice_help(s_NickServ, u, NICK_HELP);
moduleDisplayHelp(1, u);
if (is_services_admin(u)) {
notice_help(s_NickServ, u, NICK_SERVADMIN_HELP);
}
if (NSExpire >= 86400)
notice_help(s_NickServ, u, NICK_HELP_EXPIRES,
NSExpire / 86400);
notice_help(s_NickServ, u, NICK_HELP_FOOTER);
} else if (stricmp(cmd, "SET LANGUAGE") == 0) {
int i;
notice_help(s_NickServ, u, NICK_HELP_SET_LANGUAGE);
for (i = 0; i < NUM_LANGS && langlist[i] >= 0; i++)
notice_user(s_NickServ, u, " %2d) %s", i + 1,
langnames[langlist[i]]);
} else {
mod_help_cmd(s_NickServ, u, NICKSERV, cmd);
}
return MOD_CONT;
if (!cmd) {
notice_help(s_NickServ, u, NICK_HELP);
moduleDisplayHelp(1, u);
if (is_services_admin(u)) {
notice_help(s_NickServ, u, NICK_SERVADMIN_HELP);
}
if (NSExpire >= 86400)
notice_help(s_NickServ, u, NICK_HELP_EXPIRES,
NSExpire / 86400);
notice_help(s_NickServ, u, NICK_HELP_FOOTER);
} else if (stricmp(cmd, "SET LANGUAGE") == 0) {
int i;
notice_help(s_NickServ, u, NICK_HELP_SET_LANGUAGE);
for (i = 0; i < NUM_LANGS && langlist[i] >= 0; i++)
notice_user(s_NickServ, u, " %2d) %s", i + 1,
langnames[langlist[i]]);
} else {
mod_help_cmd(s_NickServ, u, NICKSERV, cmd);
}
return MOD_CONT;
}
/* EOF */
+89 -89
View File
@@ -15,8 +15,8 @@
#include "module.h"
#define TO_COLLIDE 0 /* Collide the user with this nick */
#define TO_RELEASE 1 /* Release a collided nick */
#define TO_COLLIDE 0 /* Collide the user with this nick */
#define TO_RELEASE 1 /* Release a collided nick */
int do_identify(User * u);
void myNickServHelp(User * u);
@@ -51,7 +51,7 @@ class NSIdentify : public Module
**/
void myNickServHelp(User * u)
{
notice_lang(s_NickServ, u, NICK_HELP_CMD_IDENTIFY);
notice_lang(s_NickServ, u, NICK_HELP_CMD_IDENTIFY);
}
/**
@@ -61,100 +61,100 @@ void myNickServHelp(User * u)
**/
int do_identify(User * u)
{
char *pass = strtok(NULL, " ");
NickAlias *na;
NickRequest *nr;
int res;
char tsbuf[16];
char modes[512];
int len;
char *pass = strtok(NULL, " ");
NickAlias *na;
NickRequest *nr;
int res;
char tsbuf[16];
char modes[512];
int len;
if (!pass) {
syntax_error(s_NickServ, u, "IDENTIFY", NICK_IDENTIFY_SYNTAX);
} else if (!(na = u->na)) {
if ((nr = findrequestnick(u->nick))) {
notice_lang(s_NickServ, u, NICK_IS_PREREG);
} else {
notice_lang(s_NickServ, u, NICK_NOT_REGISTERED);
}
} else if (na->status & NS_VERBOTEN) {
notice_lang(s_NickServ, u, NICK_X_FORBIDDEN, na->nick);
} else if (na->nc->flags & NI_SUSPENDED) {
notice_lang(s_NickServ, u, NICK_X_SUSPENDED, na->nick);
} else if (nick_identified(u)) {
notice_lang(s_NickServ, u, NICK_ALREADY_IDENTIFIED);
} else if (!(res = enc_check_password(pass, na->nc->pass))) {
alog("%s: Failed IDENTIFY for %s!%s@%s", s_NickServ, u->nick,
u->username, u->host);
notice_lang(s_NickServ, u, PASSWORD_INCORRECT);
bad_password(u);
} else if (res == -1) {
notice_lang(s_NickServ, u, NICK_IDENTIFY_FAILED);
} else {
if (!(na->status & NS_IDENTIFIED) && !(na->status & NS_RECOGNIZED)) {
if (na->last_usermask)
free(na->last_usermask);
na->last_usermask =
(char *)scalloc(strlen(common_get_vident(u)) +
strlen(common_get_vhost(u)) + 2, 1);
sprintf(na->last_usermask, "%s@%s", common_get_vident(u),
common_get_vhost(u));
if (na->last_realname)
free(na->last_realname);
na->last_realname = sstrdup(u->realname);
}
if (!pass) {
syntax_error(s_NickServ, u, "IDENTIFY", NICK_IDENTIFY_SYNTAX);
} else if (!(na = u->na)) {
if ((nr = findrequestnick(u->nick))) {
notice_lang(s_NickServ, u, NICK_IS_PREREG);
} else {
notice_lang(s_NickServ, u, NICK_NOT_REGISTERED);
}
} else if (na->status & NS_VERBOTEN) {
notice_lang(s_NickServ, u, NICK_X_FORBIDDEN, na->nick);
} else if (na->nc->flags & NI_SUSPENDED) {
notice_lang(s_NickServ, u, NICK_X_SUSPENDED, na->nick);
} else if (nick_identified(u)) {
notice_lang(s_NickServ, u, NICK_ALREADY_IDENTIFIED);
} else if (!(res = enc_check_password(pass, na->nc->pass))) {
alog("%s: Failed IDENTIFY for %s!%s@%s", s_NickServ, u->nick,
u->username, u->host);
notice_lang(s_NickServ, u, PASSWORD_INCORRECT);
bad_password(u);
} else if (res == -1) {
notice_lang(s_NickServ, u, NICK_IDENTIFY_FAILED);
} else {
if (!(na->status & NS_IDENTIFIED) && !(na->status & NS_RECOGNIZED)) {
if (na->last_usermask)
free(na->last_usermask);
na->last_usermask =
(char *)scalloc(strlen(common_get_vident(u)) +
strlen(common_get_vhost(u)) + 2, 1);
sprintf(na->last_usermask, "%s@%s", common_get_vident(u),
common_get_vhost(u));
if (na->last_realname)
free(na->last_realname);
na->last_realname = sstrdup(u->realname);
}
na->status |= NS_IDENTIFIED;
na->last_seen = time(NULL);
snprintf(tsbuf, sizeof(tsbuf), "%lu",
(unsigned long int) u->timestamp);
na->status |= NS_IDENTIFIED;
na->last_seen = time(NULL);
snprintf(tsbuf, sizeof(tsbuf), "%lu",
(unsigned long int) u->timestamp);
if (ircd->modeonreg) {
len = strlen(ircd->modeonreg);
strncpy(modes,ircd->modeonreg,512);
if(ircd->rootmodeonid && is_services_root(u)) {
strncat(modes,ircd->rootmodeonid,512-len);
} else if(ircd->adminmodeonid && is_services_admin(u)) {
strncat(modes,ircd->adminmodeonid,512-len);
} else if(ircd->opermodeonid && is_services_oper(u)) {
strncat(modes,ircd->opermodeonid,512-len);
}
if (ircd->tsonmode) {
common_svsmode(u, modes, tsbuf);
} else {
common_svsmode(u, modes, "");
}
}
send_event(EVENT_NICK_IDENTIFY, 1, u->nick);
alog("%s: %s!%s@%s identified for nick %s", s_NickServ, u->nick,
u->username, u->host, u->nick);
notice_lang(s_NickServ, u, NICK_IDENTIFY_SUCCEEDED);
if (ircd->vhost) {
do_on_id(u);
}
if (NSModeOnID) {
do_setmodes(u);
}
if (ircd->modeonreg) {
len = strlen(ircd->modeonreg);
strncpy(modes,ircd->modeonreg,512);
if(ircd->rootmodeonid && is_services_root(u)) {
strncat(modes,ircd->rootmodeonid,512-len);
} else if(ircd->adminmodeonid && is_services_admin(u)) {
strncat(modes,ircd->adminmodeonid,512-len);
} else if(ircd->opermodeonid && is_services_oper(u)) {
strncat(modes,ircd->opermodeonid,512-len);
}
if (ircd->tsonmode) {
common_svsmode(u, modes, tsbuf);
} else {
common_svsmode(u, modes, "");
}
}
send_event(EVENT_NICK_IDENTIFY, 1, u->nick);
alog("%s: %s!%s@%s identified for nick %s", s_NickServ, u->nick,
u->username, u->host, u->nick);
notice_lang(s_NickServ, u, NICK_IDENTIFY_SUCCEEDED);
if (ircd->vhost) {
do_on_id(u);
}
if (NSModeOnID) {
do_setmodes(u);
}
if (NSForceEmail && u->na && !u->na->nc->email) {
notice_lang(s_NickServ, u, NICK_IDENTIFY_EMAIL_REQUIRED);
notice_help(s_NickServ, u, NICK_IDENTIFY_EMAIL_HOWTO);
}
if (NSForceEmail && u->na && !u->na->nc->email) {
notice_lang(s_NickServ, u, NICK_IDENTIFY_EMAIL_REQUIRED);
notice_help(s_NickServ, u, NICK_IDENTIFY_EMAIL_HOWTO);
}
if (!(na->status & NS_RECOGNIZED))
check_memos(u);
if (!(na->status & NS_RECOGNIZED))
check_memos(u);
/* Enable nick tracking if enabled */
if (NSNickTracking)
nsStartNickTracking(u);
/* Enable nick tracking if enabled */
if (NSNickTracking)
nsStartNickTracking(u);
/* Clear any timers */
if (na->nc->flags & NI_KILLPROTECT) {
del_ns_timeout(na, TO_COLLIDE);
}
/* Clear any timers */
if (na->nc->flags & NI_KILLPROTECT) {
del_ns_timeout(na, TO_COLLIDE);
}
}
return MOD_CONT;
}
return MOD_CONT;
}
MODULE_INIT("ns_identify", NSIdentify)
+182 -182
View File
@@ -46,7 +46,7 @@ class NSInfo : public Module
**/
void myNickServHelp(User * u)
{
notice_lang(s_NickServ, u, NICK_HELP_CMD_INFO);
notice_lang(s_NickServ, u, NICK_HELP_CMD_INFO);
}
/**
@@ -64,210 +64,210 @@ int do_info(User * u)
* -TheShadow (13 Mar 1999)
*/
char *nick = strtok(NULL, " ");
char *param = strtok(NULL, " ");
char *nick = strtok(NULL, " ");
char *param = strtok(NULL, " ");
NickAlias *na;
NickRequest *nr = NULL;
NickAlias *na;
NickRequest *nr = NULL;
/* Being an oper is enough from now on -GD */
int is_servadmin = is_services_oper(u);
int is_servadmin = is_services_oper(u);
if (!nick) {
syntax_error(s_NickServ, u, "INFO", NICK_INFO_SYNTAX);
} else if (!(na = findnick(nick))) {
if ((nr = findrequestnick(nick))) {
notice_lang(s_NickServ, u, NICK_IS_PREREG);
if (param && stricmp(param, "ALL") == 0 && is_servadmin) {
notice_lang(s_NickServ, u, NICK_INFO_EMAIL, nr->email);
} else {
if (is_servadmin) {
notice_lang(s_NickServ, u, NICK_INFO_FOR_MORE,
s_NickServ, nr->nick);
}
}
} else if (nickIsServices(nick, 1)) {
notice_lang(s_NickServ, u, NICK_X_IS_SERVICES, nick);
} else {
notice_lang(s_NickServ, u, NICK_X_NOT_REGISTERED, nick);
}
} else if (na->status & NS_VERBOTEN) {
if (is_oper(u) && na->last_usermask)
notice_lang(s_NickServ, u, NICK_X_FORBIDDEN_OPER, nick,
na->last_usermask,
(na->last_realname ? na->
last_realname : getstring(u->na, NO_REASON)));
else
notice_lang(s_NickServ, u, NICK_X_FORBIDDEN, nick);
} else {
struct tm *tm;
char buf[BUFSIZE], *end;
const char *commastr = getstring(u->na, COMMA_SPACE);
int need_comma = 0;
int nick_online = 0;
int show_hidden = 0;
time_t expt;
if (!nick) {
syntax_error(s_NickServ, u, "INFO", NICK_INFO_SYNTAX);
} else if (!(na = findnick(nick))) {
if ((nr = findrequestnick(nick))) {
notice_lang(s_NickServ, u, NICK_IS_PREREG);
if (param && stricmp(param, "ALL") == 0 && is_servadmin) {
notice_lang(s_NickServ, u, NICK_INFO_EMAIL, nr->email);
} else {
if (is_servadmin) {
notice_lang(s_NickServ, u, NICK_INFO_FOR_MORE,
s_NickServ, nr->nick);
}
}
} else if (nickIsServices(nick, 1)) {
notice_lang(s_NickServ, u, NICK_X_IS_SERVICES, nick);
} else {
notice_lang(s_NickServ, u, NICK_X_NOT_REGISTERED, nick);
}
} else if (na->status & NS_VERBOTEN) {
if (is_oper(u) && na->last_usermask)
notice_lang(s_NickServ, u, NICK_X_FORBIDDEN_OPER, nick,
na->last_usermask,
(na->last_realname ? na->
last_realname : getstring(u->na, NO_REASON)));
else
notice_lang(s_NickServ, u, NICK_X_FORBIDDEN, nick);
} else {
struct tm *tm;
char buf[BUFSIZE], *end;
const char *commastr = getstring(u->na, COMMA_SPACE);
int need_comma = 0;
int nick_online = 0;
int show_hidden = 0;
time_t expt;
/* Is the real owner of the nick we're looking up online? -TheShadow */
if (na->status & (NS_RECOGNIZED | NS_IDENTIFIED))
nick_online = 1;
/* Is the real owner of the nick we're looking up online? -TheShadow */
if (na->status & (NS_RECOGNIZED | NS_IDENTIFIED))
nick_online = 1;
/* Only show hidden fields to owner and sadmins and only when the ALL
* parameter is used. -TheShadow */
if (param && stricmp(param, "ALL") == 0 && u->na
&& ((nick_identified(u) && (na->nc == u->na->nc))
|| is_servadmin))
show_hidden = 1;
/* Only show hidden fields to owner and sadmins and only when the ALL
* parameter is used. -TheShadow */
if (param && stricmp(param, "ALL") == 0 && u->na
&& ((nick_identified(u) && (na->nc == u->na->nc))
|| is_servadmin))
show_hidden = 1;
notice_lang(s_NickServ, u, NICK_INFO_REALNAME, na->nick,
na->last_realname);
notice_lang(s_NickServ, u, NICK_INFO_REALNAME, na->nick,
na->last_realname);
if ((nick_identified(u) && (na->nc == u->na->nc)) || is_servadmin) {
if ((nick_identified(u) && (na->nc == u->na->nc)) || is_servadmin) {
if (nick_is_services_root(na->nc))
notice_lang(s_NickServ, u, NICK_INFO_SERVICES_ROOT,
na->nick);
else if (nick_is_services_admin(na->nc))
notice_lang(s_NickServ, u, NICK_INFO_SERVICES_ADMIN,
na->nick);
else if (nick_is_services_oper(na->nc))
notice_lang(s_NickServ, u, NICK_INFO_SERVICES_OPER,
na->nick);
if (nick_is_services_root(na->nc))
notice_lang(s_NickServ, u, NICK_INFO_SERVICES_ROOT,
na->nick);
else if (nick_is_services_admin(na->nc))
notice_lang(s_NickServ, u, NICK_INFO_SERVICES_ADMIN,
na->nick);
else if (nick_is_services_oper(na->nc))
notice_lang(s_NickServ, u, NICK_INFO_SERVICES_OPER,
na->nick);
} else {
} else {
if (nick_is_services_root(na->nc)
&& !(na->nc->flags & NI_HIDE_STATUS))
notice_lang(s_NickServ, u, NICK_INFO_SERVICES_ROOT,
na->nick);
else if (nick_is_services_admin(na->nc)
&& !(na->nc->flags & NI_HIDE_STATUS))
notice_lang(s_NickServ, u, NICK_INFO_SERVICES_ADMIN,
na->nick);
else if (nick_is_services_oper(na->nc)
&& !(na->nc->flags & NI_HIDE_STATUS))
notice_lang(s_NickServ, u, NICK_INFO_SERVICES_OPER,
na->nick);
if (nick_is_services_root(na->nc)
&& !(na->nc->flags & NI_HIDE_STATUS))
notice_lang(s_NickServ, u, NICK_INFO_SERVICES_ROOT,
na->nick);
else if (nick_is_services_admin(na->nc)
&& !(na->nc->flags & NI_HIDE_STATUS))
notice_lang(s_NickServ, u, NICK_INFO_SERVICES_ADMIN,
na->nick);
else if (nick_is_services_oper(na->nc)
&& !(na->nc->flags & NI_HIDE_STATUS))
notice_lang(s_NickServ, u, NICK_INFO_SERVICES_OPER,
na->nick);
}
}
if (nick_online) {
if (show_hidden || !(na->nc->flags & NI_HIDE_MASK))
notice_lang(s_NickServ, u, NICK_INFO_ADDRESS_ONLINE,
na->last_usermask);
else
notice_lang(s_NickServ, u, NICK_INFO_ADDRESS_ONLINE_NOHOST,
na->nick);
} else {
if (show_hidden || !(na->nc->flags & NI_HIDE_MASK))
notice_lang(s_NickServ, u, NICK_INFO_ADDRESS,
na->last_usermask);
}
if (nick_online) {
if (show_hidden || !(na->nc->flags & NI_HIDE_MASK))
notice_lang(s_NickServ, u, NICK_INFO_ADDRESS_ONLINE,
na->last_usermask);
else
notice_lang(s_NickServ, u, NICK_INFO_ADDRESS_ONLINE_NOHOST,
na->nick);
} else {
if (show_hidden || !(na->nc->flags & NI_HIDE_MASK))
notice_lang(s_NickServ, u, NICK_INFO_ADDRESS,
na->last_usermask);
}
tm = localtime(&na->time_registered);
strftime_lang(buf, sizeof(buf), u, STRFTIME_DATE_TIME_FORMAT, tm);
notice_lang(s_NickServ, u, NICK_INFO_TIME_REGGED, buf);
tm = localtime(&na->time_registered);
strftime_lang(buf, sizeof(buf), u, STRFTIME_DATE_TIME_FORMAT, tm);
notice_lang(s_NickServ, u, NICK_INFO_TIME_REGGED, buf);
if (!nick_online) {
tm = localtime(&na->last_seen);
strftime_lang(buf, sizeof(buf), u, STRFTIME_DATE_TIME_FORMAT,
tm);
notice_lang(s_NickServ, u, NICK_INFO_LAST_SEEN, buf);
}
if (!nick_online) {
tm = localtime(&na->last_seen);
strftime_lang(buf, sizeof(buf), u, STRFTIME_DATE_TIME_FORMAT,
tm);
notice_lang(s_NickServ, u, NICK_INFO_LAST_SEEN, buf);
}
if (na->last_quit
&& (show_hidden || !(na->nc->flags & NI_HIDE_QUIT)))
notice_lang(s_NickServ, u, NICK_INFO_LAST_QUIT, na->last_quit);
if (na->last_quit
&& (show_hidden || !(na->nc->flags & NI_HIDE_QUIT)))
notice_lang(s_NickServ, u, NICK_INFO_LAST_QUIT, na->last_quit);
if (na->nc->url)
notice_lang(s_NickServ, u, NICK_INFO_URL, na->nc->url);
if (na->nc->email
&& (show_hidden || !(na->nc->flags & NI_HIDE_EMAIL)))
notice_lang(s_NickServ, u, NICK_INFO_EMAIL, na->nc->email);
if (na->nc->icq)
notice_lang(s_NickServ, u, NICK_INFO_ICQ, na->nc->icq);
if (na->nc->url)
notice_lang(s_NickServ, u, NICK_INFO_URL, na->nc->url);
if (na->nc->email
&& (show_hidden || !(na->nc->flags & NI_HIDE_EMAIL)))
notice_lang(s_NickServ, u, NICK_INFO_EMAIL, na->nc->email);
if (na->nc->icq)
notice_lang(s_NickServ, u, NICK_INFO_ICQ, na->nc->icq);
if (show_hidden) {
if (s_HostServ && ircd->vhost) {
if (getvHost(na->nick) != NULL) {
if (ircd->vident && getvIdent(na->nick) != NULL) {
notice_lang(s_NickServ, u, NICK_INFO_VHOST2,
getvIdent(na->nick),
getvHost(na->nick));
} else {
notice_lang(s_NickServ, u, NICK_INFO_VHOST,
getvHost(na->nick));
}
}
}
if (na->nc->greet)
notice_lang(s_NickServ, u, NICK_INFO_GREET, na->nc->greet);
if (show_hidden) {
if (s_HostServ && ircd->vhost) {
if (getvHost(na->nick) != NULL) {
if (ircd->vident && getvIdent(na->nick) != NULL) {
notice_lang(s_NickServ, u, NICK_INFO_VHOST2,
getvIdent(na->nick),
getvHost(na->nick));
} else {
notice_lang(s_NickServ, u, NICK_INFO_VHOST,
getvHost(na->nick));
}
}
}
if (na->nc->greet)
notice_lang(s_NickServ, u, NICK_INFO_GREET, na->nc->greet);
*buf = 0;
end = buf;
*buf = 0;
end = buf;
if (na->nc->flags & NI_KILLPROTECT) {
end += snprintf(end, sizeof(buf) - (end - buf), "%s",
getstring(u->na, NICK_INFO_OPT_KILL));
need_comma = 1;
}
if (na->nc->flags & NI_SECURE) {
end += snprintf(end, sizeof(buf) - (end - buf), "%s%s",
need_comma ? commastr : "",
getstring(u->na, NICK_INFO_OPT_SECURE));
need_comma = 1;
}
if (na->nc->flags & NI_PRIVATE) {
end += snprintf(end, sizeof(buf) - (end - buf), "%s%s",
need_comma ? commastr : "",
getstring(u->na, NICK_INFO_OPT_PRIVATE));
need_comma = 1;
}
if (na->nc->flags & NI_MSG) {
end += snprintf(end, sizeof(buf) - (end - buf), "%s%s",
need_comma ? commastr : "",
getstring(u->na, NICK_INFO_OPT_MSG));
need_comma = 1;
}
if (!(na->nc->flags & NI_AUTOOP)) {
end += snprintf(end, sizeof(buf) - (end - buf), "%s%s",
need_comma ? commastr : "",
getstring(u->na, NICK_INFO_OPT_AUTOOP));
need_comma = 1;
}
if (na->nc->flags & NI_KILLPROTECT) {
end += snprintf(end, sizeof(buf) - (end - buf), "%s",
getstring(u->na, NICK_INFO_OPT_KILL));
need_comma = 1;
}
if (na->nc->flags & NI_SECURE) {
end += snprintf(end, sizeof(buf) - (end - buf), "%s%s",
need_comma ? commastr : "",
getstring(u->na, NICK_INFO_OPT_SECURE));
need_comma = 1;
}
if (na->nc->flags & NI_PRIVATE) {
end += snprintf(end, sizeof(buf) - (end - buf), "%s%s",
need_comma ? commastr : "",
getstring(u->na, NICK_INFO_OPT_PRIVATE));
need_comma = 1;
}
if (na->nc->flags & NI_MSG) {
end += snprintf(end, sizeof(buf) - (end - buf), "%s%s",
need_comma ? commastr : "",
getstring(u->na, NICK_INFO_OPT_MSG));
need_comma = 1;
}
if (!(na->nc->flags & NI_AUTOOP)) {
end += snprintf(end, sizeof(buf) - (end - buf), "%s%s",
need_comma ? commastr : "",
getstring(u->na, NICK_INFO_OPT_AUTOOP));
need_comma = 1;
}
notice_lang(s_NickServ, u, NICK_INFO_OPTIONS,
*buf ? buf : getstring(u->na, NICK_INFO_OPT_NONE));
notice_lang(s_NickServ, u, NICK_INFO_OPTIONS,
*buf ? buf : getstring(u->na, NICK_INFO_OPT_NONE));
if (na->nc->flags & NI_SUSPENDED) {
if (na->last_quit) {
notice_lang(s_NickServ, u, NICK_INFO_SUSPENDED,
na->last_quit);
} else {
notice_lang(s_NickServ, u,
NICK_INFO_SUSPENDED_NO_REASON);
}
}
if (na->nc->flags & NI_SUSPENDED) {
if (na->last_quit) {
notice_lang(s_NickServ, u, NICK_INFO_SUSPENDED,
na->last_quit);
} else {
notice_lang(s_NickServ, u,
NICK_INFO_SUSPENDED_NO_REASON);
}
}
if (na->status & NS_NO_EXPIRE) {
notice_lang(s_NickServ, u, NICK_INFO_NO_EXPIRE);
} else {
if (is_services_admin(u)) {
expt = na->last_seen + NSExpire;
tm = localtime(&expt);
strftime_lang(buf, sizeof(buf), na->u,
STRFTIME_DATE_TIME_FORMAT, tm);
notice_lang(s_NickServ, u, NICK_INFO_EXPIRE, buf);
}
}
}
if (na->status & NS_NO_EXPIRE) {
notice_lang(s_NickServ, u, NICK_INFO_NO_EXPIRE);
} else {
if (is_services_admin(u)) {
expt = na->last_seen + NSExpire;
tm = localtime(&expt);
strftime_lang(buf, sizeof(buf), na->u,
STRFTIME_DATE_TIME_FORMAT, tm);
notice_lang(s_NickServ, u, NICK_INFO_EXPIRE, buf);
}
}
}
if (!show_hidden
&& ((u->na && (na->nc == u->na->nc) && nick_identified(u))
|| is_servadmin))
notice_lang(s_NickServ, u, NICK_INFO_FOR_MORE, s_NickServ,
na->nick);
}
return MOD_CONT;
if (!show_hidden
&& ((u->na && (na->nc == u->na->nc) && nick_identified(u))
|| is_servadmin))
notice_lang(s_NickServ, u, NICK_INFO_FOR_MORE, s_NickServ,
na->nick);
}
return MOD_CONT;
}
MODULE_INIT("ns_info", NSInfo)
+151 -151
View File
@@ -45,9 +45,9 @@ class NSList : public Module
**/
void myNickServHelp(User * u)
{
if (!NSListOpersOnly || (is_oper(u))) {
notice_lang(s_NickServ, u, NICK_HELP_CMD_LIST);
}
if (!NSListOpersOnly || (is_oper(u))) {
notice_lang(s_NickServ, u, NICK_HELP_CMD_LIST);
}
}
/**
@@ -73,164 +73,164 @@ int do_list(User * u)
*/
char *pattern = strtok(NULL, " ");
char *keyword;
NickAlias *na;
NickCore *mync;
int nnicks, i;
char buf[BUFSIZE];
int is_servadmin = is_services_admin(u);
int16 matchflags = 0;
NickRequest *nr = NULL;
int nronly = 0;
int susp_keyword = 0;
char noexpire_char = ' ';
int count = 0, from = 0, to = 0, tofree = 0;
char *tmp = NULL;
char *s = NULL;
char *pattern = strtok(NULL, " ");
char *keyword;
NickAlias *na;
NickCore *mync;
int nnicks, i;
char buf[BUFSIZE];
int is_servadmin = is_services_admin(u);
int16 matchflags = 0;
NickRequest *nr = NULL;
int nronly = 0;
int susp_keyword = 0;
char noexpire_char = ' ';
int count = 0, from = 0, to = 0, tofree = 0;
char *tmp = NULL;
char *s = NULL;
if (!(!NSListOpersOnly || (is_oper(u)))) { /* reverse the help logic */
notice_lang(s_NickServ, u, ACCESS_DENIED);
return MOD_STOP;
}
if (!(!NSListOpersOnly || (is_oper(u)))) { /* reverse the help logic */
notice_lang(s_NickServ, u, ACCESS_DENIED);
return MOD_STOP;
}
if (!pattern) {
syntax_error(s_NickServ, u, "LIST",
is_servadmin ? NICK_LIST_SERVADMIN_SYNTAX :
NICK_LIST_SYNTAX);
} else {
if (!pattern) {
syntax_error(s_NickServ, u, "LIST",
is_servadmin ? NICK_LIST_SERVADMIN_SYNTAX :
NICK_LIST_SYNTAX);
} else {
if (pattern) {
if (pattern[0] == '#') {
tmp = myStrGetOnlyToken((pattern + 1), '-', 0); /* Read FROM out */
if (!tmp) {
notice_lang(s_ChanServ, u, LIST_INCORRECT_RANGE);
return MOD_CONT;
}
for (s = tmp; *s; s++) {
if (!isdigit(*s)) {
free(tmp);
notice_lang(s_ChanServ, u, LIST_INCORRECT_RANGE);
return MOD_CONT;
}
}
from = atoi(tmp);
free(tmp);
tmp = myStrGetTokenRemainder(pattern, '-', 1); /* Read TO out */
if (!tmp) {
notice_lang(s_ChanServ, u, LIST_INCORRECT_RANGE);
return MOD_CONT;
}
for (s = tmp; *s; s++) {
if (!isdigit(*s)) {
free(tmp);
notice_lang(s_ChanServ, u, LIST_INCORRECT_RANGE);
return MOD_CONT;
}
}
to = atoi(tmp);
free(tmp);
pattern = sstrdup("*");
tofree = 1;
}
}
if (pattern) {
if (pattern[0] == '#') {
tmp = myStrGetOnlyToken((pattern + 1), '-', 0); /* Read FROM out */
if (!tmp) {
notice_lang(s_ChanServ, u, LIST_INCORRECT_RANGE);
return MOD_CONT;
}
for (s = tmp; *s; s++) {
if (!isdigit(*s)) {
free(tmp);
notice_lang(s_ChanServ, u, LIST_INCORRECT_RANGE);
return MOD_CONT;
}
}
from = atoi(tmp);
free(tmp);
tmp = myStrGetTokenRemainder(pattern, '-', 1); /* Read TO out */
if (!tmp) {
notice_lang(s_ChanServ, u, LIST_INCORRECT_RANGE);
return MOD_CONT;
}
for (s = tmp; *s; s++) {
if (!isdigit(*s)) {
free(tmp);
notice_lang(s_ChanServ, u, LIST_INCORRECT_RANGE);
return MOD_CONT;
}
}
to = atoi(tmp);
free(tmp);
pattern = sstrdup("*");
tofree = 1;
}
}
nnicks = 0;
nnicks = 0;
while (is_servadmin && (keyword = strtok(NULL, " "))) {
if (stricmp(keyword, "FORBIDDEN") == 0)
matchflags |= NS_VERBOTEN;
if (stricmp(keyword, "NOEXPIRE") == 0)
matchflags |= NS_NO_EXPIRE;
if (stricmp(keyword, "SUSPENDED") == 0)
susp_keyword = 1;
if (stricmp(keyword, "UNCONFIRMED") == 0)
nronly = 1;
}
while (is_servadmin && (keyword = strtok(NULL, " "))) {
if (stricmp(keyword, "FORBIDDEN") == 0)
matchflags |= NS_VERBOTEN;
if (stricmp(keyword, "NOEXPIRE") == 0)
matchflags |= NS_NO_EXPIRE;
if (stricmp(keyword, "SUSPENDED") == 0)
susp_keyword = 1;
if (stricmp(keyword, "UNCONFIRMED") == 0)
nronly = 1;
}
mync = (nick_identified(u) ? u->na->nc : NULL);
mync = (nick_identified(u) ? u->na->nc : NULL);
notice_lang(s_NickServ, u, NICK_LIST_HEADER, pattern);
if (nronly != 1) {
for (i = 0; i < 1024; i++) {
for (na = nalists[i]; na; na = na->next) {
/* Don't show private and forbidden nicks to non-services admins. */
if ((na->status & NS_VERBOTEN) && !is_servadmin)
continue;
if ((na->nc->flags & NI_PRIVATE) && !is_servadmin
&& na->nc != mync)
continue;
if ((matchflags != 0) && !(na->status & matchflags) && (susp_keyword == 0))
continue;
else if ((susp_keyword == 1) && !(na->nc->flags & NI_SUSPENDED))
continue;
notice_lang(s_NickServ, u, NICK_LIST_HEADER, pattern);
if (nronly != 1) {
for (i = 0; i < 1024; i++) {
for (na = nalists[i]; na; na = na->next) {
/* Don't show private and forbidden nicks to non-services admins. */
if ((na->status & NS_VERBOTEN) && !is_servadmin)
continue;
if ((na->nc->flags & NI_PRIVATE) && !is_servadmin
&& na->nc != mync)
continue;
if ((matchflags != 0) && !(na->status & matchflags) && (susp_keyword == 0))
continue;
else if ((susp_keyword == 1) && !(na->nc->flags & NI_SUSPENDED))
continue;
/* We no longer compare the pattern against the output buffer.
* Instead we build a nice nick!user@host buffer to compare.
* The output is then generated separately. -TheShadow */
snprintf(buf, sizeof(buf), "%s!%s", na->nick,
(na->last_usermask
&& !(na->status & NS_VERBOTEN)) ? na->
last_usermask : "*@*");
if (stricmp(pattern, na->nick) == 0
|| match_wild_nocase(pattern, buf)) {
/* We no longer compare the pattern against the output buffer.
* Instead we build a nice nick!user@host buffer to compare.
* The output is then generated separately. -TheShadow */
snprintf(buf, sizeof(buf), "%s!%s", na->nick,
(na->last_usermask
&& !(na->status & NS_VERBOTEN)) ? na->
last_usermask : "*@*");
if (stricmp(pattern, na->nick) == 0
|| match_wild_nocase(pattern, buf)) {
if ((((count + 1 >= from) && (count + 1 <= to))
|| ((from == 0) && (to == 0)))
&& (++nnicks <= NSListMax)) {
if (is_servadmin
&& (na->status & NS_NO_EXPIRE))
noexpire_char = '!';
else {
noexpire_char = ' ';
}
if ((na->nc->flags & NI_HIDE_MASK)
&& !is_servadmin && na->nc != mync) {
snprintf(buf, sizeof(buf),
"%-20s [Hostname Hidden]",
na->nick);
} else if (na->status & NS_VERBOTEN) {
snprintf(buf, sizeof(buf),
"%-20s [Forbidden]", na->nick);
} else if (na->nc->flags & NI_SUSPENDED) {
snprintf(buf, sizeof(buf),
"%-20s [Suspended]", na->nick);
} else {
snprintf(buf, sizeof(buf), "%-20s %s",
na->nick, na->last_usermask);
}
notice_user(s_NickServ, u, " %c%s",
noexpire_char, buf);
}
count++;
}
}
}
}
if ((((count + 1 >= from) && (count + 1 <= to))
|| ((from == 0) && (to == 0)))
&& (++nnicks <= NSListMax)) {
if (is_servadmin
&& (na->status & NS_NO_EXPIRE))
noexpire_char = '!';
else {
noexpire_char = ' ';
}
if ((na->nc->flags & NI_HIDE_MASK)
&& !is_servadmin && na->nc != mync) {
snprintf(buf, sizeof(buf),
"%-20s [Hostname Hidden]",
na->nick);
} else if (na->status & NS_VERBOTEN) {
snprintf(buf, sizeof(buf),
"%-20s [Forbidden]", na->nick);
} else if (na->nc->flags & NI_SUSPENDED) {
snprintf(buf, sizeof(buf),
"%-20s [Suspended]", na->nick);
} else {
snprintf(buf, sizeof(buf), "%-20s %s",
na->nick, na->last_usermask);
}
notice_user(s_NickServ, u, " %c%s",
noexpire_char, buf);
}
count++;
}
}
}
}
if (nronly == 1 || (is_servadmin && matchflags == 0)) {
noexpire_char = ' ';
for (i = 0; i < 1024; i++) {
for (nr = nrlists[i]; nr; nr = nr->next) {
snprintf(buf, sizeof(buf), "%s!*@*", nr->nick);
if (stricmp(pattern, nr->nick) == 0
|| match_wild_nocase(pattern, buf)) {
if (++nnicks <= NSListMax) {
snprintf(buf, sizeof(buf),
"%-20s [UNCONFIRMED]", nr->nick);
notice_user(s_NickServ, u, " %c%s",
noexpire_char, buf);
}
}
}
}
}
notice_lang(s_NickServ, u, NICK_LIST_RESULTS,
nnicks > NSListMax ? NSListMax : nnicks, nnicks);
}
if (tofree)
free(pattern);
return MOD_CONT;
if (nronly == 1 || (is_servadmin && matchflags == 0)) {
noexpire_char = ' ';
for (i = 0; i < 1024; i++) {
for (nr = nrlists[i]; nr; nr = nr->next) {
snprintf(buf, sizeof(buf), "%s!*@*", nr->nick);
if (stricmp(pattern, nr->nick) == 0
|| match_wild_nocase(pattern, buf)) {
if (++nnicks <= NSListMax) {
snprintf(buf, sizeof(buf),
"%-20s [UNCONFIRMED]", nr->nick);
notice_user(s_NickServ, u, " %c%s",
noexpire_char, buf);
}
}
}
}
}
notice_lang(s_NickServ, u, NICK_LIST_RESULTS,
nnicks > NSListMax ? NSListMax : nnicks, nnicks);
}
if (tofree)
free(pattern);
return MOD_CONT;
}
MODULE_INIT("ns_list", NSList)

Some files were not shown because too many files have changed in this diff Show More