Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package postsrsd for openSUSE:Factory checked in at 2026-06-08 14:24:20 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/postsrsd (Old) and /work/SRC/openSUSE:Factory/.postsrsd.new.2375 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "postsrsd" Mon Jun 8 14:24:20 2026 rev:16 rq:1357940 version:2.0.12 Changes: -------- --- /work/SRC/openSUSE:Factory/postsrsd/postsrsd.changes 2025-04-14 12:57:52.058952419 +0200 +++ /work/SRC/openSUSE:Factory/.postsrsd.new.2375/postsrsd.changes 2026-06-08 14:28:58.822168125 +0200 @@ -1,0 +2,7 @@ +Mon Jun 8 10:08:27 UTC 2026 - Jan Engelhardt <[email protected]> + +- Update to release 2.0.12 + * PostSRSd will give a proper diagnostic instead of crashing if + no SRS domain is configured. + +------------------------------------------------------------------- Old: ---- 2.0.11.tar.gz New: ---- 2.0.12.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ postsrsd.spec ++++++ --- /var/tmp/diff_new_pack.FU9lFL/_old 2026-06-08 14:28:59.554198500 +0200 +++ /var/tmp/diff_new_pack.FU9lFL/_new 2026-06-08 14:28:59.554198500 +0200 @@ -1,7 +1,7 @@ # # spec file for package postsrsd # -# Copyright (c) 2025 SUSE LLC +# Copyright (c) 2026 SUSE LLC and contributors # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -17,7 +17,7 @@ Name: postsrsd -Version: 2.0.11 +Version: 2.0.12 Release: 0 Summary: Sender Rewriting Support for postfix License: GPL-2.0-only @@ -47,7 +47,7 @@ -DUSE_APPARMOR=1 -DINIT_FLAVOR=systemd \ -DWITH_SQLITE=BOOL:ON -DBUILD_TESTING:BOOL=OFF \ -DPOSTSRSD_USER=postsrsd -%make_jobs +%cmake_build %install %cmake_install ++++++ 2.0.11.tar.gz -> 2.0.12.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/postsrsd-2.0.11/.github/workflows/ci.yml new/postsrsd-2.0.12/.github/workflows/ci.yml --- old/postsrsd-2.0.11/.github/workflows/ci.yml 2025-04-12 16:51:32.000000000 +0200 +++ new/postsrsd-2.0.12/.github/workflows/ci.yml 2026-06-07 20:01:53.000000000 +0200 @@ -34,7 +34,7 @@ run: | mkdir _build cd _build - cmake .. -DDEVELOPER_BUILD=ON -DWITH_${{ matrix.milter }} -DWITH_${{ matrix.sqlite }} -DWITH_${{ matrix.redis }} ${{ matrix.deps == 'system-deps' && '-DFETCHCONTENT_FULLY_DISCONNECTED=ON -DFETCHCONTENT_TRY_FIND_PACKAGE_MODE=ALWAYS' || '' }} + cmake .. -DDEVELOPER_BUILD=ON -DTESTS_WITH_ASAN=ON -DWITH_${{ matrix.milter }} -DWITH_${{ matrix.sqlite }} -DWITH_${{ matrix.redis }} ${{ matrix.deps == 'system-deps' && '-DFETCHCONTENT_FULLY_DISCONNECTED=ON -DFETCHCONTENT_TRY_FIND_PACKAGE_MODE=ALWAYS' || '' }} cmake --build . --verbose - name: Run tests run: | diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/postsrsd-2.0.11/.pre-commit-config.yaml new/postsrsd-2.0.12/.pre-commit-config.yaml --- old/postsrsd-2.0.11/.pre-commit-config.yaml 2025-04-12 16:51:32.000000000 +0200 +++ new/postsrsd-2.0.12/.pre-commit-config.yaml 2026-06-07 20:01:53.000000000 +0200 @@ -2,14 +2,14 @@ # See https://pre-commit.com/hooks.html for more hooks repos: - repo: https://github.com/pre-commit/pre-commit-hooks - rev: v5.0.0 + rev: v6.0.0 hooks: - id: trailing-whitespace - id: end-of-file-fixer - id: check-yaml - id: check-added-large-files - repo: https://github.com/pre-commit/mirrors-clang-format - rev: v20.1.0 + rev: v21.1.0 hooks: - id: clang-format - repo: https://github.com/psf/black diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/postsrsd-2.0.11/CHANGELOG.rst new/postsrsd-2.0.12/CHANGELOG.rst --- old/postsrsd-2.0.11/CHANGELOG.rst 2025-04-12 16:51:32.000000000 +0200 +++ new/postsrsd-2.0.12/CHANGELOG.rst 2026-06-07 20:01:53.000000000 +0200 @@ -7,6 +7,31 @@ Changelog ######### +2.0.12 +====== + +Fixed +----- + +* PostSRSd will give a proper diagnostic instead of crashing + if no SRS domain is configured. +* The sysusers.d snippet will never be installed for the "nobody" + user. + +Changed +------- + +* The build will always look for installed system dependencies first. +* Updated vendored dependencies for Hiredis and SQLite to latest release. +* If PostSRSd is installed to `/usr/local`, the systemd files are also + installed there instead of `/etc`. + +Added +----- + +* New CMake switch `INSTALL_SYSTEMD_SYSUSERS` for sysusers.d snippet + installation. + 2.0.11 ====== diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/postsrsd-2.0.11/CMakeLists.txt new/postsrsd-2.0.12/CMakeLists.txt --- old/postsrsd-2.0.11/CMakeLists.txt 2025-04-12 16:51:32.000000000 +0200 +++ new/postsrsd-2.0.12/CMakeLists.txt 2026-06-07 20:01:53.000000000 +0200 @@ -14,10 +14,10 @@ # You should have received a copy of the GNU General Public License # along with this program. If not, see <http://www.gnu.org/licenses/>. # -cmake_minimum_required(VERSION 3.14...3.29) +cmake_minimum_required(VERSION 3.14...4.2) project( postsrsd - VERSION 2.0.11 + VERSION 2.0.12 LANGUAGES C DESCRIPTION "Sender Rewriting Scheme daemon for Postfix" HOMEPAGE_URL "https://github.com/roehling/postsrsd" @@ -73,7 +73,7 @@ OFF ) add_feature_info(WITH_REDIS WITH_REDIS "use Redis as database backend") -option(TESTS_WITH_ASAN "Run test suite with AddressSanitizer" ON) +option(TESTS_WITH_ASAN "Run test suite with AddressSanitizer" OFF) option(DEVELOPER_BUILD "Add strict compiler options for development only" OFF) option(GENERATE_SRS_SECRET "Generate and install a postsrsd.secret" ON) add_feature_info( @@ -86,6 +86,13 @@ INSTALL_SYSTEMD_SERVICE INSTALL_SYSTEMD_SERVICE "install the systemd postsrsd.service unit" ) +option(INSTALL_SYSTEMD_SYSUSERS "Install a systemd sysusers.d/postsrsd.conf" + ${INSTALL_SYSTEMD_SERVICE} +) +add_feature_info( + INSTALL_SYSTEMD_SYSUSERS DO_INSTALL_SYSTEMD_SYSUSERS + "instruct systemd to create the PostSRSd user \"${POSTSRSD_USER}\"" +) find_systemd_unit_destination(DETECTED_SYSTEMD_UNITDIR) set(SYSTEMD_UNITDIR "${DETECTED_SYSTEMD_UNITDIR}" @@ -114,11 +121,23 @@ set(CHROOTABLE_DATADIR "${POSTSRSD_DATADIR}") endif() +if(INSTALL_SYSTEMD_SERVICE + AND INSTALL_SYSTEMD_SYSUSERS + AND NOT POSTSRSD_USER STREQUAL "nobody" +) + set(DO_INSTALL_SYSTEMD_SYSUSERS TRUE) +else() + set(DO_INSTALL_SYSTEMD_SYSUSERS FALSE) +endif() + mark_as_advanced( TESTS_WITH_ASAN GENERATE_SRS_SECRET + INSTALL_SYSTEMD_SERVICE + INSTALL_SYSTEMD_SYSUSERS DEVELOPER_BUILD SYSTEMD_UNITDIR + SYSTEMD_SYSUSERSDIR POSTSRSD_CONFIGDIR POSTSRSD_CHROOTDIR POSTSRSD_DATADIR @@ -130,25 +149,29 @@ URL https://github.com/libconfuse/libconfuse/releases/download/v3.3/confuse-3.3.tar.gz URL_HASH SHA3_256=da895d91a7755941872e73ff6522fd16810f1599862990df569459a0eee94515 + FIND_PACKAGE_ARGS ) FetchContent_Declare( Hiredis GIT_REPOSITORY https://github.com/redis/hiredis - GIT_TAG c14775b4e48334e0262c9f168887578f4a368b5d + GIT_TAG 67c88a05bb97c40d5c29d0680e51828627e4f362 + FIND_PACKAGE_ARGS ) FetchContent_Declare( LibMilter GIT_REPOSITORY https://github.com/roehling/libmilter GIT_TAG 3661f3c5ac5e47205f26775031d2ac276d6d47ca + FIND_PACKAGE_ARGS ) FetchContent_Declare( sqlite3 - URL https://sqlite.org/2023/sqlite-amalgamation-3410200.zip + URL https://sqlite.org/2026/sqlite-amalgamation-3530200.zip URL_HASH - SHA3_256=c51ca72411b8453c64e0980be23bc9b9530bdc3ec1513e06fbf022ed0fd02463 + SHA3_256=81142986038e18f96c4a54e1a72562ae17e502a916f2a7701eff43388cbf1a40 + FIND_PACKAGE_ARGS ) FetchContent_Declare( @@ -156,6 +179,7 @@ URL https://github.com/libcheck/check/releases/download/0.15.2/check-0.15.2.tar.gz URL_HASH SHA3_256=bfb856a68c0ea4d930803f6bd16c1eed38910a231c9e0f0009e69310e35e7a5d + FIND_PACKAGE_ARGS ) set(saved_CMAKE_REQUIRED_DEFINITIONS "${CMAKE_REQUIRED_DEFINITIONS}") @@ -216,6 +240,16 @@ CACHE BOOL "" FORCE ) FetchContent_MakeAvailable(Hiredis) + mark_as_advanced( + ENABLE_ASYNC_TESTS + ENABLE_SSL_TESTS + ENABLE_SSL + ENABLE_NUGET + ENABLE_EXAMPLES + DISABLE_TESTS + BUILD_SHARED_LIBS + hiredis_export_name + ) if(IS_DIRECTORY "${hiredis_SOURCE_DIR}") set_property( DIRECTORY "${hiredis_SOURCE_DIR}" PROPERTY EXCLUDE_FROM_ALL TRUE @@ -364,10 +398,13 @@ install(FILES "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}.conf" DESTINATION "${CMAKE_INSTALL_DATADIR}/doc/${PROJECT_NAME}" ) + if(INSTALL_SYSTEMD_SERVICE) install(FILES "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}.service" DESTINATION "${SYSTEMD_UNITDIR}" ) +endif() +if(INSTALL_SYSTEMD_SYSUSERS AND NOT POSTSRSD_USER STREQUAL "nobody") install(FILES "${CMAKE_CURRENT_BINARY_DIR}/sysusers.d/${PROJECT_NAME}.conf" DESTINATION "${SYSTEMD_SYSUSERSDIR}" ) @@ -382,6 +419,7 @@ NAMES urandom random PATHS /dev ) + mark_as_advanced(DD BASE64 OPENSSL RANDOM_SOURCE) if(BASE64) set(BASE64_ENCODE "${BASE64}") elseif(OPENSSL) @@ -416,6 +454,10 @@ if(BUILD_TESTING) FetchContent_MakeAvailable(Check) + mark_as_advanced( + AWK_PATH CHECK_ENABLE_GCOV CHECK_ENABLE_TESTS + CHECK_ENABLE_TIMEOUT_TESTS ENABLE_MEMORY_LEAKING_TESTS INSTALL_CHECKMK + ) if(IS_DIRECTORY "${check_SOURCE_DIR}") # Workaround for https://github.com/roehling/postsrsd/issues/161 file(REMOVE "${check_SOURCE_DIR}/src/check.h") @@ -431,6 +473,13 @@ feature_summary(WHAT ENABLED_FEATURES DISABLED_FEATURES) +if(DEFINED INIT_FLAVOR) + message( + WARNING + "The INIT_FLAVOR option is no longer used by PostSRSd 2.x and will be ignored" + ) +endif() + set(CPACK_SET_DESTDIR ON) set(CPACK_PACKAGE_NAME "postsrsd") set(CPACK_PACKAGE_VENDOR "Timo Röhling") diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/postsrsd-2.0.11/README.rst new/postsrsd-2.0.12/README.rst --- old/postsrsd-2.0.11/README.rst 2025-04-12 16:51:32.000000000 +0200 +++ new/postsrsd-2.0.12/README.rst 2026-06-07 20:01:53.000000000 +0200 @@ -33,8 +33,7 @@ will be much less of a maintenance burden. If you are interested in packaging PostSRSd for a Linux distribution, have a -look at the packaging_ notes. In particular, we are currently looking for a new -Debian maintainer (`#145 <https://github.com/roehling/postsrsd/issues/145>`_). +look at the packaging_ notes. .. _packaging: doc/packaging.rst diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/postsrsd-2.0.11/cmake/utils.cmake new/postsrsd-2.0.12/cmake/utils.cmake --- old/postsrsd-2.0.11/cmake/utils.cmake 2025-04-12 16:51:32.000000000 +0200 +++ new/postsrsd-2.0.12/cmake/utils.cmake 2026-06-07 20:01:53.000000000 +0200 @@ -14,6 +14,7 @@ FetchContent_MakeAvailable(${name}) if(NOT TARGET ${arg_EXPORTED_TARGET}) find_program(MAKE_EXECUTABLE NAMES gmake make mingw32-make REQUIRED) + mark_as_advanced(MAKE_EXECUTABLE) set(library_file "${CMAKE_STATIC_LIBRARY_PREFIX}${arg_LIBRARY_NAME}${CMAKE_STATIC_LIBRARY_SUFFIX}" ) @@ -74,6 +75,11 @@ PARENT_SCOPE ) endif() + elseif(CMAKE_INSTALL_PREFIX MATCHES "^/usr/local/?$") + set(${var} + "/usr/local/lib/systemd/system" + PARENT_SCOPE + ) else() set(${var} "/etc/systemd/system" @@ -97,6 +103,11 @@ PARENT_SCOPE ) endif() + elseif(CMAKE_INSTALL_PREFIX MATCHES "^/usr/local/?$") + set(${var} + "/usr/local/lib/sysusers.d" + PARENT_SCOPE + ) else() set(${var} "/etc/sysusers.d" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/postsrsd-2.0.11/src/config.c new/postsrsd-2.0.12/src/config.c --- old/postsrsd-2.0.11/src/config.c 2025-04-12 16:51:32.000000000 +0200 +++ new/postsrsd-2.0.12/src/config.c 2026-06-07 20:01:53.000000000 +0200 @@ -220,7 +220,7 @@ break; } } - if (config_file) + if (config_file != NULL) { switch (cfg_parse(cfg, config_file)) { @@ -237,17 +237,17 @@ } set_string(&config_file, NULL); } - if (pid_file) + if (pid_file != NULL) { cfg_setstr(cfg, "pid-file", pid_file); set_string(&pid_file, NULL); } - if (unprivileged_user) + if (unprivileged_user != NULL) { cfg_setstr(cfg, "unprivileged-user", unprivileged_user); set_string(&unprivileged_user, NULL); } - if (chroot_dir) + if (chroot_dir != NULL) { cfg_setstr(cfg, "chroot-dir", chroot_dir); set_string(&chroot_dir, NULL); @@ -297,7 +297,7 @@ return NULL; } char* faketime = getenv("POSTSRSD_FAKETIME"); - if (faketime) + if (NONEMPTY_STRING(faketime)) { char* eptr; long stamp = strtol(faketime, &eptr, 10); @@ -326,7 +326,7 @@ *local_domains = domain_set_create(); char* domain; domain = cfg_getstr(cfg, "srs-domain"); - if (domain && domain[0]) + if (NONEMPTY_STRING(domain)) *srs_domain = strdup(domain[0] == '.' ? domain + 1 : domain); unsigned ndomains = cfg_size(cfg, "domains"); for (unsigned i = 0; i < ndomains; ++i) @@ -340,7 +340,7 @@ } } char* domains_file = cfg_getstr(cfg, "domains-file"); - if (domains_file && domains_file[0]) + if (NONEMPTY_STRING(domains_file)) { FILE* f = fopen(domains_file, "r"); if (f) @@ -360,7 +360,7 @@ end = domain + strlen(domain); while (end != domain && isspace(*(end - 1))) *--end = 0; - if (domain[0] == 0) + if (NULL_OR_EMPTY_STRING(domain)) continue; if (is_valid_domain_name(domain)) { @@ -384,6 +384,11 @@ goto fail; } } + if (*srs_domain == NULL) + { + log_error("no SRS domain configured"); + goto fail; + } return true; fail: domain_set_destroy(*local_domains); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/postsrsd-2.0.11/src/endpoint.c new/postsrsd-2.0.12/src/endpoint.c --- old/postsrsd-2.0.11/src/endpoint.c 2025-04-12 16:51:32.000000000 +0200 +++ new/postsrsd-2.0.12/src/endpoint.c 2026-06-07 20:01:53.000000000 +0200 @@ -199,7 +199,7 @@ { path = &s[6]; } - if (path) + if (path != NULL) { int fd = create_unix_socket(path); if (fd < 0) @@ -228,7 +228,7 @@ addr = strdup(&s[6]); family = AF_INET6; } - if (addr) + if (addr != NULL) { int ret = create_inet_sockets(addr, family, max_fds, fds); free(addr); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/postsrsd-2.0.11/src/milter.c new/postsrsd-2.0.12/src/milter.c --- old/postsrsd-2.0.11/src/milter.c 2025-04-12 16:51:32.000000000 +0200 +++ new/postsrsd-2.0.12/src/milter.c 2026-06-07 20:01:53.000000000 +0200 @@ -255,7 +255,7 @@ log_error("cannot start milter: failed to open socket"); goto done; } - if (milter_path) + if (milter_path != NULL) { if (chmod(milter_path, 0666) < 0) { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/postsrsd-2.0.11/src/netstring.c new/postsrsd-2.0.12/src/netstring.c --- old/postsrsd-2.0.11/src/netstring.c 2025-04-12 16:51:32.000000000 +0200 +++ new/postsrsd-2.0.12/src/netstring.c 2026-06-07 20:01:53.000000000 +0200 @@ -28,7 +28,7 @@ return NULL; strncpy(&buffer[i], data, length); buffer[length + i] = ','; - if (encoded_length) + if (encoded_length != NULL) *encoded_length = length + i + 1; return buffer; } @@ -47,7 +47,7 @@ if (netstring[i] != ':' || netstring[length + i + 1] != ',') return NULL; strncpy(buffer, &netstring[i + 1], length); - if (decoded_length) + if (decoded_length != NULL) *decoded_length = length; buffer[length] = 0; return buffer; @@ -67,7 +67,7 @@ return NULL; if (fgetc(f) != ',') return NULL; - if (decoded_length) + if (decoded_length != NULL) *decoded_length = length; buffer[length] = 0; return buffer; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/postsrsd-2.0.11/src/srs.c new/postsrsd-2.0.12/src/srs.c --- old/postsrsd-2.0.11/src/srs.c 2025-04-12 16:51:32.000000000 +0200 +++ new/postsrsd-2.0.12/src/srs.c 2026-06-07 20:01:53.000000000 +0200 @@ -38,6 +38,15 @@ log_debug("<%s> not rewritten: no domain", addr); return NULL; } + if (domain == NULL) + { + log_error("<%s> not rewritten: no SRS domain configured", addr); + if (error != NULL) + *error = true; + if (info != NULL) + *info = "Configuration error."; + return NULL; + } const char* input_domain = at + 1; if (domain_set_contains(local_domains, input_domain)) { @@ -57,9 +66,9 @@ if (db_alias == NULL) { log_warn("<%s> not rewritten: aliasing error", addr); - if (error) + if (error != NULL) *error = true; - if (info) + if (info != NULL) *info = "Aliasing error."; return NULL; } @@ -146,9 +155,9 @@ else { log_warn("<%s> not reversed: no database for alias", addr); - if (error) + if (error != NULL) *error = true; - if (info) + if (info != NULL) *info = "No database for alias."; return NULL; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/postsrsd-2.0.11/src/util.c new/postsrsd-2.0.12/src/util.c --- old/postsrsd-2.0.11/src/util.c 2025-04-12 16:51:32.000000000 +0200 +++ new/postsrsd-2.0.12/src/util.c 2026-06-07 20:01:53.000000000 +0200 @@ -269,7 +269,7 @@ for (unsigned i = 0; i < sizeof(D->c) / sizeof(D->c[0]); ++i) if (D->c[i]) domain_set_destroy(D->c[i]); - if (D->s) + if (D->s != NULL) domain_set_destroy(D->s); free(D); } @@ -278,7 +278,7 @@ { char* dot = strrchr(domain, '.'); char* subdomain = domain; - if (dot) + if (dot != NULL) { subdomain = dot + 1; *dot = 0; @@ -304,7 +304,7 @@ } D = D->c[ch]; } - if (dot) + if (dot != NULL) { if (D->s == NULL) { @@ -406,7 +406,7 @@ { if (L == NULL) return; - if (deleter) + if (deleter != NULL) { for (size_t i = 0; i < L->size; ++i) { @@ -425,6 +425,40 @@ free(L); } +struct file_watch +{ + int fd; +}; + +file_watch_t* file_watch_create() +{ + file_watch_t* W = malloc(sizeof(file_watch_t)); + if (W != NULL) + { + W->fd = -1; + } + return W; +} + +int file_watch_poll_fd(file_watch_t* W) +{ + return W != NULL ? W->fd : -1; +} + +void file_watch_process_events(file_watch_t* W) +{ + MAYBE_UNUSED(W); +} + +void file_watch_destroy(file_watch_t* W) +{ + if (W != NULL) + { + close(W->fd); + free(W); + } +} + static char* swap_host_port(const char* s, size_t prefix_len) { char* port = strchr(s + prefix_len, ':'); @@ -566,7 +600,7 @@ void log_perror(int err, const char* prefix) { char* msg = strerror(err); - if (prefix) + if (NONEMPTY_STRING(prefix)) log_error("%s: %s", prefix, msg); else log_error("%s", msg); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/postsrsd-2.0.11/src/util.h new/postsrsd-2.0.12/src/util.h --- old/postsrsd-2.0.11/src/util.h 2025-04-12 16:51:32.000000000 +0200 +++ new/postsrsd-2.0.12/src/util.h 2026-06-07 20:01:53.000000000 +0200 @@ -36,6 +36,8 @@ struct list; typedef struct list list_t; typedef void (*list_deleter_t)(void*); +struct file_watch; +typedef struct file_watch file_watch_t; void set_string(char** var, char* value); char* b32h_encode(const char* data, size_t length, char* buffer, @@ -65,6 +67,11 @@ void list_clear(list_t* L, list_deleter_t deleter); void list_destroy(list_t* L, list_deleter_t deleter); +file_watch_t* file_watch_create(); +int file_watch_poll_fd(file_watch_t* W); +void file_watch_process_events(file_watch_t* W); +void file_watch_destroy(file_watch_t* W); + char* endpoint_for_milter(const char* s); char* endpoint_for_redis(const char* s, int* port); ++++++ _scmsync.obsinfo ++++++ --- /var/tmp/diff_new_pack.FU9lFL/_old 2026-06-08 14:28:59.782207961 +0200 +++ /var/tmp/diff_new_pack.FU9lFL/_new 2026-06-08 14:28:59.786208127 +0200 @@ -1,5 +1,5 @@ -mtime: 1744484353 -commit: 96fb443188e77065f1fdef4c513a552d8f2708dedfbcea75378ed360d941e9b1 +mtime: 1780916648 +commit: 0ca3cb73c3a1e50f3f5976ab25dde73f08e00087f54c9f9bb2b14e10f998efb0 url: https://src.opensuse.org/jengelh/postsrsd revision: master ++++++ build.specials.obscpio ++++++ ++++++ build.specials.obscpio ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/.gitignore new/.gitignore --- old/.gitignore 1970-01-01 01:00:00.000000000 +0100 +++ new/.gitignore 2026-06-08 13:04:08.000000000 +0200 @@ -0,0 +1 @@ +.osc
