diff options
| author | Garrett D'Amore <garrett@damore.org> | 2024-11-09 15:24:43 -0800 |
|---|---|---|
| committer | Garrett D'Amore <garrett@damore.org> | 2024-11-09 16:27:45 -0800 |
| commit | 0058b766b91f08b34dcef3c7bb55b216099f3f66 (patch) | |
| tree | 5ac1fa105d707018cdfa9f5244da5837a8c31601 /src/supplemental/tls | |
| parent | 150d80c2c62ce3693dbbd0256c16337879c7d825 (diff) | |
| download | nng-0058b766b91f08b34dcef3c7bb55b216099f3f66.tar.gz nng-0058b766b91f08b34dcef3c7bb55b216099f3f66.tar.bz2 nng-0058b766b91f08b34dcef3c7bb55b216099f3f66.zip | |
TLS configuration changed to use discret _set_tls and _get_tls functions.
This is simpler, and more reliable than using socket options.
Diffstat (limited to 'src/supplemental/tls')
| -rw-r--r-- | src/supplemental/tls/tls_common.c | 129 | ||||
| -rw-r--r-- | src/supplemental/tls/tls_test.c | 18 |
2 files changed, 41 insertions, 106 deletions
diff --git a/src/supplemental/tls/tls_common.c b/src/supplemental/tls/tls_common.c index 139460f5..49d1a292 100644 --- a/src/supplemental/tls/tls_common.c +++ b/src/supplemental/tls/tls_common.c @@ -191,16 +191,10 @@ tls_dialer_dial(void *arg, nng_aio *aio) } static int -tls_dialer_set_config(void *arg, const void *buf, size_t sz, nni_type t) +tls_dialer_set_tls(void *arg, nng_tls_config *cfg) { - int rv; - nng_tls_config *cfg; tls_dialer *d = arg; nng_tls_config *old; - - if ((rv = nni_copyin_ptr((void **) &cfg, buf, sz, t)) != 0) { - return (rv); - } if (cfg == NULL) { return (NNG_EINVAL); } @@ -216,44 +210,21 @@ tls_dialer_set_config(void *arg, const void *buf, size_t sz, nni_type t) } static int -tls_dialer_get_config(void *arg, void *buf, size_t *szp, nni_type t) +tls_dialer_get_tls(void *arg, nng_tls_config **cfg) { - tls_dialer *d = arg; - nng_tls_config *cfg; - int rv; + tls_dialer *d = arg; nni_mtx_lock(&d->lk); - if ((cfg = d->cfg) != NULL) { - nng_tls_config_hold(cfg); - } - if ((rv = nni_copyout_ptr(cfg, buf, szp, t)) != 0) { - nng_tls_config_free(cfg); - } + *cfg = d->cfg; nni_mtx_unlock(&d->lk); - return (rv); + return (0); } -static const nni_option tls_dialer_opts[] = { - { - .o_name = NNG_OPT_TLS_CONFIG, - .o_get = tls_dialer_get_config, - .o_set = tls_dialer_set_config, - }, - { - .o_name = NULL, - }, -}; - static int tls_dialer_get(void *arg, const char *name, void *buf, size_t *szp, nni_type t) { tls_dialer *d = arg; - int rv; - rv = nni_stream_dialer_get(d->d, name, buf, szp, t); - if (rv == NNG_ENOTSUP) { - rv = nni_getopt(tls_dialer_opts, name, d, buf, szp, t); - } - return (rv); + return (nni_stream_dialer_get(d->d, name, buf, szp, t)); } static int @@ -261,13 +232,8 @@ tls_dialer_set( void *arg, const char *name, const void *buf, size_t sz, nni_type t) { tls_dialer *d = arg; - int rv; - rv = nni_stream_dialer_set(d->d, name, buf, sz, t); - if (rv == NNG_ENOTSUP) { - rv = nni_setopt(tls_dialer_opts, name, d, buf, sz, t); - } - return (rv); + return (nni_stream_dialer_set(d->d, name, buf, sz, t)); } int @@ -305,12 +271,15 @@ nni_tls_dialer_alloc(nng_stream_dialer **dp, const nng_url *url) // Set the expected outbound hostname nng_tls_config_server_name(d->cfg, url->u_hostname); - d->ops.sd_close = tls_dialer_close; - d->ops.sd_free = tls_dialer_free; - d->ops.sd_dial = tls_dialer_dial; - d->ops.sd_get = tls_dialer_get; - d->ops.sd_set = tls_dialer_set; - *dp = (void *) d; + d->ops.sd_close = tls_dialer_close; + d->ops.sd_free = tls_dialer_free; + d->ops.sd_dial = tls_dialer_dial; + d->ops.sd_get = tls_dialer_get; + d->ops.sd_set = tls_dialer_set; + d->ops.sd_get_tls = tls_dialer_get_tls; + d->ops.sd_set_tls = tls_dialer_set_tls; + + *dp = (void *) d; return (rv); } @@ -373,20 +342,13 @@ tls_listener_accept(void *arg, nng_aio *aio) } static int -tls_listener_set_config(void *arg, const void *buf, size_t sz, nni_type t) +tls_listener_set_tls(void *arg, nng_tls_config *cfg) { - int rv; - nng_tls_config *cfg; tls_listener *l = arg; nng_tls_config *old; - - if ((rv = nni_copyin_ptr((void **) &cfg, buf, sz, t)) != 0) { - return (rv); - } if (cfg == NULL) { return (NNG_EINVAL); } - nng_tls_config_hold(cfg); nni_mtx_lock(&l->lk); @@ -395,64 +357,35 @@ tls_listener_set_config(void *arg, const void *buf, size_t sz, nni_type t) nni_mtx_unlock(&l->lk); nng_tls_config_free(old); - return (0); } static int -tls_listener_get_config(void *arg, void *buf, size_t *szp, nni_type t) +tls_listener_get_tls(void *arg, nng_tls_config **cfg) { - tls_listener *l = arg; - nng_tls_config *cfg; - int rv; + tls_listener *l = arg; nni_mtx_lock(&l->lk); - if ((cfg = l->cfg) != NULL) { - nng_tls_config_hold(cfg); - } - if ((rv = nni_copyout_ptr(cfg, buf, szp, t)) != 0) { - nng_tls_config_free(cfg); - } + *cfg = l->cfg; nni_mtx_unlock(&l->lk); - return (rv); + return (0); } -static const nni_option tls_listener_opts[] = { - { - .o_name = NNG_OPT_TLS_CONFIG, - .o_get = tls_listener_get_config, - .o_set = tls_listener_set_config, - }, - { - .o_name = NULL, - }, -}; - static int tls_listener_get( void *arg, const char *name, void *buf, size_t *szp, nni_type t) { - int rv; tls_listener *l = arg; - rv = nni_stream_listener_get(l->l, name, buf, szp, t); - if (rv == NNG_ENOTSUP) { - rv = nni_getopt(tls_listener_opts, name, l, buf, szp, t); - } - return (rv); + return (nni_stream_listener_get(l->l, name, buf, szp, t)); } static int tls_listener_set( void *arg, const char *name, const void *buf, size_t sz, nni_type t) { - int rv; tls_listener *l = arg; - rv = nni_stream_listener_set(l->l, name, buf, sz, t); - if (rv == NNG_ENOTSUP) { - rv = nni_setopt(tls_listener_opts, name, l, buf, sz, t); - } - return (rv); + return (nni_stream_listener_set(l->l, name, buf, sz, t)); } int @@ -487,13 +420,15 @@ nni_tls_listener_alloc(nng_stream_listener **lp, const nng_url *url) NNI_FREE_STRUCT(l); return (rv); } - l->ops.sl_free = tls_listener_free; - l->ops.sl_close = tls_listener_close; - l->ops.sl_accept = tls_listener_accept; - l->ops.sl_listen = tls_listener_listen; - l->ops.sl_get = tls_listener_get; - l->ops.sl_set = tls_listener_set; - *lp = (void *) l; + l->ops.sl_free = tls_listener_free; + l->ops.sl_close = tls_listener_close; + l->ops.sl_accept = tls_listener_accept; + l->ops.sl_listen = tls_listener_listen; + l->ops.sl_get = tls_listener_get; + l->ops.sl_set = tls_listener_set; + l->ops.sl_get_tls = tls_listener_get_tls; + l->ops.sl_set_tls = tls_listener_set_tls; + *lp = (void *) l; return (0); } diff --git a/src/supplemental/tls/tls_test.c b/src/supplemental/tls/tls_test.c index 3d0c16a0..9317890d 100644 --- a/src/supplemental/tls/tls_test.c +++ b/src/supplemental/tls/tls_test.c @@ -106,7 +106,7 @@ test_tls_large_message(void) NUTS_PASS(nng_tls_config_alloc(&c1, NNG_TLS_MODE_SERVER)); NUTS_PASS(nng_tls_config_own_cert( c1, nuts_server_crt, nuts_server_key, NULL)); - NUTS_PASS(nng_stream_listener_set_ptr(l, NNG_OPT_TLS_CONFIG, c1)); + NUTS_PASS(nng_stream_listener_set_tls(l, c1)); NUTS_PASS(nng_stream_listener_listen(l)); NUTS_PASS( nng_stream_listener_get_int(l, NNG_OPT_TCP_BOUND_PORT, &port)); @@ -119,7 +119,7 @@ test_tls_large_message(void) NUTS_PASS(nng_tls_config_ca_chain(c2, nuts_server_crt, NULL)); NUTS_PASS(nng_tls_config_server_name(c2, "localhost")); - NUTS_PASS(nng_stream_dialer_set_ptr(d, NNG_OPT_TLS_CONFIG, c2)); + NUTS_PASS(nng_stream_dialer_set_tls(d, c2)); nng_stream_listener_accept(l, aio1); nng_stream_dialer_dial(d, aio2); @@ -211,7 +211,7 @@ test_tls_psk(void) NUTS_PASS(nng_stream_listener_alloc(&l, "tls+tcp://127.0.0.1:0")); NUTS_PASS(nng_tls_config_alloc(&c1, NNG_TLS_MODE_SERVER)); NUTS_PASS(nng_tls_config_psk(c1, "identity", key, sizeof(key))); - NUTS_PASS(nng_stream_listener_set_ptr(l, NNG_OPT_TLS_CONFIG, c1)); + NUTS_PASS(nng_stream_listener_set_tls(l, c1)); NUTS_PASS(nng_stream_listener_listen(l)); NUTS_PASS( nng_stream_listener_get_int(l, NNG_OPT_TCP_BOUND_PORT, &port)); @@ -223,7 +223,7 @@ test_tls_psk(void) NUTS_PASS(nng_tls_config_alloc(&c2, NNG_TLS_MODE_CLIENT)); NUTS_PASS(nng_tls_config_psk(c2, "identity", key, sizeof(key))); - NUTS_PASS(nng_stream_dialer_set_ptr(d, NNG_OPT_TLS_CONFIG, c2)); + NUTS_PASS(nng_stream_dialer_set_tls(d, c2)); nng_stream_listener_accept(l, aio1); nng_stream_dialer_dial(d, aio2); @@ -301,7 +301,7 @@ test_tls_psk_server_identities(void) nng_tls_config_psk(c1, "identity2", key + 4, sizeof(key) - 4)); NUTS_PASS(nng_tls_config_psk(c1, identity, key + 4, sizeof(key) - 4)); NUTS_PASS(nng_tls_config_psk(c1, identity, key, sizeof(key))); - NUTS_PASS(nng_stream_listener_set_ptr(l, NNG_OPT_TLS_CONFIG, c1)); + NUTS_PASS(nng_stream_listener_set_tls(l, c1)); NUTS_PASS(nng_stream_listener_listen(l)); NUTS_PASS( nng_stream_listener_get_int(l, NNG_OPT_TCP_BOUND_PORT, &port)); @@ -313,7 +313,7 @@ test_tls_psk_server_identities(void) NUTS_PASS(nng_tls_config_alloc(&c2, NNG_TLS_MODE_CLIENT)); NUTS_PASS(nng_tls_config_psk(c2, identity, key, sizeof(key))); - NUTS_PASS(nng_stream_dialer_set_ptr(d, NNG_OPT_TLS_CONFIG, c2)); + NUTS_PASS(nng_stream_dialer_set_tls(d, c2)); nng_stream_listener_accept(l, aio1); nng_stream_dialer_dial(d, aio2); @@ -387,7 +387,7 @@ test_tls_psk_bad_identity(void) NUTS_PASS(nng_tls_config_alloc(&c1, NNG_TLS_MODE_SERVER)); // Replace the identity .. first write one value, then we change it NUTS_PASS(nng_tls_config_psk(c1, "identity1", key, sizeof(key))); - NUTS_PASS(nng_stream_listener_set_ptr(l, NNG_OPT_TLS_CONFIG, c1)); + NUTS_PASS(nng_stream_listener_set_tls(l, c1)); NUTS_PASS(nng_stream_listener_listen(l)); NUTS_PASS( nng_stream_listener_get_int(l, NNG_OPT_TCP_BOUND_PORT, &port)); @@ -400,7 +400,7 @@ test_tls_psk_bad_identity(void) NUTS_PASS(nng_tls_config_psk(c2, "identity2", key, sizeof(key))); NUTS_PASS(nng_tls_config_server_name(c2, "localhost")); - NUTS_PASS(nng_stream_dialer_set_ptr(d, NNG_OPT_TLS_CONFIG, c2)); + NUTS_PASS(nng_stream_dialer_set_tls(d, c2)); nng_stream_listener_accept(l, aio1); nng_stream_dialer_dial(d, aio2); @@ -463,7 +463,7 @@ test_tls_psk_config_busy(void) NUTS_PASS(nng_stream_listener_alloc(&l, "tls+tcp://127.0.0.1:0")); NUTS_PASS(nng_tls_config_alloc(&c1, NNG_TLS_MODE_SERVER)); NUTS_PASS(nng_tls_config_psk(c1, "identity", key, sizeof(key))); - NUTS_PASS(nng_stream_listener_set_ptr(l, NNG_OPT_TLS_CONFIG, c1)); + NUTS_PASS(nng_stream_listener_set_tls(l, c1)); nng_stream_listener_accept(l, aio); nng_msleep(100); NUTS_FAIL( |
