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);