fix rpc.gssd problem with ccache
Subsystems (2)
PATCH 1/1 fix rpc.gssd problem with ccache
gssd_setup_krb5_user_gss_ccache must return an error if no usable cache is found. Trying to use invalid default cache and continue is not good idea at all.
Signed-off-by Lukas Hejtmanek <[email protected]>
utils/gssd/gssd_proc.c +2 -3
@@ -703,9 +703,8 @@ handle_krb5_upcall(struct clnt_info *clp)if (uid !=0 || (uid ==0 && root_uses_machine_creds ==0 )) {/* Tell krb5 gss which credentials cache to use */ for (dirname = ccachesearch; *dirname !=NULL ; dirname++) { -gssd_setup_krb5_user_gss_ccache (uid, clp->servername, *dirname); - - create_resp =create_auth_rpc_client (clp, &rpc_clnt, &auth, uid, +if (!gssd_setup_krb5_user_gss_ccache (uid, clp->servername, *dirname)) + create_resp =create_auth_rpc_client (clp, &rpc_clnt, &auth, uid,AUTHTYPE_KRB5 );if (create_resp ==0 )break ;
utils/gssd/krb5_util.c +5 -4
@@ -994,9 +994,10 @@ err_cache:* do the best we can. * * Returns: -* void +* 0 = ok +* 1 = error */ -void +int gssd_setup_krb5_user_gss_ccache (uid_t uid,char *servername,char *dirname) {char buf[MAX_NETOBJ_SZ ];
@@ -1010,11 +1011,11 @@ gssd_setup_krb5_user_gss_ccache(uid_t uid, char *servername, char *dirname)free (d); }else -snprintf (buf,sizeof (buf),"FILE:%s/%s%u" , - dirname,GSSD_DEFAULT_CRED_PREFIX , uid); +return 1 ;printerr (2 ,"using %s as credentials cache for client with " "uid %u for server %s\n" , buf, uid, servername);gssd_set_krb5_ccache_name (buf); +return 0 ; }/*
utils/gssd/krb5_util.h +1 -1
@@ -17,7 +17,7 @@ struct gssd_k5_kt_princ { }; -void gssd_setup_krb5_user_gss_ccache (uid_t uid,char *servername, +int gssd_setup_krb5_user_gss_ccache (uid_t uid,char *servername,char *dirname);int gssd_get_krb5_machine_cred_list (char ***list);void gssd_free_krb5_machine_cred_list (char **list);