diff -Nuar qmail-amavisd-0.94/Makefile qmail-amavisd-0.94.new/Makefile --- qmail-amavisd-0.94/Makefile 2006-09-14 12:06:32.000000000 -0600 +++ qmail-amavisd-0.94.new/Makefile 2020-11-30 08:15:16.125227240 -0700 @@ -11,9 +11,9 @@ LD = $(CC) -LDFLAGS = -L/usr/local/lib +LDFLAGS = -L/usr/lib -LIBS = -lunp +LIBS = MAKEFILE = Makefile diff -Nuar qmail-amavisd-0.94/qmail-qsmtp.c qmail-amavisd-0.94.new/qmail-qsmtp.c --- qmail-amavisd-0.94/qmail-qsmtp.c 2006-09-14 12:05:37.000000000 -0600 +++ qmail-amavisd-0.94.new/qmail-qsmtp.c 2020-11-28 11:44:16.180968555 -0700 @@ -17,13 +17,63 @@ #include #include #include -#include +#include //inet_addr #include #include #define SERVADDR "127.0.0.1" #define SERVPORT 10024 +#define MAXLINE 4096 /* max text line length */ +static ssize_t +my_read(int fd, char *ptr) +{ + static int read_cnt = 0; + static char *read_ptr; + static char read_buf[MAXLINE]; + + if (read_cnt <= 0) { +again: + if ( (read_cnt = read(fd, read_buf, sizeof(read_buf))) < 0) { + if (errno == EINTR) + goto again; + return(-1); + } else if (read_cnt == 0) + return(0); + read_ptr = read_buf; + } + + read_cnt--; + *ptr = *read_ptr++; + return(1); +} + +ssize_t +readline(int fd, void *vptr, size_t maxlen) +{ + int n, rc; + char c, *ptr; + + ptr = vptr; + for (n = 1; n < maxlen; n++) { + if ( (rc = my_read(fd, &c)) == 1) { + *ptr++ = c; + if (c == '\n') + break; /* newline is stored, like fgets() */ + } else if (rc == 0) { + if (n == 1) + return(0); /* EOF, no data read */ + else + break; /* EOF, some data was read */ + } else + return(-1); /* error, errno set by read() */ + } + + *ptr = 0; /* null terminate like fgets() */ + return(n); +} +/* end readline */ + void write_log (char *message) { syslog (LOG_INFO,"%s", message); @@ -175,6 +225,7 @@ char * envelope; int envlen = 0; char buffer[BUFSIZE]; + char buffer2[30]; int r_len; int efd; int sockfd; @@ -290,17 +341,24 @@ } bzero(&server, sizeof(server)); server.sin_family = AF_INET; - if (getenv("FWDPORT")) - port = atoi(getenv("FWDPORT")); - if (port < 1) port = SERVPORT; - if (getenv("FWDADDR")) - strncpy(addr, getenv("FWDADDR"), 16); + port = 0; + if (getenv("FWDPORT")) { + port = atoi(getenv("FWDPORT")); + syslog(LOG_INFO,"Environment Port: %d",port); + } + if (port < 1) { + port = SERVPORT; + syslog(LOG_INFO,"Defined Port: %d",port); + } + if (getenv("FWDADDR")) strncpy(addr, getenv("FWDADDR"), 16); if (strlen(addr) < 7) strcpy(addr, SERVADDR); server.sin_port = htons(port); if (inet_pton(AF_INET, addr, &server.sin_addr) <= 0) { die_errno(81, "inet_pton failed"); } - if (connect(sockfd, (SA *)&server, sizeof(server)) < 0) { + syslog(LOG_INFO,"Connecting to Amavisd, Server: %s",addr); + syslog(LOG_INFO,"Connecting to Amavisd, Port: %d",port); + if (connect(sockfd, (struct sockaddr *)&server, sizeof(server)) < 0) { die_errno(81, "connect failed"); } syslog(LOG_DEBUG, "Connected to SMTP");