Gert Driesen 8 years ago
parent
commit
b6d365c0de

+ 7 - 5
src/Renci.SshNet/ClientAuthentication.cs

@@ -30,7 +30,7 @@ namespace Renci.SshNet
                 var authenticated = noneAuthenticationMethod.Authenticate(session);
                 if (authenticated != AuthenticationResult.Success)
                 {
-                    if (!TryAuthenticate(session, new AuthenticationState(connectionInfo.AuthenticationMethods), noneAuthenticationMethod.AllowedAuthentications.ToList(), ref authenticationException))
+                    if (!TryAuthenticate(session, new AuthenticationState(connectionInfo.AuthenticationMethods), noneAuthenticationMethod.AllowedAuthentications, ref authenticationException))
                     {
                         throw authenticationException;
                     }
@@ -60,8 +60,8 @@ namespace Renci.SshNet
             // we want to try authentication methods in the order in which they were
             // passed in the ctor, not the order in which the SSH server returns
             // the allowed authentication methods
-            var matchingAuthenticationMethods = authenticationState.SupportedAuthenticationMethods.Where(a => allowedAuthenticationMethods.Contains(a.Name)).ToList();
-            if (matchingAuthenticationMethods.Count == 0)
+            var matchingAuthenticationMethods = authenticationState.SupportedAuthenticationMethods.Where(a => allowedAuthenticationMethods.Contains(a.Name)).ToArray();
+            if (matchingAuthenticationMethods.Length == 0)
             {
                 authenticationException = new SshAuthenticationException(string.Format("No suitable authentication method found to complete authentication ({0}).", string.Join(",", allowedAuthenticationMethods.ToArray())));
                 return false;
@@ -108,12 +108,14 @@ namespace Renci.SshNet
             return false;
         }
 
-        private static IEnumerable<IAuthenticationMethod> GetOrderedAuthenticationMethods(AuthenticationState authenticationState, IEnumerable<IAuthenticationMethod> matchingAuthenticationMethods)
+        private static IEnumerable<IAuthenticationMethod> GetOrderedAuthenticationMethods(AuthenticationState authenticationState, IAuthenticationMethod[] matchingAuthenticationMethods)
         {
             var skippedAuthenticationMethods = new List<IAuthenticationMethod>();
 
-            foreach (var authenticationMethod in matchingAuthenticationMethods)
+            for (var i = 0; i < matchingAuthenticationMethods.Length; i++)
             {
+                var authenticationMethod = matchingAuthenticationMethods[i];
+
                 if (authenticationState.ExecutedAuthenticationMethods.Contains(authenticationMethod))
                 {
                     skippedAuthenticationMethods.Add(authenticationMethod);

+ 7 - 2
src/Renci.SshNet/Common/Extensions.cs

@@ -2,7 +2,6 @@
 using System.Collections.Generic;
 using System.Diagnostics;
 using System.Globalization;
-using System.Linq;
 using System.Net;
 using System.Net.Sockets;
 using System.Text;
@@ -28,7 +27,13 @@ namespace Renci.SshNet
         {
             if (string.IsNullOrEmpty(value)) return true;
 
-            return value.All(char.IsWhiteSpace);
+            for (var i = 0; i < value.Length; i++)
+            {
+                if (!char.IsWhiteSpace(value[i]))
+                    return false;
+            }
+
+            return true;
         }
 
         internal static byte[] ToArray(this ServiceName serviceName)

+ 23 - 5
src/Renci.SshNet/SshMessageFactory.cs

@@ -1,7 +1,6 @@
 using System;
 using System.Collections.Generic;
 using System.Globalization;
-using System.Linq;
 using Renci.SshNet.Common;
 using Renci.SshNet.Messages;
 using Renci.SshNet.Messages.Authentication;
@@ -66,8 +65,11 @@ namespace Renci.SshNet
             };
 
             MessagesByName = new Dictionary<string, MessageMetadata>(AllMessages.Length);
-            foreach (var messageMetadata in AllMessages)
+            for (var i = 0; i < AllMessages.Length; i++)
+            {
+                var messageMetadata = AllMessages[i];
                 MessagesByName.Add(messageMetadata.Name, messageMetadata);
+            }
         }
 
         public SshMessageFactory()
@@ -95,7 +97,19 @@ namespace Renci.SshNet
             var enabledMessageMetadata = _enabledMessagesByNumber[messageNumber];
             if (enabledMessageMetadata == null)
             {
-                var definedMessageMetadata = AllMessages.FirstOrDefault(p => p.Number == messageNumber);
+                MessageMetadata definedMessageMetadata = null;
+
+                // find first message with specified number
+                for (var i = 0; i < AllMessages.Length; i++)
+                {
+                    var messageMetadata = AllMessages[i];
+                    if (messageMetadata.Number == messageNumber)
+                    {
+                        definedMessageMetadata = messageMetadata;
+                        break;
+                    }
+                }
+
                 if (definedMessageMetadata == null)
                 {
                     throw CreateMessageTypeNotSupportedException(messageNumber);
@@ -109,8 +123,10 @@ namespace Renci.SshNet
 
         public void DisableNonKeyExchangeMessages()
         {
-            foreach (var messageMetadata in AllMessages)
+            for (var i = 0; i < AllMessages.Length; i++)
             {
+                var messageMetadata = AllMessages[i];
+
                 var messageNumber = messageMetadata.Number;
                 if ((messageNumber > 2 && messageNumber < 20) || messageNumber > 30)
                 {
@@ -121,8 +137,10 @@ namespace Renci.SshNet
 
         public void EnableActivatedMessages()
         {
-            foreach (var messageMetadata in AllMessages)
+            for (var i = 0; i < AllMessages.Length; i++)
             {
+                var messageMetadata = AllMessages[i];
+
                 if (!_activatedMessagesById[messageMetadata.Id])
                     continue;