1 /*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
4 This file is part of systemd.
6 Copyright 2013 Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
8 systemd is free software; you can redistribute it and/or modify it
9 under the terms of the GNU Lesser General Public License as published by
10 the Free Software Foundation; either version 2.1 of the License, or
11 (at your option) any later version.
13 systemd is distributed in the hope that it will be useful, but
14 WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16 Lesser General Public License for more details.
18 You should have received a copy of the GNU Lesser General Public License
19 along with systemd; If not, see <http://www.gnu.org/licenses/>.
22 #define PY_SSIZE_T_CLEAN
23 #pragma GCC diagnostic push
24 #pragma GCC diagnostic ignored "-Wredundant-decls"
26 #pragma GCC diagnostic pop
28 #include "systemd/sd-login.h"
33 PyDoc_STRVAR(module__doc__,
34 "Python interface to the libsystemd-login library."
37 #define helper(name) \
38 static PyObject* name(PyObject *self, PyObject *args) { \
39 _cleanup_strv_free_ char **list = NULL; \
43 assert(args == NULL); \
45 r = sd_get_##name(&list); \
48 return PyErr_SetFromErrno(PyExc_IOError); \
51 ans = PyList_New(r); \
55 for (r--; r >= 0; r--) { \
56 PyObject *s = unicode_FromString(list[r]); \
62 PyList_SetItem(ans, r, s); \
73 static PyObject* uids(PyObject *self, PyObject *args) {
74 _cleanup_free_ uid_t *list = NULL;
80 r = sd_get_uids(&list);
83 return PyErr_SetFromErrno(PyExc_IOError);
90 for (r--; r >= 0; r--) {
91 PyObject *s = long_FromLong(list[r]);
97 PyList_SetItem(ans, r, s);
103 PyDoc_STRVAR(seats__doc__,
104 "seats() -> list\n\n"
105 "Returns a list of currently available local seats.\n"
106 "Wraps sd_get_seats(3)."
109 PyDoc_STRVAR(sessions__doc__,
110 "sessions() -> list\n\n"
111 "Returns a list of current login sessions.\n"
112 "Wraps sd_get_sessions(3)."
115 PyDoc_STRVAR(machine_names__doc__,
116 "machine_names() -> list\n\n"
117 "Returns a list of currently running virtual machines\n"
118 "and containers on the system.\n"
119 "Wraps sd_get_machine_names(3)."
122 PyDoc_STRVAR(uids__doc__,
124 "Returns a list of uids of users who currently have login sessions.\n"
125 "Wraps sd_get_uids(3)."
128 static PyMethodDef methods[] = {
129 { "seats", seats, METH_NOARGS, seats__doc__},
130 { "sessions", sessions, METH_NOARGS, sessions__doc__},
131 { "machine_names", machine_names, METH_NOARGS, machine_names__doc__},
132 { "uids", uids, METH_NOARGS, uids__doc__},
136 #pragma GCC diagnostic push
137 #pragma GCC diagnostic ignored "-Wmissing-prototypes"
139 #if PY_MAJOR_VERSION < 3
141 PyMODINIT_FUNC initlogin(void) {
144 m = Py_InitModule3("login", methods, module__doc__);
147 PyModule_AddStringConstant(m, "__version__", PACKAGE_VERSION);
151 static struct PyModuleDef module = {
152 PyModuleDef_HEAD_INIT,
153 "login", /* name of module */
154 module__doc__, /* module documentation, may be NULL */
155 -1, /* size of per-interpreter state of the module */
159 PyMODINIT_FUNC PyInit_login(void) {
162 m = PyModule_Create(&module);
166 if (PyModule_AddStringConstant(m, "__version__", PACKAGE_VERSION)) {
176 #pragma GCC diagnostic pop