/** * telnet_hash_get_type: * @tuple: * @filter_type: * * * * Returns: * */ gboolean telnet_hash_get_type(ZPolicyObj *tuple, guint *filter_type) { ZPolicyObj *tmp; gboolean res; if (!z_policy_seq_check(tuple)) { res = z_policy_var_parse(tuple, "i", filter_type); } else { tmp = z_policy_seq_getitem(tuple, 0); res = z_policy_var_parse(tmp, "i", filter_type); /* FALSE -> policy syntax error */ z_policy_var_unref(tmp); } return res; }
static gboolean z_proxy_stack_tuple(ZProxy *self, ZPolicyObj *tuple, ZStackedProxy **stacked, ZPolicyDict *stack_info_dict) { guint stack_method; ZPolicyObj *arg = NULL; gboolean success = FALSE; if (!z_policy_tuple_get_verdict(tuple, &stack_method) || z_policy_seq_length(tuple) < 2) goto invalid_tuple; arg = z_policy_seq_getitem(tuple, 1); switch (stack_method) { case Z_STACK_PROXY: if (z_policy_seq_length(tuple) != 2) goto invalid_tuple; success = z_proxy_stack_proxy(self, arg, stacked, stack_info_dict); break; case Z_STACK_PROGRAM: if (!z_policy_str_check(arg)) goto invalid_tuple; success = z_proxy_stack_program(self, z_policy_str_as_string(arg), stacked); break; default: break; } exit: if (arg) z_policy_var_unref(arg); return success; invalid_tuple: z_proxy_log(self, CORE_POLICY, 1, "Invalid stack tuple;"); success = FALSE; goto exit; }
gboolean smtp_hash_get_type(ZPolicyObj *tuple, guint *filter_type) { ZPolicyObj *tmp; if (!z_policy_seq_check(tuple)) { if (z_policy_var_parse(tuple, "i", filter_type)) return TRUE; /* not a sequence */ return FALSE; } tmp = z_policy_seq_getitem(tuple, 0); if (!z_policy_var_parse(tmp, "i", filter_type)) { /* policy syntax error */ z_policy_var_unref(tmp); return FALSE; } z_policy_var_unref(tmp); return TRUE; }
gboolean z_policy_tuple_get_verdict(ZPolicyObj *tuple, guint *verdict) { ZPolicyObj *tmp; z_enter(); if (!z_policy_seq_check(tuple)) { if (z_policy_var_parse(tuple, "i", verdict)) z_return(TRUE); /* not a sequence nor an int */ z_return(FALSE); } tmp = z_policy_seq_getitem(tuple, 0); if (!tmp || !z_policy_var_parse(tmp, "i", verdict)) { /* policy syntax error */ z_policy_var_unref(tmp); z_return(FALSE); } z_policy_var_unref(tmp); z_return(TRUE); }