Я пытаюсь создать модуль Apache httpd.У меня проблемы с чтением файлов, когда я пытаюсь прочитать файл, я получаю сообщение об ошибке «Нет такого файла или каталога».Есть случаи, когда я могу читать файлы, например, я мог читать файл / etc / passwd.Я думаю, что там может быть какая-то хромота, но я не уверен.Будет ли способ прочитать любой файл из файловой системы.Ниже приведена моя функция ловушки:
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
Буду очень признателен за любую помощь.