Opened 3 years ago
Closed 3 years ago
#2381 closed defect (wontfix)
Unable to read configuration from /dev/stdin
| Reported by: | Owned by: | ||
|---|---|---|---|
| Priority: | minor | Milestone: | |
| Component: | nginx-core | Version: | 1.23.x |
| Keywords: | test configuration | Cc: | moronizzz@… |
| uname -a: | Linux hostname 5.10.0-17-amd64 #1 SMP Debian 5.10.136-1 (2022-08-13) x86_64 GNU/Linux | ||
| nginx -V: |
nginx version: nginx/1.23.1
built by gcc 10.2.1 20210110 (Debian 10.2.1-6) built with OpenSSL 1.1.1n 15 Mar 2022 TLS SNI support enabled configure arguments: --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --modules-path=/usr/lib/nginx/modules --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --http-client-body-temp-path=/var/cache/nginx/client_temp --http-proxy-temp-path=/var/cache/nginx/proxy_temp --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp --http-scgi-temp-path=/var/cache/nginx/scgi_temp --user=nginx --group=nginx --with-compat --with-file-aio --with-threads --with-http_addition_module --with-http_auth_request_module --with-http_dav_module --with-http_flv_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_mp4_module --with-http_random_index_module --with-http_realip_module --with-http_secure_link_module --with-http_slice_module --with-http_ssl_module --with-http_stub_status_module --with-http_sub_module --with-http_v2_module --with-mail --with-mail_ssl_module --with-stream --with-stream_realip_module --with-stream_ssl_module --with-stream_ssl_preread_module --with-cc-opt='-g -O2 -ffile-prefix-map=/data/builder/debuild/nginx-1.23.1/debian/debuild-base/nginx-1.23.1=. -fstack-protector-strong -Wformat -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -fPIC' --with-ld-opt='-Wl,-z,relro -Wl,-z,now -Wl,--as-needed -pie' |
||
Description
GNU bash, version 5.1.4
nginx version: nginx/1.23.1
There is an error when I try to test configuration from /dev/stdin
$ nginx -prefix=/etc/nginx -t -c /dev/stdin <<< "events {}"
nginx: the configuration file /dev/stdin syntax is ok
nginx: [emerg] no "events" section in configuration
nginx: configuration file /dev/stdin test failed
Configuration validation using /dev/stdin worked earlier e.g.
GNU bash, version 4.4.12
nginx version: nginx/1.19.6
Linux hostname 4.9.0-9-amd64 SMP Debian 4.9.168-1+deb9u3 (2019-06-16) x86_64 GNU/Linux
$ nginx -prefix=/etc/nginx -t -c /dev/stdin <<< "events {}"
nginx: the configuration file /dev/stdin syntax is ok
nginx: configuration file /dev/stdin test is successful
Note:
See TracTickets
for help on using tickets.

Since nginx expects configuration file to be a real file and, in particular, uses its size while parsing, it is not possible to use configuration provided via stdin.
Most likely this worked for you because bash used to provide here-documents in temporary files (see here for details), but not anymore. For example, bash 5.1.8 on Ubuntu 21.10 uses pipe() instead, at least in some cases:
$ strace -f bash -c "cat <<< foo" ... [pid 37903] pipe([3, 4]) = 0 [pid 37903] fcntl(4, F_GETPIPE_SZ) = 65536 [pid 37903] write(4, "foo\n", 4) = 4 [pid 37903] close(4) = 0 [pid 37903] dup2(3, 0) = 0 [pid 37903] close(3) = 0 [pid 37903] execve("/usr/bin/cat", ["cat"], 0x56523a61d550 /* 23 vars */) = 0 ...To fix this, consider providing appropriate temporary configuration files yourself, instead of relying on non-documented and not guaranteed shell behaviour.