]> git.feebdaed.xyz Git - 0xmirror/nginx.git/commitdiff
Stream: allow servers with no handler.
authorRoman Arutyunyan <arut@nginx.com>
Thu, 27 Jun 2024 13:29:56 +0000 (17:29 +0400)
committerRoman Arutyunyan <arut@nginx.com>
Thu, 27 Jun 2024 13:29:56 +0000 (17:29 +0400)
Previously handlers were mandatory.  However they are not always needed.
For example, a server configured with ssl_reject_handshake does not need a
handler.  Such servers required a fake handler to pass the check.  Now handler
absence check is moved to runtime.  If handler is missing, the connection is
closed with 500 code.

src/stream/ngx_stream_core_module.c

index 3093963b7df20193b4033e64582de26ad3c641cd..40951c2914665a5927458fa277171fdf2d9032a8 100644 (file)
@@ -458,6 +458,13 @@ ngx_stream_core_content_phase(ngx_stream_session_t *s,
         return NGX_OK;
     }
 
+    if (cscf->handler == NULL) {
+        ngx_log_debug0(NGX_LOG_DEBUG_STREAM, c->log, 0,
+                       "no handler for server");
+        ngx_stream_finalize_session(s, NGX_STREAM_INTERNAL_SERVER_ERROR);
+        return NGX_OK;
+    }
+
     cscf->handler(s);
 
     return NGX_OK;
@@ -734,13 +741,6 @@ ngx_stream_core_merge_srv_conf(ngx_conf_t *cf, void *parent, void *child)
         conf->resolver = prev->resolver;
     }
 
-    if (conf->handler == NULL) {
-        ngx_log_error(NGX_LOG_EMERG, cf->log, 0,
-                      "no handler for server in %s:%ui",
-                      conf->file_name, conf->line);
-        return NGX_CONF_ERROR;
-    }
-
     if (conf->error_log == NULL) {
         if (prev->error_log) {
             conf->error_log = prev->error_log;