From dddf2abeaa721c127069db85129de0babdfb9fcc Mon Sep 17 00:00:00 2001 From: Simon Josefsson Date: Wed, 26 Mar 2003 14:49:22 +0000 Subject: [PATCH] Add new allocating a2d functions and use them. --- lib/asn1.c | 29 +++++++++++++++++++++++++++++ lib/kdc.c | 21 +++++++++++---------- lib/shishi.h.in | 4 ++++ 3 files changed, 44 insertions(+), 10 deletions(-) diff --git a/lib/asn1.c b/lib/asn1.c index 6a94e8e5..833cd215 100644 --- a/lib/asn1.c +++ b/lib/asn1.c @@ -95,6 +95,35 @@ shishi_a2d (Shishi * handle, Shishi_asn1 node, char *der, int *len) } int +shishi_a2d_new_field (Shishi * handle, Shishi_asn1 node, + const char *field, char **der, int *len) +{ + char errorDescription[MAX_ERROR_DESCRIPTION_SIZE]; + int rc; + + *len = 0; + rc = asn1_der_coding (node, field, NULL, len, errorDescription); + if (rc != ASN1_MEM_ERROR) + return SHISHI_ASN1_ERROR; + + *der = malloc(*len); + if (!*der) + return SHISHI_MALLOC_ERROR; + + rc = asn1_der_coding (node, field, *der, len, errorDescription); + if (rc != ASN1_SUCCESS) + return SHISHI_ASN1_ERROR; + + return SHISHI_OK; +} + +int +shishi_new_a2d (Shishi * handle, Shishi_asn1 node, char **der, int *len) +{ + return shishi_a2d_new_field (handle, node, "", der, len); +} + +int shishi_asn1_done (Shishi * handle, Shishi_asn1 node) { diff --git a/lib/kdc.c b/lib/kdc.c index 3482935a..96cee0be 100644 --- a/lib/kdc.c +++ b/lib/kdc.c @@ -110,13 +110,14 @@ int shishi_kdcreq_sendrecv (Shishi * handle, Shishi_asn1 kdcreq, Shishi_asn1 * kdcrep) { - char der[BUFSIZ]; /* XXX dynamically allocate this */ + char *der; int der_len, out_len; + char buffer[BUFSIZ]; /* XXX dynamically allocate this? */ char realm[BUFSIZ]; /* XXX dynamically allocate this */ int realmlen; int res; - res = shishi_a2d (handle, kdcreq, der, &der_len); + res = shishi_new_a2d (handle, kdcreq, &der, &der_len); if (res != SHISHI_OK) { shishi_error_printf (handle, "Could not DER encode AS-REQ: %s\n", @@ -135,29 +136,29 @@ shishi_kdcreq_sendrecv (Shishi * handle, Shishi_asn1 kdcreq, } realm[realmlen] = '\0'; - out_len = BUFSIZ; - res = shishi_kdc_sendrecv (handle, realm, der, der_len, der, &out_len); + out_len = sizeof(buffer); + res = shishi_kdc_sendrecv (handle, realm, der, der_len, buffer, &out_len); if (res != SHISHI_OK) { shishi_error_printf (handle, "Could not send to KDC: %s\n", shishi_strerror_details (handle)); return res; } - der_len = out_len; + free(der); if (VERBOSEASN1 (handle)) - printf ("received %d bytes\n", der_len); + printf ("received %d bytes\n", out_len); - *kdcrep = shishi_der2asn1_asrep (handle, der, der_len); + *kdcrep = shishi_der2asn1_asrep (handle, buffer, out_len); if (*kdcrep == NULL) { - *kdcrep = shishi_der2asn1_tgsrep (handle, der, der_len); + *kdcrep = shishi_der2asn1_tgsrep (handle, buffer, out_len); if (*kdcrep == NULL) { - *kdcrep = shishi_der2asn1_kdcrep (handle, der, der_len); + *kdcrep = shishi_der2asn1_kdcrep (handle, buffer, out_len); if (*kdcrep == NULL) { - *kdcrep = shishi_der2asn1_krberror (handle, der, der_len); + *kdcrep = shishi_der2asn1_krberror (handle, buffer, out_len); if (*kdcrep == NULL) { shishi_error_printf diff --git a/lib/shishi.h.in b/lib/shishi.h.in index fadb3299..12c59346 100644 --- a/lib/shishi.h.in +++ b/lib/shishi.h.in @@ -931,6 +931,10 @@ extern int shishi_a2d_field (Shishi * handle, const char *field, char *der, int *len); extern int shishi_a2d (Shishi * handle, Shishi_asn1 node, char *der, int *len); +extern int shishi_a2d_new_field (Shishi * handle, Shishi_asn1 node, + const char *field, char **der, int *len); +extern int shishi_new_a2d (Shishi * handle, Shishi_asn1 node, + char **der, int *len); extern int shishi_asn1_done (Shishi * handle, Shishi_asn1 node); extern int shishi_asn1_read (Shishi * handle, Shishi_asn1 node, const char *field, char *data, size_t * datalen); -- 2.11.4.GIT