//----------------------------------------------------------------------------------- ResourceAccess::ResourceAccess HlmsJsonCompute::parseAccess( const rapidjson::Value &json ) { uint8 access = 0; if( json.IsArray() ) { for( rapidjson::SizeType i=0; i<json.Size(); ++i ) { if( json[i].IsString() ) access |= parseAccess( json[i].GetString() ); } } else if( json.IsString() ) { access = parseAccess( json.GetString() ); } return static_cast<ResourceAccess::ResourceAccess>( access ); }
static policyPtr parsePermission(xmlNode *node, int allow) { xmlNode *cur_node = node; int accessParsed = 0; ulong noOfGroups = 0; ulong noOfUsers = 0; int fileParsed = 0; ulong userIndex = 0; ulong groupIndex = 0; long tempaccessMode = 0; policyPtr newAccessNode = null; char *temp = null; if (cur_node && cur_node->type == XML_ELEMENT_NODE && (!strcmp(cur_node->name, allowTagName) || !strcmp(cur_node->name, denyTagName))) { fileParsed = 0; accessParsed = 0; noOfGroups = getNoOfGroups(cur_node); noOfUsers = getNoOfUsers(cur_node); newAccessNode = getNewPolicyElement(); if (noOfGroups) { newAccessNode->groups = (char**) malloc(sizeof (char*) * noOfGroups); } if (noOfUsers) { newAccessNode->users = (char**) malloc(sizeof (char*) * noOfUsers); } newAccessNode->allow = allow; userIndex = 0; groupIndex = 0; tempaccessMode = -1; for (cur_node = node->children; cur_node; cur_node = cur_node->next) { if (cur_node->type == XML_ELEMENT_NODE) { if (!strcmp(cur_node->name, fileTagName) && !(fileParsed)) { temp = parseFile(cur_node); fileParsed = 1; if (temp) { newAccessNode->fileName = temp; } else { goto cleanup; } } else if (!strcmp(cur_node->name, userTagName)) { temp = parseUser(cur_node); if (temp) { newAccessNode->users[userIndex++] = temp; newAccessNode->noOfUsers++; } else { goto cleanup; } } else if (!strcmp(cur_node->name, groupTagName)) { temp = parseGroup(cur_node); if (temp) { newAccessNode->groups[groupIndex++] = temp; newAccessNode->noOfGroups++; } else { goto cleanup; } } else if (!strcmp(cur_node->name, accessTagName) && !(accessParsed)) { tempaccessMode = parseAccess(cur_node); accessParsed = 1; if (tempaccessMode < 0) { goto cleanup; } else { newAccessNode->mode = (ulong) tempaccessMode; } } else { fprintf(stderr, "\nInvalid Element:%s\n", cur_node->name); goto cleanup; } } } } else { fprintf(stderr, "Expected element : %s, as root node but found:%s", allowTagName, cur_node->name); } ret: return newAccessNode; cleanup: freePolicyElement(newAccessNode); newAccessNode = null; goto ret; }