Ignore:
Timestamp:
Nov 14, 2012, 12:59:34 PM (12 years ago)
Author:
Silvan Scherrer
Message:

Samba Server: update vendor to 3.6.0

File:
1 edited

Legend:

Unmodified
Added
Removed
  • TabularUnified vendor/current/source4/auth/credentials/pycredentials.c

    r414 r740  
    1717*/
    1818
     19#include <Python.h>
    1920#include "includes.h"
    20 #include <Python.h>
    2121#include "pycredentials.h"
    2222#include "param/param.h"
     
    2525#include "libcli/util/pyerrors.h"
    2626#include "param/pyparam.h"
    27 
    28 #ifndef Py_RETURN_NONE
    29 #define Py_RETURN_NONE return Py_INCREF(Py_None), Py_None
    30 #endif
     27#include <tevent.h>
    3128
    3229static PyObject *PyString_FromStringOrNULL(const char *str)
     
    197194}
    198195
     196static PyObject *py_creds_set_krb_forwardable(py_talloc_Object *self, PyObject *args)
     197{
     198        int state;
     199        if (!PyArg_ParseTuple(args, "i", &state))
     200                return NULL;
     201
     202        cli_credentials_set_krb_forwardable(PyCredentials_AsCliCredentials(self), state);
     203        Py_RETURN_NONE;
     204}
     205
    199206static PyObject *py_creds_guess(py_talloc_Object *self, PyObject *args)
    200207{
    201208        PyObject *py_lp_ctx = Py_None;
    202209        struct loadparm_context *lp_ctx;
     210        TALLOC_CTX *mem_ctx;
     211        struct cli_credentials *creds;
     212
     213        creds = PyCredentials_AsCliCredentials(self);
     214
    203215        if (!PyArg_ParseTuple(args, "|O", &py_lp_ctx))
    204216                return NULL;
    205217
    206         lp_ctx = lp_from_py_object(py_lp_ctx);
    207         if (lp_ctx == NULL)
    208                 return NULL;
    209 
    210         cli_credentials_guess(PyCredentials_AsCliCredentials(self), lp_ctx);
     218        mem_ctx = talloc_new(NULL);
     219        if (mem_ctx == NULL) {
     220                PyErr_NoMemory();
     221                return NULL;
     222        }
     223
     224        lp_ctx = lpcfg_from_py_object(mem_ctx, py_lp_ctx);
     225        if (lp_ctx == NULL) {
     226                talloc_free(mem_ctx);
     227                return NULL;
     228        }
     229
     230        cli_credentials_guess(creds, lp_ctx);
     231
     232        talloc_free(mem_ctx);
    211233
    212234        Py_RETURN_NONE;
     
    218240        struct loadparm_context *lp_ctx;
    219241        NTSTATUS status;
     242        struct cli_credentials *creds;
     243        TALLOC_CTX *mem_ctx;
     244
     245        creds = PyCredentials_AsCliCredentials(self);
     246
    220247        if (!PyArg_ParseTuple(args, "|O", &py_lp_ctx))
    221248                return NULL;
    222249
    223         lp_ctx = lp_from_py_object(py_lp_ctx);
    224         if (lp_ctx == NULL)
    225                 return NULL;
    226 
    227         status = cli_credentials_set_machine_account(PyCredentials_AsCliCredentials(self), lp_ctx);
     250        mem_ctx = talloc_new(NULL);
     251        if (mem_ctx == NULL) {
     252                PyErr_NoMemory();
     253                return NULL;
     254        }
     255
     256        lp_ctx = lpcfg_from_py_object(mem_ctx, py_lp_ctx);
     257        if (lp_ctx == NULL) {
     258                talloc_free(mem_ctx);
     259                return NULL;
     260        }
     261
     262        status = cli_credentials_set_machine_account(creds, lp_ctx);
     263        talloc_free(mem_ctx);
     264
    228265        PyErr_NTSTATUS_IS_ERR_RAISE(status);
    229266
    230267        Py_RETURN_NONE;
    231268}
     269
     270PyObject *PyCredentialCacheContainer_from_ccache_container(struct ccache_container *ccc)
     271{
     272        PyCredentialCacheContainerObject *py_ret;
     273
     274        if (ccc == NULL) {
     275                Py_RETURN_NONE;
     276        }
     277
     278        py_ret = (PyCredentialCacheContainerObject *)PyCredentialCacheContainer.tp_alloc(&PyCredentialCacheContainer, 0);
     279        if (py_ret == NULL) {
     280                PyErr_NoMemory();
     281                return NULL;
     282        }
     283        py_ret->mem_ctx = talloc_new(NULL);
     284        py_ret->ccc = talloc_reference(py_ret->mem_ctx, ccc);
     285        return (PyObject *)py_ret;
     286}
     287
     288
     289static PyObject *py_creds_get_named_ccache(py_talloc_Object *self, PyObject *args)
     290{
     291        PyObject *py_lp_ctx = Py_None;
     292        char *ccache_name;
     293        struct loadparm_context *lp_ctx;
     294        struct ccache_container *ccc;
     295        struct tevent_context *event_ctx;
     296        int ret;
     297        const char *error_string;
     298        struct cli_credentials *creds;
     299        TALLOC_CTX *mem_ctx;
     300
     301        creds = PyCredentials_AsCliCredentials(self);
     302
     303        if (!PyArg_ParseTuple(args, "|Os", &py_lp_ctx, &ccache_name))
     304                return NULL;
     305
     306        mem_ctx = talloc_new(NULL);
     307        if (mem_ctx == NULL) {
     308                PyErr_NoMemory();
     309                return NULL;
     310        }
     311
     312        lp_ctx = lpcfg_from_py_object(mem_ctx, py_lp_ctx);
     313        if (lp_ctx == NULL) {
     314                talloc_free(mem_ctx);
     315                return NULL;
     316        }
     317
     318        event_ctx = tevent_context_init(mem_ctx);
     319
     320        ret = cli_credentials_get_named_ccache(creds, event_ctx, lp_ctx,
     321                                               ccache_name, &ccc, &error_string);
     322        talloc_unlink(mem_ctx, lp_ctx);
     323        if (ret == 0) {
     324                talloc_steal(ccc, event_ctx);
     325                talloc_free(mem_ctx);
     326                return PyCredentialCacheContainer_from_ccache_container(ccc);
     327        }
     328
     329        PyErr_SetString(PyExc_RuntimeError, error_string?error_string:"NULL");
     330
     331        talloc_free(mem_ctx);
     332        return NULL;
     333}
     334
     335static PyObject *py_creds_set_gensec_features(py_talloc_Object *self, PyObject *args)
     336{
     337        unsigned int gensec_features;
     338
     339        if (!PyArg_ParseTuple(args, "I", &gensec_features))
     340                return NULL;
     341
     342        cli_credentials_set_gensec_features(PyCredentials_AsCliCredentials(self), gensec_features);
     343
     344        Py_RETURN_NONE;
     345}
     346
     347static PyObject *py_creds_get_gensec_features(py_talloc_Object *self, PyObject *args)
     348{
     349        unsigned int gensec_features;
     350
     351        gensec_features = cli_credentials_get_gensec_features(PyCredentials_AsCliCredentials(self));
     352        return PyInt_FromLong(gensec_features);
     353}
     354
    232355
    233356static PyMethodDef py_creds_methods[] = {
     
    285408        { "set_kerberos_state", (PyCFunction)py_creds_set_kerberos_state, METH_VARARGS,
    286409                NULL },
     410        { "set_krb_forwardable", (PyCFunction)py_creds_set_krb_forwardable, METH_VARARGS,
     411                NULL },
    287412        { "guess", (PyCFunction)py_creds_guess, METH_VARARGS, NULL },
    288413        { "set_machine_account", (PyCFunction)py_creds_set_machine_account, METH_VARARGS, NULL },
     414        { "get_named_ccache", (PyCFunction)py_creds_get_named_ccache, METH_VARARGS, NULL },
     415        { "set_gensec_features", (PyCFunction)py_creds_set_gensec_features, METH_VARARGS, NULL },
     416        { "get_gensec_features", (PyCFunction)py_creds_get_gensec_features, METH_NOARGS, NULL },
    289417        { NULL }
    290418};
     
    293421        .tp_name = "Credentials",
    294422        .tp_basicsize = sizeof(py_talloc_Object),
    295         .tp_dealloc = py_talloc_dealloc,
    296423        .tp_new = py_creds_new,
    297424        .tp_flags = Py_TPFLAGS_DEFAULT,
     
    299426};
    300427
     428
     429PyTypeObject PyCredentialCacheContainer = {
     430        .tp_name = "CredentialCacheContainer",
     431        .tp_basicsize = sizeof(py_talloc_Object),
     432        .tp_flags = Py_TPFLAGS_DEFAULT,
     433};
     434
    301435void initcredentials(void)
    302436{
    303437        PyObject *m;
     438        PyTypeObject *talloc_type = PyTalloc_GetObjectType();
     439        if (talloc_type == NULL)
     440                return;
     441
     442        PyCredentials.tp_base = PyCredentialCacheContainer.tp_base = talloc_type;
    304443
    305444        if (PyType_Ready(&PyCredentials) < 0)
     445                return;
     446
     447        if (PyType_Ready(&PyCredentialCacheContainer) < 0)
    306448                return;
    307449
     
    314456        PyModule_AddObject(m, "MUST_USE_KERBEROS", PyInt_FromLong(CRED_MUST_USE_KERBEROS));
    315457
     458        PyModule_AddObject(m, "AUTO_KRB_FORWARDABLE",  PyInt_FromLong(CRED_AUTO_KRB_FORWARDABLE));
     459        PyModule_AddObject(m, "NO_KRB_FORWARDABLE",    PyInt_FromLong(CRED_NO_KRB_FORWARDABLE));
     460        PyModule_AddObject(m, "FORCE_KRB_FORWARDABLE", PyInt_FromLong(CRED_FORCE_KRB_FORWARDABLE));
     461
    316462        Py_INCREF(&PyCredentials);
    317463        PyModule_AddObject(m, "Credentials", (PyObject *)&PyCredentials);
    318 }
     464        Py_INCREF(&PyCredentialCacheContainer);
     465        PyModule_AddObject(m, "CredentialCacheContainer", (PyObject *)&PyCredentialCacheContainer);
     466}
Note: See TracChangeset for help on using the changeset viewer.