编译 vsftpd 3.0.0 失败

标签 c linux ftp makefile vsftpd

我最近尝试编译 vsftpd 3.0.0,但由于以下编译错误而失败:

gcc -c seccompsandbox.c -O2 -fPIE -fstack-protector --param=ssp-buffer-size=4 -Wall -W -               Wshadow -Werror -Wformat-security -D_FORTIFY_SOURCE=2  -idirafter dummyinc
seccompsandbox.c:63: error: ‘O_DIRECTORY’ undeclared here (not in a function)
seccompsandbox.c:63: error: ‘O_CLOEXEC’ undeclared here (not in a function)
make: *** [seccompsandbox.o] Error 1

由于我对来源和环境不太熟悉,我不知道如何解决这个问题。我想这与新的 seccomp 过滤器沙箱有关。谷歌搜索显示该错误是可重现的,但没有提交解决方案。

我的 Linux 内核版本是 2.6.32-5-amd64,我使用的是 gcc 版本 4.4.5 (Debian 4.4.5-8)

欢迎任何想法。 (如果您需要更多信息,请随时询问)

最佳答案

至少在 Debian 上,仅当定义了 _GNU_SOURCE 时才定义 O_DIRECTORYO_CLOEXEC

尽管在当前 vsftp 版本中为某些模块设置了 _GNU_SOURCE,但一般情况下并未设置。

作为解决方法,您可以使用以下补丁:

diff -Naur vsftpd-3.0.0.orig/seccompsandbox.c vsftpd-3.0.0/seccompsandbox.c
--- vsftpd-3.0.0.orig/seccompsandbox.c       2012-04-05 00:41:51.000000000 +0200
+++ vsftpd-3.0.0/seccompsandbox.c  2012-06-30 15:25:52.000000000 +0200
@@ -11,7 +11,7 @@
 #include "seccompsandbox.h"

 #if defined(__linux__) && defined(__x86_64__)
-
+#define _GNU_SOURCE
 #include "session.h"
 #include "sysutil.h"
 #include "tunables.h

免责声明:应用此补丁可以使当前的 vsftp 版本进行编译,我现在知道创建的二进制文件是否正常工作。

关于编译 vsftpd 3.0.0 失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11088276/

相关文章:

php - SFTP 中的 ftp_chdir 等效项是什么?

Java - 尝试创建简单的文件传输服务时遇到问题

c - 双指针c内存故障

c - GSL 多个错误处理程序定义链接时出错

PHP exec命令写入服务器

Linux命令发送HTTP API

C 程序打印最后一行两次(文件 I/O)

c 到 mips 源和目标指针

linux - 如何在shell脚本中查看和使用cp命令的状态?

linux - 通过 FTP 命令或使用 FTP 命令的 shell 脚本上传到 Linux 服务器后的 TAR 大小差异