--- /dev/null
+ o Minor bug fixes:
+ - Defer creation of Unix sockets until after setuid. This avoids needing
+ CAP_CHOWN and CAP_FOWNER when using systemd's CapabilityBoundingSet, or
+ chown and fowner when using SELinux.
if (port->server_cfg.no_listen)
continue;
+#ifndef _WIN32
+ /* We don't need to be root to create a UNIX socket, so defer until after
+ * setuid. */
+ const or_options_t *options = get_options();
+ if (port->is_unix_addr && !geteuid() && strcmp(options->User, "root"))
+ continue;
+#endif
+
if (port->is_unix_addr) {
listensockaddr = (struct sockaddr *)
create_unix_sockaddr(port->unix_addr,