Skip to content

Commit 5911cc0

Browse files
authored
Merge pull request #167 from hirishh/fix-user-certs-by-paths
Load user certificates by file path
2 parents f8e62c1 + 1e06eb2 commit 5911cc0

File tree

1 file changed

+33
-1
lines changed

1 file changed

+33
-1
lines changed

kubernetes/config/kube_config_yaml.c

Lines changed: 33 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,8 @@ mapping :: = MAPPING - START(node node) * MAPPING - END
4646
#define KEY_CERTIFICATE_AUTHORITY_DATA "certificate-authority-data"
4747
#define KEY_INSECURE_SKIP_TLS_VERIFY "insecure-skip-tls-verify"
4848
#define KEY_SERVER "server"
49+
#define KEY_CLIENT_CERTIFICATE "client-certificate"
50+
#define KEY_CLIENT_KEY "client-key"
4951
#define KEY_CLIENT_CERTIFICATE_DATA "client-certificate-data"
5052
#define KEY_CLIENT_KEY_DATA "client-key-data"
5153
#define KEY_STAUTS "status"
@@ -55,6 +57,31 @@ mapping :: = MAPPING - START(node node) * MAPPING - END
5557

5658
#define VALUE_TRUE_LOWERCASE_STRING "true"
5759

60+
static char *load_file_content(const char *path) {
61+
62+
static char fname[] = "load_file_content()";
63+
64+
char *buffer;
65+
FILE *fh = fopen(path, "rb");
66+
67+
if (fh == NULL) {
68+
fprintf(stderr, "%s: Cannot parse file path: %s\n", fname, path);
69+
return NULL;
70+
}
71+
72+
fseek(fh, 0L, SEEK_END);
73+
long s = ftell(fh);
74+
rewind(fh);
75+
buffer = malloc(s);
76+
if ( buffer != NULL )
77+
{
78+
fread(buffer, s, 1, fh);
79+
}
80+
fclose(fh);
81+
fh = NULL;
82+
return buffer;
83+
}
84+
5885
static int parse_kubeconfig_yaml_string_sequence(char ***p_strings, int *p_strings_count, yaml_document_t * document, yaml_node_t * node)
5986
{
6087
static char fname[] = "parse_kubeconfig_yaml_string_sequence()";
@@ -193,7 +220,11 @@ static int parse_kubeconfig_yaml_property_mapping(kubeconfig_property_t * proper
193220
property->insecure_skip_tls_verify = (0 == strcmp(value->data.scalar.value, VALUE_TRUE_LOWERCASE_STRING)); //libyaml fails to parse true, but it can parse "true"!
194221
}
195222
} else if (KUBECONFIG_PROPERTY_TYPE_USER == property->type) {
196-
if (0 == strcmp(key->data.scalar.value, KEY_CLIENT_CERTIFICATE_DATA)) {
223+
if (0 == strcmp(key->data.scalar.value, KEY_CLIENT_CERTIFICATE)) {
224+
property->client_certificate_data = load_file_content(value->data.scalar.value);
225+
} else if (0 == strcmp(key->data.scalar.value, KEY_CLIENT_KEY)) {
226+
property->client_key_data = load_file_content(value->data.scalar.value);
227+
} else if (0 == strcmp(key->data.scalar.value, KEY_CLIENT_CERTIFICATE_DATA)) {
197228
property->client_certificate_data = strdup(value->data.scalar.value);
198229
} else if (0 == strcmp(key->data.scalar.value, KEY_CLIENT_KEY_DATA)) {
199230
property->client_key_data = strdup(value->data.scalar.value);
@@ -1090,3 +1121,4 @@ int kubeyaml_save_kubeconfig(const kubeconfig_t * kubeconfig)
10901121

10911122
return -1;
10921123
}
1124+

0 commit comments

Comments
 (0)