Factor out fetching of password and move it to the code that uses
it. This code would not hurt by factoring out some more code... git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@21181 ec53bebd-3082-4978-b11e-865c3cabbd6b
This commit is contained in:
77
kdc/digest.c
77
kdc/digest.c
@@ -156,6 +156,44 @@ static const unsigned char ms_rfc3079_magic1[27] = {
|
|||||||
0x61, 0x73, 0x74, 0x65, 0x72, 0x20, 0x4b, 0x65, 0x79
|
0x61, 0x73, 0x74, 0x65, 0x72, 0x20, 0x4b, 0x65, 0x79
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/*
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
static krb5_error_code
|
||||||
|
get_password_entry(krb5_context context,
|
||||||
|
krb5_kdc_configuration *config,
|
||||||
|
const char *username,
|
||||||
|
char **password)
|
||||||
|
{
|
||||||
|
krb5_principal clientprincipal;
|
||||||
|
krb5_error_code ret;
|
||||||
|
hdb_entry_ex *user;
|
||||||
|
HDB *db;
|
||||||
|
|
||||||
|
/* get username */
|
||||||
|
ret = krb5_parse_name(context, username, &clientprincipal);
|
||||||
|
if (ret)
|
||||||
|
return ret;
|
||||||
|
|
||||||
|
ret = _kdc_db_fetch(context, config, clientprincipal,
|
||||||
|
HDB_F_GET_CLIENT, &db, &user);
|
||||||
|
krb5_free_principal(context, clientprincipal);
|
||||||
|
if (ret)
|
||||||
|
return ret;
|
||||||
|
|
||||||
|
ret = hdb_entry_get_password(context, db, &user->entry, password);
|
||||||
|
if (ret || password == NULL) {
|
||||||
|
if (ret == 0) {
|
||||||
|
ret = EINVAL;
|
||||||
|
krb5_set_error_string(context, "password missing");
|
||||||
|
}
|
||||||
|
memset(user, 0, sizeof(*user));
|
||||||
|
}
|
||||||
|
_kdc_free_ent (context, user);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
@@ -461,9 +499,6 @@ _kdc_do_digest(krb5_context context,
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case choice_DigestReqInner_digestRequest: {
|
case choice_DigestReqInner_digestRequest: {
|
||||||
krb5_principal clientprincipal;
|
|
||||||
HDB *db;
|
|
||||||
|
|
||||||
sp = krb5_storage_emem();
|
sp = krb5_storage_emem();
|
||||||
if (sp == NULL) {
|
if (sp == NULL) {
|
||||||
ret = ENOMEM;
|
ret = ENOMEM;
|
||||||
@@ -571,29 +606,6 @@ _kdc_do_digest(krb5_context context,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* get username */
|
|
||||||
ret = krb5_parse_name(context,
|
|
||||||
ireq.u.digestRequest.username,
|
|
||||||
&clientprincipal);
|
|
||||||
if (ret)
|
|
||||||
goto out;
|
|
||||||
|
|
||||||
ret = _kdc_db_fetch(context, config, clientprincipal,
|
|
||||||
HDB_F_GET_CLIENT, &db, &user);
|
|
||||||
|
|
||||||
krb5_free_principal(context, clientprincipal);
|
|
||||||
if (ret)
|
|
||||||
goto out;
|
|
||||||
|
|
||||||
ret = hdb_entry_get_password(context, db, &user->entry, &password);
|
|
||||||
if (ret || password == NULL) {
|
|
||||||
if (ret == 0) {
|
|
||||||
ret = EINVAL;
|
|
||||||
krb5_set_error_string(context, "password missing");
|
|
||||||
}
|
|
||||||
goto out;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (strcasecmp(ireq.u.digestRequest.type, "CHAP") == 0) {
|
if (strcasecmp(ireq.u.digestRequest.type, "CHAP") == 0) {
|
||||||
MD5_CTX ctx;
|
MD5_CTX ctx;
|
||||||
unsigned char md[MD5_DIGEST_LENGTH];
|
unsigned char md[MD5_DIGEST_LENGTH];
|
||||||
@@ -618,6 +630,12 @@ _kdc_do_digest(krb5_context context,
|
|||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ret = get_password_entry(context, config,
|
||||||
|
ireq.u.digestRequest.username,
|
||||||
|
&password);
|
||||||
|
if (ret)
|
||||||
|
goto out;
|
||||||
|
|
||||||
MD5_Init(&ctx);
|
MD5_Init(&ctx);
|
||||||
MD5_Update(&ctx, &id, 1);
|
MD5_Update(&ctx, &id, 1);
|
||||||
MD5_Update(&ctx, password, strlen(password));
|
MD5_Update(&ctx, password, strlen(password));
|
||||||
@@ -664,6 +682,12 @@ _kdc_do_digest(krb5_context context,
|
|||||||
if (ireq.u.digestRequest.realm == NULL)
|
if (ireq.u.digestRequest.realm == NULL)
|
||||||
goto out;
|
goto out;
|
||||||
|
|
||||||
|
ret = get_password_entry(context, config,
|
||||||
|
ireq.u.digestRequest.username,
|
||||||
|
&password);
|
||||||
|
if (ret)
|
||||||
|
goto out;
|
||||||
|
|
||||||
MD5_Init(&ctx);
|
MD5_Init(&ctx);
|
||||||
MD5_Update(&ctx, ireq.u.digestRequest.username,
|
MD5_Update(&ctx, ireq.u.digestRequest.username,
|
||||||
strlen(ireq.u.digestRequest.username));
|
strlen(ireq.u.digestRequest.username));
|
||||||
@@ -758,6 +782,7 @@ _kdc_do_digest(krb5_context context,
|
|||||||
|
|
||||||
} else if (strcasecmp(ireq.u.digestRequest.type, "MS-CHAP-V2") == 0) {
|
} else if (strcasecmp(ireq.u.digestRequest.type, "MS-CHAP-V2") == 0) {
|
||||||
unsigned char md[SHA_DIGEST_LENGTH], challange[SHA_DIGEST_LENGTH];
|
unsigned char md[SHA_DIGEST_LENGTH], challange[SHA_DIGEST_LENGTH];
|
||||||
|
krb5_principal clientprincipal = NULL;
|
||||||
char *mdx;
|
char *mdx;
|
||||||
const char *username;
|
const char *username;
|
||||||
struct ntlm_buf answer;
|
struct ntlm_buf answer;
|
||||||
|
Reference in New Issue
Block a user