summaryrefslogtreecommitdiffstats
path: root/contrib/tools/python3/src/Modules/pwdmodule.c
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/tools/python3/src/Modules/pwdmodule.c')
-rw-r--r--contrib/tools/python3/src/Modules/pwdmodule.c440
1 files changed, 220 insertions, 220 deletions
diff --git a/contrib/tools/python3/src/Modules/pwdmodule.c b/contrib/tools/python3/src/Modules/pwdmodule.c
index 901a3ed9a2e..cf5a1c09941 100644
--- a/contrib/tools/python3/src/Modules/pwdmodule.c
+++ b/contrib/tools/python3/src/Modules/pwdmodule.c
@@ -1,56 +1,56 @@
-
-/* UNIX password file access module */
-
-#include "Python.h"
-#include "posixmodule.h"
-
-#include <pwd.h>
-
-#include "clinic/pwdmodule.c.h"
-/*[clinic input]
-module pwd
-[clinic start generated code]*/
-/*[clinic end generated code: output=da39a3ee5e6b4b0d input=60f628ef356b97b6]*/
-
-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.");
-
-
+
+/* UNIX password file access module */
+
+#include "Python.h"
+#include "posixmodule.h"
+
+#include <pwd.h>
+
+#include "clinic/pwdmodule.c.h"
+/*[clinic input]
+module pwd
+[clinic start generated code]*/
+/*[clinic end generated code: output=da39a3ee5e6b4b0d input=60f628ef356b97b6]*/
+
+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.");
+
+
typedef struct {
PyTypeObject *StructPwdType;
} pwdmodulestate;
-
+
static inline pwdmodulestate*
get_pwd_state(PyObject *module)
{
@@ -65,84 +65,84 @@ static struct PyModuleDef pwdmodule;
#define DEFAULT_BUFFER_SIZE 1024
-static void
-sets(PyObject *v, int i, const char* val)
-{
- if (val) {
- PyObject *o = PyUnicode_DecodeFSDefault(val);
- PyStructSequence_SET_ITEM(v, i, o);
- }
- else {
- PyStructSequence_SET_ITEM(v, i, Py_None);
- Py_INCREF(Py_None);
- }
-}
-
-static PyObject *
-mkpwent(struct passwd *p)
-{
- int setIndex = 0;
+static void
+sets(PyObject *v, int i, const char* val)
+{
+ if (val) {
+ PyObject *o = PyUnicode_DecodeFSDefault(val);
+ PyStructSequence_SET_ITEM(v, i, o);
+ }
+ 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(modulestate_global->StructPwdType);
- if (v == NULL)
- return NULL;
-
-#define SETI(i,val) PyStructSequence_SET_ITEM(v, i, PyLong_FromLong((long) val))
-#define SETS(i,val) sets(v, i, val)
-
- SETS(setIndex++, p->pw_name);
-#if defined(HAVE_STRUCT_PASSWD_PW_PASSWD) && !defined(__ANDROID__)
- SETS(setIndex++, p->pw_passwd);
-#else
- SETS(setIndex++, "");
-#endif
- PyStructSequence_SET_ITEM(v, setIndex++, _PyLong_FromUid(p->pw_uid));
- PyStructSequence_SET_ITEM(v, setIndex++, _PyLong_FromGid(p->pw_gid));
-#if defined(HAVE_STRUCT_PASSWD_PW_GECOS)
- SETS(setIndex++, p->pw_gecos);
-#else
- SETS(setIndex++, "");
-#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;
-}
-
-/*[clinic input]
-pwd.getpwuid
-
- uidobj: object
- /
-
-Return the password database entry for the given numeric user ID.
-
-See `help(pwd)` for more on password database entries.
-[clinic start generated code]*/
-
-static PyObject *
-pwd_getpwuid(PyObject *module, PyObject *uidobj)
-/*[clinic end generated code: output=c4ee1d4d429b86c4 input=ae64d507a1c6d3e8]*/
-{
+ if (v == NULL)
+ return NULL;
+
+#define SETI(i,val) PyStructSequence_SET_ITEM(v, i, PyLong_FromLong((long) val))
+#define SETS(i,val) sets(v, i, val)
+
+ SETS(setIndex++, p->pw_name);
+#if defined(HAVE_STRUCT_PASSWD_PW_PASSWD) && !defined(__ANDROID__)
+ SETS(setIndex++, p->pw_passwd);
+#else
+ SETS(setIndex++, "");
+#endif
+ PyStructSequence_SET_ITEM(v, setIndex++, _PyLong_FromUid(p->pw_uid));
+ PyStructSequence_SET_ITEM(v, setIndex++, _PyLong_FromGid(p->pw_gid));
+#if defined(HAVE_STRUCT_PASSWD_PW_GECOS)
+ SETS(setIndex++, p->pw_gecos);
+#else
+ SETS(setIndex++, "");
+#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;
+}
+
+/*[clinic input]
+pwd.getpwuid
+
+ uidobj: object
+ /
+
+Return the password database entry for the given numeric user ID.
+
+See `help(pwd)` for more on password database entries.
+[clinic start generated code]*/
+
+static PyObject *
+pwd_getpwuid(PyObject *module, PyObject *uidobj)
+/*[clinic end generated code: output=c4ee1d4d429b86c4 input=ae64d507a1c6d3e8]*/
+{
PyObject *retval = NULL;
- uid_t uid;
+ uid_t uid;
int nomem = 0;
- struct passwd *p;
+ struct passwd *p;
char *buf = NULL, *buf2 = NULL;
-
- if (!_Py_Uid_Converter(uidobj, &uid)) {
- if (PyErr_ExceptionMatches(PyExc_OverflowError))
- PyErr_Format(PyExc_KeyError,
- "getpwuid(): uid not found");
- return NULL;
- }
+
+ if (!_Py_Uid_Converter(uidobj, &uid)) {
+ if (PyErr_ExceptionMatches(PyExc_OverflowError))
+ PyErr_Format(PyExc_KeyError,
+ "getpwuid(): uid not found");
+ return NULL;
+ }
#ifdef HAVE_GETPWUID_R
int status;
Py_ssize_t bufsize;
@@ -186,46 +186,46 @@ pwd_getpwuid(PyObject *module, PyObject *uidobj)
if (nomem == 1) {
return PyErr_NoMemory();
}
- PyObject *uid_obj = _PyLong_FromUid(uid);
- if (uid_obj == NULL)
- return NULL;
- PyErr_Format(PyExc_KeyError,
- "getpwuid(): uid not found: %S", uid_obj);
- Py_DECREF(uid_obj);
- return NULL;
- }
+ PyObject *uid_obj = _PyLong_FromUid(uid);
+ if (uid_obj == NULL)
+ return NULL;
+ PyErr_Format(PyExc_KeyError,
+ "getpwuid(): uid not found: %S", uid_obj);
+ Py_DECREF(uid_obj);
+ return NULL;
+ }
retval = mkpwent(p);
#ifdef HAVE_GETPWUID_R
PyMem_RawFree(buf);
#endif
return retval;
-}
-
-/*[clinic input]
-pwd.getpwnam
-
+}
+
+/*[clinic input]
+pwd.getpwnam
+
name: unicode
- /
-
-Return the password database entry for the given user name.
-
-See `help(pwd)` for more on password database entries.
-[clinic start generated code]*/
-
-static PyObject *
+ /
+
+Return the password database entry for the given user name.
+
+See `help(pwd)` for more on password database entries.
+[clinic start generated code]*/
+
+static PyObject *
pwd_getpwnam_impl(PyObject *module, PyObject *name)
/*[clinic end generated code: output=359ce1ddeb7a824f input=a6aeb5e3447fb9e0]*/
-{
+{
char *buf = NULL, *buf2 = NULL, *name_chars;
int nomem = 0;
- struct passwd *p;
- PyObject *bytes, *retval = NULL;
-
+ struct passwd *p;
+ PyObject *bytes, *retval = NULL;
+
if ((bytes = PyUnicode_EncodeFSDefault(name)) == NULL)
- return NULL;
- /* check for embedded null bytes */
+ return NULL;
+ /* check for embedded null bytes */
if (PyBytes_AsStringAndSize(bytes, &name_chars, NULL) == -1)
- goto out;
+ goto out;
#ifdef HAVE_GETPWNAM_R
int status;
Py_ssize_t bufsize;
@@ -272,57 +272,57 @@ pwd_getpwnam_impl(PyObject *module, PyObject *name)
PyErr_Format(PyExc_KeyError,
"getpwnam(): name not found: %R", name);
}
- goto out;
- }
- retval = mkpwent(p);
-out:
+ goto out;
+ }
+ retval = mkpwent(p);
+out:
PyMem_RawFree(buf);
- Py_DECREF(bytes);
- return retval;
-}
-
-#ifdef HAVE_GETPWENT
-/*[clinic input]
-pwd.getpwall
-
-Return a list of all available password database entries, in arbitrary order.
-
-See help(pwd) for more on password database entries.
-[clinic start generated code]*/
-
-static PyObject *
-pwd_getpwall_impl(PyObject *module)
-/*[clinic end generated code: output=4853d2f5a0afac8a input=d7ecebfd90219b85]*/
-{
- PyObject *d;
- struct passwd *p;
- if ((d = PyList_New(0)) == NULL)
- return NULL;
- setpwent();
- while ((p = getpwent()) != NULL) {
- 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[] = {
- PWD_GETPWUID_METHODDEF
- PWD_GETPWNAM_METHODDEF
-#ifdef HAVE_GETPWENT
- PWD_GETPWALL_METHODDEF
-#endif
- {NULL, NULL} /* sentinel */
-};
-
+ Py_DECREF(bytes);
+ return retval;
+}
+
+#ifdef HAVE_GETPWENT
+/*[clinic input]
+pwd.getpwall
+
+Return a list of all available password database entries, in arbitrary order.
+
+See help(pwd) for more on password database entries.
+[clinic start generated code]*/
+
+static PyObject *
+pwd_getpwall_impl(PyObject *module)
+/*[clinic end generated code: output=4853d2f5a0afac8a input=d7ecebfd90219b85]*/
+{
+ PyObject *d;
+ struct passwd *p;
+ if ((d = PyList_New(0)) == NULL)
+ return NULL;
+ setpwent();
+ while ((p = getpwent()) != NULL) {
+ 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[] = {
+ PWD_GETPWUID_METHODDEF
+ PWD_GETPWNAM_METHODDEF
+#ifdef HAVE_GETPWENT
+ PWD_GETPWALL_METHODDEF
+#endif
+ {NULL, NULL} /* sentinel */
+};
+
static int pwdmodule_traverse(PyObject *m, visitproc visit, void *arg) {
Py_VISIT(get_pwd_state(m)->StructPwdType);
return 0;
@@ -335,36 +335,36 @@ static void pwdmodule_free(void *m) {
pwdmodule_clear((PyObject *)m);
}
-static struct PyModuleDef pwdmodule = {
- PyModuleDef_HEAD_INIT,
- "pwd",
- pwd__doc__,
+static struct PyModuleDef pwdmodule = {
+ PyModuleDef_HEAD_INIT,
+ "pwd",
+ pwd__doc__,
sizeof(pwdmodulestate),
- pwd_methods,
- NULL,
+ pwd_methods,
+ NULL,
pwdmodule_traverse,
pwdmodule_clear,
pwdmodule_free,
-};
-
-
-PyMODINIT_FUNC
-PyInit_pwd(void)
-{
- PyObject *m;
+};
+
+
+PyMODINIT_FUNC
+PyInit_pwd(void)
+{
+ PyObject *m;
if ((m = PyState_FindModule(&pwdmodule)) != NULL) {
Py_INCREF(m);
return m;
}
if ((m = PyModule_Create(&pwdmodule)) == NULL)
- return NULL;
-
+ return NULL;
+
pwdmodulestate *state = PyModule_GetState(m);
state->StructPwdType = PyStructSequence_NewType(&struct_pwd_type_desc);
if (state->StructPwdType == NULL) {
return NULL;
- }
+ }
Py_INCREF(state->StructPwdType);
PyModule_AddObject(m, "struct_passwd", (PyObject *) state->StructPwdType);
- return m;
-}
+ return m;
+}