Skip to content

Commit 7ee7a2c

Browse files
committed
convert base64url to base64
Signed-off-by: Hyunsoo Kim <[email protected]>
1 parent 8a6627a commit 7ee7a2c

File tree

1 file changed

+19
-4
lines changed

1 file changed

+19
-4
lines changed

plugins/filter_kubernetes/kubernetes_aws.c

Lines changed: 19 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -296,6 +296,7 @@ int determine_platform(struct flb_kube *ctx)
296296
char *first_dot;
297297
char *second_dot;
298298
size_t payload_b64_len;
299+
size_t padded_len;
299300
char *payload_b64;
300301
size_t issuer_len;
301302
char *issuer_value;
@@ -321,14 +322,28 @@ int determine_platform(struct flb_kube *ctx)
321322

322323
/* Extract and decode the payload (middle part) */
323324
payload_b64_len = second_dot - (first_dot + 1);
324-
payload_b64 = flb_malloc(payload_b64_len + 1);
325+
326+
/* Calculate padded length */
327+
padded_len = payload_b64_len;
328+
while (padded_len % 4 != 0) padded_len++;
329+
330+
payload_b64 = flb_malloc(padded_len + 1);
325331
if (!payload_b64) {
326332
flb_free(token_buf);
327333
return -1;
328334
}
329335

330336
memcpy(payload_b64, first_dot + 1, payload_b64_len);
331-
payload_b64[payload_b64_len] = '\0';
337+
338+
/* Convert base64url to base64 and add padding */
339+
for (size_t i = 0; i < payload_b64_len; i++) {
340+
if (payload_b64[i] == '-') payload_b64[i] = '+';
341+
else if (payload_b64[i] == '_') payload_b64[i] = '/';
342+
}
343+
while (payload_b64_len < padded_len) {
344+
payload_b64[payload_b64_len++] = '=';
345+
}
346+
payload_b64[padded_len] = '\0';
332347

333348
/* Base64 decode the payload */
334349
payload = flb_malloc(payload_b64_len * 3 / 4 + 4); /* Conservative size estimate */
@@ -338,8 +353,8 @@ int determine_platform(struct flb_kube *ctx)
338353
return -1;
339354
}
340355

341-
ret = flb_base64_decode((unsigned char *)payload, payload_b64_len * 3 / 4 + 4,
342-
&payload_len, (unsigned char *)payload_b64, payload_b64_len);
356+
ret = flb_base64_decode((unsigned char *)payload, padded_len * 3 / 4 + 4,
357+
&payload_len, (unsigned char *)payload_b64, padded_len);
343358

344359
flb_free(token_buf);
345360
flb_free(payload_b64);

0 commit comments

Comments
 (0)