Print this page
NEX-16818 Add fksmbcl development tool
NEX-17264 SMB client test tp_smbutil_013 fails after NEX-14666
Reviewed by: Evan Layton <evan.layton@nexenta.com>
Reviewed by: Matt Barden <matt.barden@nexenta.com>
and: (fix ref leaks)
NEX-4538 SMB1 create file should support extended_response format (2)
NEX-6116 Failures in smbtorture raw.open
Reviewed by: Evan Layton <evan.layton@nexenta.com>
Reviewed by: Kevin Crowe <kevin.crowe@nexenta.com>
Reviewed by: Matt Barden <matt.barden@nexenta.com>
Include this commit if upstreaming/backporting any of:
NEX-4540 SMB server declines EA support incorrectly
NEX-4239 smbtorture create failures re. allocation size
(illumos) 6398 SMB should support path names longer than 1024
NEX-3776 SMB should handle PreviousSessionID
Reviewed by: Gordon Ross <gwr@nexenta.com>
NEX-3620 need upstream cleanups for smbsrv
Reviewed by: Hans Rosenfeld <hans.rosenfeld@nexenta.com>
SMB-50 User-mode SMB server
 Includes work by these authors:
 Thomas Keiser <thomas.keiser@nexenta.com>
 Albert Lee <trisk@nexenta.com>
        
*** 8,39 ****
   * source.  A copy of the CDDL is also available via the Internet at
   * http://www.illumos.org/license/CDDL.
   */
  
  /*
!  * Copyright 2013 Nexenta Systems, Inc.  All rights reserved.
   * Copyright 2017 RackTop Systems.
   */
  
- 
  #include <sys/types.h>
  #include <sys/time.h>
  #include <sys/thread.h>
  #include <sys/cred.h>
  
  struct cred {
          uint32_t        pad[100];
  };
  
  cred_t cred0;
  cred_t *kcred = &cred0;
  
  cred_t *
  _curcred(void)
  {
!         /* Thread-specific data? */
!         return (&cred0);
  }
  
  /*ARGSUSED*/
  void
  crfree(cred_t *cr)
--- 8,61 ----
   * source.  A copy of the CDDL is also available via the Internet at
   * http://www.illumos.org/license/CDDL.
   */
  
  /*
!  * Copyright 2017 Nexenta Systems, Inc.  All rights reserved.
   * Copyright 2017 RackTop Systems.
   */
  
  #include <sys/types.h>
  #include <sys/time.h>
  #include <sys/thread.h>
  #include <sys/cred.h>
+ #include <sys/sid.h>
+ #include <strings.h>
  
+ /*
+  * This library does not implement real credentials. All contexts
+  * use an opaque cred_t object, and all activity happens in the
+  * context of the user who runs the program.
+  */
+ 
+ extern struct zone zone0;
+ 
  struct cred {
+         uid_t           cr_uid;
+         ksid_t          *cr_ksid;
          uint32_t        pad[100];
  };
  
  cred_t cred0;
  cred_t *kcred = &cred0;
  
+ /*
+  * Note that fksmbd uses CRED() for SMB user logons, but uses
+  * zone_kcred() for operations done internally by the server.
+  * Let CRED() (_curcred()) return &cred1, so it's different from
+  * kcred, otherwise tests like: (cred == kcred) are always true.
+  * Also, only cred1 will have a ksid (not kcred).
+  * The UID and SID are both "nobody".
+  */
+ ksiddomain_t ksdom1 = {1, 5, "S-1-0", {0}};
+ ksid_t ksid1 = { 60001, 0, 0, &ksdom1};
+ cred_t cred1 = { 60001, &ksid1 };
+ 
  cred_t *
  _curcred(void)
  {
!         return (&cred1);
  }
  
  /*ARGSUSED*/
  void
  crfree(cred_t *cr)
*** 48,65 ****
  
  /*ARGSUSED*/
  uid_t
  crgetuid(const cred_t *cr)
  {
!         return (0);
  }
  
  /*ARGSUSED*/
  uid_t
  crgetruid(const cred_t *cr)
  {
!         return (0);
  }
  
  /*ARGSUSED*/
  uid_t
  crgetgid(const cred_t *cr)
--- 70,87 ----
  
  /*ARGSUSED*/
  uid_t
  crgetuid(const cred_t *cr)
  {
!         return (cr->cr_uid);
  }
  
  /*ARGSUSED*/
  uid_t
  crgetruid(const cred_t *cr)
  {
!         return (cr->cr_uid);
  }
  
  /*ARGSUSED*/
  uid_t
  crgetgid(const cred_t *cr)
*** 79,88 ****
--- 101,137 ----
  crgetgroups(const cred_t *cr)
  {
          return (NULL);
  }
  
+ /*ARGSUSED*/
+ zoneid_t
+ crgetzoneid(const cred_t *cr)
+ {
+         return (GLOBAL_ZONEID);
+ }
+ 
+ /*ARGSUSED*/
+ struct zone *
+ crgetzone(const cred_t *cr)
+ {
+         return (&zone0);
+ }
+ 
  cred_t *
  zone_kcred(void)
  {
          return (kcred);
+ }
+ 
+ /*ARGSUSED*/
+ ksid_t *
+ crgetsid(const cred_t *cr, int i)
+ {
+         return (cr->cr_ksid);
+ }
+ 
+ cred_t *
+ ddi_get_cred(void)
+ {
+         return (_curcred());
  }