From 82a6e7c51ae366568e7e293b8ffaf2fe69f9c21a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Deuc=D0=B5?= <shurd@sasktel.net> Date: Sun, 2 Feb 2025 03:05:20 -0500 Subject: [PATCH] Add Socket.tls_psk_id property If tls_psk is used, indicates which entry in tls_psk was used by the remote. --- src/sbbs3/js_socket.c | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/src/sbbs3/js_socket.c b/src/sbbs3/js_socket.c index 668c9b23c0..d17e97ecc1 100644 --- a/src/sbbs3/js_socket.c +++ b/src/sbbs3/js_socket.c @@ -2244,6 +2244,7 @@ enum { , SOCK_PROP_SSL_SERVER , SOCK_PROP_TLS_MINVER , SOCK_PROP_TLS_PSK + , SOCK_PROP_TLS_PSK_ID }; @@ -2639,6 +2640,25 @@ static JSBool js_socket_get(JSContext *cx, JSObject *obj, jsid id, jsval *vp) else *vp = OBJECT_TO_JSVAL(p->tls_psk); break; + case SOCK_PROP_TLS_PSK_ID: + if (p->tls_psk == NULL) + *vp = JSVAL_VOID; + else { + int idlen; + if ((cryptGetAttributeString(p->session, CRYPT_SESSINFO_USERNAME, NULL, &idlen) == CRYPT_OK) && (idlen > 0)) { + char *id = malloc(idlen); + if (id) { + if (cryptGetAttributeString(p->session, CRYPT_SESSINFO_USERNAME, id, &idlen) == CRYPT_OK) { + if ((js_str = JS_NewStringCopyN(cx, id, idlen)) == NULL) { + free(id); + return JS_FALSE; + } + *vp = STRING_TO_JSVAL(js_str); + } + free(id); + } + } + } } JS_RESUMEREQUEST(cx, rc); @@ -2672,6 +2692,7 @@ static jsSyncPropertySpec js_socket_properties[] = { { "ssl_server", SOCK_PROP_SSL_SERVER, JSPROP_ENUMERATE, 316 }, { "tls_minver", SOCK_PROP_TLS_MINVER, JSPROP_ENUMERATE, 320 }, { "tls_psk", SOCK_PROP_TLS_PSK, JSPROP_ENUMERATE, 320 }, + { "tls_psk_id", SOCK_PROP_TLS_PSK_ID, JSPROP_ENUMERATE | JSPROP_READONLY, 320 }, {0} }; -- GitLab