summaryrefslogtreecommitdiff
path: root/usr/src/lib/pyzfs/common/ioctl.c
diff options
context:
space:
mode:
authorMatthew Ahrens <Matthew.Ahrens@Sun.COM>2009-07-22 16:16:41 -0700
committerMatthew Ahrens <Matthew.Ahrens@Sun.COM>2009-07-22 16:16:41 -0700
commit3b12c289fe048d2e1698e22811cbfd6d3b3ed96e (patch)
tree767d895ce6918a70fbb509a99c6e76d1cc2815d2 /usr/src/lib/pyzfs/common/ioctl.c
parentf0778428155a59de85978be8770ee46e1b920aaf (diff)
downloadillumos-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.c50
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 *