]> jfr.im git - irc/evilnet/x3.git/blobdiff - src/nickserv.c
sync all done, dont worry the language files for en_UK (now en_GB) are still there...
[irc/evilnet/x3.git] / src / nickserv.c
index 9882dabd6e2692010d79c9c2c3289ac53e95e19d..4d0e538469383e011d8c772bd729ac2d1ec7c0f3 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"
@@ -157,7 +159,7 @@ static const struct message_entry msgtab[] = {
     { "NSMSG_HANDLE_ACTIVATED", "Your account is now activated (with the password you entered when you registered).  You are now authenticated to your account." },
     { "NSMSG_PASSWORD_CHANGED", "You have successfully changed your password to what you requested with the $bresetpass$b command." },
     { "NSMSG_EMAIL_PROHIBITED", "%s may not be used as an email address: %s" },
-    { "NSMSG_EMAIL_OVERUSED", "There are already the maximum number of accounts associated with that email address." },
+    { "NSMSG_EMAIL_OVERUSED", "That email address already has an account. Use RESETPASS if you forgot your password." },
     { "NSMSG_EMAIL_SAME", "That is the email address already there; no need to change it." },
     { "NSMSG_EMAIL_CHANGED", "You have successfully changed your email address." },
     { "NSMSG_BAD_COOKIE_TYPE", "Your account had bad cookie type %d; sorry.  I am confused.  Please report this bug." },
@@ -286,6 +288,7 @@ static const struct message_entry msgtab[] = {
     { "NSMSG_SET_PRIVMSG", "$bPRIVMSG:      $b%s" },
     { "NSMSG_SET_STYLE", "$bSTYLE:        $b%s" },
     { "NSMSG_SET_ANNOUNCEMENTS", "$bANNOUNCEMENTS: $b%s" },
+    { "NSMSG_SET_AUTOHIDE", "$bAUTOHIDE: $b%s" },
     { "NSMSG_SET_PASSWORD", "$bPASSWORD:     $b%s" },
     { "NSMSG_SET_FLAGS", "$bFLAGS:        $b%s" },
     { "NSMSG_SET_EMAIL", "$bEMAIL:        $b%s" },
@@ -295,6 +298,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 +399,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. */
@@ -794,6 +803,8 @@ is_secure_password(const char *handle, const char *pass, struct userNode *user)
 {
     unsigned int i, len;
     unsigned int cnt_digits = 0, cnt_upper = 0, cnt_lower = 0;
+    int p;
+
     len = strlen(pass);
     if (len < nickserv_conf.password_min_length) {
         if (user)
@@ -805,8 +816,8 @@ is_secure_password(const char *handle, const char *pass, struct userNode *user)
             send_message(user, nickserv, "NSMSG_PASSWORD_ACCOUNT");
         return 0;
     }
-    dict_find(nickserv_conf.weak_password_dict, pass, &i);
-    if (i) {
+    dict_find(nickserv_conf.weak_password_dict, pass, &p);
+    if (p) {
         if (user)
             send_message(user, nickserv, "NSMSG_PASSWORD_DICTIONARY");
         return 0;
@@ -1726,7 +1737,7 @@ static NICKSERV_FUNC(cmd_auth)
         pw_arg = 1;
     } else {
         reply("MSG_MISSING_PARAMS", argv[0]);
-        svccmd_send_help(user, nickserv, cmd);
+        svccmd_send_help_brief(user, nickserv, cmd);
         return 0;
     }
     if (!hi) {
@@ -1793,9 +1804,34 @@ 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");
+
+    
+    /* Set +x if autohide is on */
+    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())
+        {
+            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;
 }
@@ -2295,7 +2331,7 @@ set_list(struct userNode *user, struct handle_info *hi, int override)
     unsigned int i;
     char *set_display[] = {
         "INFO", "WIDTH", "TABLEWIDTH", "COLOR", "PRIVMSG", /* "STYLE", */
-        "EMAIL", "ANNOUNCEMENTS", "MAXLOGINS", "LANGUAGE",
+        "EMAIL", "ANNOUNCEMENTS", "AUTOHIDE", "MAXLOGINS", "LANGUAGE",
         "FAKEHOST", "TITLE", "EPITHET"
     };
 
@@ -2428,6 +2464,23 @@ static OPTION_FUNC(opt_privmsg)
     return 1;
 }
 
+static OPTION_FUNC(opt_autohide)
+{
+    if (argc > 1) {
+       if (enabled_string(argv[1]))
+           HANDLE_SET_FLAG(hi, AUTOHIDE);
+        else if (disabled_string(argv[1]))
+           HANDLE_CLEAR_FLAG(hi, AUTOHIDE);
+       else {
+           send_message(user, nickserv, "MSG_INVALID_BINARY", argv[1]);
+           return 0;
+       }
+    }
+
+    send_message(user, nickserv, "NSMSG_SET_AUTOHIDE", user_find_message(user, HANDLE_FLAGGED(hi, AUTOHIDE) ? "MSG_ON" : "MSG_OFF"));
+    return 1;
+}
+
 /*
 static OPTION_FUNC(opt_style)
 {
@@ -3436,6 +3489,7 @@ nickserv_db_read_handle(const char *handle, dict_t obj)
     struct string_list *masks, *slist;
     struct handle_info *hi;
     struct userNode *authed_users;
+    struct userData *channels;
     unsigned long int id;
     unsigned int ii;
     dict_t subdb;
@@ -3449,10 +3503,13 @@ nickserv_db_read_handle(const char *handle, dict_t obj)
     }
     if ((hi = get_handle_info(handle))) {
         authed_users = hi->users;
+        channels = hi->channels;
         hi->users = NULL;
+        hi->channels = NULL;
         dict_remove(nickserv_handle_dict, hi->handle);
     } else {
         authed_users = NULL;
+        channels = NULL;
     }
     hi = register_handle(handle, str, id);
     if (authed_users) {
@@ -3462,6 +3519,7 @@ nickserv_db_read_handle(const char *handle, dict_t obj)
             authed_users = authed_users->next_authed;
         }
     }
+    hi->channels = channels;
     masks = database_get_data(obj, KEY_MASKS, RECDB_STRING_LIST);
     hi->masks = masks ? string_list_copy(masks) : alloc_string_list(1);
     str = database_get_data(obj, KEY_MAXLOGINS, RECDB_QSTRING);
@@ -3787,6 +3845,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) {
@@ -4046,6 +4111,7 @@ init_nickserv(const char *nick)
     dict_insert(nickserv_opt_dict, "TABLEWIDTH", opt_tablewidth);
     dict_insert(nickserv_opt_dict, "COLOR", opt_color);
     dict_insert(nickserv_opt_dict, "PRIVMSG", opt_privmsg);
+    dict_insert(nickserv_opt_dict, "AUTOHIDE", opt_autohide);
 /*    dict_insert(nickserv_opt_dict, "STYLE", opt_style); */
     dict_insert(nickserv_opt_dict, "PASS", opt_password);
     dict_insert(nickserv_opt_dict, "PASSWORD", opt_password);