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