include MASK check to LOC Authentication
authorpk910 <philipp@zoelle1.de>
Sun, 17 Jul 2011 14:12:12 +0000 (16:12 +0200)
committerpk910 <philipp@zoelle1.de>
Sun, 17 Jul 2011 14:12:12 +0000 (16:12 +0200)
src/nickserv.c
src/nickserv.h
src/proto-p10.c

index 6831c586c308ce19c3710b2af300f71f28e63597..122c622db728c9554e0b4f48d4923f4e264f727e 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;
+    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))
index de721a6aa73dcc41d6640167e133aa5617142f19..ea8e0d0edc4683258187e989e1fd9b0a68f06b07 100644 (file)
@@ -139,7 +139,7 @@ struct modeNode *find_handle_in_channel(struct chanNode *channel, struct handle_
 int nickserv_modify_handle_flags(struct userNode *user, struct userNode *bot, const char *str, unsigned long *add, unsigned long *remove);
 int oper_has_access(struct userNode *user, struct userNode *bot, unsigned int min_level, unsigned int quiet);
 void nickserv_show_oper_accounts(struct userNode *user, struct svccmd *cmd);
-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);
 char *getfakehost(const char *user);
 void nickserv_devnull_delete(char *name);
 void nickserv_devnull_rename(char *oldname, char *newname);
index 55d1b941432cf6e32da5fa19308c42e5cd3b94d4..354879e12cf3c022f1378b7cf8b7175d6f3ab39c 100644 (file)
@@ -1755,9 +1755,10 @@ static CMD_FUNC(cmd_relay)
             //LQ !ABADE pk910 80.153.5.212 server.zoelle1.de ~watchcat :test
             //ok  let's check the login datas
             struct handle_info *hi;
-            char tmp[MAXLEN];
-            sprintf(tmp, "*!%s@%s",argv[7],argv[5]);
-            if((hi = checklogin(argv[4],argv[argc-1],&argv[3][1],tmp))) {
+            char tmp[MAXLEN], tmp2[MAXLEN];
+            sprintf(tmp, "%s@%s",argv[7],argv[6]);
+            sprintf(tmp2, "%s@%s",argv[7],argv[5]);
+            if((hi = checklogin(argv[4],argv[argc-1],&argv[3][1],tmp,tmp2))) {
              //login ok
              struct devnull_class *th;
              char devnull[512];