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 2005/08/31 19:01:46 UTC
svn commit: r265531 - in /httpd/mod_smtpd/trunk: Makefile.in mod_smtpd.h
smtp_core.c smtp_util.c
Author: soc-rian
Date: Wed Aug 31 10:01:42 2005
New Revision: 265531
URL: http://svn.apache.org/viewcvs?rev=265531&view=rev
Log:
took exported functions out of smtp_core.c and put them in smtp_util.c
Added:
httpd/mod_smtpd/trunk/smtp_util.c
Modified:
httpd/mod_smtpd/trunk/Makefile.in
httpd/mod_smtpd/trunk/mod_smtpd.h
httpd/mod_smtpd/trunk/smtp_core.c
Modified: httpd/mod_smtpd/trunk/Makefile.in
URL: http://svn.apache.org/viewcvs/httpd/mod_smtpd/trunk/Makefile.in?rev=265531&r1=265530&r2=265531&view=diff
==============================================================================
--- httpd/mod_smtpd/trunk/Makefile.in (original)
+++ httpd/mod_smtpd/trunk/Makefile.in Wed Aug 31 10:01:42 2005
@@ -2,7 +2,7 @@
CFLAGS=-Wall
APXSFLAGS=-L`$(APXS) -q LIBDIR`
LIBS=-lapreq2
-SMTPD_SRC=smtp_core.c smtp_protocol.c
+SMTPD_SRC=smtp_core.c smtp_protocol.c smtp_util.c
all: mod_smtpd.la
Modified: httpd/mod_smtpd/trunk/mod_smtpd.h
URL: http://svn.apache.org/viewcvs/httpd/mod_smtpd/trunk/mod_smtpd.h?rev=265531&r1=265530&r2=265531&view=diff
==============================================================================
--- httpd/mod_smtpd/trunk/mod_smtpd.h (original)
+++ httpd/mod_smtpd/trunk/mod_smtpd.h Wed Aug 31 10:01:42 2005
@@ -20,6 +20,7 @@
#include "apr_pools.h"
#include "apr_hash.h"
#include "apr_file_io.h"
+#include "util_filter.h"
#include "httpd.h"
#ifdef __cplusplus
Modified: httpd/mod_smtpd/trunk/smtp_core.c
URL: http://svn.apache.org/viewcvs/httpd/mod_smtpd/trunk/smtp_core.c?rev=265531&r1=265530&r2=265531&view=diff
==============================================================================
--- httpd/mod_smtpd/trunk/smtp_core.c (original)
+++ httpd/mod_smtpd/trunk/smtp_core.c Wed Aug 31 10:01:42 2005
@@ -14,10 +14,6 @@
* limitations under the License.
*/
-/* todo:
- write postfix passer
-*/
-
#define CORE_PRIVATE
#include "httpd.h"
#include "http_protocol.h"
@@ -128,174 +124,11 @@
(scr, in),
SMTPD_OK, SMTPD_DECLINED);
-/* public methods */
-/* functions other modules can use */
-
-/* should be called at smtpd_hook_connect
- * at least by convention
- */
-SMTPD_DECLARE_NONSTD(void) smtpd_register_extension(smtpd_conn_rec *scr,
- const char *line)
-{
- (*((char **)apr_array_push(scr->extensions))) =
- apr_pstrdup(scr->p, line);
-}
-
-/* how to reset the transaction */
-SMTPD_DECLARE_NONSTD(void) smtpd_reset_transaction(smtpd_conn_rec *scr)
-{
- /* REVIEW: don't know whether to run clear request first
- * then run reset hooks, or run reset hooks then clear request
- * depends on whether hooks want to save info before it gets cleared out
- * or if they want to overwrite default values in the request rec
- */
- smtpd_run_reset_transaction(scr);
-
- smtpd_clear_trans_rec(scr);
-}
-
-SMTPD_DECLARE_NONSTD(apr_status_t) smtpd_getline(smtpd_conn_rec *scr,
- char *data, apr_size_t dlen,
- apr_size_t *outlen,
- smtpd_read_type read_type)
-{
- apr_status_t rc;
- apr_bucket *e;
- const char *str;
- char *pos, *last_char = data;
- apr_size_t len, bytes_handled = 0;
- ap_filter_t *input_filters = read_type == SMTPD_READ_DATA ?
- scr->transaction->input_filters :
- scr->c->input_filters;
-
- while (1) {
- rc = ap_get_brigade(input_filters, scr->bb_in, AP_MODE_GETLINE,
- APR_BLOCK_READ, 0);
- if (rc != APR_SUCCESS)
- return rc;
-
- while(!APR_BRIGADE_EMPTY(scr->bb_in)) {
- e = APR_BRIGADE_FIRST(scr->bb_in);
-
- rc = apr_bucket_read(e, &str, &len, APR_BLOCK_READ);
- if (rc != APR_SUCCESS)
- return rc;
-
- apr_bucket_delete(e);
-
- if (len == 0)
- continue;
-
- /* Would this overrun our buffer? If so, we'll die. */
- if (dlen < bytes_handled + len) {
- if (data) {
- /* ensure this string is NUL terminated */
- if (bytes_handled > 0) {
- data[bytes_handled-1] = '\0';
- }
- else {
- data[0] = '\0';
- }
- }
- return APR_ENOSPC;
- }
-
- /* Just copy the rest of the data to the end of the old buffer. */
- pos = data + bytes_handled;
- memcpy(pos, str, len);
- last_char = pos + len - 1;
-
- /* We've now processed that new data - update accordingly. */
- bytes_handled += len;
-
- }
-
- /* If we got a full line of input, stop reading */
- if (last_char && (*last_char == APR_ASCII_LF)) {
- break;
- }
- }
-
- /* Now NUL-terminate the string at the end of the line;
- * if the last-but-one character is a CR, terminate there */
- if (last_char > data && last_char[-1] == APR_ASCII_CR) {
- last_char--;
- }
-
- *last_char = '\0';
- if (outlen)
- *outlen = last_char - data;
- return APR_SUCCESS;
-}
-
-SMTPD_DECLARE_NONSTD(apr_status_t) smtpd_respond_multiline(smtpd_conn_rec *scr,
- int code,
- apr_array_header_t
- *msgs)
+apr_hash_t *smtpd_get_handlers()
{
- int i;
-
- for (i = 0; i < msgs->nelts - 1; i++) {
- ap_fprintf(scr->c->output_filters, scr->bb_out, "%d-%s\r\n", code,
- ((char **)msgs->elts)[i]);
- ap_fflush(scr->c->output_filters, scr->bb_out);
- }
-
- ap_fprintf(scr->c->output_filters, scr->bb_out, "%d %s\r\n", code,
- ((char **)msgs->elts)[i]);
- ap_fflush(scr->c->output_filters, scr->bb_out);
-
- return APR_SUCCESS;
-}
-
-SMTPD_DECLARE_NONSTD(apr_status_t) smtpd_respond_oneline(smtpd_conn_rec *scr,
- int code,
- char *message)
-{
- ap_fprintf(scr->c->output_filters, scr->bb_out, "%d %s\r\n", code,
- message);
- ap_fflush(scr->c->output_filters, scr->bb_out);
-
- return APR_SUCCESS;
-}
-
-#define INSERT_BEFORE(f, before_this) ((before_this) == NULL \
- || (before_this)->frec->ftype > (f)->frec->ftype \
- || (before_this)->r != (f)->r)
-SMTPD_DECLARE_NONSTD(ap_filter_t *)
- smtpd_add_input_filter_handle(ap_filter_rec_t *frec, void *ctx,
- smtpd_conn_rec *scr)
-{
- apr_pool_t* p = scr->p;
- ap_filter_t *f = apr_palloc(p, sizeof(*f));
- ap_filter_t **outf;
-
- outf = &(scr->transaction->input_filters);
-
- f->frec = frec;
- f->ctx = ctx;
- f->c = scr->c;
- f->next = NULL;
-
- if (INSERT_BEFORE(f, *outf)) {
- f->next = *outf;
- *outf = f;
- }
- else {
- ap_filter_t *fscan = *outf;
- while (!INSERT_BEFORE(f, fscan->next))
- fscan = fscan->next;
-
- f->next = fscan->next;
- fscan->next = f;
- }
-
- return f;
+ return smtpd_handlers;
}
-/* friend methods */
-/* only our sources can call these */
-
void smtpd_clear_trans_rec(smtpd_conn_rec *scr)
{
smtpd_trans_rec *str = scr->transaction;
@@ -308,10 +141,6 @@
str->helo = NULL;
str->headers = apr_table_make(str->p, 5);
str->input_filters = scr->c->input_filters;
-}
-
-apr_hash_t *smtpd_get_handlers() {
- return smtpd_handlers;
}
apr_status_t smtpd_smtp_filter(ap_filter_t *f, apr_bucket_brigade *b,
Added: httpd/mod_smtpd/trunk/smtp_util.c
URL: http://svn.apache.org/viewcvs/httpd/mod_smtpd/trunk/smtp_util.c?rev=265531&view=auto
==============================================================================
--- httpd/mod_smtpd/trunk/smtp_util.c (added)
+++ httpd/mod_smtpd/trunk/smtp_util.c Wed Aug 31 10:01:42 2005
@@ -0,0 +1,184 @@
+/* Copyright 2005 The Apache Software Foundation or its licensors, as
+ * applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "apr_strings.h"
+#include "apr_tables.h"
+#include "util_filter.h"
+
+#include "mod_smtpd.h"
+#include "smtp.h"
+
+/* should be called at smtpd_hook_connect
+ * at least by convention
+ */
+SMTPD_DECLARE_NONSTD(void) smtpd_register_extension(smtpd_conn_rec *scr,
+ const char *line)
+{
+ (*((char **)apr_array_push(scr->extensions))) =
+ apr_pstrdup(scr->p, line);
+}
+
+/* how to reset the transaction */
+SMTPD_DECLARE_NONSTD(void) smtpd_reset_transaction(smtpd_conn_rec *scr)
+{
+ /* REVIEW: don't know whether to run clear request first
+ * then run reset hooks, or run reset hooks then clear request
+ * depends on whether hooks want to save info before it gets cleared out
+ * or if they want to overwrite default values in the request rec
+ */
+ smtpd_run_reset_transaction(scr);
+
+ smtpd_clear_trans_rec(scr);
+}
+
+SMTPD_DECLARE_NONSTD(apr_status_t) smtpd_getline(smtpd_conn_rec *scr,
+ char *data, apr_size_t dlen,
+ apr_size_t *outlen,
+ smtpd_read_type read_type)
+{
+ apr_status_t rc;
+ apr_bucket *e;
+ const char *str;
+ char *pos, *last_char = data;
+ apr_size_t len, bytes_handled = 0;
+ ap_filter_t *input_filters = read_type == SMTPD_READ_DATA ?
+ scr->transaction->input_filters :
+ scr->c->input_filters;
+
+ while (1) {
+ rc = ap_get_brigade(input_filters, scr->bb_in, AP_MODE_GETLINE,
+ APR_BLOCK_READ, 0);
+ if (rc != APR_SUCCESS)
+ return rc;
+
+ while(!APR_BRIGADE_EMPTY(scr->bb_in)) {
+ e = APR_BRIGADE_FIRST(scr->bb_in);
+
+ rc = apr_bucket_read(e, &str, &len, APR_BLOCK_READ);
+ if (rc != APR_SUCCESS)
+ return rc;
+
+ apr_bucket_delete(e);
+
+ if (len == 0)
+ continue;
+
+ /* Would this overrun our buffer? If so, we'll die. */
+ if (dlen < bytes_handled + len) {
+ if (data) {
+ /* ensure this string is NUL terminated */
+ if (bytes_handled > 0) {
+ data[bytes_handled-1] = '\0';
+ }
+ else {
+ data[0] = '\0';
+ }
+ }
+ return APR_ENOSPC;
+ }
+
+ /* Just copy the rest of the data to the end of the old buffer. */
+ pos = data + bytes_handled;
+ memcpy(pos, str, len);
+ last_char = pos + len - 1;
+
+ /* We've now processed that new data - update accordingly. */
+ bytes_handled += len;
+
+ }
+
+ /* If we got a full line of input, stop reading */
+ if (last_char && (*last_char == APR_ASCII_LF)) {
+ break;
+ }
+ }
+
+ /* Now NUL-terminate the string at the end of the line;
+ * if the last-but-one character is a CR, terminate there */
+ if (last_char > data && last_char[-1] == APR_ASCII_CR) {
+ last_char--;
+ }
+
+ *last_char = '\0';
+ if (outlen)
+ *outlen = last_char - data;
+ return APR_SUCCESS;
+}
+
+SMTPD_DECLARE_NONSTD(apr_status_t) smtpd_respond_multiline(smtpd_conn_rec *scr,
+ int code,
+ apr_array_header_t
+ *msgs)
+{
+ int i;
+
+ for (i = 0; i < msgs->nelts - 1; i++) {
+ ap_fprintf(scr->c->output_filters, scr->bb_out, "%d-%s\r\n", code,
+ ((char **)msgs->elts)[i]);
+ ap_fflush(scr->c->output_filters, scr->bb_out);
+ }
+
+ ap_fprintf(scr->c->output_filters, scr->bb_out, "%d %s\r\n", code,
+ ((char **)msgs->elts)[i]);
+ ap_fflush(scr->c->output_filters, scr->bb_out);
+
+ return APR_SUCCESS;
+}
+
+SMTPD_DECLARE_NONSTD(apr_status_t) smtpd_respond_oneline(smtpd_conn_rec *scr,
+ int code,
+ char *message)
+{
+ ap_fprintf(scr->c->output_filters, scr->bb_out, "%d %s\r\n", code,
+ message);
+ ap_fflush(scr->c->output_filters, scr->bb_out);
+
+ return APR_SUCCESS;
+}
+
+#define INSERT_BEFORE(f, before_this) ((before_this) == NULL \
+ || (before_this)->frec->ftype > (f)->frec->ftype \
+ || (before_this)->r != (f)->r)
+SMTPD_DECLARE_NONSTD(ap_filter_t *)
+ smtpd_add_input_filter_handle(ap_filter_rec_t *frec, void *ctx,
+ smtpd_conn_rec *scr)
+{
+ apr_pool_t* p = scr->p;
+ ap_filter_t *f = apr_palloc(p, sizeof(*f));
+ ap_filter_t **outf;
+
+ outf = &(scr->transaction->input_filters);
+
+ f->frec = frec;
+ f->ctx = ctx;
+ f->c = scr->c;
+ f->next = NULL;
+
+ if (INSERT_BEFORE(f, *outf)) {
+ f->next = *outf;
+ *outf = f;
+ }
+ else {
+ ap_filter_t *fscan = *outf;
+ while (!INSERT_BEFORE(f, fscan->next))
+ fscan = fscan->next;
+
+ f->next = fscan->next;
+ fscan->next = f;
+ }
+
+ return f;
+}