]> jfr.im git - irc/evilnet/x3.git/commitdiff
Improved and committed the Life4Christ folks aut-oper patch.
authorrubinlinux <redacted>
Thu, 11 Aug 2005 23:34:27 +0000 (23:34 +0000)
committerrubinlinux <redacted>
Thu, 11 Aug 2005 23:34:27 +0000 (23:34 +0000)
ChangeLog.X3
src/nickserv.c
src/opserv.c
src/opserv.h
src/proto-bahamut.c
src/proto-p10.c
src/proto.h

index bf8cb50d3d44411ef9f3ec6a18478dd5e8f7fe88..7de1d29fa9c88fa069ad8d3e6a97163682fe6f2f 100644 (file)
@@ -1,6 +1,21 @@
 /***********************************************************************
  X3 ChangeLog
 
+2005-08-11  Alex Schumann  <rubin@afternet.org>
+
+       * 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  <rubin@afternet.org>
 
        * src/proto-p10.c: Avoid duplicating an oper in curr_opers (,staff
index 4794e953708bbf6a0a385af64c84d32f179ca06a..e03e9847703a51d6a38401f890788083088ebd4d 100644 (file)
@@ -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) {
index 1fb15bd5bc68a93a89f951141de0cb454ad231d6..6c8cd14410a8c417b7a72c33be6c4c88a07777c5 100644 (file)
@@ -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 */
index 8add3e63e3fd83aaecb3d52b16367c5d092a6c73..2959b791fe7fee99d3732b977c8c525c6ffa10aa 100644 (file)
@@ -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
index b0e35b95ed7451d25c1203699289a97a1be7b8a0..081c082adacbdbe968d35c19aea01aca9abe500f 100644 (file)
@@ -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;
index fbfc539055a9b2fce07e4feaa6d4bc42b6be6b36..baba4991a4f3b218855646ca7fd9f3762a2eb9b1 100644 (file)
@@ -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)
 {
index a6f03cd0a9ab78c1d0d26704b7dac5c075184f4a..fe70c2a2c874d4170620e94c41239f50e4e17538 100644 (file)
@@ -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);