From: rubinlinux Date: Thu, 11 Aug 2005 23:34:27 +0000 (+0000) Subject: Improved and committed the Life4Christ folks aut-oper patch. X-Git-Tag: 1.9~626 X-Git-Url: https://jfr.im/git/irc/evilnet/x3.git/commitdiff_plain/5a1daaaba65bb61921c1274fd8672cb91bae4268?hp=3d0b24ce4c7ef522cac7ad06ee5340e3e243c46c Improved and committed the Life4Christ folks aut-oper patch. --- diff --git a/ChangeLog.X3 b/ChangeLog.X3 index bf8cb50..7de1d29 100644 --- a/ChangeLog.X3 +++ b/ChangeLog.X3 @@ -1,6 +1,21 @@ /*********************************************************************** X3 ChangeLog +2005-08-11 Alex Schumann + + * src/proto-p10.c: added irc_umode() to send usermodes (Life4Christ) + + * src/proto-bahumit.c: added irc_umode() to send usermodes, untested.. + + * src/proto.h: added irc_umode() to send usermodes (Life4Christ) + + * src/nickserv.c: Added option to have authserv oper/admin people with + opserv access. (Life4Christ) + + * src/opserv.c: Added admin_level config option + + * src/opserv.h: Added admin_level config option + 2005-08-11 Alex Schumann * src/proto-p10.c: Avoid duplicating an oper in curr_opers (,staff diff --git a/src/nickserv.c b/src/nickserv.c index 4794e95..e03e984 100644 --- a/src/nickserv.c +++ b/src/nickserv.c @@ -50,6 +50,8 @@ #define KEY_SET_TITLE_LEVEL "set_title_level" #define KEY_SET_FAKEHOST_LEVEL "set_fakehost_level" #define KEY_TITLEHOST_SUFFIX "titlehost_suffix" +#define KEY_AUTO_OPER "auto_oper" +#define KEY_AUTO_ADMIN "auto_admin" #define KEY_FLAG_LEVELS "flag_levels" #define KEY_HANDLE_EXPIRE_FREQ "handle_expire_freq" #define KEY_ACCOUNT_EXPIRE_FREQ "account_expire_freq" @@ -295,6 +297,10 @@ static const struct message_entry msgtab[] = { { "NSMSG_SET_EPITHET", "$bEPITHET: $b%s" }, { "NSMSG_SET_TITLE", "$bTITLE: $b%s" }, { "NSMSG_SET_FAKEHOST", "$bFAKEHOST: $b%s" }, + + { "NSMSG_AUTO_OPER", "You have been auto-opered" }, + { "NSMSG_AUTO_OPER_ADMIN", "You have been auto-admined" }, + { "NSEMAIL_ACTIVATION_SUBJECT", "Account verification for %s" }, { "NSEMAIL_ACTIVATION_BODY", "This email has been sent to verify that this email address belongs to the person who tried to register an account on %1$s. Your cookie is:\n" @@ -392,6 +398,8 @@ static struct { unsigned long auto_reclaim_delay; unsigned char default_maxlogins; unsigned char hard_maxlogins; + const char *auto_oper; + const char *auto_admin; } nickserv_conf; /* We have 2^32 unique account IDs to use. */ @@ -1793,9 +1801,29 @@ static NICKSERV_FUNC(cmd_auth) reply("NSMSG_WEAK_PASSWORD"); if (hi->passwd[0] != '$') cryptpass(passwd, hi->passwd); - reply("NSMSG_AUTH_SUCCESS"); + /* If a channel was waiting for this user to auth, + * finish adding them */ process_adduser_pending(user); + + reply("NSMSG_AUTH_SUCCESS"); + + if(!IsOper(user)) + { + /* Auto Oper users with Opserv access -Life4Christ 8-10-2005 */ + if( nickserv_conf.auto_admin[0] && hi->opserv_level >= opserv_conf_admin_level()) + { + irc_umode(user,nickserv_conf.auto_admin); + reply("NSMSG_AUTO_OPER_ADMIN"); + } + else if (nickserv_conf.auto_oper[0] && hi->opserv_level > 0) + { + irc_umode(user,nickserv_conf.auto_oper); + reply("NSMSG_AUTO_OPER"); + } + } + + /* Wipe out the pass for the logs */ argv[pw_arg] = "****"; return 1; } @@ -3792,6 +3820,13 @@ nickserv_conf_read(void) nickserv_conf.email_search_level = str ? strtoul(str, NULL, 0) : 600; str = database_get_data(conf_node, KEY_TITLEHOST_SUFFIX, RECDB_QSTRING); nickserv_conf.titlehost_suffix = str ? str : "example.net"; + + str = database_get_data(conf_node, KEY_AUTO_OPER, RECDB_QSTRING); + nickserv_conf.auto_oper = str ? str : ""; + + str = database_get_data(conf_node, KEY_AUTO_ADMIN, RECDB_QSTRING); + nickserv_conf.auto_admin = str ? str : ""; + str = conf_get_data("server/network", RECDB_QSTRING); nickserv_conf.network_name = str ? str : "some IRC network"; if (!nickserv_conf.auth_policer_params) { diff --git a/src/opserv.c b/src/opserv.c index 1fb15bd..6c8cd14 100644 --- a/src/opserv.c +++ b/src/opserv.c @@ -76,6 +76,7 @@ #define KEY_BLOCK_GLINE_DURATION "block_gline_duration" #define KEY_ISSUER "issuer" #define KEY_ISSUED "issued" +#define KEY_ADMIN_LEVEL "admin_level" #define IDENT_FORMAT "%s [%s@%s/%s]" #define IDENT_DATA(user) user->nick, user->ident, user->hostname, inet_ntoa(user->ip) @@ -304,6 +305,7 @@ static struct { unsigned long purge_lock_delay; unsigned long join_flood_moderate; unsigned long join_flood_moderate_threshold; + unsigned long admin_level; } opserv_conf; struct trusted_host { @@ -4149,6 +4151,10 @@ opserv_conf_read(void) } else { opserv_conf.staff_auth_channel = NULL; } + + str = database_get_data(conf_node, KEY_ADMIN_LEVEL, RECDB_QSTRING); + opserv_conf.admin_level = str ? strtoul(str, NULL, 0): 800; + str = database_get_data(conf_node, KEY_UNTRUSTED_MAX, RECDB_QSTRING); opserv_conf.untrusted_max = str ? strtoul(str, NULL, 0) : 5; str = database_get_data(conf_node, KEY_PURGE_LOCK_DELAY, RECDB_QSTRING); @@ -4187,6 +4193,13 @@ opserv_conf_read(void) dict_foreach(child, set_policer_param, pp); } +/* lame way to export opserv_conf value to nickserv.c ... */ +unsigned int +opserv_conf_admin_level() +{ + return(opserv_conf.admin_level); +} + static void opserv_db_init(void) { /* set up opserv_trusted_hosts dict */ diff --git a/src/opserv.h b/src/opserv.h index 8add3e6..2959b79 100644 --- a/src/opserv.h +++ b/src/opserv.h @@ -24,5 +24,6 @@ void init_opserv(const char *nick); unsigned int gag_create(const char *mask, const char *owner, const char *reason, time_t expires); int opserv_bad_channel(const char *name); +unsigned int opserv_conf_admin_level(); #endif diff --git a/src/proto-bahamut.c b/src/proto-bahamut.c index b0e35b9..081c082 100644 --- a/src/proto-bahamut.c +++ b/src/proto-bahamut.c @@ -400,6 +400,14 @@ irc_mode(struct userNode *who, struct chanNode *target, const char *modes) { putsock(":%s MODE %s "FMT_TIME_T" %s", who->nick, target->name, target->timestamp, modes); } +/* Untested...*/ +void +irc_umode(struct userNode *target, const char *modes) +{ + putsock(":%s MODE %s %s ",self->numeric,target->nick, modes); +} + + void irc_svsmode(struct userNode *target, char *modes, unsigned long stamp) { extern struct userNode *nickserv; diff --git a/src/proto-p10.c b/src/proto-p10.c index fbfc539..baba499 100644 --- a/src/proto-p10.c +++ b/src/proto-p10.c @@ -714,6 +714,16 @@ irc_mode(struct userNode *from, struct chanNode *target, const char *modes) 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) { diff --git a/src/proto.h b/src/proto.h index a6f03cd..fe70c2a 100644 --- a/src/proto.h +++ b/src/proto.h @@ -134,6 +134,7 @@ void irc_wallchops(struct userNode *from, const char *to, const char *message); void irc_join(struct userNode *who, struct chanNode *what); void irc_invite(struct userNode *from, struct userNode *who, struct chanNode *to); void irc_mode(struct userNode *who, struct chanNode *target, const char *modes); +void irc_umode(struct userNode *target, const char *modes); void irc_kick(struct userNode *who, struct userNode *target, struct chanNode *from, const char *msg); void irc_part(struct userNode *who, struct chanNode *what, const char *reason); void irc_topic(struct userNode *who, struct chanNode *what, const char *topic);