【问题标题】:Where does pure-ftpd call its uploadscript?pure-ftpd 在哪里调用它的uploadscript?
【发布时间】:2016-04-01 23:04:00
【问题描述】:

我一直在看pure-ftpd-1.0.42源代码:

https://github.com/jedisct1/pure-ftpd

试图找到它何时触发:

https://github.com/jedisct1/pure-ftpd/blob/master/src/pure-uploadscript.c

即文件上传后什么时候运行上传脚本。

如果您查看src/ftp_parser.cdostor 方法是文件开始上传过程的方式。然后它转到ul_send 然后ul_handle_data 但我在这一点上迷路了。我从来没有看到它说,好的,这个文件现在已经上传了,是时候打电话给uploadscript了。谁能给我看看这条线?

【问题讨论】:

    标签: c ftp ftp-server pureftpd


    【解决方案1】:

    src/ftpd.cpureftpd_start() 函数中,pure-ftpd 启动并解析其所有命令行选项。它打开一个到pure-uploadscript的管道,如果配置的话; herepure-ftpd 不会在每次上传时调用上传脚本(并产生fork()exec() 开销per-upload),而是让上传脚本进程单独运行,并将上传的文件发送给它通过管道的路径。

    知道了这一点,我们就可以使用upload_pipe_push() 函数查找该管道的写入位置。有趣的是,该函数被displayrate() 函数调用为heresrc/ftpd.c 文件中的dostor()doretr() 都调用了该函数。

    希望这会有所帮助!

    【讨论】:

    • 这确实有帮助,谢谢。现在我想弄清楚它是如何知道何时调用upload_pipe_push() 是安全的。如果用户正在上传一个大文件怎么办。它完成了 99%,并且连接断开了。用户在一小时后重新连接并使用 app 命令上传最后 1%。 pureftpd 如何知道在调用 upload_pipe_push 之前等待最后 1%(即一个小时)?
    • 我不确定pure-ftpd 能否知道这一点,因为 FTP 不允许客户端提前告诉服务器客户端有多少数据将发送。也就是说,pure-ftpd 可以知道数据连接是否因“正常”或异常原因而断开,并且可能会在“正常”情况下调用 upload_pipe_push()
    • 很酷,如果我要尝试重新创建 pureftp 的逻辑,我应该等待多长时间才能假设文件在异常删除后完成?是否有可配置的超时时间?
    • 不,因为服务器无法知道客户端是否真的会尝试重新连接/重新发送其余数据。这种情况没有“好的”超时。
    • 我刚试了一下。我上传了 1276541542 字节文件的 1% 或大约 15 兆。然后我异常终止了连接。然后我等了一个小时。然后我发出了一个APPE命令并上传了文件的其余部分。上传完成后服务器上文件的最终大小为 1292326238。即比应有的多 15 兆。损坏的文件。 pureftp 对此有什么解决方案吗?
    猜你喜欢
    • 1970-01-01
    • 2017-12-19
    • 1970-01-01
    • 2016-02-13
    • 2020-02-02
    • 2014-03-20
    • 2014-07-18
    • 2021-10-21
    • 2022-10-13
    相关资源
    最近更新 更多