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/17 19:56:46 UTC
svn commit: r369864 - in /httpd/mod_smtpd/trunk:
modules/rcpt/ok/mod_smtpd_rcpt_ok.c src/mod_smtpd.h src/smtp_core.c
src/smtp_protocol.c
Author: soc-rian
Date: Tue Jan 17 10:56:43 2006
New Revision: 369864
URL: http://svn.apache.org/viewcvs?rev=369864&view=rev
Log:
Made the "helo" string part of the connection structure. Made vrfy
check its syntax using a compiled regex (like the previous changes).
Converted mod_smtpd_rcpt_ok to conform to the current mod_smtpd.
Modified:
httpd/mod_smtpd/trunk/modules/rcpt/ok/mod_smtpd_rcpt_ok.c
httpd/mod_smtpd/trunk/src/mod_smtpd.h
httpd/mod_smtpd/trunk/src/smtp_core.c
httpd/mod_smtpd/trunk/src/smtp_protocol.c
Modified: httpd/mod_smtpd/trunk/modules/rcpt/ok/mod_smtpd_rcpt_ok.c
URL: http://svn.apache.org/viewcvs/httpd/mod_smtpd/trunk/modules/rcpt/ok/mod_smtpd_rcpt_ok.c?rev=369864&r1=369863&r2=369864&view=diff
==============================================================================
--- httpd/mod_smtpd/trunk/modules/rcpt/ok/mod_smtpd_rcpt_ok.c (original)
+++ httpd/mod_smtpd/trunk/modules/rcpt/ok/mod_smtpd_rcpt_ok.c Tue Jan 17 10:56:43 2006
@@ -1,5 +1,6 @@
#include "httpd.h"
#include "http_config.h"
+#include "apr_tables.h"
#include "mod_smtpd.h"
@@ -10,7 +11,7 @@
module AP_MODULE_DECLARE_DATA smtpd_rcpt_ok_module;
static smtpd_retcode default_rcpt(smtpd_conn_rec *scr, smtpd_return_data *out,
- char *address)
+ char *address, apr_table_t *rcpt_param)
{
rcpt_ok_config *pConfig =
ap_get_module_config(scr->s->module_config,
@@ -49,7 +50,7 @@
// registers httpd hooks
static void register_hooks (apr_pool_t *p)
{
- APR_OPTIONAL_HOOK(smtpd, rcpt, default_rcpt, NULL, NULL, APR_HOOK_LAST);
+ smtpd_hook_rcpt(default_rcpt, NULL, NULL, APR_HOOK_LAST);
}
module AP_MODULE_DECLARE_DATA smtpd_rcpt_ok_module = {
Modified: httpd/mod_smtpd/trunk/src/mod_smtpd.h
URL: http://svn.apache.org/viewcvs/httpd/mod_smtpd/trunk/src/mod_smtpd.h?rev=369864&r1=369863&r2=369864&view=diff
==============================================================================
--- httpd/mod_smtpd/trunk/src/mod_smtpd.h (original)
+++ httpd/mod_smtpd/trunk/src/mod_smtpd.h Tue Jan 17 10:56:43 2006
@@ -61,7 +61,6 @@
typedef enum {
SMTPD_STATE_GOT_NOTHING,
- SMTPD_STATE_GOT_HELO,
SMTPD_STATE_GOT_MAIL,
SMTPD_STATE_GOT_RCPT
} smtpd_trans_state;
@@ -87,13 +86,6 @@
/* where are we in the current transaction */
smtpd_trans_state trans_state;
-
- /* is this esmtp or smtp */
- /* by default smtp */
- smtpd_protocol_type protocol_type;
-
- /* hostname we were helo'd with */
- char *helo;
/* string of who this mail is from */
char *mail_from;
@@ -127,6 +119,13 @@
/* extensions registered with this connection */
apr_array_header_t *extensions;
+
+ /* is this esmtp or smtp */
+ /* by default smtp */
+ smtpd_protocol_type protocol_type;
+
+ /* hostname we were helo'd with */
+ char *helo;
/* current transaction */
smtpd_trans_rec *transaction;
Modified: httpd/mod_smtpd/trunk/src/smtp_core.c
URL: http://svn.apache.org/viewcvs/httpd/mod_smtpd/trunk/src/smtp_core.c?rev=369864&r1=369863&r2=369864&view=diff
==============================================================================
--- httpd/mod_smtpd/trunk/src/smtp_core.c (original)
+++ httpd/mod_smtpd/trunk/src/smtp_core.c Tue Jan 17 10:56:43 2006
@@ -45,6 +45,7 @@
ap_regex_t *ehlo_compiled_regex;
ap_regex_t *mail_compiled_regex;
ap_regex_t *rcpt_compiled_regex;
+ap_regex_t *vrfy_compiled_regex;
void smtpd_clear_trans_rec(smtpd_conn_rec *scr)
{
@@ -53,10 +54,8 @@
str->trans_state = SMTPD_STATE_GOT_NOTHING;
str->tfp = NULL;
str->body_offset = 0;
- str->protocol_type = SMTPD_PROTOCOL_SMTP;
str->rcpt_to = apr_array_make(str->p, 5, sizeof(char *));
str->mail_from = NULL;
- str->helo = NULL;
str->headers = apr_table_make(str->p, 5);
str->mail_parameters = apr_table_make(str->p, 5);
str->rcpt_parameters = apr_table_make(str->p, 5);
@@ -115,10 +114,13 @@
"([-[:alnum:]]*[[:alnum:]]:(([^\\[\\]\\\\])|"
"(\\\\.))+))"
"$";
+ const char *vrfy_syntax = "^(([-[:alnum:]!#$%&'*+/=?^_`{}|~]+)|"
+ "(\".*[^\\\\]\"))$";
ehlo_compiled_regex = ap_pregcomp(p, ehlo_syntax, AP_REG_EXTENDED);
mail_compiled_regex = ap_pregcomp(p, mail_syntax, AP_REG_EXTENDED);
rcpt_compiled_regex = ap_pregcomp(p, rcpt_syntax, AP_REG_EXTENDED);
+ vrfy_compiled_regex = ap_pregcomp(p, vrfy_syntax, AP_REG_EXTENDED);
}
/* Creates the main request record for the connection */
@@ -139,6 +141,9 @@
scr->bb_in = apr_brigade_create(scr->p, scr->c->bucket_alloc);
scr->bb_out = apr_brigade_create(scr->p, scr->c->bucket_alloc);
+
+ scr->protocol_type = SMTPD_PROTOCOL_SMTP;
+ scr->helo = apr_palloc(scr->p, 256);
/* create transaction rec */
str = apr_pcalloc(scr->p, sizeof(*str));
Modified: httpd/mod_smtpd/trunk/src/smtp_protocol.c
URL: http://svn.apache.org/viewcvs/httpd/mod_smtpd/trunk/src/smtp_protocol.c?rev=369864&r1=369863&r2=369864&view=diff
==============================================================================
--- httpd/mod_smtpd/trunk/src/smtp_protocol.c (original)
+++ httpd/mod_smtpd/trunk/src/smtp_protocol.c Tue Jan 17 10:56:43 2006
@@ -44,6 +44,7 @@
extern ap_regex_t *ehlo_compiled_regex;
extern ap_regex_t *mail_compiled_regex;
extern ap_regex_t *rcpt_compiled_regex;
+extern ap_regex_t *vrfy_compiled_regex;
static int smtpd_handle_unrecognized_command(smtpd_conn_rec *scr,
smtpd_return_data *in_data,
@@ -119,7 +120,6 @@
int return_code;
apr_pool_clear(per_command_pool);
command = buffer;
-
buffer = ap_strchr(buffer, ' ');
if (buffer != NULL) {
@@ -203,7 +203,6 @@
static int smtpd_handler_ehlo(smtpd_conn_rec *scr, char *buffer,
smtpd_return_data *out_data)
{
- smtpd_trans_rec *str = scr->transaction;
int error;
if (buffer == NULL) {
@@ -249,24 +248,24 @@
/* state */
smtpd_reset_transaction(scr);
- str->helo = apr_pstrdup(str->p, buffer);
- str->trans_state = SMTPD_STATE_GOT_HELO;
- str->protocol_type = SMTPD_PROTOCOL_ESMTP;
+ strncpy(scr->helo, buffer, 255);
+ scr->helo[255] = '\0';
+ scr->protocol_type = SMTPD_PROTOCOL_ESMTP;
if (scr->extensions->nelts) {
apr_pool_t *p;
apr_array_header_t *first;
- apr_pool_create(&p, str->p);
+ apr_pool_create(&p, scr->p);
first = apr_array_make(p, 1, sizeof(char *));
- (*((char **)apr_array_push(first))) = str->helo;
+ (*((char **)apr_array_push(first))) = scr->helo;
apr_array_cat(first, scr->extensions);
smtpd_respond_multiline(scr, 250, first);
apr_pool_destroy(p);
}
else {
- smtpd_respond_oneline(scr, 250, str->helo);
+ smtpd_respond_oneline(scr, 250, scr->helo);
}
return 250;
@@ -275,7 +274,6 @@
static int smtpd_handler_helo(smtpd_conn_rec *scr, char *buffer,
smtpd_return_data *out_data)
{
- smtpd_trans_rec *str = scr->transaction;
int error;
if (buffer == NULL) {
@@ -319,10 +317,11 @@
/* state */
smtpd_reset_transaction(scr);
- str->helo = apr_pstrdup(str->p, buffer);
- str->trans_state = SMTPD_STATE_GOT_HELO;
- smtpd_respond_oneline(scr, 250, str->helo);
-
+ strncpy(scr->helo, buffer, 255);
+ scr->helo[255] = '\0';
+ scr->protocol_type = SMTPD_PROTOCOL_SMTP;
+
+ smtpd_respond_oneline(scr, 250, scr->helo);
return 250;
}
@@ -829,23 +828,13 @@
static int smtpd_handler_vrfy(smtpd_conn_rec *scr, char *buffer,
smtpd_return_data *out_data)
{
- const char *vrfy_syntax = "^(([-[:alnum:]!#$%&'*+/=?^_`{}|~]+)|"
- "(\".*[^\\\\]\"))$";
- ap_regex_t *compiled;
int error;
if (buffer == NULL) {
goto syntax_error;
}
- compiled = ap_pregcomp(out_data->p, vrfy_syntax, AP_REG_EXTENDED);
- if (!compiled) {
- smtpd_respond_oneline(scr, 421, "Error: Internal");
- return SMTPD_DONE_DISCONNECT;
- }
-
- error = ap_regexec(compiled, buffer, 0, NULL, 0);
- ap_pregfree(out_data->p, compiled);
+ error = ap_regexec(vrfy_compiled_regex, buffer, 0, NULL, 0);
if (error) {
syntax_error: