Exemple #1
0
        public bool RemovePolicy(LoadedPolicyObject policy)
        {
            PortMappingPolicy t = JsonConvert.DeserializeObject <PortMappingPolicy>(policy.PolicyObject.Data);

            t.ID = policy.PolicyObject.ID;
            ToRemove.Add(t);
            return(true);
        }
Exemple #2
0
        public bool UpdatePolicy(LoadedPolicyObject oldpolicy, LoadedPolicyObject newpolicy)
        {
            PortMappingPolicy t1 = JsonConvert.DeserializeObject <PortMappingPolicy>(oldpolicy.PolicyObject.Data);
            PortMappingPolicy t2 = JsonConvert.DeserializeObject <PortMappingPolicy>(newpolicy.PolicyObject.Data);

            t1.ID = oldpolicy.PolicyObject.ID;
            t2.ID = newpolicy.PolicyObject.ID;
            ToAdd.Add(t2);
            ToRemove.Add(t1);
            return(true);
        }
Exemple #3
0
        public bool SetData(PolicyObject obj)
        {
            Pol = obj;

            Mapping = JsonConvert.DeserializeObject <PortMappingPolicy>(obj.Data);
            if (Mapping == null)
            {
                Mapping = new PortMappingPolicy();
            }

            UpdateStatus();
            return(true);
        }
