MatchWildcard() private method

private MatchWildcard ( string str ) : bool
str string
return bool
コード例 #1
0
        internal bool MatchAddress(EndpointPermission e)
        {
            // For Asp.Net config we made it valid empty string in a hostname,
            // but it will match to nothing.
            if (this.Hostname.Length == 0 || e.Hostname.Length == 0)
            {
                return(false);
            }

            //
            // This is a fix for INADDR_ANY in Bind()
            // if this.Hostname == "0.0.0.0" then it matches only to e.Hostname="*.*.*.*"
            //
            // The reason is to not pass "0.0.0.0" into Resolve()
            if (this.Hostname.Equals("0.0.0.0"))
            {
                if (e.Hostname.Equals("*.*.*.*") || e.Hostname.Equals("0.0.0.0"))
                {
                    return(true);
                }
                return(false);
            }

            if (IsDns && e.IsDns)
            {
                return(String.Compare(hostname, e.hostname, StringComparison.OrdinalIgnoreCase) == 0);
            }
            Resolve();
            e.Resolve();


            if (((address == null) && !wildcard) || ((e.address == null) && !e.wildcard))
            {
                return(false);
            }

            //
            // try matching IP addresses against other wildcard address(es) or
            // wildcard
            //

            if (this.wildcard && !e.wildcard)
            {
                return(false);                           // as a wildcard I cannot be subset of a host.
            }
            else if (e.wildcard)
            {
                if (this.wildcard)
                {
                    // check against my _wildcard_
                    if (MatchWildcard(e.hostname))
                    {
                        return(true);
                    }
                }
                else
                {
                    // check against my _addresses_
                    for (int i = 0; i < address.Length; ++i)
                    {
                        if (e.MatchWildcard(address[i].ToString()))
                        {
                            return(true);
                        }
                    }
                }
            }
            else
            {
                //both are _not_ wildcards
                for (int i = 0; i < address.Length; ++i)
                {
                    for (int j = 0; j < e.address.Length; ++j)
                    {
                        if (address[i].Equals(e.address[j]))
                        {
                            return(true);
                        }
                    }
                }
            }
            return(false);
        }
コード例 #2
0
        internal EndpointPermission Intersect(EndpointPermission E)
        {
            String        commonName = null;
            TransportType commonTransport;
            int           commonPort;

            //
            // Look at the transport
            //

            if (transport == E.transport)             // same transport
            {
                commonTransport = transport;
            }
            // NO: check if one of the permissions authorize all transports
            else if (transport == TransportType.All)
            {
                commonTransport = E.transport;
            }
            else if (E.transport == TransportType.All)
            {
                commonTransport = transport;
            }
            else     // transport dont match-- intersection is empty
            {
                return(null);
            }

            //
            // Determine common port
            //

            if (port == E.port)
            {
                commonPort = port;
            }
            else if (port == SocketPermission.AllPorts)
            {
                commonPort = E.port;
            }
            else if (E.port == SocketPermission.AllPorts)
            {
                commonPort = port;
            }
            else
            {
                return(null);
            }

            //Work out common hostname part
            //
            // This is a fix for INADDR_ANY in Bind()
            // if this.Hostname == "0.0.0.0" then it matches only to e.Hostname="*.*.*.*"
            //
            // The reason is to not pass "0.0.0.0" into Resolve()
            if (this.Hostname.Equals("0.0.0.0"))
            {
                if (E.Hostname.Equals("*.*.*.*") || E.Hostname.Equals("0.0.0.0"))
                {
                    commonName = this.Hostname;//i.e. 0.0.0.0
                }
                else
                {
                    return(null);
                }
            }
            else if (E.Hostname.Equals("0.0.0.0"))
            {
                if (this.Hostname.Equals("*.*.*.*") || this.Hostname.Equals("0.0.0.0"))
                {
                    commonName = E.Hostname; //i.e. 0.0.0.0
                }
                else
                {
                    return(null);
                }
            }
            else if (IsDns && E.IsDns)
            {
                //
                // If both are DNS names we compare names as strings
                //
                if (String.Compare(hostname, E.hostname, StringComparison.OrdinalIgnoreCase) != 0)
                {
                    return(null);
                }
                else
                {
                    commonName = hostname;
                }
            }
            else
            {
                Resolve();
                E.Resolve();

                //

                if (((address == null) && !wildcard) || ((E.address == null) && !E.wildcard))
                {
                    return(null);
                }


                //
                // Find intersection of address lists
                if (wildcard && E.wildcard)
                {
                    string [] wcPieces  = hostname.Split(DotSeparator);
                    string [] strPieces = E.hostname.Split(DotSeparator);
                    string    result    = "";

                    if ((strPieces.Length != 4) || (wcPieces.Length != 4))
                    {
                        return(null);
                    }
                    for (int i = 0; i < 4; i++)
                    {
                        if (i != 0)
                        {
                            result += ".";
                        }
                        if (strPieces[i] == wcPieces[i])
                        {
                            result += strPieces[i];
                        }
                        else
                        if (strPieces[i] == "*")
                        {
                            result += wcPieces[i];
                        }
                        else
                        if (wcPieces[i] == "*")
                        {
                            result += strPieces[i];
                        }
                        else
                        {
                            return(null);
                        }
                    }
                    commonName = result;
                }
                else
                if (wildcard)                                                   //if ME is a wildcard
                //
                //
                // Check for wildcard IP matching
                //
                {
                    for (int i = 0; i < E.address.Length; ++i)
                    {
                        if (MatchWildcard(E.address[i].ToString()))
                        {
                            commonName = E.hostname;    //SHE fits into my wildcard
                            break;
                        }
                    }
                }
                else if (E.wildcard)                                     //if SHE is a wildcard
                {
                    for (int i = 0; i < address.Length; ++i)
                    {
                        if (E.MatchWildcard(address[i].ToString()))
                        {
                            commonName = hostname;      //ME fit  into her wildcard
                            break;
                        }
                    }
                }
                else
                {
                    //
                    // Not wildcard: check aginst  IP addresses list
                    //

                    if (address == E.address)                   // they both are NOT null (already checked)
                    {
                        commonName = hostname;
                    }

                    //
                    // Search the IP addresses for match
                    //
                    for (int i = 0; commonName == null && i < address.Length; i++)
                    {
                        for (int k = 0; k < E.address.Length; k++)
                        {
                            if (address[i].Equals(E.address[k]))
                            {
                                commonName = hostname;
                                break;
                            }
                        }
                    }
                }
                if (commonName == null)
                {
                    return(null);
                }
            }

            return(new EndpointPermission(commonName, commonPort, commonTransport));
        }
