TEST_F(PcreModuleTest, test_pcre_operator) { ib_field_t *outfield; ib_num_t result; ib_field_t *capture; const ib_operator_t *op; ib_operator_inst_t *opinst; ASSERT_EQ(IB_OK, ib_operator_lookup(ib_engine, IB_S2SL("pcre"), &op)); // Create the operator instance. ASSERT_EQ( IB_OK, ib_operator_inst_create( &opinst, ib_engine_mm_main_get(ib_engine), ib_context_main(ib_engine), op, IB_OP_CAPABILITY_NONE, "string\\s2" ) ); // Attempt to match. ASSERT_EQ( IB_OK, ib_operator_inst_execute( opinst, rule_exec1.tx, field1, NULL, &result ) ); // We should fail. ASSERT_FALSE(result); // Attempt to match again. ASSERT_EQ( IB_OK, ib_operator_inst_execute( opinst, rule_exec1.tx, field2, NULL, &result ) ); // This time we should succeed. ASSERT_TRUE(result); // Should be no capture set */ outfield = getTarget1(IB_TX_CAPTURE":0"); ASSERT_FALSE(outfield); // Create the operator instance. ASSERT_EQ( IB_OK, ib_operator_inst_create( &opinst, ib_engine_mm_main_get(ib_engine), ib_context_main(ib_engine), op, IB_OP_CAPABILITY_NONE, "(string 2)" ) ); // Attempt to match. ASSERT_EQ( IB_OK, ib_operator_inst_execute( opinst, rule_exec1.tx, field1, NULL, &result ) ); // We should fail. ASSERT_FALSE(result); // Attempt to match again. ASSERT_EQ( IB_OK, ib_operator_inst_execute( opinst, rule_exec1.tx, field2, NULL, &result ) ); // This time we should succeed. ASSERT_TRUE(result); // Should be no capture (CAPTURE flag not set for rule 1) outfield = getTarget1(IB_TX_CAPTURE":0"); ASSERT_FALSE(outfield); // Create the operator instance. ASSERT_EQ( IB_OK, ib_operator_inst_create( &opinst, ib_engine_mm_main_get(ib_engine), ib_context_main(ib_engine), op, IB_OP_CAPABILITY_NONE, "(string 2)" ) ); ASSERT_EQ(IB_OK, ib_capture_acquire( rule_exec2.tx, NULL, &capture)); // Attempt to match again. ASSERT_EQ( IB_OK, ib_operator_inst_execute( opinst, rule_exec1.tx, field2, capture, &result ) ); // This time we should succeed. ASSERT_TRUE(result); // Should be a capture (CAPTURE flag is set for rule 2) outfield = getTarget1(IB_TX_CAPTURE":0"); ASSERT_TRUE(outfield); }
// FIXME: This needs to go away and be replaced with dynamic fields static ib_status_t core_gen_placeholder_fields(ib_engine_t *ib, ib_tx_t *tx, ib_state_event_type_t event, void *cbdata) { assert(ib != NULL); assert(tx != NULL); assert(tx->data != NULL); assert(event == tx_started_event); ib_status_t rc; ib_field_t *tmp; /* Core Request Fields */ rc = core_field_placeholder_bytestr(tx->data, "request_line"); if (rc != IB_OK) { return rc; } rc = core_field_placeholder_bytestr(tx->data, "request_method"); if (rc != IB_OK) { return rc; } rc = core_field_placeholder_bytestr(tx->data, "request_protocol"); if (rc != IB_OK) { return rc; } rc = core_field_placeholder_bytestr(tx->data, "request_uri"); if (rc != IB_OK) { return rc; } rc = core_field_placeholder_bytestr(tx->data, "request_uri_raw"); if (rc != IB_OK) { return rc; } rc = core_field_placeholder_bytestr(tx->data, "request_uri_scheme"); if (rc != IB_OK) { return rc; } rc = core_field_placeholder_bytestr(tx->data, "request_uri_username"); if (rc != IB_OK) { return rc; } rc = core_field_placeholder_bytestr(tx->data, "request_uri_password"); if (rc != IB_OK) { return rc; } rc = core_field_placeholder_bytestr(tx->data, "request_uri_host"); if (rc != IB_OK) { return rc; } rc = core_field_placeholder_bytestr(tx->data, "request_host"); if (rc != IB_OK) { return rc; } rc = core_field_placeholder_bytestr(tx->data, "request_uri_port"); if (rc != IB_OK) { return rc; } rc = core_field_placeholder_bytestr(tx->data, "request_uri_path"); if (rc != IB_OK) { return rc; } rc = core_field_placeholder_bytestr(tx->data, "request_uri_path_raw"); if (rc != IB_OK) { return rc; } rc = core_field_placeholder_bytestr(tx->data, "request_uri_query"); if (rc != IB_OK) { return rc; } rc = core_field_placeholder_bytestr(tx->data, "request_uri_fragment"); if (rc != IB_OK) { return rc; } rc = core_field_placeholder_bytestr(tx->data, "request_content_type"); if (rc != IB_OK) { return rc; } rc = core_field_placeholder_bytestr(tx->data, "request_filename"); if (rc != IB_OK) { return rc; } rc = core_field_placeholder_bytestr(tx->data, "auth_type"); if (rc != IB_OK) { return rc; } rc = core_field_placeholder_bytestr(tx->data, "auth_username"); if (rc != IB_OK) { return rc; } rc = core_field_placeholder_bytestr(tx->data, "auth_password"); if (rc != IB_OK) { return rc; } /* Core Request Collections */ rc = ib_data_add_list(tx->data, "request_headers", NULL); if (rc != IB_OK) { return rc; } rc = ib_data_add_list(tx->data, "request_cookies", NULL); if (rc != IB_OK) { return rc; } rc = ib_data_add_list(tx->data, "request_uri_params", NULL); if (rc != IB_OK) { return rc; } rc = ib_data_add_list(tx->data, "request_body_params", NULL); if (rc != IB_OK) { return rc; } /* ARGS collection */ rc = ib_data_get(tx->data, "ARGS", &tmp); if (rc == IB_ENOENT) { rc = ib_data_add_list(tx->data, "ARGS", NULL); if (rc != IB_OK) { return rc; } } else if (rc != IB_OK) { return rc; } /* Flags collection */ rc = ib_data_get(tx->data, "FLAGS", &tmp); if (rc == IB_ENOENT) { rc = ib_data_add_list(tx->data, "FLAGS", NULL); if (rc != IB_OK) { return rc; } } else if (rc != IB_OK) { return rc; } /* Initialize CAPTURE */ { ib_field_t *capture; rc = ib_capture_acquire(tx, NULL, &capture); if (rc != IB_OK) { return rc; } assert(capture != NULL); rc = ib_capture_clear(capture); if (rc != IB_OK) { return rc; } } /* Core Response Fields */ rc = core_field_placeholder_bytestr(tx->data, "response_line"); if (rc != IB_OK) { return rc; } rc = core_field_placeholder_bytestr(tx->data, "response_protocol"); if (rc != IB_OK) { return rc; } rc = core_field_placeholder_bytestr(tx->data, "response_status"); if (rc != IB_OK) { return rc; } rc = core_field_placeholder_bytestr(tx->data, "response_message"); if (rc != IB_OK) { return rc; } rc = core_field_placeholder_bytestr(tx->data, "response_content_type"); if (rc != IB_OK) { return rc; } /* Core Response Collections */ rc = ib_data_add_list(tx->data, "response_headers", NULL); if (rc != IB_OK) { return rc; } rc = core_field_placeholder_bytestr(tx->data, "FIELD_NAME"); if (rc != IB_OK) { return rc; } rc = core_field_placeholder_bytestr(tx->data, "FIELD_NAME_FULL"); if (rc != IB_OK) { return rc; } rc = ib_data_add_list(tx->data, "response_cookies", NULL); return rc; }