AddPermission() private method

private AddPermission ( NetworkAccess access, EndpointPermission endPoint ) : void
access NetworkAccess
endPoint EndpointPermission
return void
        public void GetReady () 
        {
		s1 = new SocketPermission(NetworkAccess.Connect, TransportType.Tcp, "12.13.14.15", 80);
		//s1.AddPermission(NetworkAccess.Accept, TransportType.All, "localhost", 8080);
		//s1.AddPermission(NetworkAccess.Accept, TransportType.All, "123", SocketPermission.AllPorts);
		//s1.AddPermission(NetworkAccess.Accept, TransportType.All, "www.ximian.com", SocketPermission.AllPorts);
		//s1.AddPermission(NetworkAccess.Accept, TransportType.All, "120.4.3.2", SocketPermission.AllPorts);
		//s1.AddPermission(NetworkAccess.Accept, TransportType.Tcp, "www.google.com", 80);
		//s1.AddPermission(NetworkAccess.Accept, TransportType.All, "1.*.10.*.99", SocketPermission.AllPorts);
		//s1.AddPermission(NetworkAccess.Accept, TransportType.All, "128.0.0.1", SocketPermission.AllPorts);
		//s1.AddPermission(NetworkAccess.Accept, TransportType.All, "0.0.0.0", SocketPermission.AllPorts);
		s1.AddPermission(NetworkAccess.Accept, TransportType.All, "10.11.4.*", SocketPermission.AllPorts);

		s2 = new SocketPermission(NetworkAccess.Connect, TransportType.All, "12.13.14.15", 80);
		//s2.AddPermission(NetworkAccess.Accept, TransportType.All, "localhost", 8080);
		//s2.AddPermission(NetworkAccess.Accept, TransportType.All, "123", 8080);
		//s2.AddPermission(NetworkAccess.Accept, TransportType.Tcp, "www.google.com", SocketPermission.AllPorts);
		s2.AddPermission(NetworkAccess.Accept, TransportType.All, "213.*.*.*", SocketPermission.AllPorts);
		//s2.AddPermission(NetworkAccess.Accept, TransportType.All, "128.0.0.1", 9090);
		s2.AddPermission(NetworkAccess.Accept, TransportType.Tcp, "216.239.*.*", SocketPermission.AllPorts);
		//s2.AddPermission(NetworkAccess.Accept, TransportType.All, "128.0.0.1", SocketPermission.AllPorts);
		//s2.AddPermission(NetworkAccess.Accept, TransportType.Tcp, "120.4.3.2", 80);
		//s2.AddPermission(NetworkAccess.Accept, TransportType.All, "196.*.*.*", SocketPermission.AllPorts);
		//s2.AddPermission(NetworkAccess.Accept, TransportType.All, "1.*.*.*.99", SocketPermission.AllPorts);
		s2.AddPermission(NetworkAccess.Accept, TransportType.All, "10.11.*.*", 9090);
		//s2.AddPermission(NetworkAccess.Accept, TransportType.All, "10.11.4.7", SocketPermission.AllPorts);		
	}
        public void IsSubsetOf ()
        {
		s1 = new SocketPermission(NetworkAccess.Connect, TransportType.Tcp, "12.13.14.15", 80);
		s1.AddPermission(NetworkAccess.Accept, TransportType.All, "10.11.4.*", SocketPermission.AllPorts);
		s2 = new SocketPermission(NetworkAccess.Connect, TransportType.All, "12.13.14.15", 80);
		s2.AddPermission(NetworkAccess.Accept, TransportType.All, "10.11.*.*", 9090);
		
		Assertion.Assert ("#1", !s1.IsSubsetOf (s2));
		Assertion.Assert ("#2", !s2.IsSubsetOf (s1));

		s1 = new SocketPermission(NetworkAccess.Connect, TransportType.Tcp, "12.13.14.15", 80);
		s1.AddPermission(NetworkAccess.Accept, TransportType.All, "10.11.4.*", 9090);
		s2 = new SocketPermission(NetworkAccess.Connect, TransportType.All, "12.13.14.15", 80);
		s2.AddPermission(NetworkAccess.Accept, TransportType.All, "10.11.*.*", 9090);
		
		Assertion.Assert ("#4", !s2.IsSubsetOf (s1));
		
		s1 = new SocketPermission(NetworkAccess.Connect, TransportType.Tcp, "12.13.*.*", 80);
		s2 = new SocketPermission(NetworkAccess.Connect, TransportType.All, "12.13.14.*", 80);
		Assertion.Assert ("#5", s1.IsSubsetOf (s2));
		Assertion.Assert ("#6", !s2.IsSubsetOf (s1));

		s1 = new SocketPermission(NetworkAccess.Connect, TransportType.Tcp, "12.13.14.15", 80);
		s1.AddPermission(NetworkAccess.Accept, TransportType.Tcp, "10.11.*.*", 9090);
		s2 = new SocketPermission(NetworkAccess.Connect, TransportType.Tcp, "12.13.14.15", 80);
		s2.AddPermission(NetworkAccess.Accept, TransportType.All, "10.11.4.*", SocketPermission.AllPorts);
		Assertion.Assert ("#7", s1.IsSubsetOf (s2));
		Assertion.Assert ("#8", !s2.IsSubsetOf (s1));
	}
