Programmer error! Bad Admin server handle

Torsten Kurbad kerberos at tk-webart.de
Thu Feb 14 11:30:04 EST 2008


> They changed the API for all the kadm5_init* functions
> somewhere around 1.6 to add a parameter:
> 
> kadm5_ret_t    kadm5_init_with_password(char *client_name,
>                                         char *pass,
>                                         char *service_name,
>                                         kadm5_config_params *params,
>                                         krb5_ui_4 struct_version,
>                                         krb5_ui_4 api_version,
>    /* Heh, look at me, I'm new ----> */ char **db_args,
>                                         void **server_handle);
> 
> Which has bit me more than once.

It's there indeed, even for 1.5.3.

That leaped me a great step forward. Now my snippet looks like this:

--- snip ---
static PyObject *getPrincipals(PyObject *self, PyObject *args)
{
    char *client;
    char *pass;
    char *realm;
    void *handle;
    char *db_args;

    char **princs;
    int *count;

    PyObject *result;

    krb5_context ctx;
    krb5_error_code code = 0;

    code = krb5_init_context(&ctx);
    RETURN_ON_ERROR("krb5_init_context()", code);

    if (!PyArg_ParseTuple(args, "sss", &client, &pass, &realm))
      return NULL;

    code = kadm5_init_with_password(client, pass, KADM5_ADMIN_SERVICE, realm,
		KADM5_STRUCT_VERSION_1, KADM5_API_VERSION_1, &db_args,
		&handle);
    RETURN_ON_ERROR("kadm5_init_with_password()", code);

    if (handle == NULL)
      return Py_BuildValue("");

    code = kadm5_get_principals(handle, "*", &princs, &count);
    RETURN_ON_ERROR("kadm5_get_principals()", code);

    if (princs == NULL)
      return Py_BuildValue("");

    result = Py_BuildValue("si", princs[0], count);
    return result;
}
--- snap ---

So far, so good. Now I get the 0th principal and a count of 245,
which is exactly the number of princs in our current DB. But I need to
transform all 0 -> *count principals into a Python structure. Whenever
I try to access *count, e.g. do sth. (probably stupid) like
int i = *count;
I get a segmentation fault.

Any suggestions?

Thanks and best regards,
Torsten
-- 
Fon: +49-7071-700240 | Fax: +49-7071-700241 | http://www.tk-webart.de

  The best cure for insomnia is to get a lot of sleep. -W.C. Fields



More information about the krbdev mailing list