You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@httpd.apache.org by so...@apache.org on 2006/01/05 19:36:18 UTC
svn commit: r366239 - in /httpd/mod_smtpd/trunk/src: smtp.h smtp_core.c
smtp_protocol.c
Author: soc-rian
Date: Thu Jan 5 10:36:15 2006
New Revision: 366239
URL: http://svn.apache.org/viewcvs?rev=366239&view=rev
Log:
Removed hash based mechanism for calling SMTP command handlers. Too
complicated for only calling nine or so functions. Also changed name of data
returned from hooks from in_data to out_data, because it's really out data.
Modified:
httpd/mod_smtpd/trunk/src/smtp.h
httpd/mod_smtpd/trunk/src/smtp_core.c
httpd/mod_smtpd/trunk/src/smtp_protocol.c
Modified: httpd/mod_smtpd/trunk/src/smtp.h
URL: http://svn.apache.org/viewcvs/httpd/mod_smtpd/trunk/src/smtp.h?rev=366239&r1=366238&r2=366239&view=diff
==============================================================================
--- httpd/mod_smtpd/trunk/src/smtp.h (original)
+++ httpd/mod_smtpd/trunk/src/smtp.h Thu Jan 5 10:36:15 2006
@@ -41,12 +41,6 @@
} smtpd_svr_config_rec;
typedef struct {
- smtpd_handler *func;
- const char *help_text;
- void *data;
-} smtpd_handler_st;
-
-typedef struct {
int headers_parsed;
smtpd_conn_rec *scr;
apreq_parser_t *rfc822_parser;
@@ -56,19 +50,6 @@
void smtpd_process_connection_internal(smtpd_conn_rec *str);
void smtpd_clear_trans_rec(smtpd_conn_rec *);
-
-apr_hash_t *smtpd_get_handlers(void);
-
-
-HANDLER_DECLARE(ehlo);
-HANDLER_DECLARE(helo);
-HANDLER_DECLARE(mail);
-HANDLER_DECLARE(rcpt);
-HANDLER_DECLARE(data);
-HANDLER_DECLARE(rset);
-HANDLER_DECLARE(noop);
-HANDLER_DECLARE(quit);
-HANDLER_DECLARE(vrfy);
#ifdef __cplusplus
}
Modified: httpd/mod_smtpd/trunk/src/smtp_core.c
URL: http://svn.apache.org/viewcvs/httpd/mod_smtpd/trunk/src/smtp_core.c?rev=366239&r1=366238&r2=366239&view=diff
==============================================================================
--- httpd/mod_smtpd/trunk/src/smtp_core.c (original)
+++ httpd/mod_smtpd/trunk/src/smtp_core.c Thu Jan 5 10:36:15 2006
@@ -42,7 +42,6 @@
ap_filter_rec_t *smtpd_data_input_filter_handle;
ap_filter_rec_t *smtpd_header_input_filter_handle;
-static apr_hash_t *smtpd_handlers;
APR_HOOK_STRUCT(
APR_HOOK_LINK(unrecognized_command)
@@ -142,11 +141,6 @@
(scr),
SMTPD_OK, SMTPD_DECLINED);
-apr_hash_t *smtpd_get_handlers()
-{
- return smtpd_handlers;
-}
-
void smtpd_clear_trans_rec(smtpd_conn_rec *scr)
{
smtpd_trans_rec *str = scr->transaction;
@@ -165,22 +159,6 @@
/* private methods */
/* only used in this file */
-/* can overwrite currently registered handlers */
-static void smtpd_register_handler(char *key, smtpd_handler *func,
- const char *help_text, void *data,
- apr_pool_t *p)
-{
- char *dupkey = apr_pstrdup(p, key);
- smtpd_handler_st *hand = apr_palloc(p, sizeof(*hand));
-
- hand->func = func;
- hand->data = data;
- hand->help_text = help_text;
-
- ap_str_tolower(dupkey);
- apr_hash_set(smtpd_handlers, dupkey, APR_HASH_KEY_STRING, hand);
-}
-
/* Creates the main request record for the connection */
static smtpd_conn_rec *smtpd_create_conn_rec(conn_rec *conn)
{
@@ -308,18 +286,12 @@
smtpd_header_input_filter_handle =
ap_register_input_filter("SMTP_HEADER_IN", smtpd_header_filter,
NULL, AP_FTYPE_PROTOCOL);
-
- smtpd_handlers = apr_hash_make(p);
-
- smtpd_register_handler("EHLO", HANDLER_FUNC(ehlo), "ehlo", NULL, p);
- smtpd_register_handler("HELO", HANDLER_FUNC(helo), "helo", NULL, p);
- smtpd_register_handler("MAIL", HANDLER_FUNC(mail), "mail", NULL, p);
- smtpd_register_handler("RCPT", HANDLER_FUNC(rcpt), "rcpt", NULL, p);
- smtpd_register_handler("DATA", HANDLER_FUNC(data), "data", NULL, p);
- smtpd_register_handler("RSET", HANDLER_FUNC(rset), "rset", NULL, p);
- smtpd_register_handler("NOOP", HANDLER_FUNC(noop), "noop", NULL, p);
- smtpd_register_handler("QUIT", HANDLER_FUNC(quit), "quit", NULL, p);
- smtpd_register_handler("VRFY", HANDLER_FUNC(vrfy), "vrfy", NULL, p);
+
+ /* XXX: implement a global (mod_smtpd wise) limit structure
+ for string limits */
+ /* XXX: implement a global (mod_smtpd wise) timeout structure */
+ /* modules can register their limit extensions, command help,
+ and extensions here */
}
module AP_MODULE_DECLARE_DATA smtpd_module = {
Modified: httpd/mod_smtpd/trunk/src/smtp_protocol.c
URL: http://svn.apache.org/viewcvs/httpd/mod_smtpd/trunk/src/smtp_protocol.c?rev=366239&r1=366238&r2=366239&view=diff
==============================================================================
--- httpd/mod_smtpd/trunk/src/smtp_protocol.c (original)
+++ httpd/mod_smtpd/trunk/src/smtp_protocol.c Thu Jan 5 10:36:15 2006
@@ -41,34 +41,49 @@
extern ap_filter_rec_t *smtpd_data_input_filter_handle;
extern ap_filter_rec_t *smtpd_header_input_filter_handle;
+/* these functions are all inlined and static because they
+ are only called from one location and only in this file */
inline static int smtpd_handle_unrecognized_command(smtpd_conn_rec *scr,
smtpd_return_data *in_data,
char *command, char *data);
+inline static int smtpd_handler_ehlo(smtpd_conn_rec *scr, char *buffer,
+ smtpd_return_data *out_data);
+inline static int smtpd_handler_helo(smtpd_conn_rec *scr, char *buffer,
+ smtpd_return_data *out_data);
+inline static int smtpd_handler_mail(smtpd_conn_rec *scr, char *buffer,
+ smtpd_return_data *out_data);
+inline static int smtpd_handler_rcpt(smtpd_conn_rec *scr, char *buffer,
+ smtpd_return_data *out_data);
+inline static int smtpd_handler_data(smtpd_conn_rec *scr, char *buffer,
+ smtpd_return_data *out_data);
+inline static int smtpd_handler_rset(smtpd_conn_rec *scr, char *buffer,
+ smtpd_return_data *out_data);
+inline static int smtpd_handler_quit(smtpd_conn_rec *scr, char *buffer,
+ smtpd_return_data *out_data);
+
#define BUFFER_STR_LEN 1024
void smtpd_process_connection_internal(smtpd_conn_rec *scr)
{
- apr_pool_t *p;
- apr_hash_t *handlers = smtpd_get_handlers();
+ apr_pool_t *per_command_pool;
char cmdbuff[BUFFER_STR_LEN];
- smtpd_handler_st *handle_func;
char *buffer = cmdbuff;
char *command;
- smtpd_return_data in_data;
+ smtpd_return_data out_data;
smtpd_svr_config_rec *pConfig =
- ap_get_module_config(scr->s->module_config,
- &smtpd_module);
+ ap_get_module_config(scr->s->module_config,
+ &smtpd_module);
- apr_pool_create(&p, scr->p);
- in_data.p = p;
+ apr_pool_create(&per_command_pool, scr->p);
+ out_data.p = per_command_pool;
- in_data.msgs = NULL;
- switch(smtpd_run_connect(scr, &in_data)) {
+ out_data.msgs = NULL;
+ switch(smtpd_run_connect(scr, &out_data)) {
case SMTPD_DENY:
ap_log_error(APLOG_MARK, APLOG_NOTICE, 0, scr->s,
"Connection Denied");
- if (in_data.msgs) {
- smtpd_respond_multiline(scr, 550, in_data.msgs);
+ if (out_data.msgs) {
+ smtpd_respond_multiline(scr, 550, out_data.msgs);
}
else {
smtpd_respond_oneline(scr, 550,
@@ -78,8 +93,8 @@
case SMTPD_DENYSOFT:
ap_log_error(APLOG_MARK, APLOG_NOTICE, 0, scr->s,
"Connection Denied");
- if (in_data.msgs) {
- smtpd_respond_multiline(scr, 450, in_data.msgs);
+ if (out_data.msgs) {
+ smtpd_respond_multiline(scr, 450, out_data.msgs);
}
else {
smtpd_respond_oneline(scr, 450, "Connection from you temporarily "
@@ -98,23 +113,47 @@
}
while (smtpd_getline(scr, buffer, BUFFER_STR_LEN, NULL) == APR_SUCCESS) {
- apr_pool_clear(p);
- command = ap_getword_white_nc(p, &buffer);
+ int return_code;
+ apr_pool_clear(per_command_pool);
+ command = ap_getword_white_nc(per_command_pool, &buffer);
ap_str_tolower(command);
- handle_func = apr_hash_get(handlers, command, APR_HASH_KEY_STRING);
-
- in_data.msgs = NULL;
- /* command not recognized */
- if (!handle_func) {
- if (!smtpd_handle_unrecognized_command(scr, &in_data, command,
- buffer))
- break;
+
+ out_data.msgs = NULL;
+
+ if (ap_strcmp_match("ehlo", command) == 0) {
+ return_code = smtpd_handler_ehlo(scr, buffer, &out_data);
}
- else {
- if (!handle_func->func(scr, buffer, &in_data, handle_func->data))
- break;
+ else if (ap_strcmp_match("helo", command) == 0) {
+ return_code = smtpd_handler_helo(scr, buffer, &out_data);
+ }
+ else if (ap_strcmp_match("mail", command) == 0) {
+ return_code = smtpd_handler_mail(scr, buffer, &out_data);
+ }
+ else if (ap_strcmp_match("rcpt", command) == 0) {
+ return_code = smtpd_handler_rcpt(scr, buffer, &out_data);
+ }
+ else if (ap_strcmp_match("data", command) == 0) {
+ return_code = smtpd_handler_data(scr, buffer, &out_data);
+ }
+ else if (ap_strcmp_match("rset", command) == 0) {
+ return_code = smtpd_handler_rset(scr, buffer, &out_data);
+ }
+ else if (ap_strcmp_match("noop", command) == 0) {
+ smtpd_respond_oneline(scr, 250, "Ok");
+ return_code = 250;
+ }
+ else if (ap_strcmp_match("quit", command) == 0) {
+ return_code = smtpd_handler_quit(scr, buffer, &out_data);
+
+ } else {
+ return_code =
+ smtpd_handle_unrecognized_command(scr,&out_data, command,
+ buffer);
}
+ if (!return_code)
+ break;
+
buffer = cmdbuff;
}
@@ -123,13 +162,14 @@
}
inline static int smtpd_handle_unrecognized_command(smtpd_conn_rec *scr,
- smtpd_return_data *in_data,
+ smtpd_return_data
+ *out_data,
char *command, char *data)
{
- switch(smtpd_run_unrecognized_command(scr, in_data, command, data)) {
+ switch(smtpd_run_unrecognized_command(scr, out_data, command, data)) {
case SMTPD_DENY:
- if (in_data->msgs) {
- smtpd_respond_multiline(scr, 521, in_data->msgs);
+ if (out_data->msgs) {
+ smtpd_respond_multiline(scr, 521, out_data->msgs);
}
else {
smtpd_respond_oneline(scr, 521, "Command Denied");
@@ -146,7 +186,8 @@
}
-HANDLER_DECLARE(ehlo)
+inline static int smtpd_handler_ehlo(smtpd_conn_rec *scr, char *buffer,
+ smtpd_return_data *out_data)
{
smtpd_trans_rec *str = scr->transaction;
@@ -155,22 +196,22 @@
return 501;
}
- switch(smtpd_run_ehlo(scr, in_data, buffer)) {
+ switch(smtpd_run_ehlo(scr, out_data, buffer)) {
case SMTPD_DONE:
return 1;
case SMTPD_DONE_DISCONNECT:
return 0;
case SMTPD_DENY:
- if (in_data->msgs) {
- smtpd_respond_multiline(scr, 550, in_data->msgs);
+ if (out_data->msgs) {
+ smtpd_respond_multiline(scr, 550, out_data->msgs);
}
else {
smtpd_respond_oneline(scr, 550, "");
}
return 550;
case SMTPD_DENYSOFT:
- if (in_data->msgs) {
- smtpd_respond_multiline(scr, 450, in_data->msgs);
+ if (out_data->msgs) {
+ smtpd_respond_multiline(scr, 450, out_data->msgs);
}
else {
smtpd_respond_oneline(scr, 450, "");
@@ -209,7 +250,8 @@
return 250;
}
-HANDLER_DECLARE(helo)
+inline static int smtpd_handler_helo(smtpd_conn_rec *scr, char *buffer,
+ smtpd_return_data *out_data)
{
smtpd_trans_rec *str = scr->transaction;
@@ -219,22 +261,22 @@
return 501;
}
- switch(smtpd_run_helo(scr, in_data, buffer)) {
+ switch(smtpd_run_helo(scr, out_data, buffer)) {
case SMTPD_DONE:
return 1;
case SMTPD_DONE_DISCONNECT:
return 0;
case SMTPD_DENY:
- if (in_data->msgs) {
- smtpd_respond_multiline(scr, 550, in_data->msgs);
+ if (out_data->msgs) {
+ smtpd_respond_multiline(scr, 550, out_data->msgs);
}
else {
smtpd_respond_oneline(scr, 550, "");
}
return 550;
case SMTPD_DENYSOFT:
- if (in_data->msgs) {
- smtpd_respond_multiline(scr, 450, in_data->msgs);
+ if (out_data->msgs) {
+ smtpd_respond_multiline(scr, 450, out_data->msgs);
}
else {
smtpd_respond_oneline(scr, 450, "");
@@ -255,7 +297,8 @@
return 250;
}
-HANDLER_DECLARE(mail)
+inline static int smtpd_handler_mail(smtpd_conn_rec *scr, char *buffer,
+ smtpd_return_data *out_data)
{
smtpd_trans_rec *str = scr->transaction;
char *loc;
@@ -289,7 +332,7 @@
}
}
- switch(smtpd_run_mail(scr, in_data, loc)) {
+ switch(smtpd_run_mail(scr, out_data, loc)) {
case SMTPD_DONE:
return 1;
case SMTPD_DONE_DISCONNECT:
@@ -298,9 +341,9 @@
case SMTPD_DENY:
ap_log_error(APLOG_MARK, APLOG_NOTICE, 0, scr->s,
"deny mail from %s (%s)", loc,
- in_data->msgs ? ((char **)in_data->msgs->elts)[0] : "");
- if (in_data->msgs) {
- smtpd_respond_multiline(scr, 550, in_data->msgs);
+ out_data->msgs ? ((char **)out_data->msgs->elts)[0] : "");
+ if (out_data->msgs) {
+ smtpd_respond_multiline(scr, 550, out_data->msgs);
}
else {
smtpd_respond_oneline(scr, 550, "denied");
@@ -309,9 +352,9 @@
case SMTPD_DENYSOFT:
ap_log_error(APLOG_MARK, APLOG_NOTICE, 0, scr->s,
"denysoft mail from %s (%s)", loc,
- in_data->msgs ? ((char **)in_data->msgs->elts)[0] : "");
- if (in_data->msgs) {
- smtpd_respond_multiline(scr, 450, in_data->msgs);
+ out_data->msgs ? ((char **)out_data->msgs->elts)[0] : "");
+ if (out_data->msgs) {
+ smtpd_respond_multiline(scr, 450, out_data->msgs);
}
else {
smtpd_respond_oneline(scr, 450, "temporarily denied");
@@ -320,9 +363,9 @@
case SMTPD_DENY_DISCONNECT:
ap_log_error(APLOG_MARK, APLOG_NOTICE, 0, scr->s,
"deny mail from %s (%s)", loc,
- in_data->msgs ? ((char **)in_data->msgs->elts)[0] : "");
- if (in_data->msgs) {
- smtpd_respond_multiline(scr, 550, in_data->msgs);
+ out_data->msgs ? ((char **)out_data->msgs->elts)[0] : "");
+ if (out_data->msgs) {
+ smtpd_respond_multiline(scr, 550, out_data->msgs);
}
else {
smtpd_respond_oneline(scr, 550, "denied");
@@ -332,9 +375,9 @@
case SMTPD_DENYSOFT_DISCONNECT:
ap_log_error(APLOG_MARK, APLOG_NOTICE, 0, scr->s,
"denysoft mail from %s (%s)", loc,
- in_data->msgs ? ((char **)in_data->msgs->elts)[0] : "");
- if (in_data->msgs) {
- smtpd_respond_multiline(scr, 450, in_data->msgs);
+ out_data->msgs ? ((char **)out_data->msgs->elts)[0] : "");
+ if (out_data->msgs) {
+ smtpd_respond_multiline(scr, 450, out_data->msgs);
}
else {
smtpd_respond_oneline(scr, 450, "temporarily denied");
@@ -353,7 +396,8 @@
return 250;
}
-HANDLER_DECLARE(rcpt)
+inline static int smtpd_handler_rcpt(smtpd_conn_rec *scr, char *buffer,
+ smtpd_return_data *out_data)
{
smtpd_trans_rec *str = scr->transaction;
char *loc;
@@ -386,22 +430,22 @@
}
}
- switch(smtpd_run_rcpt(scr, in_data, loc)) {
+ switch(smtpd_run_rcpt(scr, out_data, loc)) {
case SMTPD_DONE:
return 1;
case SMTPD_DONE_DISCONNECT:
return 0;
case SMTPD_DENY:
- if (in_data->msgs) {
- smtpd_respond_multiline(scr, 550, in_data->msgs);
+ if (out_data->msgs) {
+ smtpd_respond_multiline(scr, 550, out_data->msgs);
}
else {
smtpd_respond_oneline(scr, 550, "relaying denied");
}
return 550;
case SMTPD_DENYSOFT:
- if (in_data->msgs) {
- smtpd_respond_multiline(scr, 450, in_data->msgs);
+ if (out_data->msgs) {
+ smtpd_respond_multiline(scr, 450, out_data->msgs);
}
else {
smtpd_respond_oneline(scr, 450, "relaying temporarily denied");
@@ -410,9 +454,9 @@
case SMTPD_DENY_DISCONNECT:
ap_log_error(APLOG_MARK, APLOG_NOTICE, 0, scr->s,
"delivery denied (%s)",
- in_data->msgs ? ((char **)in_data->msgs->elts)[0] : "");
- if (in_data->msgs) {
- smtpd_respond_multiline(scr, 550, in_data->msgs);
+ out_data->msgs ? ((char **)out_data->msgs->elts)[0] : "");
+ if (out_data->msgs) {
+ smtpd_respond_multiline(scr, 550, out_data->msgs);
}
else {
smtpd_respond_oneline(scr, 550, "relaying denied");
@@ -421,9 +465,9 @@
case SMTPD_DENYSOFT_DISCONNECT:
ap_log_error(APLOG_MARK, APLOG_NOTICE, 0, scr->s,
"delivery denied (%s)",
- in_data->msgs ? ((char **)in_data->msgs->elts)[0] : "");
- if (in_data->msgs) {
- smtpd_respond_multiline(scr, 450, in_data->msgs);
+ out_data->msgs ? ((char **)out_data->msgs->elts)[0] : "");
+ if (out_data->msgs) {
+ smtpd_respond_multiline(scr, 450, out_data->msgs);
}
else {
smtpd_respond_oneline(scr, 450, "relaying temporarily denied");
@@ -446,40 +490,40 @@
}
-inline static int smtpd_queue(smtpd_conn_rec *scr, smtpd_return_data *in_data)
+inline static int smtpd_queue(smtpd_conn_rec *scr, smtpd_return_data *out_data)
{
- switch(smtpd_run_queue(scr, in_data)) {
+ switch(smtpd_run_queue(scr, out_data)) {
case SMTPD_DONE:
return 1;
case SMTPD_DONE_DISCONNECT:
return 0;
case SMTPD_OK:
- if (in_data->msgs) {
- smtpd_respond_multiline(scr, 250, in_data->msgs);
+ if (out_data->msgs) {
+ smtpd_respond_multiline(scr, 250, out_data->msgs);
}
else {
smtpd_respond_oneline(scr, 250, "Queued");
}
return 250;
case SMTPD_DENY:
- if (in_data->msgs) {
- smtpd_respond_multiline(scr, 552, in_data->msgs);
+ if (out_data->msgs) {
+ smtpd_respond_multiline(scr, 552, out_data->msgs);
}
else {
smtpd_respond_oneline(scr, 552, "Message denied");
}
return 552;
case SMTPD_DENYSOFT:
- if (in_data->msgs) {
- smtpd_respond_multiline(scr, 452, in_data->msgs);
+ if (out_data->msgs) {
+ smtpd_respond_multiline(scr, 452, out_data->msgs);
}
else {
smtpd_respond_oneline(scr, 452, "Message denied temporarily");
}
return 452;
default:
- if (in_data->msgs) {
- smtpd_respond_multiline(scr, 451, in_data->msgs);
+ if (out_data->msgs) {
+ smtpd_respond_multiline(scr, 451, out_data->msgs);
}
else {
smtpd_respond_oneline(scr, 451,
@@ -490,12 +534,13 @@
}
}
-HANDLER_DECLARE(data)
+inline static int smtpd_handler_data(smtpd_conn_rec *scr, char *buffer,
+ smtpd_return_data *out_data)
{
smtpd_trans_rec *str = scr->transaction;
smtpd_svr_config_rec *pConfig =
- ap_get_module_config(scr->s->module_config,
- &smtpd_module);
+ ap_get_module_config(scr->s->module_config,
+ &smtpd_module);
smtpd_header_filter_ctx header_ctx = {0, scr, NULL, NULL};
int rv, retval = 0;
char *tempfile;
@@ -505,7 +550,7 @@
apr_bucket_brigade *bb;
apr_bucket *e;
- switch(smtpd_run_data(scr, in_data)) {
+ switch(smtpd_run_data(scr, out_data)) {
case SMTPD_DONE:
return 1;
case SMTPD_DONE_DISCONNECT:
@@ -513,8 +558,8 @@
case SMTPD_DENY:
/* REVIEW: should we reset state here? */
/* smtpd_clear_request_rec(sr); */
- if (in_data->msgs) {
- smtpd_respond_multiline(scr, 554, in_data->msgs);
+ if (out_data->msgs) {
+ smtpd_respond_multiline(scr, 554, out_data->msgs);
}
else {
smtpd_respond_oneline(scr, 554, "Message denied");
@@ -523,24 +568,24 @@
case SMTPD_DENYSOFT:
/* REVIEW: should we reset state here? */
/* smtpd_clear_request_rec(sr); */
- if (in_data->msgs) {
- smtpd_respond_multiline(scr, 451, in_data->msgs);
+ if (out_data->msgs) {
+ smtpd_respond_multiline(scr, 451, out_data->msgs);
}
else {
smtpd_respond_oneline(scr, 451, "Message denied temporarily");
}
return 451;
case SMTPD_DENY_DISCONNECT:
- if (in_data->msgs) {
- smtpd_respond_multiline(scr, 554, in_data->msgs);
+ if (out_data->msgs) {
+ smtpd_respond_multiline(scr, 554, out_data->msgs);
}
else {
smtpd_respond_oneline(scr, 554, "Message denied");
}
return 0;
case SMTPD_DENYSOFT_DISCONNECT:
- if (in_data->msgs) {
- smtpd_respond_multiline(scr, 451, in_data->msgs);
+ if (out_data->msgs) {
+ smtpd_respond_multiline(scr, 451, out_data->msgs);
}
else {
smtpd_respond_oneline(scr, 451, "Message denied temporarily");
@@ -625,13 +670,13 @@
/*
XXX: Qpsmtpd code to add the Received Header, will get refactored
$header->add("Received", "from ".$self->connection->remote_info
- ." (HELO ".$self->connection->hello_host . ") (".$self->connection->remote_ip
- . ")\n $authheader by ".$self->config('me')." (qpsmtpd/".$self->version
- .") with $smtp; ". (strftime('%a, %d %b %Y %H:%M:%S %z', localtime)),
- 0);
+ ." (HELO ".$self->connection->hello_host . ") (".$self->connection->remote_ip
+ . ")\n $authheader by ".$self->config('me')." (qpsmtpd/".$self->version
+ .") with $smtp; ". (strftime('%a, %d %b %Y %H:%M:%S %z', localtime)),
+ 0);
*/
- switch(smtpd_run_data_post(scr, in_data)) {
+ switch(smtpd_run_data_post(scr, out_data)) {
case SMTPD_DONE:
retval = 1;
goto cleanup;
@@ -640,8 +685,8 @@
goto cleanup;
case SMTPD_DENY:
retval = 552;
- if (in_data->msgs) {
- smtpd_respond_multiline(scr, 552, in_data->msgs);
+ if (out_data->msgs) {
+ smtpd_respond_multiline(scr, 552, out_data->msgs);
}
else {
smtpd_respond_oneline(scr, 552, "Message denied");
@@ -649,15 +694,15 @@
break;
case SMTPD_DENYSOFT:
retval = 452;
- if (in_data->msgs) {
- smtpd_respond_multiline(scr, 452, in_data->msgs);
+ if (out_data->msgs) {
+ smtpd_respond_multiline(scr, 452, out_data->msgs);
}
else {
smtpd_respond_oneline(scr, 452, "Message denied temporarily");
}
break;
default:
- retval = smtpd_queue(scr, in_data);
+ retval = smtpd_queue(scr, out_data);
}
smtpd_reset_transaction(scr);
@@ -667,7 +712,8 @@
return retval;
}
-HANDLER_DECLARE(rset)
+inline static int smtpd_handler_rset(smtpd_conn_rec *scr, char *buffer,
+ smtpd_return_data *out_data)
{
smtpd_reset_transaction(scr);
smtpd_respond_oneline(scr, 250, "Ok");
@@ -675,48 +721,43 @@
return 250;
}
-HANDLER_DECLARE(noop)
-{
- smtpd_respond_oneline(scr, 250, "Ok");
-
- return 250;
-}
-
-HANDLER_DECLARE(quit)
+inline static int smtpd_handler_quit(smtpd_conn_rec *scr, char *buffer,
+ smtpd_return_data *out_data)
{
- if (smtpd_run_quit(scr, in_data) != SMTPD_DONE) {
+ if (smtpd_run_quit(scr, out_data) != SMTPD_DONE) {
smtpd_respond_oneline(scr, 221, "Bye");
}
/* zero to disconnect */
return 0;
}
-HANDLER_DECLARE(vrfy)
+inline static int smtpd_handler_vrfy(smtpd_conn_rec *scr, char *buffer,
+ smtpd_return_data *out_data)
{
- switch(smtpd_run_vrfy(scr, in_data, buffer)) {
+ switch(smtpd_run_vrfy(scr, out_data, buffer)) {
case SMTPD_DONE:
return 1;
case SMTPD_DONE_DISCONNECT:
return 0;
case SMTPD_DENY:
- if (in_data->msgs) {
- smtpd_respond_multiline(scr, 554, in_data->msgs);
+ if (out_data->msgs) {
+ smtpd_respond_multiline(scr, 554, out_data->msgs);
}
else {
smtpd_respond_oneline(scr, 554, "Address denied");
}
return 554;
case SMTPD_OK: /* user is okay */
- if (in_data->msgs) {
- smtpd_respond_multiline(scr, 250, in_data->msgs);
+ if (out_data->msgs) {
+ smtpd_respond_multiline(scr, 250, out_data->msgs);
}
else {
smtpd_respond_oneline(scr, 250, "Address okay");
}
return 250;
default:
- if (in_data->msgs) {
- smtpd_respond_multiline(scr, 252, in_data->msgs);
+ if (out_data->msgs) {
+ smtpd_respond_multiline(scr, 252, out_data->msgs);
}
else {
smtpd_respond_oneline(scr, 252,