uw-imap: add uw-imap toolkit, prereq for php7-mod-imaplilik-openwrt-22.03
@ -0,0 +1,70 @@ | |||||
# | |||||
# Copyright (C) 2017 Lucian Cristian <lucian.cristian@gmail.com> | |||||
# | |||||
include $(TOPDIR)/rules.mk | |||||
PKG_NAME:=uw-imap | |||||
PKG_VERSION:=2007f | |||||
PKG_RELEASE:=1 | |||||
PKG_SOURCE:=imap-$(PKG_VERSION).tar.gz | |||||
PKG_SOURCE_URL:= \ | |||||
https://www.mirrorservice.org/sites/ftp.cac.washington.edu/imap \ | |||||
http://ftp.ntua.gr/pub/net/mail/imap \ | |||||
http://gd.tuwien.ac.at/infosys/mail/imap | |||||
PKG_HASH:=53e15a2b5c1bc80161d42e9f69792a3fa18332b7b771910131004eb520004a28 | |||||
PKG_BUILD_DIR:=$(BUILD_DIR)/imap-$(PKG_VERSION) | |||||
PKG_MAINTAINER:=Lucian Cristian <lucian.cristian@gmail.com> | |||||
PKG_LICENSE:=Apache-2.0 | |||||
PKG_LICENSE_FILES:=LICENSE.txt | |||||
PKG_FIXUP:=autoreconf | |||||
include $(INCLUDE_DIR)/package.mk | |||||
define Package/uw-imap | |||||
SECTION:=libs | |||||
CATEGORY:=Libraries | |||||
TITLE:=University of Washington IMAP toolkit | |||||
URL:=https://www.washington.edu/imap/ | |||||
DEPENDS:=+libpthread +libopenssl | |||||
endef | |||||
define Package/uw-imap/description | |||||
The UW IMAP tookit includes the following: | |||||
c-lient library : an API (application programming interface) used to build email clients and servers, | |||||
including support for IMAP,POP3, SMTP and NNTP protocols and for local mailbox file access on Unix and Windows | |||||
endef | |||||
TARGET_CFLAGS += \ | |||||
-fPIC -DPIC -D_REENTRANT -DDISABLE_POP_PROXY -fno-strict-aliasing -Wno-pointer-sign \ | |||||
-Wno-implicit-function-declaration -Wno-incompatible-pointer-types | |||||
MAKE_FLAGS += \ | |||||
SSLINCLUDE=$(STAGING_DIR)/usr/include SSLCERTS=/etc/ssl/certs GCCOPTLEVEL=" -Os" \ | |||||
SSLDIR=$(STAGING_DIR)/usr SHLIBNAME=libc-client.so.$(PKG_VERSION) $(if $(CONFIG_IPV6),IP=6,IP=4) | |||||
define Build/Compile | |||||
$(MAKE) -C $(PKG_BUILD_DIR) slx EXTRACFLAGS='$(TARGET_CFLAGS)' CC='$(TARGET_CC)' $(MAKE_FLAGS) | |||||
endef | |||||
define Build/InstallDev | |||||
$(INSTALL_DIR) $(1)/usr/lib \ | |||||
$(1)/usr/include | |||||
$(CP) $(PKG_BUILD_DIR)/c-client/libc-client.so.$(PKG_VERSION) $(1)/usr/lib/ | |||||
$(LN) libc-client.so.$(PKG_VERSION) $(1)/usr/lib/libc-client.so | |||||
$(CP) $(PKG_BUILD_DIR)/c-client/*.h $(1)/usr/include/ | |||||
endef | |||||
define Package/uw-imap/install | |||||
$(INSTALL_DIR) $(1)/usr/lib | |||||
$(CP) $(PKG_BUILD_DIR)/c-client/libc-client.so.$(PKG_VERSION) $(1)/usr/lib/ | |||||
$(LN) libc-client.so.$(PKG_VERSION) $(1)/usr/lib/libc-client.so | |||||
endef | |||||
$(eval $(call BuildPackage,uw-imap)) |
@ -0,0 +1,167 @@ | |||||
--- a/Makefile 2017-11-13 01:13:36.340236114 +0200 | |||||
+++ b/Makefile 2017-11-13 01:34:56.869682313 +0200 | |||||
@@ -638,10 +638,6 @@ | |||||
@echo + yourself, try adding IP6=4 to the make command line. | |||||
@echo +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ | |||||
@echo | |||||
- @echo Do you want to build with IPv6 anyway? Type y or n please: | |||||
- @$(SH) -c 'read x; case "$$x" in y) exit 0;; *) (make noip6;exit 1);; esac' | |||||
- @echo OK, I will remember that you really want to build with IPv6. | |||||
- @echo You will not see this message again. | |||||
@$(TOUCH) ip6 | |||||
noip6: | |||||
@@ -678,20 +674,18 @@ | |||||
$(TOOLS)/$@ "$(LN)" src/tmail tmail | |||||
$(LN) $(TOOLS)/$@ . | |||||
-build: OSTYPE rebuild rebuildclean bundled | |||||
+build: OSTYPE rebuild rebuildclean | |||||
OSTYPE: | |||||
@$(MAKE) ip$(IP) | |||||
@echo Building c-client for $(BUILDTYPE)... | |||||
@$(TOUCH) SPECIALS | |||||
- echo `$(CAT) SPECIALS` $(EXTRASPECIALS) > c-client/SPECIALS | |||||
$(CD) c-client;$(MAKE) $(BUILDTYPE) EXTRACFLAGS='$(EXTRACFLAGS)'\ | |||||
EXTRALDFLAGS='$(EXTRALDFLAGS)'\ | |||||
EXTRADRIVERS='$(EXTRADRIVERS)'\ | |||||
EXTRAAUTHENTICATORS='$(EXTRAAUTHENTICATORS)'\ | |||||
PASSWDTYPE=$(PASSWDTYPE) SSLTYPE=$(SSLTYPE) IP=$(IP)\ | |||||
- $(SPECIALS) $(EXTRASPECIALS) | |||||
- echo $(BUILDTYPE) > OSTYPE | |||||
+ $(SPECIALS) $(EXTRASPECIALS) OSTYPE=$(BUILDTYPE) | |||||
$(TOUCH) rebuild | |||||
rebuild: | |||||
--- a/src/osdep/unix/Makefile 2017-11-13 01:37:58.674011768 +0200 | |||||
+++ b/src/osdep/unix/Makefile 2017-11-13 03:30:18.204908962 +0200 | |||||
@@ -96,11 +96,11 @@ | |||||
LOGINPW=std | |||||
SIGTYPE=bsd | |||||
CRXTYPE=std | |||||
-ACTIVEFILE=/usr/lib/news/active | |||||
-SPOOLDIR=/usr/spool | |||||
+ACTIVEFILE=/var/lib/news/active | |||||
+SPOOLDIR=/var/spool | |||||
MAILSPOOL=$(SPOOLDIR)/mail | |||||
NEWSSPOOL=$(SPOOLDIR)/news | |||||
-RSHPATH=/usr/ucb/rsh | |||||
+RSHPATH=/usr/bin/rsh | |||||
MD5PWD=/etc/cram-md5.pwd | |||||
# Tries one of the test alternatives below if not specified. | |||||
LOCKPGM= | |||||
@@ -154,7 +154,7 @@ | |||||
dummy.o pseudo.o netmsg.o flstring.o fdstring.o \ | |||||
rfc822.o nntp.o smtp.o imap4r1.o pop3.o \ | |||||
unix.o mbx.o mmdf.o tenex.o mtx.o news.o phile.o mh.o mx.o mix.o | |||||
-CFLAGS=-g | |||||
+CFLAGS=$(BASECFLAGS) $(EXTRACFLAGS) -DCHUNKSIZE=$(CHUNKSIZE) | |||||
CAT=cat | |||||
MAKE=make | |||||
@@ -162,6 +162,16 @@ | |||||
RM=rm -rf | |||||
SH=sh | |||||
+OSCFLAGS= $(SSLCFLAGS) \ | |||||
+ -DCREATEPROTO=$(CREATEPROTO) -DEMPTYPROTO=$(EMPTYPROTO) \ | |||||
+ -DMD5ENABLE=\"$(MD5PWD)\" -DMAILSPOOL=\"$(MAILSPOOL)\" \ | |||||
+ -DANONYMOUSHOME=\"$(MAILSPOOL)/anonymous\" \ | |||||
+ -DACTIVEFILE=\"$(ACTIVEFILE)\" -DNEWSSPOOL=\"$(NEWSSPOOL)\" \ | |||||
+ -DRSHPATH=\"$(RSHPATH)\" -DLOCKPGM=\"$(LOCKPGM)\" \ | |||||
+ -DLOCKPGM1=\"$(LOCKPGM1)\" -DLOCKPGM2=\"$(LOCKPGM2)\" \ | |||||
+ -DLOCKPGM3=\"$(LOCKPGM3)\" | |||||
+ | |||||
+LDFLAGS= $(BASELDFLAGS) $(EXTRALDFLAGS) $(SSLLDFLAGS) | |||||
# Primary build command | |||||
@@ -174,7 +184,7 @@ | |||||
# Here if no make argument established | |||||
missing: osdep.h | |||||
- $(MAKE) all `$(CAT) SPECIALS` | |||||
+ $(MAKE) all $(SPECIALS) | |||||
osdep.h: | |||||
@echo You must specify what type of system | |||||
@@ -674,7 +684,7 @@ | |||||
@echo You are building for libc6/glibc versions of Secure Linux | |||||
@echo If you want libc5 versions you must use sl5 instead! | |||||
@echo If you want libc4 versions you must use sl4 instead! | |||||
- $(BUILD) `$(CAT) SPECIALS` OS=$@ \ | |||||
+ $(BUILD) $(SPECIALS) OS=$@ \ | |||||
SIGTYPE=psx CHECKPW=psx CRXTYPE=nfs \ | |||||
SPOOLDIR=/var/spool \ | |||||
ACTIVEFILE=/var/lib/news/active \ | |||||
@@ -863,7 +873,7 @@ | |||||
@$(SH) ARCHIVE | |||||
.c.o: | |||||
- `$(CAT) CCTYPE` -c `$(CAT) CFLAGS` $*.c | |||||
+ $(CC) -c $(CFLAGS) $*.c | |||||
# Cleanup | |||||
@@ -922,8 +932,8 @@ | |||||
@echo If you get No such file error messages for files x509.h, ssl.h, | |||||
@echo pem.h, buffer.h, bio.h, and crypto.h, that means that OpenSSL | |||||
@echo is not installed on your system. Either install OpenSSL first | |||||
- @echo or build with command: make `$(CAT) OSTYPE` SSLTYPE=none | |||||
- `$(CAT) CCTYPE` -c `$(CAT) CFLAGS` `$(CAT) OSCFLAGS` -c osdep.c | |||||
+ @echo or build with command: make $(OSTYPE) SSLTYPE=none | |||||
+ $(CC) -c $(CFLAGS) $(OSCFLAGS) -c osdep.c | |||||
osdep.c: osdepbas.c osdepckp.c osdeplog.c osdepssl.c | |||||
$(CAT) osdepbas.c osdepckp.c osdeplog.c osdepssl.c > osdep.c | |||||
@@ -962,21 +972,14 @@ | |||||
# Once-only environment setup | |||||
-once: onceenv ckp$(PASSWDTYPE) ssl$(SSLTYPE) osdep.c | |||||
+once: ssl$(SSLTYPE) onceenv ckp$(PASSWDTYPE) osdep.c | |||||
onceenv: | |||||
@echo Once-only environment setup... | |||||
- echo $(CC) > CCTYPE | |||||
- echo $(BASECFLAGS) '$(EXTRACFLAGS)' -DCHUNKSIZE=$(CHUNKSIZE) > CFLAGS | |||||
- echo -DCREATEPROTO=$(CREATEPROTO) -DEMPTYPROTO=$(EMPTYPROTO) \ | |||||
- -DMD5ENABLE=\"$(MD5PWD)\" -DMAILSPOOL=\"$(MAILSPOOL)\" \ | |||||
- -DANONYMOUSHOME=\"$(MAILSPOOL)/anonymous\" \ | |||||
- -DACTIVEFILE=\"$(ACTIVEFILE)\" -DNEWSSPOOL=\"$(NEWSSPOOL)\" \ | |||||
- -DRSHPATH=\"$(RSHPATH)\" -DLOCKPGM=\"$(LOCKPGM)\" \ | |||||
- -DLOCKPGM1=\"$(LOCKPGM1)\" -DLOCKPGM2=\"$(LOCKPGM2)\" \ | |||||
- -DLOCKPGM3=\"$(LOCKPGM3)\" > OSCFLAGS | |||||
- echo $(BASELDFLAGS) $(EXTRALDFLAGS) > LDFLAGS | |||||
echo "$(ARRC) $(ARCHIVE) $(BINARIES);$(RANLIB) $(ARCHIVE)" > ARCHIVE | |||||
+ echo "$(OSCFLAGS)" > OSCFLAGS | |||||
+ echo "$(CC) $(CFLAGS) $(OSCFLAGS) -shared -Wl,-soname,libc-client.so \ | |||||
+ -o $(SHLIBNAME) $(BINARIES) $(LDFLAGS)" >> ARCHIVE | |||||
echo $(OS) > OSTYPE | |||||
./drivers $(EXTRADRIVERS) $(DEFAULTDRIVERS) dummy | |||||
./mkauths $(EXTRAAUTHENTICATORS) $(DEFAULTAUTHENTICATORS) | |||||
@@ -1055,7 +1058,6 @@ | |||||
sbasic: # UNIX OpenSSL | |||||
@echo Building with SSL | |||||
$(LN) ssl_unix.c osdepssl.c | |||||
- echo $(SSLCFLAGS) >> OSCFLAGS | |||||
echo " ssl_onceonlyinit ();" >> linkage.c | |||||
snopwd: # Plaintext disable | |||||
@@ -1063,13 +1065,12 @@ | |||||
echo " mail_parameters (NIL,SET_DISABLEPLAINTEXT,(void *) 2);" >> linkage.c | |||||
sldunix:# Normal UNIX SSL load flags | |||||
- echo $(SSLLDFLAGS) >> LDFLAGS | |||||
+ @echo Normal UNIX SSL load flags | |||||
sldsco: # SCO SSL load flags | |||||
# Note: Tim Rice says that SSL has to be lunk before other libraries on SCO. | |||||
- echo $(SSLLDFLAGS) `cat LDFLAGS` > LDFLAGS.tmp | |||||
- mv LDFLAGS.tmp LDFLAGS | |||||
+ @echo SCO SSL load flags | |||||
# A monument to a hack of long ago and far away... |
@ -0,0 +1,30 @@ | |||||
Patch by Robert Scheck <redhat@linuxnetz.de> for uw-imap >= 2004a, which corrects | |||||
paths to imapd, ipop2d and ipop3d in the man pages. | |||||
This patch is based on Red Hat Bugzilla ID #127271 and solves ID #229781. | |||||
--- imap-2004a/src/imapd/imapd.8 2004-05-18 19:46:54.000000000 +0200 | |||||
+++ imap-2004a/src/imapd/imapd.8.doc 2004-07-23 15:24:17.000000000 +0200 | |||||
@@ -3,7 +3,7 @@ | |||||
.SH NAME | |||||
IMAPd \- Internet Message Access Protocol server | |||||
.SH SYNOPSIS | |||||
-.B /usr/etc/imapd | |||||
+.B /usr/sbin/imapd | |||||
.SH DESCRIPTION | |||||
.I imapd | |||||
is a server which supports the | |||||
--- imap-2004a/src/ipopd/ipopd.8 2004-05-18 19:50:05.000000000 +0200 | |||||
+++ imap-2004a/src/ipopd/ipopd.8.doc 2004-07-23 15:23:38.000000000 +0200 | |||||
@@ -3,9 +3,9 @@ | |||||
.SH NAME | |||||
IPOPd \- Post Office Protocol server | |||||
.SH SYNOPSIS | |||||
-.B /usr/etc/ipop2d | |||||
+.B /usr/sbin/ipop2d | |||||
.PP | |||||
-.B /usr/etc/ipop3d | |||||
+.B /usr/sbin/ipop3d | |||||
.SH DESCRIPTION | |||||
.I ipop2d | |||||
and |
@ -0,0 +1,13 @@ | |||||
diff -up imap-2007e/src/c-client/rfc822.c.overflow imap-2007e/src/c-client/rfc822.c | |||||
--- imap-2007e/src/c-client/rfc822.c.overflow 2008-12-12 11:08:26.000000000 -0600 | |||||
+++ imap-2007e/src/c-client/rfc822.c 2009-07-07 19:27:20.057772757 -0500 | |||||
@@ -384,6 +384,9 @@ void rfc822_parse_content (BODY *body,ST | |||||
if (CHR (bs) == '\012'){/* following LF? */ | |||||
c = SNX (bs); i--; /* yes, slurp it */ | |||||
} | |||||
+ if (!i) /* Make sure we don't get an overflow for */ | |||||
+ break; /* messages ending on \015 (or the following */ | |||||
+ /* i-- will cause i to be MAXINT. Not good.) */ | |||||
case '\012': /* at start of a line, start with -- ? */ | |||||
if (!(i && i-- && ((c = SNX (bs)) == '-') && i-- && | |||||
((c = SNX (bs)) == '-'))) break; |
@ -0,0 +1,29 @@ | |||||
diff -up imap-2007e/src/c-client/auth_md5.c.authmd5 imap-2007e/src/c-client/auth_md5.c | |||||
--- imap-2007e/src/c-client/auth_md5.c.authmd5 2008-06-04 13:18:34.000000000 -0500 | |||||
+++ imap-2007e/src/c-client/auth_md5.c 2009-07-07 19:24:12.348005485 -0500 | |||||
@@ -42,17 +42,17 @@ typedef struct { | |||||
/* Prototypes */ | |||||
-long auth_md5_valid (void); | |||||
-long auth_md5_client (authchallenge_t challenger,authrespond_t responder, | |||||
+static long auth_md5_valid (void); | |||||
+static long auth_md5_client (authchallenge_t challenger,authrespond_t responder, | |||||
char *service,NETMBX *mb,void *stream, | |||||
unsigned long *trial,char *user); | |||||
-char *auth_md5_server (authresponse_t responder,int argc,char *argv[]); | |||||
-char *auth_md5_pwd (char *user); | |||||
+static char *auth_md5_server (authresponse_t responder,int argc,char *argv[]); | |||||
+static char *auth_md5_pwd (char *user); | |||||
char *apop_login (char *chal,char *user,char *md5,int argc,char *argv[]); | |||||
-char *hmac_md5 (char *text,unsigned long tl,char *key,unsigned long kl); | |||||
-void md5_init (MD5CONTEXT *ctx); | |||||
-void md5_update (MD5CONTEXT *ctx,unsigned char *data,unsigned long len); | |||||
-void md5_final (unsigned char *digest,MD5CONTEXT *ctx); | |||||
+static char *hmac_md5 (char *text,unsigned long tl,char *key,unsigned long kl); | |||||
+static void md5_init (MD5CONTEXT *ctx); | |||||
+static void md5_update (MD5CONTEXT *ctx,unsigned char *data,unsigned long len); | |||||
+static void md5_final (unsigned char *digest,MD5CONTEXT *ctx); | |||||
static void md5_transform (unsigned long *state,unsigned char *block); | |||||
static void md5_encode (unsigned char *dst,unsigned long *src,int len); | |||||
static void md5_decode (unsigned long *dst,unsigned char *src,int len); |
@ -0,0 +1,12 @@ | |||||
diff -Naur imap-2007f.orig/src/osdep/unix/flocklnx.c imap-2007f/src/osdep/unix/flocklnx.c | |||||
--- imap-2007f.orig/src/osdep/unix/flocklnx.c 2011-07-23 02:20:11.000000000 +0200 | |||||
+++ imap-2007f/src/osdep/unix/flocklnx.c 2014-04-14 19:17:46.429000000 +0200 | |||||
@@ -57,7 +57,7 @@ | |||||
case ENOLCK: /* lock table is full */ | |||||
sprintf (tmp,"File locking failure: %s",strerror (errno)); | |||||
mm_log (tmp,WARN); /* give the user a warning of what happened */ | |||||
- if (!logged++) syslog (LOG_ERR,tmp); | |||||
+ if (!logged++) syslog (LOG_ERR, "%s", tmp); | |||||
/* return failure if non-blocking lock */ | |||||
if (op & LOCK_NB) return -1; | |||||
sleep (5); /* slow down in case it loops */ |
@ -0,0 +1,192 @@ | |||||
http://anonscm.debian.org/cgit/collab-maint/uw-imap.git/plain/debian/patches/1005_poll.patch | |||||
Description: Use poll(2) instead of select(2) to support more than 1024 file descriptors | |||||
Author: Ben Smithurst <ben.smithurst@gradwell.com> | |||||
Bug-Debian: https://bugs.debian.org/478193 | |||||
diff --git a/src/osdep/unix/os_lnx.c b/src/osdep/unix/os_lnx.c | |||||
index 03fd17d..671bbd6 100644 | |||||
--- a/src/osdep/unix/os_lnx.c | |||||
+++ b/src/osdep/unix/os_lnx.c | |||||
@@ -41,6 +41,7 @@ | |||||
extern int errno; /* just in case */ | |||||
#include <pwd.h> | |||||
#include "misc.h" | |||||
+#include <poll.h> | |||||
#include "fs_unix.c" | |||||
diff --git a/src/osdep/unix/os_slx.c b/src/osdep/unix/os_slx.c | |||||
index c94d632..f6bf27d 100644 | |||||
--- a/src/osdep/unix/os_slx.c | |||||
+++ b/src/osdep/unix/os_slx.c | |||||
@@ -42,6 +42,7 @@ extern int errno; /* just in case */ | |||||
#include <pwd.h> | |||||
#include <shadow.h> | |||||
#include "misc.h" | |||||
+#include <poll.h> | |||||
#include "fs_unix.c" | |||||
diff --git a/src/osdep/unix/tcp_unix.c b/src/osdep/unix/tcp_unix.c | |||||
index 795fb4f..c69eaec 100644 | |||||
--- a/src/osdep/unix/tcp_unix.c | |||||
+++ b/src/osdep/unix/tcp_unix.c | |||||
@@ -235,12 +235,11 @@ TCPSTREAM *tcp_open (char *host,char *service,unsigned long port) | |||||
int tcp_socket_open (int family,void *adr,size_t adrlen,unsigned short port, | |||||
char *tmp,int *ctr,char *hst) | |||||
{ | |||||
- int i,ti,sock,flgs; | |||||
+ int i,ti,sock,flgs,tmo; | |||||
+ struct pollfd pfd; | |||||
size_t len; | |||||
time_t now; | |||||
struct protoent *pt = getprotobyname ("tcp"); | |||||
- fd_set rfds,wfds,efds; | |||||
- struct timeval tmo; | |||||
struct sockaddr *sadr = ip_sockaddr (family,adr,adrlen,port,&len); | |||||
blocknotify_t bn = (blocknotify_t) mail_parameters (NIL,GET_BLOCKNOTIFY,NIL); | |||||
/* fetid Solaris */ | |||||
@@ -252,14 +251,6 @@ int tcp_socket_open (int family,void *adr,size_t adrlen,unsigned short port, | |||||
sprintf (tmp,"Unable to create TCP socket: %s",strerror (errno)); | |||||
(*bn) (BLOCK_NONSENSITIVE,data); | |||||
} | |||||
- else if (sock >= FD_SETSIZE) {/* unselectable sockets are useless */ | |||||
- sprintf (tmp,"Unable to create selectable TCP socket (%d >= %d)", | |||||
- sock,FD_SETSIZE); | |||||
- (*bn) (BLOCK_NONSENSITIVE,data); | |||||
- close (sock); | |||||
- sock = -1; | |||||
- errno = EMFILE; | |||||
- } | |||||
else { /* get current socket flags */ | |||||
flgs = fcntl (sock,F_GETFL,0); | |||||
@@ -284,16 +275,11 @@ int tcp_socket_open (int family,void *adr,size_t adrlen,unsigned short port, | |||||
if ((sock >= 0) && ctr) { /* want open timeout? */ | |||||
now = time (0); /* open timeout */ | |||||
ti = ttmo_open ? now + ttmo_open : 0; | |||||
- tmo.tv_usec = 0; | |||||
- FD_ZERO (&rfds); /* initialize selection vector */ | |||||
- FD_ZERO (&wfds); /* initialize selection vector */ | |||||
- FD_ZERO (&efds); /* handle errors too */ | |||||
- FD_SET (sock,&rfds); /* block for error or readable or writable */ | |||||
- FD_SET (sock,&wfds); | |||||
- FD_SET (sock,&efds); | |||||
+ pfd.fd = sock; | |||||
+ pfd.events = POLLIN | POLLOUT; | |||||
do { /* block under timeout */ | |||||
- tmo.tv_sec = ti ? ti - now : 0; | |||||
- i = select (sock+1,&rfds,&wfds,&efds,ti ? &tmo : NIL); | |||||
+ tmo = ti ? ti - now : 0; | |||||
+ i = poll (&pfd, 1, ti ? tmo * 1000 : -1); | |||||
now = time (0); /* fake timeout if interrupt & time expired */ | |||||
if ((i < 0) && (errno == EINTR) && ti && (ti <= now)) i = 0; | |||||
} while ((i < 0) && (errno == EINTR)); | |||||
@@ -302,7 +288,7 @@ int tcp_socket_open (int family,void *adr,size_t adrlen,unsigned short port, | |||||
fcntl (sock,F_SETFL,flgs); | |||||
/* This used to be a zero-byte read(), but that crashes Solaris */ | |||||
/* get socket status */ | |||||
- if(FD_ISSET(sock, &rfds)) while (((i = *ctr = read (sock,tmp,1)) < 0) && (errno == EINTR)); | |||||
+ if(pfd.revents & POLLIN) while (((i = *ctr = read (sock,tmp,1)) < 0) && (errno == EINTR)); | |||||
} | |||||
if (i <= 0) { /* timeout or error? */ | |||||
i = i ? errno : ETIMEDOUT;/* determine error code */ | |||||
@@ -545,9 +531,8 @@ long tcp_getbuffer (TCPSTREAM *stream,unsigned long size,char *s) | |||||
stream->ictr -=n; | |||||
} | |||||
if (size) { | |||||
- int i; | |||||
- fd_set fds,efds; | |||||
- struct timeval tmo; | |||||
+ int i, tmo; | |||||
+ struct pollfd pfd; | |||||
time_t t = time (0); | |||||
blocknotify_t bn=(blocknotify_t) mail_parameters (NIL,GET_BLOCKNOTIFY,NIL); | |||||
(*bn) (BLOCK_TCPREAD,NIL); | |||||
@@ -556,16 +541,13 @@ long tcp_getbuffer (TCPSTREAM *stream,unsigned long size,char *s) | |||||
time_t now = tl; | |||||
time_t ti = ttmo_read ? now + ttmo_read : 0; | |||||
if (tcpdebug) mm_log ("Reading TCP buffer",TCPDEBUG); | |||||
- tmo.tv_usec = 0; | |||||
- FD_ZERO (&fds); /* initialize selection vector */ | |||||
- FD_ZERO (&efds); /* handle errors too */ | |||||
- /* set bit in selection vectors */ | |||||
- FD_SET (stream->tcpsi,&fds); | |||||
- FD_SET (stream->tcpsi,&efds); | |||||
+ | |||||
+ pfd.events = POLLIN; | |||||
+ pfd.fd = stream->tcpsi; | |||||
errno = NIL; /* initially no error */ | |||||
do { /* block under timeout */ | |||||
- tmo.tv_sec = ti ? ti - now : 0; | |||||
- i = select (stream->tcpsi+1,&fds,NIL,&efds,ti ? &tmo : NIL); | |||||
+ tmo = ti ? ti - now : 0; | |||||
+ i = poll (&pfd, 1, ti ? tmo * 1000 : -1); | |||||
now = time (0); /* fake timeout if interrupt & time expired */ | |||||
if ((i < 0) && (errno == EINTR) && ti && (ti <= now)) i = 0; | |||||
} while ((i < 0) && (errno == EINTR)); | |||||
@@ -605,9 +587,8 @@ long tcp_getbuffer (TCPSTREAM *stream,unsigned long size,char *s) | |||||
long tcp_getdata (TCPSTREAM *stream) | |||||
{ | |||||
- int i; | |||||
- fd_set fds,efds; | |||||
- struct timeval tmo; | |||||
+ int i, tmo; | |||||
+ struct pollfd pfd; | |||||
time_t t = time (0); | |||||
blocknotify_t bn = (blocknotify_t) mail_parameters (NIL,GET_BLOCKNOTIFY,NIL); | |||||
if (stream->tcpsi < 0) return NIL; | |||||
@@ -617,15 +598,12 @@ long tcp_getdata (TCPSTREAM *stream) | |||||
time_t now = tl; | |||||
time_t ti = ttmo_read ? now + ttmo_read : 0; | |||||
if (tcpdebug) mm_log ("Reading TCP data",TCPDEBUG); | |||||
- tmo.tv_usec = 0; | |||||
- FD_ZERO (&fds); /* initialize selection vector */ | |||||
- FD_ZERO (&efds); /* handle errors too */ | |||||
- FD_SET (stream->tcpsi,&fds);/* set bit in selection vectors */ | |||||
- FD_SET (stream->tcpsi,&efds); | |||||
+ pfd.fd = stream->tcpsi; | |||||
+ pfd.events = POLLIN; | |||||
errno = NIL; /* initially no error */ | |||||
do { /* block under timeout */ | |||||
- tmo.tv_sec = ti ? ti - now : 0; | |||||
- i = select (stream->tcpsi+1,&fds,NIL,&efds,ti ? &tmo : NIL); | |||||
+ tmo = ti ? ti - now : 0; | |||||
+ i = poll (&pfd, 1, ti ? tmo * 1000 : -1); | |||||
now = time (0); /* fake timeout if interrupt & time expired */ | |||||
if ((i < 0) && (errno == EINTR) && ti && (ti <= now)) i = 0; | |||||
} while ((i < 0) && (errno == EINTR)); | |||||
@@ -677,9 +655,8 @@ long tcp_soutr (TCPSTREAM *stream,char *string) | |||||
long tcp_sout (TCPSTREAM *stream,char *string,unsigned long size) | |||||
{ | |||||
- int i; | |||||
- fd_set fds,efds; | |||||
- struct timeval tmo; | |||||
+ int i, tmo; | |||||
+ struct pollfd pfd; | |||||
time_t t = time (0); | |||||
blocknotify_t bn = (blocknotify_t) mail_parameters (NIL,GET_BLOCKNOTIFY,NIL); | |||||
if (stream->tcpso < 0) return NIL; | |||||
@@ -689,15 +666,12 @@ long tcp_sout (TCPSTREAM *stream,char *string,unsigned long size) | |||||
time_t now = tl; | |||||
time_t ti = ttmo_write ? now + ttmo_write : 0; | |||||
if (tcpdebug) mm_log ("Writing to TCP",TCPDEBUG); | |||||
- tmo.tv_usec = 0; | |||||
- FD_ZERO (&fds); /* initialize selection vector */ | |||||
- FD_ZERO (&efds); /* handle errors too */ | |||||
- FD_SET (stream->tcpso,&fds);/* set bit in selection vector */ | |||||
- FD_SET(stream->tcpso,&efds);/* set bit in error selection vector */ | |||||
+ pfd.fd = stream->tcpso; | |||||
+ pfd.events = POLLOUT; | |||||
errno = NIL; /* block and write */ | |||||
do { /* block under timeout */ | |||||
- tmo.tv_sec = ti ? ti - now : 0; | |||||
- i = select (stream->tcpso+1,NIL,&fds,&efds,ti ? &tmo : NIL); | |||||
+ tmo = ti ? ti - now : 0; | |||||
+ i = poll (&pfd, 1, ti ? tmo * 1000 : -1); | |||||
now = time (0); /* fake timeout if interrupt & time expired */ | |||||
if ((i < 0) && (errno == EINTR) && ti && (ti <= now)) i = 0; | |||||
} while ((i < 0) && (errno == EINTR)); |