Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.06.2014, 12:30   #1
noname_06
Пользователь
 
Регистрация: 18.01.2009
Сообщений: 49
По умолчанию Indy ftp server

Почему компонент ftpserver не генерирует события OnUserLogin и OnAfterUserLogin?
noname_06 вне форума Ответить с цитированием
Старый 16.06.2014, 12:40   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

С чего ты решил что не генерирует?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 16.06.2014, 14:08   #3
noname_06
Пользователь
 
Регистрация: 18.01.2009
Сообщений: 49
По умолчанию

Ну как бы это не я решил)
Цитата:
Сообщение от Stilet Посмотреть сообщение
Вау! Наконец то верная мысль )))
А то понимаешь ли и "проблема в синхронизации потоков" и "переносить код в событие IdFTPSrvUserLogin"
Директорию юзеру лучше всего задавать в OnListDirectory. Все равно получение списка файлов идет через это событие. Вот там и прибавляй свое c:\users\
noname_06 вне форума Ответить с цитированием
Старый 16.06.2014, 14:40   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
как бы это не я решил)
Ну как бы я не об этом толковал )
OnUserLogin по идее направленна на аутентификацию, зачем ее напрягать действиями, которые к этому событию не присущи. Клиент ФТП все равно запрашивает каталог через LIST или CD, это уже другие события.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 16.06.2014, 15:58   #5
noname_06
Пользователь
 
Регистрация: 18.01.2009
Сообщений: 49
По умолчанию

Предположим) Хотя не вижу иных причин задавать там директории, кроме религиозных. По факту же получается что код, расположенный в данных процедурах не выполняется. Проверял установкой breakpoint'ов.
Еще такая мысль: зачем вообще нужно задавать HomeDir и CurrentDir, если они все равно подменяются в OnListDirectory?
noname_06 вне форума Ответить с цитированием
Старый 16.06.2014, 16:00   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Проверял установкой breakpoint'ов.
Значит клиент к тебе без авторизации проходит. У меня эти события срабатывают без проблем.
Цитата:
зачем вообще нужно задавать HomeDir и CurrentDir, если они все равно подменяются в OnListDirectory?
Имеешь ввиду на клиенте? или на сервере для каждого аккаунта?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 16.06.2014, 16:18   #7
noname_06
Пользователь
 
Регистрация: 18.01.2009
Сообщений: 49
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Значит клиент к тебе без авторизации проходит.
В том то и хохма, что клиентское приложение проходит авторизацию. При этом для любого имени пользователя возвращает 331 User name okay, need password. Но сразу отказывает 530 Not logged in. Your password is being rejected, contact the server administrator.
Код:
procedure TfMain.IdFTPSrvUserLogin(ASender: TIdFTPServerContext;
  const AUsername, APassword: string; var AAuthenticated: Boolean);
var
  tmp : string;
begin
  AAuthenticated := IdUsrMngr.AuthenticateUser(AUsername, APassword);
  
  ShowMessage(ausername);
  redtLog.Lines.Add('ASender.Username: ' + ASender.Username);
  tmp := Options.StoredPath + ASender.Username + '/';

  if not DirectoryExists(tmp) then
    if not ForceDirectories(tmp) then
      MessageDlg('Невозможно создать директорию для пользователя ' + ASender.Username,
                 mtError, [mbYes], 0);
  ASender.HomeDir := tmp;
  ASender.CurrentDir := tmp;
end;
Нет ни ShowMessage(), ни текста в richedit redtLog.
В UserManager добавлен пробник user1 с паролем 1. Пускает только по этой связке.
Цитата:
Сообщение от Stilet Посмотреть сообщение
Имеешь ввиду на клиенте? или на сервере для каждого аккаунта?
Пока мучаю приложение-сервер. Для проверки захожу с total commander.

Последний раз редактировалось noname_06; 16.06.2014 в 16:25.
noname_06 вне форума Ответить с цитированием
Старый 16.06.2014, 16:40   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Код:
procedure TForm1.FtpServerUserAccount(ASender: TIdFTPServerContext;
  const AUsername, APassword, AAcount: string; var AAuthenticated: Boolean);
begin
 AAuthenticated:=(AUsername=_user)and(APassword=_pass);
end;

procedure TForm1.FtpServerUserLogin(ASender: TIdFTPServerContext;
  const AUsername, APassword: string; var AAuthenticated: Boolean);
begin
 AAuthenticated:=(AUsername=_user)and(APassword=_pass);
end;
И все у меня проходит. События эти срабатывают. Возможно они действуют в паре.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
FTP server oteccc Работа с сетью в Delphi 4 14.12.2013 22:56
FTP и SSL (indy 9) Happiness_Cookie Работа с сетью в Delphi 0 21.08.2013 09:04
Socks ftp indy ujanin Работа с сетью в Delphi 1 08.09.2011 23:08
FTP-Server, C#. Arhe Общие вопросы .NET 5 11.09.2009 17:05
Создание чата с через FTP Server с помощью компонентов INDY 9 dani92 Работа с сетью в Delphi 1 04.08.2009 05:22