--- src/client.c 2006-05-30 11:03:51.000000000 -0400 +++ src/client.c.new 2006-11-02 15:32:34.000000000 -0500 @@ -56,6 +56,7 @@ #endif #include #include +#include #include "client.h" #include "dspam.h" @@ -819,6 +820,8 @@ code = client_getcode(&TTX, err, sizeof(err)); if (code < 200 || code >= 300) { LOG(LOG_ERR, ERR_CLIENT_RESPONSE, code, "message data", err); + if (code >= 400 && code < 500) + exitcode = EX_TEMPFAIL; if (code >= 500) exitcode = EINVAL; chomp(err); @@ -835,6 +838,9 @@ QUIT: send_socket(&TTX, "QUIT"); client_getcode(&TTX, err, sizeof(err)); + buffer_destroy(TTX.packet_buffer); + close(TTX.sockfd); + return exitcode; BAIL: LOG(LOG_ERR, ERR_CLIENT_DELIVERY_FAILED); --- src/dspam.c 2006-05-30 11:03:55.000000000 -0400 +++ src/dspam.c.new 2006-11-02 15:28:45.000000000 -0500 @@ -51,6 +51,7 @@ #include #include #include +#include #ifdef _WIN32 #include @@ -1994,11 +1995,11 @@ nt_add(ATX->results, presult); else free(presult); - LOGDEBUG ("DSPAM Instance Shutdown. Exit Code: %d", return_code); + LOGDEBUG ("DSPAM Instance Shutdown. Exit Code: %d", retcode); buffer_destroy(parse_message); } - return return_code; + return retcode; } // break // load_agg @@ -2321,8 +2321,8 @@ while (user != NULL) { - if (!strcmp (user, username) || user[0] == '*' || - (!strncmp(user, "*@", 2) && !strcmp(user+2, strchr(username,'@')))) + if (!strcmp (user, username) || (user[0] == '*' && strncmp(user, "*@", 2)) || + (!strncmp(user, "*@", 2) && !strcmp(user+1, strchr(username,'@')))) { /* If we're reporting a spam, report it as a spam to all other