コード例 #3
0
        internal bool MatchAddress(EndpointPermission e) {

            // For Asp.Net config we made it valid empty string in a hostname,
            // but it will match to nothing.
            if(this.Hostname.Length == 0 || e.Hostname.Length == 0) {
                return false;
            }

            //
            // This is a fix for INADDR_ANY in Bind()
            // if this.Hostname == "0.0.0.0" then it matches only to e.Hostname="*.*.*.*"
            //
            // The reason is to not pass "0.0.0.0" into Resolve()
            if(this.Hostname.Equals("0.0.0.0"))
            {
                if(e.Hostname.Equals("*.*.*.*") || e.Hostname.Equals("0.0.0.0"))
                    return true;
                return false;
            }

            if (IsDns && e.IsDns) {

                //
                // <



                return (String.Compare(hostname, e.hostname, StringComparison.OrdinalIgnoreCase ) == 0);
            }
            Resolve();
            e.Resolve();

            //
            // if Resolve() didn't work for some reason then we're out of luck
            //

            if (((address == null) && !wildcard) || ((e.address == null) && !e.wildcard)) {
                return false;
            }

            //
            // try matching IP addresses against other wildcard address(es) or
            // wildcard
            //

            if (this.wildcard && !e.wildcard) {
                return false;                           // as a wildcard I cannot be subset of a host.

            }
            else if (e.wildcard) {
                if (this.wildcard) {
                    // check against my _wildcard_
                    if (MatchWildcard(e.hostname)) {
                        return true;
                    }
                }
                else {
                    // check against my _addresses_
                    for (int i = 0; i < address.Length; ++i) {
                        if (e.MatchWildcard(address[i].ToString())) {
                            return true;
                        }
                    }
                }
            } else {
                //both are _not_ wildcards
                for (int i = 0; i < address.Length; ++i) {
                    for (int j = 0; j < e.address.Length; ++j) {
                        if (address[i].Equals(e.address[j])) {
                            return true;
                        }
                    }
                }
            }
            return false;
        }
