Пример #1
0
static PyObject* authGSSClientInit(PyObject* self, PyObject* args, PyObject* keywds)
{
    const char *service = NULL;
    const char *principal = NULL;
    gss_client_state *state;
    PyObject *pystate;
    gss_server_state *delegatestate = NULL;
    PyObject *pydelegatestate;
    static char *kwlist[] = {"service", "principal", "gssflags", "delegated", NULL};
    long int gss_flags = GSS_C_MUTUAL_FLAG | GSS_C_SEQUENCE_FLAG;
    int result = 0;

    if (!PyArg_ParseTupleAndKeywords(args, keywds, "s|slO", kwlist, &service, &principal, &gss_flags, &pydelegatestate))
        return NULL;

    state = (gss_client_state *) malloc(sizeof(gss_client_state));
    pystate = PyCObject_FromVoidPtr(state, NULL);

    if (PyCObject_Check(pydelegatestate))
        delegatestate = PyCObject_AsVoidPtr(pydelegatestate);

    result = authenticate_gss_client_init(service, principal, gss_flags, delegatestate, state);
    if (result == AUTH_GSS_ERROR)
        return NULL;

    return Py_BuildValue("(iO)", result, pystate);
}
Пример #2
0
static PyObject* authGSSClientInit(PyObject* self, PyObject* args, PyObject* keywds) {
    const char *service = NULL;
    const char *principal = NULL;
    gss_client_state *state;
    PyObject *pystate;
    gss_OID mech_oid = GSS_C_NO_OID;
    PyObject *pymech_oid = NULL;
    static char *kwlist[] = {"service", "principal", "gssflags", "mech_oid", NULL};
    long int gss_flags = GSS_C_MUTUAL_FLAG | GSS_C_SEQUENCE_FLAG;
    int result = 0;

    if (!PyArg_ParseTupleAndKeywords(args, keywds, "s|zlO", kwlist, &service, &principal, &gss_flags, &pymech_oid)) {
        return NULL;
    }

    if (pymech_oid != NULL) {
        if (!PyCheck(pymech_oid)) {
            PyErr_SetString(PyExc_TypeError, "Invalid type for mech_oid");
            return NULL;
        }
        mech_oid = PyGet(pymech_oid, gss_OID_desc);
        if (mech_oid == NULL) {
            PyErr_SetString(PyExc_TypeError, "Invalid value for mech_oid");
            return NULL;
        }
    }

    state = (gss_client_state *) malloc(sizeof(gss_client_state));
    pystate = PyNew(state, &destruct_client);

    result = authenticate_gss_client_init(service, principal, gss_flags, mech_oid, state);
    if (result == AUTH_GSS_ERROR) {
        return NULL;
    }

    return Py_BuildValue("(iN)", result, pystate);
}