krb5: Fix fcc_open() leak on double-init, and msg

This commit is contained in:
Nicolas Williams
2019-12-10 20:55:48 -06:00
parent 18df68d6e9
commit 9063d92dbb

View File

@@ -417,15 +417,19 @@ fcc_open(krb5_context context,
* file... with care. Or the O_TMPFILE / linkat() extensions. We need * file... with care. Or the O_TMPFILE / linkat() extensions. We need
* a roken / heimbase abstraction for that. * a roken / heimbase abstraction for that.
*/ */
if (TMPFILENAME(id))
(void) unlink(TMPFILENAME(id));
free(TMPFILENAME(id));
TMPFILENAME(id) = NULL;
if (asprintf(&TMPFILENAME(id), "%s-XXXXXX", FILENAME(id)) < 0 || if (asprintf(&TMPFILENAME(id), "%s-XXXXXX", FILENAME(id)) < 0 ||
TMPFILENAME(id) == NULL) TMPFILENAME(id) == NULL)
return krb5_enomem(context); return krb5_enomem(context);
if ((fd = mkostemp(TMPFILENAME(id), O_CLOEXEC)) == -1) { if ((fd = mkostemp(TMPFILENAME(id), O_CLOEXEC)) == -1) {
krb5_set_error_message(context, ret = errno,
N_("Could not make temp ccache FILE:%s", ""),
TMPFILENAME(id));
free(TMPFILENAME(id)); free(TMPFILENAME(id));
TMPFILENAME(id) = NULL; TMPFILENAME(id) = NULL;
krb5_set_error_message(context, ret = errno,
N_("Refuses to open symlinks for caches FILE:%s", ""),
FILENAME(id));
return ret; return ret;
} }
goto out; goto out;