On Sun, Jan 16, 2005, I replied to myself:

> I'll post a patch in a few minutes.

April, let me know if this patch gets you back up and running.

Aaron
--- dsn-old.c	2005-01-07 04:23:01.000000000 -0800
+++ dsn.c	2005-01-16 10:57:03.452768368 -0800
@@ -299,27 +299,48 @@
 		}
 	}
 	/* We don't have a useridnr, so we have either a username or an alias. */
+	/* Here's the process: 
+	   if (address has alias) 
+	       resolve aliases
+	   else if (address is username)
+	       deliver to username
+	   else if (address' domain matches a catch-all)
+	       deliver to domain-user
+	 */
 	else {		/* from: 'if (delivery->useridnr != 0)' */
 
-		/* See if the address is a username. */
-		switch (auth_user_exists(delivery->address, &userid)) {
-		case -1:
-			{
+		alias_count =
+		    auth_check_user_ext(delivery->address,
+					delivery->userids,
+					delivery->forwards, -1);
+		trace(TRACE_DEBUG,
+		      "%s, %s: user [%s] found total of [%d] aliases",
+		      __FILE__, __func__, delivery->address, alias_count);
+
+		if (alias_count > 0) {
+			/* The address has aliases. */
+			delivery->dsn.class = DSN_CLASS_OK;	/* Success. */
+			delivery->dsn.subject = 1;	/* Address related. */
+			delivery->dsn.detail = 5;	/* Valid. */
+		} else {
+			/* No aliases found for the address. */
+			int user_exists;
+			user_exists = auth_user_exists(delivery->address, &userid);
+
+			if (user_exists < 0) {
 				/* An error occurred */
 				trace(TRACE_ERROR,
 				      "%s, %s: error checking user [%s]",
 				      __FILE__, __func__, delivery->address);
 				return -1;
-			}
-		case 1:
-			{
+			} else if (user_exists == 1) {
 				if (list_nodeadd(delivery->userids, &userid,
 				     sizeof(u64_t)) == 0) {
 					trace(TRACE_ERROR, "%s, %s: out of memory",
 					      __FILE__, __func__);
 					return -1;
 				} else {
-
+                        
 					trace(TRACE_DEBUG,
 					      "%s, %s: added user [%s] id [%llu] to delivery list",
 					      __FILE__, __func__, delivery->address, userid);
@@ -328,69 +349,48 @@
 					delivery->dsn.subject = 1;	/* Address related. */
 					delivery->dsn.detail = 5;	/* Valid. */
 				}
-				break;
-			}
-			/* The address needs to be looked up */
-		default:
-			{
-				alias_count =
-				    auth_check_user_ext(delivery->address,
-							delivery->userids,
-							delivery->forwards, -1);
-				trace(TRACE_DEBUG,
-				      "%s, %s: user [%s] found total of [%d] aliases",
-				      __FILE__, __func__, delivery->address, alias_count);
-
-				/* No aliases found for this user */
-				if (alias_count == 0) {
-					trace(TRACE_INFO,
-					      "%s, %s: user [%s] checking for domain forwards.",
-					      __FILE__, __func__, delivery->address);
+			} else {	/* from: if (user_exists < 0) || if (user_exists == 1)... */
+				trace(TRACE_INFO,
+				      "%s, %s: user [%s] checking for domain forwards.",
+				      __FILE__, __func__, delivery->address);
+
+				domain = strchr(delivery->address, '@');
+
+				if (domain == NULL) {
+					/* That's it, we're done here. */
+					/* Permanent failure... */
+					delivery->dsn.class = DSN_CLASS_FAIL;	/* Permanent failure. */
+					delivery->dsn.subject = 1;	/* Address related. */
+					delivery->dsn.detail = 1;	/* Does not exist. */
+				} else {
+					trace(TRACE_DEBUG,
+					      "%s, %s: domain [%s] checking for domain forwards",
+					      __FILE__, __func__, domain);
 
-					domain = strchr(delivery->address, '@');
+					/* Checking for domain aliases */
+					domain_count =
+					    auth_check_user_ext(domain,
+					     delivery->userids,
+					     delivery->forwards, -1);
+					trace(TRACE_DEBUG,
+					      "%s, %s: domain [%s] found total of [%d] aliases",
+					      __FILE__, __func__, domain, domain_count);
 
-					if (domain == NULL) {
-						/* That's it, we're done here. */
+					if (domain_count == 0) {
 						/* Permanent failure... */
 						delivery->dsn.class = DSN_CLASS_FAIL;	/* Permanent failure. */
 						delivery->dsn.subject = 1;	/* Address related. */
 						delivery->dsn.detail = 1;	/* Does not exist. */
-					} else {
-						trace(TRACE_DEBUG,
-						      "%s, %s: domain [%s] checking for domain forwards",
-						      __FILE__, __func__, domain);
-
-						/* Checking for domain aliases */
-						domain_count =
-						    auth_check_user_ext(domain,
-						     delivery->userids,
-						     delivery->forwards, -1);
-						trace(TRACE_DEBUG,
-						      "%s, %s: domain [%s] found total of [%d] aliases",
-						      __FILE__, __func__, domain, domain_count);
-
-						if (domain_count == 0) {
-							/* Permanent failure... */
-							delivery->dsn.class = DSN_CLASS_FAIL;	/* Permanent failure. */
-							delivery->dsn.subject = 1;	/* Address related. */
-							delivery->dsn.detail = 1;	/* Does not exist. */
-						} else {	/* from: 'if (domain_count == 0)' */
-
-							/* The userid was valid... */
-							delivery->dsn.class = DSN_CLASS_OK;	/* Success. */
-							delivery->dsn.subject = 1;	/* Address related. */
-							delivery->dsn.detail = 5;	/* Valid. */
-						}	/* from: 'if (domain_count == 0)' */
-					}	/* from: 'if (domain == NULL)' */
-				} else {	/* from: 'if (alias_count == 0)' */
+					} else {	/* from: 'if (domain_count == 0)' */
 
-					/* The userid was valid... */
-					delivery->dsn.class = DSN_CLASS_OK;	/* Success. */
-					delivery->dsn.subject = 1;	/* Address related. */
-					delivery->dsn.detail = 5;	/* Valid. */
-				}	/* from: 'if (alias_count == 0)' */
-			}	/* from: 'default:' */
-		}	/* from: 'switch (auth_user_exists(delivery->address, &userid))' */
+						/* The userid was valid... */
+						delivery->dsn.class = DSN_CLASS_OK;	/* Success. */
+						delivery->dsn.subject = 1;	/* Address related. */
+						delivery->dsn.detail = 5;	/* Valid. */
+					}	/* from: 'if (domain_count == 0)' */
+				}	/* from: 'if (domain == NULL)' */
+			}	/* from: 'switch (auth_user_exists(delivery->address, &userid))' */
+		}	/* from: 'if (alias_count > 0) || else' */
 	}	/* from: 'if (delivery->useridnr != 0)' */
 
 	return 0;

Reply via email to