![奇怪的 ProFTPd 和 mod_sql 字符串转义](https://linux22.com/image/180169/%E5%A5%87%E6%80%AA%E7%9A%84%20ProFTPd%20%E5%92%8C%20mod_sql%20%E5%AD%97%E7%AC%A6%E4%B8%B2%E8%BD%AC%E4%B9%89.png)
我正在/尝试将 ProFTPd 与 SQL 中的用户一起使用并使用库存 sql 配置。
我目前遇到奇怪的字符串转义问题,但仅适用于 INSERT 到“tally”表中,不适用于 SELECT。
我的会议是
SQLNamedQuery get-quota-tally SELECT "name,quota_type,bytes_in_used,bytes_out_used,bytes_xfer_used,files_in_used,files_out_used,files_xfer_used FROM ftp_quota_tally WHERE name = '%{0}' AND quota_type = '%{1}'"
SQLNamedQuery insert-quota-tally FREEFORM "INSERT INTO ftp_quota_tally (name,quota_type,bytes_in_used,bytes_out_used,bytes_xfer_used,files_in_used,files_out_used,files_xfer_used) VALUES (%{0}, %{1}, %{2}, %{3}, %{4}, %{5}, %{6}, %{7})"
sql 查询日志显示了 SELECT 的这一点:
2020-09-15 03:53:37,317 mod_sql/4.5[19831]: query "SELECT name,quota_type,bytes_in_used,bytes_out_used,bytes_xfer_used,files_in_used,files_out_used,files_xfer_used FROM ftp_quota_tally WHERE name = 'USERNAME_HERE' AND quota_type = 'user'"
没关系,但它显示
2020-09-15 03:53:37,321 mod_sql/4.5[19831]: query "INSERT INTO ftp_quota_tally (name,quota_type,bytes_in_used,bytes_out_used,bytes_xfer_used,files_in_used,files_out_used,files_xfer_used) VALUES (\'USERNAME_HERE\', \'user\', 0.000000, 0.000000, 0.000000, 0, 0, 0)"
ProFTPd 使用 . 转义 ${0} 和 ${1} \'
。
笔记:
(1)我已经尝试过使用这个sql查询
SQLNamedQuery insert-quota-tally FREEFORM "INSERT INTO ftp_quota_tally (name,quota_type,bytes_in_used,bytes_out_used,bytes_xfer_used,files_in_used,files_out_used,files_xfer_used) VALUES ('%{0}', '%{1}', %{2}, %{3}, %{4}, %{5}, %{6}, %{7})"
这导致更多人逃跑
2020-09-15 04:15:58,490 mod_sql/4.5[20643]: query "INSERT INTO ftp_quota_tally (name,quota_type,bytes_in_used,bytes_out_used,bytes_xfer_used,files_in_used,files_out_used,files_xfer_used) VALUES ('\'USERNAME_HERE\'', '\'user\'', 0.000000, 0.000000, 0.000000, 0, 0, 0)"
(2)我也尝试过非FREEFORM方式
INSERT "%{0}, %{1}, %{2}, %{3}, %{4}, %{5}, %{6}, %{7}" ftp_quota_tally
这也会导致与我的 FREEFORM 方式相同的奇怪转义。
有任何想法吗?
答案1
从 1.3.7 版本开始,该问题的原因被查明是 ProFTPD 中的一个错误;看问题#1149。