summaryrefslogtreecommitdiffstats
path: root/source/libads/krb5_setpw.c
diff options
context:
space:
mode:
authorJeremy Allison <jra@samba.org>2004-06-23 00:35:29 +0000
committerGerald (Jerry) Carter <jerry@samba.org>2007-10-10 10:52:01 -0500
commit5a1d8c3c9b8daa435f6eb5bc1652bab138e05dbf (patch)
tree665f81d61ebaff6ed85f7efcf76d07ade9fd774a /source/libads/krb5_setpw.c
parentad440213aaae58fb5bff6e8a6fcf811c5ba83669 (diff)
downloadsamba-5a1d8c3c9b8daa435f6eb5bc1652bab138e05dbf.tar.gz
samba-5a1d8c3c9b8daa435f6eb5bc1652bab138e05dbf.tar.xz
samba-5a1d8c3c9b8daa435f6eb5bc1652bab138e05dbf.zip
r1223: Fix valgrind error with realm manipulation.... Damn macros :-(.
Jeremy.
Diffstat (limited to 'source/libads/krb5_setpw.c')
-rw-r--r--source/libads/krb5_setpw.c10
1 files changed, 8 insertions, 2 deletions
diff --git a/source/libads/krb5_setpw.c b/source/libads/krb5_setpw.c
index 111834e8866..c7e9e3fe76c 100644
--- a/source/libads/krb5_setpw.c
+++ b/source/libads/krb5_setpw.c
@@ -468,6 +468,7 @@ ADS_STATUS ads_krb5_set_password(const char *kdc_host, const char *princ,
char *princ_name = NULL;
char *realm = NULL;
krb5_creds creds, *credsp = NULL;
+ krb5_data orig_realm;
krb5_ccache ccache = NULL;
ZERO_STRUCT(creds);
@@ -518,12 +519,15 @@ ADS_STATUS ads_krb5_set_password(const char *kdc_host, const char *princ,
return ADS_ERROR_KRB5(ret);
}
- krb5_princ_set_realm(context, creds.server,
- krb5_princ_realm(context, principal));
+ /* The creds.server principal takes ownership of this memory.
+ Remember to set back to original value before freeing. */
+ orig_realm = *krb5_princ_realm(context, creds.server);
+ krb5_princ_set_realm(context, creds.server, krb5_princ_realm(context, principal));
ret = krb5_cc_get_principal(context, ccache, &creds.client);
if (ret) {
krb5_cc_close(context, ccache);
+ krb5_princ_set_realm(context, creds.server, &orig_realm);
krb5_free_principal(context, creds.server);
krb5_free_principal(context, principal);
krb5_free_context(context);
@@ -536,6 +540,7 @@ ADS_STATUS ads_krb5_set_password(const char *kdc_host, const char *princ,
if (ret) {
krb5_cc_close(context, ccache);
krb5_free_principal(context, creds.client);
+ krb5_princ_set_realm(context, creds.server, &orig_realm);
krb5_free_principal(context, creds.server);
krb5_free_principal(context, principal);
krb5_free_context(context);
@@ -551,6 +556,7 @@ ADS_STATUS ads_krb5_set_password(const char *kdc_host, const char *princ,
krb5_free_creds(context, credsp);
krb5_free_principal(context, creds.client);
+ krb5_princ_set_realm(context, creds.server, &orig_realm);
krb5_free_principal(context, creds.server);
krb5_free_principal(context, principal);
krb5_cc_close(context, ccache);