fixed vote commands
[srvx.git] / src / nickserv.c
index 6831c586c308ce19c3710b2af300f71f28e63597..a370fd4463d923d00bb6e1dd12235190501c8de9 100644 (file)
@@ -1825,12 +1825,24 @@ static NICKSERV_FUNC(cmd_auth)
     return 1;
 }
 
-struct handle_info *checklogin(const char *user, const char *pass, const char *numeric, const char *hostmask)
+struct handle_info *checklogin(const char *user, const char *pass, const char *numeric, const char *hostmask, const char *ipmask)
 {
     struct handle_info *hi;
+    unsigned int match = 0, ii = 0;
     hi = dict_find(nickserv_handle_dict, user, NULL);
     if(!hi)
         return NULL;
+    /* If no hostmasks on the account, allow it. */
+    if (hi->masks->used) {
+        /* If any hostmask matches, allow it. */
+        for (ii=0; ii<hi->masks->used; ii++)
+          if (match_ircglob(hostmask, hi->masks->list[ii]) || match_ircglob(ipmask, hi->masks->list[ii])) {
+            match = 1;
+            break;
+          }
+        if(!match) 
+          return NULL;
+    }
     if(!checkpass(pass, hi->passwd))
         return NULL;
     if (HANDLE_FLAGGED(hi, SUSPENDED))
@@ -2928,12 +2940,10 @@ static OPTION_FUNC(opt_fakeident)
 
 static NICKSERV_FUNC(cmd_reclaim)
 {
-    struct handle_info *hi;
     struct nick_info *ni;
     struct userNode *victim;
 
     NICKSERV_MIN_PARMS(2);
-    hi = user->handle_info;
     ni = dict_find(nickserv_nick_dict, argv[1], 0);
     if (!ni) {
         reply("NSMSG_UNKNOWN_NICK", argv[1]);