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))
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);
//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];