diff -ur --new-file popa3d-0.4.orig/Makefile popa3d-0.4/Makefile --- popa3d-0.4.orig/Makefile Tue Aug 29 03:59:09 2000 +++ popa3d-0.4/Makefile Tue Aug 29 03:58:00 2000 @@ -1,10 +1,35 @@ CC = gcc LD = gcc RM = rm -f -CFLAGS = -c -Wall -O2 -fomit-frame-pointer + +CFLAGS = $(FLAGDB) $(FLAGCR) -c -Wall -O2 -pedantic -fomit-frame-pointer LDFLAGS = -s #LDFLAGS = -s -lcrypt +#Uncomment to use db1 +#Needed under my linux +#LIBDB = -ldb1 +#Nothing needed under my freebsd + +#_or_ uncomment to use gdbm +#FLAGDB = -DGDBM +#Needed under my linux +#LIBDB = -lgdbm +#Needed under my freebsd +#LIBDB = -L/usr/local/lib -lgdbm + +#Uncomment to use OpenSSL +#Needed under my linux +#FLAGCR = -DUSEOPENSSL -I/usr/local/ssl/include +#LIBCR = -L/usr/local/ssl/lib -lcrypto +#Needed under my freebsd +#FLAGCR = -DUSEOPENSSL -I/usr/local/include +#LIBCR = -L/usr/local/lib -lcrypto + +#_or_ uncomment to use system md5 +#Needed under my freebsd +LIBCR = -lmd + PROJ = popa3d OBJS = md5/md5.o \ standalone.o \ @@ -12,13 +37,16 @@ protocol.o database.o mailbox.o \ misc.o -all: popauth popa3d +all: popauth popa3d apop + +apop: apop.o + $(LD) $(LDFLAGS) -o $@ apop.o $(LIBCR) popauth: popauth.o - $(LD) $(LDFLAGS) -o $@ popauth.o + $(LD) $(LDFLAGS) -o $@ popauth.o $(LIBDB) popa3d: $(OBJS) - $(LD) $(LDFLAGS) $(OBJS) -o popa3d + $(LD) $(LDFLAGS) $(OBJS) -o popa3d $(LIBDB) $(LIBCR) md5/md5.o: md5/md5.c md5/md5.h $(CC) $(CFLAGS) -D_LIBC md5/md5.c -o md5/md5.o @@ -27,4 +55,4 @@ $(CC) $(CFLAGS) $*.c clean: - $(RM) $(PROJ) $(OBJS) *.o popauth *~ + $(RM) $(PROJ) $(OBJS) *.o popauth apop *~ diff -ur --new-file popa3d-0.4.orig/apop.c popa3d-0.4/apop.c --- popa3d-0.4.orig/apop.c Thu Jan 1 01:00:00 1970 +++ popa3d-0.4/apop.c Tue Aug 29 04:02:08 2000 @@ -0,0 +1,39 @@ +#include +#ifdef USEOPENSSL +#include +#else +#include +#include +#endif + +int main (int argc, char *argv[]) +{ + int i; + MD5_CTX ctx; + unsigned char hash[16]; + static char hache[33]; + + if(argc != 3) { + fprintf(stderr, "%s clear_text_password\n", argv[0]); + return -1; + } + +#ifdef USEOPENSSL + MD5_Init(&ctx); + MD5_Update(&ctx, argv[1], strlen(argv[1])); + MD5_Update(&ctx, argv[2], strlen(argv[2])); + MD5_Final(hash, &ctx); + for (i = 0; i < 16; i++) + sprintf(hache+2*i, "%02x", hash[i]); + hache[32]=0; + printf("%s\n",hache); +#else + MD5Init(&ctx); + MD5Update(&ctx, argv[1], strlen(argv[1])); + MD5Update(&ctx, argv[2], strlen(argv[2])); + MD5End(&ctx, hash); + printf("%s\n",hash); +#endif + + return 0; +} diff -ur --new-file popa3d-0.4.orig/pop_auth.c popa3d-0.4/pop_auth.c --- popa3d-0.4.orig/pop_auth.c Tue Aug 29 03:59:09 2000 +++ popa3d-0.4/pop_auth.c Tue Aug 29 03:25:19 2000 @@ -6,6 +6,7 @@ #include #include #include +#include #include "misc.h" #include "params.h" diff -ur --new-file popa3d-0.4.orig/pop_root.c popa3d-0.4/pop_root.c --- popa3d-0.4.orig/pop_root.c Tue Aug 29 03:59:09 2000 +++ popa3d-0.4/pop_root.c Tue Aug 29 03:25:19 2000 @@ -23,9 +23,15 @@ #if AUTH_APOP #include +#ifdef USEOPENSSL +#include +#else #include +#endif #if GDBM # include +#elif __linux__ +#include #else # include #endif @@ -38,7 +44,7 @@ /* *DBM compatibility nonsense. */ #if GDBM -#define DBM GDBM_FILE +#define DB GDBM_FILE #define F_RDONLY GDBM_READER #define dbm_open(x, y, z) gdbm_open(x, 512, y, z, 0) #define dbm_fetch gdbm_fetch @@ -102,7 +108,8 @@ DB *db; datum key, value; MD5_CTX ctx; - char hash[33]; + unsigned char hash[33]; + char hache[33]; int i; pw = getpwnam(user); @@ -126,13 +133,39 @@ for (i = 0; i < value.dsize - 1; i++) value.dptr[i] ^= 0xff; +#ifdef USEOPENSSL + MD5_Init(&ctx); + MD5_Update(&ctx, challenge, strlen(challenge)); + MD5_Update(&ctx, value.dptr, strlen(value.dptr)); + MD5_Final(hash, &ctx); + for (i = 0; i < 16; i++) + sprintf(hache+2*i, "%02x", hash[i]); + hache[32]=0; +#else MD5Init(&ctx); MD5Update(&ctx, challenge, strlen(challenge)); MD5Update(&ctx, value.dptr, strlen(value.dptr)); MD5End(&ctx, hash); +#endif dbm_close(db); - + +/* +syslog(LOG_AUTH, " challenge: %s", challenge); +syslog(LOG_AUTH, "value.dptr: %s", value.dptr); +*//* Please use this for debuging purposes only *//* +syslog(LOG_AUTH, " pass: %s", pass); +#ifdef USEOPENSSL +syslog(LOG_AUTH, " hache: %s", hache); +#else +syslog(LOG_AUTH, " hash: %s", hash); +#endif +*/ + +#ifdef USEOPENSSL + if (strcmp(pass, hache)) pw = NULL; +#else if (strcmp(pass, hash)) pw = NULL; +#endif return (pw); } diff -ur --new-file popa3d-0.4.orig/popauth.c popa3d-0.4/popauth.c --- popa3d-0.4.orig/popauth.c Tue Aug 29 03:59:09 2000 +++ popa3d-0.4/popauth.c Tue Aug 29 03:25:19 2000 @@ -41,6 +41,8 @@ #include #if GDBM # include +#elif __linux__ +#include #else # include #endif @@ -49,7 +51,7 @@ /* *DBM compatibility nonsense. */ #if GDBM -#define DBM GDBM_FILE +#define DB GDBM_FILE #define F_WRCREAT GDBM_WRCREAT #define F_RDONLY GDBM_READER #define F_RDWR GDBM_WRITER @@ -59,6 +61,8 @@ #define dbm_fetch gdbm_fetch #define dbm_delete gdbm_delete #define dbm_close gdbm_close +#define dbm_nextkey gdbm_nextkey +#define DBM_REPLACE GDBM_REPLACE #else #define F_WRCREAT O_RDWR|O_CREAT #define F_RDONLY O_RDONLY @@ -201,7 +205,11 @@ } else { for (key = dbm_firstkey(db); key.dptr != NULL; +#ifdef GDBM + key = dbm_nextkey(db, key)) { +#else key = dbm_nextkey(db)) { +#endif value = dbm_fetch(db, key); if (value.dptr != NULL)