diff options
author | Matthew Ahrens <Matthew.Ahrens@Sun.COM> | 2009-07-22 16:16:41 -0700 |
---|---|---|
committer | Matthew Ahrens <Matthew.Ahrens@Sun.COM> | 2009-07-22 16:16:41 -0700 |
commit | 3b12c289fe048d2e1698e22811cbfd6d3b3ed96e (patch) | |
tree | 767d895ce6918a70fbb509a99c6e76d1cc2815d2 /usr/src/lib/pyzfs/common/ioctl.c | |
parent | f0778428155a59de85978be8770ee46e1b920aaf (diff) | |
download | illumos-gate-3b12c289fe048d2e1698e22811cbfd6d3b3ed96e.tar.gz |
6861983 zfs should use new name <-> SID interfaces
6862984 userquota commands can hang
Diffstat (limited to 'usr/src/lib/pyzfs/common/ioctl.c')
-rw-r--r-- | usr/src/lib/pyzfs/common/ioctl.c | 50 |
1 files changed, 27 insertions, 23 deletions
diff --git a/usr/src/lib/pyzfs/common/ioctl.c b/usr/src/lib/pyzfs/common/ioctl.c index 7a10a4e25e..ae3fa74dc2 100644 --- a/usr/src/lib/pyzfs/common/ioctl.c +++ b/usr/src/lib/pyzfs/common/ioctl.c @@ -33,6 +33,7 @@ #include <zone.h> #include <libintl.h> #include <libzfs.h> +#include <directory.h> #include "zfs_prop.h" static PyObject *ZFSError; @@ -456,43 +457,46 @@ py_sid_to_id(PyObject *self, PyObject *args) /* * Translate the sid string ("S-1-...") to the user@domain name, if - * possible. There should be a better way to do this, but for now we - * just translate to the (possibly ephemeral) uid and then back again. + * possible. */ static PyObject * py_sid_to_name(PyObject *self, PyObject *args) { - char *sid; - int err, isuser; - uid_t id; - char *name, *domain; - char buf[256]; + int isuser; + char *name, *sid; + directory_error_t e; + uint64_t classes; + PyObject *ret; if (!PyArg_ParseTuple(args, "si", &sid, &isuser)) return (NULL); - - err = sid_to_id(sid, isuser, &id); - if (err) { + e = directory_name_from_sid(NULL, sid, &name, &classes); + if (e != NULL) { + directory_error_free(e); PyErr_SetString(PyExc_KeyError, sid); return (NULL); } - - if (isuser) { - err = idmap_getwinnamebyuid(id, - IDMAP_REQ_FLG_USE_CACHE, &name, &domain); - } else { - err = idmap_getwinnamebygid(id, - IDMAP_REQ_FLG_USE_CACHE, &name, &domain); - } - if (err != IDMAP_SUCCESS) { + if (name == NULL) { PyErr_SetString(PyExc_KeyError, sid); return (NULL); } - (void) snprintf(buf, sizeof (buf), "%s@%s", name, domain); - free(name); - free(domain); + if (isuser) { + if (!(classes & DIRECTORY_CLASS_USER)) { + free(name); + PyErr_SetString(PyExc_KeyError, sid); + return (NULL); + } + } else { + if (!(classes & DIRECTORY_CLASS_GROUP)) { + free(name); + PyErr_SetString(PyExc_KeyError, sid); + return (NULL); + } + } - return (Py_BuildValue("s", buf)); + ret = PyString_FromString(name); + free(name); + return (ret); } static PyObject * |