- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我有一个 Apache 模块可以在 CentOS 上正常工作,但在 Ubuntu 上会失败。我已经将问题追溯到这样一个事实,即请求记录在 request_rec
结构中包含文件名的 NULL 值,Apache 作为参数传递给我在模块中定义的 Hook 函数检查正在处理的文件的文件类型。
即,
extern "C" module AP_MODULE_DECLARE_DATA MyModule = {
STANDARD20_MODULE_STUFF, // initializer
NULL, // create per-dir config
NULL, // merge per-dir config
NULL, // server config
NULL, // merge server config
MyCommandTable, // command table
MyRegisterHooks // register hooks
};
...与
static void MyRegisterHooks(apr_pool_t *p)
{
ap_hook_child_init(MyPluginInit, NULL, NULL, APR_HOOK_MIDDLE);
ap_hook_type_checker(MyCheckAppFileType, NULL, NULL, APR_HOOK_MIDDLE);
ap_hook_handler(MyFileHandler,NULL,NULL,APR_HOOK_MIDDLE);
}
... 最后是罪魁祸首函数:
static int MyCheckAppFileType(request_rec *ap_req)
{
if(ap_req == NULL)
{
return DECLINED; // Not reached
}
if(ap_req->filename == NULL)
{
return DECLINED; // HERE is the problem ... Why is ap_req->filename NULL?
// On CentOS it is not NULL, only on Ubuntu.
}
// ...
}
我在 Ubuntu 和 CentOS 上都使用 Apache 2.2,并且我在两个系统上独立地从头构建了模块。
更多信息~3 个月后:我发现在 CentOS 上构建模块,然后将二进制文件复制到 Ubuntu,并且它可以工作。采用相同的代码并在 Ubuntu 上构建它会在运行时导致上述故障。因此,代码似乎不一定是问题所在——或者至少编译器在两个系统上的处理方式不同导致 CentOS 构建成功但 Ubuntu 构建失败。
最佳答案
我刚才遇到了一个几乎相同的问题。我正在使用其他人编写的模块。在一台测试机器上,该模块正确执行 authN 和 authZ。在另一台机器上,r->filename
在 auth checker hook 中是 NULL
。你的问题首先出现在我的谷歌搜索中。
在我的案例中,我将其归因于 ap_set_module_config
的错误使用。代码看起来像:
ap_set_module_config(r, &auth_my_module, attrs);
ap_set_module_config
的源代码是这样说的:
/**
* Generic accessors for other modules to set at their own module-specific
* data
* @param conf_vector The vector in which the modules configuration is stored.
* usually r->per_dir_config or s->module_config
* @param m The module to set the data for.
* @param val The module-specific data to set
*/
AP_DECLARE(void) ap_set_module_config(ap_conf_vector_t *cv, const module *m,
void *val);
我将对 ap_set_module_config
的调用更改为:
ap_set_module_config(r->per_dir_config, &auth_my_module, attrs);
就像变魔术一样,r->filename
在 auth checker hook 中不再是 NULL
。我是编写 apache 模块的新手,所以我需要弄清楚这到底是什么意思,但我很高兴我弄清楚了问题出在哪里。您可以检查您的代码以查看您如何调用 ap_set_module_config
。
编辑:我应该补充一点,我通过添加调试语句来跟踪这个问题,这些语句准确地显示了 request_rec
结构的 filename
字段变成了 NULL
。对我来说,它在我定义的钩子(Hook)内从有效变为 NULL
。
祝你好运!
关于c++ - 为什么在我的 Apache 2.2 模块中调用 ap_hook_type_checker 函数时 request_rec::filename NULL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7115671/
我有名为 xxx.java.i、xxx.java.d、xxx.jar.i 的文件。我知道这些文件与 Java 有某种关系。这个扩展是什么意思以及它的用途是什么?它与 .class 扩展名的类型相同吗?
我的命名尽量在语法上正确*。我一直使用 filename 而不是 fileName。 java 约定似乎也使用这个,但 FxCop 更喜欢 fileName。 有一个discussion on Wik
来自MISRA-C 2004 : 19.3 (req): The '#include' directive shall be followed by either a or "filename" s
我有一个 SKScene 类,我需要在其中实现一个自定义初始化程序来覆盖 SKScene 父类(super class) SKNode 的初始化程序 init(fileNamed: fileNamed
在 C 和 C++ 编程语言中,在 include 中使用尖括号和使用引号有什么区别?声明,如下? #include #include "filename" 最佳答案 实际上,区别在于预处理器搜索包
我想解压一个文件,例如使用 shell 命令将“tar123.tar.gz”复制到目录/myunzip/tar123/”。 tar -xf tar123.tar.gz 将解压缩文件,但在与我工作的目录
我是 C 语言新手,我知道这两个命令都完成相同的任务,但是其中一个命令是否会执行与另一个命令不同的操作? 最佳答案 首先,如果您使用 make,那么对于 hello.c,您将调用 make 作为 ma
我正在编写一个程序,它将文件名列表存储为字符串数组。当我将其声明为 char *filenames[1] 我没有错误......但是当我这样做时 char *filenames 我遇到了一些错误。不在
我在将 Appirater 集成到我的应用程序时遇到了一些问题。我已经正确添加了所有必要的文件,并拥有正确的代码(我认为),但是在尝试将其实现到我的 AppDelegate.m 文件中时出现错误。当我
在 include 中使用尖括号和引号有什么区别?指令? #include <filename> #include "filename"
我目前正在寻找一种批量获取变量并仅解析文件名的方法。 例如,我将来自另一个应用程序的 -s 参数传递给我的批处理文件,该参数随后被设置为我的源变量。源文件变量通常包含如下内容:C:\Program F
在 GNU Makefile(在 Ubuntu Linux 系统上)中,如何删除列表中每个文件名的文件名后缀,以便在第一个点处截断文件名? 假设我有 NAMES = file1.a.b.c file2
我正在尝试从源代码安装rtorrent,但是在编译时出现错误。我正在使用新的Ubuntu 20.04 VM。 libtorrent安装 sudo apt update sudo apt upgrade
在 GNU Makefile(在 Ubuntu Linux 系统上)中,如何删除列表中每个文件名的文件名后缀,以便在第一个点处截断文件名? 假设我有 NAMES = file1.a.b.c file2
1-intro-to deepleanring and computer visionk.MKV 2.Kaggle Deep Learning - YouTube.MP4 Convolutional
我希望 gvim 始终在单独的窗口中打开并立即返回命令提示符。换句话说我想要 gvim filename 与相同 gvim filename & 看来我应该可以用别名来做到这一点。别名是否有特殊的通配
以下代码发送一个 GET 请求,该请求的响应应该在客户端 (Chrome) 上启动文件下载过程。 $.ajax({ type: "GET", traditional: true, asyn
我有一堆 filename.bz2.gz 的文件,我想将其转换为 filename.gz。 有什么帮助吗? 谢谢 最佳答案 有了您的文件名*.bz2.gz,我假设该文件是使用以下压缩顺序创建的: ec
这个问题在这里已经有了答案: 关闭 11 年前。 Possible Duplicate: Reference - What does this symbol mean in PHP? 我正在制作一个
如何合并 abc.mp4.tmp 与实际 交换文件abc.mp4 文件。我试图使用 Wowza Media server 3.6 录制现场事件,但录制的文件在最后一刻没有正确混合。 abc.mp4.t
我是一名优秀的程序员,十分优秀!