Add a configure check for SSL_get0_alpn_selected() and use it instead
of TLSEXT_TYPE_application_layer_protocol_negotiation (which was added
to openssl at the same time as ALPN support, but arrived in libressl
before ALPN support).

While there, use upstream's -Wfoo CFLAGS (CFLAGS are passed in by ports
so we miss their usual checks), and add a bonus arc4random conversion
(main use is in their dns resolver, I think).

Unbreaks the port.

OK?


Index: Makefile
===================================================================
RCS file: /cvs/ports/www/nginx/Makefile,v
retrieving revision 1.66
diff -u -p -r1.66 Makefile
--- Makefile    31 Oct 2014 14:40:59 -0000      1.66
+++ Makefile    6 Nov 2014 12:10:03 -0000
@@ -3,6 +3,7 @@
 COMMENT=       robust and small HTTP server and mail proxy server
 
 VERSION=       1.7.7
+REVISION=      0
 DISTNAME=      nginx-${VERSION}
 CATEGORIES=    www
 
@@ -25,6 +26,7 @@ LIB_DEPENDS+= devel/pcre
 
 NGINX_DIR=     /var/www
 SUBST_VARS=    NGINX_DIR
+CFLAGS+=       -Wall -Wpointer-arith -Werror
 
 FLAVORS=       lua naxsi passenger
 FLAVOR?=