コード例 #4
0
        internal EndpointPermission Intersect(EndpointPermission E) {

            String commonName=null;
            TransportType commonTransport;
            int commonPort;

            //
            // Look at the transport
            //

            if (transport == E.transport) {           // same transport
                commonTransport = transport;
            }
            // NO: check if one of the permissions authorize all transports
            else if (transport == TransportType.All) {
                commonTransport = E.transport;
            }
            else if (E.transport == TransportType.All) {
                commonTransport = transport;
            }
            else {   // transport dont match-- intersection is empty
                return null;
            }

            //
            // Determine common port
            //

            if (port == E.port) {
                commonPort = port;
            }
            else if (port == SocketPermission.AllPorts) {
                commonPort = E.port;
            }
            else if (E.port == SocketPermission.AllPorts) {
                commonPort = port;
            }
            else {
                return null;
            }

            //Work out common hostname part
            //
            // This is a fix for INADDR_ANY in Bind()
            // if this.Hostname == "0.0.0.0" then it matches only to e.Hostname="*.*.*.*"
            //
            // The reason is to not pass "0.0.0.0" into Resolve()
            if(this.Hostname.Equals("0.0.0.0"))
            {
                if(E.Hostname.Equals("*.*.*.*") || E.Hostname.Equals("0.0.0.0"))
                    commonName = this.Hostname;//i.e. 0.0.0.0
                else
                    return null;
            }
            else if(E.Hostname.Equals("0.0.0.0"))
            {
                if(this.Hostname.Equals("*.*.*.*") || this.Hostname.Equals("0.0.0.0"))
                    commonName = E.Hostname; //i.e. 0.0.0.0
                else
                    return null;
            }
            else if (IsDns && E.IsDns) {
                //
                // If both are DNS names we compare names as strings
                //
                if(String.Compare(hostname, E.hostname, StringComparison.OrdinalIgnoreCase ) != 0) {
                    return null;
                }
                else {
                    commonName = hostname;
                }
            }
            else
            {
                Resolve();
                E.Resolve();
                //after this step we got both clases updated with valid
                //wildcard and address members. It's safe now to access those members directly

                //
                // if Resolve() didn't work for some reason then we're out of luck
                //

                if (((address == null) && !wildcard) || ((E.address == null) && !E.wildcard)) {
                    return null;
                }


                //
                // Find intersection of address lists
                if(wildcard && E.wildcard) {
                    string [] wcPieces = hostname.Split(DotSeparator);
                    string [] strPieces = E.hostname.Split(DotSeparator);
                    string  result="";

                    if ((strPieces.Length != 4) || (wcPieces.Length != 4)) {
                        return null;
                    }
                    for (int i = 0; i < 4; i++) {
                        if(i != 0) {
                            result+=".";
                        }
                        if (strPieces[i] == wcPieces[i]) {
                            result+=strPieces[i];
                        }
                        else
                        if (strPieces[i] == "*") {
                            result+=wcPieces[i];
                        }
                        else
                        if (wcPieces[i] == "*") {
                            result+=strPieces[i];
                        }
                        else
                            return null;
                    }
                    commonName = result;
                }else
                if (wildcard) {                                                 //if ME is a wildcard
                    //
                    //
                    // Check for wildcard IP matching
                    //
                    for (int i = 0; i < E.address.Length; ++i) {
                        if (MatchWildcard(E.address[i].ToString())) {
                            commonName = E.hostname;    //SHE fits into my wildcard
                            break;
                        }
                    }
                }
                else if (E.wildcard) {                                   //if SHE is a wildcard
                    for (int i = 0; i < address.Length; ++i) {
                        if (E.MatchWildcard(address[i].ToString())) {
                            commonName = hostname;      //ME fit  into her wildcard
                            break;
                        }
                    }
                }
                else
                {
                    //
                    // Not wildcard: check aginst  IP addresses list
                    //

                    if (address == E.address) {                 // they both are NOT null (already checked)
                        commonName = hostname;
                    }

                    //
                    // Search the IP addresses for match
                    //
                    for (int i = 0; commonName == null && i < address.Length; i++) {
                        for (int k = 0; k < E.address.Length; k++) {
                            if (address[i].Equals(E.address[k])) {
                                commonName = hostname;
                                break;
                            }
                        }
                    }
                }
                if(commonName == null) {
                    return null;
                }
            }

            return new EndpointPermission(commonName, commonPort, commonTransport);
        }
