static PyObject * nis_match (PyObject *self, PyObject *args) { char *match; char *domain; int keylen, len; char *key, *map; int err; PyObject *res; int fix; if (!PyArg_Parse(args, "(t#s)", &key, &keylen, &map)) return NULL; if ((err = yp_get_default_domain(&domain)) != 0) return nis_error(err); map = nis_mapname (map, &fix); if (fix) keylen++; Py_BEGIN_ALLOW_THREADS err = yp_match (domain, map, key, keylen, &match, &len); Py_END_ALLOW_THREADS if (fix) len--; if (err != 0) return nis_error(err); res = PyString_FromStringAndSize (match, len); free (match); return res; }
static PyObject * nis_cat (PyObject *self, PyObject *args) { char *domain; char *map; struct ypall_callback cb; struct ypcallback_data data; PyObject *dict; int err; if (!PyArg_Parse(args, "s", &map)) return NULL; if ((err = yp_get_default_domain(&domain)) != 0) return nis_error(err); dict = PyDict_New (); if (dict == NULL) return NULL; cb.foreach = (foreachfunc)nis_foreach; data.dict = dict; map = nis_mapname (map, &data.fix); cb.data = (char *)&data; Py_BEGIN_ALLOW_THREADS err = yp_all (domain, map, &cb); Py_END_ALLOW_THREADS if (err != 0) { Py_DECREF(dict); return nis_error(err); } return dict; }
static PyObject * nis_cat (PyObject *self, PyObject *args, PyObject *kwdict) { char *domain = NULL; char *map; struct ypall_callback cb; struct ypcallback_data data; PyObject *dict; int err; static char *kwlist[] = {"map", "domain", NULL}; if (!PyArg_ParseTupleAndKeywords(args, kwdict, "s|s:cat", kwlist, &map, &domain)) return NULL; if (!domain && ((err = yp_get_default_domain(&domain)) != 0)) return nis_error(err); dict = PyDict_New (); if (dict == NULL) return NULL; cb.foreach = (foreachfunc)nis_foreach; data.dict = dict; map = nis_mapname (map, &data.fix); cb.data = (char *)&data; data.state = PyEval_SaveThread(); err = yp_all (domain, map, &cb); PyEval_RestoreThread(data.state); if (err != 0) { Py_DECREF(dict); return nis_error(err); } return dict; }
static PyObject * nis_match (PyObject *self, PyObject *args, PyObject *kwdict) { char *match; char *domain = NULL; int keylen, len; char *key, *map; int err; PyObject *res; int fix; static char *kwlist[] = {"key", "map", "domain", NULL}; if (!PyArg_ParseTupleAndKeywords(args, kwdict, "s#s|s:match", kwlist, &key, &keylen, &map, &domain)) return NULL; if (!domain && ((err = yp_get_default_domain(&domain)) != 0)) return nis_error(err); map = nis_mapname (map, &fix); if (fix) keylen++; Py_BEGIN_ALLOW_THREADS err = yp_match (domain, map, key, keylen, &match, &len); Py_END_ALLOW_THREADS if (fix) len--; if (err != 0) return nis_error(err); res = PyUnicode_FromStringAndSize (match, len); free (match); return res; }
static PyObject * nis_maps (PyObject *self, PyObject *args, PyObject *kwdict) { char *domain = NULL; nismaplist *maps; PyObject *list; int err; static char *kwlist[] = {"domain", NULL}; if (!PyArg_ParseTupleAndKeywords(args, kwdict, "|s:maps", kwlist, &domain)) return NULL; if (!domain && ((err = yp_get_default_domain (&domain)) != 0)) { nis_error(err); return NULL; } if ((maps = nis_maplist (domain)) == NULL) return NULL; if ((list = PyList_New(0)) == NULL) return NULL; for (maps = maps; maps; maps = maps->next) { PyObject *str = PyUnicode_FromString(maps->map); if (!str || PyList_Append(list, str) < 0) { Py_DECREF(list); list = NULL; break; } Py_DECREF(str); } /* XXX Shouldn't we free the list of maps now? */ return list; }
static PyObject * nis_match (PyObject *self, PyObject *args, PyObject *kwdict) { char *match; char *domain = NULL; Py_ssize_t keylen; int len; char *key, *map; int err; PyObject *ukey, *bkey, *res; int fix; static char *kwlist[] = {"key", "map", "domain", NULL}; if (!PyArg_ParseTupleAndKeywords(args, kwdict, "Us|s:match", kwlist, &ukey, &map, &domain)) return NULL; if ((bkey = PyUnicode_EncodeFSDefault(ukey)) == NULL) return NULL; /* check for embedded null bytes */ if (PyBytes_AsStringAndSize(bkey, &key, &keylen) == -1) { Py_DECREF(bkey); return NULL; } if (!domain && ((err = yp_get_default_domain(&domain)) != 0)) { Py_DECREF(bkey); return nis_error(err); } map = nis_mapname (map, &fix); if (fix) keylen++; Py_BEGIN_ALLOW_THREADS err = yp_match (domain, map, key, keylen, &match, &len); Py_END_ALLOW_THREADS Py_DECREF(bkey); if (fix) len--; if (err != 0) return nis_error(err); res = PyUnicode_DecodeFSDefaultAndSize(match, len); free (match); return res; }
static PyObject * nis_get_default_domain (PyObject *self) { char *domain; int err; PyObject *res; if ((err = yp_get_default_domain(&domain)) != 0) return nis_error(err); res = PyUnicode_FromStringAndSize (domain, strlen(domain)); return res; }
static nismaplist * nis_maplist (void) { nisresp_maplist *list; char *dom; CLIENT *cl, *clnt_create(); char *server = NULL; int mapi = 0; int err; if ((err = yp_get_default_domain (&dom)) != 0) { nis_error(err); return NULL; } while (!server && aliases[mapi].map != 0L) { yp_master (dom, aliases[mapi].map, &server); mapi++; } if (!server) { PyErr_SetString(NisError, "No NIS master found for any map"); return NULL; } cl = clnt_create(server, YPPROG, YPVERS, "tcp"); if (cl == NULL) { PyErr_SetString(NisError, clnt_spcreateerror(server)); goto finally; } list = nisproc_maplist_2 (&dom, cl); clnt_destroy(cl); if (list == NULL) goto finally; if (list->stat != NIS_TRUE) goto finally; free(server); return list->maps; finally: free(server); return NULL; }