View | Details | Raw Unified | Return to bug 38736
Collapse All | Expand All

(-)asn1.c (-4 / +8 lines)
 Lines 135-140    Link Here 
135
135
136
PyObject* asn1_decode_key(PyObject *unused, PyObject* args)
136
PyObject* asn1_decode_key(PyObject *unused, PyObject* args)
137
{
137
{
138
	krb5ContextObject *context;
138
	uint8_t *key_buf;
139
	uint8_t *key_buf;
139
	size_t key_len;
140
	size_t key_len;
140
	krb5KeyblockObject *keyblock;
141
	krb5KeyblockObject *keyblock;
 Lines 144-167    Link Here 
144
	size_t len;
145
	size_t len;
145
	PyObject *self;
146
	PyObject *self;
146
	int error = 0;
147
	int error = 0;
148
	char *error_msg;
147
149
148
	if (!PyArg_ParseTuple(args, "s#", &key_buf, &key_len))
150
	if (!PyArg_ParseTuple(args, "Os#", &context, &key_buf, &key_len))
149
		return NULL;
151
		return NULL;
150
152
151
	ret = decode_Key(key_buf, key_len, &asn1_key, &len);
153
	ret = decode_Key(key_buf, key_len, &asn1_key, &len);
152
	if (ret) {
154
	if (ret) {
153
		error = 1;
155
		error = 1;
154
		krb5_exception(NULL, ret);
156
		error_msg = krb5_get_error_message(context->context, ret);
157
		krb5_exception(context->context, ret, error_msg);
155
		goto out;
158
		goto out;
156
	}
159
	}
157
160
158
	keyblock = (krb5KeyblockObject *) PyObject_NEW(krb5KeyblockObject, &krb5KeyblockType);
161
	keyblock = (krb5KeyblockObject *) PyObject_NEW(krb5KeyblockObject, &krb5KeyblockType);
162
	keyblock->context = context->context;
159
	keyblock->keyblock.keytype = asn1_key.key.keytype;
163
	keyblock->keyblock.keytype = asn1_key.key.keytype;
160
164
161
	keyblock->keyblock.keyvalue.data = malloc(asn1_key.key.keyvalue.length);
165
	keyblock->keyblock.keyvalue.data = malloc(asn1_key.key.keyvalue.length);
162
	if (keyblock->keyblock.keyvalue.data == NULL) {
166
	if (keyblock->keyblock.keyvalue.data == NULL) {
163
		error = 1;
167
		error = 1;
164
		krb5_exception(NULL, -1, "malloc for keyvalue.data failed");
168
		krb5_exception(context->context, -1, "malloc for keyvalue.data failed");
165
		goto out;
169
		goto out;
166
	}
170
	}
167
	memcpy(keyblock->keyblock.keyvalue.data, asn1_key.key.keyvalue.data, asn1_key.key.keyvalue.length);
171
	memcpy(keyblock->keyblock.keyvalue.data, asn1_key.key.keyvalue.data, asn1_key.key.keyvalue.length);
 Lines 173-179    Link Here 
173
		salt->salt.saltvalue.data = malloc(asn1_key.salt->salt.length);
177
		salt->salt.saltvalue.data = malloc(asn1_key.salt->salt.length);
174
		if (salt->salt.saltvalue.data == NULL) {
178
		if (salt->salt.saltvalue.data == NULL) {
175
			error = 1;
179
			error = 1;
176
			krb5_exception(NULL, -1, "malloc for saltvalue.data failed");
180
			krb5_exception(context->context, -1, "malloc for saltvalue.data failed");
177
			goto out;
181
			goto out;
178
		}
182
		}
179
		memcpy(salt->salt.saltvalue.data, asn1_key.salt->salt.data, asn1_key.salt->salt.length);
183
		memcpy(salt->salt.saltvalue.data, asn1_key.salt->salt.data, asn1_key.salt->salt.length);

Return to bug 38736