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
|