The branch, v3-2-test has been updated via 04d78d4d9a8cffe44c927036038aef1d6d6b44b2 (commit) via 421905fb608df6736944ac21ac67abee24991521 (commit) via c49196954d38f0c2851abbfe25086cd6fe660a2e (commit) via ba2b8a310e1d6f78116350e24c17ae4db08b9bed (commit) via 7f51583f681b1acc9bfbab6ee0e2d1c13d2c4ca4 (commit) from 0bd2643463a9160c8a1c7e1c2f8cca7b89060e09 (commit)
http://gitweb.samba.org/?p=samba.git;a=shortlog;h=v3-2-test - Log ----------------------------------------------------------------- commit 04d78d4d9a8cffe44c927036038aef1d6d6b44b2 Author: Günther Deschner <[EMAIL PROTECTED]> Date: Tue Jan 8 11:55:45 2008 +0100 Correctly free buffers in netdomjoin-gui. Guenther commit 421905fb608df6736944ac21ac67abee24991521 Author: Günther Deschner <[EMAIL PROTECTED]> Date: Tue Jan 8 11:54:51 2008 +0100 Make name_buffer in NetGetJoinInformation() talloced. Guenther commit c49196954d38f0c2851abbfe25086cd6fe660a2e Author: Günther Deschner <[EMAIL PROTECTED]> Date: Tue Jan 8 11:53:38 2008 +0100 Add NetApiBufferFree() to libnetapi. Guenther commit ba2b8a310e1d6f78116350e24c17ae4db08b9bed Author: Günther Deschner <[EMAIL PROTECTED]> Date: Tue Jan 8 11:49:35 2008 +0100 Fix crash bug when strequal is used too late in libnetapi_free. Guenther commit 7f51583f681b1acc9bfbab6ee0e2d1c13d2c4ca4 Author: Günther Deschner <[EMAIL PROTECTED]> Date: Tue Jan 8 11:46:11 2008 +0100 When unjoining fails (e.g. missing creds) make sure we still correct config. Guenther ----------------------------------------------------------------------- Summary of changes: .../examples/netdomjoin-gui/netdomjoin-gui.c | 9 ++++++- source/lib/netapi/joindomain.c | 4 +- source/lib/netapi/netapi.c | 27 ++++++++++++++++--- source/lib/netapi/netapi.h | 5 +++ source/libnet/libnet_join.c | 4 +++ 5 files changed, 41 insertions(+), 8 deletions(-) Changeset truncated at 500 lines: diff --git a/source/lib/netapi/examples/netdomjoin-gui/netdomjoin-gui.c b/source/lib/netapi/examples/netdomjoin-gui/netdomjoin-gui.c index 1e1681b..4a3588e 100644 --- a/source/lib/netapi/examples/netdomjoin-gui/netdomjoin-gui.c +++ b/source/lib/netapi/examples/netdomjoin-gui/netdomjoin-gui.c @@ -249,6 +249,8 @@ static void callback_do_reboot(GtkWidget *widget, SAFE_FREE(buffer); state->name_type_new = type; #endif + NetApiBufferFree((void *)buffer); + gtk_label_set_text(GTK_LABEL(state->label_current_name_buffer), state->name_buffer_new); if (state->name_type_new == NetSetupDomainName) { @@ -1292,8 +1294,12 @@ static int initialize_join_state(struct join_state *state, if (status) { return status; } - state->name_buffer_initial = (char *)buffer; + state->name_buffer_initial = strdup(buffer); + if (!state->name_buffer_initial) { + return -1; + } state->name_type_initial = type; + NetApiBufferFree((void *)buffer); } { @@ -1311,6 +1317,7 @@ static int initialize_join_state(struct join_state *state, if (!state->comment) { return -1; } + NetApiBufferFree(buffer); } #if 0 { diff --git a/source/lib/netapi/joindomain.c b/source/lib/netapi/joindomain.c index aa8ec6e..e4fb63e 100644 --- a/source/lib/netapi/joindomain.c +++ b/source/lib/netapi/joindomain.c @@ -437,9 +437,9 @@ static WERROR NetGetJoinInformationLocal(struct libnetapi_ctx *ctx, uint16_t *name_type) { if ((lp_security() == SEC_ADS) && lp_realm()) { - *name_buffer = SMB_STRDUP(lp_realm()); + *name_buffer = talloc_strdup(ctx, lp_realm()); } else { - *name_buffer = SMB_STRDUP(lp_workgroup()); + *name_buffer = talloc_strdup(ctx, lp_workgroup()); } if (!*name_buffer) { return WERR_NOMEM; diff --git a/source/lib/netapi/netapi.c b/source/lib/netapi/netapi.c index 61b5190..d4cb3a9 100644 --- a/source/lib/netapi/netapi.c +++ b/source/lib/netapi/netapi.c @@ -103,6 +103,14 @@ NET_API_STATUS libnetapi_getctx(struct libnetapi_ctx **ctx) NET_API_STATUS libnetapi_free(struct libnetapi_ctx *ctx) { + + if (ctx->krb5_cc_env) { + char *env = getenv(KRB5_ENV_CCNAME); + if (env && (strequal(ctx->krb5_cc_env, env))) { + unsetenv(KRB5_ENV_CCNAME); + } + } + gfree_names(); gfree_loadparm(); gfree_case_tables(); @@ -113,11 +121,6 @@ NET_API_STATUS libnetapi_free(struct libnetapi_ctx *ctx) secrets_shutdown(); regdb_close(); - if (ctx->krb5_cc_env && - (strequal(ctx->krb5_cc_env, getenv(KRB5_ENV_CCNAME)))) { - unsetenv(KRB5_ENV_CCNAME); - } - TALLOC_FREE(ctx); TALLOC_FREE(frame); @@ -221,3 +224,17 @@ const char *libnetapi_get_error_string(struct libnetapi_ctx *ctx) { return ctx->error_string; } + +/**************************************************************** +****************************************************************/ + +NET_API_STATUS NetApiBufferFree(void *buffer) +{ + if (!buffer) { + return W_ERROR_V(WERR_INSUFFICIENT_BUFFER); + } + + talloc_free(buffer); + + return NET_API_STATUS_SUCCESS; +} diff --git a/source/lib/netapi/netapi.h b/source/lib/netapi/netapi.h index 46dd8e1..4a40b32 100644 --- a/source/lib/netapi/netapi.h +++ b/source/lib/netapi/netapi.h @@ -53,6 +53,11 @@ const char *libnetapi_get_error_string(struct libnetapi_ctx *ctx); /**************************************************************** ****************************************************************/ +NET_API_STATUS NetApiBufferFree(void *buffer); + +/**************************************************************** +****************************************************************/ + /* wkssvc */ NET_API_STATUS NetJoinDomain(const char *server, const char *domain, diff --git a/source/libnet/libnet_join.c b/source/libnet/libnet_join.c index f4c0dfa..05ab184 100644 --- a/source/libnet/libnet_join.c +++ b/source/libnet/libnet_join.c @@ -1075,6 +1075,9 @@ static WERROR libnet_DomainUnjoin(TALLOC_CTX *mem_ctx, status = libnet_join_unjoindomain_rpc(mem_ctx, r); if (!NT_STATUS_IS_OK(status)) { + libnet_unjoin_set_error_string(mem_ctx, r, + "failed to unjoin domain: %s\n", + nt_errstr(status)); if (NT_STATUS_EQUAL(status, NT_STATUS_NO_SUCH_USER)) { return WERR_SETUP_NOT_JOINED; } @@ -1113,6 +1116,7 @@ WERROR libnet_Unjoin(TALLOC_CTX *mem_ctx, if (r->in.unjoin_flags & WKSSVC_JOIN_FLAGS_JOIN_TYPE) { werr = libnet_DomainUnjoin(mem_ctx, r); if (!W_ERROR_IS_OK(werr)) { + do_UnjoinConfig(r); return werr; } } -- Samba Shared Repository