* Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
*/
+#include "nickserv.h"
#include "chanserv.h"
#include "proto-common.c"
#define TOK_EOB "EB"
#define TOK_EOB_ACK "EA"
#define TOK_ERROR "Y"
+#define TOK_EXEMPT "EX"
#define TOK_FAKEHOST "FA"
#define TOK_GET "GET"
#define TOK_GLINE "GL"
#define TOK_WHO "H"
#define TOK_WHOIS "W"
#define TOK_WHOWAS "X"
-#define TOK_EXEMPT "EX"
/* Protocol messages; aliased to full commands or tokens depending
on compile-time configuration. ircu prefers tokens WITH THE
}
}
+void
+irc_rename(struct userNode *user, const char *new_handle)
+{
+ putsock("%s " P10_ACCOUNT " %s M %s", self->numeric, user->numeric, new_handle);
+}
+
+void
+irc_delete(struct userNode *user)
+{
+ putsock("%s " P10_ACCOUNT " %s U", self->numeric, user->numeric);
+}
+
void
irc_account(struct userNode *user, const char *stamp, time_t timestamp)
{
target->name, modes, target->timestamp);
}
+/* Added to allow services to mode users
+ 2005 - 8 - 10 by Life4Christ
+*/
+void
+irc_umode(struct userNode *target, const char *modes)
+{
+ putsock("%s " P10_MODE " %s %s ",self->numeric,target->nick, modes);
+}
+
+
void
irc_invite(struct userNode *from, struct userNode *who, struct chanNode *to)
{
dict_insert(irc_func_dict, TOK_WALLOPS, cmd_dummy);
dict_insert(irc_func_dict, CMD_WALLHOPS, cmd_dummy);
dict_insert(irc_func_dict, TOK_WALLHOPS, cmd_dummy);
+ dict_insert(irc_func_dict, TOK_WALLUSERS, cmd_dummy);
/* Ignore dnsbl exemptions */
dict_insert(irc_func_dict, TOK_EXEMPT, cmd_dummy);
+ dict_insert(irc_func_dict, TOK_MARK, cmd_dummy);
+ /* Ignore privs */
+ dict_insert(irc_func_dict, TOK_PRIVS, cmd_dummy);
+ /* Ignore remote luser */
+ dict_insert(irc_func_dict, TOK_LUSERS, cmd_dummy);
/* We have reliable clock! Always! Wraaa! */
dict_insert(irc_func_dict, CMD_SETTIME, cmd_dummy);
dict_insert(irc_func_dict, TOK_SETTIME, cmd_dummy);
for (n=0; n<nuf_used; n++)
if (nuf_list[n](uNode))
break;
+
+ if ((uNode->loc == 1) && (uNode->handle_info))
+ send_func_list(uNode);
+
return uNode;
}
free_user(user);
}
+static void call_oper_funcs(struct userNode *user);
+
void mod_usermode(struct userNode *user, const char *mode_change) {
- static void call_oper_funcs(struct userNode *user);
int add = 1;
const char *word = mode_change;
case '+': add = 1; break;
case '-': add = 0; break;
case 'o':
- do_user_mode(FLAGS_OPER);
if (add) {
- userList_append(&curr_opers, user);
- call_oper_funcs(user);
+ if(!IsOper(user)) { /* Dont re-oper an oper */
+ userList_append(&curr_opers, user);
+ call_oper_funcs(user);
+ }
} else {
userList_remove(&curr_opers, user);
}
+ do_user_mode(FLAGS_OPER);
break;
case 'O': do_user_mode(FLAGS_LOCOP); break;
case 'i': do_user_mode(FLAGS_INVISIBLE);
case 'T': do_chan_mode(MODE_NOAMSG); break;
case 'O': do_chan_mode(MODE_OPERSONLY); break;
case 'Z': do_chan_mode(MODE_SSLONLY); break;
+ case 'L': do_chan_mode(MODE_HIDEMODE); break;
case 'z':
if (!(flags & MCP_REGISTERED)) {
do_chan_mode(MODE_REGISTERED);
return NULL;
}
break;
-// uncomment this when ssl is enabled on the network.
-// case 'Z': do_chan_mode(MODE_SSLONLY); break;
#undef do_chan_mode
case 'l':
if (add) {
DO_MODE_CHAR(OPERSONLY, 'O');
DO_MODE_CHAR(REGISTERED, 'z');
DO_MODE_CHAR(SSLONLY, 'Z');
+ DO_MODE_CHAR(HIDEMODE, 'L');
#undef DO_MODE_CHAR
if (change->modes_clear & channel->modes & MODE_KEY)
mod_chanmode_append(&chbuf, 'k', channel->key);
DO_MODE_CHAR(OPERSONLY, 'O');
DO_MODE_CHAR(REGISTERED, 'z');
DO_MODE_CHAR(SSLONLY, 'Z');
+ DO_MODE_CHAR(HIDEMODE, 'L');
#undef DO_MODE_CHAR
if(change->modes_set & MODE_KEY)
mod_chanmode_append(&chbuf, 'k', change->new_key);
DO_MODE_CHAR(OPERSONLY, 'O');
DO_MODE_CHAR(REGISTERED, 'z');
DO_MODE_CHAR(SSLONLY, 'Z');
+ DO_MODE_CHAR(HIDEMODE, 'L');
#undef DO_MODE_CHAR
}
if (change->modes_set) {
DO_MODE_CHAR(OPERSONLY, 'O');
DO_MODE_CHAR(REGISTERED, 'z');
DO_MODE_CHAR(SSLONLY, 'Z');
+ DO_MODE_CHAR(HIDEMODE, 'L');
#undef DO_MODE_CHAR
switch (change->modes_set & (MODE_KEY|MODE_LIMIT)) {
case MODE_KEY|MODE_LIMIT:
case 'O': remove |= MODE_OPERSONLY; break;
case 'z': remove |= MODE_REGISTERED; break;
case 'Z': remove |= MODE_SSLONLY; break;
+ case 'L': remove |= MODE_HIDEMODE; break;
}
}