Files
c/kubernetes/model/v1_linux_container_user.c

187 lines
5.3 KiB
C
Raw Normal View History

#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include "v1_linux_container_user.h"
static v1_linux_container_user_t *v1_linux_container_user_create_internal(
long gid,
list_t *supplemental_groups,
long uid
) {
v1_linux_container_user_t *v1_linux_container_user_local_var = malloc(sizeof(v1_linux_container_user_t));
if (!v1_linux_container_user_local_var) {
return NULL;
}
v1_linux_container_user_local_var->gid = gid;
v1_linux_container_user_local_var->supplemental_groups = supplemental_groups;
v1_linux_container_user_local_var->uid = uid;
v1_linux_container_user_local_var->_library_owned = 1;
return v1_linux_container_user_local_var;
}
__attribute__((deprecated)) v1_linux_container_user_t *v1_linux_container_user_create(
long gid,
list_t *supplemental_groups,
long uid
) {
return v1_linux_container_user_create_internal (
gid,
supplemental_groups,
uid
);
}
void v1_linux_container_user_free(v1_linux_container_user_t *v1_linux_container_user) {
if(NULL == v1_linux_container_user){
return ;
}
if(v1_linux_container_user->_library_owned != 1){
fprintf(stderr, "WARNING: %s() does NOT free objects allocated by the user\n", "v1_linux_container_user_free");
return ;
}
listEntry_t *listEntry;
if (v1_linux_container_user->supplemental_groups) {
list_ForEach(listEntry, v1_linux_container_user->supplemental_groups) {
free(listEntry->data);
}
list_freeList(v1_linux_container_user->supplemental_groups);
v1_linux_container_user->supplemental_groups = NULL;
}
free(v1_linux_container_user);
}
cJSON *v1_linux_container_user_convertToJSON(v1_linux_container_user_t *v1_linux_container_user) {
cJSON *item = cJSON_CreateObject();
// v1_linux_container_user->gid
if (!v1_linux_container_user->gid) {
goto fail;
}
if(cJSON_AddNumberToObject(item, "gid", v1_linux_container_user->gid) == NULL) {
goto fail; //Numeric
}
// v1_linux_container_user->supplemental_groups
if(v1_linux_container_user->supplemental_groups) {
cJSON *supplemental_groups = cJSON_AddArrayToObject(item, "supplementalGroups");
if(supplemental_groups == NULL) {
goto fail; //primitive container
}
listEntry_t *supplemental_groupsListEntry;
list_ForEach(supplemental_groupsListEntry, v1_linux_container_user->supplemental_groups) {
if(cJSON_AddNumberToObject(supplemental_groups, "", *(double *)supplemental_groupsListEntry->data) == NULL)
{
goto fail;
}
}
}
// v1_linux_container_user->uid
if (!v1_linux_container_user->uid) {
goto fail;
}
if(cJSON_AddNumberToObject(item, "uid", v1_linux_container_user->uid) == NULL) {
goto fail; //Numeric
}
return item;
fail:
if (item) {
cJSON_Delete(item);
}
return NULL;
}
v1_linux_container_user_t *v1_linux_container_user_parseFromJSON(cJSON *v1_linux_container_userJSON){
v1_linux_container_user_t *v1_linux_container_user_local_var = NULL;
// define the local list for v1_linux_container_user->supplemental_groups
list_t *supplemental_groupsList = NULL;
// v1_linux_container_user->gid
cJSON *gid = cJSON_GetObjectItemCaseSensitive(v1_linux_container_userJSON, "gid");
if (cJSON_IsNull(gid)) {
gid = NULL;
}
if (!gid) {
goto end;
}
if(!cJSON_IsNumber(gid))
{
goto end; //Numeric
}
// v1_linux_container_user->supplemental_groups
cJSON *supplemental_groups = cJSON_GetObjectItemCaseSensitive(v1_linux_container_userJSON, "supplementalGroups");
if (cJSON_IsNull(supplemental_groups)) {
supplemental_groups = NULL;
}
if (supplemental_groups) {
cJSON *supplemental_groups_local = NULL;
if(!cJSON_IsArray(supplemental_groups)) {
goto end;//primitive container
}
supplemental_groupsList = list_createList();
cJSON_ArrayForEach(supplemental_groups_local, supplemental_groups)
{
if(!cJSON_IsNumber(supplemental_groups_local))
{
goto end;
}
double *supplemental_groups_local_value = calloc(1, sizeof(double));
if(!supplemental_groups_local_value)
{
goto end;
}
*supplemental_groups_local_value = supplemental_groups_local->valuedouble;
list_addElement(supplemental_groupsList , supplemental_groups_local_value);
}
}
// v1_linux_container_user->uid
cJSON *uid = cJSON_GetObjectItemCaseSensitive(v1_linux_container_userJSON, "uid");
if (cJSON_IsNull(uid)) {
uid = NULL;
}
if (!uid) {
goto end;
}
if(!cJSON_IsNumber(uid))
{
goto end; //Numeric
}
v1_linux_container_user_local_var = v1_linux_container_user_create_internal (
gid->valuedouble,
supplemental_groups ? supplemental_groupsList : NULL,
uid->valuedouble
);
return v1_linux_container_user_local_var;
end:
if (supplemental_groupsList) {
listEntry_t *listEntry = NULL;
list_ForEach(listEntry, supplemental_groupsList) {
free(listEntry->data);
listEntry->data = NULL;
}
list_freeList(supplemental_groupsList);
supplemental_groupsList = NULL;
}
return NULL;
}