From 0cc9454a9566a1d5d81786db39e9d93099561c55 Mon Sep 17 00:00:00 2001
From: Doralitze <doralitze@chaotikum.org>
Date: Mon, 27 Mar 2023 11:55:46 +0200
Subject: [PATCH] fix: unix address generation

---
 src/net/sock_address_factory.cpp | 6 +++++-
 test/address_tests.cpp           | 2 +-
 2 files changed, 6 insertions(+), 2 deletions(-)

diff --git a/src/net/sock_address_factory.cpp b/src/net/sock_address_factory.cpp
index 98bdcd7..c4b9209 100644
--- a/src/net/sock_address_factory.cpp
+++ b/src/net/sock_address_factory.cpp
@@ -166,7 +166,11 @@ namespace rmrf::net {
         if (socket_type == socket_t::UNIX) {
             sockaddr_un storage;
             strncpy(storage.sun_path, interface_description.c_str(), sizeof(storage.sun_path));
-            std::list<socketaddr> l = {socketaddr{storage}};
+            // Required as the automatic initialization of sockaddr_un is broken on linux.
+            // This will be optimized out on platforms where it is not.
+            ((sockaddr*) &storage)->sa_family = AF_UNIX;
+            const socketaddr sa{storage};
+            std::list<socketaddr> l = {sa};
             return l;
         }
         
diff --git a/test/address_tests.cpp b/test/address_tests.cpp
index 867be3e..0c9512b 100644
--- a/test/address_tests.cpp
+++ b/test/address_tests.cpp
@@ -65,5 +65,5 @@ BOOST_AUTO_TEST_CASE(Socketaddr_comparison) {
 
 BOOST_AUTO_TEST_CASE(Unix_socket_construction_test) {
     const auto sa = get_first_general_socketaddr("/tmp/9Lq7BNBnBycd6nxy.socket", "", socket_t::UNIX);
-    BOOST_CHECK_EQUAL(sa.str(), "FileSocket /tmp/9Lq7BNBnBycd6nxy.socket");
+    BOOST_CHECK_EQUAL(sa.str(), "SocketAddress: FileSocket /tmp/9Lq7BNBnBycd6nxy.socket");
 }
-- 
GitLab