diff options
Diffstat (limited to 'usr/src/cmd/krb5/kadmin/server/server_stubs.c')
-rw-r--r-- | usr/src/cmd/krb5/kadmin/server/server_stubs.c | 394 |
1 files changed, 276 insertions, 118 deletions
diff --git a/usr/src/cmd/krb5/kadmin/server/server_stubs.c b/usr/src/cmd/krb5/kadmin/server/server_stubs.c index a9c46a49f4..5d36f5c2c5 100644 --- a/usr/src/cmd/krb5/kadmin/server/server_stubs.c +++ b/usr/src/cmd/krb5/kadmin/server/server_stubs.c @@ -3,7 +3,6 @@ * Use is subject to license terms. */ -#pragma ident "%Z%%M% %I% %E% SMI" /* * WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING @@ -28,10 +27,9 @@ * */ +#include <kadm5/admin.h> #include <gssapi/gssapi.h> #include <gssapi_krb5.h> /* for gss_nt_krb5_name */ -#include <krb5.h> -#include <kadm5/admin.h> #include <kadm5/kadm_rpc.h> #include <kadm5/server_internal.h> #include <kadm5/srv/server_acl.h> @@ -41,6 +39,7 @@ #include <arpa/inet.h> /* inet_ntoa */ #include <krb5/adm_proto.h> /* krb5_klog_syslog */ #include <libintl.h> +#include <krb5.h> #include "misc.h" #define LOG_UNAUTH gettext("Unauthorized request: %s, %s, " \ @@ -463,12 +462,12 @@ log_unauth( trunc_name(&slen, &sdots); return krb5_klog_syslog(LOG_NOTICE, - "Unauthorized request: %s, %.*s%s, " - "client=%.*s%s, service=%.*s%s, addr=%s", - op, tlen, target, tdots, - clen, client, cdots, - slen, server, sdots, - addr); + "Unauthorized request: %s, %.*s%s, " + "client=%.*s%s, service=%.*s%s, addr=%s", + op, tlen, target, tdots, + clen, client, cdots, + slen, server, sdots, + addr); } static int @@ -491,16 +490,16 @@ log_done( trunc_name(&slen, &sdots); return krb5_klog_syslog(LOG_NOTICE, - "Request: %s, %.*s%s, %s, " - "client=%.*s%s, service=%.*s%s, addr=%s", - op, tlen, target, tdots, errmsg, - clen, client, cdots, - slen, server, sdots, - addr); + "Request: %s, %.*s%s, %s, " + "client=%.*s%s, service=%.*s%s, addr=%s", + op, tlen, target, tdots, errmsg, + clen, client, cdots, + slen, server, sdots, + addr); } generic_ret * -create_principal_1_svc(cprinc_arg *arg, struct svc_req *rqstp) +create_principal_2_svc(cprinc_arg *arg, struct svc_req *rqstp) { static generic_ret ret; char *prime_arg = NULL; @@ -511,6 +510,7 @@ create_principal_1_svc(cprinc_arg *arg, struct svc_req *rqstp) kadm5_server_handle_t handle; kadm5_ret_t retval; restriction_t *rp; + const char *errmsg = NULL; gss_name_t name = NULL; xdr_free(xdr_generic_ret, (char *) &ret); @@ -558,14 +558,20 @@ create_principal_1_svc(cprinc_arg *arg, struct svc_req *rqstp) ret.code = kadm5_create_principal((void *)handle, &arg->rec, arg->mask, arg->passwd); + /* Solaris Kerberos */ + if( ret.code != 0 ) + errmsg = krb5_get_error_message(handle ? handle->context : NULL, ret.code); audit_kadmind_auth(rqstp->rq_xprt, l_port, "kadm5_create_principal", prime_arg, client_name, ret.code); log_done("kadm5_create_principal", prime_arg, - ((ret.code == 0) ? "success" : error_message(ret.code)), + errmsg ? errmsg : "success", client_name, service_name, client_addr(rqstp, buf)); + if (errmsg != NULL) + krb5_free_error_message(handle ? handle->context : NULL, errmsg); + if (policy_migrate && (ret.code == 0)) { arg->rec.policy = strdup("default"); if ((arg->mask & KADM5_PW_EXPIRATION)) { @@ -600,7 +606,7 @@ error: } generic_ret * -create_principal3_1_svc(cprinc3_arg *arg, struct svc_req *rqstp) +create_principal3_2_svc(cprinc3_arg *arg, struct svc_req *rqstp) { static generic_ret ret; char *prime_arg = NULL; @@ -611,6 +617,7 @@ create_principal3_1_svc(cprinc3_arg *arg, struct svc_req *rqstp) kadm5_server_handle_t handle; kadm5_ret_t retval; restriction_t *rp; + const char *errmsg = NULL; gss_name_t name = NULL; xdr_free(xdr_generic_ret, (char *) &ret); @@ -649,16 +656,23 @@ create_principal3_1_svc(cprinc3_arg *arg, struct svc_req *rqstp) &arg->rec, &arg->mask, rp)) { ret.code = KADM5_AUTH_ADD; log_unauth("kadm5_create_principal", prime_arg, - client_name, service_name, client_addr(rqstp, buf)); + client_name, service_name, client_addr(rqstp, buf)); } else { ret.code = kadm5_create_principal_3((void *)handle, &arg->rec, arg->mask, arg->n_ks_tuple, arg->ks_tuple, arg->passwd); + /* Solaris Kerberos */ + if( ret.code != 0 ) + errmsg = krb5_get_error_message(handle ? handle->context : NULL, ret.code); + log_done("kadm5_create_principal", prime_arg, - ((ret.code == 0) ? "success" : error_message(ret.code)), - client_name, service_name, client_addr(rqstp, buf)); + errmsg ? errmsg : "success", + client_name, service_name, client_addr(rqstp, buf)); + + if (errmsg != NULL) + krb5_free_error_message(handle ? handle->context : NULL, errmsg); if (policy_migrate && (ret.code == 0)) { arg->rec.policy = strdup("default"); @@ -693,15 +707,18 @@ error: } generic_ret * -delete_principal_1_svc(dprinc_arg *arg, struct svc_req *rqstp) +delete_principal_2_svc(dprinc_arg *arg, struct svc_req *rqstp) { static generic_ret ret; char *prime_arg = NULL; char *client_name = NULL, *service_name = NULL; - OM_uint32 min_stat; - kadm5_server_handle_t handle; + OM_uint32 min_stat; + kadm5_server_handle_t handle; + const char *errmsg = NULL; + gss_name_t name = NULL; + xdr_free(xdr_generic_ret, (char *) &ret); if ((ret.code = new_server_handle(arg->api_version, rqstp, &handle))) @@ -736,13 +753,20 @@ delete_principal_1_svc(dprinc_arg *arg, struct svc_req *rqstp) service_name, client_addr(rqstp, buf)); } else { ret.code = kadm5_delete_principal((void *)handle, arg->princ); + /* Solaris Kerberos */ + if( ret.code != 0 ) + errmsg = krb5_get_error_message(handle ? handle->context : NULL, ret.code); audit_kadmind_auth(rqstp->rq_xprt, l_port, "kadm5_delete_principal", prime_arg, client_name, ret.code); - log_done("kadm5_delete_principal", prime_arg, - ((ret.code == 0) ? "success" : error_message(ret.code)), - client_name, service_name, client_addr(rqstp, buf)); + log_done("kadm5_delete_principal", prime_arg, + errmsg ? errmsg : "success", + client_name, service_name, client_addr(rqstp, buf)); + + if (errmsg != NULL) + krb5_free_error_message(handle ? handle->context : NULL, errmsg); + } error: @@ -759,7 +783,7 @@ error: } generic_ret * -modify_principal_1_svc(mprinc_arg *arg, struct svc_req *rqstp) +modify_principal_2_svc(mprinc_arg *arg, struct svc_req *rqstp) { static generic_ret ret; char *prime_arg = NULL; @@ -768,6 +792,7 @@ modify_principal_1_svc(mprinc_arg *arg, struct svc_req *rqstp) kadm5_server_handle_t handle; restriction_t *rp; gss_name_t name = NULL; + const char *errmsg = NULL; xdr_free(xdr_generic_ret, (char *) &ret); @@ -804,13 +829,19 @@ modify_principal_1_svc(mprinc_arg *arg, struct svc_req *rqstp) } else { ret.code = kadm5_modify_principal((void *)handle, &arg->rec, arg->mask); + /* Solaris Kerberos */ + if( ret.code != 0 ) + errmsg = krb5_get_error_message(handle ? handle->context : NULL, ret.code); audit_kadmind_auth(rqstp->rq_xprt, l_port, "kadm5_modify_principal", prime_arg, client_name, ret.code); log_done("kadm5_modify_principal", prime_arg, - ((ret.code == 0) ? "success" : error_message(ret.code)), - client_name, service_name, client_addr(rqstp, buf)); + errmsg ? errmsg : "success", + client_name, service_name, client_addr(rqstp, buf)); + + if (errmsg != NULL) + krb5_free_error_message(handle ? handle->context : NULL, errmsg); } error: @@ -827,7 +858,7 @@ error: } generic_ret * -rename_principal_1_svc(rprinc_arg *arg, struct svc_req *rqstp) +rename_principal_2_svc(rprinc_arg *arg, struct svc_req *rqstp) { static generic_ret ret; char *prime_arg1 = NULL, *prime_arg2 = NULL; @@ -836,6 +867,7 @@ rename_principal_1_svc(rprinc_arg *arg, struct svc_req *rqstp) OM_uint32 min_stat; kadm5_server_handle_t handle; restriction_t *rp; + const char *errmsg = NULL; gss_name_t name = NULL; size_t tlen1, tlen2, clen, slen; char *tdots1, *tdots2, *cdots, *sdots; @@ -906,19 +938,26 @@ rename_principal_1_svc(rprinc_arg *arg, struct svc_req *rqstp) } else { ret.code = kadm5_rename_principal((void *)handle, arg->src, arg->dest); + /* Solaris Kerberos */ + if( ret.code != 0 ) + errmsg = krb5_get_error_message(handle ? handle->context : NULL, ret.code); audit_kadmind_auth(rqstp->rq_xprt, l_port, "kadm5_rename_principal", prime_arg, client_name, ret.code); - krb5_klog_syslog(LOG_NOTICE, - "Request: kadm5_rename_principal, " - "%.*s%s to %.*s%s, %s, " - "client=%.*s%s, service=%.*s%s, addr=%s", - tlen1, prime_arg1, tdots1, - tlen2, prime_arg2, tdots2, - clen, client_name, cdots, - slen, service_name, sdots, - client_addr(rqstp, buf)); + krb5_klog_syslog(LOG_NOTICE, + "Request: kadm5_rename_principal, " + "%.*s%s to %.*s%s, %s, " + "client=%.*s%s, service=%.*s%s, addr=%s", + tlen1, prime_arg1, tdots1, + tlen2, prime_arg2, tdots2, + errmsg ? errmsg : "success", + clen, client_name, cdots, + slen, service_name, sdots, + client_addr(rqstp, buf)); + + if (errmsg != NULL) + krb5_free_error_message(handle ? handle->context : NULL, errmsg); } error: @@ -937,7 +976,7 @@ error: } gprinc_ret * -get_principal_1_svc(gprinc_arg *arg, struct svc_req *rqstp) +get_principal_2_svc(gprinc_arg *arg, struct svc_req *rqstp) { static gprinc_ret ret; kadm5_principal_ent_t_v1 e; @@ -945,6 +984,7 @@ get_principal_1_svc(gprinc_arg *arg, struct svc_req *rqstp) char *client_name = NULL, *service_name = NULL; OM_uint32 min_stat; kadm5_server_handle_t handle; + const char *errmsg = NULL; gss_name_t name = NULL; xdr_free(xdr_gprinc_ret, (char *) &ret); @@ -999,12 +1039,18 @@ get_principal_1_svc(gprinc_arg *arg, struct svc_req *rqstp) arg->mask); } + /* Solaris Kerberos */ + if( ret.code != 0 ) + errmsg = krb5_get_error_message(handle ? handle->context : NULL, ret.code); + audit_kadmind_auth(rqstp->rq_xprt, l_port, funcname, prime_arg, client_name, ret.code); - log_done(funcname, prime_arg, - ((ret.code == 0) ? "success" : error_message(ret.code)), - client_name, service_name, client_addr(rqstp, buf)); + log_done(funcname, prime_arg, errmsg ? errmsg : "success", + client_name, service_name, client_addr(rqstp, buf)); + + if (errmsg != NULL) + krb5_free_error_message(handle ? handle->context : NULL, errmsg); } error: @@ -1021,7 +1067,7 @@ error: } gprincs_ret * -get_princs_1_svc(gprincs_arg *arg, struct svc_req *rqstp) +get_princs_2_svc(gprincs_arg *arg, struct svc_req *rqstp) { static gprincs_ret ret; char *prime_arg = NULL; @@ -1029,6 +1075,7 @@ get_princs_1_svc(gprincs_arg *arg, struct svc_req *rqstp) OM_uint32 min_stat; kadm5_server_handle_t handle; gss_name_t name = NULL; + const char *errmsg = NULL; xdr_free(xdr_gprincs_ret, (char *) &ret); @@ -1068,13 +1115,19 @@ get_princs_1_svc(gprincs_arg *arg, struct svc_req *rqstp) ret.code = kadm5_get_principals((void *)handle, arg->exp, &ret.princs, &ret.count); + /* Solaris Kerberos */ + if( ret.code != 0 ) + errmsg = krb5_get_error_message(handle ? handle->context : NULL, ret.code); audit_kadmind_auth(rqstp->rq_xprt, l_port, "kadm5_get_principals", prime_arg, client_name, ret.code); - log_done("kadm5_get_principals", prime_arg, - ((ret.code == 0) ? "success" : error_message(ret.code)), - client_name, service_name, client_addr(rqstp, buf)); + log_done("kadm5_get_principals", prime_arg, + errmsg ? errmsg : "success", + client_name, service_name, client_addr(rqstp, buf)); + + if (errmsg != NULL) + krb5_free_error_message(handle ? handle->context : NULL, errmsg); } error: @@ -1089,13 +1142,14 @@ error: } generic_ret * -chpass_principal_1_svc(chpass_arg *arg, struct svc_req *rqstp) +chpass_principal_2_svc(chpass_arg *arg, struct svc_req *rqstp) { static generic_ret ret; char *prime_arg = NULL; char *client_name = NULL, *service_name = NULL; OM_uint32 min_stat; kadm5_server_handle_t handle; + const char *errmsg = NULL; gss_name_t name = NULL; xdr_free(xdr_generic_ret, (char *) &ret); @@ -1138,12 +1192,19 @@ chpass_principal_1_svc(chpass_arg *arg, struct svc_req *rqstp) } if(ret.code != KADM5_AUTH_CHANGEPW) { + /* Solaris Kerberos */ + if( ret.code != 0 ) + errmsg = krb5_get_error_message(handle ? handle->context : NULL, ret.code); + audit_kadmind_auth(rqstp->rq_xprt, l_port, "kadm5_chpass_principal", prime_arg, client_name, ret.code); log_done("kadm5_chpass_principal", prime_arg, - ((ret.code == 0) ? "success" : error_message(ret.code)), - client_name, service_name, client_addr(rqstp, buf)); + errmsg ? errmsg : "success", + client_name, service_name, client_addr(rqstp, buf)); + + if (errmsg != NULL) + krb5_free_error_message(handle ? handle->context : NULL, errmsg); } error: @@ -1160,7 +1221,7 @@ error: } generic_ret * -chpass_principal3_1_svc(chpass3_arg *arg, struct svc_req *rqstp) +chpass_principal3_2_svc(chpass3_arg *arg, struct svc_req *rqstp) { static generic_ret ret; char *prime_arg = NULL; @@ -1168,6 +1229,7 @@ chpass_principal3_1_svc(chpass3_arg *arg, struct svc_req *rqstp) *service_name = NULL; OM_uint32 min_stat; kadm5_server_handle_t handle; + const char *errmsg = NULL; gss_name_t name = NULL; xdr_free(xdr_generic_ret, (char *) &ret); @@ -1213,9 +1275,16 @@ chpass_principal3_1_svc(chpass3_arg *arg, struct svc_req *rqstp) } if(ret.code != KADM5_AUTH_CHANGEPW) { + /* Solaris Kerberos */ + if( ret.code != 0 ) + errmsg = krb5_get_error_message(handle ? handle->context : NULL, ret.code); + log_done("kadm5_chpass_principal", prime_arg, - ((ret.code == 0) ? "success" : error_message(ret.code)), + errmsg ? errmsg : "success", client_name, service_name, client_addr(rqstp, buf)); + + if (errmsg != NULL) + krb5_free_error_message(handle ? handle->context : NULL, errmsg); } error: @@ -1233,7 +1302,7 @@ error: #ifdef SUNWOFF generic_ret * -setv4key_principal_1_svc(setv4key_arg *arg, struct svc_req *rqstp) +setv4key_principal_2_svc(setv4key_arg *arg, struct svc_req *rqstp) { static generic_ret ret; char *prime_arg = NULL; @@ -1241,6 +1310,7 @@ setv4key_principal_1_svc(setv4key_arg *arg, struct svc_req *rqstp) *service_name = NULL; OM_uint32 min_stat; kadm5_server_handle_t handle; + const char *errmsg = NULL; gss_name_t name = NULL; xdr_free(xdr_generic_ret, (char *) &ret); @@ -1277,9 +1347,16 @@ setv4key_principal_1_svc(setv4key_arg *arg, struct svc_req *rqstp) } if(ret.code != KADM5_AUTH_SETKEY) { + /* Solaris Kerberos */ + if( ret.code != 0 ) + errmsg = krb5_get_error_message(handle ? handle->context : NULL, ret.code); + log_done("kadm5_setv4key_principal", prime_arg, - ((ret.code == 0) ? "success" : error_message(ret.code)), - client_name, service_name, client_addr(rqstp, buf)); + errmsg ? errmsg : "success", + client_name, service_name, client_addr(rqstp, buf)); + + if (errmsg != NULL) + krb5_free_error_message(handle ? handle->context : NULL, errmsg); } error: @@ -1297,7 +1374,7 @@ error: #endif generic_ret * -setkey_principal_1_svc(setkey_arg *arg, struct svc_req *rqstp) +setkey_principal_2_svc(setkey_arg *arg, struct svc_req *rqstp) { static generic_ret ret; char *prime_arg; @@ -1305,6 +1382,7 @@ setkey_principal_1_svc(setkey_arg *arg, struct svc_req *rqstp) *service_name; OM_uint32 min_stat; kadm5_server_handle_t handle; + const char *errmsg = NULL; gss_name_t name; xdr_free(xdr_generic_ret, (char *) &ret); @@ -1340,9 +1418,16 @@ setkey_principal_1_svc(setkey_arg *arg, struct svc_req *rqstp) } if(ret.code != KADM5_AUTH_SETKEY) { + /* Solaris Kerberos */ + if( ret.code != 0 ) + errmsg = krb5_get_error_message(handle ? handle->context : NULL, ret.code); + log_done("kadm5_setkey_principal", prime_arg, - ((ret.code == 0) ? "success" : error_message(ret.code)), - client_name, service_name, client_addr(rqstp, buf)); + errmsg ? errmsg : "success", + client_name, service_name, client_addr(rqstp, buf)); + + if (errmsg != NULL) + krb5_free_error_message(handle ? handle->context : NULL, errmsg); } error: @@ -1359,7 +1444,7 @@ error: } generic_ret * -setkey_principal3_1_svc(setkey3_arg *arg, struct svc_req *rqstp) +setkey_principal3_2_svc(setkey3_arg *arg, struct svc_req *rqstp) { static generic_ret ret; char *prime_arg = NULL; @@ -1367,6 +1452,7 @@ setkey_principal3_1_svc(setkey3_arg *arg, struct svc_req *rqstp) *service_name = NULL; OM_uint32 min_stat; kadm5_server_handle_t handle; + const char *errmsg = NULL; gss_name_t name = NULL; xdr_free(xdr_generic_ret, (char *) &ret); @@ -1406,9 +1492,16 @@ setkey_principal3_1_svc(setkey3_arg *arg, struct svc_req *rqstp) } if(ret.code != KADM5_AUTH_SETKEY) { + /* Solaris Kerberos */ + if( ret.code != 0 ) + errmsg = krb5_get_error_message(handle ? handle->context : NULL, ret.code); + log_done("kadm5_setkey_principal", prime_arg, - ((ret.code == 0) ? "success" : error_message(ret.code)), - client_name, service_name, client_addr(rqstp, buf)); + errmsg ? errmsg : "success", + client_name, service_name, client_addr(rqstp, buf)); + + if (errmsg != NULL) + krb5_free_error_message(handle ? handle->context : NULL, errmsg); } error: @@ -1425,7 +1518,7 @@ error: } chrand_ret * -chrand_principal_1_svc(chrand_arg *arg, struct svc_req *rqstp) +chrand_principal_2_svc(chrand_arg *arg, struct svc_req *rqstp) { static chrand_ret ret; krb5_keyblock *k; @@ -1434,6 +1527,7 @@ chrand_principal_1_svc(chrand_arg *arg, struct svc_req *rqstp) char *client_name = NULL, *service_name = NULL; OM_uint32 min_stat; kadm5_server_handle_t handle; + const char *errmsg = NULL; gss_name_t name = NULL; xdr_free(xdr_chrand_ret, (char *) &ret); @@ -1489,12 +1583,18 @@ chrand_principal_1_svc(chrand_arg *arg, struct svc_req *rqstp) } if(ret.code != KADM5_AUTH_CHANGEPW) { + /* Solaris Kerberos */ + if( ret.code != 0 ) + errmsg = krb5_get_error_message(handle ? handle->context : NULL, ret.code); + audit_kadmind_auth(rqstp->rq_xprt, l_port, funcname, prime_arg, client_name, ret.code); - log_done(funcname, prime_arg, - ((ret.code == 0) ? "success" : error_message(ret.code)), - client_name, service_name, client_addr(rqstp, buf)); - } + log_done(funcname, prime_arg, errmsg ? errmsg : "success", + client_name, service_name, client_addr(rqstp, buf)); + + if (errmsg != NULL) + krb5_free_error_message(handle ? handle->context : NULL, errmsg); + } error: if (name) @@ -1510,7 +1610,7 @@ error: } chrand_ret * -chrand_principal3_1_svc(chrand3_arg *arg, struct svc_req *rqstp) +chrand_principal3_2_svc(chrand3_arg *arg, struct svc_req *rqstp) { static chrand_ret ret; krb5_keyblock *k; @@ -1520,6 +1620,7 @@ chrand_principal3_1_svc(chrand3_arg *arg, struct svc_req *rqstp) *service_name = NULL; OM_uint32 min_stat; kadm5_server_handle_t handle; + const char *errmsg = NULL; gss_name_t name = NULL; xdr_free(xdr_chrand_ret, (char *) &ret); @@ -1578,10 +1679,15 @@ chrand_principal3_1_svc(chrand3_arg *arg, struct svc_req *rqstp) } if(ret.code != KADM5_AUTH_CHANGEPW) { - /* Solaris Kerberos: Better error messages */ - log_done(funcname, prime_arg, ((ret.code == 0) ? "success" : - krb5_get_error_message(handle->context, ret.code)), - client_name, service_name, client_addr(rqstp, buf)); + /* Solaris Kerberos */ + if( ret.code != 0 ) + errmsg = krb5_get_error_message(handle ? handle->context : NULL, ret.code); + + log_done(funcname, prime_arg, errmsg ? errmsg : "success", + client_name, service_name, client_addr(rqstp, buf)); + + if (errmsg != NULL) + krb5_free_error_message(handle ? handle->context : NULL, errmsg); } error: @@ -1598,13 +1704,14 @@ error: } generic_ret * -create_policy_1_svc(cpol_arg *arg, struct svc_req *rqstp) +create_policy_2_svc(cpol_arg *arg, struct svc_req *rqstp) { static generic_ret ret; char *prime_arg = NULL; char *client_name = NULL, *service_name = NULL; OM_uint32 min_stat; kadm5_server_handle_t handle; + const char *errmsg = NULL; gss_name_t name = NULL; xdr_free(xdr_generic_ret, (char *) &ret); @@ -1637,19 +1744,25 @@ create_policy_1_svc(cpol_arg *arg, struct svc_req *rqstp) "kadm5_create_policy", prime_arg, client_name); log_unauth("kadm5_create_policy", prime_arg, - client_name, service_name, client_addr(rqstp, buf)); - + client_name, service_name, client_addr(rqstp, buf)); + } else { ret.code = kadm5_create_policy((void *)handle, &arg->rec, arg->mask); + /* Solaris Kerberos */ + if( ret.code != 0 ) + errmsg = krb5_get_error_message(handle ? handle->context : NULL, ret.code); audit_kadmind_auth(rqstp->rq_xprt, l_port, "kadm5_create_policy", prime_arg, client_name, ret.code); log_done("kadm5_create_policy", - ((prime_arg == NULL) ? "(null)" : prime_arg), - ((ret.code == 0) ? "success" : error_message(ret.code)), - client_name, service_name, client_addr(rqstp, buf)); + ((prime_arg == NULL) ? "(null)" : prime_arg), + errmsg ? errmsg : "success", + client_name, service_name, client_addr(rqstp, buf)); + + if (errmsg != NULL) + krb5_free_error_message(handle ? handle->context : NULL, errmsg); } error: @@ -1664,13 +1777,14 @@ error: } generic_ret * -delete_policy_1_svc(dpol_arg *arg, struct svc_req *rqstp) +delete_policy_2_svc(dpol_arg *arg, struct svc_req *rqstp) { static generic_ret ret; char *prime_arg = NULL; char *client_name = NULL, *service_name = NULL; OM_uint32 min_stat; kadm5_server_handle_t handle; + const char *errmsg = NULL; gss_name_t name = NULL; xdr_free(xdr_generic_ret, (char *) &ret); @@ -1705,14 +1819,20 @@ delete_policy_1_svc(dpol_arg *arg, struct svc_req *rqstp) ret.code = KADM5_AUTH_DELETE; } else { ret.code = kadm5_delete_policy((void *)handle, arg->name); + /* Solaris Kerberos */ + if( ret.code != 0 ) + errmsg = krb5_get_error_message(handle ? handle->context : NULL, ret.code); audit_kadmind_auth(rqstp->rq_xprt, l_port, "kadm5_delete_policy", prime_arg, client_name, ret.code); log_done("kadm5_delete_policy", - ((prime_arg == NULL) ? "(null)" : prime_arg), - ((ret.code == 0) ? "success" : error_message(ret.code)), - client_name, service_name, client_addr(rqstp, buf)); + ((prime_arg == NULL) ? "(null)" : prime_arg), + errmsg ? errmsg : "success", + client_name, service_name, client_addr(rqstp, buf)); + + if (errmsg != NULL) + krb5_free_error_message(handle ? handle->context : NULL, errmsg); } error: @@ -1727,13 +1847,14 @@ error: } generic_ret * -modify_policy_1_svc(mpol_arg *arg, struct svc_req *rqstp) +modify_policy_2_svc(mpol_arg *arg, struct svc_req *rqstp) { static generic_ret ret; char *prime_arg = NULL; char *client_name = NULL, *service_name = NULL; OM_uint32 min_stat; kadm5_server_handle_t handle; + const char *errmsg = NULL; gss_name_t name = NULL; xdr_free(xdr_generic_ret, (char *) &ret); @@ -1769,15 +1890,21 @@ modify_policy_1_svc(mpol_arg *arg, struct svc_req *rqstp) } else { ret.code = kadm5_modify_policy((void *)handle, &arg->rec, arg->mask); + /* Solaris Kerberos */ + if( ret.code != 0 ) + errmsg = krb5_get_error_message(handle ? handle->context : NULL, ret.code); audit_kadmind_auth(rqstp->rq_xprt, l_port, "kadm5_modify_policy", prime_arg, client_name, ret.code); log_done("kadm5_modify_policy", - ((prime_arg == NULL) ? "(null)" : prime_arg), - ((ret.code == 0) ? "success" : error_message(ret.code)), - client_name, service_name, client_addr(rqstp, buf)); - } + ((prime_arg == NULL) ? "(null)" : prime_arg), + errmsg ? errmsg : "success", + client_name, service_name, client_addr(rqstp, buf)); + + if (errmsg != NULL) + krb5_free_error_message(handle ? handle->context : NULL, errmsg); + } error: if (name) @@ -1791,7 +1918,7 @@ error: } gpol_ret * -get_policy_1_svc(gpol_arg *arg, struct svc_req *rqstp) +get_policy_2_svc(gpol_arg *arg, struct svc_req *rqstp) { static gpol_ret ret; kadm5_ret_t ret2; @@ -1802,6 +1929,7 @@ get_policy_1_svc(gpol_arg *arg, struct svc_req *rqstp) kadm5_principal_ent_rec caller_ent; krb5_principal caller; kadm5_server_handle_t handle; + const char *errmsg = NULL; gss_name_t name = NULL; xdr_free(xdr_gpol_ret, (char *) &ret); @@ -1861,16 +1989,25 @@ get_policy_1_svc(gpol_arg *arg, struct svc_req *rqstp) &ret.rec); } + /* Solaris Kerberos */ + if( ret.code != 0 ) + errmsg = krb5_get_error_message(handle ? handle->context : NULL, ret.code); + audit_kadmind_auth(rqstp->rq_xprt, l_port, funcname, prime_arg, client_name, ret.code); - log_done(funcname, ((prime_arg == NULL) ? "(null)" : prime_arg), - ((ret.code == 0) ? "success" : error_message(ret.code)), - client_name, service_name, client_addr(rqstp, buf)); - } else { + log_done(funcname, + ((prime_arg == NULL) ? "(null)" : prime_arg), + errmsg ? errmsg : "success", + client_name, service_name, client_addr(rqstp, buf)); + + if (errmsg != NULL) + krb5_free_error_message(handle ? handle->context : NULL, errmsg); + + } else { audit_kadmind_unauth(rqstp->rq_xprt, l_port, funcname, prime_arg, client_name); - log_unauth(funcname, prime_arg, client_name, - service_name, client_addr(rqstp, buf)); + log_unauth(funcname, prime_arg, + client_name, service_name, client_addr(rqstp, buf)); } error: @@ -1886,13 +2023,14 @@ error: } gpols_ret * -get_pols_1_svc(gpols_arg *arg, struct svc_req *rqstp) +get_pols_2_svc(gpols_arg *arg, struct svc_req *rqstp) { static gpols_ret ret; char *prime_arg = NULL; char *client_name = NULL, *service_name = NULL; OM_uint32 min_stat; kadm5_server_handle_t handle; + const char *errmsg = NULL; gss_name_t name = NULL; xdr_free(xdr_gpols_ret, (char *) &ret); @@ -1927,18 +2065,24 @@ get_pols_1_svc(gpols_arg *arg, struct svc_req *rqstp) "kadm5_get_policies", prime_arg, client_name); log_unauth("kadm5_get_policies", prime_arg, - client_name, service_name, client_addr(rqstp, buf)); + client_name, service_name, client_addr(rqstp, buf)); } else { ret.code = kadm5_get_policies((void *)handle, - arg->exp, &ret.pols, - &ret.count); + arg->exp, &ret.pols, + &ret.count); + /* Solaris Kerberos */ + if( ret.code != 0 ) + errmsg = krb5_get_error_message(handle ? handle->context : NULL, ret.code); audit_kadmind_auth(rqstp->rq_xprt, l_port, "kadm5_get_policies", prime_arg, client_name, ret.code); - log_done("kadm5_get_policies", prime_arg, - ((ret.code == 0) ? "success" : error_message(ret.code)), - client_name, service_name, client_addr(rqstp, buf)); + log_done("kadm5_get_policies", prime_arg, + errmsg ? errmsg : "success", + client_name, service_name, client_addr(rqstp, buf)); + + if (errmsg != NULL) + krb5_free_error_message(handle ? handle->context : NULL, errmsg); } error: @@ -1952,12 +2096,13 @@ error: return (&ret); } -getprivs_ret * get_privs_1_svc(krb5_ui_4 *arg, struct svc_req *rqstp) +getprivs_ret * get_privs_2_svc(krb5_ui_4 *arg, struct svc_req *rqstp) { static getprivs_ret ret; char *client_name = NULL, *service_name = NULL; OM_uint32 min_stat; kadm5_server_handle_t handle; + const char *errmsg = NULL; gss_name_t name = NULL; xdr_free(xdr_getprivs_ret, (char *) &ret); @@ -1980,13 +2125,19 @@ getprivs_ret * get_privs_1_svc(krb5_ui_4 *arg, struct svc_req *rqstp) } ret.code = __kadm5_get_priv((void *) handle, &ret.privs, name); + /* Solaris Kerberos */ + if( ret.code != 0 ) + errmsg = krb5_get_error_message(handle ? handle->context : NULL, ret.code); audit_kadmind_auth(rqstp->rq_xprt, l_port, "kadm5_get_privs", NULL, client_name, ret.code); log_done("kadm5_get_privs", client_name, - ((ret.code == 0) ? "success" : error_message(ret.code)), + errmsg ? errmsg : "success", client_name, service_name, client_addr(rqstp, buf)); + + if (errmsg != NULL) + krb5_free_error_message(handle ? handle->context : NULL, errmsg); error: if (name) @@ -1999,11 +2150,12 @@ error: return (&ret); } -generic_ret *init_1_svc(krb5_ui_4 *arg, struct svc_req *rqstp) +generic_ret *init_2_svc(krb5_ui_4 *arg, struct svc_req *rqstp) { static generic_ret ret; char *client_name, *service_name; kadm5_server_handle_t handle; + const char *errmsg = NULL; size_t clen, slen; char *cdots, *sdots; @@ -2022,25 +2174,31 @@ generic_ret *init_1_svc(krb5_ui_4 *arg, struct svc_req *rqstp) return &ret; } + /* Solaris Kerberos */ + if (ret.code != 0) + errmsg = krb5_get_error_message(handle ? handle->context : NULL, ret.code); + audit_kadmind_auth(rqstp->rq_xprt, l_port, (ret.api_version == KADM5_API_VERSION_1 ? "kadm5_init (V1)" : "kadm5_init"), NULL, client_name, ret.code); - clen = strlen(client_name); - trunc_name(&clen, &cdots); - slen = strlen(service_name); - trunc_name(&slen, &sdots); - krb5_klog_syslog(LOG_NOTICE, "Request %s, %.*s%s, %s, " - "client=%.*s%s, service=%.*s%s, addr=%s, flavor=%d", - (ret.api_version == KADM5_API_VERSION_1 ? - "kadm5_init (V1)" : "kadm5_init"), - clen, client_name, cdots, - (ret.code == 0) ? "success" : error_message(ret.code), - clen, client_name, cdots, - slen, service_name, sdots, - client_addr(rqstp, buf), - rqstp->rq_cred.oa_flavor); + clen = strlen(client_name); + trunc_name(&clen, &cdots); + slen = strlen(service_name); + trunc_name(&slen, &sdots); + krb5_klog_syslog(LOG_NOTICE, "Request: %s, %.*s%s, %s, " + "client=%.*s%s, service=%.*s%s, addr=%s, flavor=%d", + (ret.api_version == KADM5_API_VERSION_1 ? + "kadm5_init (V1)" : "kadm5_init"), + clen, client_name, cdots, + errmsg ? errmsg : "success", + clen, client_name, cdots, + slen, service_name, sdots, + client_addr(rqstp, buf), + rqstp->rq_cred.oa_flavor); + if (errmsg != NULL) + krb5_free_error_message(handle ? handle->context : NULL, errmsg); free(client_name); free(service_name); |