Beispiel #1
0
        ///////////////////////////////////////////////////////////////////////

        public static Assembly FindInAppDomain(
            AppDomain appDomain,
            string name,
            Version version,
            byte[] publicKeyToken,
            ref Result error
            )
        {
            if (appDomain == null)
            {
                appDomain = AppDomainOps.GetCurrent();
            }

            if (appDomain != null)
            {
                Assembly[] assemblies = appDomain.GetAssemblies();

                foreach (Assembly assembly in assemblies)
                {
                    if (assembly == null)
                    {
                        continue;
                    }

                    AssemblyName assemblyName = assembly.GetName();

                    if (assemblyName == null)
                    {
                        continue;
                    }

                    if ((name != null) && !String.Equals(
                            assemblyName.Name, name,
                            StringOps.SystemStringComparisonType))
                    {
                        continue;
                    }

                    if ((version != null) && (PackageOps.VersionCompare(
                                                  assemblyName.Version, version) != 0))
                    {
                        continue;
                    }

                    if ((publicKeyToken != null) && !ArrayOps.Equals(
                            assemblyName.GetPublicKeyToken(), publicKeyToken))
                    {
                        continue;
                    }

                    return(assembly);
                }
            }

            error = "assembly not found in application domain";
            return(null);
        }
Beispiel #2
0
        ///////////////////////////////////////////////////////////////////////

        public static string GetPublicKeyToken(
            AssemblyName assemblyName
            )
        {
            if (assemblyName != null)
            {
                try
                {
                    return(ArrayOps.ToHexadecimalString(
                               assemblyName.GetPublicKeyToken()));
                }
                catch
                {
                    // do nothing.
                }
            }

            return(null);
        }
Beispiel #3
0
        ///////////////////////////////////////////////////////////////////////

        #region Private Trusted Certificate Support Methods
        private static bool IsTrustedCertificate(
            X509Certificate certificate
            )
        {
            bool   result = false;
            string name   = null;

            //
            // NOTE: Make sure the certificate public key matches what
            //       we expect it to be for our own software updates.
            //
            if (certificate != null)
            {
                //
                // NOTE: Grab the public key of the certificate.
                //
                byte[] certificatePublicKey = certificate.GetPublicKey();

                if ((certificatePublicKey != null) &&
                    (certificatePublicKey.Length > 0))
                {
                    lock (syncRoot) /* TRANSACTIONAL */
                    {
                        //
                        // NOTE: Compare the public key of the certificate to
                        //       one(s) that we trust for our software updates.
                        //
                        if (!result &&
                            (PublicKey1 != null) && (PublicKey1.Length > 0) &&
                            ArrayOps.Equals(certificatePublicKey, PublicKey1))
                        {
                            name   = "PublicKey1";
                            result = true;
                        }

                        if (!result &&
                            (PublicKey2 != null) && (PublicKey2.Length > 0) &&
                            ArrayOps.Equals(certificatePublicKey, PublicKey2))
                        {
                            name   = "PublicKey2";
                            result = true;
                        }

                        if (!result &&
                            (PublicKey3 != null) && (PublicKey3.Length > 0) &&
                            ArrayOps.Equals(certificatePublicKey, PublicKey3))
                        {
                            name   = "PublicKey3";
                            result = true;
                        }

                        if (!result &&
                            (PublicKey4 != null) && (PublicKey4.Length > 0) &&
                            ArrayOps.Equals(certificatePublicKey, PublicKey4))
                        {
                            name   = "PublicKey4";
                            result = true;
                        }

                        //
                        // NOTE: Compare the public key of the certificate to
                        //       the auxiliary one that we trust for use by
                        //       third-party applications and plugins.
                        //
                        if (!result &&
                            (PublicKey5 != null) && (PublicKey5.Length > 0) &&
                            ArrayOps.Equals(certificatePublicKey, PublicKey5))
                        {
                            name   = "PublicKey5";
                            result = true;
                        }
                    }
                }
            }

            //
            // NOTE: Report this trust result to any trace listeners.
            //
            TraceOps.DebugTrace(String.Format(
                                    "IsTrustedCertificate: certificate = {0}, name = {1}, " +
                                    "result = {2}", FormatOps.Certificate(certificate, false,
                                                                          true), FormatOps.WrapOrNull(name), result),
                                typeof(UpdateOps).Name, TracePriority.SecurityDebug);

            return(result);
        }
Beispiel #4
0
        private static StringList GetAsyncCompletedArguments(
            Uri uri,
            string method,
            byte[] rawData,
            NameValueCollection collection,
            string fileName,
            AsyncCompletedEventArgs eventArgs
            )
        {
            StringList result = new StringList();

            if (uri != null)
            {
                result.Add("uri");
                result.Add(uri.ToString());
            }

            if (method != null)
            {
                result.Add("method");
                result.Add(method);
            }

            if (rawData != null)
            {
                result.Add("rawData");
                result.Add(ArrayOps.ToHexadecimalString(rawData));
            }

            if (collection != null)
            {
                result.Add("collection");
                result.Add(ListOps.FromNameValueCollection(
                               collection, new StringList()).ToString());
            }

            if (fileName != null)
            {
                result.Add("fileName");
                result.Add(fileName);
            }

            if (eventArgs != null)
            {
                bool canceled = eventArgs.Cancelled;

                result.Add("canceled");
                result.Add(canceled.ToString());

                Exception exception = eventArgs.Error;

                if (exception != null)
                {
                    result.Add("exception");
                    result.Add(exception.GetType().ToString());
                    result.Add("error");
                    result.Add(exception.ToString());
                }
            }

            return(result);
        }