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:
		 Roland C. Dowdeswell
					Roland C. Dowdeswell
				
			
				
					committed by
					
						 Nicolas Williams
						Nicolas Williams
					
				
			
			
				
	
			
			
			 Nicolas Williams
						Nicolas Williams
					
				
			
						parent
						
							00bea41dcb
						
					
				
				
					commit
					af011f57fc
				
			| @@ -600,12 +600,13 @@ krb5_error_code | ||||
| hdb_generate_key_set_password(krb5_context context, | ||||
| 			      krb5_principal principal, | ||||
| 			      const char *password, | ||||
| 			      krb5_key_salt_tuple *ks_tuple, int n_ks_tuple,  | ||||
| 			      Key **keys, size_t *num_keys) | ||||
| { | ||||
|     krb5_error_code ret; | ||||
|     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); | ||||
|     if (ret) | ||||
| 	return ret; | ||||
|   | ||||
| @@ -94,7 +94,7 @@ main(int argc, char **argv) | ||||
|     *keyset.set_time = time(NULL); | ||||
|  | ||||
|     ret = hdb_generate_key_set_password(context, principal, password_str, | ||||
| 					&keyset.keys.val, &len); | ||||
| 					NULL, 0, &keyset.keys.val, &len); | ||||
|     if (ret) | ||||
| 	krb5_err(context, 1, ret, "hdb_generate_key_set_password"); | ||||
|     keyset.keys.len = len; | ||||
|   | ||||
| @@ -509,6 +509,8 @@ static kadm5_ret_t | ||||
| kadm5_ad_chpass_principal(void *server_handle, | ||||
| 			  krb5_principal principal, | ||||
| 			  int keepold, | ||||
| 			  int n_ks_tuple, | ||||
| 			  krb5_key_salt_tuple *ks_tuple, | ||||
| 			  const char *password) | ||||
| { | ||||
|     kadm5_ad_context *context = server_handle; | ||||
| @@ -519,6 +521,9 @@ kadm5_ad_chpass_principal(void *server_handle, | ||||
|     if (keepold) | ||||
| 	return KADM5_KEEPOLD_NOSUPP; | ||||
|  | ||||
|     if (n_ks_tuple > 0) | ||||
|        return KADM5_KS_TUPLE_NOSUPP; | ||||
|  | ||||
|     ret = ad_get_cred(context, NULL); | ||||
|     if (ret) | ||||
| 	return ret; | ||||
|   | ||||
| @@ -39,6 +39,8 @@ kadm5_ret_t | ||||
| kadm5_c_chpass_principal(void *server_handle, | ||||
| 			 krb5_principal princ, | ||||
| 			 int keepold, | ||||
| 			 int n_ks_tuple, | ||||
| 			 krb5_key_salt_tuple *ks_tuple, | ||||
| 			 const char *password) | ||||
| { | ||||
|     kadm5_client_context *context = server_handle; | ||||
| @@ -48,6 +50,14 @@ kadm5_c_chpass_principal(void *server_handle, | ||||
|     int32_t tmp; | ||||
|     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); | ||||
|     if(ret) | ||||
| 	return ret; | ||||
|   | ||||
| @@ -39,6 +39,8 @@ static kadm5_ret_t | ||||
| change(void *server_handle, | ||||
|        krb5_principal princ, | ||||
|        int keepold, | ||||
|        int n_ks_tuple, | ||||
|        krb5_key_salt_tuple *ks_tuple, | ||||
|        const char *password, | ||||
|        int cond) | ||||
| { | ||||
| @@ -84,7 +86,8 @@ change(void *server_handle, | ||||
| 	ent.entry.keys.len = 0; | ||||
| 	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) { | ||||
| 	    _kadm5_free_keys(context->context, num_keys, keys); | ||||
| 	    goto out2; | ||||
| @@ -165,7 +168,7 @@ kadm5_s_chpass_principal_cond(void *server_handle, | ||||
| 			      int keepold, | ||||
| 			      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, | ||||
| 			 krb5_principal princ, | ||||
| 			 int keepold, | ||||
| 			 int n_ks_tuple, | ||||
| 			 krb5_key_salt_tuple *ks_tuple, | ||||
| 			 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, | ||||
| 		       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 | ||||
| @@ -53,14 +54,8 @@ kadm5_chpass_principal_3(void *server_handle, | ||||
| 		         krb5_key_salt_tuple *ks_tuple, | ||||
| 		         const char *password) | ||||
| { | ||||
|     /* | ||||
|      * We should get around to implementing this...  This can be useful | ||||
|      * 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)); | ||||
|     return __CALL(chpass_principal, (server_handle, princ, keepold, | ||||
| 		  n_ks_tuple, ks_tuple, password)); | ||||
| } | ||||
|  | ||||
| kadm5_ret_t | ||||
|   | ||||
| @@ -178,7 +178,7 @@ kadm5_s_create_principal(void *server_handle, | ||||
|     ent.entry.keys.len = 0; | ||||
|     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) | ||||
| 	goto out; | ||||
|  | ||||
|   | ||||
| @@ -37,7 +37,8 @@ | ||||
| #define __kadm5_privatex_h__ | ||||
|  | ||||
| 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, | ||||
| 				     uint32_t, const char*); | ||||
|     kadm5_ret_t (*delete_principal) (void*, krb5_principal); | ||||
|   | ||||
| @@ -42,6 +42,8 @@ RCSID("$Id$"); | ||||
| kadm5_ret_t | ||||
| _kadm5_set_keys(kadm5_server_context *context, | ||||
| 		hdb_entry *ent, | ||||
| 		int n_ks_tuple, | ||||
| 		krb5_key_salt_tuple *ks_tuple, | ||||
| 		const char *password) | ||||
| { | ||||
|     Key *keys; | ||||
| @@ -50,7 +52,9 @@ _kadm5_set_keys(kadm5_server_context *context, | ||||
|  | ||||
|     ret = hdb_generate_key_set_password(context->context, | ||||
| 					ent->principal, | ||||
| 					password, &keys, &num_keys); | ||||
| 					password, | ||||
| 					ks_tuple, n_ks_tuple,  | ||||
| 					&keys, &num_keys); | ||||
|     if (ret) | ||||
| 	return ret; | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user