You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
111 lines
3.5 KiB
C#
111 lines
3.5 KiB
C#
using System;
|
|
|
|
namespace Renci.SshNet.Messages.Authentication
|
|
{
|
|
/// <summary>
|
|
/// Represents SSH_MSG_USERAUTH_REQUEST message. Server as a base message for other user authentication requests.
|
|
/// </summary>
|
|
[Message("SSH_MSG_USERAUTH_REQUEST", AuthenticationMessageCode)]
|
|
public abstract class RequestMessage : Message
|
|
{
|
|
/// <summary>
|
|
/// Returns the authentication message code for <c>SSH_MSG_USERAUTH_REQUEST</c>.
|
|
/// </summary>
|
|
internal const int AuthenticationMessageCode = 50;
|
|
|
|
private readonly byte[] _serviceName;
|
|
private readonly byte[] _userName;
|
|
private readonly byte[] _methodNameBytes;
|
|
private readonly string _methodName;
|
|
|
|
/// <summary>
|
|
/// Gets authentication username as UTF-8 encoded byte array.
|
|
/// </summary>
|
|
public byte[] Username
|
|
{
|
|
get { return _userName; }
|
|
}
|
|
|
|
/// <summary>
|
|
/// Gets the name of the service as ASCII encoded byte array.
|
|
/// </summary>
|
|
/// <value>
|
|
/// The name of the service.
|
|
/// </value>
|
|
public byte[] ServiceName
|
|
{
|
|
get { return _serviceName; }
|
|
}
|
|
|
|
/// <summary>
|
|
/// Gets the name of the authentication method.
|
|
/// </summary>
|
|
/// <value>
|
|
/// The name of the method.
|
|
/// </value>
|
|
public virtual string MethodName
|
|
{
|
|
get { return _methodName; }
|
|
}
|
|
|
|
/// <summary>
|
|
/// Gets the size of the message in bytes.
|
|
/// </summary>
|
|
/// <value>
|
|
/// The size of the messages in bytes.
|
|
/// </value>
|
|
protected override int BufferCapacity
|
|
{
|
|
get
|
|
{
|
|
var capacity = base.BufferCapacity;
|
|
capacity += 4; // Username length
|
|
capacity += Username.Length; // Username
|
|
capacity += 4; // ServiceName length
|
|
capacity += ServiceName.Length; // ServiceName
|
|
capacity += 4; // MethodName length
|
|
capacity += _methodNameBytes.Length; // MethodName
|
|
return capacity;
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// Initializes a new instance of the <see cref="RequestMessage"/> class.
|
|
/// </summary>
|
|
/// <param name="serviceName">Name of the service.</param>
|
|
/// <param name="username">Authentication username.</param>
|
|
/// <param name="methodName">The name of the authentication method.</param>
|
|
protected RequestMessage(ServiceName serviceName, string username, string methodName)
|
|
{
|
|
_serviceName = serviceName.ToArray();
|
|
_userName = Utf8.GetBytes(username);
|
|
_methodNameBytes = Ascii.GetBytes(methodName);
|
|
_methodName = methodName;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Called when type specific data need to be loaded.
|
|
/// </summary>
|
|
protected override void LoadData()
|
|
{
|
|
throw new InvalidOperationException("Load data is not supported.");
|
|
}
|
|
|
|
/// <summary>
|
|
/// Called when type specific data need to be saved.
|
|
/// </summary>
|
|
protected override void SaveData()
|
|
{
|
|
WriteBinaryString(_userName);
|
|
WriteBinaryString(_serviceName);
|
|
WriteBinaryString(_methodNameBytes);
|
|
}
|
|
|
|
internal override void Process(Session session)
|
|
{
|
|
throw new NotImplementedException();
|
|
}
|
|
}
|
|
}
|
|
|