s3: smb_request->vwv can be const
[nivanova/samba-autobuild/.git] / source3 / auth / auth_winbind.c
index beaba7d4c0ff071ae318f2f94a34b3dcfb475c94..d4ace2c9193c9ddcb59eadd89a3be1317843650b 100644 (file)
@@ -21,6 +21,8 @@
 */
 
 #include "includes.h"
+#include "auth.h"
+#include "nsswitch/libwbclient/wbclient.h"
 
 #undef DBGC_CLASS
 #define DBGC_CLASS DBGC_AUTH
@@ -39,11 +41,13 @@ static NTSTATUS check_winbind_security(const struct auth_context *auth_context,
        struct wbcAuthUserInfo *info = NULL;
        struct wbcAuthErrorInfo *err = NULL;
 
+       ZERO_STRUCT(params);
+
        if (!user_info) {
                return NT_STATUS_INVALID_PARAMETER;
        }
 
-       DEBUG(10, ("Check auth for: [%s]", user_info->mapped.account_name));
+       DEBUG(10, ("Check auth for: [%s]\n", user_info->mapped.account_name));
 
        if (!auth_context) {
                DEBUG(3,("Password for user %s cannot be checked because we have no auth_info to get the challenge from.\n", 
@@ -72,10 +76,18 @@ static NTSTATUS check_winbind_security(const struct auth_context *auth_context,
               auth_context->challenge.data,
               sizeof(params.password.response.challenge));
 
-       params.password.response.nt_length      = user_info->nt_resp.length;
-       params.password.response.nt_data        = user_info->nt_resp.data;
-       params.password.response.lm_length      = user_info->lm_resp.length;
-       params.password.response.lm_data        = user_info->lm_resp.data;
+       if (user_info->password.response.nt.length != 0) {
+               params.password.response.nt_length =
+                       user_info->password.response.nt.length;
+               params.password.response.nt_data =
+                       user_info->password.response.nt.data;
+       }
+       if (user_info->password.response.lanman.length != 0) {
+               params.password.response.lm_length =
+                       user_info->password.response.lanman.length;
+               params.password.response.lm_data =
+                       user_info->password.response.lanman.data;
+       }
 
        /* we are contacting the privileged pipe */
        become_root();
@@ -98,9 +110,7 @@ static NTSTATUS check_winbind_security(const struct auth_context *auth_context,
                if ( auth_method )
                        return auth_method->auth(auth_context, auth_method->private_data, 
                                mem_ctx, user_info, server_info);
-               else
-                       /* log an error since this should not happen */
-                       DEBUG(0,("check_winbind_security: ERROR!  my_private_data == NULL!\n"));
+               return NT_STATUS_LOGON_FAILURE;
        }
 
        if (wbc_status == WBC_ERR_AUTH_ERROR) {
@@ -132,7 +142,7 @@ static NTSTATUS auth_init_winbind(struct auth_context *auth_context, const char
 {
        struct auth_methods *result;
 
-       result = TALLOC_ZERO_P(auth_context, struct auth_methods);
+       result = talloc_zero(auth_context, struct auth_methods);
        if (result == NULL) {
                return NT_STATUS_NO_MEMORY;
        }