Esempio n. 1
0
        /*
         * public override void OnRecoveryLoad(XmlElement root)
         * {
         *      base.OnRecoveryLoad(root);
         *
         * if (root.HasAttribute("ids"))
         * {
         * string list = root.GetAttribute("ids");
         * string[] ids = list.Split(';');
         * foreach(string id in ids)
         * {
         *  ulong nid;
         *  if(ulong.TryParse(id, out nid))
         *      Wfp.RemoveItemId(nid);
         * }
         * }
         * }
         *
         * public override void OnRecoverySave(XmlElement root)
         * {
         *      base.OnRecoverySave(root);
         *
         * lock (m_rules)
         * {
         * string list = "";
         * foreach (WfpItem item in m_rules.Values)
         * {
         *  foreach (ulong id in item.FirewallIds)
         *      list += id.ToString() + ";";
         * }
         * root.SetAttributeNode("ids", list);
         * }
         * }
         */

        public void AddRule(string code, XmlElement xmlRule)
        {
            lock (m_rules)
            {
                if (m_rules.ContainsKey(code))
                {
                    throw new Exception("Unexpected: NetLock WFP rule '" + code + "' already exists");
                }
                WfpItem item = Wfp.AddItem(code, xmlRule);
                m_rules[code] = item;
            }
        }
Esempio n. 2
0
 public void RemoveRule(string code)
 {
     lock (m_rules)
     {
         if (m_rules.ContainsKey(code) == false)
         {
             return;
         }
         //throw new Exception("Unexpected: NetLock WFP rule '" + code + "' doesn't exists");
         WfpItem item = m_rules[code];
         m_rules.Remove(code);
         Wfp.RemoveItem(item);
     }
 }
Esempio n. 3
0
File: Wfp.cs Progetto: nir94/Eddie
        public static bool RemoveItem(WfpItem item)
        {
            lock (Items)
            {
                if (Items.ContainsValue(item) == false)
                {
                    throw new Exception("Windows WFP, unexpected: Rule '" + item.Code + "' not exists");
                }

                foreach (UInt64 id in item.FirewallIds)
                {
                    bool result = RemoveItemId(id);
                    if (result == false)
                    {
                        string wfpLastError = Engine.Instance.Elevated.DoCommandSync("wfp", "action", "last-error");
                        throw new Exception(LanguageManager.GetText("WfpRuleRemoveFail", wfpLastError));
                    }
                }

                Items.Remove(item.Code);
            }

            return(true);
        }
Esempio n. 4
0
        public static WfpItem AddItem(string code, XmlElement xml)
        {
            lock (Items)
            {
                if (Items.ContainsKey(code))
                {
                    throw new Exception("Windows WFP, unexpected: Rule '" + code + "' already exists");
                }

                WfpItem item = new WfpItem();
                item.Code = code;

                List <string> layers = new List <string>();

                if (xml.GetAttribute("layer") == "all")
                {
                    layers.Add("ale_auth_recv_accept_v4");
                    layers.Add("ale_auth_recv_accept_v6");
                    layers.Add("ale_auth_connect_v4");
                    layers.Add("ale_auth_connect_v6");
                    layers.Add("ale_flow_established_v4");
                    layers.Add("ale_flow_established_v6");
                }
                else if (xml.GetAttribute("layer") == "all-in")
                {
                    layers.Add("ale_auth_recv_accept_v4");
                    layers.Add("ale_auth_recv_accept_v6");
                }
                else if (xml.GetAttribute("layer") == "all-out")
                {
                    layers.Add("ale_auth_connect_v4");
                    layers.Add("ale_auth_connect_v6");
                }
                else if (xml.GetAttribute("layer") == "ipv4")
                {
                    layers.Add("ale_auth_recv_accept_v4");
                    layers.Add("ale_auth_connect_v4");
                    layers.Add("ale_flow_established_v4");
                }
                else if (xml.GetAttribute("layer") == "ipv6")
                {
                    layers.Add("ale_auth_recv_accept_v6");
                    layers.Add("ale_auth_connect_v6");
                    layers.Add("ale_flow_established_v6");
                }
                else if (xml.GetAttribute("layer") == "ipv4-in")
                {
                    layers.Add("ale_auth_recv_accept_v4");
                }
                else if (xml.GetAttribute("layer") == "ipv6-in")
                {
                    layers.Add("ale_auth_recv_accept_v6");
                }
                else if (xml.GetAttribute("layer") == "ipv4-out")
                {
                    layers.Add("ale_auth_connect_v4");
                }
                else if (xml.GetAttribute("layer") == "ipv6-out")
                {
                    layers.Add("ale_auth_connect_v6");
                }
                else
                {
                    layers.Add(xml.GetAttribute("layer"));
                }

                if (xml.HasAttribute("weight") == false)
                {
                    xml.SetAttribute("weight", "1000");
                }

                foreach (string layer in layers)
                {
                    XmlElement xmlClone = xml.CloneNode(true) as XmlElement;
                    xmlClone.SetAttribute("layer", layer);
                    string xmlStr = xmlClone.OuterXml;

                    UInt64 id1 = NativeMethods.WfpRuleAdd(xmlStr);

                    if (id1 == 0)
                    {
                        throw new Exception(MessagesFormatter.Format(Messages.WfpRuleAddFail, NativeMethods.WfpGetLastError(), xmlStr));
                    }
                    else
                    {
                        // Only used for debugging WFP issue with rules in some system
                        // Engine.Instance.Logs.Log(LogType.Verbose, Messages.Format(Messages.WfpRuleAddSuccess, xmlStr));
                        item.FirewallIds.Add(id1);
                    }
                }

                Items[item.Code] = item;

                return(item);
            }
        }