From 350314c7cc92a1b15287133ca072f56fe85dc0b1 Mon Sep 17 00:00:00 2001 From: pk910 Date: Sun, 17 Jul 2011 16:12:12 +0200 Subject: [PATCH] include MASK check to LOC Authentication --- src/nickserv.c | 14 +++++++++++++- src/nickserv.h | 2 +- src/proto-p10.c | 7 ++++--- 3 files changed, 18 insertions(+), 5 deletions(-) diff --git a/src/nickserv.c b/src/nickserv.c index 6831c58..122c622 100644 --- a/src/nickserv.c +++ b/src/nickserv.c @@ -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; iimasks->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)) diff --git a/src/nickserv.h b/src/nickserv.h index de721a6..ea8e0d0 100644 --- a/src/nickserv.h +++ b/src/nickserv.h @@ -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); diff --git a/src/proto-p10.c b/src/proto-p10.c index 55d1b94..354879e 100644 --- a/src/proto-p10.c +++ b/src/proto-p10.c @@ -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]; -- 2.20.1