mirror of
https://github.com/henrypp/simplewall.git
synced 2026-10-21 18:43:09 -05:00
fixed wfp transaction
This commit is contained in:
1 file changed
+32
-10
+32
-10
@@ -1050,10 +1050,10 @@ bool _wfp_create4filters (OBJECTS_VEC & ptr_rules, UINT line, bool is_intransact
|
||||
if (!is_intransact && _wfp_isfiltersapplying ())
|
||||
is_intransact = true;
|
||||
|
||||
GUIDS_VEC ids;
|
||||
|
||||
if (!is_intransact)
|
||||
{
|
||||
GUIDS_VEC guids;
|
||||
|
||||
for (size_t i = 0; i < ptr_rules.size (); i++)
|
||||
{
|
||||
PR_OBJECT ptr_rule_object = _r_obj_reference (ptr_rules.at (i));
|
||||
@@ -1064,17 +1064,24 @@ bool _wfp_create4filters (OBJECTS_VEC & ptr_rules, UINT line, bool is_intransact
|
||||
const PITEM_RULE ptr_rule = (PITEM_RULE)ptr_rule_object->pdata;
|
||||
|
||||
if (ptr_rule)
|
||||
guids.insert (guids.end (), ptr_rule->guids.begin (), ptr_rule->guids.end ());
|
||||
{
|
||||
ids.insert (ids.end (), ptr_rule->guids.begin (), ptr_rule->guids.end ());
|
||||
ptr_rule->guids.clear ();
|
||||
}
|
||||
|
||||
_r_obj_dereference (ptr_rule_object, &_app_dereferencerule);
|
||||
}
|
||||
|
||||
_wfp_destroy2filters (guids, line);
|
||||
for (size_t i = 0; i < ids.size (); i++)
|
||||
_wfp_setfiltersecurity (config.hengine, &ids.at (i), config.pusersid, config.pacl_default, line);
|
||||
|
||||
_r_fastlock_acquireshared (&lock_transaction);
|
||||
is_intransact = !_wfp_transact_start (line);
|
||||
}
|
||||
|
||||
for (size_t i = 0; i < ids.size (); i++)
|
||||
_wfp_deletefilter (config.hengine, &ids.at (i));
|
||||
|
||||
for (size_t i = 0; i < ptr_rules.size (); i++)
|
||||
{
|
||||
PR_OBJECT ptr_rule_object = _r_obj_reference (ptr_rules.at (i));
|
||||
@@ -1082,7 +1089,7 @@ bool _wfp_create4filters (OBJECTS_VEC & ptr_rules, UINT line, bool is_intransact
|
||||
if (!ptr_rule_object)
|
||||
continue;
|
||||
|
||||
const PITEM_RULE ptr_rule = (PITEM_RULE)ptr_rule_object->pdata;
|
||||
PITEM_RULE ptr_rule = (PITEM_RULE)ptr_rule_object->pdata;
|
||||
|
||||
if (ptr_rule)
|
||||
{
|
||||
@@ -1196,10 +1203,10 @@ bool _wfp_create3filters (OBJECTS_VEC & ptr_apps, UINT line, bool is_intransact)
|
||||
if (!is_intransact && _wfp_isfiltersapplying ())
|
||||
is_intransact = true;
|
||||
|
||||
GUIDS_VEC ids;
|
||||
|
||||
if (!is_intransact)
|
||||
{
|
||||
GUIDS_VEC ids;
|
||||
|
||||
for (size_t i = 0; i < ptr_apps.size (); i++)
|
||||
{
|
||||
PR_OBJECT ptr_app_object = _r_obj_reference (ptr_apps.at (i));
|
||||
@@ -1210,17 +1217,24 @@ bool _wfp_create3filters (OBJECTS_VEC & ptr_apps, UINT line, bool is_intransact)
|
||||
PITEM_APP ptr_app = (PITEM_APP)ptr_app_object->pdata;
|
||||
|
||||
if (ptr_app)
|
||||
{
|
||||
ids.insert (ids.end (), ptr_app->guids.begin (), ptr_app->guids.end ());
|
||||
ptr_app->guids.clear ();
|
||||
}
|
||||
|
||||
_r_obj_dereference (ptr_app_object, &_app_dereferenceapp);
|
||||
}
|
||||
|
||||
_wfp_destroy2filters (ids, line);
|
||||
for (size_t i = 0; i < ids.size (); i++)
|
||||
_wfp_setfiltersecurity (config.hengine, &ids.at (i), config.pusersid, config.pacl_default, line);
|
||||
|
||||
_r_fastlock_acquireshared (&lock_transaction);
|
||||
is_intransact = !_wfp_transact_start (line);
|
||||
}
|
||||
|
||||
for (size_t i = 0; i < ids.size (); i++)
|
||||
_wfp_deletefilter (config.hengine, &ids.at (i));
|
||||
|
||||
for (size_t i = 0; i < ptr_apps.size (); i++)
|
||||
{
|
||||
PR_OBJECT ptr_app_object = _r_obj_reference (ptr_apps.at (i));
|
||||
@@ -1297,13 +1311,21 @@ bool _wfp_create2filters (UINT line, bool is_intransact)
|
||||
|
||||
if (!is_intransact)
|
||||
{
|
||||
_wfp_destroy2filters (filter_ids, line);
|
||||
filter_ids.clear ();
|
||||
for (size_t i = 0; i < filter_ids.size (); i++)
|
||||
_wfp_setfiltersecurity (config.hengine, &filter_ids.at (i), config.pusersid, config.pacl_default, line);
|
||||
|
||||
_r_fastlock_acquireshared (&lock_transaction);
|
||||
is_intransact = !_wfp_transact_start (line);
|
||||
}
|
||||
|
||||
if (!filter_ids.empty ())
|
||||
{
|
||||
for (size_t i = 0; i < filter_ids.size (); i++)
|
||||
_wfp_deletefilter (config.hengine, &filter_ids.at (i));
|
||||
|
||||
filter_ids.clear ();
|
||||
}
|
||||
|
||||
FWPM_FILTER_CONDITION fwfc[3] = {0};
|
||||
|
||||
// add loopback connections permission
|
||||
|
||||
Reference in new issue
Block a user