git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@22347 ec53bebd-3082-4978-b11e-865c3cabbd6b
This commit is contained in:
Love Hörnquist Åstrand
2007-12-26 19:26:28 +00:00
parent 5e7f1ac78f
commit 22f3d27d6f

View File

@@ -34,6 +34,11 @@
#include "hx_locl.h"
RCSID("$Id$");
/**
* @page page_print Hx509 printing functions
*
* See the library functions here: @ref hx509_print
*/
struct hx509_validate_ctx_data {
int flags;
@@ -75,15 +80,31 @@ Time2string(const Time *T, char **str)
return 0;
}
/**
* Helper function to print on stdout for:
* - hx509_oid_print(),
* - hx509_bitstring_print(),
* - hx509_validate_ctx_set_print().
*
* @param ctx the context to the print function. If the ctx is NULL,
* stdout is used.
* @param fmt the printing format.
* @param va the argumet list.
*
* @ingroup hx509_print
*/
void
hx509_print_stdout(void *ctx, const char *fmt, va_list va)
{
FILE *f = ctx;
if (f == NULL)
f = stdout;
vfprintf(f, fmt, va);
}
void
hx509_print_func(hx509_vprint_func func, void *ctx, const char *fmt, ...)
print_func(hx509_vprint_func func, void *ctx, const char *fmt, ...)
{
va_list va;
va_start(va, fmt);
@@ -91,36 +112,82 @@ hx509_print_func(hx509_vprint_func func, void *ctx, const char *fmt, ...)
va_end(va);
}
/**
* Print a oid to a string.
*
* @param oid oid to print
* @param str allocated string, free with hx509_xfree().
*
* @return An hx509 error code, see hx509_get_error_string().
*
* @ingroup hx509_print
*/
int
hx509_oid_sprint(const heim_oid *oid, char **str)
{
return der_print_heim_oid(oid, '.', str);
}
/**
* Print a oid using a hx509_vprint_func function. To print to stdout
* use hx509_print_stdout().
*
* @param oid oid to print
* @param func hx509_vprint_func to print with.
* @param ctx context variable to hx509_vprint_func function.
*
* @ingroup hx509_print
*/
void
hx509_oid_print(const heim_oid *oid, hx509_vprint_func func, void *ctx)
{
char *str;
hx509_oid_sprint(oid, &str);
hx509_print_func(func, ctx, "%s", str);
print_func(func, ctx, "%s", str);
free(str);
}
/**
* Print a bitstring using a hx509_vprint_func function. To print to
* stdout use hx509_print_stdout().
*
* @param b bit string to print.
* @param func hx509_vprint_func to print with.
* @param ctx context variable to hx509_vprint_func function.
*
* @ingroup hx509_print
*/
void
hx509_bitstring_print(const heim_bit_string *b,
hx509_vprint_func func, void *ctx)
{
int i;
hx509_print_func(func, ctx, "\tlength: %d\n\t", b->length);
print_func(func, ctx, "\tlength: %d\n\t", b->length);
for (i = 0; i < (b->length + 7) / 8; i++)
hx509_print_func(func, ctx, "%02x%s%s",
((unsigned char *)b->data)[i],
i < (b->length - 7) / 8
&& (i == 0 || (i % 16) != 15) ? ":" : "",
i != 0 && (i % 16) == 15 ?
(i <= ((b->length + 7) / 8 - 2) ? "\n\t" : "\n"):"");
print_func(func, ctx, "%02x%s%s",
((unsigned char *)b->data)[i],
i < (b->length - 7) / 8
&& (i == 0 || (i % 16) != 15) ? ":" : "",
i != 0 && (i % 16) == 15 ?
(i <= ((b->length + 7) / 8 - 2) ? "\n\t" : "\n"):"");
}
/**
* Print certificate usage for a certificate to a string.
*
* @param context A hx509 context.
* @param c a certificate print the keyusage for.
* @param s the return string with the keysage printed in to, free
* with hx509_xfree().
*
* @return An hx509 error code, see hx509_get_error_string().
*
* @ingroup hx509_print
*/
int
hx509_cert_keyusage_print(hx509_context context, hx509_cert c, char **s)
{
@@ -679,6 +746,18 @@ struct {
{ NULL }
};
/**
* Allocate a hx509 validation/printing context.
*
* @param context A hx509 context.
* @param ctx a new allocated hx509 validation context, free with
* hx509_validate_ctx_free().
* @return An hx509 error code, see hx509_get_error_string().
*
* @ingroup hx509_print
*/
int
hx509_validate_ctx_init(hx509_context context, hx509_validate_ctx *ctx)
{
@@ -689,6 +768,18 @@ hx509_validate_ctx_init(hx509_context context, hx509_validate_ctx *ctx)
return 0;
}
/**
* Set the printing functions for the validation context.
*
* @param ctx a hx509 valication context.
* @param func the printing function to usea.
* @param c the context variable to the printing function.
*
* @return An hx509 error code, see hx509_get_error_string().
*
* @ingroup hx509_print
*/
void
hx509_validate_ctx_set_print(hx509_validate_ctx ctx,
hx509_vprint_func func,
@@ -698,18 +789,50 @@ hx509_validate_ctx_set_print(hx509_validate_ctx ctx,
ctx->ctx = c;
}
/**
* Add flags to control the behaivor of the hx509_validate_cert()
* function.
*
* @param ctx A hx509 validation context.
* @param flags flags to add to the validation context.
*
* @return An hx509 error code, see hx509_get_error_string().
*
* @ingroup hx509_print
*/
void
hx509_validate_ctx_add_flags(hx509_validate_ctx ctx, int flags)
{
ctx->flags |= flags;
}
/**
* Free an hx509 validate context.
*
* @param ctx the hx509 validate context to free.
*
* @ingroup hx509_print
*/
void
hx509_validate_ctx_free(hx509_validate_ctx ctx)
{
free(ctx);
}
/**
* Validate/Print the status of the certificate.
*
* @param context A hx509 context.
* @param ctx A hx509 validation context.
* @param cert the cerificate to validate/print.
* @return An hx509 error code, see hx509_get_error_string().
*
* @ingroup hx509_print
*/
int
hx509_validate_cert(hx509_context context,
hx509_validate_ctx ctx,