svn commit: r275537 - in vendor/illumos/dist: cmd/zfs lib/libzfs/common
Xin LI
delphij at FreeBSD.org
Sat Dec 6 00:10:48 UTC 2014
Author: delphij
Date: Sat Dec 6 00:10:47 2014
New Revision: 275537
URL: https://svnweb.freebsd.org/changeset/base/275537
Log:
5316 allow smbadm join to use RPC
Reviewed by: Bayard Bell <bayard.bell at nexenta.com>
Reviewed by: Dan McDonald <danmcd at nexenta.com>
Reviewed by: Thomas Keiser <thomas.keiser at nexenta.com>
Reviewed by: Matthew Ahrens <mahrens at delphix.com>
Approved by: Robert Mustacchi <rm at joyent.com>
Author: Gordon Ross <gwr at nexenta.com>
illumos/illumos-gate at 1ed6b69a5ca1ca3ee5e9a4931f74e2237c7e1c9f
Modified:
vendor/illumos/dist/cmd/zfs/zfs_main.c
vendor/illumos/dist/lib/libzfs/common/libzfs_dataset.c
Modified: vendor/illumos/dist/cmd/zfs/zfs_main.c
==============================================================================
--- vendor/illumos/dist/cmd/zfs/zfs_main.c Sat Dec 6 00:01:19 2014 (r275536)
+++ vendor/illumos/dist/cmd/zfs/zfs_main.c Sat Dec 6 00:10:47 2014 (r275537)
@@ -63,6 +63,7 @@
#include <libuutil.h>
#include <aclutils.h>
#include <directory.h>
+#include <idmap.h>
#include "zfs_iter.h"
#include "zfs_util.h"
@@ -2372,9 +2373,8 @@ userspace_cb(void *arg, const char *doma
/* SMB */
char sid[ZFS_MAXNAMELEN + 32];
uid_t id;
- uint64_t classes;
int err;
- directory_error_t e;
+ int flag = IDMAP_REQ_FLG_USE_CACHE;
smbentity = B_TRUE;
@@ -2391,10 +2391,13 @@ userspace_cb(void *arg, const char *doma
if (err == 0) {
rid = id;
if (!cb->cb_sid2posix) {
- e = directory_name_from_sid(NULL, sid, &name,
- &classes);
- if (e != NULL)
- directory_error_free(e);
+ if (type == USTYPE_SMB_USR) {
+ (void) idmap_getwinnamebyuid(rid, flag,
+ &name, NULL);
+ } else {
+ (void) idmap_getwinnamebygid(rid, flag,
+ &name, NULL);
+ }
if (name == NULL)
name = sid;
}
Modified: vendor/illumos/dist/lib/libzfs/common/libzfs_dataset.c
==============================================================================
--- vendor/illumos/dist/lib/libzfs/common/libzfs_dataset.c Sat Dec 6 00:01:19 2014 (r275536)
+++ vendor/illumos/dist/lib/libzfs/common/libzfs_dataset.c Sat Dec 6 00:10:47 2014 (r275537)
@@ -2557,7 +2557,7 @@ userquota_propname_decode(const char *pr
boolean_t isuser;
domain[0] = '\0';
-
+ *ridp = 0;
/* Figure out the property type ({user|group}{quota|space}) */
for (type = 0; type < ZFS_NUM_USERQUOTA_PROPS; type++) {
if (strncmp(propname, zfs_userquota_prop_prefixes[type],
@@ -2578,35 +2578,61 @@ userquota_propname_decode(const char *pr
* It's a SID name (eg "user at domain") that needs to be
* turned into S-1-domainID-RID.
*/
- directory_error_t e;
+ int flag = 0;
+ idmap_stat stat, map_stat;
+ uid_t pid;
+ idmap_rid_t rid;
+ idmap_get_handle_t *gh = NULL;
+
+ stat = idmap_get_create(&gh);
+ if (stat != IDMAP_SUCCESS) {
+ idmap_get_destroy(gh);
+ return (ENOMEM);
+ }
if (zoned && getzoneid() == GLOBAL_ZONEID)
return (ENOENT);
if (isuser) {
- e = directory_sid_from_user_name(NULL,
- cp, &numericsid);
+ stat = idmap_getuidbywinname(cp, NULL, flag, &pid);
+ if (stat < 0)
+ return (ENOENT);
+ stat = idmap_get_sidbyuid(gh, pid, flag, &numericsid,
+ &rid, &map_stat);
} else {
- e = directory_sid_from_group_name(NULL,
- cp, &numericsid);
+ stat = idmap_getgidbywinname(cp, NULL, flag, &pid);
+ if (stat < 0)
+ return (ENOENT);
+ stat = idmap_get_sidbygid(gh, pid, flag, &numericsid,
+ &rid, &map_stat);
+ }
+ if (stat < 0) {
+ idmap_get_destroy(gh);
+ return (ENOENT);
}
- if (e != NULL) {
- directory_error_free(e);
+ stat = idmap_get_mappings(gh);
+ idmap_get_destroy(gh);
+
+ if (stat < 0) {
return (ENOENT);
}
if (numericsid == NULL)
return (ENOENT);
cp = numericsid;
+ *ridp = rid;
/* will be further decoded below */
}
if (strncmp(cp, "S-1-", 4) == 0) {
/* It's a numeric SID (eg "S-1-234-567-89") */
(void) strlcpy(domain, cp, domainlen);
- cp = strrchr(domain, '-');
- *cp = '\0';
- cp++;
-
errno = 0;
- *ridp = strtoull(cp, &end, 10);
+ if (*ridp == 0) {
+ cp = strrchr(domain, '-');
+ *cp = '\0';
+ cp++;
+ *ridp = strtoull(cp, &end, 10);
+ } else {
+ end = "";
+ }
if (numericsid) {
free(numericsid);
numericsid = NULL;
More information about the svn-src-vendor
mailing list