## Patched Source ### Upstream Source You can choose to use the upstream source code, but you must apply patches to get it to build properly. **WARNING**: If you are on OpenBSD 7.0, you must patch znc-1.8.2 to avoid a threading bug that causes segfaults and to fix a bug in the schat module. First, download the latest stable release: $ cd ~ $ ftp https://znc.in/releases/znc-1.8.2.tar.gz We recommend you verify the [gpg signature](/gpg/verify): $ doas pkg_add gnupg $ ftp https://znc.in/releases/znc-1.8.2.tar.gz.sig $ gpg2 --recv-key D5823CACB477191CAC0075555AE420CC0209989E $ gpg2 --verify znc-1.8.2.tar.gz.sig znc-1.8.2.tar.gz Next, [extract and unzip](/tar/usage) the files: $ tar xvzf znc-1.8.2.tar.gz ### Patches Due to a bug in OpenBSD 6.9, we have applied a custom patch to ZNC to avoid segfaults on multicore servers: diff -ru znc-1.8.2-old/src/main.cpp znc-1.8.2-new/src/main.cpp --- znc-1.8.2-old/src/main.cpp Mon Sep 7 18:57:50 2020 +++ znc-1.8.2-new/src/main.cpp Thu Dec 24 17:04:37 2020 ` -292,6 +292,7 ` } int main(int argc, char** argv) { + pthread_attr_t a; pthread_attr_init(&a); CString sConfig; CString sDataDir = ""; The schat module also needs patching for [libreSSL](/libressl/intro): --- modules/schat.cpp.orig +++ modules/schat.cpp ` -25,8 +25,8 ` #include #include -#if !defined(OPENSSL_VERSION_NUMBER) || defined(LIBRESSL_VERSION_NUMBER) || \ - OPENSSL_VERSION_NUMBER < 0x10100007 +#if !defined(OPENSSL_VERSION_NUMBER) || OPENSSL_VERSION_NUMBER < 0x10100007 || \ + (defined(LIBRESSL_VERSION_NUMBER) && LIBRESSL_VERSION_NUMBER < 0x3040000fL) /* SSL_SESSION was made opaque in OpenSSL 1.1.0, cipher accessor was added 2 weeks before the public release. See openssl/openssl@e92813234318635639dba0168c7ef5568757449b. */ `crypt.cpp` also needs to be patched: DH_set0_pqg() has been available since LibreSSL version 2.7. This version won't compile with opaque DH in LibreSSL 3.5. Index: modules/crypt.cpp --- modules/crypt.cpp.orig +++ modules/crypt.cpp ` -68,7 +68,7 ` class CCryptMod : public CModule { CString m_sPrivKey; CString m_sPubKey; -#if OPENSSL_VERSION_NUMBER < 0X10100000L || defined(LIBRESSL_VERSION_NUMBER) +#if OPENSSL_VERSION_NUMBER < 0X10100000L static int DH_set0_pqg(DH* dh, BIGNUM* p, BIGNUM* q, BIGNUM* g) { /* If the fields p and g in dh are nullptr, the corresponding input * parameters MUST be non-nullptr. q may remain nullptr. diff -u znc-1.8.2/CMakeLists.txt.orig znc-1.8.2/CMakeLists.txt --- znc-1.8.2/CMakeLists.txt.orig Mon Sep 7 18:57:50 2020 +++ znc-1.8.2/CMakeLists.txt Fri May 6 03:50:26 2022 ` -44,6 +44,7 ` include(TestCXX11) set(CMAKE_CXX_STANDARD 11) set(CMAKE_CXX_STANDARD_REQUIRED true) +set(CMAKE_CXX_FLAGS "-DHAVE_OPAQUE_SSL" CACHE STRING "compile flags" FORCE) if(NOT CYGWIN) # We don't want to use -std=gnu++11 instead of -std=c++11, but among other # things, -std=c++11 on cygwin defines __STRICT_ANSI__ which makes cygwin IRCNow provides a patched version of ZNC: $ cd ~ $ ftp https://ircnow.org/software/znc-1.8.2b.tar.gz On OpenBSD, [ftp](/ftp/usage) can also be used to download files from the web. For [tar](/tar/usage), the options xvzf stand for e(x)tract, (v)erbose, un(z)ip, and (f)ile. $ tar xvzf znc-1.8.2b.tar.gz