1 --- qmail-remote.c.org Mon Jun 15 19:53:16 1998
2 +++ qmail-remote.c Tue Apr 14 08:48:29 2015
4 #include "timeoutread.h"
5 #include "timeoutwrite.h"
9 +#include <sys/socket.h>
12 #define HUGESMTPTEXT 5000
14 #define PORT_SMTP 25 /* silly rabbit, /etc/services is for users */
17 stralloc sender = {0};
23 struct ip_address partner;
25 it isn't in my control/locals file, so I don't treat it as local. (#5.4.6)\n");
28 +void temp_no_lmtp_so_long() { out("ZLMTP file can't open\n"); zerodie(); }
29 +void temp_no_lmtp_socketopen() { out("ZLMTP socket can't open\n"); zerodie(); }
30 +void temp_no_lmtp_open() { out("ZLMTP file can't open\n"); zerodie(); }
31 +void temp_no_lmtp_non_support_multircpt() { out("Zcurrent LMTP don't support multi rcpt...\n"); zerodie(); }
39 if (smtpcode() != 220) quit("ZConnected to "," but greeting failed");
41 - substdio_puts(&smtpto,"HELO ");
43 + substdio_puts(&smtpto,"LHLO ");
45 + substdio_puts(&smtpto,"HELO ");
47 substdio_put(&smtpto,helohost.s,helohost.len);
48 substdio_puts(&smtpto,"\r\n");
49 substdio_flush(&smtpto);
51 if (code >= 400) quit("ZConnected to "," but sender was rejected");
54 + if (lmtpmode && reciplist.len != 1){
55 + temp_no_lmtp_non_support_multircpt();
57 for (i = 0;i < reciplist.len;++i) {
58 substdio_puts(&smtpto,"RCPT TO:<");
59 substdio_put(&smtpto,reciplist.sa[i].s,reciplist.sa[i].len);
64 + struct sockaddr_un address;
67 if (argc < 4) perm_usage();
70 i = str_chr(relayhost,':');
72 - scan_ulong(relayhost + i + 1,&port);
73 + if (strcmp(relayhost + i + 1,"lmtp") == 0){
76 + scan_ulong(relayhost + i + 1,&port);
80 if (!stralloc_copys(&host,relayhost)) temp_nomem();
88 + if (host.len >= sizeof(address.sun_path) -1) temp_no_lmtp_so_long();
89 + smtpfd = socket(AF_UNIX,SOCK_STREAM,0);
90 + if (smtpfd == -1) temp_no_lmtp_socketopen();
91 + address.sun_family = AF_UNIX;
92 + strcpy(address.sun_path, host.s);
93 + if (connect(smtpfd,(struct sockaddr *)&address,sizeof(address)) == -1) temp_no_lmtp_open();
94 + smtp(); /* does not return */
100 random = now() + (getpid() << 16);
101 switch (relayhost ? dns_ip(&ip,&host) : dns_mxip(&ip,&host,random)) {
102 case DNS_MEM: temp_nomem();