summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Buetow <paul@buetow.org>2026-06-30 09:22:20 +0300
committerPaul Buetow <paul@buetow.org>2026-06-30 09:22:20 +0300
commit1c36abeb27b0b0fed7eb07f008bcf9dcaaefb7bb (patch)
tree6f2f9e29ea26e775f3c74840ab63255d7ab0d8b8
parent85dcf059333ce65930085fa6a0600aab871d6f44 (diff)
Fix runtime crashes: logd recursion, trim OOB, sock SO_REUSEADDR/accept, md5 session
Multiple latent bugs made the chat crash on real use (login POST segfaulted): - logd::flush: when a log file can't be opened, log the error to stderr and exit(1). Previously it called wrap::system_message, which routes back through LOGD->log_simple_line->flush on the same failing logd -> infinite recursion -> stack overflow (SIGSEGV). Bitten in k8s where an emptyDir on /app/log hides the image's /app/log/rooms, so the room log open failed on login. - tool::trim: rewrite the right-trim; the original did s_str[s_str.size()] (out-of-bounds under _GLIBCXX_ASSERTIONS / UB) and erased at i_pos=size. - sock::_make_server_socket: move SO_REUSEADDR setsockopt BEFORE bind so a quick container restart rebinds port 2000 (was EADDRINUSE -> fallback to 2001, which the k8s Service doesn't target -> 502). - sock::process_request: init accept() addrlen and bail on any accept error (not just EAGAIN/EINTR) so we never proceed with fd=-1 (EBADF). - chat.session.md5hash=false at runtime: the md5 session-id path does s_hash.substr(s_ret.find(s_salt)+salt.len()+3); the default salt has chars not in chat.session.validchars so find() returns npos and the substr/append corrupts the heap and segfaults on login. Overridden via -o in the image CMD. - docker-entrypoint.sh: mkdir -p /app/log/rooms at startup (volume mount hides the image's copy).
-rw-r--r--ychat/Dockerfile12
-rw-r--r--ychat/Makefile2
-rwxr-xr-xychat/docker-entrypoint.sh9
-rw-r--r--ychat/log/rooms/lounge1
-rw-r--r--ychat/log/system_log36
-rw-r--r--ychat/src/Makefile58
-rw-r--r--ychat/src/config.h37
-rw-r--r--ychat/src/config.log512
-rwxr-xr-xychat/src/config.status1162
-rw-r--r--ychat/src/logd.cpp9
-rw-r--r--ychat/src/sock/sock.cpp14
-rw-r--r--ychat/src/tool/tool.cpp37
12 files changed, 924 insertions, 965 deletions
diff --git a/ychat/Dockerfile b/ychat/Dockerfile
index 9324050..1804d54 100644
--- a/ychat/Dockerfile
+++ b/ychat/Dockerfile
@@ -54,12 +54,20 @@ COPY --from=builder /build/ychat/bin/ychat /app/bin/ychat
# Read-only resources
COPY --from=builder /build/ychat/html/ /app/html/
COPY --from=builder /build/ychat/mods/ /app/mods/
+COPY docker-entrypoint.sh /app/docker-entrypoint.sh
COPY etc/ychat.conf /app/etc/ychat.conf
-# Writable log dir
+# Writable log dir (entrypoint recreates /app/log/rooms since a volume mount
+# on /app/log hides the image's copy).
RUN mkdir -p /app/log/rooms && chown -R ychat:ychat /app
USER 1000:1000
EXPOSE 2000
-ENTRYPOINT ["/app/bin/ychat"] \ No newline at end of file
+ENTRYPOINT ["/app/docker-entrypoint.sh"]
+# chat.session.md5hash=false: the md5 session-id path does a bad substr()
+# (the default salt contains chars not in chat.session.validchars, so
+# s_ret.find(salt) returns npos and the subsequent substr/append corrupts
+# the heap and segfaults on login). The 32-char random id is enough for a
+# revival guest chat.
+CMD ["/app/bin/ychat", "-o", "chat.session.md5hash", "false"] \ No newline at end of file
diff --git a/ychat/Makefile b/ychat/Makefile
index ed88660..3bd905d 100644
--- a/ychat/Makefile
+++ b/ychat/Makefile
@@ -1,7 +1,7 @@
MAKE=gmake
HEADER?=docs/header.txt
PREFIX=/usr/local
-EFIND=find -E
+EFIND=find -regextype posix-extended
BIN=./bin/ychat
all: build modules base
@echo "Now edit the ychat.conf and run ychat!"
diff --git a/ychat/docker-entrypoint.sh b/ychat/docker-entrypoint.sh
new file mode 100755
index 0000000..e51264b
--- /dev/null
+++ b/ychat/docker-entrypoint.sh
@@ -0,0 +1,9 @@
+#!/bin/sh
+# yChat container entrypoint.
+# Ensure writable log subdirs exist (an emptyDir mounted on /app/log hides
+# the image's pre-created /app/log/rooms, so recreate it here). yChat exits
+# the whole process if a log file can't be opened, so this is required for
+# room logs (chat.logging.roomlogdir = log/rooms/) to work.
+set -e
+mkdir -p /app/log/rooms
+exec "$@" \ No newline at end of file
diff --git a/ychat/log/rooms/lounge b/ychat/log/rooms/lounge
new file mode 100644
index 0000000..88540bf
--- /dev/null
+++ b/ychat/log/rooms/lounge
@@ -0,0 +1 @@
+[30/Jun/2026:06:20:37 +0000] 00:00:00 testguest enters the chat.
diff --git a/ychat/log/system_log b/ychat/log/system_log
new file mode 100644
index 0000000..d142324
--- /dev/null
+++ b/ychat/log/system_log
@@ -0,0 +1,36 @@
+[30/Jun/2026:06:15:08 +0000] Sock: Created socket on localhost:2000
+[30/Jun/2026:06:15:08 +0000] Sock: Server socket is ready
+[30/Jun/2026:06:15:08 +0000] Reading standard command exec permissions
+[30/Jun/2026:06:15:08 +0000] Chat: Using replacement strings
+[30/Jun/2026:06:15:08 +0000] Timer: Initializing
+[30/Jun/2026:06:15:08 +0000] Timer: Setting offset to 0
+[30/Jun/2026:06:15:08 +0000] Garbage: Initializing collector
+[30/Jun/2026:06:15:08 +0000] Initializing sock events (1)
+[30/Jun/2026:06:15:11 +0000] Sock: New request 1 127.0.0.1:39482 @1
+[30/Jun/2026:06:15:11 +0000] Sock: Caching IP 127.0.0.1
+[30/Jun/2026:06:18:06 +0000] Sock: Created socket on localhost:2000
+[30/Jun/2026:06:18:06 +0000] Sock: Server socket is ready
+[30/Jun/2026:06:18:06 +0000] Reading standard command exec permissions
+[30/Jun/2026:06:18:06 +0000] Chat: Using replacement strings
+[30/Jun/2026:06:18:06 +0000] Timer: Initializing
+[30/Jun/2026:06:18:06 +0000] Timer: Setting offset to 0
+[30/Jun/2026:06:18:06 +0000] Garbage: Initializing collector
+[30/Jun/2026:06:18:06 +0000] Initializing sock events (1)
+[30/Jun/2026:06:18:09 +0000] Sock: New request 1 127.0.0.1:37368 @1
+[30/Jun/2026:06:18:09 +0000] Sock: Caching IP 127.0.0.1
+[30/Jun/2026:06:18:09 +0000] Reqp: Request string /frameset.html
+[30/Jun/2026:06:20:33 +0000] Sock: Created socket on localhost:2000
+[30/Jun/2026:06:20:33 +0000] Sock: Server socket is ready
+[30/Jun/2026:06:20:33 +0000] Reading standard command exec permissions
+[30/Jun/2026:06:20:33 +0000] Chat: Using replacement strings
+[30/Jun/2026:06:20:33 +0000] Timer: Initializing
+[30/Jun/2026:06:20:33 +0000] Timer: Setting offset to 0
+[30/Jun/2026:06:20:33 +0000] Garbage: Initializing collector
+[30/Jun/2026:06:20:33 +0000] Initializing sock events (1)
+[30/Jun/2026:06:20:37 +0000] Sock: New request 1 127.0.0.1:40498 @1
+[30/Jun/2026:06:20:37 +0000] Sock: Caching IP 127.0.0.1
+[30/Jun/2026:06:20:37 +0000] Reqp: Request string /frameset.html
+[30/Jun/2026:06:20:37 +0000] Session: Create (1,5300208)
+[30/Jun/2026:06:20:37 +0000] Chat: New room Lounge
+[30/Jun/2026:06:20:37 +0000] Chat: New user testguest
+[30/Jun/2026:06:20:37 +0000] HTML: Caching document html//frameset.html
diff --git a/ychat/src/Makefile b/ychat/src/Makefile
index 7efc9a8..cc01073 100644
--- a/ychat/src/Makefile
+++ b/ychat/src/Makefile
@@ -1,11 +1,11 @@
-SRCS=./conf/conf.cpp ./time/timo.cpp ./time/timr.cpp ./data/con.cpp ./data/data_base.cpp ./data/con_base.cpp ./data/data.cpp ./tool/dir.cpp ./tool/tool.cpp ./chat/sman.cpp ./chat/perm.cpp ./chat/room.cpp ./chat/sess.cpp ./chat/user.cpp ./chat/chat.cpp ./chat/gcol.cpp ./monitor/stats.cpp ./monitor/dump.cpp ./sock/sock.cpp ./sock/sslsock.cpp ./sock/context.cpp ./contrib/xml/tinyxmlerror.cpp ./contrib/xml/tinyxmlparser.cpp ./contrib/xml/tinyxml.cpp ./contrib/crypt/md5.cpp ./contrib/crypt/md5crypt.cpp ./cli/cli.cpp ./html.cpp ./reqp.cpp ./main.cpp ./sign.cpp ./wrap.cpp ./name.cpp ./logd.cpp ./modl.cpp
-OBJS= ../obj/./conf/conf.o ../obj/./time/timo.o ../obj/./time/timr.o ../obj/./data/con.o ../obj/./data/data_base.o ../obj/./data/con_base.o ../obj/./data/data.o ../obj/./tool/dir.o ../obj/./tool/tool.o ../obj/./chat/sman.o ../obj/./chat/perm.o ../obj/./chat/room.o ../obj/./chat/sess.o ../obj/./chat/user.o ../obj/./chat/chat.o ../obj/./chat/gcol.o ../obj/./monitor/stats.o ../obj/./monitor/dump.o ../obj/./sock/sock.o ../obj/./sock/sslsock.o ../obj/./sock/context.o ../obj/./contrib/xml/tinyxmlerror.o ../obj/./contrib/xml/tinyxmlparser.o ../obj/./contrib/xml/tinyxml.o ../obj/./contrib/crypt/md5.o ../obj/./contrib/crypt/md5crypt.o ../obj/./cli/cli.o ../obj/./html.o ../obj/./reqp.o ../obj/./main.o ../obj/./sign.o ../obj/./wrap.o ../obj/./name.o ../obj/./logd.o ../obj/./modl.o
+SRCS=./chat/chat.cpp ./chat/gcol.cpp ./chat/perm.cpp ./chat/room.cpp ./chat/sess.cpp ./chat/sman.cpp ./chat/user.cpp ./cli/cli.cpp ./conf/conf.cpp ./contrib/crypt/md5.cpp ./contrib/crypt/md5crypt.cpp ./contrib/xml/tinyxml.cpp ./contrib/xml/tinyxmlerror.cpp ./contrib/xml/tinyxmlparser.cpp ./data/con.cpp ./data/con_base.cpp ./data/data.cpp ./data/data_base.cpp ./html.cpp ./logd.cpp ./main.cpp ./modl.cpp ./monitor/dump.cpp ./monitor/stats.cpp ./name.cpp ./reqp.cpp ./sign.cpp ./sock/context.cpp ./sock/sock.cpp ./sock/sslsock.cpp ./time/timo.cpp ./time/timr.cpp ./tool/dir.cpp ./tool/tool.cpp ./wrap.cpp
+OBJS= ../obj/./chat/chat.o ../obj/./chat/gcol.o ../obj/./chat/perm.o ../obj/./chat/room.o ../obj/./chat/sess.o ../obj/./chat/sman.o ../obj/./chat/user.o ../obj/./cli/cli.o ../obj/./conf/conf.o ../obj/./contrib/crypt/md5.o ../obj/./contrib/crypt/md5crypt.o ../obj/./contrib/xml/tinyxml.o ../obj/./contrib/xml/tinyxmlerror.o ../obj/./contrib/xml/tinyxmlparser.o ../obj/./data/con.o ../obj/./data/con_base.o ../obj/./data/data.o ../obj/./data/data_base.o ../obj/./html.o ../obj/./logd.o ../obj/./main.o ../obj/./modl.o ../obj/./monitor/dump.o ../obj/./monitor/stats.o ../obj/./name.o ../obj/./reqp.o ../obj/./sign.o ../obj/./sock/context.o ../obj/./sock/sock.o ../obj/./sock/sslsock.o ../obj/./time/timo.o ../obj/./time/timr.o ../obj/./tool/dir.o ../obj/./tool/tool.o ../obj/./wrap.o
BIN=../bin/ychat
CXX=g++
#EFLAGS=-frepo
CXXFLAGS=-fno-inline -fno-default-inline -g -O2 ${EFLAGS}
-#LDADD+=-lreadline -levent -lpthread -lstdc++ -D_THREAD_SAVE -export-dynamic
-LDADD+=-lreadline -levent -lpthread -lstdc++ -export-dynamic
+#LDADD+=-ldl -levent -lpthread -lstdc++ -D_THREAD_SAVE -export-dynamic
+LDADD+=-ldl -levent -lpthread -lstdc++ -export-dynamic
PREFIX=/usr/local
all: message ${OBJS}
@dirname=`dirname ${BIN}`; if ! test -d $$dirname; then mkdir -p $$dirname; fi
@@ -35,38 +35,38 @@ mrproper: clean
@for i in Makefile config.h config.log config.status; \
do if [ -f $$i ]; then rm -f $$i; fi; done
-../obj/./conf/conf.o: ./conf/conf.cpp
-../obj/./time/timo.o: ./time/timo.cpp
-../obj/./time/timr.o: ./time/timr.cpp
-../obj/./data/con.o: ./data/con.cpp
-../obj/./data/data_base.o: ./data/data_base.cpp
-../obj/./data/con_base.o: ./data/con_base.cpp
-../obj/./data/data.o: ./data/data.cpp
-../obj/./tool/dir.o: ./tool/dir.cpp
-../obj/./tool/tool.o: ./tool/tool.cpp
-../obj/./chat/sman.o: ./chat/sman.cpp
+../obj/./chat/chat.o: ./chat/chat.cpp
+../obj/./chat/gcol.o: ./chat/gcol.cpp
../obj/./chat/perm.o: ./chat/perm.cpp
../obj/./chat/room.o: ./chat/room.cpp
../obj/./chat/sess.o: ./chat/sess.cpp
+../obj/./chat/sman.o: ./chat/sman.cpp
../obj/./chat/user.o: ./chat/user.cpp
-../obj/./chat/chat.o: ./chat/chat.cpp
-../obj/./chat/gcol.o: ./chat/gcol.cpp
-../obj/./monitor/stats.o: ./monitor/stats.cpp
-../obj/./monitor/dump.o: ./monitor/dump.cpp
-../obj/./sock/sock.o: ./sock/sock.cpp
-../obj/./sock/sslsock.o: ./sock/sslsock.cpp
-../obj/./sock/context.o: ./sock/context.cpp
-../obj/./contrib/xml/tinyxmlerror.o: ./contrib/xml/tinyxmlerror.cpp
-../obj/./contrib/xml/tinyxmlparser.o: ./contrib/xml/tinyxmlparser.cpp
-../obj/./contrib/xml/tinyxml.o: ./contrib/xml/tinyxml.cpp
+../obj/./cli/cli.o: ./cli/cli.cpp
+../obj/./conf/conf.o: ./conf/conf.cpp
../obj/./contrib/crypt/md5.o: ./contrib/crypt/md5.cpp
../obj/./contrib/crypt/md5crypt.o: ./contrib/crypt/md5crypt.cpp
-../obj/./cli/cli.o: ./cli/cli.cpp
+../obj/./contrib/xml/tinyxml.o: ./contrib/xml/tinyxml.cpp
+../obj/./contrib/xml/tinyxmlerror.o: ./contrib/xml/tinyxmlerror.cpp
+../obj/./contrib/xml/tinyxmlparser.o: ./contrib/xml/tinyxmlparser.cpp
+../obj/./data/con.o: ./data/con.cpp
+../obj/./data/con_base.o: ./data/con_base.cpp
+../obj/./data/data.o: ./data/data.cpp
+../obj/./data/data_base.o: ./data/data_base.cpp
../obj/./html.o: ./html.cpp
-../obj/./reqp.o: ./reqp.cpp
+../obj/./logd.o: ./logd.cpp
../obj/./main.o: ./main.cpp
+../obj/./modl.o: ./modl.cpp
+../obj/./monitor/dump.o: ./monitor/dump.cpp
+../obj/./monitor/stats.o: ./monitor/stats.cpp
+../obj/./name.o: ./name.cpp
+../obj/./reqp.o: ./reqp.cpp
../obj/./sign.o: ./sign.cpp
+../obj/./sock/context.o: ./sock/context.cpp
+../obj/./sock/sock.o: ./sock/sock.cpp
+../obj/./sock/sslsock.o: ./sock/sslsock.cpp
+../obj/./time/timo.o: ./time/timo.cpp
+../obj/./time/timr.o: ./time/timr.cpp
+../obj/./tool/dir.o: ./tool/dir.cpp
+../obj/./tool/tool.o: ./tool/tool.cpp
../obj/./wrap.o: ./wrap.cpp
-../obj/./name.o: ./name.cpp
-../obj/./logd.o: ./logd.cpp
-../obj/./modl.o: ./modl.cpp
diff --git a/ychat/src/config.h b/ychat/src/config.h
index 272decf..c8d7b86 100644
--- a/ychat/src/config.h
+++ b/ychat/src/config.h
@@ -1,28 +1,4 @@
-/*:*
- *: File: ./src/config.h
- *:
- *: yChat; Homepage: ychat.buetow.org; Version 0.9.0-CURRENT
- *:
- *: Copyright (C) 2003 Paul C. Buetow, Volker Richter
- *: Copyright (C) 2004 Paul C. Buetow
- *: Copyright (C) 2005 EXA Digital Solutions GbR
- *: Copyright (C) 2006, 2007 Paul C. Buetow
- *:
- *: This program is free software; you can redistribute it and/or
- *: modify it under the terms of the GNU General Public License
- *: as published by the Free Software Foundation; either version 2
- *: of the License, or (at your option) any later version.
- *:
- *: This program is distributed in the hope that it will be useful,
- *: but WITHOUT ANY WARRANTY; without even the implied warranty of
- *: MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- *: GNU General Public License for more details.
- *:
- *: You should have received a copy of the GNU General Public License
- *: along with this program; if not, write to the Free Software
- *: Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *:*/
-/* config.h. Generated by configure. */
+/* config.h. Generated from config.h.in by configure. */
/* config.h.in. Generated from configure.ac by autoheader. */
/* Define to 1 if you have the <dlfcn.h> header file. */
@@ -32,7 +8,7 @@
#define HAVE_INTTYPES_H 1
/* Define to 1 if you have the `dl' library (-ldl). */
-/* #undef HAVE_LIBDL */
+#define HAVE_LIBDL 1
/* Define to 1 if you have the `mysqlclient' library (-lmysqlclient). */
/* #undef HAVE_LIBMYSQLCLIENT */
@@ -41,7 +17,7 @@
#define HAVE_LIBPTHREAD 1
/* Define to 1 if you have the `readline' library (-lreadline). */
-#define HAVE_LIBREADLINE 1
+/* #undef HAVE_LIBREADLINE */
/* Define to 1 if you have the `ssl' library (-lssl). */
/* #undef HAVE_LIBSSL */
@@ -62,7 +38,7 @@
#define HAVE_PTHREAD_H 1
/* Define to 1 if you have the <readline/readline.h> header file. */
-#define HAVE_READLINE_READLINE_H 1
+/* #undef HAVE_READLINE_READLINE_H */
/* Define to 1 if you have the <stdint.h> header file. */
#define HAVE_STDINT_H 1
@@ -106,5 +82,10 @@
/* Define to 1 if you have the ANSI C header files. */
#define STDC_HEADERS 1
+/* Posttasking has been done by ./src/configure.
+ Please edit ./src/configure.ac and run autoconf if you
+ want to modify all values below this comment!
+ */
+
/* Program prefix. */
#define PREFIX "/usr/local"
diff --git a/ychat/src/config.log b/ychat/src/config.log
index f89f34f..ebb65a3 100644
--- a/ychat/src/config.log
+++ b/ychat/src/config.log
@@ -4,22 +4,22 @@ running configure, to aid debugging if configure makes a mistake.
It was created by configure, which was
generated by GNU Autoconf 2.61. Invocation command line was
- $ ./configure
+ $ ./configure --disable-readline --disable-ssl --disable-mysql
## --------- ##
## Platform. ##
## --------- ##
-hostname = joghurt.lan.buetow.org
-uname -m = i386
-uname -r = 7.0-BETA2
-uname -s = FreeBSD
-uname -v = FreeBSD 7.0-BETA2 #0: Thu Nov 8 22:33:42 EET 2007 root@joghurt.lan.buetow.org:/usr/obj/usr/srcs/freebsd.src7/src/sys/JOGHURT7
+hostname = earth
+uname -m = x86_64
+uname -r = 7.0.11-200.fc44.x86_64
+uname -s = Linux
+uname -v = #1 SMP PREEMPT_DYNAMIC Mon Jun 1 22:50:37 UTC 2026
-/usr/bin/uname -p = i386
+/usr/bin/uname -p = unknown
/bin/uname -X = unknown
-/bin/arch = unknown
+/bin/arch = x86_64
/usr/bin/arch -k = unknown
/usr/convex/getsysinfo = unknown
/usr/bin/hostinfo = unknown
@@ -27,21 +27,22 @@ uname -v = FreeBSD 7.0-BETA2 #0: Thu Nov 8 22:33:42 EET 2007 root@joghurt.l
/usr/bin/oslevel = unknown
/bin/universe = unknown
-PATH: /home/buetow/bin
+PATH: /home/paul/.pi/agent/bin
+PATH: /home/paul/.krew/bin
+PATH: /home/linuxbrew/.linuxbrew/bin
+PATH: /home/linuxbrew/.linuxbrew/sbin
+PATH: /home/paul/bin
+PATH: /home/paul/scripts
+PATH: /home/paul/go/bin
+PATH: /home/paul/.cargo/bin
+PATH: /home/paul/.local/bin
+PATH: /home/paul/.krew/bin
+PATH: /home/paul/.krew/bin
+PATH: /usr/local/sbin
PATH: /usr/local/bin
-PATH: /usr/bin
-PATH: /usr/pkg/bin
-PATH: /sbin
PATH: /usr/sbin
-PATH: /usr/local/sbin
-PATH: /usr/pkg/sbin
-PATH: /bin
-PATH: /usr/X11R6/bin
-PATH: /usr/scripts
-PATH: /usr/srcs/bin
-PATH: /usr/games
-PATH: /usr/local/java/bin
-PATH: /usr/local/parrot-0.4.0-devel/bin
+PATH: /usr/bin
+PATH: /var/lib/snapd/snap/bin
## ----------- ##
@@ -53,21 +54,28 @@ configure:1765: found /usr/bin/g++
configure:1776: result: g++
configure:1807: checking for C++ compiler version
configure:1814: g++ --version >&5
-g++ (GCC) 4.2.1 20070719 [FreeBSD]
-Copyright (C) 2007 Free Software Foundation, Inc.
+g++ (GCC) 16.1.1 20260515 (Red Hat 16.1.1-2)
+Copyright (C) 2026 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
configure:1817: $? = 0
configure:1824: g++ -v >&5
Using built-in specs.
-Target: i386-undermydesk-freebsd
-Configured with: FreeBSD/i386 system compiler
+COLLECT_GCC=g++
+COLLECT_LTO_WRAPPER=/usr/libexec/gcc/x86_64-redhat-linux/16/lto-wrapper
+OFFLOAD_TARGET_NAMES=nvptx-none:amdgcn-amdhsa
+OFFLOAD_TARGET_DEFAULT=1
+Target: x86_64-redhat-linux
+Configured with: ../configure --enable-bootstrap --enable-languages=c,c++,fortran,objc,obj-c++,ada,go,d,m2,cobol,algol68,lto --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --with-bugurl=https://bugzilla.redhat.com/ --enable-shared --enable-threads=posix --enable-checking=release --enable-multilib --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-gnu-unique-object --enable-linker-build-id --with-gcc-major-version-only --enable-libstdcxx-backtrace --with-libstdcxx-zoneinfo=/usr/share/zoneinfo --with-linker-hash-style=gnu --enable-plugin --enable-initfini-array --with-isl=/builddir/build/BUILD/gcc-16.1.1-build/gcc-16.1.1-20260515/obj-x86_64-redhat-linux/isl-install --enable-offload-targets=nvptx-none,amdgcn-amdhsa --enable-offload-defaulted --without-cuda-driver --enable-gnu-indirect-function --enable-cet --with-tune=generic --with-tls=gnu2 --with-arch_32=i686 --build=x86_64-redhat-linux --with-build-config=bootstrap-lto --enable-link-serialization=1 --disable-libssp
Thread model: posix
-gcc version 4.2.1 20070719 [FreeBSD]
+Supported LTO compression algorithms: zlib zstd
+gcc version 16.1.1 20260515 (Red Hat 16.1.1-2) (GCC)
configure:1827: $? = 0
configure:1834: g++ -V >&5
-g++: '-V' option must have argument
+g++: error: unrecognized command-line option '-V'
+g++: fatal error: no input files
+compilation terminated.
configure:1837: $? = 1
configure:1860: checking for C++ compiler default output file name
configure:1887: g++ conftest.cpp >&5
@@ -95,45 +103,59 @@ configure:2140: checking whether g++ accepts -g
configure:2170: g++ -c -g conftest.cpp >&5
configure:2176: $? = 0
configure:2275: result: yes
-configure:2379: checking for gcc
-configure:2395: found /usr/bin/gcc
-configure:2406: result: gcc
-configure:2644: checking for C compiler version
-configure:2651: gcc --version >&5
-gcc (GCC) 4.2.1 20070719 [FreeBSD]
-Copyright (C) 2007 Free Software Foundation, Inc.
+configure:2380: checking for gcc
+configure:2396: found /usr/bin/gcc
+configure:2407: result: gcc
+configure:2645: checking for C compiler version
+configure:2652: gcc --version >&5
+gcc (GCC) 16.1.1 20260515 (Red Hat 16.1.1-2)
+Copyright (C) 2026 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
-configure:2654: $? = 0
-configure:2661: gcc -v >&5
+configure:2655: $? = 0
+configure:2662: gcc -v >&5
Using built-in specs.
-Target: i386-undermydesk-freebsd
-Configured with: FreeBSD/i386 system compiler
+COLLECT_GCC=gcc
+COLLECT_LTO_WRAPPER=/usr/libexec/gcc/x86_64-redhat-linux/16/lto-wrapper
+OFFLOAD_TARGET_NAMES=nvptx-none:amdgcn-amdhsa
+OFFLOAD_TARGET_DEFAULT=1
+Target: x86_64-redhat-linux
+Configured with: ../configure --enable-bootstrap --enable-languages=c,c++,fortran,objc,obj-c++,ada,go,d,m2,cobol,algol68,lto --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --with-bugurl=https://bugzilla.redhat.com/ --enable-shared --enable-threads=posix --enable-checking=release --enable-multilib --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-gnu-unique-object --enable-linker-build-id --with-gcc-major-version-only --enable-libstdcxx-backtrace --with-libstdcxx-zoneinfo=/usr/share/zoneinfo --with-linker-hash-style=gnu --enable-plugin --enable-initfini-array --with-isl=/builddir/build/BUILD/gcc-16.1.1-build/gcc-16.1.1-20260515/obj-x86_64-redhat-linux/isl-install --enable-offload-targets=nvptx-none,amdgcn-amdhsa --enable-offload-defaulted --without-cuda-driver --enable-gnu-indirect-function --enable-cet --with-tune=generic --with-tls=gnu2 --with-arch_32=i686 --build=x86_64-redhat-linux --with-build-config=bootstrap-lto --enable-link-serialization=1 --disable-libssp
Thread model: posix
-gcc version 4.2.1 20070719 [FreeBSD]
-configure:2664: $? = 0
-configure:2671: gcc -V >&5
-gcc: '-V' option must have argument
-configure:2674: $? = 1
-configure:2677: checking whether we are using the GNU C compiler
-configure:2706: gcc -c conftest.c >&5
-configure:2712: $? = 0
-configure:2729: result: yes
-configure:2734: checking whether gcc accepts -g
-configure:2764: gcc -c -g conftest.c >&5
-configure:2770: $? = 0
-configure:2869: result: yes
-configure:2886: checking for gcc option to accept ISO C89
-configure:2960: gcc -c -g -O2 conftest.c >&5
-configure:2966: $? = 0
-configure:2989: result: none needed
-configure:3013: checking how to run the C preprocessor
-configure:3053: gcc -E conftest.c
-configure:3059: $? = 0
-configure:3090: gcc -E conftest.c
-conftest.c:8:28: error: ac_nonexistent.h: No such file or directory
-configure:3096: $? = 1
+Supported LTO compression algorithms: zlib zstd
+gcc version 16.1.1 20260515 (Red Hat 16.1.1-2) (GCC)
+configure:2665: $? = 0
+configure:2672: gcc -V >&5
+gcc: error: unrecognized command-line option '-V'
+gcc: fatal error: no input files
+compilation terminated.
+configure:2675: $? = 1
+configure:2678: checking whether we are using the GNU C compiler
+configure:2707: gcc -c conftest.c >&5
+configure:2713: $? = 0
+configure:2730: result: yes
+configure:2735: checking whether gcc accepts -g
+configure:2765: gcc -c -g conftest.c >&5
+configure:2771: $? = 0
+configure:2870: result: yes
+configure:2887: checking for gcc option to accept ISO C89
+configure:2961: gcc -c -g -O2 conftest.c >&5
+conftest.c: In function 'e':
+conftest.c:15:14: warning: old-style function definition [-Wold-style-definition]
+ 15 | static char *e (p, i)
+ | ^
+configure:2967: $? = 0
+configure:2990: result: none needed
+configure:3014: checking how to run the C preprocessor
+configure:3054: gcc -E conftest.c
+configure:3060: $? = 0
+configure:3091: gcc -E conftest.c
+conftest.c:8:10: fatal error: ac_nonexistent.h: No such file or directory
+ 8 | #include <ac_nonexistent.h>
+ | ^~~~~~~~~~~~~~~~~~
+compilation terminated.
+configure:3097: $? = 1
configure: failed program was:
| /* confdefs.h. */
| #define PACKAGE_NAME ""
@@ -143,12 +165,15 @@ configure: failed program was:
| #define PACKAGE_BUGREPORT ""
| /* end confdefs.h. */
| #include <ac_nonexistent.h>
-configure:3129: result: gcc -E
-configure:3158: gcc -E conftest.c
-configure:3164: $? = 0
-configure:3195: gcc -E conftest.c
-conftest.c:8:28: error: ac_nonexistent.h: No such file or directory
-configure:3201: $? = 1
+configure:3130: result: gcc -E
+configure:3159: gcc -E conftest.c
+configure:3165: $? = 0
+configure:3196: gcc -E conftest.c
+conftest.c:8:10: fatal error: ac_nonexistent.h: No such file or directory
+ 8 | #include <ac_nonexistent.h>
+ | ^~~~~~~~~~~~~~~~~~
+compilation terminated.
+configure:3202: $? = 1
configure: failed program was:
| /* confdefs.h. */
| #define PACKAGE_NAME ""
@@ -158,186 +183,156 @@ configure: failed program was:
| #define PACKAGE_BUGREPORT ""
| /* end confdefs.h. */
| #include <ac_nonexistent.h>
-configure:3239: checking for grep that handles long lines and -e
-configure:3313: result: /usr/bin/grep
-configure:3318: checking for egrep
-configure:3396: result: /usr/bin/grep -E
-configure:3401: checking for ANSI C header files
-configure:3431: gcc -c -g -O2 conftest.c >&5
-configure:3437: $? = 0
-configure:3536: gcc -o conftest -g -O2 conftest.c >&5
-configure:3539: $? = 0
-configure:3545: ./conftest
-configure:3548: $? = 0
-configure:3565: result: yes
-configure:3589: checking for sys/types.h
-configure:3610: gcc -c -g -O2 conftest.c >&5
-configure:3616: $? = 0
-configure:3632: result: yes
-configure:3589: checking for sys/stat.h
-configure:3610: gcc -c -g -O2 conftest.c >&5
-configure:3616: $? = 0
-configure:3632: result: yes
-configure:3589: checking for stdlib.h
-configure:3610: gcc -c -g -O2 conftest.c >&5
-configure:3616: $? = 0
-configure:3632: result: yes
-configure:3589: checking for string.h
-configure:3610: gcc -c -g -O2 conftest.c >&5
-configure:3616: $? = 0
-configure:3632: result: yes
-configure:3589: checking for memory.h
-configure:3610: gcc -c -g -O2 conftest.c >&5
-configure:3616: $? = 0
-configure:3632: result: yes
-configure:3589: checking for strings.h
-configure:3610: gcc -c -g -O2 conftest.c >&5
-configure:3616: $? = 0
-configure:3632: result: yes
-configure:3589: checking for inttypes.h
-configure:3610: gcc -c -g -O2 conftest.c >&5
-configure:3616: $? = 0
-configure:3632: result: yes
-configure:3589: checking for stdint.h
-configure:3610: gcc -c -g -O2 conftest.c >&5
-configure:3616: $? = 0
-configure:3632: result: yes
-configure:3589: checking for unistd.h
-configure:3610: gcc -c -g -O2 conftest.c >&5
-configure:3616: $? = 0
-configure:3632: result: yes
-configure:3663: checking dlfcn.h usability
-configure:3680: gcc -c -g -O2 conftest.c >&5
-configure:3686: $? = 0
-configure:3700: result: yes
-configure:3704: checking dlfcn.h presence
-configure:3719: gcc -E conftest.c
-configure:3725: $? = 0
-configure:3739: result: yes
-configure:3767: checking for dlfcn.h
-configure:3775: result: yes
-configure:3663: checking netinet/in.h usability
-configure:3680: gcc -c -g -O2 conftest.c >&5
-configure:3686: $? = 0
-configure:3700: result: yes
-configure:3704: checking netinet/in.h presence
-configure:3719: gcc -E conftest.c
-configure:3725: $? = 0
-configure:3739: result: yes
-configure:3767: checking for netinet/in.h
-configure:3775: result: yes
-configure:3663: checking time.h usability
-configure:3680: gcc -c -g -O2 conftest.c >&5
-configure:3686: $? = 0
-configure:3700: result: yes
-configure:3704: checking time.h presence
-configure:3719: gcc -E conftest.c
-configure:3725: $? = 0
-configure:3739: result: yes
-configure:3767: checking for time.h
-configure:3775: result: yes
-configure:3663: checking pthread.h usability
-configure:3680: gcc -c -g -O2 conftest.c >&5
-configure:3686: $? = 0
-configure:3700: result: yes
-configure:3704: checking pthread.h presence
-configure:3719: gcc -E conftest.c
-configure:3725: $? = 0
-configure:3739: result: yes
-configure:3767: checking for pthread.h
-configure:3775: result: yes
-configure:3663: checking event.h usability
-configure:3680: gcc -c -g -O2 conftest.c >&5
-conftest.c:55:19: error: event.h: No such file or directory
-configure:3686: $? = 1
-configure: failed program was:
-| /* confdefs.h. */
-| #define PACKAGE_NAME ""
-| #define PACKAGE_TARNAME ""
-| #define PACKAGE_VERSION ""
-| #define PACKAGE_STRING ""
-| #define PACKAGE_BUGREPORT ""
-| #define STDC_HEADERS 1
-| #define HAVE_SYS_TYPES_H 1
-| #define HAVE_SYS_STAT_H 1
-| #define HAVE_STDLIB_H 1
-| #define HAVE_STRING_H 1
-| #define HAVE_MEMORY_H 1
-| #define HAVE_STRINGS_H 1
-| #define HAVE_INTTYPES_H 1
-| #define HAVE_STDINT_H 1
-| #define HAVE_UNISTD_H 1
-| #define HAVE_DLFCN_H 1
-| #define HAVE_NETINET_IN_H 1
-| #define HAVE_TIME_H 1
-| #define HAVE_PTHREAD_H 1
-| /* end confdefs.h. */
-| #include <stdio.h>
-| #ifdef HAVE_SYS_TYPES_H
-| # include <sys/types.h>
-| #endif
-| #ifdef HAVE_SYS_STAT_H
-| # include <sys/stat.h>
-| #endif
-| #ifdef STDC_HEADERS
-| # include <stdlib.h>
-| # include <stddef.h>
-| #else
-| # ifdef HAVE_STDLIB_H
-| # include <stdlib.h>
-| # endif
-| #endif
-| #ifdef HAVE_STRING_H
-| # if !defined STDC_HEADERS && defined HAVE_MEMORY_H
-| # include <memory.h>
-| # endif
-| # include <string.h>
-| #endif
-| #ifdef HAVE_STRINGS_H
-| # include <strings.h>
-| #endif
-| #ifdef HAVE_INTTYPES_H
-| # include <inttypes.h>
-| #endif
-| #ifdef HAVE_STDINT_H
-| # include <stdint.h>
-| #endif
-| #ifdef HAVE_UNISTD_H
-| # include <unistd.h>
-| #endif
-| #include <event.h>
-configure:3700: result: no
-configure:3704: checking event.h presence
-configure:3719: gcc -E conftest.c
-conftest.c:22:19: error: event.h: No such file or directory
-configure:3725: $? = 1
-configure: failed program was:
-| /* confdefs.h. */
-| #define PACKAGE_NAME ""
-| #define PACKAGE_TARNAME ""
-| #define PACKAGE_VERSION ""
-| #define PACKAGE_STRING ""
-| #define PACKAGE_BUGREPORT ""
-| #define STDC_HEADERS 1
-| #define HAVE_SYS_TYPES_H 1
-| #define HAVE_SYS_STAT_H 1
-| #define HAVE_STDLIB_H 1
-| #define HAVE_STRING_H 1
-| #define HAVE_MEMORY_H 1
-| #define HAVE_STRINGS_H 1
-| #define HAVE_INTTYPES_H 1
-| #define HAVE_STDINT_H 1
-| #define HAVE_UNISTD_H 1
-| #define HAVE_DLFCN_H 1
-| #define HAVE_NETINET_IN_H 1
-| #define HAVE_TIME_H 1
-| #define HAVE_PTHREAD_H 1
-| /* end confdefs.h. */
-| #include <event.h>
-configure:3739: result: no
-configure:3767: checking for event.h
-configure:3775: result: no
-configure:2323: error: Could not find required header, please check the installation of the required header
+configure:3240: checking for grep that handles long lines and -e
+configure:3314: result: /usr/bin/grep
+configure:3319: checking for egrep
+configure:3397: result: /usr/bin/grep -E
+configure:3402: checking for ANSI C header files
+configure:3432: gcc -c -g -O2 conftest.c >&5
+configure:3438: $? = 0
+configure:3537: gcc -o conftest -g -O2 conftest.c >&5
+configure:3540: $? = 0
+configure:3546: ./conftest
+configure:3549: $? = 0
+configure:3566: result: yes
+configure:3590: checking for sys/types.h
+configure:3611: gcc -c -g -O2 conftest.c >&5
+configure:3617: $? = 0
+configure:3633: result: yes
+configure:3590: checking for sys/stat.h
+configure:3611: gcc -c -g -O2 conftest.c >&5
+configure:3617: $? = 0
+configure:3633: result: yes
+configure:3590: checking for stdlib.h
+configure:3611: gcc -c -g -O2 conftest.c >&5
+configure:3617: $? = 0
+configure:3633: result: yes
+configure:3590: checking for string.h
+configure:3611: gcc -c -g -O2 conftest.c >&5
+configure:3617: $? = 0
+configure:3633: result: yes
+configure:3590: checking for memory.h
+configure:3611: gcc -c -g -O2 conftest.c >&5
+configure:3617: $? = 0
+configure:3633: result: yes
+configure:3590: checking for strings.h
+configure:3611: gcc -c -g -O2 conftest.c >&5
+configure:3617: $? = 0
+configure:3633: result: yes
+configure:3590: checking for inttypes.h
+configure:3611: gcc -c -g -O2 conftest.c >&5
+configure:3617: $? = 0
+configure:3633: result: yes
+configure:3590: checking for stdint.h
+configure:3611: gcc -c -g -O2 conftest.c >&5
+configure:3617: $? = 0
+configure:3633: result: yes
+configure:3590: checking for unistd.h
+configure:3611: gcc -c -g -O2 conftest.c >&5
+configure:3617: $? = 0
+configure:3633: result: yes
+configure:3664: checking dlfcn.h usability
+configure:3681: gcc -c -g -O2 conftest.c >&5
+configure:3687: $? = 0
+configure:3701: result: yes
+configure:3705: checking dlfcn.h presence
+configure:3720: gcc -E conftest.c
+configure:3726: $? = 0
+configure:3740: result: yes
+configure:3768: checking for dlfcn.h
+configure:3776: result: yes
+configure:3664: checking netinet/in.h usability
+configure:3681: gcc -c -g -O2 conftest.c >&5
+configure:3687: $? = 0
+configure:3701: result: yes
+configure:3705: checking netinet/in.h presence
+configure:3720: gcc -E conftest.c
+configure:3726: $? = 0
+configure:3740: result: yes
+configure:3768: checking for netinet/in.h
+configure:3776: result: yes
+configure:3664: checking time.h usability
+configure:3681: gcc -c -g -O2 conftest.c >&5
+configure:3687: $? = 0
+configure:3701: result: yes
+configure:3705: checking time.h presence
+configure:3720: gcc -E conftest.c
+configure:3726: $? = 0
+configure:3740: result: yes
+configure:3768: checking for time.h
+configure:3776: result: yes
+configure:3664: checking pthread.h usability
+configure:3681: gcc -c -g -O2 conftest.c >&5
+configure:3687: $? = 0
+configure:3701: result: yes
+configure:3705: checking pthread.h presence
+configure:3720: gcc -E conftest.c
+configure:3726: $? = 0
+configure:3740: result: yes
+configure:3768: checking for pthread.h
+configure:3776: result: yes
+configure:3664: checking event.h usability
+configure:3681: gcc -c -g -O2 conftest.c >&5
+configure:3687: $? = 0
+configure:3701: result: yes
+configure:3705: checking event.h presence
+configure:3720: gcc -E conftest.c
+configure:3726: $? = 0
+configure:3740: result: yes
+configure:3768: checking for event.h
+configure:3776: result: yes
+configure:3792: checking for pthread_create in -lpthread
+configure:3827: gcc -o conftest -g -O2 conftest.c -lpthread >&5
+configure:3833: $? = 0
+configure:3851: result: yes
+configure:3865: checking for event_init in -levent
+configure:3900: gcc -o conftest -g -O2 conftest.c -levent -lpthread >&5
+configure:3906: $? = 0
+configure:3924: result: yes
+configure:4616: checking for dlopen in -ldl
+configure:4651: gcc -o conftest -g -O2 conftest.c -ldl -levent -lpthread >&5
+configure:4657: $? = 0
+configure:4675: result: yes
+configure:4793: creating ./config.status
+
+## ---------------------- ##
+## Running config.status. ##
+## ---------------------- ##
+
+This file was extended by config.status, which was
+generated by GNU Autoconf 2.61. Invocation command line was
+
+ CONFIG_FILES =
+ CONFIG_HEADERS =
+ CONFIG_LINKS =
+ CONFIG_COMMANDS =
+ $ ./config.status
+
+on earth
+
+config.status:595: creating Makefile
+config.status:595: creating config.h
+configure:5889: creating ./config.status
+
+## ---------------------- ##
+## Running config.status. ##
+## ---------------------- ##
+
+This file was extended by config.status, which was
+generated by GNU Autoconf 2.61. Invocation command line was
+
+ CONFIG_FILES =
+ CONFIG_HEADERS =
+ CONFIG_LINKS =
+ CONFIG_COMMANDS =
+ $ ./config.status
+
+on earth
+
+config.status:596: creating Makefile
+config.status:596: creating ../Makefile
+config.status:596: creating config.h
+config.status:817: config.h is unchanged
## ---------------- ##
## Cache variables. ##
@@ -370,7 +365,7 @@ ac_cv_env_host_alias_value=
ac