diff --git a/appl/ftp/ftpd/klogin.c b/appl/ftp/ftpd/klogin.c new file mode 100644 index 000000000..202d0d908 --- /dev/null +++ b/appl/ftp/ftpd/klogin.c @@ -0,0 +1,61 @@ +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include +#include +#include +#include + +RCSID("$Id$"); + +int +klogin(char *name, char *password) +{ + int kerror; + KTEXT_ST tkt; + AUTH_DAT ad; + char hostname[MAXHOSTNAMELEN]; + char realm[REALM_SZ]; + + char *phost; + + struct hostent *hp; + + gethostname(hostname); + phost = krb_get_phost(hostname); + + krb_get_lrealm(realm, 0); + + kerror = krb_get_pw_in_tkt(name, "", realm, + "krbtgt", realm, + 12, password); + if(kerror) + return kerror; + + kerror = krb_mk_req(&tkt, "rcmd", phost, realm, 33); + if (kerror){ + dest_tkt(); + return kerror; + } + + hp = gethostbyname(hostname); + + if(!hp){ + dest_tkt(); + return -1; + } + + kerror = krb_rd_req(&tkt, "rcmd", phost, *(unsigned int*)(hp->h_addr), + &ad, ""); + + if(kerror){ + dest_tkt(); + return kerror; + } + if(k_hasafs()) + k_afsklog(0, 0); + + return 0; +}