summaryrefslogtreecommitdiff
path: root/src/lib/libtls/tls.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/libtls/tls.c')
-rw-r--r--src/lib/libtls/tls.c59
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)
58const char * 58const char *
59tls_error(struct tls *ctx) 59tls_error(struct tls *ctx)
60{ 60{
61 return ctx->errmsg; 61 return ctx->error.msg;
62} 62}
63 63
64static int 64static int
65tls_set_verror(struct tls *ctx, int errnum, const char *fmt, va_list ap) 65tls_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
95int 96int
96tls_set_error(struct tls *ctx, const char *fmt, ...) 97tls_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
111int
112tls_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
124int
125tls_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);