Finish removal of iconv_convenience in public API's.
[bbaumbach/samba-autobuild/.git] / source4 / utils / ntlm_auth.c
index bd262683d5c36c7dd80031a087e912292f651119..c5d37e82c97c379d838174d4d9bc3db18d4deaa0 100644 (file)
@@ -30,7 +30,6 @@
 #include "auth/auth.h"
 #include "librpc/gen_ndr/ndr_netlogon.h"
 #include "auth/auth_sam.h"
-#include "auth/ntlm/ntlm_check.h"
 #include "libcli/auth/libcli_auth.h"
 #include "libcli/security/security.h"
 #include "lib/events/events.h"
@@ -466,6 +465,9 @@ static void manage_gensec_request(enum stdio_helper_mode stdio_helper_mode,
        if (!ev) {
                exit(1);
        }
+
+       mem_ctx = talloc_named(NULL, 0, "manage_gensec_request internal mem_ctx");
+
        /* setup gensec */
        if (!(state->gensec_state)) {
                switch (stdio_helper_mode) {
@@ -476,23 +478,44 @@ static void manage_gensec_request(enum stdio_helper_mode stdio_helper_mode,
                        nt_status = gensec_client_start(NULL, &state->gensec_state, ev, 
                                                        lp_gensec_settings(NULL, lp_ctx));
                        if (!NT_STATUS_IS_OK(nt_status)) {
+                               talloc_free(mem_ctx);
                                exit(1);
                        }
 
                        break;
                case GSS_SPNEGO_SERVER:
                case SQUID_2_5_NTLMSSP:
-                       msg = messaging_client_init(state, lp_messaging_path(state, lp_ctx), 
-                                                   lp_iconv_convenience(lp_ctx), ev);
+               {
+                       const char *winbind_method[] = { "winbind", NULL };
+                       struct auth_context *auth_context;
+
+                       msg = messaging_client_init(state, lp_messaging_path(state, lp_ctx), ev);
                        if (!msg) {
+                               talloc_free(mem_ctx);
+                               exit(1);
+                       }
+                       nt_status = auth_context_create_methods(mem_ctx, 
+                                                               winbind_method,
+                                                               ev, 
+                                                               msg, 
+                                                               lp_ctx,
+                                                               &auth_context);
+       
+                       if (!NT_STATUS_IS_OK(nt_status)) {
+                               talloc_free(mem_ctx);
                                exit(1);
                        }
-                       if (!NT_STATUS_IS_OK(gensec_server_start(state, ev, lp_gensec_settings(state, lp_ctx), 
-                                                                msg, &state->gensec_state))) {
+                       
+                       if (!NT_STATUS_IS_OK(gensec_server_start(state, ev, 
+                                                                lp_gensec_settings(state, lp_ctx), 
+                                                                auth_context, &state->gensec_state))) {
+                               talloc_free(mem_ctx);
                                exit(1);
                        }
                        break;
+               }
                default:
+                       talloc_free(mem_ctx);
                        abort();
                }
 
@@ -543,20 +566,21 @@ static void manage_gensec_request(enum stdio_helper_mode stdio_helper_mode,
                        nt_status = gensec_start_mech_by_oid(state->gensec_state, GENSEC_OID_NTLMSSP);
                        break;
                default:
+                       talloc_free(mem_ctx);
                        abort();
                }
 
                if (!NT_STATUS_IS_OK(nt_status)) {
                        DEBUG(1, ("GENSEC mech failed to start: %s\n", nt_errstr(nt_status)));
                        mux_printf(mux_id, "BH GENSEC mech failed to start\n");
+                       talloc_free(mem_ctx);
                        return;
                }
 
        }
 
        /* update */
-       mem_ctx = talloc_named(NULL, 0, "manage_gensec_request internal mem_ctx");
-       
+
        if (strncmp(buf, "PW ", 3) == 0) {
                state->set_password = talloc_strndup(state,
                                                     (const char *)in.data, 
@@ -621,12 +645,12 @@ static void manage_gensec_request(enum stdio_helper_mode stdio_helper_mode,
        }
 
        if (strncmp(buf, "GF", 2) == 0) {
-               struct gensec_ntlmssp_state *gensec_ntlmssp_state;
+               struct ntlmssp_state *ntlmssp_state;
                uint32_t neg_flags;
 
-               gensec_ntlmssp_state = talloc_get_type(state->gensec_state->private_data, 
-                               struct gensec_ntlmssp_state);
-               neg_flags = gensec_ntlmssp_state->neg_flags;
+               ntlmssp_state = talloc_get_type(state->gensec_state->private_data,
+                               struct ntlmssp_state);
+               neg_flags = ntlmssp_state->neg_flags;
 
                DEBUG(10, ("Requested negotiated feature flags\n"));
                mux_printf(mux_id, "GF 0x%08x\n", neg_flags);
@@ -676,7 +700,7 @@ static void manage_gensec_request(enum stdio_helper_mode stdio_helper_mode,
                if (!NT_STATUS_IS_OK(nt_status)) {
                        reply_code = "BH Failed to retrive session info";
                        reply_arg = nt_errstr(nt_status);
-                       DEBUG(1, ("GENSEC failed to retreive the session info: %s\n", nt_errstr(nt_status)));
+                       DEBUG(1, ("GENSEC failed to retrieve the session info: %s\n", nt_errstr(nt_status)));
                } else {
 
                        reply_code = "AF";