hex for nulls and lulz
authorSam Hartman <hartmans@debian.org>
Thu, 4 Apr 2013 09:42:58 +0000 (05:42 -0400)
committerSam Hartman <hartmans@debian.org>
Tue, 13 Aug 2013 15:45:47 +0000 (11:45 -0400)
src/main/tls.c

index 2be5208..4b09393 100644 (file)
@@ -95,15 +95,20 @@ static unsigned int psk_server_callback(SSL *ssl, const char *identity,
                                             FR_TLS_EX_INDEX_REQUEST);
        if (request) {
                VALUE_PAIR *vp;
+                char psk_buffer[PSK_MAX_PSK_LEN];
+                size_t hex_len = 0;
+               rad_assert(psk_len <= PSK_MAX_PSK_LEN);
                vp = radius_pairmake(request, &request->config_items,
                                  "tls-psk-identity",
                                  identity, T_OP_SET);
                if (vp) {
                        if (identity_is_safe(identity))
-                         psk_len = radius_xlat((char *) psk, max_psk_len,
-                                               "%{psksql:select key from psk_keys where keyid = '%{control:tls-psk-identity}';}",
+                         hex_len = radius_xlat((char *) psk_buffer,
+                                               2*max_psk_len,
+                                               "%{psksql:select hex(key) from psk_keys where keyid = '%{control:tls-psk-identity}';}",
                                                request, NULL, NULL);
-                       if (psk_len > 0) return psk_len;
+                       if (hex_len >0)
+                               return rad_hex2bin(psk_buffer, hex_len);
                }
        }
                if (strcmp(identity, conf->psk_identity) != 0) {