summaryrefslogtreecommitdiffstats
path: root/AppPkg/Applications/Python/Python-2.7.2/Modules/pwdmodule.c
diff options
context:
space:
mode:
authordarylm503 <darylm503@6f19259b-4bc3-4df7-8a09-765794883524>2012-04-16 22:12:42 +0000
committerdarylm503 <darylm503@6f19259b-4bc3-4df7-8a09-765794883524>2012-04-16 22:12:42 +0000
commit4710c53dcad1ebf3755f3efb9e80ac24bd72a9b2 (patch)
tree2d17d2388a78082e32f6a97120d707328143543b /AppPkg/Applications/Python/Python-2.7.2/Modules/pwdmodule.c
parentcbc6b5e54599c7391ece99ad3c5313f4dd4ddda6 (diff)
downloadedk2-4710c53dcad1ebf3755f3efb9e80ac24bd72a9b2.tar.gz
edk2-4710c53dcad1ebf3755f3efb9e80ac24bd72a9b2.tar.bz2
edk2-4710c53dcad1ebf3755f3efb9e80ac24bd72a9b2.zip
AppPkg/Applications/Python: Add Python 2.7.2 sources since the release of Python 2.7.3 made them unavailable from the python.org web site.
These files are a subset of the python-2.7.2.tgz distribution from python.org. Changed files from PyMod-2.7.2 have been copied into the corresponding directories of this tree, replacing the original files in the distribution. Signed-off-by: daryl.mcdaniel@intel.com git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@13197 6f19259b-4bc3-4df7-8a09-765794883524
Diffstat (limited to 'AppPkg/Applications/Python/Python-2.7.2/Modules/pwdmodule.c')
-rw-r--r--AppPkg/Applications/Python/Python-2.7.2/Modules/pwdmodule.c200
1 files changed, 200 insertions, 0 deletions
diff --git a/AppPkg/Applications/Python/Python-2.7.2/Modules/pwdmodule.c b/AppPkg/Applications/Python/Python-2.7.2/Modules/pwdmodule.c
new file mode 100644
index 0000000000..87dbdbf4d9
--- /dev/null
+++ b/AppPkg/Applications/Python/Python-2.7.2/Modules/pwdmodule.c
@@ -0,0 +1,200 @@
+
+/* UNIX password file access module */
+
+#include "Python.h"
+#include "structseq.h"
+
+#include <sys/types.h>
+#include <pwd.h>
+
+static PyStructSequence_Field struct_pwd_type_fields[] = {
+ {"pw_name", "user name"},
+ {"pw_passwd", "password"},
+ {"pw_uid", "user id"},
+ {"pw_gid", "group id"},
+ {"pw_gecos", "real name"},
+ {"pw_dir", "home directory"},
+ {"pw_shell", "shell program"},
+ {0}
+};
+
+PyDoc_STRVAR(struct_passwd__doc__,
+"pwd.struct_passwd: Results from getpw*() routines.\n\n\
+This object may be accessed either as a tuple of\n\
+ (pw_name,pw_passwd,pw_uid,pw_gid,pw_gecos,pw_dir,pw_shell)\n\
+or via the object attributes as named in the above tuple.");
+
+static PyStructSequence_Desc struct_pwd_type_desc = {
+ "pwd.struct_passwd",
+ struct_passwd__doc__,
+ struct_pwd_type_fields,
+ 7,
+};
+
+PyDoc_STRVAR(pwd__doc__,
+"This module provides access to the Unix password database.\n\
+It is available on all Unix versions.\n\
+\n\
+Password database entries are reported as 7-tuples containing the following\n\
+items from the password database (see `<pwd.h>'), in order:\n\
+pw_name, pw_passwd, pw_uid, pw_gid, pw_gecos, pw_dir, pw_shell.\n\
+The uid and gid items are integers, all others are strings. An\n\
+exception is raised if the entry asked for cannot be found.");
+
+
+static int initialized;
+static PyTypeObject StructPwdType;
+
+static void
+sets(PyObject *v, int i, char* val)
+{
+ if (val)
+ PyStructSequence_SET_ITEM(v, i, PyString_FromString(val));
+ else {
+ PyStructSequence_SET_ITEM(v, i, Py_None);
+ Py_INCREF(Py_None);
+ }
+}
+
+static PyObject *
+mkpwent(struct passwd *p)
+{
+ int setIndex = 0;
+ PyObject *v = PyStructSequence_New(&StructPwdType);
+ if (v == NULL)
+ return NULL;
+
+#define SETI(i,val) PyStructSequence_SET_ITEM(v, i, PyInt_FromLong((long) val))
+#define SETS(i,val) sets(v, i, val)
+
+ SETS(setIndex++, p->pw_name);
+#ifdef __VMS
+ SETS(setIndex++, "");
+#else
+ SETS(setIndex++, p->pw_passwd);
+#endif
+ SETI(setIndex++, p->pw_uid);
+ SETI(setIndex++, p->pw_gid);
+#ifdef __VMS
+ SETS(setIndex++, "");
+#else
+ SETS(setIndex++, p->pw_gecos);
+#endif
+ SETS(setIndex++, p->pw_dir);
+ SETS(setIndex++, p->pw_shell);
+
+#undef SETS
+#undef SETI
+
+ if (PyErr_Occurred()) {
+ Py_XDECREF(v);
+ return NULL;
+ }
+
+ return v;
+}
+
+PyDoc_STRVAR(pwd_getpwuid__doc__,
+"getpwuid(uid) -> (pw_name,pw_passwd,pw_uid,\n\
+ pw_gid,pw_gecos,pw_dir,pw_shell)\n\
+Return the password database entry for the given numeric user ID.\n\
+See help(pwd) for more on password database entries.");
+
+static PyObject *
+pwd_getpwuid(PyObject *self, PyObject *args)
+{
+ unsigned int uid;
+ struct passwd *p;
+ if (!PyArg_ParseTuple(args, "I:getpwuid", &uid))
+ return NULL;
+ if ((p = getpwuid(uid)) == NULL) {
+ PyErr_Format(PyExc_KeyError,
+ "getpwuid(): uid not found: %d", uid);
+ return NULL;
+ }
+ return mkpwent(p);
+}
+
+PyDoc_STRVAR(pwd_getpwnam__doc__,
+"getpwnam(name) -> (pw_name,pw_passwd,pw_uid,\n\
+ pw_gid,pw_gecos,pw_dir,pw_shell)\n\
+Return the password database entry for the given user name.\n\
+See help(pwd) for more on password database entries.");
+
+static PyObject *
+pwd_getpwnam(PyObject *self, PyObject *args)
+{
+ char *name;
+ struct passwd *p;
+ if (!PyArg_ParseTuple(args, "s:getpwnam", &name))
+ return NULL;
+ if ((p = getpwnam(name)) == NULL) {
+ PyErr_Format(PyExc_KeyError,
+ "getpwnam(): name not found: %s", name);
+ return NULL;
+ }
+ return mkpwent(p);
+}
+
+#ifdef HAVE_GETPWENT
+PyDoc_STRVAR(pwd_getpwall__doc__,
+"getpwall() -> list_of_entries\n\
+Return a list of all available password database entries, \
+in arbitrary order.\n\
+See help(pwd) for more on password database entries.");
+
+static PyObject *
+pwd_getpwall(PyObject *self)
+{
+ PyObject *d;
+ struct passwd *p;
+ if ((d = PyList_New(0)) == NULL)
+ return NULL;
+#if defined(PYOS_OS2) && defined(PYCC_GCC)
+ if ((p = getpwuid(0)) != NULL) {
+#else
+ setpwent();
+ while ((p = getpwent()) != NULL) {
+#endif
+ PyObject *v = mkpwent(p);
+ if (v == NULL || PyList_Append(d, v) != 0) {
+ Py_XDECREF(v);
+ Py_DECREF(d);
+ endpwent();
+ return NULL;
+ }
+ Py_DECREF(v);
+ }
+ endpwent();
+ return d;
+}
+#endif
+
+static PyMethodDef pwd_methods[] = {
+ {"getpwuid", pwd_getpwuid, METH_VARARGS, pwd_getpwuid__doc__},
+ {"getpwnam", pwd_getpwnam, METH_VARARGS, pwd_getpwnam__doc__},
+#ifdef HAVE_GETPWENT
+ {"getpwall", (PyCFunction)pwd_getpwall,
+ METH_NOARGS, pwd_getpwall__doc__},
+#endif
+ {NULL, NULL} /* sentinel */
+};
+
+PyMODINIT_FUNC
+initpwd(void)
+{
+ PyObject *m;
+ m = Py_InitModule3("pwd", pwd_methods, pwd__doc__);
+ if (m == NULL)
+ return;
+
+ if (!initialized)
+ PyStructSequence_InitType(&StructPwdType,
+ &struct_pwd_type_desc);
+ Py_INCREF((PyObject *) &StructPwdType);
+ PyModule_AddObject(m, "struct_passwd", (PyObject *) &StructPwdType);
+ /* And for b/w compatibility (this was defined by mistake): */
+ Py_INCREF((PyObject *) &StructPwdType);
+ PyModule_AddObject(m, "struct_pwent", (PyObject *) &StructPwdType);
+ initialized = 1;
+}