axis2_status_t AXIS2_CALL load_policy_array( axutil_array_list_t * arraylist, axiom_node_t * root, const axutil_env_t * env) { axiom_element_t *root_ele = NULL; if (root) { if (axiom_node_get_node_type(root, env) == AXIOM_ELEMENT) { root_ele = (axiom_element_t *) axiom_node_get_data_element(root, env); if (root_ele) { neethi_policy_t *neethi_policy = NULL; neethi_policy = neethi_engine_get_policy(env, root, root_ele); if (!neethi_policy) { printf("Policy Creation fails\n"); return AXIS2_FAILURE; } axutil_array_list_add(arraylist, env, neethi_policy); } } } return AXIS2_SUCCESS; }
AXIS2_EXTERN neethi_assertion_t *AXIS2_CALL rp_wss10_builder_build( const axutil_env_t *env, axiom_node_t *node, axiom_element_t *element) { rp_wss10_t *wss10 = NULL; neethi_policy_t *policy = NULL; axiom_node_t *child_node = NULL; axiom_element_t *child_element = NULL; axutil_array_list_t *alternatives = NULL; neethi_operator_t *component = NULL; neethi_all_t *all = NULL; neethi_assertion_t *assertion = NULL; neethi_policy_t *normalized_policy = NULL; (void)element; wss10 = rp_wss10_create(env); child_node = axiom_node_get_first_element(node, env); if(!child_node) { return NULL; } if(axiom_node_get_node_type(child_node, env) == AXIOM_ELEMENT) { child_element = (axiom_element_t *)axiom_node_get_data_element(child_node, env); if(child_element) { policy = neethi_engine_get_policy(env, child_node, child_element); if(!policy) { return NULL; } normalized_policy = neethi_engine_get_normalize(env, AXIS2_FALSE, policy); neethi_policy_free(policy, env); policy = NULL; alternatives = neethi_policy_get_alternatives(normalized_policy, env); component = (neethi_operator_t *)axutil_array_list_get(alternatives, env, 0); all = (neethi_all_t *)neethi_operator_get_value(component, env); wss10_process_alternatives(env, all, wss10); assertion = neethi_assertion_create_with_args(env, (AXIS2_FREE_VOID_ARG)rp_wss10_free, wss10, ASSERTION_TYPE_WSS10); neethi_policy_free(normalized_policy, env); normalized_policy = NULL; return assertion; } else return NULL; } else return NULL; }
AXIS2_EXTERN neethi_assertion_t *AXIS2_CALL rp_bootstrap_policy_builder_build( const axutil_env_t *env, axiom_node_t *node, axiom_element_t *element) { neethi_policy_t *policy = NULL; axiom_node_t *child_node = NULL; axiom_element_t *child_element = NULL; neethi_assertion_t *assertion = NULL; child_node = axiom_node_get_first_element(node, env); if (!child_node) { return NULL; } if (axiom_node_get_node_type(child_node, env) == AXIOM_ELEMENT) { child_element = (axiom_element_t *) axiom_node_get_data_element(child_node, env); if (child_element) { policy = neethi_engine_get_policy(env, child_node, child_element); if (!policy) { return NULL; } assertion = neethi_assertion_create_with_args(env, NULL, /*this policy should not be deleted*/ policy, ASSERTION_TYPE_BOOTSTRAP_POLICY); return assertion; } else return NULL; } else return NULL; }
AXIS2_EXTERN neethi_assertion_t * AXIS2_CALL rp_issued_token_builder_build( const axutil_env_t *env, axiom_node_t *node, axiom_element_t *element) { rp_issued_token_t *issued_token = NULL; neethi_policy_t *policy = NULL; neethi_policy_t *normalized_policy = NULL; neethi_all_t *all = NULL; axutil_array_list_t *alternatives = NULL; neethi_operator_t *component = NULL; axis2_char_t *inclusion_value = NULL; axutil_qname_t *qname = NULL; axiom_node_t *issuer_node = NULL; axiom_element_t *issuer_ele = NULL; axiom_element_t *issuer_first_child_ele = NULL; axiom_node_t *issuer_first_child_node = NULL; axiom_node_t *req_sec_tok_template_node = NULL; axiom_element_t *req_sec_tok_template_ele = NULL; axiom_node_t *policy_node = NULL; axiom_element_t *policy_ele = NULL; neethi_assertion_t *assertion = NULL; issued_token = rp_issued_token_create(env); qname = axutil_qname_create(env, RP_INCLUDE_TOKEN, RP_SP_NS_11, RP_SP_PREFIX); inclusion_value = axiom_element_get_attribute_value(element, env, qname); axutil_qname_free(qname, env); qname = NULL; if(!inclusion_value) { /* we can try whether WS-SP1.2 specific inclusion value */ qname = axutil_qname_create(env, RP_INCLUDE_TOKEN, RP_SP_NS_12, RP_SP_PREFIX); inclusion_value = axiom_element_get_attribute_value(element, env, qname); axutil_qname_free(qname, env); qname = NULL; } if(inclusion_value) { rp_issued_token_set_inclusion(issued_token, env, inclusion_value); } qname = axutil_qname_create(env, RP_ISSUER, RP_SP_NS_11, RP_SP_PREFIX); issuer_ele = axiom_element_get_first_child_with_qname(element, env, qname, node, &issuer_node); if(issuer_ele) { issuer_first_child_ele = axiom_element_get_first_element(issuer_ele, env, issuer_node, &issuer_first_child_node); if(issuer_first_child_ele) { rp_issued_token_set_issuer_epr(issued_token, env, issuer_first_child_node); } } axutil_qname_free(qname, env); qname = NULL; qname = axutil_qname_create(env, RP_REQUEST_SEC_TOKEN_TEMPLATE, RP_SP_NS_11, RP_SP_PREFIX); req_sec_tok_template_ele = axiom_element_get_first_child_with_qname(element, env, qname, node, &req_sec_tok_template_node); if(req_sec_tok_template_ele) { rp_issued_token_set_requested_sec_token_template(issued_token, env, req_sec_tok_template_node); } else { return NULL; } axutil_qname_free(qname, env); qname = NULL; qname = axutil_qname_create(env, RP_POLICY, RP_POLICY_NS, RP_POLICY_PREFIX); policy_ele = axiom_element_get_first_child_with_qname(element, env, qname, node, &policy_node); if(policy_ele) { policy = neethi_engine_get_policy(env, policy_node, policy_ele); if(!policy) { return NULL; } normalized_policy = neethi_engine_get_normalize(env, AXIS2_FALSE, policy); neethi_policy_free(policy, env); policy = NULL; alternatives = neethi_policy_get_alternatives(normalized_policy, env); component = (neethi_operator_t *)axutil_array_list_get(alternatives, env, 0); all = (neethi_all_t *)neethi_operator_get_value(component, env); if(AXIS2_FAILURE == rp_issued_token_builder_process_alternatives(env, all, issued_token)) return NULL; assertion = neethi_assertion_create_with_args(env, (AXIS2_FREE_VOID_ARG)rp_issued_token_free, issued_token, ASSERTION_TYPE_ISSUED_TOKEN); neethi_policy_free(normalized_policy, env); normalized_policy = NULL; return assertion; } assertion = neethi_assertion_create(env); neethi_assertion_set_value(assertion, env, issued_token, ASSERTION_TYPE_ISSUED_TOKEN); return assertion; }
AXIS2_EXTERN neethi_assertion_t *AXIS2_CALL rp_username_token_builder_build( const axutil_env_t *env, axiom_node_t *node, axiom_element_t *element) { rp_username_token_t *username_token = NULL; neethi_policy_t *policy = NULL; axiom_node_t *child_node = NULL; axiom_element_t *child_element = NULL; axutil_array_list_t *alternatives = NULL; neethi_operator_t *component = NULL; neethi_all_t *all = NULL; axis2_char_t *inclusion_value = NULL; axutil_qname_t *qname = NULL; neethi_assertion_t *assertion = NULL; neethi_policy_t *normalized_policy = NULL; username_token = rp_username_token_create(env); qname = axutil_qname_create(env, RP_INCLUDE_TOKEN, RP_SP_NS_11, RP_SP_PREFIX); inclusion_value = axiom_element_get_attribute_value(element, env, qname); axutil_qname_free(qname, env); qname = NULL; if(!inclusion_value) { /* we can try whether WS-SP1.2 specific inclusion value */ qname = axutil_qname_create(env, RP_INCLUDE_TOKEN, RP_SP_NS_12, RP_SP_PREFIX); inclusion_value = axiom_element_get_attribute_value(element, env, qname); axutil_qname_free(qname, env); qname = NULL; } rp_username_token_set_inclusion(username_token, env, inclusion_value); child_node = axiom_node_get_first_element(node, env); if (!child_node) { assertion = neethi_assertion_create(env); neethi_assertion_set_value(assertion, env, username_token, ASSERTION_TYPE_USERNAME_TOKEN); return assertion; } if (axiom_node_get_node_type(child_node, env) == AXIOM_ELEMENT) { child_element = (axiom_element_t *) axiom_node_get_data_element(child_node, env); if (child_element) { policy = neethi_engine_get_policy(env, child_node, child_element); if (!policy) { return NULL; } normalized_policy = neethi_engine_get_normalize(env, AXIS2_FALSE, policy); neethi_policy_free(policy, env); policy = NULL; alternatives = neethi_policy_get_alternatives(normalized_policy, env); component = (neethi_operator_t *) axutil_array_list_get(alternatives, env, 0); all = (neethi_all_t *) neethi_operator_get_value(component, env); username_token_process_alternatives(env, all, username_token); assertion = neethi_assertion_create_with_args( env,(AXIS2_FREE_VOID_ARG)rp_username_token_free, username_token, ASSERTION_TYPE_USERNAME_TOKEN); neethi_policy_free(normalized_policy, env); normalized_policy = NULL; return assertion; } else return NULL; } else return NULL; }
axis2_status_t wsf_wsdl_util_create_merged_neethi_policy( const axutil_env_t* env, axiom_node_t* input_policy_node_axiom, axiom_node_t* binding_policy_node_axiom, neethi_policy_t** merged_input_neethi_policy) { axis2_status_t status = AXIS2_SUCCESS; neethi_policy_t *input_neethi_policy = NULL; axiom_element_t *input_policy_root_ele = NULL; neethi_policy_t *binding_neethi_policy = NULL; axiom_element_t *binding_policy_root_ele = NULL; neethi_policy_t *normalized_input_neethi_policy = NULL; neethi_policy_t *normalized_binding_neethi_policy = NULL; if (binding_policy_node_axiom) { if (axiom_node_get_node_type (binding_policy_node_axiom, env) == AXIOM_ELEMENT) { binding_policy_root_ele = (axiom_element_t*)axiom_node_get_data_element(binding_policy_node_axiom, env); if (binding_policy_root_ele) { binding_neethi_policy = neethi_engine_get_policy (env, binding_policy_node_axiom, binding_policy_root_ele); normalized_binding_neethi_policy = neethi_engine_get_normalize(env, AXIS2_FALSE, binding_neethi_policy); neethi_policy_free(binding_neethi_policy, env); binding_neethi_policy = NULL; } } } if (input_policy_node_axiom) { if (axiom_node_get_node_type (input_policy_node_axiom, env) == AXIOM_ELEMENT) { input_policy_root_ele = (axiom_element_t *)axiom_node_get_data_element (input_policy_node_axiom, env); if (input_policy_root_ele) { input_neethi_policy = neethi_engine_get_policy (env, input_policy_node_axiom, input_policy_root_ele); normalized_input_neethi_policy = neethi_engine_get_normalize(env, AXIS2_FALSE, input_neethi_policy); neethi_policy_free(input_neethi_policy, env); input_neethi_policy = NULL; } } } if (normalized_input_neethi_policy && normalized_binding_neethi_policy) { *merged_input_neethi_policy = neethi_engine_merge(env, normalized_input_neethi_policy, normalized_binding_neethi_policy); neethi_policy_free(normalized_binding_neethi_policy, env); neethi_policy_free(normalized_input_neethi_policy, env); AXIS2_LOG_DEBUG_MSG(env->log, "Outgoing policies merged"); } else if (!normalized_input_neethi_policy && normalized_binding_neethi_policy) { *merged_input_neethi_policy = normalized_binding_neethi_policy; neethi_policy_free(normalized_binding_neethi_policy, env); AXIS2_LOG_DEBUG_MSG(env->log, "Binding policy is set"); } else if (normalized_input_neethi_policy && !normalized_binding_neethi_policy) { *merged_input_neethi_policy = normalized_input_neethi_policy; neethi_policy_free(normalized_input_neethi_policy, env); AXIS2_LOG_DEBUG_MSG(env->log, "Input policy is set"); } else { AXIS2_LOG_DEBUG_MSG(env->log, "Valid policies not found"); status = AXIS2_FAILURE; } return status; }