/***********************************************************************
X3 ChangeLog
+2009-05-05 Henrik Stuart <evilnet@hstuart.dk>
+
+ * src/proto-p10.c: introduced irc_sno for SNO messages. Removed broken
+ auto_oper on LOC support.
+
+ * src/proto.h: introduced irc_sno for SNO messages.
+
+ * src/nickserv.c: added registered authentication function to handle
+ auto_oper on LOC.
+
2009-05-04 Alex Schumann <rubin@afternet.org>
* src/chanserv.c: julien and polo noticed a crash during channel register. Fixed
regfree(&nickserv_conf.valid_nick_regex);
}
+void handle_loc_auth_oper(struct userNode *user, UNUSED_ARG(struct handle_info *old_handle)) {
+ if (!*nickserv_conf.auto_oper || !user->handle_info)
+ return;
+
+ if (!IsOper(user)) {
+ if (*nickserv_conf.auto_admin && user->handle_info->opserv_level >= opserv_conf_admin_level()) {
+ irc_umode(user, nickserv_conf.auto_admin);
+ irc_sno(0x1, "%s (%s@%s) is now an IRC Administrator",
+ user->nick, user->ident, user->hostname);
+ } else if (*nickserv_conf.auto_oper && user->handle_info->opserv_level) {
+ irc_umode(user, nickserv_conf.auto_oper);
+ irc_sno(0x1, "%s (%s@%s) is now an IRC Operator",
+ user->nick, user->ident, user->hostname);
+ }
+ }
+}
+
void
init_nickserv(const char *nick)
{
reg_nick_change_func(handle_nick_change);
reg_del_user_func(nickserv_remove_user);
reg_account_func(handle_account);
+ reg_auth_func(handle_loc_auth_oper);
/* set up handle_inverse_flags */
memset(handle_inverse_flags, 0, sizeof(handle_inverse_flags));
}
}
+void irc_sno(unsigned int mask, char const* format, ...) {
+ va_list arg_list;
+ char buffer[MAXLEN];
+ va_start(arg_list, format);
+ vsnprintf(buffer, MAXLEN-2, format, arg_list);
+ buffer[MAXLEN-1] = 0;
+ putsock("%s " CMD_SNO " %d :%s", self->numeric, mask, buffer);
+}
+
static void send_burst(void);
static void
struct userNode *user;
struct server *server;
struct handle_info *hi;
- extern struct nickserv_config nickserv_conf;
if ((argc < 3) || !origin || !(server = GetServerH(origin)))
return 0; /* Origin must be server. */
putsock("%s " P10_ACCOUNT " %s A %s "FMT_TIME_T, self->numeric, server->numeric , argv[3], hi->registered);
log_module(MAIN_LOG, LOG_DEBUG, "loc_auth: %s\n", user->nick);
-
- if (nickserv_conf.auto_oper[0] && hi->opserv_level > 0)
- putsock("%s " P10_MODE " %s %s ", self->numeric, argv[4], nickserv_conf.auto_oper);
}
else
{
{
/* Return a AC A */
putsock("%s " P10_ACCOUNT " %s A %s "FMT_TIME_T, self->numeric, server->numeric , argv[3], hi->registered);
-
- if (nickserv_conf.auto_oper[0] && hi->opserv_level > 0)
- putsock("%s " P10_MODE " %s %s ", self->numeric, argv[5], nickserv_conf.auto_oper);
}
else
{
void irc_regnick(struct userNode *user);
void irc_fakehost(struct userNode *user, const char *host);
void irc_mark(struct userNode *user, char *mark);
+void irc_sno(unsigned int mask, char const* format, ...);
/* numeric messages */
void irc_numeric(struct userNode *user, unsigned int num, const char *format, ...);