Use get_init_creds/verify_init_creds.
git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@3397 ec53bebd-3082-4978-b11e-865c3cabbd6b
This commit is contained in:
@@ -40,7 +40,7 @@
|
|||||||
|
|
||||||
RCSID("$Id$");
|
RCSID("$Id$");
|
||||||
|
|
||||||
int
|
krb5_error_code
|
||||||
krb5_verify_user(krb5_context context,
|
krb5_verify_user(krb5_context context,
|
||||||
krb5_principal principal,
|
krb5_principal principal,
|
||||||
krb5_ccache ccache,
|
krb5_ccache ccache,
|
||||||
@@ -48,73 +48,59 @@ krb5_verify_user(krb5_context context,
|
|||||||
int secure,
|
int secure,
|
||||||
const char *service)
|
const char *service)
|
||||||
{
|
{
|
||||||
|
|
||||||
krb5_error_code ret;
|
krb5_error_code ret;
|
||||||
krb5_creds creds;
|
krb5_creds cred;
|
||||||
char *realm;
|
krb5_principal client, server;
|
||||||
krb5_enctype *etypes;
|
krb5_get_init_creds_opt opt;
|
||||||
|
krb5_verify_init_creds_opt vopt;
|
||||||
|
krb5_ccache id;
|
||||||
|
|
||||||
memset(&creds, 0, sizeof(creds));
|
krb5_get_init_creds_opt_init (&opt);
|
||||||
ret = krb5_copy_principal(context, principal, &creds.client);
|
|
||||||
if(ret){
|
ret = krb5_get_init_creds_password (context,
|
||||||
return ret;
|
&cred,
|
||||||
}
|
principal,
|
||||||
ret = krb5_get_default_realm(context, &realm);
|
(char*)password,
|
||||||
if(ret){
|
NULL,
|
||||||
return ret;
|
NULL,
|
||||||
}
|
|
||||||
ret = krb5_build_principal(context, &creds.server,
|
|
||||||
strlen(realm),
|
|
||||||
realm,
|
|
||||||
"krbtgt",
|
|
||||||
realm,
|
|
||||||
NULL);
|
|
||||||
if(ret){
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
ret = krb5_get_in_tkt_with_password(context,
|
|
||||||
0,
|
0,
|
||||||
NULL,
|
NULL,
|
||||||
NULL,
|
&opt);
|
||||||
NULL,
|
|
||||||
password,
|
|
||||||
ccache,
|
|
||||||
&creds,
|
|
||||||
NULL);
|
|
||||||
if(ret)
|
|
||||||
return ret;
|
|
||||||
|
|
||||||
if(secure){
|
if(ret) return ret;
|
||||||
krb5_auth_context auth_context = NULL;
|
|
||||||
krb5_data req;
|
ret = krb5_sname_to_principal (context, NULL, service, KRB5_NT_SRV_HST,
|
||||||
|
&server);
|
||||||
ret = krb5_mk_req(context, &auth_context,
|
if(ret) return ret;
|
||||||
0,
|
|
||||||
(char*)service,
|
krb5_verify_init_creds_opt_init(&vopt);
|
||||||
NULL,
|
krb5_verify_init_creds_opt_set_ap_req_nofail(&vopt, secure);
|
||||||
NULL,
|
|
||||||
ccache,
|
ret = krb5_verify_init_creds(context,
|
||||||
&req);
|
&cred,
|
||||||
if(ret){
|
server,
|
||||||
/* */
|
NULL,
|
||||||
return ret;
|
NULL,
|
||||||
|
&vopt);
|
||||||
|
krb5_free_principal(context, server);
|
||||||
|
if(ret) return ret;
|
||||||
|
if(ccache == NULL)
|
||||||
|
ret = krb5_cc_default (context, &id);
|
||||||
|
else
|
||||||
|
id = ccache;
|
||||||
|
if(ret == 0){
|
||||||
|
ret = krb5_cc_get_principal(context, id, &client);
|
||||||
|
if(ret == 0){
|
||||||
|
ret = krb5_cc_initialize(context, id, client);
|
||||||
|
if(ret == 0){
|
||||||
|
ret = krb5_cc_store_cred(context, id, &cred);
|
||||||
|
}
|
||||||
|
krb5_free_principal(context, client);
|
||||||
}
|
}
|
||||||
krb5_auth_con_free(context, auth_context);
|
if(ccache == NULL)
|
||||||
auth_context = NULL;
|
krb5_cc_close(context, id);
|
||||||
|
|
||||||
ret = krb5_rd_req(context,
|
|
||||||
&auth_context,
|
|
||||||
&req,
|
|
||||||
NULL,
|
|
||||||
NULL,
|
|
||||||
NULL,
|
|
||||||
NULL);
|
|
||||||
|
|
||||||
if(ret){
|
|
||||||
/* */
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
krb5_data_free(&req);
|
|
||||||
}
|
}
|
||||||
return 0;
|
krb5_free_creds_contents(context, &cred);
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user