]> git.ipfire.org Git - thirdparty/kea.git/commitdiff
[#1088] check callout status before processing
authorRazvan Becheriu <razvan@isc.org>
Mon, 17 Feb 2020 08:12:19 +0000 (10:12 +0200)
committerRazvan Becheriu <razvan@isc.org>
Thu, 27 Feb 2020 07:03:27 +0000 (09:03 +0200)
src/bin/d2/tests/d2_cfg_mgr_unittests.cc
src/hooks/dhcp/bootp/bootp_callouts.cc
src/hooks/dhcp/flex_option/flex_option_callouts.cc
src/hooks/dhcp/high_availability/ha_callouts.cc
src/hooks/dhcp/user_chk/pkt_receive_co.cc
src/hooks/dhcp/user_chk/pkt_send_co.cc
src/hooks/dhcp/user_chk/subnet_select_co.cc
src/lib/hooks/hooks_user.dox
src/lib/hooks/tests/callout_handle_unittest.cc

index 1ef388ea4a03912b95047eebe8ebaaf238446274..74fa4eceba099cc52b43796276caf6d5714a22b8 100644 (file)
@@ -851,7 +851,6 @@ TEST_F(D2CfgMgrTest, matchReverse) {
 /// should detect as well as post-JSON parsing logic errors generated by
 /// the Element parsers (i.e...SimpleParser/DhcpParser derivations)
 ///
-///
 /// It iterates over all of the test configurations described in given file.
 /// The file content is JSON specialized to this test. The format of the file
 /// is:
index f505329687a16910b85d47c17f2690a16097ff30..21a5cc9ce4f8af8bae5d19f81d2b28848664e17a 100644 (file)
@@ -63,6 +63,12 @@ extern "C" {
 ///
 /// @return 0 upon success, non-zero otherwise.
 int buffer4_receive(CalloutHandle& handle) {
+    CalloutHandle::CalloutNextStep status = handle.getStatus();
+    if (status == CalloutHandle::NEXT_STEP_DROP ||
+        status == CalloutHandle::NEXT_STEP_SKIP) {
+        return (0);
+    }
+
     // Get the received unpacked message.
     Pkt4Ptr query;
     handle.getArgument("query4", query);
@@ -121,6 +127,12 @@ int buffer4_receive(CalloutHandle& handle) {
 ///
 /// @return 0 upon success, non-zero otherwise.
 int pkt4_send(CalloutHandle& handle) {
+    CalloutHandle::CalloutNextStep status = handle.getStatus();
+    if (status == CalloutHandle::NEXT_STEP_DROP ||
+        status == CalloutHandle::NEXT_STEP_SKIP) {
+        return (0);
+    }
+
     // Get the query message.
     Pkt4Ptr query;
     handle.getArgument("query4", query);
index b6688e036281c9ab58d63365ac1ba4150c223704..e9cf1f5c41ed61790dac089e5ea2e6e8623e79a7 100644 (file)
@@ -41,6 +41,12 @@ extern "C" {
 ///
 /// @return 0 upon success, non-zero otherwise
 int pkt4_send(CalloutHandle& handle) {
+    CalloutHandle::CalloutNextStep status = handle.getStatus();
+    if (status == CalloutHandle::NEXT_STEP_DROP ||
+        status == CalloutHandle::NEXT_STEP_SKIP) {
+        return (0);
+    }
+
     // Sanity.
     if (!impl) {
         return (0);
@@ -73,6 +79,12 @@ int pkt4_send(CalloutHandle& handle) {
 ///
 /// @return 0 upon success, non-zero otherwise
 int pkt6_send(CalloutHandle& handle) {
+    CalloutHandle::CalloutNextStep status = handle.getStatus();
+    if (status == CalloutHandle::NEXT_STEP_DROP ||
+        status == CalloutHandle::NEXT_STEP_SKIP) {
+        return (0);
+    }
+
     // Sanity.
     if (!impl) {
         return (0);
index b8e8da4a6edd684f04191a4c43d608ff9b8bd4cb..f33ace0f7ef200714ad9d9f5673951cb541eabd0 100644 (file)
@@ -60,6 +60,12 @@ int dhcp4_srv_configured(CalloutHandle& handle) {
 ///
 /// @param handle callout handle.
 int buffer4_receive(CalloutHandle& handle) {
+    CalloutHandle::CalloutNextStep status = handle.getStatus();
+    if (status == CalloutHandle::NEXT_STEP_DROP ||
+        status == CalloutHandle::NEXT_STEP_SKIP) {
+        return (0);
+    }
+
     try {
         impl->buffer4Receive(handle);
 
@@ -76,6 +82,12 @@ int buffer4_receive(CalloutHandle& handle) {
 ///
 /// @param handle callout handle.
 int leases4_committed(CalloutHandle& handle) {
+    CalloutHandle::CalloutNextStep status = handle.getStatus();
+    if (status == CalloutHandle::NEXT_STEP_DROP ||
+        status == CalloutHandle::NEXT_STEP_SKIP) {
+        return (0);
+    }
+
     try {
         impl->leases4Committed(handle);
 
@@ -111,6 +123,12 @@ int dhcp6_srv_configured(CalloutHandle& handle) {
 ///
 /// @param handle callout handle.
 int buffer6_receive(CalloutHandle& handle) {
+    CalloutHandle::CalloutNextStep status = handle.getStatus();
+    if (status == CalloutHandle::NEXT_STEP_DROP ||
+        status == CalloutHandle::NEXT_STEP_SKIP) {
+        return (0);
+    }
+
     try {
         impl->buffer6Receive(handle);
 
@@ -127,6 +145,12 @@ int buffer6_receive(CalloutHandle& handle) {
 ///
 /// @param handle callout handle.
 int leases6_committed(CalloutHandle& handle) {
+    CalloutHandle::CalloutNextStep status = handle.getStatus();
+    if (status == CalloutHandle::NEXT_STEP_DROP ||
+        status == CalloutHandle::NEXT_STEP_SKIP) {
+        return (0);
+    }
+
     try {
         impl->leases6Committed(handle);
 
index 648ed2b08669761b654f70f99b6bd30adc77620b..d0e42767f9c7b97d887a396f74617a7f41086019 100644 (file)
@@ -38,6 +38,12 @@ extern "C" {
 ///
 /// @return 0 upon success, non-zero otherwise.
 int pkt4_receive(CalloutHandle& handle) {
+    CalloutHandle::CalloutNextStep status = handle.getStatus();
+    if (status == CalloutHandle::NEXT_STEP_DROP ||
+        status == CalloutHandle::NEXT_STEP_SKIP) {
+        return (0);
+    }
+
     if (!user_registry) {
         std::cout << "DHCP UserCheckHook : pkt4_receive UserRegistry is null"
                   << std::endl;
@@ -90,6 +96,12 @@ int pkt4_receive(CalloutHandle& handle) {
 ///
 /// @return 0 upon success, non-zero otherwise.
 int pkt6_receive(CalloutHandle& handle) {
+    CalloutHandle::CalloutNextStep status = handle.getStatus();
+    if (status == CalloutHandle::NEXT_STEP_DROP ||
+        status == CalloutHandle::NEXT_STEP_SKIP) {
+        return (0);
+    }
+
     if (!user_registry) {
         std::cout << "DHCP UserCheckHook : pkt6_receive UserRegistry is null"
                   << std::endl;
index 22164c049cabe952312ea9cb63ac15b7db89ace9..65b57b5e43eec4e5e70ac7f8c4d646ce39f19b1c 100644 (file)
@@ -67,6 +67,12 @@ extern "C" {
 ///
 /// @return 0 upon success, non-zero otherwise.
 int pkt4_send(CalloutHandle& handle) {
+    CalloutHandle::CalloutNextStep status = handle.getStatus();
+    if (status == CalloutHandle::NEXT_STEP_DROP ||
+        status == CalloutHandle::NEXT_STEP_SKIP) {
+        return (0);
+    }
+
     try {
         Pkt4Ptr response;
         handle.getArgument("response4", response);
@@ -138,6 +144,12 @@ int pkt4_send(CalloutHandle& handle) {
 ///
 /// @return 0 upon success, non-zero otherwise.
 int pkt6_send(CalloutHandle& handle) {
+    CalloutHandle::CalloutNextStep status = handle.getStatus();
+    if (status == CalloutHandle::NEXT_STEP_DROP ||
+        status == CalloutHandle::NEXT_STEP_SKIP) {
+        return (0);
+    }
+
     try {
         Pkt6Ptr response;
         handle.getArgument("response6", response);
index 65e55898165d557fa0d48274f5f39bd30342a203..22d1b9f91f12b7eca2568ef14a229f2321a969a5 100644 (file)
@@ -42,6 +42,12 @@ extern "C" {
 ///
 /// @return 0 upon success, non-zero otherwise.
 int subnet4_select(CalloutHandle& handle) {
+    CalloutHandle::CalloutNextStep status = handle.getStatus();
+    if (status == CalloutHandle::NEXT_STEP_DROP ||
+        status == CalloutHandle::NEXT_STEP_SKIP) {
+        return (0);
+    }
+
     if (!user_registry) {
         LOG_ERROR(user_chk_logger, USER_CHK_SUBNET4_SELECT_REGISTRY_NULL);
         return (1);
@@ -96,6 +102,12 @@ int subnet4_select(CalloutHandle& handle) {
 ///
 /// @return 0 upon success, non-zero otherwise.
 int subnet6_select(CalloutHandle& handle) {
+    CalloutHandle::CalloutNextStep status = handle.getStatus();
+    if (status == CalloutHandle::NEXT_STEP_DROP ||
+        status == CalloutHandle::NEXT_STEP_SKIP) {
+        return (0);
+    }
+
     if (!user_registry) {
         LOG_ERROR(user_chk_logger, USER_CHK_SUBNET6_SELECT_REGISTRY_NULL);
         return (1);
index 49572859784f473b3140c2d0f424e8244fa81bdc..fd026ad2489012f5ab8a661d64d03f148d94ff70 100644 (file)
@@ -479,7 +479,7 @@ usage is intuitive:
 
 @code
     // Get the current setting of the next step status.
-    CalloutHandle::NextStepStatus status = handle.getStatus();
+    CalloutHandle::CalloutNextStep status = handle.getStatus();
 
     if (status == CalloutHandle::NEXT_STEP_DROP)
        // Do something...
@@ -536,7 +536,7 @@ handle.setStatus(CalloutHandle::NEXT_STEP_CONTINUE);
 handle.setStatus(CalloutHandle::NEXT_STEP_SKIP);
 
 // Check the status state.
-CalloutHandle::NextStepStatus status = handle.getStatus();
+CalloutHandle::CalloutNextStep status = handle.getStatus();
 if (status == CalloutHandle::NEXT_STEP_SKIP) {
     ...
 }
index 319b9392b58184b4c0ff115c5c6c35fe33d80636..6fa1fae6b1255f4f3ceb750e588fbdadf2c9f19c 100644 (file)
@@ -305,7 +305,7 @@ TEST_F(CalloutHandleTest, DeleteAllArguments) {
 TEST_F(CalloutHandleTest, StatusField) {
     CalloutHandle handle(getCalloutManager());
 
-    // Should be false on construction.
+    // Should be continue on construction.
     EXPECT_EQ(CalloutHandle::NEXT_STEP_CONTINUE, handle.getStatus());
 
     handle.setStatus(CalloutHandle::NEXT_STEP_SKIP);