diff --git a/src/sbbs3/js_socket.c b/src/sbbs3/js_socket.c index d17e97ecc1d1dd5ebf78451e85e4f33faf1614ea..90b10632846329b3858befc3bceec06211d46641 100644 --- a/src/sbbs3/js_socket.c +++ b/src/sbbs3/js_socket.c @@ -2408,11 +2408,9 @@ static JSBool js_socket_set(JSContext *cx, JSObject *obj, jsid id, JSBool strict ret = CRYPT_ERROR_NOTAVAIL; } else { - if (!p->tls_psk) { - ret = add_private_key(scfg, lprintf, p->session); - if (ret != CRYPT_OK) { - GCES(ret, p, estr, "setting private key"); - } + ret = add_private_key(scfg, lprintf, p->session); + if (ret != CRYPT_OK) { + GCES(ret, p, estr, "setting private key"); } } } @@ -2644,18 +2642,23 @@ static JSBool js_socket_get(JSContext *cx, JSObject *obj, jsid id, jsval *vp) 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; + int attrval; + if ((cryptGetAttribute(p->session, CRYPT_SESSINFO_TLS_OPTIONS, &attrval) != CRYPT_OK) + || ((attrval & CRYPT_TLSOPTION_USED_PSK) == 0)) + *vp = JSVAL_VOID; + else { + if ((cryptGetAttributeString(p->session, CRYPT_SESSINFO_USERNAME, NULL, &attrval) == CRYPT_OK) && (attrval > 0)) { + char *id = malloc(attrval); + if (id) { + if (cryptGetAttributeString(p->session, CRYPT_SESSINFO_USERNAME, id, &attrval) == CRYPT_OK) { + if ((js_str = JS_NewStringCopyN(cx, id, attrval)) == NULL) { + free(id); + return JS_FALSE; + } + *vp = STRING_TO_JSVAL(js_str); } - *vp = STRING_TO_JSVAL(js_str); + free(id); } - free(id); } } } @@ -3686,6 +3689,7 @@ JSObject* js_CreateSocketObjectFromSet(JSContext* cx, JSObject* parent, char *na if (set->sock_count < 1) return NULL; + len = sizeof(type); getsockopt(set->socks[0].sock, SOL_SOCKET, SO_TYPE, (void*)&type, &len);