无法从apache模块内部读取文件

时间:2019-03-02 13:23:23

标签: c apache module

我正在尝试创建一个Apache httpd模块。我在读取文件时遇到麻烦,每当尝试读取文件时,都会收到“没有这样的文件或目录”错误消息。在某些情况下,我可以读取文件,例如可以读取/ etc / passwd文件。我认为可能会有一些chroot发生,但是我不确定。是否有一种方法可以从文件系统读取任何文件。 下面是我的钩子函数:

static int subscription_cookie_check_auth(request_rec *r)
{
    r->user = "user";

    int result;
    unsigned char key[MAX_KEY_LEN] = { 0 };
    apr_status_t rv;
    apr_file_t* key_fd = NULL;
    rv = apr_file_open(&key_fd, pubkey_file, APR_FOPEN_READ, APR_FPROT_OS_DEFAULT, r->pool);
    if(rv!=APR_SUCCESS){
        char error_buf[50];
        ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r, APLOGNO(55503)
                 "Unable to open the file %s: %s", pubkey_file, apr_strerror(rv, error_buf, 50));
        return HTTP_MOVED_TEMPORARILY;
    }

    apr_size_t key_len;
    rv = apr_file_read_full(key_fd, key, 10, &key_len);

    if(rv!=APR_SUCCESS && rv!=APR_EOF){
        char error_buf[50];
        ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r, APLOGNO(55504)
                "Error while reading the file %s: %s", pubkey_file, apr_strerror(rv, error_buf, 50));
        return HTTP_MOVED_TEMPORARILY;
    }
    apr_file_close(key_fd);
    return OK;
}

const char *set_pubkey(cmd_parms *cmd, void *cfg, const char *arg)
{
    pubkey_file = arg;
    return NULL;
}

static const command_rec authn_anon_cmds[] =
{
    AP_INIT_TAKE1("SignaturePublicKeyFile", set_pubkey, NULL, OR_LIMIT, "The path to public key"),
    {NULL}
};

static void register_hooks(apr_pool_t *p)
{
    ap_hook_check_authn(subscription_cookie_check_auth, NULL, NULL, APR_HOOK_MIDDLE,
                            AP_AUTH_INTERNAL_PER_CONF);
}

正如我前面提到的,/ etc / passwd可以正常工作,但是在尝试其他文件(例如/ tmp / test)时,我的日志中出现以下错误:

[Sat Mar 02 14:13:32.621300 2019] [auth_subscription:error] [pid 11840:tid 140056870254336] [client 127.0.0.1:45288] AH55503: Unable to open the file /tmp/test: No such file or directory

我尝试读取的文件存在(甚至具有所有权限只是为了确保):

$ ls -la /tmp/test 
-rwxrwxrwx 1 root root 12 mars   2 13:10 /tmp/test

任何帮助将不胜感激。

0 个答案:

没有答案