--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/symbian-qemu-0.9.1-12/python-2.6.1/Modules/grpmodule.c Fri Jul 31 15:01:17 2009 +0100
@@ -0,0 +1,194 @@
+
+/* UNIX group file access module */
+
+#include "Python.h"
+#include "structseq.h"
+
+#include <sys/types.h>
+#include <grp.h>
+
+static PyStructSequence_Field struct_group_type_fields[] = {
+ {"gr_name", "group name"},
+ {"gr_passwd", "password"},
+ {"gr_gid", "group id"},
+ {"gr_mem", "group memebers"},
+ {0}
+};
+
+PyDoc_STRVAR(struct_group__doc__,
+"grp.struct_group: Results from getgr*() routines.\n\n\
+This object may be accessed either as a tuple of\n\
+ (gr_name,gr_passwd,gr_gid,gr_mem)\n\
+or via the object attributes as named in the above tuple.\n");
+
+static PyStructSequence_Desc struct_group_type_desc = {
+ "grp.struct_group",
+ struct_group__doc__,
+ struct_group_type_fields,
+ 4,
+};
+
+
+static int initialized;
+static PyTypeObject StructGrpType;
+
+static PyObject *
+mkgrent(struct group *p)
+{
+ int setIndex = 0;
+ PyObject *v = PyStructSequence_New(&StructGrpType), *w;
+ char **member;
+
+ if (v == NULL)
+ return NULL;
+
+ if ((w = PyList_New(0)) == NULL) {
+ Py_DECREF(v);
+ return NULL;
+ }
+ for (member = p->gr_mem; *member != NULL; member++) {
+ PyObject *x = PyString_FromString(*member);
+ if (x == NULL || PyList_Append(w, x) != 0) {
+ Py_XDECREF(x);
+ Py_DECREF(w);
+ Py_DECREF(v);
+ return NULL;
+ }
+ Py_DECREF(x);
+ }
+
+#define SET(i,val) PyStructSequence_SET_ITEM(v, i, val)
+ SET(setIndex++, PyString_FromString(p->gr_name));
+#ifdef __VMS
+ SET(setIndex++, Py_None);
+ Py_INCREF(Py_None);
+#else
+ if (p->gr_passwd)
+ SET(setIndex++, PyString_FromString(p->gr_passwd));
+ else {
+ SET(setIndex++, Py_None);
+ Py_INCREF(Py_None);
+ }
+#endif
+ SET(setIndex++, PyInt_FromLong((long) p->gr_gid));
+ SET(setIndex++, w);
+#undef SET
+
+ if (PyErr_Occurred()) {
+ Py_DECREF(v);
+ Py_DECREF(w);
+ return NULL;
+ }
+
+ return v;
+}
+
+static PyObject *
+grp_getgrgid(PyObject *self, PyObject *pyo_id)
+{
+ PyObject *py_int_id;
+ unsigned int gid;
+ struct group *p;
+
+ py_int_id = PyNumber_Int(pyo_id);
+ if (!py_int_id)
+ return NULL;
+ gid = PyInt_AS_LONG(py_int_id);
+ Py_DECREF(py_int_id);
+
+ if ((p = getgrgid(gid)) == NULL) {
+ PyErr_Format(PyExc_KeyError, "getgrgid(): gid not found: %d", gid);
+ return NULL;
+ }
+ return mkgrent(p);
+}
+
+static PyObject *
+grp_getgrnam(PyObject *self, PyObject *pyo_name)
+{
+ PyObject *py_str_name;
+ char *name;
+ struct group *p;
+
+ py_str_name = PyObject_Str(pyo_name);
+ if (!py_str_name)
+ return NULL;
+ name = PyString_AS_STRING(py_str_name);
+
+ if ((p = getgrnam(name)) == NULL) {
+ PyErr_Format(PyExc_KeyError, "getgrnam(): name not found: %s", name);
+ Py_DECREF(py_str_name);
+ return NULL;
+ }
+
+ Py_DECREF(py_str_name);
+ return mkgrent(p);
+}
+
+static PyObject *
+grp_getgrall(PyObject *self, PyObject *ignore)
+{
+ PyObject *d;
+ struct group *p;
+
+ if ((d = PyList_New(0)) == NULL)
+ return NULL;
+ setgrent();
+ while ((p = getgrent()) != NULL) {
+ PyObject *v = mkgrent(p);
+ if (v == NULL || PyList_Append(d, v) != 0) {
+ Py_XDECREF(v);
+ Py_DECREF(d);
+ return NULL;
+ }
+ Py_DECREF(v);
+ }
+ endgrent();
+ return d;
+}
+
+static PyMethodDef grp_methods[] = {
+ {"getgrgid", grp_getgrgid, METH_O,
+ "getgrgid(id) -> tuple\n\
+Return the group database entry for the given numeric group ID. If\n\
+id is not valid, raise KeyError."},
+ {"getgrnam", grp_getgrnam, METH_O,
+ "getgrnam(name) -> tuple\n\
+Return the group database entry for the given group name. If\n\
+name is not valid, raise KeyError."},
+ {"getgrall", grp_getgrall, METH_NOARGS,
+ "getgrall() -> list of tuples\n\
+Return a list of all available group entries, in arbitrary order."},
+ {NULL, NULL} /* sentinel */
+};
+
+PyDoc_STRVAR(grp__doc__,
+"Access to the Unix group database.\n\
+\n\
+Group entries are reported as 4-tuples containing the following fields\n\
+from the group database, in order:\n\
+\n\
+ name - name of the group\n\
+ passwd - group password (encrypted); often empty\n\
+ gid - numeric ID of the group\n\
+ mem - list of members\n\
+\n\
+The gid is an integer, name and password are strings. (Note that most\n\
+users are not explicitly listed as members of the groups they are in\n\
+according to the password database. Check both databases to get\n\
+complete membership information.)");
+
+
+PyMODINIT_FUNC
+initgrp(void)
+{
+ PyObject *m, *d;
+ m = Py_InitModule3("grp", grp_methods, grp__doc__);
+ if (m == NULL)
+ return;
+ d = PyModule_GetDict(m);
+ if (!initialized)
+ PyStructSequence_InitType(&StructGrpType, &struct_group_type_desc);
+ PyDict_SetItemString(d, "struct_group", (PyObject *) &StructGrpType);
+ initialized = 1;
+}