diff -c -r wu-ftpd-2.4.2-beta-15-orig/config.h wu-ftpd-2.4.2-beta-15-dce-1.0/config.h *** wu-ftpd-2.4.2-beta-15-orig/config.h Fri Sep 12 08:44:00 1997 --- wu-ftpd-2.4.2-beta-15-dce-1.0/config.h Thu Dec 18 09:59:27 1997 *************** *** 74,76 **** --- 74,83 ---- #undef SKEY + /* + * DCE + * Add support for DCE authentication + * + */ + + #define DCE diff -c -r wu-ftpd-2.4.2-beta-15-orig/src/ftpd.c wu-ftpd-2.4.2-beta-15-dce-1.0/src/ftpd.c *** wu-ftpd-2.4.2-beta-15-orig/src/ftpd.c Fri Sep 12 08:42:46 1997 --- wu-ftpd-2.4.2-beta-15-dce-1.0/src/ftpd.c Thu Dec 18 09:59:26 1997 *************** *** 141,146 **** --- 141,151 ---- #include #endif + #ifdef DCE + #include + #include + #endif + #ifdef ULTRIX_AUTH #include #include *************** *** 349,354 **** --- 354,365 ---- char krb_ticket_name[100]; #endif /* KERBEROS */ + #ifdef DCE + static int dce_check_pass(char *passwd); + static error_status_t dce_st; + static sec_login_handle_t login_context; + #endif + #ifdef ULTRIX_AUTH int ultrix_check_pass(char *passwd, char *xpasswd); #endif *************** *** 1433,1438 **** --- 1444,1452 ---- #endif #endif #endif + #ifdef DCE + if (dce_check_pass(passwd)) { + #else #ifdef ULTRIX_AUTH if ((numfails = ultrix_check_pass(passwd, xpasswd)) >= 0) { #else *************** *** 1443,1448 **** --- 1457,1463 ---- #endif strcmp(xpasswd, pw->pw_passwd) == 0) { #endif + #endif rval = 0; } if(rval){ *************** *** 3222,3227 **** --- 3237,3245 ---- close (data); /* H* fix: clean up a little better */ close (pdata); /* beware of flushing buffers after a SIGPIPE */ + #ifdef DCE + sec_login_purge_context(&login_context, &dce_st); + #endif _exit(status); } *************** *** 3772,3777 **** --- 3790,3853 ---- unlink(krb_ticket_name); } #endif /* KERBEROS */ + + #ifdef DCE /* DCE authentication code by Paul Henson */ + static int dce_check_pass(char *passwd) + { + dce_error_string_t dce_error; + int dce_error_st; + sec_login_auth_src_t auth_src; + sec_passwd_rec_t pw_entry; + sec_passwd_str_t dce_pw; + boolean32 reset_passwd; + + if (pw == NULL) + return 0; + + if (!sec_login_setup_identity(pw->pw_name, sec_login_no_flags, &login_context, &dce_st)) + { + dce_error_inq_text(dce_st, dce_error, &dce_error_st); + syslog(LOG_NOTICE, "setup identity failed for %s - %s", pw->pw_name, dce_error); + sec_login_purge_context(&login_context, &dce_st); + return 0; + } + + pw_entry.version_number = sec_passwd_c_version_none; + pw_entry.pepper = NULL; + pw_entry.key.key_type = sec_passwd_plain; + + strncpy( (char *)dce_pw, passwd, sec_passwd_str_max_len); + dce_pw[sec_passwd_str_max_len] = '\0'; + pw_entry.key.tagged_union.plain = &(dce_pw[0]); + + if (!sec_login_valid_and_cert_ident(login_context, &pw_entry, &reset_passwd, + &auth_src, &dce_st)) + { + dce_error_inq_text(dce_st, dce_error, &dce_error_st); + syslog(LOG_NOTICE, "valid_and_cert identity failed for %s - %s", pw->pw_name, dce_error); + sec_login_purge_context(&login_context, &dce_st); + return 0; + } + + if (auth_src != sec_login_auth_src_network) + { + sec_login_purge_context(&login_context, &dce_st); + syslog(LOG_NOTICE, "no network creds for %s", pw->pw_name); + return 0; + } + + sec_login_set_context(login_context, &dce_st); + if (dce_st) + { + dce_error_inq_text(dce_st, dce_error, &dce_error_st); + syslog(LOG_NOTICE, "set context failed for %s - %s", pw->pw_name, dce_error); + sec_login_purge_context(&login_context, &dce_st); + return 0; + } + + return 1; + } + #endif #ifdef ULTRIX_AUTH static int diff -c -r wu-ftpd-2.4.2-beta-15-orig/src/makefiles/Makefile.aix wu-ftpd-2.4.2-beta-15-dce-1.0/src/makefiles/Makefile.aix *** wu-ftpd-2.4.2-beta-15-orig/src/makefiles/Makefile.aix Mon Aug 11 20:43:36 1997 --- wu-ftpd-2.4.2-beta-15-dce-1.0/src/makefiles/Makefile.aix Thu Dec 18 09:59:25 1997 *************** *** 2,11 **** # Makefile for AIX # $Id: Makefile.aix,v 1.6 1997/08/11 08:04:38 sob Exp $ # ! CC = cc ! IFLAGS = -I.. -I../support ! LFLAGS = -L../support ! CFLAGS = -O2 ${IFLAGS} ${LFLAGS} LIBES = -lsupport -ls LIBC = /lib/libc.a LINTFLAGS= --- 2,11 ---- # Makefile for AIX # $Id: Makefile.aix,v 1.6 1997/08/11 08:04:38 sob Exp $ # ! CC = xlc_r4 ! IFLAGS = -I.. -I../support -I/usr/include/dce ! LFLAGS = -L../support -ldce -lc_r -ldcepthreads -lpthreads -lm -lc -lcurses ! CFLAGS = -O2 ${IFLAGS} ${LFLAGS} -D_DCE_PTHREADS -D_AIX41 LIBES = -lsupport -ls LIBC = /lib/libc.a LINTFLAGS= diff -c -r wu-ftpd-2.4.2-beta-15-orig/src/makefiles/Makefile.sol wu-ftpd-2.4.2-beta-15-dce-1.0/src/makefiles/Makefile.sol *** wu-ftpd-2.4.2-beta-15-orig/src/makefiles/Makefile.sol Mon Aug 11 20:43:51 1997 --- wu-ftpd-2.4.2-beta-15-dce-1.0/src/makefiles/Makefile.sol Thu Dec 18 09:59:25 1997 *************** *** 2,12 **** # $Id: Makefile.sol,v 1.6 1997/08/12 03:43:33 sob Exp sob $ # # ! CC = cc IFLAGS = -I.. -I../support LFLAGS = -L../support ! CFLAGS = -g ${IFLAGS} ${LFLAGS} ! LIBES = -lsupport -lsocket -lnsl -lgen LIBC = /lib/libc.a LINTFLAGS= LKERB = -lauth -lckrb -lkrb -ldes --- 2,12 ---- # $Id: Makefile.sol,v 1.6 1997/08/12 03:43:33 sob Exp sob $ # # ! CC = gcc IFLAGS = -I.. -I../support LFLAGS = -L../support ! CFLAGS = -O2 ${IFLAGS} ${LFLAGS} ! LIBES = -lsupport -ldce -lsocket -lnsl -lthread -lm -lgen LIBC = /lib/libc.a LINTFLAGS= LKERB = -lauth -lckrb -lkrb -ldes