Print this page
NEX-14666 Need to provide SMB 2.1 Client
NEX-17187 panic in smbfs_acl_store
NEX-17231 smbfs create xattr files finds wrong file
NEX-17224 smbfs lookup EINVAL should be ENOENT
NEX-17260 SMB1 client fails to list directory after NEX-14666
Reviewed by: Evan Layton <evan.layton@nexenta.com>
Reviewed by: Matt Barden <matt.barden@nexenta.com>
Reviewed by: Rick McNeal <rick.mcneal@nexenta.com>
Reviewed by: Saso Kiselkov <saso.kiselkov@nexenta.com>
Reviewed by: Joyce McIntosh <joyce.mcintosh@nexenta.com>
and: (cleanup)
1575 untangle libmlrpc from SMB server
Reviewed by: Matt Barden <matt.barden@nexenta.com>
Reviewed by: Evan Layton <evan.layton@nexenta.com>
Reviewed by: Toomas Soome <tsoome@me.com>
Approved by: Richard Lowe <richlowe@richlowe.net>
NEX-2667 Wrong error when join domain with wrong password
Reviewed by: Kevin Crowe <kevin.crowe@nexenta.com>
Reviewed by: Bayard Bell <bayard.bell@nexenta.com>
re #12435 rb3958 r10 is added 2 times to panic info
re #12393 rb3935 Kerberos and smbd disagree about who is our AD server

*** 19,29 **** * CDDL HEADER END */ /* * Copyright (c) 2009, 2010, Oracle and/or its affiliates. All rights reserved. ! * Copyright 2015 Nexenta Systems, Inc. All rights reserved. */ /* * Local Security Authority RPC (LSAR) client-side interface. */ --- 19,29 ---- * CDDL HEADER END */ /* * Copyright (c) 2009, 2010, Oracle and/or its affiliates. All rights reserved. ! * Copyright 2018 Nexenta Systems, Inc. All rights reserved. */ /* * Local Security Authority RPC (LSAR) client-side interface. */
*** 34,44 **** #include <strings.h> #include <smbsrv/libsmb.h> #include <smbsrv/libmlsvc.h> #include <smbsrv/smbinfo.h> ! #include <smbsrv/ntaccess.h> #include <smbsrv/ntlocale.h> #include <smbsrv/string.h> #include <lsalib.h> /* --- 34,44 ---- #include <strings.h> #include <smbsrv/libsmb.h> #include <smbsrv/libmlsvc.h> #include <smbsrv/smbinfo.h> ! #include <smb/ntaccess.h> #include <smbsrv/ntlocale.h> #include <smbsrv/string.h> #include <lsalib.h> /*
*** 381,391 **** lsar_lookup_names3, lsar_lookup_names2, lsar_lookup_names1 }; - const srvsvc_server_info_t *svinfo; lsa_names_t names; char *p; uint32_t length; uint32_t status = NT_STATUS_INVALID_PARAMETER; int n_op = (sizeof (ops) / sizeof (ops[0])); --- 381,390 ----
*** 394,437 **** if (lsa_handle == NULL || name == NULL || info == NULL) return (NT_STATUS_INVALID_PARAMETER); bzero(info, sizeof (smb_account_t)); - svinfo = ndr_rpc_server_info(lsa_handle); - if (svinfo->sv_os == NATIVE_OS_WIN2000 && - svinfo->sv_version_major == 5 && svinfo->sv_version_minor == 0) { /* ! * Windows 2000 doesn't like an LSA lookup for * DOMAIN\Administrator. */ if ((p = strchr(name, '\\')) != 0) { ++p; if (strcasecmp(p, "administrator") == 0) name = p; } - } - length = smb_wcequiv_strlen(name); names.name[0].length = length; names.name[0].allosize = length; names.name[0].str = (unsigned char *)name; names.n_entry = 1; - if (ndr_rpc_server_os(lsa_handle) == NATIVE_OS_WIN2000) { for (i = 0; i < n_op; ++i) { ndr_rpc_set_nonull(lsa_handle); status = (*ops[i])(lsa_handle, &names, info); if (status != NT_STATUS_INVALID_PARAMETER) break; } - } else { - ndr_rpc_set_nonull(lsa_handle); - status = lsar_lookup_names1(lsa_handle, &names, info); - } if (status == NT_STATUS_SUCCESS) { info->a_name = lsar_get_username(name); if (!smb_account_validate(info)) { --- 393,426 ---- if (lsa_handle == NULL || name == NULL || info == NULL) return (NT_STATUS_INVALID_PARAMETER); bzero(info, sizeof (smb_account_t)); /* ! * Windows 2000 (or later) doesn't like an LSA lookup for * DOMAIN\Administrator. */ if ((p = strchr(name, '\\')) != 0) { ++p; if (strcasecmp(p, "administrator") == 0) name = p; } length = smb_wcequiv_strlen(name); names.name[0].length = length; names.name[0].allosize = length; names.name[0].str = (unsigned char *)name; names.n_entry = 1; for (i = 0; i < n_op; ++i) { ndr_rpc_set_nonull(lsa_handle); status = (*ops[i])(lsa_handle, &names, info); if (status != NT_STATUS_INVALID_PARAMETER) break; } if (status == NT_STATUS_SUCCESS) { info->a_name = lsar_get_username(name); if (!smb_account_validate(info)) {
*** 724,737 **** bzero(account, sizeof (smb_account_t)); bzero(sidbuf, SMB_SID_STRSZ); smb_sid_tostr(sid, sidbuf); smb_tracef("%s", sidbuf); ! if (ndr_rpc_server_os(lsa_handle) == NATIVE_OS_WIN2000) ! status = lsar_lookup_sids2(lsa_handle, (lsa_sid_t *)sid, ! account); ! else status = lsar_lookup_sids1(lsa_handle, (lsa_sid_t *)sid, account); if (status == NT_STATUS_SUCCESS) { if (!smb_account_validate(account)) { --- 713,724 ---- bzero(account, sizeof (smb_account_t)); bzero(sidbuf, SMB_SID_STRSZ); smb_sid_tostr(sid, sidbuf); smb_tracef("%s", sidbuf); ! status = lsar_lookup_sids2(lsa_handle, (lsa_sid_t *)sid, account); ! if (status == RPC_NT_PROCNUM_OUT_OF_RANGE) status = lsar_lookup_sids1(lsa_handle, (lsa_sid_t *)sid, account); if (status == NT_STATUS_SUCCESS) { if (!smb_account_validate(account)) {
*** 1165,1175 **** bzero(&arg, sizeof (struct mslsa_LookupPrivValue)); (void) memcpy(&arg.handle, lsa_handle, sizeof (mslsa_handle_t)); length = smb_wcequiv_strlen(name); - if (ndr_rpc_server_os(lsa_handle) == NATIVE_OS_WIN2000) length += sizeof (smb_wchar_t); arg.name.length = length; arg.name.allosize = length; arg.name.str = (unsigned char *)name; --- 1152,1161 ----