From: Tom C. <tom...@us...> - 2004-12-17 17:46:04
|
Update of /cvsroot/qmailadmin/qmailadmin In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv30458 Modified Files: Tag: stable-1_2 ChangeLog util.c Log Message: fix check_email_addr() (used to accept invalid punctuation in domain part of address). Index: util.c =================================================================== RCS file: /cvsroot/qmailadmin/qmailadmin/util.c,v retrieving revision 1.4.2.3 retrieving revision 1.4.2.4 diff -u -d -r1.4.2.3 -r1.4.2.4 --- util.c 20 Nov 2004 01:10:41 -0000 1.4.2.3 +++ util.c 17 Dec 2004 17:45:38 -0000 1.4.2.4 @@ -158,37 +158,39 @@ printf ("%s = %d<BR>\n", get_html_text("080"), CurMailingLists); } -int check_email_addr( addr ) - char *addr; +/* check_email_addr( char *addr ) + * + * Make sure 'addr' is a valid email address. Returns 1 if it's bad, + * 0 if it's good. + */ +int check_email_addr( char *addr ) { char *taddr = addr; + char *atpos = NULL; + char *dotpos = NULL; - - if(strlen(taddr)<0) return(1); - for(taddr=addr;*taddr!=0;++taddr) { - if(!isalnum(*taddr) && !ispunct(*taddr)) { - return(1); - } - } - - /* force to lower */ - lowerit(addr); - - for(taddr=addr;*taddr!='@'&&*taddr!=0;++taddr) { - if ( isspace(*taddr) ) return(1); - if(ispunct(*taddr) && (strchr (".-+=_&", *taddr) == NULL)){ - return(1); + for(taddr = addr; *taddr != '\0'; ++taddr) { + if (*taddr == '@') { + if (atpos != NULL) return 1; /* double @ */ + atpos = taddr; + } else if(!isalnum(*taddr) && (strchr (".-+=_&", *taddr) == NULL)) { + return 1; } } /* if just a user name with no @domain.com then bad */ - if (*taddr==0) return(1); + if (atpos == NULL) return 1; /* Look for a sub domain */ - for(;*taddr!='.'&&*taddr!=0;++taddr); + dotpos = strchr (atpos, '.'); - if (*taddr==0) return(1); - return(0); + /* no '.' in the domain part */ + if (dotpos == NULL) return 1; + + /* once we know it's good, convert it to lowercase */ + lowerit(addr); + + return 0; } int fixup_local_name( addr ) Index: ChangeLog =================================================================== RCS file: /cvsroot/qmailadmin/qmailadmin/ChangeLog,v retrieving revision 1.15.2.40 retrieving revision 1.15.2.41 diff -u -d -r1.15.2.40 -r1.15.2.41 --- ChangeLog 17 Dec 2004 05:50:56 -0000 1.15.2.40 +++ ChangeLog 17 Dec 2004 17:45:37 -0000 1.15.2.41 @@ -7,6 +7,8 @@ - user.c: fix bug in handling .qmail files with blank lines. - user.c: new catchall option, forward unknown users to remote domain (e.g., x -> x...@do..., y -> y...@do..., etc.) [910410] + - util.c: fix check_email_addr() (used to accept invalid + punctuation in domain part of address). 1.2.5 - released 1-Dec-04 |