diff options
author | Sam Falkner <Sam.Falkner@Sun.COM> | 2010-02-25 11:47:05 -0700 |
---|---|---|
committer | Sam Falkner <Sam.Falkner@Sun.COM> | 2010-02-25 11:47:05 -0700 |
commit | e4d060fb4c00d44cd578713eb9a921f594b733b8 (patch) | |
tree | c38276f18cf33dbd25c1451f4d3a92ef8adfc6b3 /usr/src/lib/pysolaris/common | |
parent | e69acc927b15c46de46ae637e53e1b808990a5bc (diff) | |
download | illumos-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__.py | 28 | ||||
-rw-r--r-- | usr/src/lib/pysolaris/common/mapfile-vers | 45 | ||||
-rw-r--r-- | usr/src/lib/pysolaris/common/misc.c | 140 |
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); +} |