我最近尝试编译 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_DIRECTORY
和 O_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/