Beispiel #3
0
        public void IsSubsetOf ()
        {
		s1 = new SocketPermission(NetworkAccess.Connect, TransportType.Tcp, "12.13.14.15", 80);
		s1.AddPermission(NetworkAccess.Accept, TransportType.All, "10.11.4.*", SocketPermission.AllPorts);
		s2 = new SocketPermission(NetworkAccess.Connect, TransportType.All, "12.13.14.15", 80);
		s2.AddPermission(NetworkAccess.Accept, TransportType.All, "10.11.*.*", 9090);
		
		Assert.IsFalse (s1.IsSubsetOf (s2), "#1");
		Assert.IsFalse (s2.IsSubsetOf (s1), "#2");

		s1 = new SocketPermission(NetworkAccess.Connect, TransportType.Tcp, "12.13.14.15", 80);
		s1.AddPermission(NetworkAccess.Accept, TransportType.All, "10.11.4.*", 9090);
		s2 = new SocketPermission(NetworkAccess.Connect, TransportType.All, "12.13.14.15", 80);
		s2.AddPermission(NetworkAccess.Accept, TransportType.All, "10.11.*.*", 9090);
		
		Assert.IsFalse (s2.IsSubsetOf (s1), "#4");
		
		s1 = new SocketPermission(NetworkAccess.Connect, TransportType.Tcp, "12.13.*.*", 80);
		s2 = new SocketPermission(NetworkAccess.Connect, TransportType.All, "12.13.14.*", 80);
		Assert.IsTrue (s1.IsSubsetOf (s2), "#5");
		Assert.IsFalse (s2.IsSubsetOf (s1), "#6");

		s1 = new SocketPermission(NetworkAccess.Connect, TransportType.Tcp, "12.13.14.15", 80);
		s1.AddPermission(NetworkAccess.Accept, TransportType.Tcp, "10.11.*.*", 9090);
		s2 = new SocketPermission(NetworkAccess.Connect, TransportType.Tcp, "12.13.14.15", 80);
		s2.AddPermission(NetworkAccess.Accept, TransportType.All, "10.11.4.*", SocketPermission.AllPorts);
		Assert.IsTrue (s1.IsSubsetOf (s2), "#7");
		Assert.IsFalse (s2.IsSubsetOf (s1), "#8");
	}
	public void IsSubsetOf2 ()
	{
		s1 = new SocketPermission(NetworkAccess.Connect, TransportType.Tcp, "12.13.14.15", 80);
		s1.AddPermission(NetworkAccess.Accept, TransportType.All, "10.11.4.*", 9090);
		s2 = new SocketPermission(NetworkAccess.Connect, TransportType.All, "12.13.14.15", 80);
		s2.AddPermission(NetworkAccess.Accept, TransportType.All, "10.11.*.*", 9090);
		
		Assertion.Assert ("#3: bug in MS.Net", s1.IsSubsetOf (s2));
	}
        private void ParseAddPermissions(SocketPermission perm) {

            NetworkAccess access;
            if (0 == string.Compare(m_access, strConnect, StringComparison.OrdinalIgnoreCase )) {
                access = NetworkAccess.Connect;
            }
            else
            if (0 == string.Compare(m_access, strAccept, StringComparison.OrdinalIgnoreCase )) {
                access = NetworkAccess.Accept;
            }
            else {
                throw new ArgumentException(SR.GetString(SR.net_perm_invalid_val, strAccess, m_access));
            }

            TransportType transport;
            try {
                transport = (TransportType) Enum.Parse(typeof(TransportType), m_transport, true);
            }
            catch (Exception e) {
                if (e is ThreadAbortException || e is StackOverflowException || e is OutOfMemoryException) {                                       
		            throw;
	            }
                throw new ArgumentException(SR.GetString(SR.net_perm_invalid_val, strTransport, m_transport), e);
            }

            int port;
            if (string.Compare(m_port, "All", StringComparison.OrdinalIgnoreCase ) == 0) {
                m_port = "-1";
            }
            try {
                port = Int32.Parse(m_port, NumberFormatInfo.InvariantInfo);
            }
            catch (Exception e) {
                if (e is ThreadAbortException || e is StackOverflowException || e is OutOfMemoryException) {                                       
		            throw;
	            }
                throw new ArgumentException(SR.GetString(SR.net_perm_invalid_val, strPort, m_port), e);
            }

            if (!ValidationHelper.ValidateTcpPort(port) && port != SocketPermission.AllPorts) {
                throw new ArgumentOutOfRangeException("port", port, SR.GetString(SR.net_perm_invalid_val, strPort, m_port));
            }
            perm.AddPermission(access, transport, m_host, port);
        }
		// Methods
		
		public override IPermission CreatePermission () 
		{
			if (this.Unrestricted)
				return new SocketPermission (PermissionState.Unrestricted);

			string missing = String.Empty;
			if (m_access == null) 
				missing += "Access, ";
			if (m_host == null) 
				missing += "Host, ";
			if (m_port == null) 
				missing += "Port, ";
			if (m_transport == null) 
				missing += "Transport, ";
			if (missing.Length > 0) {
				string msg = Locale.GetText ("The value(s) for {0} must be specified.");
				missing = missing.Substring (0, missing.Length - 2); // remove last separator
				throw new ArgumentException (String.Format (msg, missing));
			}

			NetworkAccess access;
			TransportType transport;
			int port = SocketPermission.AllPorts;

			if (String.Compare (m_access, "Connect", true) == 0)
				access = NetworkAccess.Connect;
			else if (String.Compare (m_access, "Accept", true) == 0)
				access = NetworkAccess.Accept;
			else {
				string msg = Locale.GetText ("The parameter value for 'Access', '{1}, is invalid.");
				throw new ArgumentException (String.Format (msg, m_access));
			}

			if (String.Compare (m_port, "All", true) != 0) {
				try {
					port = Int32.Parse (m_port);					
				} 
				catch {
					string msg = Locale.GetText ("The parameter value for 'Port', '{1}, is invalid.");
					throw new ArgumentException (String.Format (msg, m_port));
				}
				// test whether port number is valid..
				new IPEndPoint (1, port);
			}

			try {
				transport = (TransportType) Enum.Parse (typeof (TransportType), m_transport, true);
			}
			catch {
				string msg = Locale.GetText ("The parameter value for 'Transport', '{1}, is invalid.");
				throw new ArgumentException (String.Format (msg, m_transport));
			}
						
			SocketPermission perm = new SocketPermission (PermissionState.None);
			perm.AddPermission (access, transport, m_host, port);
			return perm;
		}
