svn commit: r275579 - in head/cddl/contrib/opensolaris: cmd/zfs lib/libzfs/common
Xin LI
delphij at FreeBSD.org
Sun Dec 7 18:15:29 UTC 2014
Author: delphij
Date: Sun Dec 7 18:15:27 2014
New Revision: 275579
URL: https://svnweb.freebsd.org/changeset/base/275579
Log:
MFV r275537:
Illumos issue:
5316 allow smbadm join to use RPC
(Due to our lack of smbsrv this is mostly no-op on
FreeBSD)
MFC after: 2 weeks
Modified:
head/cddl/contrib/opensolaris/cmd/zfs/zfs_main.c
head/cddl/contrib/opensolaris/lib/libzfs/common/libzfs_dataset.c
Directory Properties:
head/cddl/contrib/opensolaris/ (props changed)
head/cddl/contrib/opensolaris/cmd/zfs/ (props changed)
head/cddl/contrib/opensolaris/lib/libzfs/ (props changed)
Modified: head/cddl/contrib/opensolaris/cmd/zfs/zfs_main.c
==============================================================================
--- head/cddl/contrib/opensolaris/cmd/zfs/zfs_main.c Sun Dec 7 17:32:06 2014 (r275578)
+++ head/cddl/contrib/opensolaris/cmd/zfs/zfs_main.c Sun Dec 7 18:15:27 2014 (r275579)
@@ -68,6 +68,7 @@
#ifdef sun
#include <aclutils.h>
#include <directory.h>
+#include <idmap.h>
#endif
#include "zfs_iter.h"
@@ -2390,10 +2391,9 @@ userspace_cb(void *arg, const char *doma
/* SMB */
char sid[ZFS_MAXNAMELEN + 32];
uid_t id;
- uint64_t classes;
#ifdef sun
int err;
- directory_error_t e;
+ int flag = IDMAP_REQ_FLG_USE_CACHE;
#endif
smbentity = B_TRUE;
@@ -2416,10 +2416,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: head/cddl/contrib/opensolaris/lib/libzfs/common/libzfs_dataset.c
==============================================================================
--- head/cddl/contrib/opensolaris/lib/libzfs/common/libzfs_dataset.c Sun Dec 7 17:32:06 2014 (r275578)
+++ head/cddl/contrib/opensolaris/lib/libzfs/common/libzfs_dataset.c Sun Dec 7 18:15:27 2014 (r275579)
@@ -2615,7 +2615,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],
@@ -2637,23 +2637,46 @@ 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 */
#else /* !sun */
return (ENOENT);
@@ -2663,12 +2686,15 @@ userquota_propname_decode(const char *pr
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-all
mailing list