コード例 #5
0
 internal bool MatchAddress(EndpointPermission e)
 {
     if ((this.Hostname.Length != 0) && (e.Hostname.Length != 0))
     {
         if (this.Hostname.Equals("0.0.0.0"))
         {
             if (!e.Hostname.Equals("*.*.*.*") && !e.Hostname.Equals("0.0.0.0"))
             {
                 return(false);
             }
             return(true);
         }
         if (this.IsDns && e.IsDns)
         {
             return(string.Compare(this.hostname, e.hostname, StringComparison.OrdinalIgnoreCase) == 0);
         }
         this.Resolve();
         e.Resolve();
         if (((this.address == null) && !this.wildcard) || ((e.address == null) && !e.wildcard))
         {
             return(false);
         }
         if (this.wildcard && !e.wildcard)
         {
             return(false);
         }
         if (e.wildcard)
         {
             if (this.wildcard)
             {
                 if (this.MatchWildcard(e.hostname))
                 {
                     return(true);
                 }
             }
             else
             {
                 for (int i = 0; i < this.address.Length; i++)
                 {
                     if (e.MatchWildcard(this.address[i].ToString()))
                     {
                         return(true);
                     }
                 }
             }
         }
         else
         {
             for (int j = 0; j < this.address.Length; j++)
             {
                 for (int k = 0; k < e.address.Length; k++)
                 {
                     if (this.address[j].Equals(e.address[k]))
                     {
                         return(true);
                     }
                 }
             }
         }
     }
     return(false);
 }
コード例 #6
0
        internal EndpointPermission Intersect(EndpointPermission E)
        {
            string        epname = null;
            TransportType transport;
            int           port;

            if (this.transport == E.transport)
            {
                transport = this.transport;
            }
            else if (this.transport == TransportType.All)
            {
                transport = E.transport;
            }
            else if (E.transport == TransportType.All)
            {
                transport = this.transport;
            }
            else
            {
                return(null);
            }
            if (this.port == E.port)
            {
                port = this.port;
            }
            else if (this.port == -1)
            {
                port = E.port;
            }
            else if (E.port == -1)
            {
                port = this.port;
            }
            else
            {
                return(null);
            }
            if (this.Hostname.Equals("0.0.0.0"))
            {
                if (!E.Hostname.Equals("*.*.*.*") && !E.Hostname.Equals("0.0.0.0"))
                {
                    return(null);
                }
                epname = this.Hostname;
            }
            else if (E.Hostname.Equals("0.0.0.0"))
            {
                if (!this.Hostname.Equals("*.*.*.*") && !this.Hostname.Equals("0.0.0.0"))
                {
                    return(null);
                }
                epname = E.Hostname;
            }
            else if (this.IsDns && E.IsDns)
            {
                if (string.Compare(this.hostname, E.hostname, StringComparison.OrdinalIgnoreCase) != 0)
                {
                    return(null);
                }
                epname = this.hostname;
            }
            else
            {
                this.Resolve();
                E.Resolve();
                if (((this.address == null) && !this.wildcard) || ((E.address == null) && !E.wildcard))
                {
                    return(null);
                }
                if (this.wildcard && E.wildcard)
                {
                    string[] strArray  = this.hostname.Split(DotSeparator);
                    string[] strArray2 = E.hostname.Split(DotSeparator);
                    string   str2      = "";
                    if ((strArray2.Length != 4) || (strArray.Length != 4))
                    {
                        return(null);
                    }
                    for (int i = 0; i < 4; i++)
                    {
                        if (i != 0)
                        {
                            str2 = str2 + ".";
                        }
                        if (strArray2[i] == strArray[i])
                        {
                            str2 = str2 + strArray2[i];
                        }
                        else if (strArray2[i] == "*")
                        {
                            str2 = str2 + strArray[i];
                        }
                        else if (strArray[i] == "*")
                        {
                            str2 = str2 + strArray2[i];
                        }
                        else
                        {
                            return(null);
                        }
                    }
                    epname = str2;
                }
                else if (this.wildcard)
                {
                    for (int j = 0; j < E.address.Length; j++)
                    {
                        if (this.MatchWildcard(E.address[j].ToString()))
                        {
                            epname = E.hostname;
                            break;
                        }
                    }
                }
                else if (E.wildcard)
                {
                    for (int k = 0; k < this.address.Length; k++)
                    {
                        if (E.MatchWildcard(this.address[k].ToString()))
                        {
                            epname = this.hostname;
                            break;
                        }
                    }
                }
                else
                {
                    if (this.address == E.address)
                    {
                        epname = this.hostname;
                    }
                    for (int m = 0; (epname == null) && (m < this.address.Length); m++)
                    {
                        for (int n = 0; n < E.address.Length; n++)
                        {
                            if (this.address[m].Equals(E.address[n]))
                            {
                                epname = this.hostname;
                                break;
                            }
                        }
                    }
                }
                if (epname == null)
                {
                    return(null);
                }
            }
            return(new EndpointPermission(epname, port, transport));
        }