Mercurial > hg > nginx
view src/os/unix/ngx_freebsd_config.h @ 5356:acd51b0f6fd4
Disable symlinks: use O_PATH to open path components.
It was introduced in Linux 2.6.39, glibc 2.14 and allows to obtain
file descriptors without actually opening files. Thus made it possible
to traverse path with openat() syscalls without the need to have read
permissions for path components. It is effectively emulates O_SEARCH
which is missing on Linux.
O_PATH is used in combination with O_RDONLY. The last one is ignored
if O_PATH is used, but it allows nginx to not fail when it was built on
modern system (i.e. glibc 2.14+) and run with a kernel older than 2.6.39.
Then O_PATH is unknown to the kernel and ignored, while O_RDONLY is used.
Sadly, fstat() is not working with O_PATH descriptors till Linux 3.6.
As a workaround we fallback to fstatat() with the AT_EMPTY_PATH flag
that was introduced at the same time as O_PATH.
author | Valentin Bartenev <vbart@nginx.com> |
---|---|
date | Mon, 02 Sep 2013 08:07:59 +0400 |
parents | 6d73e0dc4f64 |
children | 72e31d88defa |
line wrap: on
line source
/* * Copyright (C) Igor Sysoev * Copyright (C) Nginx, Inc. */ #ifndef _NGX_FREEBSD_CONFIG_H_INCLUDED_ #define _NGX_FREEBSD_CONFIG_H_INCLUDED_ #include <sys/types.h> #include <sys/time.h> #include <unistd.h> #include <stdarg.h> #include <stddef.h> /* offsetof() */ #include <stdio.h> #include <stdlib.h> #include <errno.h> #include <string.h> #include <signal.h> #include <pwd.h> #include <grp.h> #include <dirent.h> #include <glob.h> #include <time.h> #include <sys/param.h> /* ALIGN() */ #include <sys/mount.h> /* statfs() */ #include <sys/filio.h> /* FIONBIO */ #include <sys/uio.h> #include <sys/stat.h> #include <fcntl.h> #include <sys/wait.h> #include <sys/mman.h> #include <sys/resource.h> #include <sched.h> #include <sys/socket.h> #include <netinet/in.h> #include <netinet/tcp.h> /* TCP_NODELAY, TCP_NOPUSH */ #include <arpa/inet.h> #include <netdb.h> #include <sys/un.h> #include <libutil.h> /* setproctitle() before 4.1 */ #include <osreldate.h> #include <sys/sysctl.h> #if __FreeBSD_version < 400017 /* * FreeBSD 3.x has no CMSG_SPACE() and CMSG_LEN() and has the broken CMSG_DATA() */ #undef CMSG_SPACE #define CMSG_SPACE(l) (ALIGN(sizeof(struct cmsghdr)) + ALIGN(l)) #undef CMSG_LEN #define CMSG_LEN(l) (ALIGN(sizeof(struct cmsghdr)) + (l)) #undef CMSG_DATA #define CMSG_DATA(cmsg) ((u_char *)(cmsg) + ALIGN(sizeof(struct cmsghdr))) #endif #include <ngx_auto_config.h> #if (NGX_HAVE_POSIX_SEM) #include <semaphore.h> #endif #if (NGX_HAVE_POLL) #include <poll.h> #endif #if (NGX_HAVE_KQUEUE) #include <sys/event.h> #endif #if (NGX_HAVE_FILE_AIO || NGX_HAVE_AIO) #include <aio.h> typedef struct aiocb ngx_aiocb_t; #endif #define NGX_LISTEN_BACKLOG -1 #ifdef __DragonFly__ #define NGX_KEEPALIVE_FACTOR 1000 #endif #if (__FreeBSD_version < 430000 || __FreeBSD_version < 500012) pid_t rfork_thread(int flags, void *stack, int (*func)(void *arg), void *arg); #endif #ifndef IOV_MAX #define IOV_MAX 1024 #endif #ifndef NGX_HAVE_INHERITED_NONBLOCK #define NGX_HAVE_INHERITED_NONBLOCK 1 #endif #define NGX_HAVE_OS_SPECIFIC_INIT 1 #define NGX_HAVE_DEBUG_MALLOC 1 extern char **environ; extern char *malloc_options; #endif /* _NGX_FREEBSD_CONFIG_H_INCLUDED_ */