ACLK: allow encoded proxy username and password to work (#19508)
allow encoded proxy username and password to work
Costa Tsaousis committed
Jan 28, 2025 at 12:24 UTC
86bb893a8c6f0cb163e93c8ff092b02276b7ff40
1 file changed
+13
-8
src/aclk/aclk_util.c
+13
-8
@@ -359,20 +359,25 @@ unsigned long int aclk_tbeb_delay(int reset, int base, unsigned long int min, un
359
return delay;
360
}
361
362
-static inline int aclk_parse_pair(const char *src, const char c, char **a, char **b)
362
+static inline int aclk_parse_userpass_pair(const char *src, const char c, char **a, char **b)
363
{
364
const char *ptr = strchr(src, c);
365
if (ptr == NULL)
366
return 1;
367
368
-// allow empty string
369
-/* if (!*(ptr+1))
370
- return 1;*/
368
+ char *tmp_a = callocz(1, ptr - src + 1);
369
+ memcpy(tmp_a, src, ptr - src);
370
372
- *a = callocz(1, ptr - src + 1);
373
- memcpy (*a, src, ptr - src);
371
+ char *decoded_a = callocz(1, ptr - src + 1);
372
+ url_decode_r(decoded_a, tmp_a, ptr - src + 1);
373
+ freez(tmp_a);
374
+ *a = decoded_a;
375
375
- *b = strdupz(ptr+1);
376
+ char *tmp_b = strdupz(ptr+1);
377
+ char *decoded_b = callocz(1, strlen(tmp_b) + 1);
378
+ url_decode_r(decoded_b, tmp_b, strlen(tmp_b) + 1);
379
+ freez(tmp_b);
380
+ *b = decoded_b;
381
382
return 0;
383
}
@@ -399,7 +404,7 @@ void aclk_set_proxy(char **ohost, int *port, char **uname, char **pwd, enum mqtt
404
405
if ((tmp = strchr(ptr, '@'))) {
406
*tmp = 0;
402
- if(aclk_parse_pair(ptr, ':', uname, pwd)) {
407
+ if(aclk_parse_userpass_pair(ptr, ':', uname, pwd)) {
408
error_report("Failed to get username and password for proxy. Will attempt connection without authentication");
409
}
410
ptr = tmp+1;