From: rubin Date: Thu, 16 Feb 2006 02:54:40 +0000 (+0000) Subject: better email validity checking X-Git-Tag: 1.9~587 X-Git-Url: https://jfr.im/git/irc/evilnet/x3.git/commitdiff_plain/4c26ef3e790edce6fda894be1ff64806bbddf1c9?hp=636654954bff7c860eed0c2695c3ae436fe53674 better email validity checking --- diff --git a/ChangeLog.X3 b/ChangeLog.X3 index d422d6e..aaa08d4 100644 --- a/ChangeLog.X3 +++ b/ChangeLog.X3 @@ -1,6 +1,14 @@ /*********************************************************************** X3 ChangeLog +2006-01-16 Alex Schumann + + * src/tools.c: created an email valididty function + + * src/nickserv.c: check valididty of email better + + * src/sendmail.c: check validity of email better + 2006-01-06 Alex Schumann * src/opserv.c: fix gtrace, trace, csearch and alerts to work when aliased diff --git a/src/common.h b/src/common.h index d094975..b20969b 100644 --- a/src/common.h +++ b/src/common.h @@ -170,6 +170,8 @@ int split_ircmask(char *text, char **nick, char **ident, char **host); char *unsplit_string(char *set[], unsigned int max, char *dest); extern char* x3_strtok(char** save, char* str, char* fs); +int valid_email(const char *email); + #define DECLARE_LIST(STRUCTNAME,ITEMTYPE) struct STRUCTNAME {\ unsigned int used, size;\ ITEMTYPE *list;\ diff --git a/src/nickserv.c b/src/nickserv.c index ade655d..a6efa53 100644 --- a/src/nickserv.c +++ b/src/nickserv.c @@ -718,6 +718,7 @@ is_registerable_nick(const char *nick) } return 1; } +/* this has been replaced with one in tools.c static int is_valid_email_addr(const char *email) @@ -725,6 +726,8 @@ is_valid_email_addr(const char *email) return strchr(email, '@') != NULL; } +*/ + static const char * visible_email_addr(struct userNode *user, struct handle_info *hi) { @@ -1295,7 +1298,7 @@ static NICKSERV_FUNC(cmd_register) email_addr = argv[3]; /* Check that the email address looks valid.. */ - if (!is_valid_email_addr(email_addr)) { + if (!valid_email(email_addr)) { reply("NSMSG_BAD_EMAIL_ADDR"); return 0; } @@ -1394,7 +1397,7 @@ static NICKSERV_FUNC(cmd_oregister) } if (nickserv_conf.email_required) { - if (!is_valid_email_addr(argv[4])) { + if (!valid_email(argv[4])) { reply("NSMSG_BAD_EMAIL_ADDR"); return 0; } @@ -2654,7 +2657,7 @@ static OPTION_FUNC(opt_email) { if (argc > 1) { const char *str; - if (!is_valid_email_addr(argv[1])) { + if (!valid_email(argv[1])) { send_message(user, nickserv, "NSMSG_BAD_EMAIL_ADDR"); return 0; } diff --git a/src/sendmail.c b/src/sendmail.c index 0661281..8c211e7 100644 --- a/src/sendmail.c +++ b/src/sendmail.c @@ -100,6 +100,24 @@ send_flowed_text(FILE *where, const char *para) } } +/* moved to tools.c +int +valid_email(email) +{ + for (i=0;iemail_addr[i]) && + to->email_addr[i] != '.' && + to->email_addr[i] != '@' && + to->email_addr[i] != '-' && + to->email_addr[i] != '+' && + to->email_addr[i] != '_' ) + return false; + } + return true; +} +*/ + void sendmail(struct userNode *from, struct handle_info *to, const char *subject, const char *body, int first_time) { @@ -227,6 +245,12 @@ sendmail(struct userNode *from, struct handle_info *to, const char *subject, con argv[argc++] = "-f"; argv[argc++] = fromaddr; } + if(!valid_email(to->email_addr)) + { + log_module(MAIN_LOG, LOG_ERROR, "email address contained illegal chars. Refusing to execv() sendmail."); + _exit(1); + } + argv[argc++] = to->email_addr; argv[argc++] = NULL; if (execv(mpath, (char**)argv) < 0) { diff --git a/src/tools.c b/src/tools.c index 7a6020e..a46ed50 100644 --- a/src/tools.c +++ b/src/tools.c @@ -1010,3 +1010,21 @@ char* x3_strtok(char **save, char *str, char *fs) return (tmp); } +int valid_email(const char *email) +{ + unsigned int i; + for (i=0;i