summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEzra Peisach <epeisach@mit.edu>2001-02-18 23:00:08 +0000
committerEzra Peisach <epeisach@mit.edu>2001-02-18 23:00:08 +0000
commitf911c6cd21855adc68c087fbc617f4b9f89b6f30 (patch)
tree22d7f791e7df99d46a1eee57e3f4a993357c9118
parentf31504873c735c5d8dc832394968de85a0790441 (diff)
downloadkrb5-f911c6cd21855adc68c087fbc617f4b9f89b6f30.tar.gz
krb5-f911c6cd21855adc68c087fbc617f4b9f89b6f30.tar.xz
krb5-f911c6cd21855adc68c087fbc617f4b9f89b6f30.zip
* server_internal.h: Add prototype for
krb5_free_key_data_contents() which really should be in libkdb. * kadm_rpc_xdr.c: Include krb5/admin_xdr.h for prototypes. * kadm_rpc.h: Add prototypes for client and server stub functions. Server functions renamed to have _svc appended. * alt_prof.c: Clean up warnings. Do not shadow index() with local variable. * admin_xdr.h: Add prototypes for xdr_nulltype(), xdr_krb5_ui_4(), xdr_krb5_int16(), xdr_krb5_key_data_nocontents(), xdr_krb5_key_salt_tuple(), xdr_krb5_tl_data(), xdr_kadm5_principal_ent_rec_v1(), xdr_cprinc3_arg(), xdr_generic_ret(0, xdr_chpass3_arg(), xdr_setv4key_arg(), xdr_setkey_arg(), xdr_setkey3_arg(), xdr_chrand3_arg(), xdr_gprincs_arg(), xdr_grpincs_ret(), xdr_gpols_arg(), xdr_gpols_ret(), xdr_getprivs_ret(), xdr_krb5_salttype(). * admin_internal.h: Add prototype for _kadm5_check_handle(). * admin.h: Add prototypes for kadm5_free_config_params(), kadm5_decrypt_key(), ovsec_kadm_free_name_list(). * adb.h: Add prototypes for xdr_osa_pw_hist_ent(), xdr_krb5_key_data(), osa_adb_rename_db(), osa_adb_rename_policy_db(). git-svn-id: svn://anonsvn.mit.edu/krb5/trunk@13013 dc483132-0cff-0310-8789-dd5450dbe970
-rw-r--r--src/lib/kadm5/ChangeLog31
-rw-r--r--src/lib/kadm5/adb.h6
-rw-r--r--src/lib/kadm5/admin.h13
-rw-r--r--src/lib/kadm5/admin_internal.h1
-rw-r--r--src/lib/kadm5/admin_xdr.h53
-rw-r--r--src/lib/kadm5/alt_prof.c50
-rw-r--r--src/lib/kadm5/kadm_rpc.h100
-rw-r--r--src/lib/kadm5/kadm_rpc_xdr.c1
-rw-r--r--src/lib/kadm5/server_internal.h4
9 files changed, 212 insertions, 47 deletions
diff --git a/src/lib/kadm5/ChangeLog b/src/lib/kadm5/ChangeLog
index a44a5cee9..29ef6e856 100644
--- a/src/lib/kadm5/ChangeLog
+++ b/src/lib/kadm5/ChangeLog
@@ -1,3 +1,34 @@
+Sun Feb 18 16:26:33 2001 Ezra Peisach <epeisach@mit.edu>
+
+ * server_internal.h: Add prototype for
+ krb5_free_key_data_contents() which really should be in libkdb.
+
+ * kadm_rpc_xdr.c: Include krb5/admin_xdr.h for prototypes.
+
+ * kadm_rpc.h: Add prototypes for client and server stub
+ functions. Server functions renamed to have _svc appended.
+
+ * alt_prof.c: Clean up warnings. Do not shadow index() with local
+ variable.
+
+ * admin_xdr.h: Add prototypes for xdr_nulltype(), xdr_krb5_ui_4(),
+ xdr_krb5_int16(), xdr_krb5_key_data_nocontents(),
+ xdr_krb5_key_salt_tuple(), xdr_krb5_tl_data(),
+ xdr_kadm5_principal_ent_rec_v1(), xdr_cprinc3_arg(),
+ xdr_generic_ret(0, xdr_chpass3_arg(), xdr_setv4key_arg(),
+ xdr_setkey_arg(), xdr_setkey3_arg(), xdr_chrand3_arg(),
+ xdr_gprincs_arg(), xdr_grpincs_ret(), xdr_gpols_arg(),
+ xdr_gpols_ret(), xdr_getprivs_ret(), xdr_krb5_salttype().
+
+ * admin_internal.h: Add prototype for _kadm5_check_handle().
+
+ * admin.h: Add prototypes for kadm5_free_config_params(),
+ kadm5_decrypt_key(), ovsec_kadm_free_name_list().
+
+ * adb.h: Add prototypes for xdr_osa_pw_hist_ent(),
+ xdr_krb5_key_data(), osa_adb_rename_db(),
+ osa_adb_rename_policy_db().
+
2001-01-16 Ken Raeburn <raeburn@mit.edu>
* str_conv.c (krb5_keysalt_iterate): Always use the prototype for
diff --git a/src/lib/kadm5/adb.h b/src/lib/kadm5/adb.h
index 81ff96cfc..031f075de 100644
--- a/src/lib/kadm5/adb.h
+++ b/src/lib/kadm5/adb.h
@@ -91,6 +91,8 @@ typedef void (*osa_adb_iter_policy_func) (void *, osa_policy_ent_t);
*/
bool_t xdr_osa_princ_ent_rec(XDR *xdrs, osa_princ_ent_t objp);
bool_t xdr_osa_policy_ent_rec(XDR *xdrs, osa_policy_ent_t objp);
+bool_t xdr_osa_pw_hist_ent(XDR *xdrs, osa_pw_hist_ent *objp);
+bool_t xdr_krb5_key_data(XDR *xdrs, krb5_key_data *objp);
/*
* Functions
@@ -98,6 +100,10 @@ bool_t xdr_osa_policy_ent_rec(XDR *xdrs, osa_policy_ent_t objp);
osa_adb_ret_t osa_adb_create_db(char *filename, char *lockfile, int magic);
osa_adb_ret_t osa_adb_destroy_db(char *filename, char *lockfile, int magic);
+osa_adb_ret_t osa_adb_rename_db(char *filefrom, char *lockfrom,
+ char *fileto, char *lockto, int magic);
+osa_adb_ret_t osa_adb_rename_policy_db(kadm5_config_params *fromparams,
+ kadm5_config_params *toparams);
osa_adb_ret_t osa_adb_init_db(osa_adb_db_t *dbp, char *filename,
char *lockfile, int magic);
osa_adb_ret_t osa_adb_fini_db(osa_adb_db_t db, int magic);
diff --git a/src/lib/kadm5/admin.h b/src/lib/kadm5/admin.h
index c2fd1601f..f99743e6b 100644
--- a/src/lib/kadm5/admin.h
+++ b/src/lib/kadm5/admin.h
@@ -253,6 +253,10 @@ krb5_error_code kadm5_get_config_params(krb5_context context,
char *kdcprofile, char *kdcenv,
kadm5_config_params *params_in,
kadm5_config_params *params_out);
+
+krb5_error_code kadm5_free_config_params(krb5_context context,
+ kadm5_config_params *params);
+
krb5_error_code kadm5_free_realm_params(krb5_context kcontext,
kadm5_config_params *params);
#endif
@@ -369,6 +373,12 @@ kadm5_ret_t kadm5_setkey_principal_3(void *server_handle,
krb5_keyblock *keyblocks,
int n_keys);
+kadm5_ret_t kadm5_decrypt_key(void *server_handle,
+ kadm5_principal_ent_t entry, krb5_int32
+ ktype, krb5_int32 stype, krb5_int32
+ kvno, krb5_keyblock *keyblock,
+ krb5_keysalt *keysalt, int *kvnop);
+
kadm5_ret_t kadm5_create_policy(void *server_handle,
kadm5_policy_ent_t ent,
long mask);
@@ -628,6 +638,9 @@ ovsec_kadm_ret_t ovsec_kadm_free_principal_ent(void *server_handle,
ovsec_kadm_ret_t ovsec_kadm_free_policy_ent(void *server_handle,
ovsec_kadm_policy_ent_t ent);
+ovsec_kadm_ret_t ovsec_kadm_free_name_list(void *server_handle,
+ char **names, int count);
+
ovsec_kadm_ret_t ovsec_kadm_get_principals(void *server_handle,
char *exp, char ***princs,
int *count);
diff --git a/src/lib/kadm5/admin_internal.h b/src/lib/kadm5/admin_internal.h
index 15db18e2a..15d826992 100644
--- a/src/lib/kadm5/admin_internal.h
+++ b/src/lib/kadm5/admin_internal.h
@@ -57,6 +57,7 @@
#define _KADM5_CHECK_HANDLE(handle) \
{ int code; if ((code = _kadm5_check_handle((void *)handle))) return code; }
+int _kadm5_check_handle(void *handle);
kadm5_ret_t _kadm5_chpass_principal_util(void *server_handle,
void *lhandle,
krb5_principal princ,
diff --git a/src/lib/kadm5/admin_xdr.h b/src/lib/kadm5/admin_xdr.h
index 3e4f48f7a..5a2566ef9 100644
--- a/src/lib/kadm5/admin_xdr.h
+++ b/src/lib/kadm5/admin_xdr.h
@@ -4,6 +4,36 @@
* $Header$
*
* $Log$
+ * Revision 1.6 2001/02/18 23:00:08 epeisach
+ * * server_internal.h: Add prototype for
+ * krb5_free_key_data_contents() which really should be in libkdb.
+ *
+ * * kadm_rpc_xdr.c: Include krb5/admin_xdr.h for prototypes.
+ *
+ * * kadm_rpc.h: Add prototypes for client and server stub
+ * functions. Server functions renamed to have _svc appended.
+ *
+ * * alt_prof.c: Clean up warnings. Do not shadow index() with local
+ * variable.
+ *
+ * * admin_xdr.h: Add prototypes for xdr_nulltype(), xdr_krb5_ui_4(),
+ * xdr_krb5_int16(), xdr_krb5_key_data_nocontents(),
+ * xdr_krb5_key_salt_tuple(), xdr_krb5_tl_data(),
+ * xdr_kadm5_principal_ent_rec_v1(), xdr_cprinc3_arg(),
+ * xdr_generic_ret(0, xdr_chpass3_arg(), xdr_setv4key_arg(),
+ * xdr_setkey_arg(), xdr_setkey3_arg(), xdr_chrand3_arg(),
+ * xdr_gprincs_arg(), xdr_grpincs_ret(), xdr_gpols_arg(),
+ * xdr_gpols_ret(), xdr_getprivs_ret(), xdr_krb5_salttype().
+ *
+ * * admin_internal.h: Add prototype for _kadm5_check_handle().
+ *
+ * * admin.h: Add prototypes for kadm5_free_config_params(),
+ * kadm5_decrypt_key(), ovsec_kadm_free_name_list().
+ *
+ * * adb.h: Add prototypes for xdr_osa_pw_hist_ent(),
+ * xdr_krb5_key_data(), osa_adb_rename_db(),
+ * osa_adb_rename_policy_db().
+ *
* Revision 1.5 1996/07/22 20:35:33 marc
* this commit includes all the changes on the OV_9510_INTEGRATION and
* OV_MERGE branches. This includes, but is not limited to, the new openvision
@@ -34,32 +64,53 @@
#include <kadm5/admin.h>
#include "kadm_rpc.h"
+bool_t xdr_ui_4(XDR *xdrs, krb5_ui_4 *objp);
bool_t xdr_nullstring(XDR *xdrs, char **objp);
+bool_t xdr_nulltype(XDR *xdrs, void **objp, xdrproc_t proc);
bool_t xdr_krb5_timestamp(XDR *xdrs, krb5_timestamp *objp);
bool_t xdr_krb5_kvno(XDR *xdrs, krb5_kvno *objp);
bool_t xdr_krb5_deltat(XDR *xdrs, krb5_deltat *objp);
bool_t xdr_krb5_flags(XDR *xdrs, krb5_flags *objp);
+bool_t xdr_krb5_ui_4(XDR *xdrs, krb5_ui_4 *objp);
+bool_t xdr_krb5_int16(XDR *xdrs, krb5_int16 *objp);
+bool_t xdr_krb5_key_data_nocontents(XDR *xdrs, krb5_key_data *objp);
+bool_t xdr_krb5_key_salt_tuple(XDR *xdrs, krb5_key_salt_tuple *objp);
+bool_t xdr_krb5_tl_data(XDR *xdrs, krb5_tl_data **tl_data_head);
bool_t xdr_kadm5_ret_t(XDR *xdrs, kadm5_ret_t *objp);
+bool_t xdr_kadm5_principal_ent_rec_v1(XDR *xdrs, kadm5_principal_ent_rec *objp);
bool_t xdr_kadm5_principal_ent_rec(XDR *xdrs, kadm5_principal_ent_rec *objp);
bool_t xdr_kadm5_policy_ent_rec(XDR *xdrs, kadm5_policy_ent_rec *objp);
bool_t xdr_kadm5_policy_ent_t(XDR *xdrs, kadm5_policy_ent_t *objp);
bool_t xdr_kadm5_principal_ent_t(XDR *xdrs, kadm5_principal_ent_t *objp);
bool_t xdr_cprinc_arg(XDR *xdrs, cprinc_arg *objp);
+bool_t xdr_cprinc3_arg(XDR *xdrs, cprinc3_arg *objp);
+bool_t xdr_generic_ret(XDR *xdrs, generic_ret *objp);
bool_t xdr_dprinc_arg(XDR *xdrs, dprinc_arg *objp);
bool_t xdr_mprinc_arg(XDR *xdrs, mprinc_arg *objp);
bool_t xdr_rprinc_arg(XDR *xdrs, rprinc_arg *objp);
bool_t xdr_chpass_arg(XDR *xdrs, chpass_arg *objp);
+bool_t xdr_chpass3_arg(XDR *xdrs, chpass3_arg *objp);
+bool_t xdr_setv4key_arg(XDR *xdrs, setv4key_arg *objp);
+bool_t xdr_setkey_arg(XDR *xdrs, setkey_arg *objp);
+bool_t xdr_setkey3_arg(XDR *xdrs, setkey3_arg *objp);
bool_t xdr_chrand_arg(XDR *xdrs, chrand_arg *objp);
+bool_t xdr_chrand3_arg(XDR *xdrs, chrand3_arg *objp);
bool_t xdr_chrand_ret(XDR *xdrs, chrand_ret *objp);
bool_t xdr_gprinc_arg(XDR *xdrs, gprinc_arg *objp);
-bool_t xdr_gprinc_arg(XDR *xdrs, gprinc_arg *objp);
+bool_t xdr_gprinc_ret(XDR *xdrs, gprinc_ret *objp);
+bool_t xdr_gprincs_arg(XDR *xdrs, gprincs_arg *objp);
+bool_t xdr_gprincs_ret(XDR *xdrs, gprincs_ret *objp);
bool_t xdr_cpol_arg(XDR *xdrs, cpol_arg *objp);
bool_t xdr_dpol_arg(XDR *xdrs, dpol_arg *objp);
bool_t xdr_mpol_arg(XDR *xdrs, mpol_arg *objp);
bool_t xdr_gpol_arg(XDR *xdrs, gpol_arg *objp);
bool_t xdr_gpol_ret(XDR *xdrs, gpol_ret *objp);
+bool_t xdr_gpols_arg(XDR *xdrs, gpols_arg *objp);
+bool_t xdr_gpols_ret(XDR *xdrs, gpols_ret *objp);
+bool_t xdr_getprivs_ret(XDR *xdrs, getprivs_ret *objp);
bool_t xdr_krb5_principal(XDR *xdrs, krb5_principal *objp);
bool_t xdr_krb5_octet(XDR *xdrs, krb5_octet *objp);
bool_t xdr_krb5_int32(XDR *xdrs, krb5_int32 *objp);
bool_t xdr_krb5_enctype(XDR *xdrs, krb5_enctype *objp);
+bool_t xdr_krb5_salttype(XDR *xdrs, krb5_int32 *objp);
bool_t xdr_krb5_keyblock(XDR *xdrs, krb5_keyblock *objp);
diff --git a/src/lib/kadm5/alt_prof.c b/src/lib/kadm5/alt_prof.c
index 3cf58a6f3..8be572cc3 100644
--- a/src/lib/kadm5/alt_prof.c
+++ b/src/lib/kadm5/alt_prof.c
@@ -30,15 +30,14 @@
*/
#include "k5-int.h"
#include <kadm5/admin.h>
+#include "adm_proto.h"
#include <stdio.h>
#include <ctype.h>
-
static krb5_key_salt_tuple *copy_key_salt_tuple(ksalt, len)
krb5_key_salt_tuple *ksalt;
krb5_int32 len;
{
- int i;
krb5_key_salt_tuple *knew;
if((knew = (krb5_key_salt_tuple *)
@@ -67,7 +66,7 @@ krb5_aprof_init(fname, envname, acontextp)
krb5_pointer *acontextp;
{
krb5_error_code kret;
- profile_filespec_t namelist[2];
+ const_profile_filespec_t namelist[2];
profile_t profile;
namelist[1] = (profile_filespec_t) NULL;
@@ -141,20 +140,20 @@ krb5_aprof_get_deltat(acontext, hierarchy, uselast, deltatp)
krb5_error_code kret;
char **values;
char *valp;
- int index;
+ int idx;
if (!(kret = krb5_aprof_getvals(acontext, hierarchy, &values))) {
- index = 0;
+ idx = 0;
if (uselast) {
- for (index=0; values[index]; index++);
- index--;
+ for (idx=0; values[idx]; idx++);
+ idx--;
}
- valp = values[index];
+ valp = values[idx];
kret = krb5_string_to_deltat(valp, deltatp);
/* Free the string storage */
- for (index=0; values[index]; index++)
- krb5_xfree(values[index]);
+ for (idx=0; values[idx]; idx++)
+ krb5_xfree(values[idx]);
krb5_xfree(values);
}
return(kret);
@@ -183,20 +182,20 @@ krb5_aprof_get_string(acontext, hierarchy, uselast, stringp)
{
krb5_error_code kret;
char **values;
- int index, i;
+ int idx, i;
if (!(kret = krb5_aprof_getvals(acontext, hierarchy, &values))) {
- index = 0;
+ idx = 0;
if (uselast) {
- for (index=0; values[index]; index++);
- index--;
+ for (idx=0; values[idx]; idx++);
+ idx--;
}
- *stringp = values[index];
+ *stringp = values[idx];
/* Free the string storage */
for (i=0; values[i]; i++)
- if (i != index)
+ if (i != idx)
krb5_xfree(values[i]);
krb5_xfree(values);
}
@@ -227,21 +226,21 @@ krb5_aprof_get_int32(acontext, hierarchy, uselast, intp)
{
krb5_error_code kret;
char **values;
- int index;
+ int idx;
if (!(kret = krb5_aprof_getvals(acontext, hierarchy, &values))) {
- index = 0;
+ idx = 0;
if (uselast) {
- for (index=0; values[index]; index++);
- index--;
+ for (idx=0; values[idx]; idx++);
+ idx--;
}
- if (sscanf(values[index], "%d", intp) != 1)
+ if (sscanf(values[idx], "%d", intp) != 1)
kret = EINVAL;
/* Free the string storage */
- for (index=0; values[index]; index++)
- krb5_xfree(values[index]);
+ for (idx=0; values[idx]; idx++)
+ krb5_xfree(values[idx]);
krb5_xfree(values);
}
return(kret);
@@ -366,7 +365,8 @@ krb5_error_code kadm5_get_config_params(context, kdcprofile, kdcenv,
}
if (params.mask & KADM5_CONFIG_ADMIN_SERVER) {
char *p;
- if (p = strchr(params.admin_server, ':')) {
+ p = strchr(params.admin_server, ':');
+ if (p) {
params.kadmind_port = atoi(p+1);
params.mask |= KADM5_CONFIG_KADMIND_PORT;
*p = '\0';
@@ -419,7 +419,7 @@ krb5_error_code kadm5_get_config_params(context, kdcprofile, kdcenv,
!krb5_aprof_get_string(aprofile, hierarchy, TRUE, &svalue)) {
params.mask |= KADM5_CONFIG_ADMIN_KEYTAB;
params.admin_keytab = svalue;
- } else if (params.admin_keytab = (char *) getenv("KRB5_KTNAME")) {
+ } else if ((params.admin_keytab = (char *) getenv("KRB5_KTNAME"))) {
params.admin_keytab = strdup(params.admin_keytab);
if (params.admin_keytab)
params.mask |= KADM5_CONFIG_ADMIN_KEYTAB;
diff --git a/src/lib/kadm5/kadm_rpc.h b/src/lib/kadm5/kadm_rpc.h
index 4387f70a7..d546c9472 100644
--- a/src/lib/kadm5/kadm_rpc.h
+++ b/src/lib/kadm5/kadm_rpc.h
@@ -1,3 +1,6 @@
+#ifndef __KADM_RPC_H__
+#define __KADM_RPC_H__
+
#include <gssrpc/types.h>
#include <krb5.h>
@@ -234,44 +237,99 @@ bool_t xdr_getprivs_ret();
#define KADM ((krb5_ui_4)2112)
#define KADMVERS ((krb5_ui_4)2)
#define CREATE_PRINCIPAL ((krb5_ui_4)1)
-extern generic_ret *create_principal_1();
+extern generic_ret *create_principal_1_svc(cprinc_arg *arg,
+ struct svc_req *rqstp);
+extern generic_ret *create_principal_1(cprinc_arg *argp, CLIENT *clnt);
+
#define DELETE_PRINCIPAL ((krb5_ui_4)2)
-extern generic_ret *delete_principal_1();
+extern generic_ret *delete_principal_1_svc(dprinc_arg *arg,
+ struct svc_req *rqstp);
+extern generic_ret *delete_principal_1(dprinc_arg *argp, CLIENT *clnt);
+
#define MODIFY_PRINCIPAL ((krb5_ui_4)3)
-extern generic_ret *modify_principal_1();
+extern generic_ret *modify_principal_1_svc(mprinc_arg *arg,
+ struct svc_req *rqstp);
+extern generic_ret *modify_principal_1(mprinc_arg *argp, CLIENT *clnt);
+
#define RENAME_PRINCIPAL ((krb5_ui_4)4)
-extern generic_ret *rename_principal_1();
+extern generic_ret *rename_principal_1_svc(rprinc_arg *arg,
+ struct svc_req *rqstp);
+extern generic_ret *rename_principal_1(rprinc_arg *argp, CLIENT *clnt);
+
#define GET_PRINCIPAL ((krb5_ui_4)5)
-extern gprinc_ret *get_principal_1();
+extern gprinc_ret *get_principal_1_svc(gprinc_arg *arg, struct svc_req *rqstp);
+extern gprinc_ret *get_principal_1(gprinc_arg *argp, CLIENT *clnt);
+
#define CHPASS_PRINCIPAL ((krb5_ui_4)6)
-extern generic_ret *chpass_principal_1();
+extern generic_ret *chpass_principal_1_svc(chpass_arg *arg,
+ struct svc_req *rqstp);
+extern generic_ret *chpass_principal_1(chpass_arg *argp, CLIENT *clnt);
+
#define CHRAND_PRINCIPAL ((krb5_ui_4)7)
-extern chrand_ret *chrand_principal_1();
+extern chrand_ret *chrand_principal_1_svc(chrand_arg *arg,
+ struct svc_req *rqstp);
+extern chrand_ret *chrand_principal_1(chrand_arg *argp, CLIENT *clnt);
+
#define CREATE_POLICY ((krb5_ui_4)8)
-extern generic_ret *create_policy_1();
+extern generic_ret *create_policy_1_svc(cpol_arg *arg, struct svc_req *rqstp);
+extern generic_ret *create_policy_1(cpol_arg *argp, CLIENT *clnt);
+
#define DELETE_POLICY ((krb5_ui_4)9)
-extern generic_ret *delete_policy_1();
+extern generic_ret *delete_policy_1_svc(dpol_arg *arg, struct svc_req *rqstp);
+extern generic_ret *delete_policy_1(dpol_arg *argp, CLIENT *clnt);
+
#define MODIFY_POLICY ((krb5_ui_4)10)
-extern generic_ret *modify_policy_1();
+extern generic_ret *modify_policy_1_svc(mpol_arg *arg, struct svc_req *rqstp);
+extern generic_ret *modify_policy_1(mpol_arg *argp, CLIENT *clnt);
+
#define GET_POLICY ((krb5_ui_4)11)
-extern gpol_ret *get_policy_1();
+extern gpol_ret *get_policy_1_svc(gpol_arg *arg, struct svc_req *rqstp);
+extern gpol_ret *get_policy_1(gpol_arg *argp, CLIENT *clnt);
+
#define GET_PRIVS ((krb5_ui_4)12)
-extern getprivs_ret *get_privs_1();
+extern getprivs_ret *get_privs_1_svc(krb5_ui_4 *arg, struct svc_req *rqstp);
+extern getprivs_ret *get_privs_1(void *argp, CLIENT *clnt);
+
#define INIT ((krb5_ui_4)13)
-extern generic_ret *init_1();
+extern generic_ret *init_1_svc(krb5_ui_4 *arg, struct svc_req *rqstp);
+extern generic_ret *init_1(void *argp, CLIENT *clnt);
+
#define GET_PRINCS ((krb5_ui_4) 14)
-extern gprincs_ret *get_princs_1();
+extern gprincs_ret *get_princs_1_svc(gprincs_arg *arg, struct svc_req *rqstp);
+extern gprincs_ret *get_princs_1(gprincs_arg *argp, CLIENT *clnt);
+
#define GET_POLS ((krb5_ui_4) 15)
-extern gpols_ret *get_pols_1();
+extern gpols_ret *get_pols_1_svc(gpols_arg *arg, struct svc_req *rqstp);
+extern gpols_ret *get_pols_1(gpols_arg *argp, CLIENT *clnt);
+
#define SETKEY_PRINCIPAL ((krb5_ui_4) 16)
-extern generic_ret *setkey_principal_1();
+extern generic_ret *setkey_principal_1_svc(setkey_arg *arg,
+ struct svc_req *rqstp);
+extern generic_ret *setkey_principal_1(setkey_arg *argp, CLIENT *clnt);
+
#define SETV4KEY_PRINCIPAL ((krb5_ui_4) 17)
-extern generic_ret *setv4key_principal_1();
+extern generic_ret *setv4key_principal_1_svc(setv4key_arg *arg,
+ struct svc_req *rqstp);
+extern generic_ret *setv4key_principal_1(setv4key_arg *argp, CLIENT *clnt);
+
#define CREATE_PRINCIPAL3 ((krb5_ui_4) 18)
-extern generic_ret *create_principal3_1();
+extern generic_ret *create_principal3_1_svc(cprinc3_arg *arg,
+ struct svc_req *rqstp);
+extern generic_ret *create_principal3_1(cprinc3_arg *argp, CLIENT *clnt);
+
#define CHPASS_PRINCIPAL3 ((krb5_ui_4) 19)
-extern generic_ret *chpass_principal3_1();
+extern generic_ret *chpass_principal3_1_svc(chpass3_arg *arg,
+ struct svc_req *rqstp);
+extern generic_ret *chpass_principal3_1(chpass3_arg *argp, CLIENT *clnt);
+
#define CHRAND_PRINCIPAL3 ((krb5_ui_4) 20)
-extern chrand_ret *chrand_principal3_1();
+extern chrand_ret *chrand_principal3_1_svc(chrand3_arg *arg,
+ struct svc_req *rqstp);
+extern chrand_ret *chrand_principal3_1(chrand3_arg *argp, CLIENT *clnt);
+
#define SETKEY_PRINCIPAL3 ((krb5_ui_4) 21)
-extern generic_ret *setkey_principal3_1();
+extern generic_ret *setkey_principal3_1_svc(setkey3_arg *arg,
+ struct svc_req *rqstp);
+extern generic_ret *setkey_principal3_1(setkey3_arg *argp, CLIENT *clnt);
+
+#endif /* __KADM_RPC_H__ */
diff --git a/src/lib/kadm5/kadm_rpc_xdr.c b/src/lib/kadm5/kadm_rpc_xdr.c
index bf4004836..4424fc0eb 100644
--- a/src/lib/kadm5/kadm_rpc_xdr.c
+++ b/src/lib/kadm5/kadm_rpc_xdr.c
@@ -7,6 +7,7 @@
#include <k5-int.h>
#include <kadm5/admin.h>
#include <kadm5/kadm_rpc.h>
+#include <kadm5/admin_xdr.h>
#include <stdlib.h>
#include <string.h>
diff --git a/src/lib/kadm5/server_internal.h b/src/lib/kadm5/server_internal.h
index 598ae45a5..4a99d267d 100644
--- a/src/lib/kadm5/server_internal.h
+++ b/src/lib/kadm5/server_internal.h
@@ -59,6 +59,10 @@ int init_dict(kadm5_config_params *);
int find_word(const char *word);
void destroy_dict(void);
+/* XXX this ought to be in libkrb5.a, but isn't */
+kadm5_ret_t krb5_free_key_data_contents(krb5_context context,
+ krb5_key_data *key);
+
/*
* *Warning*
* *Warning* This is going to break if we