This is an automated email from the ASF dual-hosted git repository.
michaelo pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/tomcat-native.git
The following commit(s) were added to refs/heads/master by this push:
new a3498fa BZ 64942: Expose support for Unix Domain Sockets in APR v1.6
and up
a3498fa is described below
commit a3498fa0992ac37c7358e00d1555395b52762e9b
Author: minfrin <[email protected]>
AuthorDate: Sun Nov 29 17:31:57 2020 +0000
BZ 64942: Expose support for Unix Domain Sockets in APR v1.6 and up
This closes #8
---
java/org/apache/tomcat/jni/Address.java | 5 +++--
java/org/apache/tomcat/jni/Library.java | 8 ++++++++
java/org/apache/tomcat/jni/Socket.java | 1 +
native/include/tcn.h | 9 +++++++++
native/src/info.c | 3 +++
native/src/jnilib.c | 5 +++++
native/src/network.c | 26 ++++++++++++++++++++++++++
xdocs/index.xml | 25 +++++++++++++++++--------
xdocs/miscellaneous/changelog.xml | 3 +++
9 files changed, 75 insertions(+), 10 deletions(-)
diff --git a/java/org/apache/tomcat/jni/Address.java
b/java/org/apache/tomcat/jni/Address.java
index 2310367..38a08f8 100644
--- a/java/org/apache/tomcat/jni/Address.java
+++ b/java/org/apache/tomcat/jni/Address.java
@@ -40,8 +40,9 @@ public class Address {
/**
* Create apr_sockaddr_t from hostname, address family, and port.
- * @param hostname The hostname or numeric address string to
resolve/parse, or
- * NULL to build an address that corresponds to 0.0.0.0 or ::
+ * @param hostname The hostname or numeric address string to
resolve/parse, the
+ * path of the Unix Domain Socket, or NULL to build an
address
+ * that corresponds to 0.0.0.0 or ::
* @param family The address family to use, or APR_UNSPEC if the system
should
* decide.
* @param port The port number.
diff --git a/java/org/apache/tomcat/jni/Library.java
b/java/org/apache/tomcat/jni/Library.java
index c6c1398..a9849d3 100644
--- a/java/org/apache/tomcat/jni/Library.java
+++ b/java/org/apache/tomcat/jni/Library.java
@@ -177,6 +177,12 @@ public final class Library {
/* Is the O_NONBLOCK flag inherited from listening sockets?
*/
public static boolean APR_O_NONBLOCK_INHERITED = false;
+ /* Poll operations are interruptable by apr_pollset_wakeup().
+ */
+ public static boolean APR_POLLSET_WAKEABLE = false;
+ /* Support for Unix Domain Sockets.
+ */
+ public static boolean APR_HAVE_UNIX = false;
public static int APR_SIZEOF_VOIDP;
@@ -244,6 +250,8 @@ public final class Library {
APR_CHARSET_EBCDIC = has(18);
APR_TCP_NODELAY_INHERITED = has(19);
APR_O_NONBLOCK_INHERITED = has(20);
+ APR_POLLSET_WAKEABLE = has(21);
+ APR_HAVE_UNIX = has(22);
if (APR_MAJOR_VERSION < 1) {
throw new UnsatisfiedLinkError("Unsupported APR Version (" +
aprVersionString() + ")");
diff --git a/java/org/apache/tomcat/jni/Socket.java
b/java/org/apache/tomcat/jni/Socket.java
index 976dd38..8882f3b 100644
--- a/java/org/apache/tomcat/jni/Socket.java
+++ b/java/org/apache/tomcat/jni/Socket.java
@@ -79,6 +79,7 @@ public class Socket {
public static final int APR_UNSPEC = 0;
public static final int APR_INET = 1;
public static final int APR_INET6 = 2;
+ public static final int APR_UNIX = 3;
public static final int APR_PROTO_TCP = 6; /** TCP */
public static final int APR_PROTO_UDP = 17; /** UDP */
diff --git a/native/include/tcn.h b/native/include/tcn.h
index d2f316b..168549f 100644
--- a/native/include/tcn.h
+++ b/native/include/tcn.h
@@ -281,11 +281,20 @@ typedef struct {
#define APR_INET6 APR_INET
#endif
+#ifdef APR_UNIX
#define GET_S_FAMILY(T, F) \
if (F == 0) T = APR_UNSPEC; \
else if (F == 1) T = APR_INET; \
else if (F == 2) T = APR_INET6; \
+ else if (F == 3) T = APR_UNIX; \
else T = F
+#else
+#define GET_S_FAMILY(T, F) \
+ if (F == 0) T = APR_UNSPEC; \
+ else if (F == 1) T = APR_INET; \
+ else if (F == 2) T = APR_INET6; \
+ else T = F
+#endif
#define GET_S_TYPE(T, F) \
if (F == 0) T = SOCK_STREAM; \
diff --git a/native/src/info.c b/native/src/info.c
index 23afa31..4734e54 100644
--- a/native/src/info.c
+++ b/native/src/info.c
@@ -198,6 +198,9 @@ static void fill_ainfo(JNIEnv *e, jobject obj,
apr_sockaddr_t *info)
if (info->family == APR_UNSPEC) f = 0;
else if (info->family == APR_INET) f = 1;
else if (info->family == APR_INET6) f = 2;
+#ifdef APR_UNIX
+ else if (info->family == APR_UNIX) f = 3;
+#endif
else f = info->family;
SET_AINFO_J(pool, P2J(info->pool));
diff --git a/native/src/jnilib.c b/native/src/jnilib.c
index 670a311..32f5151 100644
--- a/native/src/jnilib.c
+++ b/native/src/jnilib.c
@@ -431,6 +431,11 @@ TCN_IMPLEMENT_CALL(jboolean, Library, has)(TCN_STDARGS,
jint what)
rv = JNI_TRUE;
#endif
break;
+ case 22:
+#ifdef APR_UNIX
+ rv = JNI_TRUE;
+#endif
+ break;
}
return rv;
}
diff --git a/native/src/network.c b/native/src/network.c
index 1914ef0..05f0fd2 100644
--- a/native/src/network.c
+++ b/native/src/network.c
@@ -19,6 +19,7 @@
#ifdef TCN_DO_STATISTICS
#include "apr_atomic.h"
+#include "apr_file_io.h"
static volatile apr_uint32_t sp_created = 0;
static volatile apr_uint32_t sp_closed = 0;
@@ -70,6 +71,26 @@ void sp_network_dump_statistics()
#endif /* TCN_DO_STATISTICS */
+static apr_status_t sp_socket_remove(void *data)
+{
+#ifdef APR_UNIX
+ tcn_socket_t *s = (tcn_socket_t *)data;
+
+ if (s->sock) {
+ apr_sockaddr_t *sa = NULL;
+ apr_socket_addr_get(&sa, APR_LOCAL, s->sock);
+ if (sa && sa->family == APR_UNIX) {
+ char *path = NULL;
+ apr_getnameinfo(&path, sa, 0);
+ if (path) {
+ apr_file_remove(path, s->pool);
+ }
+ }
+ }
+#endif
+ return APR_SUCCESS;
+}
+
extern apr_pool_t *tcn_global_pool;
static apr_status_t sp_socket_cleanup(void *data)
{
@@ -316,6 +337,11 @@ TCN_IMPLEMENT_CALL(jint, Socket, bind)(TCN_STDARGS, jlong
sock,
TCN_ASSERT(sock != 0);
TCN_ASSERT(s->sock != NULL);
rv = (jint)apr_socket_bind(s->sock, a);
+
+ apr_pool_cleanup_register(s->pool, (const void *)s,
+ sp_socket_remove,
+ apr_pool_cleanup_null);
+
return rv;
}
diff --git a/xdocs/index.xml b/xdocs/index.xml
index 518973a..9844af2 100644
--- a/xdocs/index.xml
+++ b/xdocs/index.xml
@@ -52,6 +52,7 @@
<li>Non-blocking I/O for Keep-Alive requests (between requests)</li>
<li>Uses OpenSSL for TLS/SSL capabilities (if supported by linked APR
library)</li>
<li>FIPS 140-2 support for TLS/SSL (if supported by linked OpenSSL
library)</li>
+ <li>Support for IPv4, IPv6 and Unix Domain Sockets</li>
</ul>
</section>
@@ -174,6 +175,14 @@ list of changes.
<p>
Please see the Apache Tomcat documentation for configuration specifics.
</p>
+
+ <p>
+ When using Unix Domain Sockets a cleanup is registered to delete the
+ socket on destruction of the socket, or shutdown of the application.
+ Should the application terminate abnormally, the socket deletion will
+ need to be handled by the caller or by the administrator.
+ </p>
+
</subsection>
<subsection name="UNIX">
@@ -187,11 +196,11 @@ export LD_LIBRARY_PATH</source>
Start tomcat and check for the messages like this ones:
</p>
<source wrapped="true"
->Feb 8, 2015 12:27:41 PM org.apache.catalina.core.AprLifecycleListener init
+>Nov 29, 2020 12:27:41 PM org.apache.catalina.core.AprLifecycleListener init
INFO: Loaded APR based Apache Tomcat Native library 1.x.y.
-Feb 8, 2015 12:27:41 PM org.apache.catalina.core.AprLifecycleListener init
-INFO: APR capabilities: IPv6 [true], sendfile [true], accept filters [false],
random [true].
-Feb 8, 2015 12:27:41 PM org.apache.coyote.http11.Http11AprProtocol init
+Nov 29, 2020 12:27:41 PM org.apache.catalina.core.AprLifecycleListener init
+INFO: APR capabilities: IPv6 [true], sendfile [true], accept filters [false],
random [true], UDS [true].
+Nov 29, 2020 12:27:41 PM org.apache.coyote.http11.Http11AprProtocol init
INFO: Initializing Coyote HTTP/1.1 on http-8080</source>
<p>
@@ -214,11 +223,11 @@ INFO: Initializing Coyote HTTP/1.1 on http-8080</source>
Start tomcat and check for the messages like this ones:
</p>
<source wrapped="true"
->Feb 8, 2015 2:48:17 PM org.apache.catalina.core.AprLifecycleListener init
+>Nov 29, 2020 2:48:17 PM org.apache.catalina.core.AprLifecycleListener init
INFO: Loaded APR based Apache Tomcat Native library 1.x.y.
-Feb 8, 2015 2:48:17 PM org.apache.catalina.core.AprLifecycleListener init
-INFO: APR capabilities: IPv6 [false], sendfile [true], accept filters [false],
random [true].
-Feb 8, 2015 2:48:18 PM org.apache.coyote.http11.Http11AprProtocol init
+Nov 29, 2020 2:48:17 PM org.apache.catalina.core.AprLifecycleListener init
+INFO: APR capabilities: IPv6 [false], sendfile [true], accept filters [false],
random [true], UDS [false].
+Nov 29, 2020 2:48:18 PM org.apache.coyote.http11.Http11AprProtocol init
INFO: Initializing Coyote HTTP/1.1 on http-8080</source>
</subsection>
diff --git a/xdocs/miscellaneous/changelog.xml
b/xdocs/miscellaneous/changelog.xml
index f607e81..d477712 100644
--- a/xdocs/miscellaneous/changelog.xml
+++ b/xdocs/miscellaneous/changelog.xml
@@ -39,6 +39,9 @@
<fix>
Enable building to continue against OpenSSL 3.x and 1.1.1. (markt)
</fix>
+ <add>
+ <bug>64942<bug>: Expose support for Unix Domain Sockets in APR v1.6 and
up. (minfrin)
+ </add>
</changelog>
</section>
<section name="Changes in 1.2.25">
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]