Squashed 'third_party/lksctp-tools/' content from commit 200eca7f1
Change-Id: I8f7575513f114b205178cac5c6b3706f3d725cb5
git-subtree-dir: third_party/lksctp-tools
git-subtree-split: 200eca7f1419b1ae53958b51e8551f7e7f6cd467
diff --git a/src/withsctp/.gitignore b/src/withsctp/.gitignore
new file mode 100644
index 0000000..498e578
--- /dev/null
+++ b/src/withsctp/.gitignore
@@ -0,0 +1,2 @@
+checksctp
+withsctp
diff --git a/src/withsctp/Makefile.am b/src/withsctp/Makefile.am
new file mode 100644
index 0000000..3157588
--- /dev/null
+++ b/src/withsctp/Makefile.am
@@ -0,0 +1,28 @@
+# -*- Makefile -*-
+#
+# The author (La Monte H.P. Yarroll) disclaims copyright on this file.
+#
+
+include $(top_srcdir)/Makefile.vars
+include $(top_srcdir)/Makefile.dirs
+include $(top_srcdir)/Makefile.rules
+
+bin_PROGRAMS = checksctp
+bin_SCRIPTS = withsctp
+
+AM_CPPFLAGS=-I$(top_builddir)/src/include
+pkglib_LTLIBRARIES = libwithsctp.la
+libwithsctp_la_SOURCES = sctp_load_libs.c sctp_socket.c sctp_bind.c \
+ sctp_sockopt.c sctp_socket.h
+libwithsctp_la_LDFLAGS = -version-info \
+ @LIBWITHSCTP_CURRENT@:@LIBWITHSCTP_REVISION@:@LIBWITHSCTP_AGE@ -ldl
+
+pkgdoc_DATA = sctp_load_libs.c sctp_socket.c sctp_bind.c \
+ sctp_sockopt.c sctp_socket.h checksctp.c
+
+withsctp: withsctp.in
+ $(edit) $< >$@
+
+EXTRA_DIST += withsctp.in
+
+CLEANFILES += withsctp
diff --git a/src/withsctp/README b/src/withsctp/README
new file mode 100644
index 0000000..c7d8b97
--- /dev/null
+++ b/src/withsctp/README
@@ -0,0 +1,15 @@
+This is a package to let you use SCTP with your existing TCP-based binaries.
+
+usage:
+
+$ withsctp xinetd # Start xinetd stream services on SCTP.
+$ withsctp telnet localhost # Make a telnet over SCTP/IP connection.
+
+To install, edit the top of Makefile to set your install path(s) and then
+
+$ make all
+# make install
+
+This package originally written by La Monte H.P. Yarroll <piggy@acm.org>.
+To submit fixes or bug reports see lksctp.sourceforget.net.
+You can try the author or lksctp-developers@lists.sourceforget.net for support.
diff --git a/src/withsctp/checksctp.c b/src/withsctp/checksctp.c
new file mode 100644
index 0000000..bda9c1d
--- /dev/null
+++ b/src/withsctp/checksctp.c
@@ -0,0 +1,58 @@
+/* Does this host have SCTP?
+ *
+ * Copyright 2003 La Monte HP Yarroll <piggy@acm.org>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following
+ * disclaimer in the documentation and/or other materials provided with
+ * the distribution.
+ * 3. The name of the author may not be used to endorse or promote
+ * products derived from this software without specific prior written
+ * permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+ * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <sys/socket.h>
+#include <netinet/in.h>
+
+/* IPPROTO_SCTP SHOULD be defined in
+ * /usr/include/linux/in.h but probably isn't.
+ * It is an enum element, not a #define, so we can't easily check.
+ */
+#define SHOULD_IPPROTO_SCTP 132
+
+int main(void)
+{
+ int fd;
+
+ fd = socket(PF_INET, SOCK_STREAM, SHOULD_IPPROTO_SCTP);
+
+ if (fd <= 0) {
+ perror("checksctp");
+ exit(1);
+ } else {
+ fprintf(stderr, "SCTP supported\n");
+ }
+
+ close(fd);
+ return 0;
+}
diff --git a/src/withsctp/notes.txt b/src/withsctp/notes.txt
new file mode 100644
index 0000000..ef532ec
--- /dev/null
+++ b/src/withsctp/notes.txt
@@ -0,0 +1,6 @@
+Fri Dec 26 16:20:36 EST 2003
+
+It would be nice for withsctp to provide more facilities.
+
+Perhaps we could capture the bind call and allow substitution such as the
+arguments to sctp_darn.
diff --git a/src/withsctp/sctp_bind.c b/src/withsctp/sctp_bind.c
new file mode 100644
index 0000000..e744273
--- /dev/null
+++ b/src/withsctp/sctp_bind.c
@@ -0,0 +1,58 @@
+/* Wrap bind() to force the protocol for STREAM connections to SCTP.
+ *
+ * Thanks to Midgard Security Services for
+ * http://www.securiteam.com/tools/3D5PTR5QAE.html
+ * from whence I cribbed the code to find the old bind().
+ *
+ * gcc sctp_socket.c sctp_bind.c -o sctp_socket.so -ldl -shared -O2 -s
+ * export LD_PRELOAD=./sctp_socket.so
+ *
+ * Copyright 2003 La Monte HP Yarroll <piggy@acm.org>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following
+ * disclaimer in the documentation and/or other materials provided with
+ * the distribution.
+ * 3. The name of the author may not be used to endorse or promote
+ * products derived from this software without specific prior written
+ * permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+ * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+#include <string.h> /* for strncmp() */
+#include <stdio.h>
+#include "sctp_socket.h"
+
+/* IPPROTO_SCTP SHOULD be defined in
+ * /usr/include/linux/in.h but probably isn't.
+ * It is an enum element, not a #define, so we can't easily check.
+ */
+#define SHOULD_IPPROTO_SCTP 132
+
+int
+bind(int sockfd, const struct sockaddr *my_addr, socklen_t addrlen)
+{
+ _sctp_load_libs();
+
+ /* STUB. The intent is to allow us to substitute an elaborate call to
+ * bindx() for the initial call to bind(). TBD.
+ */
+
+ return (real_bind)(sockfd, my_addr, addrlen);
+}
diff --git a/src/withsctp/sctp_load_libs.c b/src/withsctp/sctp_load_libs.c
new file mode 100644
index 0000000..d6a521f
--- /dev/null
+++ b/src/withsctp/sctp_load_libs.c
@@ -0,0 +1,67 @@
+/* Load the real underlying functions for withsctp and related scripts.
+ *
+ * Copyright 2003 La Monte HP Yarroll <piggy@acm.org>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following
+ * disclaimer in the documentation and/or other materials provided with
+ * the distribution.
+ * 3. The name of the author may not be used to endorse or promote
+ * products derived from this software without specific prior written
+ * permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+ * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+#include <stdio.h>
+#include <stdlib.h>
+#include "sctp_socket.h"
+
+int (*real_bind)(int sockfd, const struct sockaddr *my_addr, socklen_t addrlen);
+int (*real_socket)(int domain, int type, int protocol);
+int (*real_setsockopt)(int s, int level, int optname, const void *optval,
+ socklen_t optlen);
+static void *lib_handle = NULL;
+
+void
+_sctp_load_libs(void)
+{
+ if (NULL != lib_handle) return; /* Only init once. */
+
+ if (!(lib_handle = dlopen("libc.so", RTLD_LAZY))) {
+ if (!(lib_handle = dlopen("libc.so.6", RTLD_LAZY))) {
+ fprintf(stderr, "error loading libc!\n");
+ exit (1);
+ }
+ }
+
+ if (!(real_socket = dlsym(lib_handle, "socket"))) {
+ fprintf(stderr, "socket() not found in libc!\n");
+ exit (1);
+ }
+
+ if (!(real_bind = dlsym(lib_handle, "bind"))) {
+ fprintf(stderr, "bind() not found in libc!\n");
+ exit (1);
+ }
+
+ if (!(real_setsockopt = dlsym(lib_handle, "setsockopt"))) {
+ fprintf(stderr, "setsockopt() not found in libc!\n");
+ exit (1);
+ }
+}
diff --git a/src/withsctp/sctp_socket.c b/src/withsctp/sctp_socket.c
new file mode 100644
index 0000000..37d73af
--- /dev/null
+++ b/src/withsctp/sctp_socket.c
@@ -0,0 +1,59 @@
+/* Wrap socket() to force the protocol to SCTP for STREAM connections.
+ *
+ * Thanks to Midgard Security Services for
+ * http://www.securiteam.com/tools/3D5PTR5QAE.html
+ * from whence I cribbed the code to find the old socket().
+ *
+ * gcc sctp_socket.c -o sctp_socket.so -ldl -shared -O2 -s
+ * export LD_PRELOAD=./sctp_socket.so
+ *
+ * Copyright 2003 La Monte HP Yarroll <piggy@acm.org>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following
+ * disclaimer in the documentation and/or other materials provided with
+ * the distribution.
+ * 3. The name of the author may not be used to endorse or promote
+ * products derived from this software without specific prior written
+ * permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+ * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+#include <string.h> /* for strncmp() */
+#include <stdio.h>
+#include "sctp_socket.h"
+
+/* IPPROTO_SCTP SHOULD be defined in
+ * /usr/include/linux/in.h but probably isn't.
+ * It is an enum element, not a #define, so we can't easily check.
+ */
+#define SHOULD_IPPROTO_SCTP 132
+
+int
+socket(int domain, int type, int protocol)
+{
+ _sctp_load_libs();
+
+ if (((PF_INET == domain) || (PF_INET6 == domain))
+ && (SOCK_STREAM == type)) {
+ protocol = SHOULD_IPPROTO_SCTP;
+ }
+
+ return (real_socket)(domain, type, protocol);
+}
diff --git a/src/withsctp/sctp_socket.h b/src/withsctp/sctp_socket.h
new file mode 100644
index 0000000..44c8226
--- /dev/null
+++ b/src/withsctp/sctp_socket.h
@@ -0,0 +1,69 @@
+/* Preprocessor definitions for withsctp and supporting scripts.
+ *
+ * Copyright 2003 La Monte HP Yarroll <piggy@acm.org>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following
+ * disclaimer in the documentation and/or other materials provided with
+ * the distribution.
+ * 3. The name of the author may not be used to endorse or promote
+ * products derived from this software without specific prior written
+ * permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+ * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ * Copyright 2003 La Monte HP Yarroll <piggy@acm.org>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following
+ * disclaimer in the documentation and/or other materials provided with
+ * the distribution.
+ * 3. The name of the author may not be used to endorse or promote
+ * products derived from this software without specific prior written
+ * permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+ * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+#include <dlfcn.h> /* for dlopen() and company */
+#include <sys/types.h>
+#include <sys/socket.h>
+#include <netinet/in.h>
+#include <netinet/sctp.h>
+#include <netinet/tcp.h>
+
+extern int (*real_bind)(int sockfd, const struct sockaddr *my_addr, socklen_t addrlen);
+extern int (*real_socket)(int domain, int type, int protocol);
+extern int (*real_setsockopt)(int s, int level, int optname, const void *optval,
+ socklen_t optlen);
+extern void _sctp_load_libs(void);
diff --git a/src/withsctp/sctp_sockopt.c b/src/withsctp/sctp_sockopt.c
new file mode 100644
index 0000000..01b8308
--- /dev/null
+++ b/src/withsctp/sctp_sockopt.c
@@ -0,0 +1,56 @@
+/* Wrap socket() to force the protocol to SCTP for STREAM connections.
+ *
+ * Thanks to Midgard Security Services for
+ * http://www.securiteam.com/tools/3D5PTR5QAE.html
+ * from whence I cribbed the code to find the old socket().
+ *
+ * Copyright 2003 La Monte HP Yarroll <piggy@acm.org>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following
+ * disclaimer in the documentation and/or other materials provided with
+ * the distribution.
+ * 3. The name of the author may not be used to endorse or promote
+ * products derived from this software without specific prior written
+ * permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+ * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+#include <string.h> /* for strncmp() */
+#include <stdio.h>
+#include "sctp_socket.h"
+
+/* IPPROTO_SCTP SHOULD be defined in
+ * /usr/include/linux/in.h but probably isn't.
+ * It is an enum element, not a #define, so we can't easily check.
+ */
+#define SHOULD_IPPROTO_SCTP 132
+
+int
+setsockopt(int s, int level, int optname, const void *optval, socklen_t optlen)
+{
+ _sctp_load_libs();
+
+ if ((IPPROTO_TCP == level) && (TCP_NODELAY == optname)) {
+ level = SHOULD_IPPROTO_SCTP;
+ optname = SCTP_NODELAY;
+ }
+
+ return (real_setsockopt)(s, level, optname, optval, optlen);
+}
diff --git a/src/withsctp/withsctp.in b/src/withsctp/withsctp.in
new file mode 100644
index 0000000..ef4f7bb
--- /dev/null
+++ b/src/withsctp/withsctp.in
@@ -0,0 +1,13 @@
+#!/bin/sh
+# -*- sh -*-
+LIBDIR=@libdir@/@PACKAGE@
+BINDIR=@bindir@
+LIBVER=@LIBWITHSCTP_CURRENT@.@LIBWITHSCTP_AGE@.@LIBWITHSCTP_REVISION@
+export LD_PRELOAD=${LIBDIR}/libwithsctp.so.${LIBVER}
+if ! ${BINDIR}/checksctp 2> /dev/null
+then
+ ${BINDIR}/checksctp;
+ exit 1;
+fi
+
+exec "$@"