LINUX.ORG.RU

Синтаксическая ошибка MySql при настройке ProFTPD

 , , ,


0

1

Решил поставить фтп сервер (proftpd) по мануалу http://demon.of.by/blog/linux-admin/how-to-setup-prof..

Дестрибутив Debian 7. 3.2.0-4-686-pae #1 SMP Debian 3.2.68-1+deb7u1 i686 GNU/Linux

Во первых если происходит sql запрос - SQLAuthenticate users groups то все нормально, если же происходит запрос SQLAuthenticate users_ftp groups т.е. содержит символ '_' , то есть если таблица называется users_ftp то он не запускает сервер и пишет ошибку. Если называется таблица users то все нормально, сервер запускается. При том что запрос в конфиге сходится с названием таблицы в БД (если запрос users, то и таблица в БД называется users, если запрос с users_ftp, то и в БД таблица называется usets_ftp. для двух запросов специально переименовывал в БД) С одним запускается с другим нет Названия и в конфиге и в БД менял по разному ( кто все таки не понял))))) Но это второстепенная проблема.

Основная состоит в том, что MySql выдает ошибку 1064 т.е. не правильный синтаксис запроса. Собственно ошибка из лога:

2015-07-02 23:52:01,534 mod_sql/4.3[22941]: error: '1064' 
2015-07-02 23:52:01,534 mod_sql/4.3[22941]: message: 'You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right 
syntax to use near '; SET `last_login`=UNIX_TIMESTAMP(), `login_count`=`login_count`+1 WHERE `userna' at line 1' 

при этом как в логе написанно WHERE `userna' at line 1' 'userna' такого в конфиге нет, это он обрубает строчку сам ( видимо ограничение на размер сообщения с ошибкой)

Сам sql запрос:

# Записываем удачные логины в БД. 
SQLLog PASS counter_login 
SQLNamedQuery counter_login UPDATE «`last_login`=UNIX_TIMESTAMP(), `login_count`=`login_count`+1 \ 
WHERE `username`='%u'» `users`; 

символ \ это походу дела переход на другую строчку. одинаковая ошибка и с ним и без него. У меня подозрение, что мускул ругается как раз на запросы с символом '_' .

Версия MySql: mysql Ver 14.14 Distrib 5.5.43, for debian-linux-gnu (i686) using readline 6.3' )

Версия Proftpd: ProFTPD Version 1.3.5

Ответ на: комментарий от anonymous

ну если это mysql там не должно быть никаких кавычек, все равно без полного запроса это гадания. Так что пусть тс выкладывает sql запросы в норм виде полностью а не из непонятного мана.

invokercd ★★★★ ()

Скорее всего ошибка не в запросе SET ..., а в том, что перед ним (например он не завершен).

goingUp ★★★★★ ()
Ответ на: комментарий от invokercd

Собственно вот сам запрос, который записывается в sql конфиг Proftpd.

# Записываем удачные логины в БД. SQLLog PASS counter_login SQLNamedQuery counter_login UPDATE «`last_login`=UNIX_TIMESTAMP(), `login_count`=`login_count`+1 \ WHERE `username`='%u'» `users_ftp`

В БД создана таблица

-- -- Структура таблицы `access_ftp` -- CREATE TABLE IF NOT EXISTS `access_ftp` ( `id` int(32) NOT NULL auto_increment, `timestamp` int(15) NOT NULL, `user_name` varchar(64) NOT NULL, `file_and_path` tinytext NOT NULL, `bytes` int(15) NOT NULL default '0', `client_name` varchar(127) NOT NULL, `client_IP` varchar(15) NOT NULL, `client_command` varchar(5) NOT NULL, `send_time` varchar(9) NOT NULL default '0', PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='Логи доступа к серверу FTP';

Psyhero ()
Ответ на: комментарий от Psyhero

запрос update неверный (может лет 10 назад это было и верно):

правильный запрос должен быть примерно такой:

UPDATE users_ftp set `last_err_login`=UNIX_TIMESTAMP(), `err_login_count`=`err_login_count`+1 WHERE `username`='%U';

https://dev.mysql.com/doc/refman/5.0/en/update.html

и это, lorcode пора бы осилить

invokercd ★★★★ ()
Последнее исправление: invokercd (всего исправлений: 1 )

Прошу прощения за вмешательство, но чтобы не плодить темы задам вопрос здесь.
Может кто знает как в proftpd относительно заданного каталога ограничить максимально возможное кол-во вложенных подкаталогов. Т.е. чтобы глубже определенного уровня вложенности новый каталог создать было нельзя.
Специальной директивы, как я понял нет, но, вероятно, может пригодиться директива DenyFilter, вот только какое регулярное выражение применить я недопру.

tm4ig ()
Ответ на: комментарий от invokercd

мой запрос был про таблицу удачных логинов (не валидный запрос) - # Записываем удачные логины в БД.

SQLLog PASS counter_login
SQLNamedQuery counter_login UPDATE >«`last_login`=UNIX_TIMESTAMP(), `login_count`=`login_count`+1 >\
WHERE `username`='%u'» `users`;

ты написал, на сколько я понял запрос для не удачных логинов -

UPDATE users_ftp set `last_err_login`=UNIX_TIMESTAMP(), >`err_login_count`=`err_login_count`+1 WHERE `username`='%U';

Из мануала с НЕ валидным запросом про НЕ удачные логины -

# Записываем также неудачные логины в БД
SQLLog ERR_PASS counter_err
SQLNamedQuery counter_err UPDATE >«`last_err_login`=UNIX_TIMESTAMP(), >`err_login_count`=`err_login_count`+1 \
WHERE `username`='%U'» `users`

На сколько я понял нужно просто подкорректировать запрос для таблицы удачных или не удачных. Это ладно.

Я попробовал и так и так. Ошибка одна и та же:

2015-07-04 01:17:40,125 mod_sql/4.3[27896]: error: '1064'
2015-07-04 01:17:40,125 mod_sql/4.3[27896]: message: 'You >have an error in your SQL syntax; check the manual that >corresponds to your MySQL server version for the right
syntax to use near 'set SET users' at line 1'

при запросе:

# Записываем удачные логины в БД.
SQLLog PASS counter_login
SQLNamedQuery counter_login UPDATE users set >`last_login`=UNIX_TIMESTAMP(), `login_count`=`login_count`+1 >WHERE `username`='%U';

Может я что то недопонял)))

Psyhero ()
Ответ на: комментарий от Psyhero

Ну запросы в конфиге на sql, что бы понять в чем ошибка в запросе к MySql нужен полный запрос.

Вообще рекомендую найти более свежий ман.

invokercd ★★★★ ()
Ответ на: комментарий от invokercd

Так сам сервер то работает. Задача такова, что нужно писать логи сервера в БД. А если по конкретней, то логи успешной авторизации, логи неудачной авторизации, Логи залитых, скачанных файлов. В общем считай всю статистику.

Psyhero ()
Ответ на: комментарий от Psyhero

Ну если задача такова - тогда публикуй в Job - кто то может и сделает :D

За тебя разгребать и угадывать конфиги никто не будет

invokercd ★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.