sortix-mirror/ports/nginx/nginx.patch

1126 lines
33 KiB
Diff

diff -Paur --no-dereference -- nginx.upstream/auto/feature nginx/auto/feature
--- nginx.upstream/auto/feature
+++ nginx/auto/feature
@@ -53,8 +53,13 @@
yes)
# /bin/sh is used to intercept "Killed" or "Abort trap" messages
- if /bin/sh -c $NGX_AUTOTEST >> $NGX_AUTOCONF_ERR 2>&1; then
- echo " found"
+ if [ $CROSS_COMPILING = true ] ||
+ /bin/sh -c $NGX_AUTOTEST >> $NGX_AUTOCONF_ERR 2>&1; then
+ if [ $CROSS_COMPILING = true ]; then
+ echo " cross-compiling (assuming found)"
+ else
+ echo " found"
+ fi
ngx_found=yes
if test -n "$ngx_feature_name"; then
@@ -68,8 +73,13 @@
value)
# /bin/sh is used to intercept "Killed" or "Abort trap" messages
- if /bin/sh -c $NGX_AUTOTEST >> $NGX_AUTOCONF_ERR 2>&1; then
- echo " found"
+ if [ $CROSS_COMPILING = true ] ||
+ /bin/sh -c $NGX_AUTOTEST >> $NGX_AUTOCONF_ERR 2>&1; then
+ if [ $CROSS_COMPILING = true ]; then
+ echo " cross-compiling (assuming found)"
+ else
+ echo " found"
+ fi
ngx_found=yes
cat << END >> $NGX_AUTO_CONFIG_H
diff -Paur --no-dereference -- nginx.upstream/auto/install nginx/auto/install
--- nginx.upstream/auto/install
+++ nginx/auto/install
@@ -49,6 +49,8 @@
NGX_CONF_PREFIX=`dirname $NGX_CONF_PATH`
+NGX_SYSCONFDIR=`dirname $NGX_CONF_PREFIX`
+NGX_DEFAULT_CONF_PREFIX=$NGX_SYSCONFDIR/default/`basename $NGX_CONF_PREFIX`
case ".$NGX_PID_PATH" in
@@ -114,39 +116,27 @@
'\$(DESTDIR)$NGX_SBIN_PATH.old'
cp $NGX_OBJS/nginx '\$(DESTDIR)$NGX_SBIN_PATH'
- test -d '\$(DESTDIR)$NGX_CONF_PREFIX' \\
- || mkdir -p '\$(DESTDIR)$NGX_CONF_PREFIX'
+ test -d '\$(DESTDIR)$NGX_DEFAULT_CONF_PREFIX' \\
+ || mkdir -p '\$(DESTDIR)$NGX_DEFAULT_CONF_PREFIX'
- cp conf/koi-win '\$(DESTDIR)$NGX_CONF_PREFIX'
- cp conf/koi-utf '\$(DESTDIR)$NGX_CONF_PREFIX'
- cp conf/win-utf '\$(DESTDIR)$NGX_CONF_PREFIX'
-
- test -f '\$(DESTDIR)$NGX_CONF_PREFIX/mime.types' \\
- || cp conf/mime.types '\$(DESTDIR)$NGX_CONF_PREFIX'
- cp conf/mime.types '\$(DESTDIR)$NGX_CONF_PREFIX/mime.types.default'
-
- test -f '\$(DESTDIR)$NGX_CONF_PREFIX/fastcgi_params' \\
- || cp conf/fastcgi_params '\$(DESTDIR)$NGX_CONF_PREFIX'
- cp conf/fastcgi_params \\
- '\$(DESTDIR)$NGX_CONF_PREFIX/fastcgi_params.default'
-
- test -f '\$(DESTDIR)$NGX_CONF_PREFIX/fastcgi.conf' \\
- || cp conf/fastcgi.conf '\$(DESTDIR)$NGX_CONF_PREFIX'
- cp conf/fastcgi.conf '\$(DESTDIR)$NGX_CONF_PREFIX/fastcgi.conf.default'
-
- test -f '\$(DESTDIR)$NGX_CONF_PREFIX/uwsgi_params' \\
- || cp conf/uwsgi_params '\$(DESTDIR)$NGX_CONF_PREFIX'
- cp conf/uwsgi_params \\
- '\$(DESTDIR)$NGX_CONF_PREFIX/uwsgi_params.default'
-
- test -f '\$(DESTDIR)$NGX_CONF_PREFIX/scgi_params' \\
- || cp conf/scgi_params '\$(DESTDIR)$NGX_CONF_PREFIX'
- cp conf/scgi_params \\
- '\$(DESTDIR)$NGX_CONF_PREFIX/scgi_params.default'
-
- test -f '\$(DESTDIR)$NGX_CONF_PATH' \\
- || cp conf/nginx.conf '\$(DESTDIR)$NGX_CONF_PATH'
- cp conf/nginx.conf '\$(DESTDIR)$NGX_CONF_PREFIX/nginx.conf.default'
+ cp conf/koi-win '\$(DESTDIR)$NGX_DEFAULT_CONF_PREFIX'
+ cp conf/koi-utf '\$(DESTDIR)$NGX_DEFAULT_CONF_PREFIX'
+ cp conf/win-utf '\$(DESTDIR)$NGX_DEFAULT_CONF_PREFIX'
+
+ test -d '\$(DESTDIR)/share/man/man8' || mkdir -p '\$(DESTDIR)/share/man/man8'
+ cp objs/nginx.8 '\$(DESTDIR)/share/man/man8'
+
+ cp conf/mime.types '\$(DESTDIR)$NGX_DEFAULT_CONF_PREFIX/mime.types'
+
+ cp conf/fastcgi_params '\$(DESTDIR)$NGX_DEFAULT_CONF_PREFIX/fastcgi_params'
+
+ cp conf/fastcgi.conf '\$(DESTDIR)$NGX_DEFAULT_CONF_PREFIX/fastcgi.conf'
+
+ cp conf/uwsgi_params '\$(DESTDIR)$NGX_DEFAULT_CONF_PREFIX/uwsgi_params'
+
+ cp conf/scgi_params '\$(DESTDIR)$NGX_DEFAULT_CONF_PREFIX/scgi_params'
+
+ cp conf/nginx.conf '\$(DESTDIR)$NGX_DEFAULT_CONF_PREFIX/nginx.conf'
test -d '\$(DESTDIR)`dirname "$NGX_PID_PATH"`' \\
|| mkdir -p '\$(DESTDIR)`dirname "$NGX_PID_PATH"`'
@@ -156,6 +146,28 @@
test -d '\$(DESTDIR)$NGX_PREFIX/html' \\
|| cp -R $NGX_HTML '\$(DESTDIR)$NGX_PREFIX'
+
+ test -d '\$(DESTDIR)/var/lib/nginx' || mkdir -p '\$(DESTDIR)/var/lib/nginx'
+
+ test -d '\$(DESTDIR)/share/init' || mkdir -p '\$(DESTDIR)/share/init'
+ cp init/nginx '\$(DESTDIR)/share/init'
+
+ mkdir -p '\$(DESTDIR)$NGX_DEFAULT_CONF_PREFIX/modules-available'
+ mkdir -p '\$(DESTDIR)$NGX_DEFAULT_CONF_PREFIX/modules-enabled'
+ mkdir -p '\$(DESTDIR)$NGX_DEFAULT_CONF_PREFIX/sites-available'
+ mkdir -p '\$(DESTDIR)$NGX_DEFAULT_CONF_PREFIX/sites-enabled'
+
+ cp sites-available/default \\
+ '\$(DESTDIR)$NGX_DEFAULT_CONF_PREFIX/sites-available'
+ ln -s ../sites-available/default \\
+ '\$(DESTDIR)$NGX_DEFAULT_CONF_PREFIX/sites-enabled'
+
+ mkdir -p '\$(DESTDIR)$NGX_SYSCONFDIR/default/passwd.d'
+ mkdir -p '\$(DESTDIR)$NGX_SYSCONFDIR/default/group.d'
+ echo "_nginx:x:101:101:_nginx:/var/empty:sh" \\
+ > '\$(DESTDIR)$NGX_SYSCONFDIR/default/passwd.d/nginx'
+ echo "_nginx::101:_nginx" \\
+ > '\$(DESTDIR)$NGX_SYSCONFDIR/default/group.d/nginx'
END
diff -Paur --no-dereference -- nginx.upstream/auto/lib/pcre/conf nginx/auto/lib/pcre/conf
--- nginx.upstream/auto/lib/pcre/conf
+++ nginx/auto/lib/pcre/conf
@@ -86,21 +86,6 @@
if (re == NULL) return 1"
. auto/feature
- if [ $ngx_found = no ]; then
-
- # pcre2-config
-
- ngx_pcre2_prefix=`pcre2-config --prefix 2>/dev/null`
-
- if [ -n "$ngx_pcre2_prefix" ]; then
- ngx_feature="PCRE2 library in $ngx_pcre2_prefix"
- ngx_feature_path=`pcre2-config --cflags \
- | sed -n -e 's/.*-I *\([^ ][^ ]*\).*/\1/p'`
- ngx_feature_libs=`pcre2-config --libs8`
- . auto/feature
- fi
- fi
-
if [ $ngx_found = yes ]; then
have=NGX_PCRE . auto/have
CORE_INCS="$CORE_INCS $ngx_feature_path"
diff -Paur --no-dereference -- nginx.upstream/auto/options nginx/auto/options
--- nginx.upstream/auto/options
+++ nginx/auto/options
@@ -17,6 +17,12 @@
NGX_GROUP=
NGX_BUILD=
+NGX_BUILD_TRIPLET=
+NGX_HOST_TRIPLET=
+NGX_TARGET_TRIPLET=
+
+CROSS_COMPILING=false
+
CC=${CC:-cc}
CPP=
NGX_OBJS=objs
@@ -188,6 +194,8 @@
--prefix=) NGX_PREFIX="!" ;;
--prefix=*) NGX_PREFIX="$value" ;;
+ --exec-prefix=) ;;
+ --exec-prefix=*) ;;
--sbin-path=*) NGX_SBIN_PATH="$value" ;;
--modules-path=*) NGX_MODULES_PATH="$value" ;;
--conf-path=*) NGX_CONF_PATH="$value" ;;
@@ -199,9 +207,13 @@
--crossbuild=*) NGX_PLATFORM="$value" ;;
- --build=*) NGX_BUILD="$value" ;;
+ --buildname=*) NGX_BUILD="$value" ;;
--builddir=*) NGX_OBJS="$value" ;;
+ --build=*) NGX_BUILD_TRIPLET="$value" ;;
+ --host=*) NGX_HOST_TRIPLET="$value" ;;
+ --target=*) NGX_TARGET_TRIPLET="$value";;
+
--with-select_module) EVENT_SELECT=YES ;;
--without-select_module) EVENT_SELECT=NONE ;;
--with-poll_module) EVENT_POLL=YES ;;
@@ -596,6 +608,12 @@
exit 1
fi
+if [ "$NGX_BUILD_TRIPLET" != "$NGX_HOST_TRIPLET" ]; then
+ CROSS_COMPILING=true
+else
+ CROSS_COMPILING=false
+fi
+
if [ ".$NGX_PLATFORM" = ".win32" ]; then
NGX_WINE=$WINE
@@ -606,6 +624,8 @@
NGX_MODULES_PATH=${NGX_MODULES_PATH:-modules}
NGX_CONF_PATH=${NGX_CONF_PATH:-conf/nginx.conf}
NGX_CONF_PREFIX=`dirname $NGX_CONF_PATH`
+NGX_SYSCONFDIR=`dirname $NGX_CONF_PREFIX`
+NGX_DEFAULT_CONF_PREFIX=$NGX_SYSCONFDIR/default/`basename $NGX_CONF_PREFIX`
NGX_PID_PATH=${NGX_PID_PATH:-logs/nginx.pid}
NGX_LOCK_PATH=${NGX_LOCK_PATH:-logs/nginx.lock}
diff -Paur --no-dereference -- nginx.upstream/auto/types/sizeof nginx/auto/types/sizeof
--- nginx.upstream/auto/types/sizeof
+++ nginx/auto/types/sizeof
@@ -16,6 +16,7 @@
cat << END > $NGX_AUTOTEST.c
+#include <assert.h>
#include <sys/types.h>
#include <sys/time.h>
$NGX_INCLUDE_UNISTD_H
@@ -26,7 +27,7 @@
$NGX_INCLUDE_AUTO_CONFIG_H
int main(void) {
- printf("%d", (int) sizeof($ngx_type));
+ static_assert(sizeof($ngx_type) == GUESS, "sizeof($ngx_type) == GUESS");
return 0;
}
@@ -36,13 +37,16 @@
ngx_test="$CC $CC_TEST_FLAGS $CC_AUX_FLAGS \
-o $NGX_AUTOTEST $NGX_AUTOTEST.c $NGX_LD_OPT $ngx_feature_libs"
-eval "$ngx_test >> $NGX_AUTOCONF_ERR 2>&1"
+for ngx_size in 4 8; do
+ eval "$ngx_test -DGUESS=$ngx_size >> $NGX_AUTOCONF_ERR 2>&1"
+ if [ -x $NGX_AUTOTEST ]; then
+ echo " $ngx_size bytes"
+ break
+ fi
-if [ -x $NGX_AUTOTEST ]; then
- ngx_size=`$NGX_AUTOTEST`
- echo " $ngx_size bytes"
-fi
+ ngx_size=failed
+done
case $ngx_size in
diff -Paur --no-dereference -- nginx.upstream/auto/unix nginx/auto/unix
--- nginx.upstream/auto/unix
+++ nginx/auto/unix
@@ -803,15 +803,15 @@
. auto/feature
-ngx_feature="mmap(MAP_ANON|MAP_SHARED)"
-ngx_feature_name="NGX_HAVE_MAP_ANON"
+ngx_feature="mmap(MAP_ANONYMOUS|MAP_PRIVATE)"
+ngx_feature_name="NGX_HAVE_MAP_ANONYMOUS"
ngx_feature_run=yes
ngx_feature_incs="#include <sys/mman.h>"
ngx_feature_path=
ngx_feature_libs=
ngx_feature_test="void *p;
p = mmap(NULL, 4096, PROT_READ|PROT_WRITE,
- MAP_ANON|MAP_SHARED, -1, 0);
+ MAP_ANONYMOUS|MAP_PRIVATE, -1, 0);
if (p == MAP_FAILED) return 1;"
. auto/feature
diff -Paur --no-dereference -- nginx.upstream/conf/nginx.conf nginx/conf/nginx.conf
--- nginx.upstream/conf/nginx.conf
+++ nginx/conf/nginx.conf
@@ -8,6 +8,7 @@
#pid logs/nginx.pid;
+include modules-enabled/*.conf;
events {
worker_connections 1024;
@@ -18,6 +19,9 @@
include mime.types;
default_type application/octet-stream;
+ ssl_protocols TLSv1.2 TLSv1.3;
+ ssl_prefer_server_ciphers on;
+
#log_format main '$remote_addr - $remote_user [$time_local] "$request" '
# '$status $body_bytes_sent "$http_referer" '
# '"$http_user_agent" "$http_x_forwarded_for"';
@@ -32,86 +36,6 @@
#gzip on;
- server {
- listen 80;
- server_name localhost;
-
- #charset koi8-r;
-
- #access_log logs/host.access.log main;
-
- location / {
- root html;
- index index.html index.htm;
- }
-
- #error_page 404 /404.html;
-
- # redirect server error pages to the static page /50x.html
- #
- error_page 500 502 503 504 /50x.html;
- location = /50x.html {
- root html;
- }
-
- # proxy the PHP scripts to Apache listening on 127.0.0.1:80
- #
- #location ~ \.php$ {
- # proxy_pass http://127.0.0.1;
- #}
-
- # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
- #
- #location ~ \.php$ {
- # root html;
- # fastcgi_pass 127.0.0.1:9000;
- # fastcgi_index index.php;
- # fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
- # include fastcgi_params;
- #}
-
- # deny access to .htaccess files, if Apache's document root
- # concurs with nginx's one
- #
- #location ~ /\.ht {
- # deny all;
- #}
- }
-
-
- # another virtual host using mix of IP-, name-, and port-based configuration
- #
- #server {
- # listen 8000;
- # listen somename:8080;
- # server_name somename alias another.alias;
-
- # location / {
- # root html;
- # index index.html index.htm;
- # }
- #}
-
-
- # HTTPS server
- #
- #server {
- # listen 443 ssl;
- # server_name localhost;
-
- # ssl_certificate cert.pem;
- # ssl_certificate_key cert.key;
-
- # ssl_session_cache shared:SSL:1m;
- # ssl_session_timeout 5m;
-
- # ssl_ciphers HIGH:!aNULL:!MD5;
- # ssl_prefer_server_ciphers on;
-
- # location / {
- # root html;
- # index index.html index.htm;
- # }
- #}
-
+ include conf.d/*.conf;
+ include sites-enabled/*;
}
diff -Paur --no-dereference -- nginx.upstream/configure nginx/configure
--- nginx.upstream/configure
+++ nginx/configure
@@ -27,9 +27,16 @@
if test -z "$NGX_PLATFORM"; then
echo "checking for OS"
- NGX_SYSTEM=`uname -s 2>/dev/null`
- NGX_RELEASE=`uname -r 2>/dev/null`
- NGX_MACHINE=`uname -m 2>/dev/null`
+ if [ -z "$NGX_HOST_TRIPLET" ]; then
+ NGX_SYSTEM=`uname -s 2>/dev/null`
+ NGX_RELEASE=`uname -r 2>/dev/null`
+ NGX_MACHINE=`uname -m 2>/dev/null`
+ else
+ NGX_SYSTEM=`echo "$NGX_HOST_TRIPLET" | sed -E 's/^.*-([^-]+)[0-9]*$/\1/'`
+ NGX_RELEASE=`echo "$NGX_HOST_TRIPLET" | sed -E 's/^.*-[^-]+([0-9]*)$/\1/'`
+ if [ -z $NGX_RELEASE ]; then NGX_RELEASE=1; fi
+ NGX_MACHINE=`echo "$NGX_HOST_TRIPLET" | sed -E 's/^([^-]+)-.*$/\1/'`
+ fi
echo " + $NGX_SYSTEM $NGX_RELEASE $NGX_MACHINE"
@@ -83,6 +90,7 @@
have=NGX_SBIN_PATH value="\"$NGX_SBIN_PATH\"" . auto/define
have=NGX_CONF_PATH value="\"$NGX_CONF_PATH\"" . auto/define
+have=NGX_DEFAULT_CONF_PREFIX value="\"$NGX_DEFAULT_CONF_PREFIX\"" . auto/define
have=NGX_PID_PATH value="\"$NGX_PID_PATH\"" . auto/define
have=NGX_LOCK_PATH value="\"$NGX_LOCK_PATH\"" . auto/define
have=NGX_ERROR_LOG_PATH value="\"$NGX_ERROR_LOG_PATH\"" . auto/define
diff -Paur --no-dereference -- nginx.upstream/init/nginx nginx/init/nginx
--- nginx.upstream/init/nginx
+++ nginx/init/nginx
@@ -0,0 +1,2 @@
+require network
+exec nginx
diff -Paur --no-dereference -- nginx.upstream/sites-available/default nginx/sites-available/default
--- nginx.upstream/sites-available/default
+++ nginx/sites-available/default
@@ -0,0 +1,81 @@
+server {
+ listen 80;
+ server_name localhost;
+
+ #charset koi8-r;
+
+ #access_log logs/host.access.log main;
+
+ location / {
+ root html;
+ index index.html index.htm;
+ }
+
+ #error_page 404 /404.html;
+
+ # redirect server error pages to the static page /50x.html
+ #
+ error_page 500 502 503 504 /50x.html;
+ location = /50x.html {
+ root html;
+ }
+
+ # proxy the PHP scripts to Apache listening on 127.0.0.1:80
+ #
+ #location ~ \.php$ {
+ # proxy_pass http://127.0.0.1;
+ #}
+
+ # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
+ #
+ #location ~ \.php$ {
+ # root html;
+ # fastcgi_pass 127.0.0.1:9000;
+ # fastcgi_index index.php;
+ # fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
+ # include fastcgi_params;
+ #}
+
+ # deny access to .htaccess files, if Apache's document root
+ # concurs with nginx's one
+ #
+ #location ~ /\.ht {
+ # deny all;
+ #}
+}
+
+
+# another virtual host using mix of IP-, name-, and port-based configuration
+#
+#server {
+# listen 8000;
+# listen somename:8080;
+# server_name somename alias another.alias;
+
+# location / {
+# root html;
+# index index.html index.htm;
+# }
+#}
+
+
+# HTTPS server
+#
+#server {
+# listen 443 ssl;
+# server_name localhost;
+
+# ssl_certificate cert.pem;
+# ssl_certificate_key cert.key;
+
+# ssl_session_cache shared:SSL:1m;
+# ssl_session_timeout 5m;
+
+# ssl_ciphers HIGH:!aNULL:!MD5;
+# ssl_prefer_server_ciphers on;
+
+# location / {
+# root html;
+# index index.html index.htm;
+# }
+#}
diff -Paur --no-dereference -- nginx.upstream/src/core/nginx.c nginx/src/core/nginx.c
--- nginx.upstream/src/core/nginx.c
+++ nginx/src/core/nginx.c
@@ -359,7 +359,7 @@
#endif
- if (ngx_create_pidfile(&ccf->pid, cycle->log) != NGX_OK) {
+ if (ccf->daemon && ngx_create_pidfile(&ccf->pid, cycle->log) != NGX_OK) {
return 1;
}
@@ -939,6 +939,7 @@
{
u_char *p;
size_t len;
+ int is_default = 0;
if (ngx_prefix) {
len = ngx_strlen(ngx_prefix);
@@ -999,14 +1000,18 @@
cycle->conf_file.data = ngx_conf_file;
} else {
- ngx_str_set(&cycle->conf_file, NGX_CONF_PATH);
+ ngx_str_set(&cycle->conf_file, "nginx.conf");
}
- if (ngx_conf_full_name(cycle, &cycle->conf_file, 0) != NGX_OK) {
+ is_default = !ngx_strcmp(cycle->conf_prefix.data, NGX_CONF_PREFIX) &&
+ !ngx_strcmp(cycle->conf_file.data, "nginx.conf");
+
+ if (ngx_conf_full_name(cycle, &cycle->conf_file, 1) != NGX_OK) {
return NGX_ERROR;
}
for (p = cycle->conf_file.data + cycle->conf_file.len - 1;
+ !is_default &&
p > cycle->conf_file.data;
p--)
{
@@ -1088,7 +1093,7 @@
{
ngx_core_conf_t *ccf = conf;
- ngx_conf_init_value(ccf->daemon, 1);
+ ngx_conf_init_value(ccf->daemon, 0);
ngx_conf_init_value(ccf->master, 1);
ngx_conf_init_msec_value(ccf->timer_resolution, 0);
ngx_conf_init_msec_value(ccf->shutdown_timeout, 0);
diff -Paur --no-dereference -- nginx.upstream/src/core/ngx_conf_file.c nginx/src/core/ngx_conf_file.c
--- nginx.upstream/src/core/ngx_conf_file.c
+++ nginx/src/core/ngx_conf_file.c
@@ -882,13 +882,73 @@
return rv;
}
+static void
+ngx_truncate_glob(char *path)
+{
+ size_t last_slash = 0;
+ for (size_t i = 0; path[i]; i++) {
+ if (path[i] == '/') {
+ last_slash = i;
+ } else if (path[i] == '*' || path[i] == '?' || path[i] == '[') {
+ path[last_slash + 1] = '\0';
+ return;
+ }
+ }
+}
+
+
+static ngx_int_t
+ngx_conf_is_default(ngx_cycle_t *cycle, ngx_str_t *str)
+{
+ char *prefix = NULL;
+ char *conf_path = NULL;
+ char *def_path = NULL;
+ const char *name = (const char *)str->data;
+ ngx_int_t result = NGX_ERROR;
+
+ if (!(prefix = strndup((const char *)cycle->conf_prefix.data,
+ cycle->conf_prefix.len))) {
+ return NGX_ERROR;
+ }
+
+ if (name[0] == '/' || ngx_strcmp(prefix, NGX_CONF_PREFIX) != 0) {
+ free(prefix);
+ return 0;
+ }
+
+ if (0 <= asprintf(&conf_path, "%s%s", prefix, name) &&
+ 0 <= asprintf(&def_path, "%s%s", NGX_DEFAULT_CONF_PREFIX "/", name)) {
+ ngx_truncate_glob(conf_path);
+ ngx_truncate_glob(def_path);
+ result = access(conf_path, F_OK) < 0 && errno == ENOENT &&
+ !access(def_path, F_OK);
+ }
+
+ free(conf_path);
+ free(def_path);
+ free(prefix);
+
+ return result;
+}
+
ngx_int_t
ngx_conf_full_name(ngx_cycle_t *cycle, ngx_str_t *name, ngx_uint_t conf_prefix)
{
- ngx_str_t *prefix;
+ ngx_str_t *prefix = &cycle->prefix;
+ ngx_str_t default_prefix;
- prefix = conf_prefix ? &cycle->conf_prefix : &cycle->prefix;
+ ngx_str_set(&default_prefix, NGX_DEFAULT_CONF_PREFIX "/");
+
+ if (conf_prefix) {
+ int is_default = ngx_conf_is_default(cycle, name);
+
+ if (is_default == NGX_ERROR) {
+ return NGX_ERROR;
+ }
+
+ prefix = is_default ? &default_prefix : &cycle->conf_prefix;
+ }
return ngx_get_full_name(cycle->pool, prefix, name);
}
@@ -1484,3 +1544,4 @@
return NGX_CONF_ERROR;
}
+
diff -Paur --no-dereference -- nginx.upstream/src/core/ngx_config.h nginx/src/core/ngx_config.h
--- nginx.upstream/src/core/ngx_config.h
+++ nginx/src/core/ngx_config.h
@@ -54,7 +54,8 @@
#define ngx_signal_helper(n) SIG##n
#define ngx_signal_value(n) ngx_signal_helper(n)
-#define ngx_random random
+#define ngx_random arc4random
+#define srandom(seed) ((void) (seed))
/* TODO: #ifndef */
#define NGX_SHUTDOWN_SIGNAL QUIT
@@ -79,6 +80,11 @@
typedef uintptr_t ngx_uint_t;
typedef intptr_t ngx_flag_t;
+typedef unsigned char u_char;
+typedef unsigned short u_short;
+typedef unsigned int u_int;
+typedef unsigned long u_long;
+
#define NGX_INT32_LEN (sizeof("-2147483648") - 1)
#define NGX_INT64_LEN (sizeof("-9223372036854775808") - 1)
diff -Paur --no-dereference -- nginx.upstream/src/core/ngx_cycle.h nginx/src/core/ngx_cycle.h
--- nginx.upstream/src/core/ngx_cycle.h
+++ nginx/src/core/ngx_cycle.h
@@ -79,6 +79,7 @@
ngx_str_t conf_file;
ngx_str_t conf_param;
ngx_str_t conf_prefix;
+ ngx_str_t conf_default_prefix;
ngx_str_t prefix;
ngx_str_t error_log;
ngx_str_t lock_file;
diff -Paur --no-dereference -- nginx.upstream/src/event/ngx_event.c nginx/src/event/ngx_event.c
--- nginx.upstream/src/event/ngx_event.c
+++ nginx/src/event/ngx_event.c
@@ -681,7 +681,8 @@
if (ngx_timer_resolution && !(ngx_event_flags & NGX_USE_TIMER_EVENT)) {
struct sigaction sa;
- struct itimerval itv;
+ struct itimerspec its;
+ timer_t timer;
ngx_memzero(&sa, sizeof(struct sigaction));
sa.sa_handler = ngx_timer_signal_handler;
@@ -693,15 +694,16 @@
return NGX_ERROR;
}
- itv.it_interval.tv_sec = ngx_timer_resolution / 1000;
- itv.it_interval.tv_usec = (ngx_timer_resolution % 1000) * 1000;
- itv.it_value.tv_sec = ngx_timer_resolution / 1000;
- itv.it_value.tv_usec = (ngx_timer_resolution % 1000 ) * 1000;
+ its.it_interval.tv_sec = ngx_timer_resolution / 1000;
+ its.it_interval.tv_nsec = (ngx_timer_resolution % 1000) * 1000000;
+ its.it_value.tv_sec = ngx_timer_resolution / 1000;
+ its.it_value.tv_nsec = (ngx_timer_resolution % 1000 ) * 1000000;
- if (setitimer(ITIMER_REAL, &itv, NULL) == -1) {
+ if (timer_create(CLOCK_REALTIME, NULL, &timer) == -1) {
ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_errno,
- "setitimer() failed");
+ "timer_create() failed");
}
+ timer_settime(timer, 0, &its, NULL);
}
if (ngx_event_flags & NGX_USE_FD_EVENT) {
@@ -713,6 +715,11 @@
return NGX_ERROR;
}
+ /* PATCH: Bad code assuming there is a low fd limit. */
+ if (INT_MAX <= rlmt.rlim_cur) {
+ rlmt.rlim_cur = 65536;
+ }
+
cycle->files_n = (ngx_uint_t) rlmt.rlim_cur;
cycle->files = ngx_calloc(sizeof(ngx_connection_t *) * cycle->files_n,
diff -Paur --no-dereference -- nginx.upstream/src/os/unix/ngx_channel.c nginx/src/os/unix/ngx_channel.c
--- nginx.upstream/src/os/unix/ngx_channel.c
+++ nginx/src/os/unix/ngx_channel.c
@@ -31,7 +31,7 @@
msg.msg_controllen = 0;
} else {
- msg.msg_control = (caddr_t) &cmsg;
+ msg.msg_control = &cmsg;
msg.msg_controllen = sizeof(cmsg);
ngx_memzero(&cmsg, sizeof(cmsg));
@@ -62,7 +62,7 @@
msg.msg_accrightslen = 0;
} else {
- msg.msg_accrights = (caddr_t) &ch->fd;
+ msg.msg_accrights = &ch->fd;
msg.msg_accrightslen = sizeof(int);
}
@@ -118,10 +118,10 @@
msg.msg_iovlen = 1;
#if (NGX_HAVE_MSGHDR_MSG_CONTROL)
- msg.msg_control = (caddr_t) &cmsg;
+ msg.msg_control = &cmsg;
msg.msg_controllen = sizeof(cmsg);
#else
- msg.msg_accrights = (caddr_t) &fd;
+ msg.msg_accrights = &fd;
msg.msg_accrightslen = sizeof(int);
#endif
diff -Paur --no-dereference -- nginx.upstream/src/os/unix/ngx_files.c nginx/src/os/unix/ngx_files.c
--- nginx.upstream/src/os/unix/ngx_files.c
+++ nginx/src/os/unix/ngx_files.c
@@ -600,14 +600,14 @@
ngx_int_t
ngx_set_file_time(u_char *name, ngx_fd_t fd, time_t s)
{
- struct timeval tv[2];
+ struct timespec tv[2];
tv[0].tv_sec = ngx_time();
- tv[0].tv_usec = 0;
+ tv[0].tv_nsec = 0;
tv[1].tv_sec = s;
- tv[1].tv_usec = 0;
+ tv[1].tv_nsec = 0;
- if (utimes((char *) name, tv) != -1) {
+ if (utimens((char *) name, tv) != -1) {
return NGX_OK;
}
@@ -758,6 +758,9 @@
ngx_err_t
ngx_trylock_fd(ngx_fd_t fd)
{
+#ifdef __sortix__
+ (void) fd;
+#else
struct flock fl;
ngx_memzero(&fl, sizeof(struct flock));
@@ -767,7 +770,7 @@
if (fcntl(fd, F_SETLK, &fl) == -1) {
return ngx_errno;
}
-
+#endif
return 0;
}
@@ -775,6 +778,9 @@
ngx_err_t
ngx_lock_fd(ngx_fd_t fd)
{
+#ifdef __sortix__
+ (void) fd;
+#else
struct flock fl;
ngx_memzero(&fl, sizeof(struct flock));
@@ -784,7 +790,7 @@
if (fcntl(fd, F_SETLKW, &fl) == -1) {
return ngx_errno;
}
-
+#endif
return 0;
}
@@ -792,6 +798,9 @@
ngx_err_t
ngx_unlock_fd(ngx_fd_t fd)
{
+#ifdef __sortix__
+ (void) fd;
+#else
struct flock fl;
ngx_memzero(&fl, sizeof(struct flock));
@@ -801,7 +810,7 @@
if (fcntl(fd, F_SETLK, &fl) == -1) {
return ngx_errno;
}
-
+#endif
return 0;
}
diff -Paur --no-dereference -- nginx.upstream/src/os/unix/ngx_posix_config.h nginx/src/os/unix/ngx_posix_config.h
--- nginx.upstream/src/os/unix/ngx_posix_config.h
+++ nginx/src/os/unix/ngx_posix_config.h
@@ -37,6 +37,7 @@
#include <sys/types.h>
#include <sys/time.h>
+#include <sys/select.h>
#if (NGX_HAVE_UNISTD_H)
#include <unistd.h>
#endif
diff -Paur --no-dereference -- nginx.upstream/src/os/unix/ngx_process.c nginx/src/os/unix/ngx_process.c
--- nginx.upstream/src/os/unix/ngx_process.c
+++ nginx/src/os/unix/ngx_process.c
@@ -71,7 +71,9 @@
{ SIGINT, "SIGINT", "", ngx_signal_handler },
+#ifdef SIGIO
{ SIGIO, "SIGIO", "", ngx_signal_handler },
+#endif
{ SIGCHLD, "SIGCHLD", "", ngx_signal_handler },
@@ -87,7 +89,9 @@
ngx_spawn_process(ngx_cycle_t *cycle, ngx_spawn_proc_pt proc, void *data,
char *name, ngx_int_t respawn)
{
+#ifdef FIOASYNC
u_long on;
+#endif
ngx_pid_t pid;
ngx_int_t s;
@@ -142,6 +146,7 @@
return NGX_INVALID_PID;
}
+#ifdef FIOASYNC
on = 1;
if (ioctl(ngx_processes[s].channel[0], FIOASYNC, &on) == -1) {
ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_errno,
@@ -149,13 +154,16 @@
ngx_close_channel(ngx_processes[s].channel, cycle->log);
return NGX_INVALID_PID;
}
+#endif
+#ifdef F_SETOWN
if (fcntl(ngx_processes[s].channel[0], F_SETOWN, ngx_pid) == -1) {
ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_errno,
"fcntl(F_SETOWN) failed while spawning \"%s\"", name);
ngx_close_channel(ngx_processes[s].channel, cycle->log);
return NGX_INVALID_PID;
}
+#endif
if (fcntl(ngx_processes[s].channel[0], F_SETFD, FD_CLOEXEC) == -1) {
ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_errno,
@@ -394,9 +402,11 @@
ngx_sigalrm = 1;
break;
+#ifdef SIGIO
case SIGIO:
ngx_sigio = 1;
break;
+#endif
case SIGCHLD:
ngx_reap = 1;
@@ -433,7 +443,9 @@
case ngx_signal_value(NGX_RECONFIGURE_SIGNAL):
case ngx_signal_value(NGX_CHANGEBIN_SIGNAL):
+#ifdef SIGIO
case SIGIO:
+#endif
action = ", ignoring";
break;
}
diff -Paur --no-dereference -- nginx.upstream/src/os/unix/ngx_process_cycle.c nginx/src/os/unix/ngx_process_cycle.c
--- nginx.upstream/src/os/unix/ngx_process_cycle.c
+++ nginx/src/os/unix/ngx_process_cycle.c
@@ -69,6 +69,19 @@
static ngx_log_t ngx_exit_log;
static ngx_open_file_t ngx_exit_log_file;
+static void
+ready(void)
+{
+ const char *readyfd_env = getenv("READYFD");
+ if ( !readyfd_env )
+ return;
+ int readyfd = atoi(readyfd_env);
+ char c = '\n';
+ write(readyfd, &c, 1);
+ close(readyfd);
+ unsetenv("READYFD");
+}
+
void
ngx_master_process_cycle(ngx_cycle_t *cycle)
@@ -79,7 +92,7 @@
ngx_int_t i;
ngx_uint_t sigio;
sigset_t set;
- struct itimerval itv;
+ struct itimerspec its;
ngx_uint_t live;
ngx_msec_t delay;
ngx_core_conf_t *ccf;
@@ -87,7 +100,9 @@
sigemptyset(&set);
sigaddset(&set, SIGCHLD);
sigaddset(&set, SIGALRM);
+#ifdef SIGIO
sigaddset(&set, SIGIO);
+#endif
sigaddset(&set, SIGINT);
sigaddset(&set, ngx_signal_value(NGX_RECONFIGURE_SIGNAL));
sigaddset(&set, ngx_signal_value(NGX_REOPEN_SIGNAL));
@@ -136,8 +151,12 @@
sigio = 0;
live = 1;
+ ready();
+
for ( ;; ) {
if (delay) {
+ timer_t timer;
+
if (ngx_sigalrm) {
sigio = 0;
delay *= 2;
@@ -147,15 +166,16 @@
ngx_log_debug1(NGX_LOG_DEBUG_EVENT, cycle->log, 0,
"termination cycle: %M", delay);
- itv.it_interval.tv_sec = 0;
- itv.it_interval.tv_usec = 0;
- itv.it_value.tv_sec = delay / 1000;
- itv.it_value.tv_usec = (delay % 1000 ) * 1000;
+ its.it_interval.tv_sec = 0;
+ its.it_interval.tv_nsec = 0;
+ its.it_value.tv_sec = delay / 1000000;
+ its.it_value.tv_nsec = (delay % 1000 ) * 1000000;
- if (setitimer(ITIMER_REAL, &itv, NULL) == -1) {
+ if (timer_create(CLOCK_REALTIME, NULL, &timer) == -1) {
ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_errno,
- "setitimer() failed");
+ "timer_create() failed");
}
+ timer_settime(timer, 0, &its, NULL);
}
ngx_log_debug0(NGX_LOG_DEBUG_EVENT, cycle->log, 0, "sigsuspend");
@@ -294,6 +314,8 @@
}
}
+ ready();
+
for ( ;; ) {
ngx_log_debug0(NGX_LOG_DEBUG_EVENT, cycle->log, 0, "worker cycle");
@@ -804,11 +826,13 @@
exit(2);
}
+#ifndef __sortix__
if (initgroups(ccf->username, ccf->group) == -1) {
ngx_log_error(NGX_LOG_EMERG, cycle->log, ngx_errno,
"initgroups(%s, %d) failed",
ccf->username, ccf->group);
}
+#endif
#if (NGX_HAVE_PR_SET_KEEPCAPS && NGX_HAVE_CAPABILITIES)
if (ccf->transparent && ccf->user) {
diff -Paur --no-dereference -- nginx.upstream/src/os/unix/ngx_shmem.c nginx/src/os/unix/ngx_shmem.c
--- nginx.upstream/src/os/unix/ngx_shmem.c
+++ nginx/src/os/unix/ngx_shmem.c
@@ -9,18 +9,18 @@
#include <ngx_core.h>
-#if (NGX_HAVE_MAP_ANON)
+#if (NGX_HAVE_MAP_ANONYMOUS)
ngx_int_t
ngx_shm_alloc(ngx_shm_t *shm)
{
shm->addr = (u_char *) mmap(NULL, shm->size,
PROT_READ|PROT_WRITE,
- MAP_ANON|MAP_SHARED, -1, 0);
+ MAP_ANONYMOUS|MAP_PRIVATE, -1, 0);
if (shm->addr == MAP_FAILED) {
ngx_log_error(NGX_LOG_ALERT, shm->log, ngx_errno,
- "mmap(MAP_ANON|MAP_SHARED, %uz) failed", shm->size);
+ "mmap(MAP_ANONYMOUS|MAP_PRIVATE, %uz) failed", shm->size);
return NGX_ERROR;
}
@@ -53,11 +53,11 @@
}
shm->addr = (u_char *) mmap(NULL, shm->size, PROT_READ|PROT_WRITE,
- MAP_SHARED, fd, 0);
+ MAP_PRIVATE, fd, 0);
if (shm->addr == MAP_FAILED) {
ngx_log_error(NGX_LOG_ALERT, shm->log, ngx_errno,
- "mmap(/dev/zero, MAP_SHARED, %uz) failed", shm->size);
+ "mmap(/dev/zero, MAP_PRIVATE, %uz) failed", shm->size);
}
if (close(fd) == -1) {
diff -Paur --no-dereference -- nginx.upstream/src/os/unix/ngx_thread_mutex.c nginx/src/os/unix/ngx_thread_mutex.c
--- nginx.upstream/src/os/unix/ngx_thread_mutex.c
+++ nginx/src/os/unix/ngx_thread_mutex.c
@@ -87,6 +87,7 @@
return NGX_ERROR;
}
+#ifdef PTHREAD_MUTEX_ERRORCHECK
err = pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_ERRORCHECK);
if (err != 0) {
ngx_log_error(NGX_LOG_EMERG, log, err,
@@ -94,6 +95,7 @@
"(PTHREAD_MUTEX_ERRORCHECK) failed");
return NGX_ERROR;
}
+#endif
err = pthread_mutex_init(mtx, &attr);
if (err != 0) {
diff -Paur --no-dereference -- nginx.upstream/src/os/unix/ngx_time.h nginx/src/os/unix/ngx_time.h
--- nginx.upstream/src/os/unix/ngx_time.h
+++ nginx/src/os/unix/ngx_time.h
@@ -41,6 +41,10 @@
#define ngx_tm_zone tm_zone
#endif
+#ifdef __sortix__
+#define timezone 0
+#endif
+
#if (NGX_SOLARIS)
diff -Paur --no-dereference -- nginx.upstream/src/os/unix/ngx_user.c nginx/src/os/unix/ngx_user.c
--- nginx.upstream/src/os/unix/ngx_user.c
+++ nginx/src/os/unix/ngx_user.c
@@ -46,6 +46,7 @@
ngx_int_t
ngx_libc_crypt(ngx_pool_t *pool, u_char *key, u_char *salt, u_char **encrypted)
{
+#ifndef __sortix__
char *value;
size_t len;
ngx_err_t err;
@@ -65,6 +66,9 @@
}
err = ngx_errno;
+#else
+ ngx_err_t err = errno = ENOTSUP;
+#endif
ngx_log_error(NGX_LOG_CRIT, pool->log, err, "crypt() failed");