Provide server side kadm5_chpass_principal_3() with ks_tuple implementation.
We enable kadm5_chpass_principal_3() in the server side of the library. The client kadm5 library calls will still return the error KAMD5_KS_TUPLE_NO_SUPP. Signed-off-by: Nicolas Williams <nico@cryptonector.com>
This commit is contained in:

committed by
Nicolas Williams

parent
00bea41dcb
commit
af011f57fc
@@ -600,12 +600,13 @@ krb5_error_code
|
|||||||
hdb_generate_key_set_password(krb5_context context,
|
hdb_generate_key_set_password(krb5_context context,
|
||||||
krb5_principal principal,
|
krb5_principal principal,
|
||||||
const char *password,
|
const char *password,
|
||||||
|
krb5_key_salt_tuple *ks_tuple, int n_ks_tuple,
|
||||||
Key **keys, size_t *num_keys)
|
Key **keys, size_t *num_keys)
|
||||||
{
|
{
|
||||||
krb5_error_code ret;
|
krb5_error_code ret;
|
||||||
size_t i;
|
size_t i;
|
||||||
|
|
||||||
ret = hdb_generate_key_set(context, principal, NULL, 0,
|
ret = hdb_generate_key_set(context, principal, ks_tuple, n_ks_tuple,
|
||||||
keys, num_keys, 0);
|
keys, num_keys, 0);
|
||||||
if (ret)
|
if (ret)
|
||||||
return ret;
|
return ret;
|
||||||
|
@@ -94,7 +94,7 @@ main(int argc, char **argv)
|
|||||||
*keyset.set_time = time(NULL);
|
*keyset.set_time = time(NULL);
|
||||||
|
|
||||||
ret = hdb_generate_key_set_password(context, principal, password_str,
|
ret = hdb_generate_key_set_password(context, principal, password_str,
|
||||||
&keyset.keys.val, &len);
|
NULL, 0, &keyset.keys.val, &len);
|
||||||
if (ret)
|
if (ret)
|
||||||
krb5_err(context, 1, ret, "hdb_generate_key_set_password");
|
krb5_err(context, 1, ret, "hdb_generate_key_set_password");
|
||||||
keyset.keys.len = len;
|
keyset.keys.len = len;
|
||||||
|
@@ -509,6 +509,8 @@ static kadm5_ret_t
|
|||||||
kadm5_ad_chpass_principal(void *server_handle,
|
kadm5_ad_chpass_principal(void *server_handle,
|
||||||
krb5_principal principal,
|
krb5_principal principal,
|
||||||
int keepold,
|
int keepold,
|
||||||
|
int n_ks_tuple,
|
||||||
|
krb5_key_salt_tuple *ks_tuple,
|
||||||
const char *password)
|
const char *password)
|
||||||
{
|
{
|
||||||
kadm5_ad_context *context = server_handle;
|
kadm5_ad_context *context = server_handle;
|
||||||
@@ -519,6 +521,9 @@ kadm5_ad_chpass_principal(void *server_handle,
|
|||||||
if (keepold)
|
if (keepold)
|
||||||
return KADM5_KEEPOLD_NOSUPP;
|
return KADM5_KEEPOLD_NOSUPP;
|
||||||
|
|
||||||
|
if (n_ks_tuple > 0)
|
||||||
|
return KADM5_KS_TUPLE_NOSUPP;
|
||||||
|
|
||||||
ret = ad_get_cred(context, NULL);
|
ret = ad_get_cred(context, NULL);
|
||||||
if (ret)
|
if (ret)
|
||||||
return ret;
|
return ret;
|
||||||
|
@@ -39,6 +39,8 @@ kadm5_ret_t
|
|||||||
kadm5_c_chpass_principal(void *server_handle,
|
kadm5_c_chpass_principal(void *server_handle,
|
||||||
krb5_principal princ,
|
krb5_principal princ,
|
||||||
int keepold,
|
int keepold,
|
||||||
|
int n_ks_tuple,
|
||||||
|
krb5_key_salt_tuple *ks_tuple,
|
||||||
const char *password)
|
const char *password)
|
||||||
{
|
{
|
||||||
kadm5_client_context *context = server_handle;
|
kadm5_client_context *context = server_handle;
|
||||||
@@ -48,6 +50,14 @@ kadm5_c_chpass_principal(void *server_handle,
|
|||||||
int32_t tmp;
|
int32_t tmp;
|
||||||
krb5_data reply;
|
krb5_data reply;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* We should get around to implementing this... At the moment, the
|
||||||
|
* the server side API is implemented but the wire protocol has not
|
||||||
|
* been updated.
|
||||||
|
*/
|
||||||
|
if (n_ks_tuple > 0)
|
||||||
|
return KADM5_KS_TUPLE_NOSUPP;
|
||||||
|
|
||||||
ret = _kadm5_connect(server_handle);
|
ret = _kadm5_connect(server_handle);
|
||||||
if(ret)
|
if(ret)
|
||||||
return ret;
|
return ret;
|
||||||
|
@@ -39,6 +39,8 @@ static kadm5_ret_t
|
|||||||
change(void *server_handle,
|
change(void *server_handle,
|
||||||
krb5_principal princ,
|
krb5_principal princ,
|
||||||
int keepold,
|
int keepold,
|
||||||
|
int n_ks_tuple,
|
||||||
|
krb5_key_salt_tuple *ks_tuple,
|
||||||
const char *password,
|
const char *password,
|
||||||
int cond)
|
int cond)
|
||||||
{
|
{
|
||||||
@@ -84,7 +86,8 @@ change(void *server_handle,
|
|||||||
ent.entry.keys.len = 0;
|
ent.entry.keys.len = 0;
|
||||||
ent.entry.keys.val = NULL;
|
ent.entry.keys.val = NULL;
|
||||||
|
|
||||||
ret = _kadm5_set_keys(context, &ent.entry, password);
|
ret = _kadm5_set_keys(context, &ent.entry, n_ks_tuple, ks_tuple,
|
||||||
|
password);
|
||||||
if(ret) {
|
if(ret) {
|
||||||
_kadm5_free_keys(context->context, num_keys, keys);
|
_kadm5_free_keys(context->context, num_keys, keys);
|
||||||
goto out2;
|
goto out2;
|
||||||
@@ -165,7 +168,7 @@ kadm5_s_chpass_principal_cond(void *server_handle,
|
|||||||
int keepold,
|
int keepold,
|
||||||
const char *password)
|
const char *password)
|
||||||
{
|
{
|
||||||
return change (server_handle, princ, keepold, password, 1);
|
return change (server_handle, princ, keepold, 0, NULL, password, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -176,9 +179,12 @@ kadm5_ret_t
|
|||||||
kadm5_s_chpass_principal(void *server_handle,
|
kadm5_s_chpass_principal(void *server_handle,
|
||||||
krb5_principal princ,
|
krb5_principal princ,
|
||||||
int keepold,
|
int keepold,
|
||||||
|
int n_ks_tuple,
|
||||||
|
krb5_key_salt_tuple *ks_tuple,
|
||||||
const char *password)
|
const char *password)
|
||||||
{
|
{
|
||||||
return change (server_handle, princ, keepold, password, 0);
|
return change (server_handle, princ, keepold,
|
||||||
|
n_ks_tuple, ks_tuple, password, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@@ -42,7 +42,8 @@ kadm5_chpass_principal(void *server_handle,
|
|||||||
krb5_principal princ,
|
krb5_principal princ,
|
||||||
const char *password)
|
const char *password)
|
||||||
{
|
{
|
||||||
return __CALL(chpass_principal, (server_handle, princ, 0, password));
|
return __CALL(chpass_principal, (server_handle, princ, 0,
|
||||||
|
0, NULL, password));
|
||||||
}
|
}
|
||||||
|
|
||||||
kadm5_ret_t
|
kadm5_ret_t
|
||||||
@@ -53,14 +54,8 @@ kadm5_chpass_principal_3(void *server_handle,
|
|||||||
krb5_key_salt_tuple *ks_tuple,
|
krb5_key_salt_tuple *ks_tuple,
|
||||||
const char *password)
|
const char *password)
|
||||||
{
|
{
|
||||||
/*
|
return __CALL(chpass_principal, (server_handle, princ, keepold,
|
||||||
* We should get around to implementing this... This can be useful
|
n_ks_tuple, ks_tuple, password));
|
||||||
* for, e.g., x-realm principals. For now we need the _3() to get
|
|
||||||
* certain applications written to the kadm5 API to build and run.
|
|
||||||
*/
|
|
||||||
if (n_ks_tuple > 0)
|
|
||||||
return KADM5_KS_TUPLE_NOSUPP;
|
|
||||||
return __CALL(chpass_principal, (server_handle, princ, keepold, password));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
kadm5_ret_t
|
kadm5_ret_t
|
||||||
|
@@ -178,7 +178,7 @@ kadm5_s_create_principal(void *server_handle,
|
|||||||
ent.entry.keys.len = 0;
|
ent.entry.keys.len = 0;
|
||||||
ent.entry.keys.val = NULL;
|
ent.entry.keys.val = NULL;
|
||||||
|
|
||||||
ret = _kadm5_set_keys(context, &ent.entry, password);
|
ret = _kadm5_set_keys(context, &ent.entry, 0, NULL, password);
|
||||||
if (ret)
|
if (ret)
|
||||||
goto out;
|
goto out;
|
||||||
|
|
||||||
|
@@ -37,7 +37,8 @@
|
|||||||
#define __kadm5_privatex_h__
|
#define __kadm5_privatex_h__
|
||||||
|
|
||||||
struct kadm_func {
|
struct kadm_func {
|
||||||
kadm5_ret_t (*chpass_principal) (void *, krb5_principal, int, const char*);
|
kadm5_ret_t (*chpass_principal) (void *, krb5_principal, int,
|
||||||
|
int, krb5_key_salt_tuple*, const char*);
|
||||||
kadm5_ret_t (*create_principal) (void*, kadm5_principal_ent_t,
|
kadm5_ret_t (*create_principal) (void*, kadm5_principal_ent_t,
|
||||||
uint32_t, const char*);
|
uint32_t, const char*);
|
||||||
kadm5_ret_t (*delete_principal) (void*, krb5_principal);
|
kadm5_ret_t (*delete_principal) (void*, krb5_principal);
|
||||||
|
@@ -42,6 +42,8 @@ RCSID("$Id$");
|
|||||||
kadm5_ret_t
|
kadm5_ret_t
|
||||||
_kadm5_set_keys(kadm5_server_context *context,
|
_kadm5_set_keys(kadm5_server_context *context,
|
||||||
hdb_entry *ent,
|
hdb_entry *ent,
|
||||||
|
int n_ks_tuple,
|
||||||
|
krb5_key_salt_tuple *ks_tuple,
|
||||||
const char *password)
|
const char *password)
|
||||||
{
|
{
|
||||||
Key *keys;
|
Key *keys;
|
||||||
@@ -50,7 +52,9 @@ _kadm5_set_keys(kadm5_server_context *context,
|
|||||||
|
|
||||||
ret = hdb_generate_key_set_password(context->context,
|
ret = hdb_generate_key_set_password(context->context,
|
||||||
ent->principal,
|
ent->principal,
|
||||||
password, &keys, &num_keys);
|
password,
|
||||||
|
ks_tuple, n_ks_tuple,
|
||||||
|
&keys, &num_keys);
|
||||||
if (ret)
|
if (ret)
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user