* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: gssapictx.c,v 1.25 2011/01/08 23:47:01 tbox Exp $ */
+/* $Id: gssapictx.c,v 1.26 2011/01/10 03:49:49 marka Exp $ */
#include <config.h>
isc_result_t result;
gss_buffer_desc gnamebuf;
unsigned char array[DNS_NAME_MAXTEXT + 1];
- char *tmpfile = NULL;
/* Client must pass us a valid gss_ctx_id_t here */
REQUIRE(gssctx != NULL);
result = DNS_R_CONTINUE;
out:
- if (tmpfile) {
- unsetenv("KRB5_CONFIG");
- isc_file_remove(tmpfile);
- isc_mem_free(mctx, tmpfile);
- }
return (result);
#else
UNUSED(name);
gss_name_t gname = NULL;
isc_result_t result;
char buf[1024];
- char *kt = NULL;
REQUIRE(outtoken != NULL && *outtoken == NULL);
return (DNS_R_INVALIDTKEY);
}
#else
- kt = isc_mem_allocate(mctx, strlen(gssapi_keytab) + 13);
- sprintf(kt, "KRB5_KTNAME=%s", gssapi_keytab);
- putenv(kt);
+ /*
+ * Minimize memory leakage by only setting KRB5_KTNAME
+ * if it needs to change.
+ */
+ const char *old = getenv("KRB5_KTNAME");
+ if (old == NULL || strcmp(old, gssapi_keytab) != 0) {
+ char *kt = malloc(strlen(gssapi_keytab) + 13);
+ if (kt == NULL)
+ return (ISC_R_NOMEMORY);
+ sprintf(kt, "KRB5_KTNAME=%s", gssapi_keytab);
+ if (putenv(kt) != 0)
+ return (ISC_R_NOMEMORY);
+ }
#endif
}
sizeof(buf)));
}
- if (kt != NULL)
- isc_mem_free(mctx, kt);
-
return (result);
#else
UNUSED(cred);