/// <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);
 }
Beispiel #5
0
        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);
        }
Beispiel #8
0
 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
        }
Beispiel #11
0
        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();
            }
        }
Beispiel #12
0
        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);
     }
 }
Beispiel #14
0
        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);
Beispiel #19
0
        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);
            }
        }
Beispiel #24
0
        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);
Beispiel #31
0
 public void Remove(FtpUser str)
 {
     base.List.Remove(str);
 }
Beispiel #32
0
 public void Add(FtpUser str)
 {
     base.List.Add(str);
 }
 public override CreateUserResult CreateFtpUser(FtpUser user)
 {
     //Do nothing
     return CreateUserResult.UnknownError;
 }
Beispiel #34
0
 public bool Contains(FtpUser str)
 {
     return base.List.Contains(str);
 }