diff options
-rw-r--r-- | usr.sbin/smtpd/compress_backend.c | 8 | ||||
-rw-r--r-- | usr.sbin/smtpd/compress_gzip.c (renamed from usr.sbin/smtpd/compress_zlib.c) | 96 | ||||
-rw-r--r-- | usr.sbin/smtpd/parse.y | 4 | ||||
-rw-r--r-- | usr.sbin/smtpd/smtpctl/Makefile | 4 | ||||
-rw-r--r-- | usr.sbin/smtpd/smtpd/Makefile | 4 |
5 files changed, 76 insertions, 40 deletions
diff --git a/usr.sbin/smtpd/compress_backend.c b/usr.sbin/smtpd/compress_backend.c index ba1774bd055..8f1c2e125c1 100644 --- a/usr.sbin/smtpd/compress_backend.c +++ b/usr.sbin/smtpd/compress_backend.c @@ -1,4 +1,4 @@ -/* $OpenBSD: compress_backend.c,v 1.2 2012/08/26 10:17:13 chl Exp $ */ +/* $OpenBSD: compress_backend.c,v 1.3 2012/08/26 13:38:43 gilles Exp $ */ /* * Copyright (c) 2012 Charles Longeau <chl@openbsd.org> @@ -31,13 +31,13 @@ #include "smtpd.h" -extern struct compress_backend compress_zlib; +extern struct compress_backend compress_gzip; struct compress_backend * compress_backend_lookup(const char *name) { - if (!strcmp(name, "zlib")) - return &compress_zlib; + if (!strcmp(name, "gzip")) + return &compress_gzip; /* if (!strcmp(name, "bzip")) */ /* return &compress_bzip; */ diff --git a/usr.sbin/smtpd/compress_zlib.c b/usr.sbin/smtpd/compress_gzip.c index de7d8488449..e2b86b1b76d 100644 --- a/usr.sbin/smtpd/compress_zlib.c +++ b/usr.sbin/smtpd/compress_gzip.c @@ -1,6 +1,7 @@ -/* $OpenBSD: compress_zlib.c,v 1.4 2012/08/26 11:52:48 gilles Exp $ */ +/* $OpenBSD: compress_gzip.c,v 1.1 2012/08/26 13:38:43 gilles Exp $ */ /* + * Copyright (c) 2012 Gilles Chehade <gilles@openbsd.org> * Copyright (c) 2012 Charles Longeau <chl@openbsd.org> * * Permission to use, copy, modify, and distribute this software for any @@ -38,25 +39,25 @@ #include "smtpd.h" #include "log.h" -#define ZLIB_BUFFER_SIZE 8192 +#define GZIP_BUFFER_SIZE 8192 -static int compress_file_zlib(int, int); -static int uncompress_file_zlib(int, int); -static size_t compress_buffer_zlib(const char *, size_t, char *, size_t); -static size_t uncompress_buffer_zlib(const char *, size_t, char *, size_t); +static int compress_file_gzip(int, int); +static int uncompress_file_gzip(int, int); +static size_t compress_buffer_gzip(const char *, size_t, char *, size_t); +static size_t uncompress_buffer_gzip(const char *, size_t, char *, size_t); -struct compress_backend compress_zlib = { - compress_file_zlib, - uncompress_file_zlib, - compress_buffer_zlib, - uncompress_buffer_zlib +struct compress_backend compress_gzip = { + compress_file_gzip, + uncompress_file_gzip, + compress_buffer_gzip, + uncompress_buffer_gzip }; static int -compress_file_zlib(int fdin, int fdout) +compress_file_gzip(int fdin, int fdout) { gzFile gzfd; - char buf[ZLIB_BUFFER_SIZE]; + char buf[GZIP_BUFFER_SIZE]; int r, w; int ret = 0; @@ -83,10 +84,10 @@ end: } static int -uncompress_file_zlib(int fdin, int fdout) +uncompress_file_gzip(int fdin, int fdout) { gzFile gzfd; - char buf[ZLIB_BUFFER_SIZE]; + char buf[GZIP_BUFFER_SIZE]; int r, w; int ret = 0; @@ -113,29 +114,64 @@ end: } static size_t -compress_buffer_zlib(const char *inbuf, size_t inbuflen, char *outbuf, size_t outbuflen) +compress_buffer_gzip(const char *in, size_t inlen, char *out, size_t outlen) { - uLong compress_bound; - int ret; - - compress_bound = compressBound((uLongf) inbuflen); + z_stream strm; + size_t ret = 0; - if (compress_bound > outbuflen) - return (0); + strm.zalloc = Z_NULL; + strm.zfree = Z_NULL; + strm.opaque = Z_NULL; + + ret = deflateInit2(&strm, Z_DEFAULT_COMPRESSION, Z_DEFLATED, + (15+16), 8, Z_DEFAULT_STRATEGY); + if (ret != Z_OK) + return 0; - ret = compress((Bytef *) outbuf, (uLongf *) &outbuflen, - (const Bytef *) inbuf, (uLong) inbuflen); + strm.avail_in = inlen; + strm.next_in = in; + strm.avail_out = outlen; + strm.next_out = out; + + ret = deflate(&strm, Z_FINISH); + if (ret != Z_STREAM_END) + goto end; - return (ret == Z_OK ? outbuflen : 0); + ret = strm.total_out; + +end: + (void)deflateEnd(&strm); + return ret; } static size_t -uncompress_buffer_zlib(const char *inbuf, size_t inbuflen, char *outbuf, size_t outbuflen) +uncompress_buffer_gzip(const char *in, size_t inlen, char *out, size_t outlen) { - int ret; + z_stream strm; + size_t ret = 0; + + strm.zalloc = Z_NULL; + strm.zfree = Z_NULL; + strm.opaque = Z_NULL; + strm.avail_in = 0; + strm.next_in = Z_NULL; + + ret = inflateInit2(&strm, (15+16)); + if (ret != Z_OK) + return ret; + + strm.avail_in = inlen; + strm.next_in = in; + strm.avail_out = outlen; + strm.next_out = out; + + ret = inflate(&strm, Z_FINISH); + if (ret != Z_STREAM_END) + goto end; - ret = uncompress((Bytef *) outbuf, (uLongf *) &outbuflen, - (const Bytef *) inbuf, (uLong) inbuflen); + ret = strm.total_out; - return (ret == Z_OK ? outbuflen : 0); +end: + (void)inflateEnd(&strm); + return ret; } diff --git a/usr.sbin/smtpd/parse.y b/usr.sbin/smtpd/parse.y index 1dcb6a2c31c..1f118f2e476 100644 --- a/usr.sbin/smtpd/parse.y +++ b/usr.sbin/smtpd/parse.y @@ -1,4 +1,4 @@ -/* $OpenBSD: parse.y,v 1.92 2012/08/25 23:35:09 chl Exp $ */ +/* $OpenBSD: parse.y,v 1.93 2012/08/26 13:38:43 gilles Exp $ */ /* * Copyright (c) 2008 Gilles Chehade <gilles@openbsd.org> @@ -310,7 +310,7 @@ compress : COMPRESS STRING { $$ = $2; } | COMPRESS { - $$ = "zlib"; + $$ = "gzip"; } | /* empty */ { $$ = NULL; } ; diff --git a/usr.sbin/smtpd/smtpctl/Makefile b/usr.sbin/smtpd/smtpctl/Makefile index 3f93e4fed93..618d2f8a06a 100644 --- a/usr.sbin/smtpd/smtpctl/Makefile +++ b/usr.sbin/smtpd/smtpctl/Makefile @@ -1,4 +1,4 @@ -# $OpenBSD: Makefile,v 1.24 2012/08/25 23:35:09 chl Exp $ +# $OpenBSD: Makefile,v 1.25 2012/08/26 13:38:43 gilles Exp $ .PATH: ${.CURDIR}/.. @@ -19,7 +19,7 @@ CFLAGS+= -Wsign-compare -Wbounded SRCS= enqueue.c parser.c log.c envelope.c SRCS+= queue_backend.c queue_fsqueue.c SRCS+= smtpctl.c util.c -SRCS+= compress_backend.c compress_zlib.c encrypt.c +SRCS+= compress_backend.c compress_gzip.c encrypt.c LDADD+= -lutil -lz DPADD+= ${LIBUTIL} ${LIBEVENT} diff --git a/usr.sbin/smtpd/smtpd/Makefile b/usr.sbin/smtpd/smtpd/Makefile index 407aabc48f4..ee59922e226 100644 --- a/usr.sbin/smtpd/smtpd/Makefile +++ b/usr.sbin/smtpd/smtpd/Makefile @@ -1,4 +1,4 @@ -# $OpenBSD: Makefile,v 1.48 2012/08/25 23:35:09 chl Exp $ +# $OpenBSD: Makefile,v 1.49 2012/08/26 13:38:43 gilles Exp $ .PATH: ${.CURDIR}/.. ${.CURDIR}/../../../lib/libc/asr @@ -16,7 +16,7 @@ SRCS= aliases.c auth.c bounce.c compress_backend.c config.c \ # backends SRCS+= auth_bsd.c SRCS+= auth_pwd.c -SRCS+= compress_zlib.c +SRCS+= compress_gzip.c SRCS+= delivery_filename.c SRCS+= delivery_maildir.c SRCS+= delivery_mbox.c |