Beispiel #7
0
        private void ParseAddPermissions(SocketPermission perm) {

            NetworkAccess access;
            if (0 == string.Compare(m_access, strConnect, true, CultureInfo.InvariantCulture)) {
                access = NetworkAccess.Connect;
            }
            else
            if (0 == string.Compare(m_access, strAccept, true, CultureInfo.InvariantCulture)) {
                access = NetworkAccess.Accept;
            }
            else {
                throw new ArgumentException(SR.GetString(SR.net_perm_invalid_val, strAccess, m_access));
            }

            TransportType transport;
            try {
                transport = (TransportType) Enum.Parse(typeof(TransportType), m_transport, true);
            }
            catch (Exception e) {
                throw new ArgumentException(SR.GetString(SR.net_perm_invalid_val, strTransport, m_transport), e);
            }

            int port;
            if (string.Compare(m_port, "All", true, CultureInfo.InvariantCulture) == 0) {
                m_port = "-1";
            }
            try {
                port = Int32.Parse(m_port);
            }
            catch (Exception e) {
                throw new ArgumentException(SR.GetString(SR.net_perm_invalid_val, strPort, m_port), e);
            }

            if (!ValidationHelper.ValidateTcpPort(port) && port != SocketPermission.AllPorts) {
                throw new ArgumentOutOfRangeException(SR.GetString(SR.net_perm_invalid_val, strPort, m_port));
            }
            perm.AddPermission(access, transport, m_host, port);
        }
        /// <summary>
        ///     Starts run loop for proxy. Loop will run until a connection is made
        ///     and the disconnected.
        /// 
        ///     It will only allow a single connection from the local machine. Once that
        ///     connection is dropped or closed, the run loop will return and exit.
        /// </summary>
        public void Run()
        {
            //initialize buffer. We use 1024, as otherwise messages where being split up which
            //made them difficult to work with
            //todo: fix this so buffer size doesnt matter
            buffer  = new byte[1024];

            //create a SocketPermission instance to set permissions on socket. No permissions by default
            SocketPermission sPermission = new SocketPermission(PermissionState.None);

            //allow connections ONLY from localhost, via TCP, and the specified port
            sPermission.AddPermission(NetworkAccess.Accept, TransportType.Tcp, "127.0.0.1", port);

            //bind to the local address
            IPAddress localAddr = IPAddress.Parse("127.0.0.1");

            //create a tcpListener on the local address and specified port to listen
            //for incoming connections
            TcpListener tcpListener = new TcpListener(localAddr, port);

            //start listening
            tcpListener.Start();

            //wait for first connection. The method blocks until a connection is
            //received
            client = tcpListener.AcceptSocket();

            //create a network stream to communicate with the client
            stream = new NetworkStream(client);

            //set the read call back for when data comes in on stream
            readCallback = new AsyncCallback(this.onStreamRead);

            //set the write call back for when data is written to stream
            writeCallback = new AsyncCallback(this.onStreamWrite);

            //make sure client is connected
            if(client.Connected)
            {
                //start listening on the socket
                Listen();

                //start infinite loop. We do this so we can check for connection
                //and exit the run loop if the connection is dropped
                for(;;)
                {
                    //make sure we are still connected to the client
                    if(client == null || !client.Connected)
                    {
                        //if not, exit run loop
                        return;
                    }

                    //sleep for 100 milliseconds. We do this so the loop doesnt
                    //run as fast as possible and eat up CPU unecessarily
                    Thread.Sleep(100);
                }
            }
        }