SQLユーザーと一緒にProFTPdを使用し、在庫SQL構成を使用しようとしています。
現在、奇妙な文字列エスケープの問題がありますが、SELECTではなく "tally"テーブルのINSERTでのみ機能します。
私のセッションは
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。