]> jfr.im git - irc/evilnet/x3.git/blobdiff - src/nickserv.c
Minor typo in previous commit where returning 0 when it should have been 1 from opser...
[irc/evilnet/x3.git] / src / nickserv.c
index 223ed57861faf6ebb1f58c8d803c96fbb9e9d122..25d3b7ba2c92394ad7dfb777afd4de3e0a81f57e 100644 (file)
@@ -1179,6 +1179,11 @@ nickserv_register(struct userNode *user, struct userNode *settee, const char *ha
             send_message(user, nickserv, "NSMSG_REGISTER_HN_SUCCESS");
           }
         }
+        else {
+          if (is_registerable_nick(handle)) {
+            register_nick(handle, hi);
+          }
+        }
     }
     if (settee && (user != settee)) {
       if(user) {
@@ -2191,8 +2196,6 @@ struct handle_info *loc_auth(char *sslfp, char *handle, char *password, char *us
 
 static NICKSERV_FUNC(cmd_auth)
 {
-    char *privv[MAXNUMPARAMS];
-    int privc, i;
     int pw_arg, used, maxlogins;
     struct handle_info *hi;
     const char *passwd;
@@ -2283,7 +2286,7 @@ static NICKSERV_FUNC(cmd_auth)
             * create the account.
             */
              char *mask;
-             if(!(hi = nickserv_register(user, NULL, argv[1], argv[2], 0))) {
+             if(!(hi = nickserv_register(user, user, argv[1], argv[2], 0))) {
                 reply("NSMSG_UNABLE_TO_ADD");
                 return 0; /* couldn't add the user for some reason */
              }
@@ -2389,37 +2392,6 @@ static NICKSERV_FUNC(cmd_auth)
     if(HANDLE_FLAGGED(hi, AUTOHIDE))
         irc_umode(user, "+x");
 
-    if(!IsOper(user)) /* If they arnt already opered.. */
-    {
-        /* Auto Oper users with Opserv access -Life4Christ 8-10-2005  */
-        if( nickserv_conf.auto_admin[0] && hi->opserv_level >= opserv_conf_admin_level())
-        {
-            if (nickserv_conf.auto_admin_privs[0]) {
-                irc_raw_privs(user, nickserv_conf.auto_admin_privs);
-                privc = split_line(strdup(nickserv_conf.auto_admin_privs), false, MAXNUMPARAMS, privv);
-                for (i = 0; i < privc; i++) {
-                    client_modify_priv_by_name(user, privv[i], 1);
-                }
-            }
-            irc_umode(user,nickserv_conf.auto_admin);
-            reply("NSMSG_AUTO_OPER_ADMIN");
-        }
-        else if (nickserv_conf.auto_oper[0] && hi->opserv_level > 0)
-        {
-            if (nickserv_conf.auto_oper_privs[0]) {
-                irc_raw_privs(user, nickserv_conf.auto_oper_privs);
-                privc = split_line(strdup(nickserv_conf.auto_oper_privs), false, MAXNUMPARAMS, privv);
-                for (i = 0; i < privc; i++) {
-                    client_modify_priv_by_name(user, privv[i], 1);
-                }
-            }
-            irc_umode(user,nickserv_conf.auto_oper);
-            reply("NSMSG_AUTO_OPER");
-        }
-    }
-
-   /* Wipe out the pass for the logs */
-
     if (!hi->masks->used) {
         irc_in_addr_t ip;
         string_list_append(hi->masks, generate_hostmask(user, GENMASK_OMITNICK|GENMASK_NO_HIDING|GENMASK_ANY_IDENT));
@@ -2427,6 +2399,7 @@ static NICKSERV_FUNC(cmd_auth)
             string_list_append(hi->masks, generate_hostmask(user, GENMASK_OMITNICK|GENMASK_BYIP|GENMASK_NO_HIDING|GENMASK_ANY_IDENT));
     }
 
+    /* Wipe out the pass for the logs */
     argv[pw_arg] = "****";
     return 1;
 }
@@ -4108,6 +4081,16 @@ static NICKSERV_FUNC(cmd_merge)
             string_list_append(hi_to->masks, strdup(mask));
     }
 
+    /* Merge the SSL fingerprints. */
+    for (ii=0; ii<hi_from->sslfps->used; ii++) {
+        char *sslfp = hi_from->sslfps->list[ii];
+        for (jj=0; jj<hi_to->sslfps->used; jj++)
+            if (!irccasecmp(hi_to->sslfps->list[jj], sslfp))
+                break;
+        if (jj==hi_to->sslfps->used) /* Nothing from the "to" handle covered this sslfp, so add it. */
+            string_list_append(hi_to->sslfps, strdup(sslfp));
+    }
+
     /* Merge the ignores. */
     for (ii=0; ii<hi_from->ignores->used; ii++) {
         char *ignore = hi_from->ignores->list[ii];
@@ -5320,18 +5303,37 @@ nickserv_db_cleanup(UNUSED_ARG(void* extra))
 }
 
 void handle_loc_auth_oper(struct userNode *user, UNUSED_ARG(struct handle_info *old_handle), UNUSED_ARG(void *extra)) {
+    char *privv[MAXNUMPARAMS];
+    int privc, i;
+
     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()) {
+            if (nickserv_conf.auto_admin_privs[0]) {
+                irc_raw_privs(user, nickserv_conf.auto_admin_privs);
+                privc = split_line(strdup(nickserv_conf.auto_admin_privs), false, MAXNUMPARAMS, privv);
+                for (i = 0; i < privc; i++) {
+                    client_modify_priv_by_name(user, privv[i], 1);
+                }
+            }
             irc_umode(user, nickserv_conf.auto_admin);
             irc_sno(0x1, "%s (%s@%s) is now an IRC Administrator",
                     user->nick, user->ident, user->hostname);
+            send_message(user, nickserv, "NSMSG_AUTO_OPER_ADMIN");
         } else if (*nickserv_conf.auto_oper && user->handle_info->opserv_level) {
+            if (nickserv_conf.auto_oper_privs[0]) {
+                irc_raw_privs(user, nickserv_conf.auto_oper_privs);
+                privc = split_line(strdup(nickserv_conf.auto_oper_privs), false, MAXNUMPARAMS, privv);
+                for (i = 0; i < privc; i++) {
+                    client_modify_priv_by_name(user, privv[i], 1);
+                }
+            }
             irc_umode(user, nickserv_conf.auto_oper);
             irc_sno(0x1, "%s (%s@%s) is now an IRC Operator",
                     user->nick, user->ident, user->hostname);
+            send_message(user, nickserv, "NSMSG_AUTO_OPER");
         }
     }
 }