From 4ae497e9db7604213f266681049f83e3f8d0c035 Mon Sep 17 00:00:00 2001 From: Rob Crittenden Date: May 14 2021 18:53:02 +0000 Subject: clang: free error_message when finding the realm The error message can come from either krb5_get_error_message(), error_message() or a static string. If krb5_get_error_message() is used then krb5_free_error_message() needs to be called to free it. We already strdup'd error_message() but there were some static strings as well. So unify around strdup'ing these strings so we can free() it when the function exits. --- diff --git a/src/ipa.c b/src/ipa.c index 620c022..83b4399 100644 --- a/src/ipa.c +++ b/src/ipa.c @@ -60,14 +60,19 @@ get_error_message(krb5_context ctx, krb5_error_code kcode) { const char *ret; #ifdef HAVE_KRB5_GET_ERROR_MESSAGE - ret = ctx ? krb5_get_error_message(ctx, kcode) : NULL; - if (ret == NULL) { + const char *kret; + kret = ctx ? krb5_get_error_message(ctx, kcode) : NULL; + if (kret == NULL) { ret = error_message(kcode); + } else { + ret = strdup(kret); + krb5_free_error_message(ctx, kret); } + return ret; #else ret = error_message(kcode); -#endif return strdup(ret); +#endif } char * @@ -121,7 +126,7 @@ cm_submit_ccache_realm(char **msg) if (data == NULL) { fprintf(stderr, "Error retrieving principal realm.\n"); if (msg != NULL) { - *msg = "Error retrieving principal realm.\n"; + *msg = strdup("Error retrieving principal realm.\n"); } return NULL; } @@ -129,7 +134,7 @@ cm_submit_ccache_realm(char **msg) if (ret == NULL) { fprintf(stderr, "Out of memory for principal realm.\n"); if (msg != NULL) { - *msg = "Out of memory for principal realm.\n"; + *msg = strdup("Out of memory for principal realm.\n"); } return NULL; }