diff options
Diffstat (limited to '')
| -rw-r--r-- | src/lib/libtls/tls.c | 59 |
1 files changed, 44 insertions, 15 deletions
diff --git a/src/lib/libtls/tls.c b/src/lib/libtls/tls.c index 5ca555027f..661aa6ad0a 100644 --- a/src/lib/libtls/tls.c +++ b/src/lib/libtls/tls.c | |||
| @@ -1,4 +1,4 @@ | |||
| 1 | /* $OpenBSD: tls.c,v 1.35 2016/01/18 16:15:14 bcook Exp $ */ | 1 | /* $OpenBSD: tls.c,v 1.36 2016/04/28 16:48:44 jsing Exp $ */ |
| 2 | /* | 2 | /* |
| 3 | * Copyright (c) 2014 Joel Sing <jsing@openbsd.org> | 3 | * Copyright (c) 2014 Joel Sing <jsing@openbsd.org> |
| 4 | * | 4 | * |
| @@ -58,17 +58,18 @@ tls_init(void) | |||
| 58 | const char * | 58 | const char * |
| 59 | tls_error(struct tls *ctx) | 59 | tls_error(struct tls *ctx) |
| 60 | { | 60 | { |
| 61 | return ctx->errmsg; | 61 | return ctx->error.msg; |
| 62 | } | 62 | } |
| 63 | 63 | ||
| 64 | static int | 64 | static int |
| 65 | tls_set_verror(struct tls *ctx, int errnum, const char *fmt, va_list ap) | 65 | tls_set_verror(struct tls_error *error, int errnum, const char *fmt, va_list ap) |
| 66 | { | 66 | { |
| 67 | char *errmsg = NULL; | 67 | char *errmsg = NULL; |
| 68 | int rv = -1; | 68 | int rv = -1; |
| 69 | 69 | ||
| 70 | free(ctx->errmsg); | 70 | free(error->msg); |
| 71 | ctx->errmsg = NULL; | 71 | error->msg = NULL; |
| 72 | error->num = errnum; | ||
| 72 | 73 | ||
| 73 | if (vasprintf(&errmsg, fmt, ap) == -1) { | 74 | if (vasprintf(&errmsg, fmt, ap) == -1) { |
| 74 | errmsg = NULL; | 75 | errmsg = NULL; |
| @@ -76,12 +77,12 @@ tls_set_verror(struct tls *ctx, int errnum, const char *fmt, va_list ap) | |||
| 76 | } | 77 | } |
| 77 | 78 | ||
| 78 | if (errnum == -1) { | 79 | if (errnum == -1) { |
| 79 | ctx->errmsg = errmsg; | 80 | error->msg = errmsg; |
| 80 | return (0); | 81 | return (0); |
| 81 | } | 82 | } |
| 82 | 83 | ||
| 83 | if (asprintf(&ctx->errmsg, "%s: %s", errmsg, strerror(errnum)) == -1) { | 84 | if (asprintf(&error->msg, "%s: %s", errmsg, strerror(errnum)) == -1) { |
| 84 | ctx->errmsg = NULL; | 85 | error->msg = NULL; |
| 85 | goto err; | 86 | goto err; |
| 86 | } | 87 | } |
| 87 | rv = 0; | 88 | rv = 0; |
| @@ -93,15 +94,43 @@ tls_set_verror(struct tls *ctx, int errnum, const char *fmt, va_list ap) | |||
| 93 | } | 94 | } |
| 94 | 95 | ||
| 95 | int | 96 | int |
| 96 | tls_set_error(struct tls *ctx, const char *fmt, ...) | 97 | tls_set_config_error(struct tls_config *config, const char *fmt, ...) |
| 98 | { | ||
| 99 | va_list ap; | ||
| 100 | int errnum, rv; | ||
| 101 | |||
| 102 | errnum = errno; | ||
| 103 | |||
| 104 | va_start(ap, fmt); | ||
| 105 | rv = tls_set_verror(&config->error, errnum, fmt, ap); | ||
| 106 | va_end(ap); | ||
| 107 | |||
| 108 | return (rv); | ||
| 109 | } | ||
| 110 | |||
| 111 | int | ||
| 112 | tls_set_config_errorx(struct tls_config *config, const char *fmt, ...) | ||
| 97 | { | 113 | { |
| 98 | va_list ap; | 114 | va_list ap; |
| 99 | int rv; | 115 | int rv; |
| 100 | 116 | ||
| 101 | ctx->errnum = errno; | 117 | va_start(ap, fmt); |
| 118 | rv = tls_set_verror(&config->error, -1, fmt, ap); | ||
| 119 | va_end(ap); | ||
| 120 | |||
| 121 | return (rv); | ||
| 122 | } | ||
| 123 | |||
| 124 | int | ||
| 125 | tls_set_error(struct tls *ctx, const char *fmt, ...) | ||
| 126 | { | ||
| 127 | va_list ap; | ||
| 128 | int errnum, rv; | ||
| 129 | |||
| 130 | errnum = errno; | ||
| 102 | 131 | ||
| 103 | va_start(ap, fmt); | 132 | va_start(ap, fmt); |
| 104 | rv = tls_set_verror(ctx, ctx->errnum, fmt, ap); | 133 | rv = tls_set_verror(&ctx->error, errnum, fmt, ap); |
| 105 | va_end(ap); | 134 | va_end(ap); |
| 106 | 135 | ||
| 107 | return (rv); | 136 | return (rv); |
| @@ -114,7 +143,7 @@ tls_set_errorx(struct tls *ctx, const char *fmt, ...) | |||
| 114 | int rv; | 143 | int rv; |
| 115 | 144 | ||
| 116 | va_start(ap, fmt); | 145 | va_start(ap, fmt); |
| 117 | rv = tls_set_verror(ctx, -1, fmt, ap); | 146 | rv = tls_set_verror(&ctx->error, -1, fmt, ap); |
| 118 | va_end(ap); | 147 | va_end(ap); |
| 119 | 148 | ||
| 120 | return (rv); | 149 | return (rv); |
| @@ -328,9 +357,9 @@ tls_reset(struct tls *ctx) | |||
| 328 | free(ctx->servername); | 357 | free(ctx->servername); |
| 329 | ctx->servername = NULL; | 358 | ctx->servername = NULL; |
| 330 | 359 | ||
| 331 | free(ctx->errmsg); | 360 | free(ctx->error.msg); |
| 332 | ctx->errmsg = NULL; | 361 | ctx->error.msg = NULL; |
| 333 | ctx->errnum = 0; | 362 | ctx->error.num = -1; |
| 334 | 363 | ||
| 335 | tls_free_conninfo(ctx->conninfo); | 364 | tls_free_conninfo(ctx->conninfo); |
| 336 | free(ctx->conninfo); | 365 | free(ctx->conninfo); |
