コード例 #1
0
        internal static void ProcessCommand(ClientProcessor processor, string data)
        {
            if (processor.Server.AuthLogin == null)
            {
                processor.WriteCode(502, "5.5.1");
                return;
            }

            if (processor.Server.Options.RequireEncryptionForAuth && !processor.Secure)
            {
                processor.WriteCode(538, "5.7.11");
                return;
            }

            var args = data.Contains(" ") ? data.Split(' ') : new[] { data };

            switch (args[0].ToUpper())
            {
            case "LOGIN":
                processor.CaptureData = 2;
                processor.WriteText("334 VXNlcm5hbWU6");
                break;

            case "PLAIN":
                if (args.Length == 1)
                {
                    processor.CaptureData = 4;
                    processor.WriteText("334");
                }
                else
                {
                    processor.Username = AuthPlain(processor, args[1]);
                    if (processor.Username == null)
                    {
                        processor.WriteCode(535, "5.7.8", "Authentication credentials invalid");
                    }
                    else
                    {
                        processor.WriteCode(235, "2.7.0", "Authentication Succeeded");
                    }
                }
                break;

            default:
                processor.WriteCode(501, "5.7.4", "Unrecognized Authentication Method");
                break;
            }
        }
コード例 #2
0
        internal static void ProcessData(ClientProcessor processor, string data)
        {
            switch (processor.CaptureData)
            {
            case 2:
                processor.TempUsername = Misc.Base64.Base64Decode(data);
                processor.CaptureData  = 3;
                processor.WriteText("334 UGFzc3dvcmQ6");
                break;

            case 3:
                processor.CaptureData = 0;

                if (processor.Server.AuthLogin == null)
                {
                    processor.WriteCode(454, "4.7.0", "Temporary authentication failure");
                    return;
                }

                var decode = Misc.Base64.Base64Decode(data);
                if (processor.TempUsername != null && decode != null && processor.Server.AuthLogin.AuthLogin(processor.TempUsername, decode, processor.RemoteEndPoint, processor.Secure))
                {
                    processor.WriteCode(235, "2.7.0", "Authentication Succeeded");
                    processor.Username = processor.TempUsername;
                }
                else
                {
                    processor.WriteCode(535, "5.7.8", "Authentication credentials invalid");
                }

                processor.TempUsername = null;
                break;

            case 4:
                processor.CaptureData = 0;

                processor.Username = AuthPlain(processor, data);
                if (processor.Username == null)
                {
                    processor.WriteCode(535, "5.7.8", "Authentication credentials invalid");
                }
                else
                {
                    processor.WriteCode(235, "2.7.0", "Authentication Succeeded");
                }
                break;
            }
        }
コード例 #3
0
 internal static void SendCode(ClientProcessor proc, ushort code, string enhanced, string text) =>
 proc.WriteText($"{code} {enhanced}  {text}");
コード例 #4
0
 internal static void SendCode(ClientProcessor proc, ushort code) => proc.WriteText($"{code} {Codes[code]}");