public bool RemovePolicy(LoadedPolicyObject policy) { PortMappingPolicy t = JsonConvert.DeserializeObject <PortMappingPolicy>(policy.PolicyObject.Data); t.ID = policy.PolicyObject.ID; ToRemove.Add(t); return(true); }
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); }
public bool SetData(PolicyObject obj) { Pol = obj; Mapping = JsonConvert.DeserializeObject <PortMappingPolicy>(obj.Data); if (Mapping == null) { Mapping = new PortMappingPolicy(); } UpdateStatus(); return(true); }
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; }