Index: patches/patch-auto_lib_openssl_conf
===================================================================
RCS file: patches/patch-auto_lib_openssl_conf
diff -N patches/patch-auto_lib_openssl_conf
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ patches/patch-auto_lib_openssl_conf 6 Nov 2014 12:10:03 -0000
@@ -0,0 +1,20 @@
+$OpenBSD$
+--- auto/lib/openssl/conf.orig Thu Nov  6 11:59:59 2014
++++ auto/lib/openssl/conf      Thu Nov  6 12:00:02 2014
+@@ -59,6 +59,16 @@ else
+             have=NGX_SSL . auto/have
+             CORE_LIBS="$CORE_LIBS $ngx_feature_libs $NGX_LIBDL"
+             OPENSSL=YES
++
++            ngx_feature="SSL_get0_alpn_selected()"
++            ngx_feature_name="NGX_HAVE_ALPN"
++            ngx_feature_run=no
++            ngx_feature_incs="#include <openssl/ssl.h>"
++            ngx_feature_path=
++            ngx_feature_libs="-lssl -lcrypto"
++            ngx_feature_test="SSL_get0_alpn_selected(NULL, NULL, NULL);"
++            . auto/feature
++
+         fi
+     fi
+ 
Index: patches/patch-src_core_ngx_config_h
===================================================================
RCS file: patches/patch-src_core_ngx_config_h
diff -N patches/patch-src_core_ngx_config_h
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ patches/patch-src_core_ngx_config_h 6 Nov 2014 12:10:03 -0000
@@ -0,0 +1,12 @@
+$OpenBSD$
+--- src/core/ngx_config.h.orig Thu Nov  6 11:42:58 2014
++++ src/core/ngx_config.h      Thu Nov  6 11:45:38 2014
+@@ -54,7 +54,7 @@
+ #define ngx_signal_helper(n)     SIG##n
+ #define ngx_signal_value(n)      ngx_signal_helper(n)
+ 
+-#define ngx_random               random
++#define ngx_random               arc4random
+ 
+ /* TODO: #ifndef */
+ #define NGX_SHUTDOWN_SIGNAL      QUIT
Index: patches/patch-src_http_modules_ngx_http_ssl_module_c
===================================================================
RCS file: patches/patch-src_http_modules_ngx_http_ssl_module_c
diff -N patches/patch-src_http_modules_ngx_http_ssl_module_c
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ patches/patch-src_http_modules_ngx_http_ssl_module_c        6 Nov 2014 
12:10:03 -0000
@@ -0,0 +1,30 @@
+$OpenBSD$
+--- src/http/modules/ngx_http_ssl_module.c.orig        Thu Nov  6 12:06:47 2014
++++ src/http/modules/ngx_http_ssl_module.c     Thu Nov  6 12:08:20 2014
+@@ -20,7 +20,7 @@ typedef ngx_int_t (*ngx_ssl_variable_handler_pt)(ngx_c
+ #define NGX_HTTP_NPN_ADVERTISE  "\x08http/1.1"
+ 
+ 
+-#ifdef TLSEXT_TYPE_application_layer_protocol_negotiation
++#ifdef NGX_HAVE_ALPN
+ static int ngx_http_ssl_alpn_select(ngx_ssl_conn_t *ssl_conn,
+     const unsigned char **out, unsigned char *outlen,
+     const unsigned char *in, unsigned int inlen, void *arg);
+@@ -314,7 +314,7 @@ static ngx_http_variable_t  ngx_http_ssl_vars[] = {
+ static ngx_str_t ngx_http_ssl_sess_id_ctx = ngx_string("HTTP");
+ 
+ 
+-#ifdef TLSEXT_TYPE_application_layer_protocol_negotiation
++#ifdef NGX_HAVE_ALPN
+ 
+ static int
+ ngx_http_ssl_alpn_select(ngx_ssl_conn_t *ssl_conn, const unsigned char **out,
+@@ -646,7 +646,7 @@ ngx_http_ssl_merge_srv_conf(ngx_conf_t *cf, void *pare
+ 
+ #endif
+ 
+-#ifdef TLSEXT_TYPE_application_layer_protocol_negotiation
++#ifdef NGX_HAVE_ALPN
+     SSL_CTX_set_alpn_select_cb(conf->ssl.ctx, ngx_http_ssl_alpn_select, NULL);
+ #endif
+ 
Index: patches/patch-src_http_ngx_http_request_c
===================================================================
RCS file: patches/patch-src_http_ngx_http_request_c
diff -N patches/patch-src_http_ngx_http_request_c
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ patches/patch-src_http_ngx_http_request_c   6 Nov 2014 12:10:03 -0000
@@ -0,0 +1,12 @@
+$OpenBSD$
+--- src/http/ngx_http_request.c.orig   Thu Nov  6 12:05:45 2014
++++ src/http/ngx_http_request.c        Thu Nov  6 12:06:04 2014
+@@ -771,7 +771,7 @@ ngx_http_ssl_handshake_handler(ngx_connection_t *c)
+         const unsigned char     *data;
+         static const ngx_str_t   spdy = ngx_string(NGX_SPDY_NPN_NEGOTIATED);
+ 
+-#ifdef TLSEXT_TYPE_application_layer_protocol_negotiation
++#ifdef NGINX_HAVE_ALPN
+         SSL_get0_alpn_selected(c->ssl->connection, &data, &len);
+ 
+ #ifdef TLSEXT_TYPE_next_proto_neg
Index: patches/patch-src_os_unix_ngx_posix_init_c
===================================================================
RCS file: patches/patch-src_os_unix_ngx_posix_init_c
diff -N patches/patch-src_os_unix_ngx_posix_init_c
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ patches/patch-src_os_unix_ngx_posix_init_c  6 Nov 2014 12:10:03 -0000
@@ -0,0 +1,15 @@
+$OpenBSD$
+
+using arc4random (see ngx_config.h) so no need to seed.
+
+--- src/os/unix/ngx_posix_init.c.orig  Thu Nov  6 11:48:48 2014
++++ src/os/unix/ngx_posix_init.c       Thu Nov  6 11:49:04 2014
+@@ -75,8 +75,6 @@ ngx_os_init(ngx_log_t *log)
+     ngx_inherited_nonblocking = 0;
+ #endif
+ 
+-    srandom(ngx_time());
+-
+     return NGX_OK;
+ }
+ 
Index: patches/patch-src_os_unix_ngx_process_cycle_c
===================================================================
RCS file: patches/patch-src_os_unix_ngx_process_cycle_c
diff -N patches/patch-src_os_unix_ngx_process_cycle_c
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ patches/patch-src_os_unix_ngx_process_cycle_c       6 Nov 2014 12:10:03 
-0000
@@ -0,0 +1,15 @@
+$OpenBSD$
+
+using arc4random (see ngx_config.h) so no need to seed.
+
+--- src/os/unix/ngx_process_cycle.c.orig       Thu Nov  6 11:48:48 2014
++++ src/os/unix/ngx_process_cycle.c    Thu Nov  6 11:49:12 2014
+@@ -1015,8 +1015,6 @@ nochroot:
+                       "sigprocmask() failed");
+     }
+ 
+-    srandom((ngx_pid << 16) ^ ngx_time());
+-
+     /*
+      * disable deleting previous events for the listening sockets because
+      * in the worker processes there are no events at all at this point

Reply via email to