Exemple #4
0
        static PolicyObject LoadPolicyDB(SqlDataReader dr, bool withdata, bool CensorData)
        {
            PolicyObject po = new PolicyObject();

            if (withdata == false)
            {
                po.Data = null;
            }
            else
            {
                po.Data = Convert.ToString(dr["DataBlob"]);
            }
            po.DT        = SQLLib.GetDTUTC(dr["DT"]);
            po.Grouping  = dr["Grouping"] is DBNull ? (Int64?)null : Convert.ToInt64(dr["Grouping"]);
            po.ID        = Convert.ToInt64(dr["ID"]);
            po.MachineID = dr["MachineID"] is DBNull ? null : Convert.ToString(dr["MachineID"]);
            po.Name      = Convert.ToString(dr["Name"]);
            po.Version   = Convert.ToInt64(dr["Version"]);
            po.Enabled   = Convert.ToBoolean(dr["Enabled"]);
            po.Type      = Convert.ToInt32(dr["Type"]);

            if (CensorData == true && withdata == true)
            {
                if (po.Type == PolicyIDs.PortMapping)
                {
                    try
                    {
                        PortMappingPolicy p = JsonConvert.DeserializeObject <PortMappingPolicy>(po.Data);
                        p.ServerPort   = 0;
                        p.ServerServer = "";
                        po.Data        = JsonConvert.SerializeObject(p);
                    }
                    catch
                    {
                        po.Data = null;
                    }
                }
            }

            return(po);
        }
        public RESTStatus ConnectWSServerMappingPort(SQLLib sql, NetInt64 ID, NetworkConnectionInfo ni)
        {
            if (ni.HasAcl(ACLFlags.ComputerLogin) == false)
            {
                ni.Error   = "Access denied";
                ni.ErrorID = ErrorFlags.AccessDenied;
                return(RESTStatus.Denied);
            }

            List <PolicyObject> pols        = Policies.GetPolicyForComputerInternal(sql, ni.Username);
            PolicyObject        FoundPolicy = null;

            foreach (PolicyObject p in pols)
            {
                if (p.ID == ID.Data && p.Type == PolicyIDs.PortMapping)
                {
                    FoundPolicy = p;
                    break;
                }
            }

            if (FoundPolicy == null)
            {
                ni.Error   = "Not found";
                ni.ErrorID = ErrorFlags.NotAccepted;
                return(RESTStatus.Denied);
            }

            PortMappingPolicy pmp = JsonConvert.DeserializeObject <PortMappingPolicy>(Policies.GetPolicy(sql, FoundPolicy.ID).Data);

            IPAddress   ip;
            IPHostEntry ipaddr;

            if (IPAddress.TryParse(pmp.ServerServer, out ip) == false)
            {
                ipaddr = Dns.GetHostEntry(pmp.ServerServer);
            }
            else
            {
                ipaddr             = new IPHostEntry();
                ipaddr.AddressList = new IPAddress[] { ip };
            }

            if (ipaddr == null)
            {
                ni.Error   = "Cannot resolve";
                ni.ErrorID = ErrorFlags.NoData;
                return(RESTStatus.Fail);
            }
            if (ipaddr.AddressList.Length == 0)
            {
                ni.Error   = "Resolve - no data";
                ni.ErrorID = ErrorFlags.NoData;
                return(RESTStatus.Fail);
            }

            Socket socket;

            try
            {
                socket = new Socket(ipaddr.AddressList[0].AddressFamily, SocketType.Stream, ProtocolType.Tcp);
                socket.Connect(ipaddr.AddressList[0], pmp.ServerPort);
            }
            catch (Exception ee)
            {
                Debug.WriteLine("Cannot connect " + ee.ToString());
                ni.Error   = "Resolve - no data";
                ni.ErrorID = ErrorFlags.NoData;
                return(RESTStatus.Fail);
            }

            string SessionID = "";

            RemoteNetworkConnectionWSCrosser.CreateCustomAgentConnection <WS_ServerPortMappingConnection>(ni.Username, ref SessionID, i => i.InitThis(ref SessionID, socket));

            Res = new PushConnectNetworkResult();
            Res.ConnectedGUID = SessionID;
            Res.Result        = 0;
            return(RESTStatus.Success);
        }
        public static void FinaliseApplyPolicy(List <PortMappingPolicy> Add, List <PortMappingPolicy> Remove)
        {
            Add    = DeDup(Add);
            Remove = DeDup(Remove);

            foreach (PortMappingPolicy rm in Remove)
            {
                bool DontRemove = false;
                //check if this policy is in "add" (to prevent connection breaking)
                foreach (PortMappingPolicy ad in Add)
                {
                    if (rm.BindTo0000 == ad.BindTo0000 && rm.ClientPort == ad.ClientPort &&
                        rm.EditHOSTS == ad.EditHOSTS && rm.HOSTSEntry == ad.HOSTSEntry &&
                        rm.ID == ad.ID && rm.NoBindIfSDCServerIsDetected == ad.NoBindIfSDCServerIsDetected)
                    {
                        DontRemove = true;
                        break;
                    }
                }
                if (DontRemove == true)
                {
                    continue;
                }

                PortMappings_ConnectionNode RMC = null;

                foreach (PortMappings_ConnectionNode C in Connections)
                {
                    if (C.RunningPort == rm.ClientPort && C.PolicyID == rm.ID)
                    {
                        RMC = C;
                        break;
                    }
                }

                if (RMC != null)
                {
                    Connections.Remove(RMC);
                    RMC.StopConnection();
                }
            }

            for (int i = 0; i < Add.Count; i++)
            {
                bool BadPort         = false;
                PortMappingPolicy ad = Add[i];
                for (int j = 0; j < Add.Count; j++)
                {
                    if (i == j)
                    {
                        continue;
                    }
                    if (ad.ClientPort == Add[j].ClientPort)
                    {
                        FoxEventLog.WriteEventLog("Portmapping: Port " + ad.ClientPort + " conflicts with Policy ID " + ad.ID + " and " + Add[j].ID, EventLogEntryType.Error);
                        BadPort = true;
                        break;
                    }
                }
                if (BadPort == true)
                {
                    continue;
                }

                foreach (PortMappings_ConnectionNode cc in Connections)
                {
                    if (ad.ID == cc.PolicyID)
                    {
                        if (cc.PolicyData.BindTo0000 == ad.BindTo0000 && cc.PolicyData.ClientPort == ad.ClientPort &&
                            cc.PolicyData.EditHOSTS == ad.EditHOSTS && cc.PolicyData.HOSTSEntry == ad.HOSTSEntry &&
                            cc.PolicyData.NoBindIfSDCServerIsDetected == ad.NoBindIfSDCServerIsDetected)
                        {
                            //no changes - continue
                            BadPort = true;
                            break;
                        }
                        else
                        {
                            //remove connection
                            Connections.Remove(cc);
                            cc.StopConnection();
                            break;
                        }
                    }
                }
                if (BadPort == true)
                {
                    continue;
                }

                if (NetworkUtilities.PortAvailable(ad.ClientPort) == false)
                {
                    FoxEventLog.WriteEventLog("Portmapping: Port " + ad.ClientPort + " from Policy ID " + ad.ID + " is unavailable.", EventLogEntryType.Error);
                    continue;
                }

                if (ad.NoBindIfSDCServerIsDetected == true)
                {
                    bool FoundSDCS = false;
                    using (RegistryKey reg = Registry.LocalMachine.OpenSubKey("SYSTEM\\CurrentControlSet\\Services\\FoxSDCS"))
                    {
                        if (reg != null)
                        {
                            FoundSDCS = true;
                        }
                    }
                    if (FoundSDCS == true)
                    {
                        continue;
                    }
                }

                if (ad.EditHOSTS == true)
                {
                    if (string.IsNullOrWhiteSpace(ad.HOSTSEntry) == false)
                    {
                        foreach (string HOSTS in ad.HOSTSEntry.Split('|'))
                        {
                            if (string.IsNullOrWhiteSpace(HOSTS) == true)
                            {
                                continue;
                            }
                            HostsEdit.AppendIntoHOSTSFile(HOSTS.Trim(), "127.0.0.1");
                        }
                    }
                }

                PortMappings_ConnectionNode C = new PortMappings_ConnectionNode(ad);
                C.StartConnection();
                Connections.Add(C);
            }
        }
 public PortMappings_ConnectionNode(PortMappingPolicy Mapping)
 {
     this.Mapping = Mapping;
 }