Print this page
NEX-19057 All zfs/nfs/smb threads in door calls to idle idmap
Reviewed by: Matt Barden <matt.barden@nexenta.com>
Reviewed by: Yuri Pankov <yuri.pankov@nexenta.com>
Reviewed by: Roman Strashkin <roman.strashkin@nexenta.com>
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-4083 Upstream changes from illumos 5917 and 5995
Reviewed by: Matt Barden <matt.barden@nexenta.com>
Reviewed by: Kevin Crowe <kevin.crowe@nexenta.com>
Reviewed by: Yuri Pankov <yuri.pankov@nexenta.com>
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>
NEX-2286 smbadm join error messages are uninformative
NEX-1638 Updated DC Locator
Includes work by: matt.barden@nexenta.com, kevin.crowe@nexenta.com
NEX-816 smbadm dumps core during first join attempt
SMB-50 User-mode SMB server
Includes work by these authors:
Thomas Keiser <thomas.keiser@nexenta.com>
Albert Lee <trisk@nexenta.com>
*** 18,28 ****
*
* CDDL HEADER END
*/
/*
* Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved.
! * Copyright 2015 Nexenta Systems, Inc. All rights reserved.
*/
#include <assert.h>
#include <syslog.h>
#include <door.h>
--- 18,28 ----
*
* CDDL HEADER END
*/
/*
* Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved.
! * Copyright 2019 Nexenta Systems, Inc. All rights reserved.
*/
#include <assert.h>
#include <syslog.h>
#include <door.h>
*** 31,51 ****
#include <strings.h>
#include <stdlib.h>
#include <unistd.h>
#include <errno.h>
#include <sys/mman.h>
#include <smbsrv/libsmb.h>
- #include <smbsrv/wintypes.h>
#include <smbsrv/smb_door.h>
static int smb_door_call(uint32_t, void *, xdrproc_t, void *, xdrproc_t);
static int smb_door_call_private(int, smb_doorarg_t *);
static int smb_door_encode(smb_doorarg_t *, uint32_t);
static int smb_door_decode(smb_doorarg_t *);
static void smb_door_sethdr(smb_doorhdr_t *, uint32_t, uint32_t);
static boolean_t smb_door_chkhdr(smb_doorarg_t *, smb_doorhdr_t *);
static void smb_door_free(door_arg_t *arg);
/*
* Given a SID, make a door call to get the associated name.
*
* Returns 0 if the door call is successful, otherwise -1.
--- 31,54 ----
#include <strings.h>
#include <stdlib.h>
#include <unistd.h>
#include <errno.h>
#include <sys/mman.h>
+ #include <smb/wintypes.h>
#include <smbsrv/libsmb.h>
#include <smbsrv/smb_door.h>
static int smb_door_call(uint32_t, void *, xdrproc_t, void *, xdrproc_t);
static int smb_door_call_private(int, smb_doorarg_t *);
static int smb_door_encode(smb_doorarg_t *, uint32_t);
static int smb_door_decode(smb_doorarg_t *);
static void smb_door_sethdr(smb_doorhdr_t *, uint32_t, uint32_t);
static boolean_t smb_door_chkhdr(smb_doorarg_t *, smb_doorhdr_t *);
static void smb_door_free(door_arg_t *arg);
+ static int smb_lookup_name_int(const char *name, sid_type_t sidtype,
+ lsa_account_t *acct, int);
+ static int smb_lookup_sid_int(const char *sid, lsa_account_t *acct, int);
/*
* Given a SID, make a door call to get the associated name.
*
* Returns 0 if the door call is successful, otherwise -1.
*** 55,72 ****
* NT_STATUS_NONE_MAPPED The SID could not be mapped to a name.
*/
int
smb_lookup_sid(const char *sid, lsa_account_t *acct)
{
int rc;
assert((sid != NULL) && (acct != NULL));
bzero(acct, sizeof (lsa_account_t));
(void) strlcpy(acct->a_sid, sid, SMB_SID_STRSZ);
! rc = smb_door_call(SMB_DR_LOOKUP_SID, acct, lsa_account_xdr,
acct, lsa_account_xdr);
if (rc != 0)
syslog(LOG_DEBUG, "smb_lookup_sid: %m");
return (rc);
--- 58,89 ----
* NT_STATUS_NONE_MAPPED The SID could not be mapped to a name.
*/
int
smb_lookup_sid(const char *sid, lsa_account_t *acct)
{
+ return (smb_lookup_sid_int(sid, acct, SMB_DR_LOOKUP_SID));
+ }
+ /*
+ * Variant of smb_lookup_sid to do a "local-only" lookup.
+ */
+ int
+ smb_lookup_lsid(const char *sid, lsa_account_t *acct)
+ {
+ return (smb_lookup_sid_int(sid, acct, SMB_DR_LOOKUP_LSID));
+ }
+
+ static int
+ smb_lookup_sid_int(const char *sid, lsa_account_t *acct, int dop)
+ {
int rc;
assert((sid != NULL) && (acct != NULL));
bzero(acct, sizeof (lsa_account_t));
(void) strlcpy(acct->a_sid, sid, SMB_SID_STRSZ);
! rc = smb_door_call(dop, acct, lsa_account_xdr,
acct, lsa_account_xdr);
if (rc != 0)
syslog(LOG_DEBUG, "smb_lookup_sid: %m");
return (rc);
*** 82,91 ****
--- 99,121 ----
* NT_STATUS_NONE_MAPPED The name could not be mapped to a SID.
*/
int
smb_lookup_name(const char *name, sid_type_t sidtype, lsa_account_t *acct)
{
+ return (smb_lookup_name_int(name, sidtype, acct, SMB_DR_LOOKUP_NAME));
+ }
+
+ int
+ smb_lookup_lname(const char *name, sid_type_t sidtype, lsa_account_t *acct)
+ {
+ return (smb_lookup_name_int(name, sidtype, acct, SMB_DR_LOOKUP_LNAME));
+ }
+
+ static int
+ smb_lookup_name_int(const char *name, sid_type_t sidtype, lsa_account_t *acct,
+ int dop)
+ {
char tmp[MAXNAMELEN];
char *dp = NULL;
char *np = NULL;
int rc;
*** 102,112 ****
(void) strlcpy(acct->a_name, np, MAXNAMELEN);
} else {
(void) strlcpy(acct->a_name, name, MAXNAMELEN);
}
! rc = smb_door_call(SMB_DR_LOOKUP_NAME, acct, lsa_account_xdr,
acct, lsa_account_xdr);
if (rc != 0)
syslog(LOG_DEBUG, "smb_lookup_name: %m");
return (rc);
--- 132,142 ----
(void) strlcpy(acct->a_name, np, MAXNAMELEN);
} else {
(void) strlcpy(acct->a_name, name, MAXNAMELEN);
}
! rc = smb_door_call(dop, acct, lsa_account_xdr,
acct, lsa_account_xdr);
if (rc != 0)
syslog(LOG_DEBUG, "smb_lookup_name: %m");
return (rc);