proftpd put:访问失败:552 791230988:设备上没有剩余空间(test.bin)

proftpd put:访问失败:552 791230988:设备上没有剩余空间(test.bin)

当我上传一个文件(比如 755M)时,proftpd 报告“设备上没有剩余空间”

lftp localhost:/> put test.bin put:访问失败:552 791230988:设备上没有剩余空间(test.bin)

但是我运行 /bin/df -h,我可以看到仍然有 414G 可用。我的 ftp 根目录位于 /home/ftproot

Filesystem     Type      Size  Used Avail Use% Mounted on
/dev/sda4      ext4      1.8T  1.3T  414G  75% /home

所以我认为proftpd源代码存在一些错误。

在我检查了代码之后,找到了根本原因。

proftpd-dfsg-1.3.5~rc3/modules/mod_xfer.c +2381

 2380     } else {
 2381         if (requested_sz > avail_sz) {
 2382         pr_log_debug(DEBUG5, "%s requested %" PR_LU " bytes, only %" PR_LU
 2383           " bytes available on '%s'", cmd->argv[0], (pr_off_t) requested_sz,
 2384           (pr_off_t) avail_sz, path);
 2385         pr_response_add_err(R_552, "%s: %s", cmd->arg, strerror(ENOSPC));
 2386         return PR_ERROR(cmd);
 2387       }
 2388     }
 2389   }

在第 2381 行中,requesed_sz(791,230,988) 的单位是字节,但 avail_sz(435,293,500) 的单位是 kb

参见:proftpd-dfsg-1.3.5~rc3/src/fsio.c +4263

 4259     /* In order to return a size in KB, as get_fs_size() does, we need
 4260      * to divide by 1024.
 4261      */
 4262     *fs_size = (((off_t) fs.f_bavail * (off_t) fs.f_frsize) / 1024);

为了修复这个错误:

if (requested_sz > avail_sz) {

必须修改为

if (requested_sz > avail_sz * 1024) {

但是我不知道如何向 proftpd 开发团队报告错误,谁可以提交它 proftpd?

相关内容