/// <summary> /// Initializes a new instance of the <see cref="PermissionsFact"/> class. /// </summary> /// <param name="user">The current user</param> /// <param name="dir">The current directory</param> /// <param name="entry">The file to create the permissions for</param> public PermissionsFact([NotNull] FtpUser user, [NotNull] IUnixDirectoryEntry dir, [NotNull] IUnixFileEntry entry) { var values = new StringBuilder(); var entryPerm = entry.Permissions.GetAccessModeFor(entry, user); var dirPerm = dir.Permissions.GetAccessModeFor(dir, user); if (dirPerm.Write) { values.Append('c'); if (entryPerm.Write) { if (entry.FileSystem.SupportsAppend) { values.Append('a'); } values.Append('d'); values.Append('f'); } } if (entryPerm.Read) { values.Append('r'); } if (entryPerm.Write) { values.Append('w'); } Value = values.ToString(); }
/// <summary> /// Initializes a new instance of the <see cref="PermissionsFact"/> class. /// </summary> /// <param name="user">The current user</param> /// <param name="dir">The current directory</param> /// <param name="entry">The directory entry to get the permissions for</param> public PermissionsFact([NotNull] FtpUser user, [CanBeNull] IUnixDirectoryEntry dir, [NotNull] IUnixDirectoryEntry entry) { var values = new StringBuilder(); var entryPerm = entry.Permissions.GetAccessModeFor(entry, user); if (entryPerm.Write) { values.Append('c'); values.Append('m'); values.Append('p'); } if (dir != null) { var dirPerm = dir.Permissions.GetAccessModeFor(dir, user); if (dirPerm.Write && entryPerm.Write) { if (!entry.IsRoot && entry.IsDeletable) { values.Append('d'); } values.Append('f'); } } if (entryPerm.Read) { values.Append('e'); values.Append('l'); } Value = values.ToString(); }
/// <summary> /// Initializes a new instance of the <see cref="FactsListFormatter"/> class. /// </summary> /// <param name="user">The user to create this formatter for</param> /// <param name="enumerator">The enumerator for the directory listing to format</param> /// <param name="activeFacts">The active facts to return for the entries</param> /// <param name="absoluteName">Returns an absolute entry name</param> public FactsListFormatter(FtpUser user, DirectoryListingEnumerator enumerator, ISet <string> activeFacts, bool absoluteName) { _user = user; _enumerator = enumerator; _activeFacts = activeFacts; _absoluteName = absoluteName; }
public RepositoriesViewModel() { dbContext = new RepositoryDbContext(); repSource = dbContext.Repositories.ToList(); SourceUser = new FtpUser(); TargetUser = new FtpUser(); this.Repositories = new ObservableCollection <Repository>(repSource); }
private void deleteFtpUser(FtpUser ftpUser) { // Mark deleted so that it is deleted on server request. ftpUser.PendingAction = ChildPendingAction.Delete; // Remove from visual binding list. bindingList.Remove(ftpUser); }
private void createFtpUser(Customer customer, FtpUser ftpUser) { ftpManager.CreateUser( ftpUser.UserName, DecryptPassword(ftpUser.Password), ftpUser.Enabled, customer.FtpGroupName); }
public FtpUser GetFtpUser() { FtpUser user = new FtpUser(); user.UserName = userNameTextBox.Text; user.Password = LocalContext.Default.EncryptPassword(passwordTextBox1.Text); user.Enabled = true; user.PendingAction = ChildPendingAction.Create; return(user); }
private void dataGridView_CellValueChanged(object sender, DataGridViewCellEventArgs e) { if (e.RowIndex != -1) { FtpUser ftpUser = bindingList[e.RowIndex]; if (ftpUser.PendingAction != ChildPendingAction.Create) { ftpUser.PendingAction = ChildPendingAction.Update; } } }
public override void ExecuteCommand(FtpSession session, StringRequestInfo requestInfo) { if (session.Logged) { session.Send(FtpCoreResource.AlreadyLoggedIn_230); return; } string password = requestInfo.Body; if (string.IsNullOrEmpty(password)) { session.SendParameterError(); return; } FtpUser user = null; AuthenticationResult result = AuthenticationResult.Success; //if (session.Context.IsAnonymous) // user = new Anonymous(); //else result = session.AppServer.FtpServiceProvider.Authenticate(session.Context.UserName, password, out user); if (result == AuthenticationResult.Success) { session.FailedLogInTimes = 0; if (session.AppServer.Logon(session.Context, user)) { session.Send(FtpCoreResource.LoggedIn_230); session.Logged = true; } else { session.Send(FtpCoreResource.ReachedLoginLimit_421); session.Close(); } } else { session.FailedLogInTimes++; session.Send(FtpCoreResource.AuthenticationFailed_530); //Exceed max allowed failed login times, close the connection if (session.FailedLogInTimes >= session.AppServer.MaxFailedLogInTimes) { session.Close(); } } }
public MainForm() { InitializeComponent(); m_portConfigFile_default = new PortConfigFile(); SetConnectStateDisplay(); m_spPort.ReceivedDataHandle = m_atc.ReceivedFunc; string ftpHomeDir; ftpHomeDir = System.Windows.Forms.Application.StartupPath + "\\configfile"; DirectoryInfo dir = new DirectoryInfo(ftpHomeDir); dir.Create(); #if Telnet_Enable /* * 服务器的最大连接数 */ m_ftpServer.Capacity = 1000; /* * 连接超时时间 */ m_ftpServer.HeartBeatPeriod = 120000; //120秒 /* * 创建一个使用FTP的用户, */ FtpUser user = new FtpUser("ftp"); user.Password = "******"; user.AllowWrite = true; //dir.Create(); user.HomeDir = ftpHomeDir; /* * 限制该帐号的用户的连接服务器的最大连接数 * 也就是限制该使用该帐号的FTP同时连接服务器的数量。 */ user.MaxConnectionCount = 2; /* * 限制用户的最大上传文件为20M,超过这个值上传文件会失败。 * 默认不限制该值,可以传输大文件。 */ user.MaxUploadFileLength = 1024 * 1024 * 20; m_ftpServer.AddUser(user); //把当前目录作为匿名用户的目录,测试目的(必须指定) m_ftpServer.AnonymousUser.HomeDir = System.Windows.Forms.Application.StartupPath + "\\configfile"; #endif }
private void addButton_Click(object sender, EventArgs e) { FtpUserCreator creator = new FtpUserCreator(); DialogResult result = creator.ShowDialog(); if (result == DialogResult.OK) { FtpUser ftpUser = creator.GetFtpUser(); resultList.Add(ftpUser); bindingList.Add(ftpUser); bindingList.ResetBindings(); ChangeMade(); } }
private string Password(string password) { _ftpUser = _ftpServer.UserStore.Validate(_ftpUser.UserName, password); if (_ftpUser?.UserName != null) { _root = _ftpUser.HomeDirectory; _currentDirectory = _root; return("230 User logged in"); } else { return("530 Not logged in"); } }
public bool Connect(string ftpUri, FtpUser user, object vm) { try { ftpClient = new FtpClient(ftpUri, user); FtpUri = ftpUri; sourceDerictories = ftpClient.LoadDerectory(); Derictories = new ObservableCollection <FileDirectoryInfo>(sourceDerictories); toResult = vm; return(true); } catch (Exception) { return(false); } }
private FtpUser CreateFtpUser() { using var context = new EntityFrameworkDbContext(); var userId = Guid.NewGuid(); var ftpUser = new FtpUser { Login = Guid.NewGuid().ToString(), BoxId = Guid.NewGuid().ToString(), Id = userId, }; context.FtpUsers.Add(ftpUser); context.SaveChanges(); Assert.That(GetFtpUser(userId), Is.Not.Null, "Failed to create ftp user"); return(ftpUser); }
private void processFtpUser(Customer customer, FtpUser ftpUser) { switch (ftpUser.PendingAction) { case ChildPendingAction.Create: createFtpUser(customer, ftpUser); updateWebsiteSecurity(customer); break; case ChildPendingAction.Update: updateFtpUser(ftpUser); updateWebsiteSecurity(customer); break; case ChildPendingAction.Delete: deleteFtpUser(ftpUser); break; } }
/// <summary> /// PASS Command - RFC 959 - Section 4.1.1 /// </summary> /// <param name="username"></param> /// <returns></returns> private Response Password(string password) { FtpUser user = FtpUserStore.Validate(_username, password); if (user != null) { if (!string.IsNullOrEmpty(user.TwoFactorSecret)) { _password = password; return GetResponse(FtpResponses.NEED_TWO_FACTOR_CODE); } else { _currentUser = user; _root = _currentUser.HomeDir; _currentDirectory = _root; if (_currentUser.IsAnonymous) FtpPerformanceCounters.IncrementAnonymousUsers(); else FtpPerformanceCounters.IncrementNonAnonymousUsers(); return GetResponse(FtpResponses.LOGGED_IN); } } else { return GetResponse(FtpResponses.NOT_LOGGED_IN); } }
private void deleteFtpUser(FtpUser ftpUser) { ftpManager.DeleteUser(ftpUser.UserName); }
/// <summary> /// Updates the FTP user. /// </summary> /// <param name="user">The user.</param> /// <returns></returns> public abstract bool UpdateFtpUser(FtpUser user);
public void HandleClient(object obj) { _remoteEndPoint = (IPEndPoint)_controlClient.Client.RemoteEndPoint; _clientIP = _remoteEndPoint.Address.ToString(); _controlStream = _controlClient.GetStream(); _controlReader = new StreamReader(_controlStream); _controlWriter = new StreamWriter(_controlStream); _controlWriter.WriteLine("220 Service Ready."); _controlWriter.Flush(); _validCommands.AddRange(new string[] { "AUTH", "USER", "PASS", "QUIT", "HELP", "NOOP" }); string line; _dataClient = new TcpClient(); string renameFrom = null; try { while ((line = _controlReader.ReadLine()) != null) { string response = null; string[] command = line.Split(' '); string cmd = command[0].ToUpperInvariant(); string arguments = command.Length > 1 ? line.Substring(command[0].Length + 1) : null; if (arguments != null && arguments.Trim().Length == 0) { arguments = null; } LogEntry logEntry = new LogEntry { Date = DateTime.Now, CIP = _clientIP, CSUriStem = arguments }; if (!_validCommands.Contains(cmd)) { response = CheckUser(); } if (cmd != "RNTO") { renameFrom = null; } if (response == null) { switch (cmd) { case "USER": response = User(arguments); break; case "PASS": response = Password(arguments); logEntry.CSUriStem = "******"; break; case "CWD": response = ChangeWorkingDirectory(arguments); break; case "CDUP": response = ChangeWorkingDirectory(".."); break; case "QUIT": response = "221 Service closing control connection"; break; case "REIN": _ftpUser = new FtpUser(); _passiveListener = null; _dataClient = null; response = "220 Service ready for new user"; break; case "PORT": response = Port(arguments); logEntry.CPort = _dataEndpoint.Port.ToString(); break; case "PASV": response = Passive(); logEntry.SPort = ((IPEndPoint)_passiveListener.LocalEndpoint).Port.ToString(); break; case "TYPE": response = Type(command[1], command.Length == 3 ? command[2] : null); logEntry.CSUriStem = command[1]; break; case "STRU": response = Structure(arguments); break; case "MODE": response = Mode(arguments); break; case "RNFR": renameFrom = arguments; response = "350 Requested file action pending further information"; break; case "RNTO": response = Rename(renameFrom, arguments); break; case "DELE": response = Delete(arguments); break; case "RMD": response = RemoveDir(arguments); break; case "MKD": response = CreateDir(arguments); break; case "PWD": response = PrintWorkingDirectory(); break; case "RETR": response = Retrieve(arguments); logEntry.Date = DateTime.Now; break; case "STOR": response = Store(arguments); logEntry.Date = DateTime.Now; break; case "STOU": response = StoreUnique(); logEntry.Date = DateTime.Now; break; case "APPE": response = Append(arguments); logEntry.Date = DateTime.Now; break; case "LIST": response = List(arguments ?? _currentDirectory); logEntry.Date = DateTime.Now; break; case "SYST": response = "215 UNIX Type: L8"; break; case "NOOP": response = "200 OK"; break; case "ACCT": response = "200 OK"; break; case "ALLO": response = "200 OK"; break; case "NLST": response = "502 Command not implemented"; break; case "SITE": response = "502 Command not implemented"; break; case "STAT": response = "502 Command not implemented"; break; case "HELP": response = "502 Command not implemented"; break; case "SMNT": response = "502 Command not implemented"; break; case "REST": response = "502 Command not implemented"; break; case "ABOR": response = "502 Command not implemented"; break; // Extensions defined by rfc 2228 case "AUTH": response = Auth(arguments); break; // Extensions defined by rfc 2389 case "FEAT": response = FeatureList(); break; case "OPTS": response = Options(arguments); break; // Extensions defined by rfc 3659 case "MDTM": response = FileModificationTime(arguments); break; case "SIZE": response = FileSize(arguments); break; // Extensions defined by rfc 2428 case "EPRT": response = EPort(arguments); logEntry.CPort = _dataEndpoint.Port.ToString(); break; case "EPSV": response = EPassive(); logEntry.SPort = ((IPEndPoint)_passiveListener.LocalEndpoint).Port.ToString(); break; default: response = "502 Command not implemented"; break; } } logEntry.CSMethod = cmd; logEntry.CSUsername = _ftpUser.UserName; logEntry.SCStatus = response.Substring(0, response.IndexOf(' ')); UpdateStatus?.Invoke(this, new StatusChangedEventArgs(logEntry.ToString())); if (_controlClient == null || !_controlClient.Connected) { break; } else { _controlWriter.WriteLine(response); _controlWriter.Flush(); if (response.StartsWith("221")) { break; } if (cmd == "AUTH") { _cert = new X509Certificate("server.cer"); _sslStream = new SslStream(_controlStream); _sslStream.AuthenticateAsServer(_cert); _controlReader = new StreamReader(_sslStream); _controlWriter = new StreamWriter(_sslStream); } } } } catch (Exception ex) { UpdateStatus?.Invoke(this, new StatusChangedEventArgs(ex.Message)); } Dispose(); }
private void updateFtpUser(FtpUser ftpUser) { ftpManager.UpdateUser(ftpUser.UserName, ftpUser.Enabled); }
/// <summary> /// Creates the FTP user. /// </summary> /// <param name="user">The user.</param> /// <returns></returns> public abstract CreateUserResult CreateFtpUser(FtpUser user);
/// <summary> /// PASS Command - RFC 959 - Section 4.1.1 /// </summary> /// <param name="username"></param> /// <returns></returns> private Response Password(string password) { FtpUser user = FtpUserStore.Validate(_username, password); if (user != null) { if (!string.IsNullOrEmpty(user.TwoFactorSecret)) { _password = password; return GetResponse(FtpResponses.NEED_TWO_FACTOR_CODE); } else { _currentUser = user; Root = _currentUser.GetHomeDir(); CurrentDirectory = Root; return GetResponse(FtpResponses.LOGGED_IN); } } else { return GetResponse(FtpResponses.NOT_LOGGED_IN); } }
/// <summary> /// ACCT Command - RFC 959 - Section 4.1.1 /// </summary> /// <param name="username"></param> /// <returns></returns> private Response Account(string twoFactorCode) { _currentUser = FtpUserStore.Validate(_username, _password, twoFactorCode); if (_currentUser != null) { Root = _currentUser.GetHomeDir(); CurrentDirectory = Root; return GetResponse(FtpResponses.LOGGED_IN); } else { return GetResponse(FtpResponses.NOT_LOGGED_IN); } }
public static IAccessMode GetAccessModeFor([NotNull] this IUnixPermissions permissions, [NotNull] IUnixOwner entity, [NotNull] FtpUser user) { var isUser = string.Equals(entity.Owner, user.Name, StringComparison.OrdinalIgnoreCase); var isGroup = user.IsInGroup(entity.Group); var canRead = (isUser && permissions.User.Read) || (isGroup && permissions.Group.Read) || permissions.Other.Read; var canWrite = (isUser && permissions.User.Write) || (isGroup && permissions.Group.Write) || permissions.Other.Write; var canExecute = (isUser && permissions.User.Execute) || (isGroup && permissions.Group.Execute) || permissions.Other.Execute; return(new GenericAccessMode(canRead, canWrite, canExecute)); }
/// <summary> /// Authenticates the specified username and password. /// </summary> /// <param name="username">The username.</param> /// <param name="password">The password.</param> /// <param name="user">The user.</param> /// <returns></returns> public abstract AuthenticationResult Authenticate(string username, string password, out FtpUser user);
public override bool UpdateFtpUser(FtpUser user) { //Do nothing return true; }
public override void UpdateUsedSpaceForUser(FtpUser user) { //Do nothing }
public override AuthenticationResult Authenticate(string username, string password, out FtpUser user) { lock (SyncRoot) { if (!m_UserDict.TryGetValue(username, out user)) return AuthenticationResult.NotExist; if ("*".Equals(user.Password)) return AuthenticationResult.Success; if (string.CompareOrdinal(password, user.Password) != 0) return AuthenticationResult.PasswordError; return AuthenticationResult.Success; } }
protected override Response HandleCommand(Command cmd) { Response response = null; FtpLogEntry logEntry = new FtpLogEntry { Date = DateTime.Now, CIP = ClientIP, CSUriStem = cmd.RawArguments }; if (!_validCommands.Contains(cmd.Code)) { response = CheckUser(); } // Reset rename from if we don't receive a rename to command. These must be issued back-to-back. if (cmd.Code != "RNTO") { _renameFrom = null; } if (response == null) { switch (cmd.Code) { case "USER": response = User(cmd.Arguments.FirstOrDefault()); break; case "PASS": response = Password(cmd.Arguments.FirstOrDefault()); logEntry.CSUriStem = "******"; break; case "CWD": response = ChangeWorkingDirectory(cmd.Arguments.FirstOrDefault()); break; case "CDUP": response = ChangeWorkingDirectory(".."); break; case "QUIT": response = GetResponse(FtpResponses.QUIT); break; case "REIN": _currentUser = null; _username = null; _dataClient = null; _currentCulture = CultureInfo.CurrentCulture; _currentEncoding = Encoding.Default; ControlStreamEncoding = Encoding.Default; response = GetResponse(FtpResponses.SERVICE_READY); break; case "PORT": response = Port(cmd.RawArguments); logEntry.CPort = _dataEndpoint.Port.ToString(CultureInfo.InvariantCulture); break; case "PASV": response = Passive(); logEntry.SPort = ((IPEndPoint)_passiveListener.LocalEndpoint).Port.ToString(CultureInfo.InvariantCulture); break; case "TYPE": response = Type(cmd.Arguments.FirstOrDefault(), cmd.Arguments.Skip(1).FirstOrDefault()); break; case "STRU": response = Structure(cmd.Arguments.FirstOrDefault()); break; case "MODE": response = Mode(cmd.Arguments.FirstOrDefault()); break; case "RNFR": _renameFrom = cmd.Arguments.FirstOrDefault(); response = GetResponse(FtpResponses.RENAME_FROM); break; case "RNTO": response = Rename(_renameFrom, cmd.Arguments.FirstOrDefault()); break; case "DELE": response = Delete(cmd.Arguments.FirstOrDefault()); break; case "RMD": response = RemoveDir(cmd.Arguments.FirstOrDefault()); break; case "MKD": response = CreateDir(cmd.Arguments.FirstOrDefault()); break; case "PWD": response = PrintWorkingDirectory(); break; case "RETR": response = Retrieve(cmd.Arguments.FirstOrDefault()); logEntry.Date = DateTime.Now; break; case "STOR": response = Store(cmd.Arguments.FirstOrDefault()); logEntry.Date = DateTime.Now; break; case "STOU": response = StoreUnique(); logEntry.Date = DateTime.Now; break; case "APPE": response = Append(cmd.Arguments.FirstOrDefault()); logEntry.Date = DateTime.Now; break; case "LIST": string p = cmd.Arguments.FirstOrDefault(); if (!string.IsNullOrEmpty(p)) { if (p.Contains("-al")) p = p.Replace("-al", string.Empty); if (string.IsNullOrEmpty(p)) p = null; } response = List(p ?? CurrentDirectory); logEntry.Date = DateTime.Now; break; case "SYST": response = GetResponse(FtpResponses.SYSTEM); break; case "NOOP": response = GetResponse(FtpResponses.OK); break; case "ACCT": response = Account(cmd.Arguments.FirstOrDefault()); break; case "ALLO": response = GetResponse(FtpResponses.OK); break; case "NLST": response = NameList(cmd.Arguments.FirstOrDefault() ?? CurrentDirectory); break; case "SITE": response = GetResponse(FtpResponses.NOT_IMPLEMENTED); break; case "STAT": response = GetResponse(FtpResponses.NOT_IMPLEMENTED); break; case "HELP": response = GetResponse(FtpResponses.NOT_IMPLEMENTED); break; case "SMNT": response = GetResponse(FtpResponses.NOT_IMPLEMENTED); break; case "REST": response = GetResponse(FtpResponses.NOT_IMPLEMENTED); break; case "ABOR": response = GetResponse(FtpResponses.NOT_IMPLEMENTED); break; // Extensions defined by rfc 2228 case "AUTH": response = Auth(cmd.Arguments.FirstOrDefault()); break; // Extensions defined by rfc 2389 case "FEAT": response = GetResponse(FtpResponses.FEATURES); break; case "OPTS": response = Options(cmd.Arguments); break; // Extensions defined by rfc 3659 case "MDTM": response = FileModificationTime(cmd.Arguments.FirstOrDefault()); break; case "SIZE": response = FileSize(cmd.Arguments.FirstOrDefault()); break; // Extensions defined by rfc 2428 case "EPRT": response = EPort(cmd.RawArguments); logEntry.CPort = _dataEndpoint.Port.ToString(CultureInfo.InvariantCulture); break; case "EPSV": response = EPassive(); logEntry.SPort = ((IPEndPoint)_passiveListener.LocalEndpoint).Port.ToString(CultureInfo.InvariantCulture); break; // Extensions defined by rfc 2640 case "LANG": response = Language(cmd.Arguments.FirstOrDefault()); break; default: response = GetResponse(FtpResponses.NOT_IMPLEMENTED); break; } } logEntry.CSMethod = cmd.Code; logEntry.CSUsername = _username; logEntry.SCStatus = response.Code; _log.Info(logEntry); return response; }
/// <summary> /// Updates the used space for user. /// </summary> /// <param name="user">The user.</param> public abstract void UpdateUsedSpaceForUser(FtpUser user);
public void Remove(FtpUser str) { base.List.Remove(str); }
public void Add(FtpUser str) { base.List.Add(str); }
public override CreateUserResult CreateFtpUser(FtpUser user) { //Do nothing return CreateUserResult.UnknownError; }
public bool Contains(FtpUser str) { return base.List.Contains(str); }