sorry about the delay in reply... my laptop literally went up in smokes...

first laptop i've ever seen catch fire. 


( i guess it took the made for windows sticker too seriously,
and since i had been running freebsd, it committed suicide... lol ) 


am looking over you modified qmail-smtpd.c, i assume the mysql stuff is
optional, since i don;t use mysql for any auth. 


let see if I have any luck... 

 

 

Krissada Jindanupajit writes: 

>  
> 
> Try my version below . you may have any idea to modify it to fit your
> system.
> :) 
> 
> --- cut
> /*
> _______________________________________________________________________
> qmail-smtpd.c (MySQL Auth)                                   Thai-Enabled
> Unreal IRCD 
> 
>      ____   ____/    _____/             Thai Community
>            /        /               (www.thaicommunity.com)
>           /        /
>          /        /           Copyright (C) 2001 Krissada Jindanupajit
>       __/      ________/            GNU General Public License
> _______________________________________________________________________ 
> 
>    Modified 2001-03-20 (V1.02-beta1 b2001032005)
>   ([EMAIL PROTECTED])
>     Require: qmail, mysql 
> 
> 
>     This program is free software; you can redistribute it and/or modify
>     it under the terms of the GNU General Public License as published by
>     the Free Software Foundation; either version 2 of the License, or
>     (at your option) any later version. 
> 
>     This program is distributed in the hope that it will be useful,
>     but WITHOUT ANY WARRANTY; without even the implied warranty of
>     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
>     GNU General Public License for more details. 
> 
>     You should have received a copy of the GNU General Public License
>     along with this program; if not, write to the Free Software
>     Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307
> USA
> */ 
> 
> #include "sig.h"
> #include <stdio.h>
> #include <string.h>
> #include "readwrite.h"
> #include "stralloc.h"
> #include "substdio.h"
> #include "alloc.h"
> #include "auto_qmail.h"
> #include "control.h"
> #include "received.h"
> #include "constmap.h"
> #include "error.h"
> #include "ipme.h"
> #include "ip.h"
> #include "qmail.h"
> #include "str.h"
> #include "fmt.h"
> #include "scan.h"
> #include "byte.h"
> #include "case.h"
> #include "wait.h"
> #include "env.h"
> #include "now.h"
> #include "exit.h"
> #include "rcpthosts.h"
> #include "timeoutread.h"
> #include "timeoutwrite.h"
> #include "commands.h" 
> 
> #define MAXHOPS 100
> #define USE_SMTPAUTH
> unsigned int databytes = 0;
> int timeout = 1200;
> stralloc mailfrom = {0};
> stralloc rcptto = {0}; 
> 
> 
> /*************** MySQL Auth***************************/
> #ifdef USE_SMTPAUTH
> #include "/usr/local/include/mysql/mysql.h"
> int verified =0;
> int rejectrcpt=0;
> void die_nomem();
> char Login[256]; 
> 
> 
> int VerifyUser(char *User, char *Password)
> {
>  MYSQL_RES *SQLDB_RES;
>  MYSQL_ROW SQLDB_ROW;
>  MYSQL SQLDB;
>  /* Change these! */
>  char* SQLDB_Host = "0.0.0.0";
>  char* SQLDB_User = "user";
>  char* SQLDB_Password = "password";
>  char* SQLDB_Database = "mail_route";
>  static char SQLDB_Statement[512];
>  verified = 0; 
> 
>  mysql_init(&SQLDB);
>  if (!mysql_connect(&SQLDB, SQLDB_Host, SQLDB_User, SQLDB_Password))
>   return 1; 
> 
>  mysql_select_db(&SQLDB,SQLDB_Database);
>  sprintf(SQLDB_Statement, "select ulogin,upassword from user where
> ulogin='%s' and 
> 
> upassword='%s'",User,Password);
>  mysql_query(&SQLDB,SQLDB_Statement); 
> 
>  if (mysql_errno(&SQLDB)) return 1; 
> 
>  SQLDB_RES = mysql_store_result(&SQLDB);
>  if (SQLDB_ROW = mysql_fetch_row(SQLDB_RES))
>   {
>   mysql_close(&SQLDB);
>   if (!stralloc_copys(&mailfrom,User)) { die_nomem(); return 1;}
>   strcpy(Login, User);
>   verified = 1;
>   return 0;}
>  else
>   {
>   mysql_close(&SQLDB);
>   return 1;}
> }
> #endif
> /*******************************************************************/ 
> 
> int safewrite(fd,buf,len) int fd; char *buf; int len;
> {
>   int r;
>   r = timeoutwrite(timeout,fd,buf,len);
>   if (r <= 0) _exit(1);
>   return r;
> } 
> 
> char ssoutbuf[512];
> substdio ssout = SUBSTDIO_FDBUF(safewrite,1,ssoutbuf,sizeof ssoutbuf); 
> 
> void out(s) char *s; { substdio_puts(&ssout,s); }
> void flush() { substdio_flush(&ssout); }
> void die_nomem() { out("421 out of memory (#4.3.0)\r\n"); flush();
> _exit(1); } 
> 
> void die_read() { _exit(1); }
> void die_alarm() { out("451 timeout (#4.4.2)\r\n"); flush(); _exit(1); }
> void die_control() { out("421 unable to read controls (#4.3.0)\r\n");
> flush(); _exit(1); }
> void die_ipme() { out("421 unable to figure out my IP addresses
> (#4.3.0)\r\n"); flush(); _exit(1); }
> void straynewline() { out("451 See
> http://pobox.com/~djb/docs/smtplf.html.\r\n";); flush(); _exit(1); } 
> 
> void err_bmf() { out("553 sorry, your envelope sender is in my badmailfrom
> list (#5.7.1)\r\n"); }
> #ifdef USE_SMTPAUTH
> void err_nogateway() {rejectrcpt=1;}
> #else
> void err_nogateway() { out("553 sorry, that domain isn't in my list of
> allowed rcpthosts (#5.7.1)\r\n"); }
> #endif
> void err_unimpl() { out("502 unimplemented (#5.5.1)\r\n"); }
> void err_syntax() { out("555 syntax error (#5.5.4)\r\n"); }
> void err_wantmail() { out("503 MAIL first (#5.5.1)\r\n"); }
> void err_wantrcpt() { out("503 RCPT first (#5.5.1)\r\n"); }
> void err_noop() { out("250 Yep! I am here.\r\n"); }
> void err_vrfy() { out("252 send some mail, i'll try my best\r\n"); }
> void err_qqt() { out("451 qqt failure (#4.3.0)\r\n"); }
> void err_verify() { out("535 RELAYING DENIED! Please check your RCPT line or
> do AUTH before DATA. (see 
> 
> http://www.mailthai.com) \r\n"); } 
> 
> 
> stralloc greeting = {0}; 
> 
> void smtp_greet(code) char *code;
> {
>   substdio_puts(&ssout,code);
>   substdio_put(&ssout,greeting.s,greeting.len);
> }
> void smtp_help()
> {
>   out("214 qmail home page: http://www.mailthai.com\r\n";);
> }
> void smtp_quit()
> {
>   smtp_greet("221 "); out("Bye Bye. Take care of yourself.\r\n"); flush();
> _exit(0);
> } 
> 
> char *remoteip;
> char *remotehost;
> char *remoteinfo;
> char *local;
> char *relayclient; 
> 
> stralloc helohost = {0};
> char *fakehelo; /* pointer into helohost, or 0 */ 
> 
> void dohelo(arg) char *arg; {
>   if (!stralloc_copys(&helohost,arg)) die_nomem();
>   if (!stralloc_0(&helohost)) die_nomem();
>   fakehelo = case_diffs(remotehost,helohost.s) ? helohost.s : 0;
> } 
> 
> int liphostok = 0;
> stralloc liphost = {0};
> int bmfok = 0;
> stralloc bmf = {0};
> struct constmap mapbmf; 
> 
> void setup()
> {
>   char *x;
>   unsigned long u; 
> 
>   if (control_init() == -1) die_control();
>   if (control_rldef(&greeting,"control/smtpgreeting",1,(char *) 0) != 1)
>     die_control();
>   liphostok = control_rldef(&liphost,"control/localiphost",1,(char *) 0);
>   if (liphostok == -1) die_control();
>   if (control_readint(&timeout,"control/timeoutsmtpd") == -1) die_control();
>   if (timeout <= 0) timeout = 1; 
> 
>   if (rcpthosts_init() == -1) die_control(); 
> 
>   bmfok = control_readfile(&bmf,"control/badmailfrom",0);
>   if (bmfok == -1) die_control();
>   if (bmfok)
>     if (!constmap_init(&mapbmf,bmf.s,bmf.len,0)) die_nomem(); 
> 
>   if (control_readint(&databytes,"control/databytes") == -1) die_control();
>   x = env_get("DATABYTES");
>   if (x) { scan_ulong(x,&u); databytes = u; }
>   if (!(databytes + 1)) --databytes; 
> 
>   remoteip = env_get("TCPREMOTEIP");
>   if (!remoteip) remoteip = "unknown";
>   local = env_get("TCPLOCALHOST");
>   if (!local) local = env_get("TCPLOCALIP");
>   if (!local) local = "unknown";
>   remotehost = env_get("TCPREMOTEHOST");
>   if (!remotehost) remotehost = "unknown";
>   remoteinfo = env_get("TCPREMOTEINFO");
> #ifndef USE_SMTPAUTH
>   relayclient = env_get("RELAYCLIENT");
> #endif
>   dohelo(remotehost);
> } 
> 
> 
> stralloc addr = {0}; /* will be 0-terminated, if addrparse returns 1 */ 
> 
> int addrparse(arg)
> char *arg;
> {
>   int i;
>   char ch;
>   char terminator;
>   struct ip_address ip;
>   int flagesc;
>   int flagquoted; 
> 
>   terminator = '>';
>   i = str_chr(arg,'<');
>   if (arg[i])
>     arg += i + 1;
>   else { /* partner should go read rfc 821 */
>     terminator = ' ';
>     arg += str_chr(arg,':');
>     if (*arg == ':') ++arg;
>     while (*arg == ' ') ++arg;
>   } 
> 
>   /* strip source route */
>   if (*arg == '@') while (*arg) if (*arg++ == ':') break; 
> 
>   if (!stralloc_copys(&addr,"")) die_nomem();
>   flagesc = 0;
>   flagquoted = 0;
>   for (i = 0;ch = arg[i];++i) { /* copy arg to addr, stripping quotes */
>     if (flagesc) {
>       if (!stralloc_append(&addr,&ch)) die_nomem();
>       flagesc = 0;
>     }
>     else {
>       if (!flagquoted && (ch == terminator)) break;
>       switch(ch) {
>         case '\\': flagesc = 1; break;
>         case '"': flagquoted = !flagquoted; break;
>         default: if (!stralloc_append(&addr,&ch)) die_nomem();
>       }
>     }
>   }
>   /* could check for termination failure here, but why bother? */
>   if (!stralloc_append(&addr,"")) die_nomem(); 
> 
>   if (liphostok) {
>     i = byte_rchr(addr.s,addr.len,'@');
>     if (i < addr.len) /* if not, partner should go read rfc 821 */
>       if (addr.s[i + 1] == '[')
>         if (!addr.s[i + 1 + ip_scanbracket(addr.s + i + 1,&ip)])
>           if (ipme_is(&ip)) {
>             addr.len = i + 1;
>             if (!stralloc_cat(&addr,&liphost)) die_nomem();
>             if (!stralloc_0(&addr)) die_nomem();
>           }
>   } 
> 
>   if (addr.len > 900) return 0;
>   return 1;
> } 
> 
> int bmfcheck()
> {
>   int j;
>   if (!bmfok) return 0;
>   if (constmap(&mapbmf,addr.s,addr.len - 1)) return 1;
>   j = byte_rchr(addr.s,addr.len,'@');
>   if (j < addr.len)
>     if (constmap(&mapbmf,addr.s + j,addr.len - j - 1)) return 1;
>   return 0;
> } 
> 
> int addrallowed()
> {
>   int r;
>   r = rcpthosts(addr.s,str_len(addr.s));
>   if (r == -1) die_control();
>   return r;
> } 
> 
> 
> int seenmail = 0;
> int flagbarf; /* defined if seenmail */ 
> 
> void smtp_helo(arg) char *arg;
> {
>   smtp_greet("250 "); out("\r\n");
>   seenmail = 0; dohelo(arg);
> }
> void smtp_ehlo(arg) char *arg;
> {
>   smtp_greet("250-");
> #ifdef USE_SMTPAUTH
>   out("\r\n250-AUTH=LOGIN");
> #endif
>   out("\r\n250-PIPELINING\r\n250 8BITMIME\r\n");
>   seenmail = 0; dohelo(arg);
> }
> void smtp_rset()
> {
>   seenmail = 0;
>   out("250 flushed\r\n");
> }
> void smtp_mail(arg) char *arg;
> {
>   if (!addrparse(arg)) { err_syntax(); return; }
>   flagbarf = bmfcheck();
>   seenmail = 1;
>   if (!stralloc_copys(&rcptto,"")) die_nomem();
>   if (!stralloc_copys(&mailfrom,addr.s)) die_nomem();
>   if (!stralloc_0(&mailfrom)) die_nomem(); 
> 
>   out("250 ");
>   out(mailfrom.s);
>   out(" Ok.\r\n");
> }
> void smtp_rcpt(arg) char *arg; {
>   if (!seenmail) { err_wantmail(); return; }
>   if (!addrparse(arg)) { err_syntax(); return; }
>   if (flagbarf) { err_bmf(); return; }
>   if (relayclient) {
>     --addr.len;
>     if (!stralloc_cats(&addr,relayclient)) die_nomem();
>     if (!stralloc_0(&addr)) die_nomem();
>   }
>   else
>     if (!addrallowed()) {
> #ifdef USE_SMTPAUTH
>     relayclient="";
>     --addr.len;
>     if (!stralloc_cats(&addr,relayclient)) die_nomem();
>     if (!stralloc_0(&addr)) die_nomem();
>   if (!stralloc_cats(&rcptto,"T")) die_nomem();
>   if (!stralloc_cats(&rcptto,addr.s)) die_nomem();
>   if (!stralloc_0(&rcptto)) die_nomem();
> #endif
> err_nogateway();
> out("250 Ok BUT! restricted outgoing mail routing. If you would like to send
> mail to ");
> out(addr.s);
> out(", please do AUTH before DATA; otherwise, ");
> out("I will not work for you.\r\n"); 
> 
> return ;
> }
>   if (!stralloc_cats(&rcptto,"T")) die_nomem();
>   if (!stralloc_cats(&rcptto,addr.s)) die_nomem();
>   if (!stralloc_0(&rcptto)) die_nomem();
>   out("250 Ok! Mail will be sent to ");
>   out(addr.s);
>   out(". Try your DATA\r\n");
> } 
> 
> 
> int saferead(fd,buf,len) int fd; char *buf; int len;
> {
>   int r;
>   flush();
>   r = timeoutread(timeout,fd,buf,len);
>   if (r == -1) if (errno == error_timeout) die_alarm();
>   if (r <= 0) die_read();
>   return r;
> } 
> 
> char ssinbuf[1024];
> substdio ssin = SUBSTDIO_FDBUF(saferead,0,ssinbuf,sizeof ssinbuf); 
> 
> struct qmail qqt;
> unsigned int bytestooverflow = 0; 
> 
> void put(ch)
> char *ch;
> {
>   if (bytestooverflow)
>     if (!--bytestooverflow)
>       qmail_fail(&qqt);
>   qmail_put(&qqt,ch,1);
> } 
> 
> void blast(hops)
> int *hops;
> {
>   char ch;
>   int state;
>   int flaginheader;
>   int pos; /* number of bytes since most recent \n, if fih */
>   int flagmaybex; /* 1 if this line might match RECEIVED, if fih */
>   int flagmaybey; /* 1 if this line might match \r\n, if fih */
>   int flagmaybez; /* 1 if this line might match DELIVERED, if fih */ 
> 
>   state = 1;
>   *hops = 0;
>   flaginheader = 1;
>   pos = 0; flagmaybex = flagmaybey = flagmaybez = 1;
>   for (;;) {
>     substdio_get(&ssin,&ch,1);
>     if (flaginheader) {
>       if (pos < 9) {
>         if (ch != "delivered"[pos]) if (ch != "DELIVERED"[pos]) flagmaybez =
> 0;
>         if (flagmaybez) if (pos == 8) ++*hops;
>         if (pos < 8)
>           if (ch != "received"[pos]) if (ch != "RECEIVED"[pos]) flagmaybex =
> 0;
>         if (flagmaybex) if (pos == 7) ++*hops;
>         if (pos < 2) if (ch != "\r\n"[pos]) flagmaybey = 0;
>         if (flagmaybey) if (pos == 1) flaginheader = 0;
>       }
>       ++pos;
>       if (ch == '\n') { pos = 0; flagmaybex = flagmaybey = flagmaybez = 1; }
>     }
>     switch(state) {
>       case 0:
>         if (ch == '\n') straynewline();
>         if (ch == '\r') { state = 4; continue; }
>         break;
>       case 1: /* \r\n */
>         if (ch == '\n') straynewline();
>         if (ch == '.') { state = 2; continue; }
>         if (ch == '\r') { state = 4; continue; }
>         state = 0;
>         break;
>       case 2: /* \r\n + . */
>         if (ch == '\n') straynewline();
>         if (ch == '\r') { state = 3; continue; }
>         state = 0;
>         break;
>       case 3: /* \r\n + .\r */
>         if (ch == '\n') return;
>         put(".");
>         put("\r");
>         if (ch == '\r') { state = 4; continue; }
>         state = 0;
>         break;
>       case 4: /* + \r */
>         if (ch == '\n') { state = 1; break; }
>         if (ch != '\r') { put("\r"); state = 0; }
>     }
>     put(&ch);
>   }
> } 
> 
> char accept_buf[FMT_ULONG];
> void acceptmessage(qp) unsigned long qp;
> {
>   datetime_sec when;
>   when = now();
>   out("250 ok ");
>   accept_buf[fmt_ulong(accept_buf,(unsigned long) when)] = 0;
>   out(accept_buf);
>   out(" qp ");
>   accept_buf[fmt_ulong(accept_buf,qp)] = 0;
>   out(accept_buf);
>   out("\r\n");
> } 
> 
> void smtp_data() {
>   int hops;
>   unsigned long qp;
>   char *qqx;
>   char HeloLine[256]; 
> 
>   if (!seenmail) { err_wantmail(); return; }
>   if (!rcptto.len) { err_wantrcpt(); return; }
> #ifdef USE_SMTPAUTH
>   if ((!verified)&&(rejectrcpt)) { err_verify(); return; }
>   verified = 0;
> #endif
>   seenmail = 0;
>   if (databytes) bytestooverflow = databytes + 1;
>   if (qmail_open(&qqt) == -1) { err_qqt(); return; }
>   qp = qmail_qp(&qqt);
>   out("354 go ahead\r\n");
> #ifdef USE_SMTPAUTH
>   sprintf(HeloLine,"Authorized_User_%s__http://www.mailthai.com_",Login);
>   received(&qqt,"SMTP",local,remoteip,remotehost,remoteinfo,HeloLine);
> #else
>   received(&qqt,"SMTP",local,remoteip,remotehost,remoteinfo,fakehelo);
> #endif
>   blast(&hops);
>   hops = (hops >= MAXHOPS);
>   if (hops) qmail_fail(&qqt);
> #ifdef USE_SMTPAUTH
>   qmail_from(&qqt,Login);
> #else
>   qmail_from(&qqt,mailfrom.s);
> #endif
>   qmail_put(&qqt,rcptto.s,rcptto.len); 
> 
>   qqx = qmail_close(&qqt);
>   if (!*qqx) { acceptmessage(qp); return; }
>   if (hops) { out("554 too many hops, this message is looping
> (#5.4.6)\r\n"); return; }
>   if (databytes) if (!bytestooverflow) { out("552 sorry, that message size
> exceeds my databytes limit (#5.3.4)\r\n"); 
> 
> return; }
>   if (*qqx == 'D') out("554 "); else out("451 ");
>   out(qqx + 1);
>   out("\r\n");
> } 
> 
> #ifdef USE_SMTPAUTH
> static unsigned char *base64_alphabet =
> "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
> static int unbase64(ch) int ch; {
>   int i;
>   if (ch == '=') return 0;
>   for (i = 0; i < 64; i++)
>     if (ch == base64_alphabet[i])
>       return i;
>   return 0;
> }
> static int base64_dec_buffer(str,dst,len) const char *str;void *dst;int len;
> {
>   int i, j, l;
>   unsigned char input[4], output[3], *result = (char *)dst;
>   if (str == 0)
>     return 0;
>   l = str_len(str);
>   if (dst == 0 || l > len)
>     return (l / 4) * 3;
>   memset(dst,0,len);
>   for (i=j=0; i<l; i +=4) {
>     input[0] = unbase64(str[i]);
>     input[1] = unbase64(str[i+1]);
>     input[2] = unbase64(str[i+2]);
>     input[3] = unbase64(str[i+3]);
>     output[0] = (input[0] << 2) | (input[1] >> 4);
>     output[1] = (input[1] << 4) | (input[2] >> 2);
>     output[2] = (input[2] << 6) | (input[3]);
>     result[j] = output[0];
>     if (str[i+1] == '=') return j+1;
>     result[j+1]=output[1];
>     if (str[i+2] == '=') return j+2;
>     result[j+2]=output[2];
>     j += 3;
>   }
>   return j;
> }
> static stralloc smtpauth = {0};
> static char smtpauthlogin[65];
> static char smtpauthpass[65];
> static int smtpauth_getl(void) {
>   int i;
>   if (!stralloc_copys(&smtpauth, "")) return -1;
>   for (;;) {
>     if (!stralloc_readyplus(&smtpauth,1)) return -1;
>     i = substdio_get(&ssin, smtpauth.s + smtpauth.len, 1);
>     if (i != 1) return i;
>     if (smtpauth.s[smtpauth.len] == '\n') break;
>     ++smtpauth.len;
>   }
>   if (smtpauth.len > 0) if (smtpauth.s[smtpauth.len-1] ==
> '\r') --smtpauth.len;
>   smtpauth.s[smtpauth.len] = 0;
>   return smtpauth.len;
> }
> static char **smtpauth_argv;
> void smtp_auth(arg) char *arg; {
>   int st, pid, fds[2];
>   /* netscape 4.5 sends AUTH LOGIN <base64encodedusername>
>      microsoft outlook express sends AUTH LOGIN 
> 
>      idea is simple 
> 
>      use an external program to test authority
>      if success, set 'RELAYCLIENT'
>      otherwise, let them know nicely (hangup) 
> 
>      note, i really don't like djb's coding style even though i'm using it
> here.
>      i think using spaces for tabs is bad.
>                                                 [EMAIL PROTECTED]
>   */
>   while (arg && *arg && *arg != ' ') arg++; 
> 
>   /* pass over the space */
>   while (arg && *arg && *arg == ' ') arg++; 
> 
>   if (arg && *arg) {
>     /* here's the base64 encoded login */
>     base64_dec_buffer(arg, smtpauthlogin, sizeof(smtpauthlogin));
>   } else {
>     out("334 VXNlcm5hbWU6\r\n"); /* b64 <- 'Username:' */
>     flush();
>     if (smtpauth_getl() > 0)
>       base64_dec_buffer(smtpauth.s, smtpauthlogin, sizeof(smtpauthlogin));
>     else
>       die_read();
>   }
>   out("334 UGFzc3dvcmQ6\r\n"); /* b64 <- 'Password:' */
>   flush();
>   if (smtpauth_getl() > 0)
>     base64_dec_buffer(smtpauth.s, smtpauthpass, sizeof(smtpauthpass));
>   else
>     die_read(); 
> 
>   if (VerifyUser(smtpauthlogin,smtpauthpass) == 0) {
>    out("235 ");
>    out(smtpauthlogin);
>    out("(Base64) Passed\r\n");
>     flush();
>     relayclient="";
>     return;
>   } 
> 
>   sleep(2); 
> 
>   out("535 auth failure\r\n"); flush(); _exit(0);
>   /* done */
> }
> #endif 
> 
> struct commands smtpcommands[] = {
>   { "rcpt", smtp_rcpt, 0 }
> , { "mail", smtp_mail, 0 }
> , { "data", smtp_data, flush }
> #ifdef USE_SMTPAUTH
> , { "auth", smtp_auth, flush }
> #endif
> , { "quit", smtp_quit, flush }
> , { "helo", smtp_helo, flush }
> , { "ehlo", smtp_ehlo, flush }
> , { "rset", smtp_rset, 0 }
> , { "help", smtp_help, flush }
> , { "noop", err_noop, flush }
> , { "vrfy", err_vrfy, flush }
> , { 0, err_unimpl, flush }
> } ; 
> 
> void main(argc,argv) int argc; char **argv;
> {
> #ifdef USE_SMTPAUTH
>   char *u; 
> 
>   smtpauth_argv = argv;
> #endif
>   sig_pipeignore();
>   if (chdir(auto_qmail) == -1) die_control();
>   setup();
>   if (ipme_init() != 1) die_ipme();
>   smtp_greet("220 ");
>   out(" ESMTP\r\n");
>   if (commands(&ssin,&smtpcommands) == 0) die_read();
>   die_nomem();
> } 
> 
> ------ cut
> ----- Original Message -----
> From: "Javier Frias" <[EMAIL PROTECTED]>
> To: "Ken Jones" <[EMAIL PROTECTED]>
> Cc: <[EMAIL PROTECTED]>
> Sent: Thursday, April 26, 2001 10:31 AM
> Subject: Re: smtpd auth issue 
> 
> 
>>
>> yep, i tried that, still letting every username/pass thru.. 
>>
>> I mean, the odd part is,
>> should it fail if it doesn't find the auth program? or if  the password
>> checking fails? 
>>
>> here's some food for thought: 
>>
>> is i change it to
>>  -u $QMAILUID -g $NOFILESGID 0 smtp rblsmtpd qmail-smtpd test.com
>> /home/vpopmail/bin/vchkpw /usr/bin/true 2>&1 
>>
>> as the faq says.. 
>>
>> i get these... 
>>
>> Apr 26 02:22:35 abfm vpopmail[22502]: vchkpw: No user found
>> [EMAIL PROTECTED]:10.4.8.138
>> Apr 26 02:22:43 abfm vpopmail[22504]: vchkpw: No user found
>> [EMAIL PROTECTED]:10.4.8.138
>> Apr 26 02:22:59 abfm vpopmail[22506]: vchkpw: No user found
>> [EMAIL PROTECTED]:10.4.8.138 
>>
>> interesting no? 
>>
>> the same user names without the domain let me in before... and it's
>> odviously
>> trying to check right? 
>>
>> even if i change it to localhost ( testing) 
>>
>> i still get some more 
>>
>> Apr 26 02:28:08 abfm vpopmail[22551]: vchkpw: No user found
>> [EMAIL PROTECTED]:10.4.8.138
>> Apr 26 02:28:17 abfm vpopmail[22556]: vchkpw: No user found
>> [EMAIL PROTECTED]:10.4.8.138
>> Apr 26 02:28:52 abfm vpopmail[22570]: vchkpw: No user found
>> [EMAIL PROTECTED]:10.4.8.138
>> Apr 26 02:28:57 abfm vpopmail[22572]: vchkpw: No user found
>> [EMAIL PROTECTED]:10.4.8.138 
>>
>> ( just in case, the account validates with pop3) 
>>
>> do you know the syntax for connecting to port 25 and doing smtp auth,
> maybe
>> it gives a meaning full message there ( like the loveable vpopmail
>> failed to mkdir ones i grew to love hehe) 
>>
>>
>> well, am gonna keep tryign combinations... and maybe see if i can pin
>> point somthing in the code, although i doubt it's something iw ill be able
>> to pick up.. 
>>
>>
>> any other pointers :( 
>>
>> 
>>
>> 
>>
>>
>> Ken Jones writes: 
>>
>> > Javier Frias wrote:
>> >>
>> >> Anyone ever encountered this... using the latest version found here
>> >> http://members.elysium.pl/brush/qmail-smtpd-auth/index.html
>> >>
>> >> and vpopmail 4.9.10....
>> >>
>> >> and calling smtpd like this...
>> >>
>> >> #!/bin/sh
>> >> PATH=/var/qmail/bin:/usr/local/bin:/usr/bin:/bin
>> >> export PATH
>> >> QMAILUID=`id -u vpopmail`
>> >> NOFILESGID=`id -g vpopmail`
>> >> MAXSMTPD=`cat /var/qmail/control/concurrencyincoming`
>> >>
>> >> exec softlimit -m 2000000 tcpserver -p -R -x
> ~vpopmail/etc/tcp.smtp.cdb -c
>> >> "$MAXSMTPD" \
>> >>  -u $QMAILUID -g $NOFILESGID 0 smtp rblsmtpd qmail-smtpd
> ~vpopmail/bin/vchkpw
>> >> /usr/bin/true 2>&1
>> >>
>> >> smtp auth takes ANY username password combination... it still requires
> you
>> >> to imput a password..
>> >> but it  just lets anything thru.... anyone ever seen these? am i doing
>> >> something wrong?
>> >
>> > the " ~vpopmail/" text looks suspicious. Not all shells expland the
>> > character. It is better to set it explicitly. Make this change and
>> > try again.
>> > --
>> > Ken Jones
>> > "Live Free, Live GPL"
>> > http://www.inter7.com/ 
>>
>> <!--|Thai Community Sponsor|--!>
>> Thai Community TEXT/PLAIN 
>>
>> 
>>
>>
> 
 

Reply via email to