Merge branch 'master' of ssh://git.samba.org/data/git/samba
[kai/samba.git] / source4 / utils / ntlm_auth.c
index 6a6302837e400a770647f8d7776221f985a100e1..4964694790a05402e44f9494e2a1295a58df3bfb 100644 (file)
@@ -31,7 +31,6 @@
 #include "librpc/gen_ndr/ndr_netlogon.h"
 #include "auth/auth_sam.h"
 #include "auth/ntlm/ntlm_check.h"
-#include "pstring.h"
 #include "libcli/auth/libcli_auth.h"
 #include "libcli/security/security.h"
 #include "lib/events/events.h"
@@ -127,8 +126,8 @@ static void mux_printf(unsigned int mux_id, const char *format, ...)
 /* Copy of parse_domain_user from winbindd_util.c.  Parse a string of the
    form DOMAIN/user into a domain and a user */
 
-static bool parse_ntlm_auth_domain_user(const char *domuser, fstring domain, 
-                                       fstring user, char winbind_separator)
+static bool parse_ntlm_auth_domain_user(const char *domuser, char **domain, 
+                                                                               char **user, char winbind_separator)
 {
 
        char *p = strchr(domuser, winbind_separator);
@@ -137,9 +136,9 @@ static bool parse_ntlm_auth_domain_user(const char *domuser, fstring domain,
                return false;
        }
         
-       fstrcpy(user, p+1);
-       fstrcpy(domain, domuser);
-       domain[PTR_DIFF(p, domuser)] = 0;
+       *user = smb_xstrdup(p+1);
+       *domain = smb_xstrdup(domuser);
+       (*domain)[PTR_DIFF(p, domuser)] = 0;
 
        return true;
 }
@@ -213,7 +212,8 @@ static NTSTATUS local_pw_check_specified(struct loadparm_context *lp_ctx,
                
                
                nt_status = ntlm_password_check(mem_ctx, 
-                                               lp_ctx,
+                                               lp_lanman_auth(lp_ctx),
+                                               lp_ntlm_auth(lp_ctx),
                                                MSV1_0_ALLOW_SERVER_TRUST_ACCOUNT |
                                                MSV1_0_ALLOW_WORKSTATION_TRUST_ACCOUNT,
                                                challenge,
@@ -473,7 +473,8 @@ static void manage_gensec_request(enum stdio_helper_mode stdio_helper_mode,
                case NTLMSSP_CLIENT_1:
                        /* setup the client side */
 
-                       nt_status = gensec_client_start(NULL, &state->gensec_state, ev, lp_ctx);
+                       nt_status = gensec_client_start(NULL, &state->gensec_state, ev, 
+                                                       lp_gensec_settings(NULL, lp_ctx));
                        if (!NT_STATUS_IS_OK(nt_status)) {
                                exit(1);
                        }
@@ -486,7 +487,8 @@ static void manage_gensec_request(enum stdio_helper_mode stdio_helper_mode,
                        if (!msg) {
                                exit(1);
                        }
-                       if (!NT_STATUS_IS_OK(gensec_server_start(state, ev, lp_ctx, msg, &state->gensec_state))) {
+                       if (!NT_STATUS_IS_OK(gensec_server_start(state, ev, lp_gensec_settings(state, lp_ctx), 
+                                                                msg, &state->gensec_state))) {
                                exit(1);
                        }
                        break;
@@ -753,18 +755,14 @@ static void manage_ntlm_server_1_request(enum stdio_helper_mode stdio_helper_mod
                        uint32_t flags = 0;
 
                        if (full_username && !username) {
-                               fstring fstr_user;
-                               fstring fstr_domain;
-                               
-                               if (!parse_ntlm_auth_domain_user(full_username, fstr_user, fstr_domain, 
-                                                                *lp_winbind_separator(lp_ctx))) {
+                               SAFE_FREE(username);
+                               SAFE_FREE(domain);
+                               if (!parse_ntlm_auth_domain_user(full_username, &username, 
+                                                                                                &domain, 
+                                                                                                *lp_winbind_separator(lp_ctx))) {
                                        /* username might be 'tainted', don't print into our new-line deleimianted stream */
                                        mux_printf(mux_id, "Error: Could not parse into domain and username\n");
                                }
-                               SAFE_FREE(username);
-                               SAFE_FREE(domain);
-                               username = smb_xstrdup(fstr_user);
-                               domain = smb_xstrdup(fstr_domain);
                        }
 
                        if (!domain) {
@@ -869,7 +867,7 @@ static void manage_ntlm_server_1_request(enum stdio_helper_mode stdio_helper_mod
        }
 
        if (strequal(request, "LANMAN-Challenge")) {
-               challenge = strhex_to_data_blob(parameter);
+               challenge = strhex_to_data_blob(NULL, parameter);
                if (challenge.length != 8) {
                        mux_printf(mux_id, "Error: hex decode of %s failed! (got %d bytes, expected 8)\n.\n", 
                                  parameter,
@@ -877,7 +875,7 @@ static void manage_ntlm_server_1_request(enum stdio_helper_mode stdio_helper_mod
                        challenge = data_blob(NULL, 0);
                }
        } else if (strequal(request, "NT-Response")) {
-               nt_response = strhex_to_data_blob(parameter);
+               nt_response = strhex_to_data_blob(NULL, parameter);
                if (nt_response.length < 24) {
                        mux_printf(mux_id, "Error: hex decode of %s failed! (only got %d bytes, needed at least 24)\n.\n", 
                                  parameter,
@@ -885,7 +883,7 @@ static void manage_ntlm_server_1_request(enum stdio_helper_mode stdio_helper_mod
                        nt_response = data_blob(NULL, 0);
                }
        } else if (strequal(request, "LANMAN-Response")) {
-               lm_response = strhex_to_data_blob(parameter);
+               lm_response = strhex_to_data_blob(NULL, parameter);
                if (lm_response.length != 24) {
                        mux_printf(mux_id, "Error: hex decode of %s failed! (got %d bytes, expected 24)\n.\n", 
                                  parameter,