diff options
Diffstat (limited to 'src/lib/libtls/tls.c')
-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); |