diff -uN qmail-1.03/qmail-remote.c qmail-1.03-qmtproutes/qmail-remote.c --- qmail-1.03/qmail-remote.c Mon Jul 30 17:22:58 2001 +++ qmail-1.03-qmtproutes/qmail-remote.c Mon Jul 30 18:21:51 2001 @@ -42,7 +42,9 @@ stralloc helohost = {0}; stralloc routes = {0}; +stralloc qroutes = {0}; struct constmap maproutes; +struct constmap qmaproutes; stralloc host = {0}; stralloc sender = {0}; @@ -435,6 +437,14 @@ case 1: if (!constmap_init(&maproutes,routes.s,routes.len,1)) temp_nomem(); break; } + switch(control_readfile(&qroutes,"control/qmtproutes",0)) { + case -1: + temp_control(); + case 0: + if (!constmap_init(&qmaproutes,"",0,1)) temp_nomem(); break; + case 1: + if (!constmap_init(&qmaproutes,qroutes.s,qroutes.len,1)) temp_nomem(); break; + } } void main(argc,argv) @@ -448,6 +458,7 @@ unsigned long prefme; int flagallaliases; int flagalias; + int flagqmtp = 1; char *relayhost; sig_pipeignore(); @@ -461,6 +472,23 @@ relayhost = 0; for (i = 0;i <= host.len;++i) if ((i == 0) || (i == host.len) || (host.s[i] == '.')) + if (relayhost = constmap(&qmaproutes,host.s + i,host.len - i)) + break; + if (relayhost && !*relayhost) relayhost = 0; + + if (relayhost) { + i = str_chr(relayhost,':'); + if (relayhost[i]) { + scan_ulong(relayhost + i + 1,&qmtp_port); + relayhost[i] = 0; + } + if (!stralloc_copys(&host,relayhost)) temp_nomem(); + } + + if (!relayhost) { + flagqmtp = 0; + for (i = 0;i <= host.len;++i) + if ((i == 0) || (i == host.len) || (host.s[i] == '.')) if (relayhost = constmap(&maproutes,host.s + i,host.len - i)) break; if (relayhost && !*relayhost) relayhost = 0; @@ -473,7 +501,7 @@ } if (!stralloc_copys(&host,relayhost)) temp_nomem(); } - + } addrmangle(&sender,argv[2],&flagalias,0); @@ -525,7 +553,7 @@ smtpfd = socket(AF_INET,SOCK_STREAM,0); if (smtpfd == -1) temp_oserr(); - if (qmtp_priority(ip.ix[i].pref)) { + if (flagqmtp || qmtp_priority(ip.ix[i].pref)) { if (timeoutconn(smtpfd,&ip.ix[i].ip,(unsigned int) qmtp_port,timeoutconnect) == 0) { tcpto_err(&ip.ix[i].ip,0); partner = ip.ix[i].ip;