Index: ossp-pkg/lmtp2nntp/Makefile.in
RCS File: /v/ossp/cvs/ossp-pkg/lmtp2nntp/Makefile.in,v
rcsdiff -q -kk '-r1.14' '-r1.15' -u '/v/ossp/cvs/ossp-pkg/lmtp2nntp/Makefile.in,v' 2>/dev/null
--- Makefile.in 2001/09/07 13:53:16 1.14
+++ Makefile.in 2001/09/07 15:02:08 1.15
@@ -43,8 +43,8 @@
POD2MAN = pod2man
PROG = lmtp2nntp
-HDRS = lmtp2nntp.h lmtp.h nntp.h sa.h argz.h shpat_match.h msg.h trace.h
-OBJS = lmtp2nntp.o lmtp.o nntp.o sa.o argz.o shpat_match.o msg.o trace.o version.o
+HDRS = lmtp2nntp.h lmtp.h nntp.h sa.h argz.h shpat_match.h msg.h
+OBJS = lmtp2nntp.o lmtp.o nntp.o sa.o argz.o shpat_match.o msg.o version.o
SUBDIRS = @SUBDIR_STR@ @SUBDIR_L2@
Index: ossp-pkg/lmtp2nntp/lmtp.c
RCS File: /v/ossp/cvs/ossp-pkg/lmtp2nntp/Attic/lmtp.c,v
rcsdiff -q -kk '-r1.21' '-r1.22' -u '/v/ossp/cvs/ossp-pkg/lmtp2nntp/Attic/lmtp.c,v' 2>/dev/null
--- lmtp.c 2001/09/04 09:46:06 1.21
+++ lmtp.c 2001/09/07 15:02:08 1.22
@@ -70,6 +70,21 @@
int wfd; /* file descriptor for writing */
};
+static int lmtp_select(void *ctx, int nfds, fd_set *rfds, fd_set *wfds, fd_set *efds, struct timeval *tv)
+{
+ return select(nfds, rfds, wfds, efds, tv);
+}
+
+static ssize_t lmtp_read(void *ctx, int fd, void *buf, size_t buflen)
+{
+ return read(fd, buf, buflen);
+}
+
+static ssize_t lmtp_write(void *ctx, int fd, const void *buf, size_t buflen)
+{
+ return write(fd, buf, buflen);
+}
+
static int verbindex(lmtp_t *lmtp, char *verb)
{
/* returns the index of the verb or -1 if verb not registered */
@@ -110,13 +125,15 @@
return NULL;
if (io == NULL) {
- lmtp->io.select = select;
- lmtp->io.read = read;
- lmtp->io.write = write;
+ lmtp->io.ctx = NULL;
+ lmtp->io.select = lmtp_select;
+ lmtp->io.read = lmtp_read;
+ lmtp->io.write = lmtp_write;
} else {
- lmtp->io.select = io->select ? io->select : select;
- lmtp->io.read = io->read ? io->read : read;
- lmtp->io.write = io->write ? io->write : write;
+ lmtp->io.ctx = io->ctx;
+ lmtp->io.select = io->select ? io->select : lmtp_select;
+ lmtp->io.read = io->read ? io->read : lmtp_read;
+ lmtp->io.write = io->write ? io->write : lmtp_write;
}
lmtp->rl.rl_cnt = 0;
@@ -164,7 +181,7 @@
/* fetch one character (but read more) */
if (rl->rl_cnt <= 0) {
do {
- rl->rl_cnt = lmtp->io.read(lmtp->rfd, rl->rl_buf, LMTP_LINE_MAXLEN);
+ rl->rl_cnt = lmtp->io.read(lmtp->io.ctx, lmtp->rfd, rl->rl_buf, LMTP_LINE_MAXLEN);
} while (rl->rl_cnt == -1 && errno == EINTR);
if (rl->rl_cnt == -1)
return LMTP_ERR_SYSTEM;
@@ -353,7 +370,7 @@
formatbuf[len++] = '\r';
formatbuf[len++] = '\n';
do {
- rv = lmtp->io.write(lmtp->wfd, formatbuf, len);
+ rv = lmtp->io.write(lmtp->io.ctx, lmtp->wfd, formatbuf, len);
} while (rv == -1 && errno == EINTR);
if (rv == -1)
return LMTP_ERR_SYSTEM;
Index: ossp-pkg/lmtp2nntp/lmtp.h
RCS File: /v/ossp/cvs/ossp-pkg/lmtp2nntp/Attic/lmtp.h,v
rcsdiff -q -kk '-r1.9' '-r1.10' -u '/v/ossp/cvs/ossp-pkg/lmtp2nntp/Attic/lmtp.h,v' 2>/dev/null
--- lmtp.h 2001/09/04 09:46:06 1.9
+++ lmtp.h 2001/09/07 15:02:08 1.10
@@ -36,9 +36,10 @@
typedef struct lmtp_st lmtp_t;
typedef struct {
- int (*select)(int, fd_set *, fd_set *, fd_set *, struct timeval *);
- ssize_t (*read)(int, void *, size_t);
- ssize_t (*write)(int, const void *, size_t);
+ void *ctx;
+ int (*select)(void *, int, fd_set *, fd_set *, fd_set *, struct timeval *);
+ ssize_t (*read)(void *, int, void *, size_t);
+ ssize_t (*write)(void *, int, const void *, size_t);
} lmtp_io_t;
typedef struct {
Index: ossp-pkg/lmtp2nntp/lmtp2nntp.c
RCS File: /v/ossp/cvs/ossp-pkg/lmtp2nntp/Attic/lmtp2nntp.c,v
rcsdiff -q -kk '-r1.43' '-r1.44' -u '/v/ossp/cvs/ossp-pkg/lmtp2nntp/Attic/lmtp2nntp.c,v' 2>/dev/null
--- lmtp2nntp.c 2001/09/07 13:56:31 1.43
+++ lmtp2nntp.c 2001/09/07 15:02:08 1.44
@@ -51,7 +51,6 @@
#include "nntp.h"
#include "sa.h"
#include "msg.h"
-#include "trace.h"
#define _VERSION_C_AS_HEADER_
#include "version.c"
#undef _VERSION_C_AS_HEADER_
@@ -172,6 +171,56 @@
return;
}
+static ssize_t trace_lmtp_read(void *_ctx, int d, void *buf, size_t nbytes)
+{
+ lmtp2nntp_t *ctx = (lmtp2nntp_t *)_ctx;
+ ssize_t rc;
+
+ rc = read(d, buf, nbytes);
+ if (rc == -1)
+ log0(ctx, TRACE, "LMTP read error: %m");
+ else
+ log3(ctx, TRACE, "LMTP %5d << \"%{text}D\"", rc, buf, rc);
+ return rc;
+}
+
+static ssize_t trace_lmtp_write(void *_ctx, int d, const void *buf, size_t nbytes)
+{
+ lmtp2nntp_t *ctx = (lmtp2nntp_t *)_ctx;
+ ssize_t rc;
+
+ log3(ctx, TRACE, "LMTP %5d >> \"%{text}D\"", nbytes, buf, nbytes);
+ rc = write(d, buf, nbytes);
+ if (rc == -1)
+ log0(ctx, TRACE, "LMTP write error: %m");
+ return rc;
+}
+
+static ssize_t trace_nntp_read(void *_ctx, int d, void *buf, size_t nbytes)
+{
+ lmtp2nntp_t *ctx = (lmtp2nntp_t *)_ctx;
+ ssize_t rc;
+
+ rc = read(d, buf, nbytes);
+ if (rc == -1)
+ log0(ctx, TRACE, "NNTP read error: %m");
+ else
+ log3(ctx, TRACE, "NNTP %5d << \"%{text}D\"", rc, buf, rc);
+ return rc;
+}
+
+static ssize_t trace_nntp_write(void *_ctx, int d, const void *buf, size_t nbytes)
+{
+ lmtp2nntp_t *ctx = (lmtp2nntp_t *)_ctx;
+ ssize_t rc;
+
+ log3(ctx, TRACE, "NNTP %5d >> \"%{text}D\"", nbytes, buf, nbytes);
+ rc = write(d, buf, nbytes);
+ if (rc == -1)
+ log0(ctx, TRACE, "NNTP write error: %m");
+ return rc;
+}
+
static l2_result_t
formatter_prefix(l2_context_t *_ctx, const char id, const char *param,
char *bufptr, size_t bufsize, size_t *buflen, va_list *ap)
@@ -455,6 +504,10 @@
fprintf(stderr, "%s:Error: logging failed to register dump formatter\n", ctx->progname);
exit(ERR_EXECUTION);
}
+ if (l2_stream_formatter(ctx->l2, 'S', l2_util_fmt_string, NULL) != L2_OK) {
+ fprintf(stderr, "%s:Error: logging failed to register string formatter\n", ctx->progname);
+ exit(ERR_EXECUTION);
+ }
if (l2_stream_formatter(ctx->l2, 'm', formatter_errno, NULL) != L2_OK) {
fprintf(stderr, "%s:Error: logging failed to register dump formatter\n", ctx->progname);
exit(ERR_EXECUTION);
@@ -516,15 +569,11 @@
exit(ERR_EXECUTION);
}
- if (ctx->option_logfile && (ctx->option_levelmask >= L2_LEVEL_TRACE)) {
- trace_read (-1, ctx->option_logfile, 0);
- trace_write(-1, ctx->option_logfile, 0);
- }
-
/* initialize LMTP context */
+ lmtp_io.ctx = ctx;
lmtp_io.select = NULL;
- lmtp_io.read = trace_read;
- lmtp_io.write = trace_write;
+ lmtp_io.read = trace_lmtp_read;
+ lmtp_io.write = trace_lmtp_write;
if ((lmtp = lmtp_create(STDIN_FILENO, STDOUT_FILENO,
(ctx->option_logfile && (ctx->option_levelmask >= L2_LEVEL_TRACE)) ?
&lmtp_io : NULL )) == NULL) {
@@ -678,9 +727,10 @@
log0(ctx, INFO, "lmtp_cb_lhlo");
+ nntp_io.ctx = ctx;
nntp_io.select = NULL;
- nntp_io.read = trace_read;
- nntp_io.write = trace_write;
+ nntp_io.read = trace_nntp_read;
+ nntp_io.write = trace_nntp_write;
/* RFC0821 4.2.1. REPLY CODES BY FUNCTION GROUPS 503 Bad sequence of commands
* RFC1893 2. Status Codes 5.X.X Permanent Failure
Index: ossp-pkg/lmtp2nntp/lmtp2nntp.h
RCS File: /v/ossp/cvs/ossp-pkg/lmtp2nntp/Attic/lmtp2nntp.h,v
rcsdiff -q -kk '-r1.1' '-r1.2' -u '/v/ossp/cvs/ossp-pkg/lmtp2nntp/Attic/lmtp2nntp.h,v' 2>/dev/null
--- lmtp2nntp.h 2001/09/07 13:53:16 1.1
+++ lmtp2nntp.h 2001/09/07 15:02:08 1.2
@@ -27,6 +27,13 @@
#ifndef __LMTP2NNTP_H__
#define __LMTP2NNTP_H__
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+#if defined(HAVE_DMALLOC_H) && defined(DMALLOC)
+#include "dmalloc.h"
+#endif
+
#define log0(ctx,level,msg) \
l2_stream_log((ctx)->l2, L2_LEVEL_##level, "%P: " msg)
#define log1(ctx,level,msg,a1) \
Index: ossp-pkg/lmtp2nntp/nntp.c
RCS File: /v/ossp/cvs/ossp-pkg/lmtp2nntp/Attic/nntp.c,v
rcsdiff -q -kk '-r1.20' '-r1.21' -u '/v/ossp/cvs/ossp-pkg/lmtp2nntp/Attic/nntp.c,v' 2>/dev/null
--- nntp.c 2001/09/04 09:46:06 1.20
+++ nntp.c 2001/09/07 15:02:08 1.21
@@ -72,6 +72,21 @@
int kludgeinn441dup;
};
+static int nntp_select(void *ctx, int nfds, fd_set *rfds, fd_set *wfds, fd_set *efds, struct timeval *tv)
+{
+ return select(nfds, rfds, wfds, efds, tv);
+}
+
+static ssize_t nntp_read(void *ctx, int fd, void *buf, size_t buflen)
+{
+ return read(fd, buf, buflen);
+}
+
+static ssize_t nntp_write(void *ctx, int fd, const void *buf, size_t buflen)
+{
+ return write(fd, buf, buflen);
+}
+
nntp_t *nntp_create(int rfd, int wfd, nntp_io_t *io)
{
nntp_t *nntp;
@@ -80,13 +95,15 @@
return NULL;
if (io == NULL) {
- nntp->io.select = select;
- nntp->io.read = read;
- nntp->io.write = write;
+ nntp->io.ctx = NULL;
+ nntp->io.select = nntp_select;
+ nntp->io.read = nntp_read;
+ nntp->io.write = nntp_write;
} else {
- nntp->io.select = io->select ? io->select : select;
- nntp->io.read = io->read ? io->read : read;
- nntp->io.write = io->write ? io->write : write;
+ nntp->io.ctx = io->ctx;
+ nntp->io.select = io->select ? io->select : nntp_select;
+ nntp->io.read = io->read ? io->read : nntp_read;
+ nntp->io.write = io->write ? io->write : nntp_write;
}
nntp->rfd = rfd;
@@ -180,13 +197,13 @@
FD_SET(nntp->rfd, &fds);
tv.tv_sec = nntp->tv.tv_sec;
tv.tv_usec = nntp->tv.tv_usec;
- rc = nntp->io.select(nntp->rfd + 1, &fds, NULL, NULL, &tv);
+ rc = nntp->io.select(nntp->io.ctx, nntp->rfd + 1, &fds, NULL, NULL, &tv);
if (rc == 0)
return NNTP_TIMEOUT;
else if (rc == -1)
return NNTP_ERR_SYSTEM;
do {
- rl->rl_cnt = nntp->io.read(nntp->rfd, rl->rl_buf, NNTP_LINE_MAXLEN);
+ rl->rl_cnt = nntp->io.read(nntp->io.ctx, nntp->rfd, rl->rl_buf, NNTP_LINE_MAXLEN);
} while (rl->rl_cnt == -1 && errno == EINTR);
if (rl->rl_cnt == -1)
return NNTP_ERR_SYSTEM;
@@ -219,7 +236,7 @@
return NNTP_ERR_ARG;
strncpy(tmp, buf, NNTP_LINE_MAXLEN-3);
strcat(tmp, "\r\n");
- if (nntp->io.write(nntp->wfd, tmp, strlen(tmp)) < 0)
+ if (nntp->io.write(nntp->io.ctx, nntp->wfd, tmp, strlen(tmp)) < 0)
return NNTP_ERR_SYSTEM;
return NNTP_OK;
}
@@ -334,7 +351,7 @@
return NNTP_ERR_POST;
do {
- rc = nntp->io.write(nntp->wfd, msg->cpMsg, strlen(msg->cpMsg));
+ rc = nntp->io.write(nntp->io.ctx, nntp->wfd, msg->cpMsg, strlen(msg->cpMsg));
} while (rc == -1 && errno == EINTR);
if (rc == -1)
return NNTP_ERR_SYSTEM;
@@ -410,7 +427,7 @@
return NNTP_ERR_POST;
do {
- rc = nntp->io.write(nntp->wfd, msg->cpMsg, strlen(msg->cpMsg));
+ rc = nntp->io.write(nntp->io.ctx, nntp->wfd, msg->cpMsg, strlen(msg->cpMsg));
} while (rc == -1 && errno == EINTR);
if (rc == -1)
return NNTP_ERR_SYSTEM;
Index: ossp-pkg/lmtp2nntp/nntp.h
RCS File: /v/ossp/cvs/ossp-pkg/lmtp2nntp/Attic/nntp.h,v
rcsdiff -q -kk '-r1.8' '-r1.9' -u '/v/ossp/cvs/ossp-pkg/lmtp2nntp/Attic/nntp.h,v' 2>/dev/null
--- nntp.h 2001/09/04 09:46:06 1.8
+++ nntp.h 2001/09/07 15:02:08 1.9
@@ -37,9 +37,10 @@
typedef struct nntp_st nntp_t;
typedef struct {
- int (*select)(int, fd_set *, fd_set *, fd_set *, struct timeval *);
- ssize_t (*read)(int, void *, size_t);
- ssize_t (*write)(int, const void *, size_t);
+ void *ctx;
+ int (*select)(void *, int, fd_set *, fd_set *, fd_set *, struct timeval *);
+ ssize_t (*read)(void *, int, void *, size_t);
+ ssize_t (*write)(void *, int, const void *, size_t);
} nntp_io_t;
typedef enum {
Index: ossp-pkg/lmtp2nntp/trace.c
RCS File: /v/ossp/cvs/ossp-pkg/lmtp2nntp/Attic/trace.c,v
co -q -kk -p'1.4' '/v/ossp/cvs/ossp-pkg/lmtp2nntp/Attic/trace.c,v' | diff -u - /dev/null -L'ossp-pkg/lmtp2nntp/trace.c' 2>/dev/null
--- ossp-pkg/lmtp2nntp/trace.c
+++ /dev/null 2025-05-20 08:39:30.000000000 +0200
@@ -1,87 +0,0 @@
-/*
-** Copyright (c) 2001 The OSSP Project
-** Copyright (c) 2001 Cable & Wireless Deutschland
-**
-** This file is part of OSSP lmtp2nntp, an LMTP speaking local
-** mailer which forwards mails as Usenet news articles via NNTP.
-** It can be found at http://www.ossp.org/pkg/lmtp2nntp/.
-**
-** This program is free software; you can redistribute it and/or
-** modify it under the terms of the GNU General Public License
-** as published by the Free Software Foundation; either version
-** 2.0 of the License, or (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-** General Public License for more details.
-**
-** You should have received a copy of the GNU General Public License
-** along with this file; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-** USA, or contact the OSSP project .
-**
-** trace.c: I/O tracing support
-*/
-
-#include
-#include
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-#if defined(HAVE_DMALLOC_H) && defined(DMALLOC)
-#include "dmalloc.h"
-#endif
-
-#include "trace.h"
-
-#ifndef _POSIX_PATH_MAX
-#if defined(PATH_MAX)
-#define _POSIX_PATH_MAX PATH_MAX
-#elif defined(MAX_PATH)
-#define _POSIX_PATH_MAX MAX_PATH
-#else
-#error "unable to determime maximum path limit"
-#endif
-#endif
-
-/*
- * tracing
- */
-
-ssize_t trace_read(int d, void *buf, size_t nbytes)
-{
- ssize_t rc;
- int tf;
- static char tfn[_POSIX_PATH_MAX] = "/tmp/trace";
-
- if ((d == -1) && (buf != NULL) && (nbytes == 0)) {
- strncpy(tfn, buf, _POSIX_PATH_MAX-1);
- }
- rc = read(d, buf, nbytes);
- if ((tf = open(tfn, O_CREAT|O_WRONLY|O_APPEND, 0664)) != -1) {
- write(tf, buf, rc);
- close(tf);
- }
- return rc;
-}
-
-ssize_t trace_write(int d, const void *buf, size_t nbytes)
-{
- ssize_t rc;
- int tf;
- static char tfn[_POSIX_PATH_MAX] = "/tmp/trace";
-
- if ((d == -1) && (buf != NULL) && (nbytes == 0)) {
- strncpy(tfn, buf, _POSIX_PATH_MAX-1);
- }
-
- rc = write(d, buf, nbytes);
- if ((tf = open(tfn, O_CREAT|O_WRONLY|O_APPEND, 0664)) != -1) {
- write(tf, buf, rc);
- close(tf);
- }
- return rc;
-}
-
Index: ossp-pkg/lmtp2nntp/trace.h
RCS File: /v/ossp/cvs/ossp-pkg/lmtp2nntp/Attic/trace.h,v
co -q -kk -p'1.3' '/v/ossp/cvs/ossp-pkg/lmtp2nntp/Attic/trace.h,v' | diff -u - /dev/null -L'ossp-pkg/lmtp2nntp/trace.h' 2>/dev/null
--- ossp-pkg/lmtp2nntp/trace.h
+++ /dev/null 2025-05-20 08:39:30.000000000 +0200
@@ -1,40 +0,0 @@
-/*
-** Copyright (c) 2001 The OSSP Project
-** Copyright (c) 2001 Cable & Wireless Deutschland
-**
-** This file is part of OSSP lmtp2nntp, an LMTP speaking local
-** mailer which forwards mails as Usenet news articles via NNTP.
-** It can be found at http://www.ossp.org/pkg/lmtp2nntp/.
-**
-** This program is free software; you can redistribute it and/or
-** modify it under the terms of the GNU General Public License
-** as published by the Free Software Foundation; either version
-** 2.0 of the License, or (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-** General Public License for more details.
-**
-** You should have received a copy of the GNU General Public License
-** along with this file; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-** USA, or contact the OSSP project .
-**
-** trace.h: I/O tracing support (API)
-*/
-
-#ifndef __TRACE_H__
-#define __TRACE_H__
-
-#include
-#include
-#include
-#include
-#include
-
-ssize_t trace_read (int, void *, size_t);
-ssize_t trace_write(int, const void *, size_t);
-
-#endif /* __TRACE_H__ */
-