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
>>
>>
>>
>>
>