mirror of
https://github.com/sshnet/SSH.NET.git
synced 2026-09-10 17:25:51 +00:00
af279d206a
* Fix SftpFileAttributes file type detection To get the file type, S_IFMT should be used as the mask. Instead it was using each file type as the mask. It meant that e.g. a symbolic link would also show as a regular file and a character device. Also allow setting and retrieving the setuid/setgid/sticky bits * fix build
105 lines
3.0 KiB
C#
105 lines
3.0 KiB
C#
#nullable enable
|
|
using System;
|
|
using System.Collections.Generic;
|
|
|
|
using Renci.SshNet.Sftp;
|
|
|
|
namespace Renci.SshNet.Tests.Common
|
|
{
|
|
public class SftpFileAttributesBuilder
|
|
{
|
|
public static SftpFileAttributes Empty
|
|
{
|
|
get
|
|
{
|
|
return new SftpFileAttributesBuilder().Build();
|
|
}
|
|
}
|
|
|
|
private DateTime? _lastAccessTime;
|
|
private DateTime? _lastWriteTime;
|
|
private long? _size;
|
|
private int? _userId;
|
|
private int? _groupId;
|
|
private uint? _permissions;
|
|
private Dictionary<string, string>? _extensions;
|
|
|
|
public SftpFileAttributesBuilder WithLastAccessTime(DateTime lastAccessTime)
|
|
{
|
|
_lastAccessTime = lastAccessTime;
|
|
return this;
|
|
}
|
|
|
|
public SftpFileAttributesBuilder WithLastWriteTime(DateTime lastWriteTime)
|
|
{
|
|
_lastWriteTime = lastWriteTime;
|
|
return this;
|
|
}
|
|
|
|
public SftpFileAttributesBuilder WithSize(long size)
|
|
{
|
|
_size = size;
|
|
return this;
|
|
}
|
|
|
|
public SftpFileAttributesBuilder WithUserId(int userId)
|
|
{
|
|
_userId = userId;
|
|
return this;
|
|
}
|
|
|
|
public SftpFileAttributesBuilder WithGroupId(int groupId)
|
|
{
|
|
_groupId = groupId;
|
|
return this;
|
|
}
|
|
|
|
public SftpFileAttributesBuilder WithPermissions(uint permissions)
|
|
{
|
|
_permissions = permissions;
|
|
return this;
|
|
}
|
|
|
|
public SftpFileAttributesBuilder WithExtension(string name, string value)
|
|
{
|
|
_extensions ??= [];
|
|
_extensions.Add(name, value);
|
|
return this;
|
|
}
|
|
|
|
public SftpFileAttributes Build()
|
|
{
|
|
if (_lastAccessTime == null)
|
|
{
|
|
_lastAccessTime = DateTime.SpecifyKind(DateTime.MinValue, DateTimeKind.Utc);
|
|
}
|
|
else if (_lastAccessTime.Value.Kind != DateTimeKind.Utc)
|
|
{
|
|
_lastAccessTime = _lastAccessTime.Value.ToUniversalTime();
|
|
}
|
|
|
|
if (_lastWriteTime == null)
|
|
{
|
|
_lastWriteTime = DateTime.SpecifyKind(DateTime.MinValue, DateTimeKind.Utc);
|
|
}
|
|
else if (_lastWriteTime.Value.Kind != DateTimeKind.Utc)
|
|
{
|
|
_lastWriteTime = _lastWriteTime.Value.ToUniversalTime();
|
|
}
|
|
|
|
_size ??= 0;
|
|
_userId ??= 0;
|
|
_groupId ??= 0;
|
|
_permissions ??= 0;
|
|
|
|
return new SftpFileAttributes(_lastAccessTime.Value,
|
|
_lastWriteTime.Value,
|
|
_size.Value,
|
|
_userId.Value,
|
|
_groupId.Value,
|
|
_permissions.Value,
|
|
_extensions);
|
|
}
|
|
}
|
|
}
|