diff --git a/kubernetes/ConfigureChecks.cmake b/kubernetes/ConfigureChecks.cmake index 0e63728f..c34df264 100644 --- a/kubernetes/ConfigureChecks.cmake +++ b/kubernetes/ConfigureChecks.cmake @@ -3,3 +3,4 @@ include(CheckSymbolExists) check_symbol_exists(strndup "string.h" HAVE_STRNDUP) check_symbol_exists(secure_getenv "stdlib.h" HAVE_SECURE_GETENV) check_symbol_exists(getenv "stdlib.h" HAVE_GETENV) +check_symbol_exists(strtok_r "string.h" HAVE_STRTOK_R) diff --git a/kubernetes/config.h.in b/kubernetes/config.h.in index 35cba3c9..24de7ce7 100644 --- a/kubernetes/config.h.in +++ b/kubernetes/config.h.in @@ -1,3 +1,4 @@ #cmakedefine HAVE_STRNDUP #cmakedefine HAVE_SECURE_GETENV -#cmakedefine HAVE_GETENV \ No newline at end of file +#cmakedefine HAVE_GETENV +#cmakedefine HAVE_STRTOK_R diff --git a/kubernetes/config/authn_plugin/plugins/oidc/CMakeLists.txt b/kubernetes/config/authn_plugin/plugins/oidc/CMakeLists.txt index 578da996..a45361c0 100644 --- a/kubernetes/config/authn_plugin/plugins/oidc/CMakeLists.txt +++ b/kubernetes/config/authn_plugin/plugins/oidc/CMakeLists.txt @@ -9,6 +9,7 @@ include_directories(../../) include_directories(../../../) include_directories(../../../../include/) include_directories(../../../../external/) +include_directories(../../../../src/) aux_source_directory(. DIR_SRCS) diff --git a/kubernetes/config/authn_plugin/plugins/oidc/libkubernetes_oidc.c b/kubernetes/config/authn_plugin/plugins/oidc/libkubernetes_oidc.c index bffd3c6d..cd64f94a 100644 --- a/kubernetes/config/authn_plugin/plugins/oidc/libkubernetes_oidc.c +++ b/kubernetes/config/authn_plugin/plugins/oidc/libkubernetes_oidc.c @@ -1,3 +1,4 @@ +#include "config.h" #include "authn_plugin.h" #include "authn_plugin_util.h" #include "kube_config_util.h" @@ -41,12 +42,22 @@ static time_t get_token_expiration_time(const char *token_string) } char *p = NULL; - p = strtok(dup_token_string, OIDC_ID_TOKEN_DELIM); /* jwt header */ +#ifdef HAVE_STRTOK_R + char *last = NULL; + + p = strtok_r(dup_token_string, OIDC_ID_TOKEN_DELIM, &last); /* jwt header */ +#else + p = strtok(dup_token_string, OIDC_ID_TOKEN_DELIM); +#endif if (!p) { fprintf(stderr, "%s: The token <%s> is not a valid JWT token.\n", fname, token_string); goto end; } +#ifdef HAVE_STRTOK_R + p = strtok_r(NULL, OIDC_ID_TOKEN_DELIM, &last); /* jwt part2 */ +#else p = strtok(NULL, OIDC_ID_TOKEN_DELIM); /* jwt part2 */ +#endif if (!p) { fprintf(stderr, "%s: The token <%s> is not a valid JWT token.\n", fname, token_string); goto end; diff --git a/kubernetes/src/utils.c b/kubernetes/src/utils.c index 14d5242f..f8cfee29 100644 --- a/kubernetes/src/utils.c +++ b/kubernetes/src/utils.c @@ -1,6 +1,7 @@ #include #include "../include/utils.h" #include +#include "config.h" // based on https://github.com/libssh/libssh-mirror/commit/247983e9820fd264cb5a59c14cc12846c028bd08#diff-744295d01685fa411dbfd78679ea20b51dfa4ac7d2d722df53f3d86d728493f8 #if !defined(HAVE_STRNDUP) diff --git a/kubernetes/watch/watch_util.c b/kubernetes/watch/watch_util.c index 401544a1..c948ee5e 100644 --- a/kubernetes/watch/watch_util.c +++ b/kubernetes/watch/watch_util.c @@ -3,6 +3,7 @@ #include #include #include +#include "config.h" #include "../include/list.h" #include "watch_util.h" @@ -18,7 +19,14 @@ static int wu_convert_to_json_array(list_t * json_array, const char *json_string char *json_string_dup = strdup(json_string); char *token = NULL; +#ifdef HAVE_STRTOK_R + char *last = NULL; + + token = strtok_r(json_string_dup, JSON_ARRAY_DELIM, &last); +#else token = strtok(json_string_dup, JSON_ARRAY_DELIM); +#endif + while (token) { cJSON *cjson = cJSON_Parse(token); if (cjson == NULL) { @@ -27,7 +35,11 @@ static int wu_convert_to_json_array(list_t * json_array, const char *json_string } cJSON_Delete(cjson); list_addElement(json_array, strdup(token)); +#ifdef HAVE_STRTOK_R + token = strtok_r(NULL, JSON_ARRAY_DELIM, &last); +#else token = strtok(NULL, JSON_ARRAY_DELIM); +#endif } end: