Skip to content

Commit 86bb893

Browse files
authored
ACLK: allow encoded proxy username and password to work (netdata#19508)
allow encoded proxy username and password to work
1 parent 766c068 commit 86bb893

File tree

1 file changed

+13
-8
lines changed

1 file changed

+13
-8
lines changed

src/aclk/aclk_util.c

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -359,20 +359,25 @@ unsigned long int aclk_tbeb_delay(int reset, int base, unsigned long int min, un
359359
return delay;
360360
}
361361

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)
363363
{
364364
const char *ptr = strchr(src, c);
365365
if (ptr == NULL)
366366
return 1;
367367

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);
371370

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;
374375

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;
376381

377382
return 0;
378383
}
@@ -399,7 +404,7 @@ void aclk_set_proxy(char **ohost, int *port, char **uname, char **pwd, enum mqtt
399404

400405
if ((tmp = strchr(ptr, '@'))) {
401406
*tmp = 0;
402-
if(aclk_parse_pair(ptr, ':', uname, pwd)) {
407+
if(aclk_parse_userpass_pair(ptr, ':', uname, pwd)) {
403408
error_report("Failed to get username and password for proxy. Will attempt connection without authentication");
404409
}
405410
ptr = tmp+1;

0 commit comments

Comments
 (0)