Exemplo n.º 1
0
        private bool JobPass(Session session, String password)
        {
            //�܂�USER�R�}���h���������Ă��Ȃ��ꍇ
            if (session.UserName == null)
            {
                session.StringSend("503 Login with USER first.");
                return(true);
            }

            //���[�U��񌟍�
            session.OneUser = _listUser.Get(session.UserName);

            if (session.OneUser == null)
            {
                //�����ȃ��[�U�̏ꍇ
                Logger.Set(LogKind.Secure, session.SockCtrl, 14, string.Format("USER:{0} PASS:{1}", session.UserName, password));
            }
            else
            {
                //�p�X���[�h�m�F
                bool success = false;
                // *�̏ꍇ�AAnonymous�ڑ��Ƃ��ď�������
                if (session.OneUser.Password == "*")
                {
                    //oneUser.UserName = string.Format("{0}(ANONYMOUS)",oneUser.UserName);
                    Logger.Set(LogKind.Normal, session.SockCtrl, 5, string.Format("{0}(ANONYMOUS) {1}", session.OneUser.UserName, password));
                    success = true;
                }
                else if (session.OneUser.Password == password)
                {
                    Logger.Set(LogKind.Secure, session.SockCtrl, 6, string.Format("{0}", session.OneUser.UserName));
                    success = true;
                }

                if (success)
                {
                    //�ȉ��A�p�X���[�h�F�؂ɐ��������ꍇ�̏���
                    //�z�[���f�B���N�g���̑��݊m�F
                    //�T�[�o�N���i�^�c�j���Ƀf�B���N�g�����폜����Ă���”\��������̂ŁA���̎��_�Ŋm�F����
                    if (Util.Exists(session.OneUser.HomeDir) != ExistsKind.Dir)
                    {
                        //�z�[���f�B���N�g�������݂��܂���i�������p���ł��Ȃ����ߐؒf���܂���
                        Logger.Set(LogKind.Error, session.SockCtrl, 2, string.Format("userName={0} hoemDir={1}", session.OneUser.UserName, session.OneUser.HomeDir));
                        return(false);
                    }

                    //���O�C������ �i�J�����g�f�B���N�g���́A�z�[���f�B���N�g���ŏ����������j
                    session.CurrentDir = new CurrentDir(session.OneUser.HomeDir, _listMount);

                    session.StringSend(string.Format("230 User {0} logged in.", session.UserName));
                    return(true);
                }
                //�ȉ��F�؎��s����
                Logger.Set(LogKind.Secure, session.SockCtrl, 15, string.Format("USER:{0} PASS:{1}", session.UserName, password));
            }
            var reservationTime = (int)Conf.Get("reservationTime");

            //�u���[�g�t�H�[�X�h�~�̂��߂̃E�G�C�g(5�b)
            for (int i = 0; i < reservationTime / 100 && IsLife(); i++)
            {
                Thread.Sleep(100);
            }
            //�F�؂Ɏ��s�����ꍇ�̏���
            session.StringSend("530 Login incorrect.");
            return(true);
        }
Exemplo n.º 2
0
        private bool JobPass(Session session, String password)
        {
            //まだUSERコマンドが到着していない場合
            if (session.UserName == null)
            {
                session.StringSend("503 Login with USER first.");
                return(true);
            }

            //ユーザ情報検索
            session.OneUser = _listUser.Get(session.UserName);

            if (session.OneUser == null)
            {
                //無効なユーザの場合
                Logger.Set(LogKind.Secure, session.SockCtrl, 14, string.Format("USER:{0} PASS:{1}", session.UserName, password));
            }
            else
            {
                //パスワード確認
                bool success = false;
                // *の場合、Anonymous接続として処理する
                if (session.OneUser.Password == "*")
                {
                    //oneUser.UserName = string.Format("{0}(ANONYMOUS)",oneUser.UserName);
                    Logger.Set(LogKind.Normal, session.SockCtrl, 5, string.Format("{0}(ANONYMOUS) {1}", session.OneUser.UserName, password));
                    success = true;
                }
                else if (session.OneUser.Password == password)
                {
                    Logger.Set(LogKind.Secure, session.SockCtrl, 6, string.Format("{0}", session.OneUser.UserName));
                    success = true;
                }

                if (success)
                {
                    //以下、パスワード認証に成功した場合の処理
                    //ホームディレクトリの存在確認
                    //サーバ起動(運営)中にディレクトリが削除されている可能性があるので、この時点で確認する
                    if (Util.Exists(session.OneUser.HomeDir) != ExistsKind.Dir)
                    {
                        //ホームディレクトリが存在しません(処理が継続できないため切断しました
                        Logger.Set(LogKind.Error, session.SockCtrl, 2, string.Format("userName={0} hoemDir={1}", session.OneUser.UserName, session.OneUser.HomeDir));
                        return(false);
                    }

                    //ログイン成功 (カレントディレクトリは、ホームディレクトリで初期化される)
                    session.CurrentDir = new CurrentDir(session.OneUser.HomeDir, _listMount);

                    session.StringSend(string.Format("230 User {0} logged in.", session.UserName));
                    return(true);
                }
                //以下認証失敗処理
                Logger.Set(LogKind.Secure, session.SockCtrl, 15, string.Format("USER:{0} PASS:{1}", session.UserName, password));
            }
            var reservationTime = (int)Conf.Get("reservationTime");

            //ブルートフォース防止のためのウエイト(5秒)
            for (int i = 0; i < reservationTime / 100 && IsLife(); i++)
            {
                Thread.Sleep(100);
            }
            //認証に失敗した場合の処理
            session.StringSend("530 Login incorrect.");
            return(true);
        }