Index: asn1.c =================================================================== --- asn1.c (Revision 60906) +++ asn1.c (Arbeitskopie) @@ -135,6 +135,7 @@ PyObject* asn1_decode_key(PyObject *unused, PyObject* args) { + krb5ContextObject *context; uint8_t *key_buf; size_t key_len; krb5KeyblockObject *keyblock; @@ -144,24 +145,27 @@ size_t len; PyObject *self; int error = 0; + char *error_msg; - if (!PyArg_ParseTuple(args, "s#", &key_buf, &key_len)) + if (!PyArg_ParseTuple(args, "Os#", &context, &key_buf, &key_len)) return NULL; ret = decode_Key(key_buf, key_len, &asn1_key, &len); if (ret) { error = 1; - krb5_exception(NULL, ret); + error_msg = krb5_get_error_message(context->context, ret); + krb5_exception(context->context, ret, error_msg); goto out; } keyblock = (krb5KeyblockObject *) PyObject_NEW(krb5KeyblockObject, &krb5KeyblockType); + keyblock->context = context->context; keyblock->keyblock.keytype = asn1_key.key.keytype; keyblock->keyblock.keyvalue.data = malloc(asn1_key.key.keyvalue.length); if (keyblock->keyblock.keyvalue.data == NULL) { error = 1; - krb5_exception(NULL, -1, "malloc for keyvalue.data failed"); + krb5_exception(context->context, -1, "malloc for keyvalue.data failed"); goto out; } memcpy(keyblock->keyblock.keyvalue.data, asn1_key.key.keyvalue.data, asn1_key.key.keyvalue.length); @@ -173,7 +177,7 @@ salt->salt.saltvalue.data = malloc(asn1_key.salt->salt.length); if (salt->salt.saltvalue.data == NULL) { error = 1; - krb5_exception(NULL, -1, "malloc for saltvalue.data failed"); + krb5_exception(context->context, -1, "malloc for saltvalue.data failed"); goto out; } memcpy(salt->salt.saltvalue.data, asn1_key.salt->salt.data, asn1_key.salt->salt.length);