summaryrefslogtreecommitdiff
path: root/usr/src/lib/pysolaris/common
diff options
context:
space:
mode:
authorSam Falkner <Sam.Falkner@Sun.COM>2010-02-25 11:47:05 -0700
committerSam Falkner <Sam.Falkner@Sun.COM>2010-02-25 11:47:05 -0700
commite4d060fb4c00d44cd578713eb9a921f594b733b8 (patch)
treec38276f18cf33dbd25c1451f4d3a92ef8adfc6b3 /usr/src/lib/pysolaris/common
parente69acc927b15c46de46ae637e53e1b808990a5bc (diff)
downloadillumos-gate-e4d060fb4c00d44cd578713eb9a921f594b733b8.tar.gz
6895223 zfs userspace/groupspace/allow/unallow/holds IOError in Japanese locale
Diffstat (limited to 'usr/src/lib/pysolaris/common')
-rw-r--r--usr/src/lib/pysolaris/common/__init__.py28
-rw-r--r--usr/src/lib/pysolaris/common/mapfile-vers45
-rw-r--r--usr/src/lib/pysolaris/common/misc.c140
3 files changed, 213 insertions, 0 deletions
diff --git a/usr/src/lib/pysolaris/common/__init__.py b/usr/src/lib/pysolaris/common/__init__.py
new file mode 100644
index 0000000000..ac2aad21b5
--- /dev/null
+++ b/usr/src/lib/pysolaris/common/__init__.py
@@ -0,0 +1,28 @@
+#! /usr/bin/python2.4
+#
+# CDDL HEADER START
+#
+# The contents of this file are subject to the terms of the
+# Common Development and Distribution License (the "License").
+# You may not use this file except in compliance with the License.
+#
+# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+# or http://www.opensolaris.org/os/licensing.
+# See the License for the specific language governing permissions
+# and limitations under the License.
+#
+# When distributing Covered Code, include this CDDL HEADER in each
+# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
+# If applicable, add the following below this CDDL HEADER, with the
+# fields enclosed by brackets "[]" replaced with your own identifying
+# information: Portions Copyright [yyyy] [name of copyright owner]
+#
+# CDDL HEADER END
+#
+# Copyright 2010 Sun Microsystems, Inc. All rights reserved.
+# Use is subject to license terms.
+#
+
+"""
+package which provides access to Solaris-specific functionality
+"""
diff --git a/usr/src/lib/pysolaris/common/mapfile-vers b/usr/src/lib/pysolaris/common/mapfile-vers
new file mode 100644
index 0000000000..7afd0dfa91
--- /dev/null
+++ b/usr/src/lib/pysolaris/common/mapfile-vers
@@ -0,0 +1,45 @@
+#
+# CDDL HEADER START
+#
+# The contents of this file are subject to the terms of the
+# Common Development and Distribution License (the "License").
+# You may not use this file except in compliance with the License.
+#
+# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+# or http://www.opensolaris.org/os/licensing.
+# See the License for the specific language governing permissions
+# and limitations under the License.
+#
+# When distributing Covered Code, include this CDDL HEADER in each
+# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
+# If applicable, add the following below this CDDL HEADER, with the
+# fields enclosed by brackets "[]" replaced with your own identifying
+# information: Portions Copyright [yyyy] [name of copyright owner]
+#
+# CDDL HEADER END
+#
+#
+# Copyright 2010 Sun Microsystems, Inc. All rights reserved.
+# Use is subject to license terms.
+#
+
+#
+# MAPFILE HEADER START
+#
+# WARNING: STOP NOW. DO NOT MODIFY THIS FILE.
+# Object versioning must comply with the rules detailed in
+#
+# usr/src/lib/README.mapfiles
+#
+# You should not be making modifications here until you've read the most current
+# copy of that file. If you need help, contact a gatekeeper for guidance.
+#
+# MAPFILE HEADER END
+#
+
+SUNWprivate {
+ global:
+ initmisc;
+ local:
+ *;
+};
diff --git a/usr/src/lib/pysolaris/common/misc.c b/usr/src/lib/pysolaris/common/misc.c
new file mode 100644
index 0000000000..923cab445f
--- /dev/null
+++ b/usr/src/lib/pysolaris/common/misc.c
@@ -0,0 +1,140 @@
+/*
+ * CDDL HEADER START
+ *
+ * The contents of this file are subject to the terms of the
+ * Common Development and Distribution License (the "License").
+ * You may not use this file except in compliance with the License.
+ *
+ * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+ * or http://www.opensolaris.org/os/licensing.
+ * See the License for the specific language governing permissions
+ * and limitations under the License.
+ *
+ * When distributing Covered Code, include this CDDL HEADER in each
+ * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
+ * If applicable, add the following below this CDDL HEADER, with the
+ * fields enclosed by brackets "[]" replaced with your own identifying
+ * information: Portions Copyright [yyyy] [name of copyright owner]
+ *
+ * CDDL HEADER END
+ */
+/*
+ * Copyright 2010 Sun Microsystems, Inc. All rights reserved.
+ * Use is subject to license terms.
+ */
+
+#include <Python.h>
+#include <zone.h>
+#include <libintl.h>
+#include <directory.h>
+
+#ifdef __lint
+#define dgettext(x, y) y
+#endif
+
+#define _(s) dgettext(TEXT_DOMAIN, s)
+
+extern int sid_to_id(char *sid, boolean_t user, uid_t *id);
+
+static PyObject *
+py_sid_to_id(PyObject *self, PyObject *args)
+{
+ char *sid;
+ int err, isuser;
+ uid_t id;
+
+ if (!PyArg_ParseTuple(args, "si", &sid, &isuser))
+ return (NULL);
+
+ err = sid_to_id(sid, isuser, &id);
+ if (err) {
+ PyErr_SetString(PyExc_KeyError, sid);
+ return (NULL);
+ }
+
+ return (Py_BuildValue("I", id));
+}
+
+/*
+ * Translate the sid string ("S-1-...") to the user@domain name, if
+ * possible.
+ */
+static PyObject *
+py_sid_to_name(PyObject *self, PyObject *args)
+{
+ int isuser;
+ char *name, *sid;
+ directory_error_t e;
+ uint64_t classes;
+ PyObject *ret;
+
+ if (!PyArg_ParseTuple(args, "si", &sid, &isuser))
+ return (NULL);
+ e = directory_name_from_sid(NULL, sid, &name, &classes);
+ if (e != NULL) {
+ directory_error_free(e);
+ PyErr_SetString(PyExc_KeyError, sid);
+ return (NULL);
+ }
+ if (name == NULL) {
+ PyErr_SetString(PyExc_KeyError, sid);
+ return (NULL);
+ }
+ 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);
+ }
+ }
+
+ ret = PyString_FromString(name);
+ free(name);
+ return (ret);
+}
+
+static PyObject *
+py_isglobalzone(PyObject *self, PyObject *args)
+{
+ return (Py_BuildValue("i", getzoneid() == GLOBAL_ZONEID));
+}
+
+static PyObject *
+py_gettext(PyObject *self, PyObject *args)
+{
+ char *message, *result;
+ PyObject *ret = NULL;
+
+ if (!PyArg_ParseTuple(args, "s", &message))
+ return (NULL);
+
+ result = dgettext(TEXT_DOMAIN, message);
+
+ ret = Py_BuildValue("s", result);
+ return (ret);
+}
+
+static PyMethodDef solarismethods[] = {
+ {"sid_to_id", py_sid_to_id, METH_VARARGS, "Map SID to UID/GID."},
+ {"sid_to_name", py_sid_to_name, METH_VARARGS,
+ "Map SID to name@domain."},
+ {"isglobalzone", py_isglobalzone, METH_NOARGS,
+ "Determine if this is the global zone."},
+ {"gettext", py_gettext, METH_VARARGS, "Native call to gettext(3C)"},
+ {NULL, NULL, 0, NULL}
+};
+
+void
+initmisc(void)
+{
+ char *noop;
+
+ noop = _("noop");
+ PyObject *solaris_misc = Py_InitModule("solaris.misc", solarismethods);
+}