#include <pulsecore/modargs.h>
#include <pulsecore/log.h>
#include <pulsecore/native-common.h>
+#include <pulsecore/creds.h>
#ifdef USE_TCP_SOCKETS
#define SOCKET_DESCRIPTION "(TCP sockets)"
-#define SOCKET_USAGE "port=<TCP port number> loopback=<listen on loopback device only?> listen=<address to listen on>"
+#define SOCKET_USAGE "port=<TCP port number> listen=<address to listen on>"
#else
#define SOCKET_DESCRIPTION "(UNIX sockets)"
#define SOCKET_USAGE "socket=<path to UNIX socket>"
#include "module-simple-protocol-unix-symdef.h"
#endif
PA_MODULE_DESCRIPTION("Simple protocol "SOCKET_DESCRIPTION)
- PA_MODULE_USAGE("rate=<sample rate> format=<sample format> channels=<number of channels> sink=<sink to connect to> source=<source to connect to> playback=<enable playback?> record=<enable record?> "SOCKET_USAGE)
+ PA_MODULE_USAGE("rate=<sample rate> "
+ "format=<sample format> "
+ "channels=<number of channels> "
+ "sink=<sink to connect to> "
+ "source=<source to connect to> "
+ "playback=<enable playback?> "
+ "record=<enable record?> "
+ SOCKET_USAGE)
#elif defined(USE_PROTOCOL_CLI)
#include <pulsecore/protocol-cli.h>
#define protocol_new pa_protocol_cli_new
#include "module-native-protocol-unix-symdef.h"
#endif
- #if defined(SCM_CREDENTIALS) && !defined(USE_TCP_SOCKETS)
- #define MODULE_ARGUMENTS MODULE_ARGUMENTS_COMMON "auth-group",
- #define AUTH_USAGE "auth-group=<local group to allow access>"
+ #if defined(HAVE_CREDS) && !defined(USE_TCP_SOCKETS)
+ #define MODULE_ARGUMENTS MODULE_ARGUMENTS_COMMON "auth-group", "auth-group-enable="
+ #define AUTH_USAGE "auth-group=<system group to allow access> auth-group-enable=<enable auth by UNIX group?> "
#else
#define MODULE_ARGUMENTS MODULE_ARGUMENTS_COMMON
#define AUTH_USAGE
#endif
PA_MODULE_DESCRIPTION("Native protocol "SOCKET_DESCRIPTION)
- PA_MODULE_USAGE("auth-anonymous=<don't check for cookies?> cookie=<path to cookie file> "AUTH_USAGE SOCKET_USAGE)
+ PA_MODULE_USAGE("auth-anonymous=<don't check for cookies?> "
+ "cookie=<path to cookie file> "
+ AUTH_USAGE
+ SOCKET_USAGE)
#elif defined(USE_PROTOCOL_ESOUND)
#include <pulsecore/protocol-esound.h>
#include <pulsecore/esound.h>
#include "module-esound-protocol-unix-symdef.h"
#endif
PA_MODULE_DESCRIPTION("ESOUND protocol "SOCKET_DESCRIPTION)
- PA_MODULE_USAGE("sink=<sink to connect to> source=<source to connect to> auth-anonymous=<don't check for cookies?> cookie=<path to cookie file> "SOCKET_USAGE)
+ PA_MODULE_USAGE("sink=<sink to connect to> "
+ "source=<source to connect to> "
+ "auth-anonymous=<don't verify cookies?> "
+ "cookie=<path to cookie file> "
+ SOCKET_USAGE)
#else
#error "Broken build system"
#endif
MODULE_ARGUMENTS
#if defined(USE_TCP_SOCKETS)
"port",
- "loopback",
"listen",
#else
"socket",
#if defined(USE_TCP_SOCKETS)
pa_socket_server *s_ipv4 = NULL, *s_ipv6 = NULL;
- int loopback = 1;
uint32_t port = IPV4_PORT;
const char *listen_on;
#else
pa_socket_server *s;
int r;
- const char *v;
char tmp[PATH_MAX];
#endif
u = pa_xnew0(struct userdata, 1);
#if defined(USE_TCP_SOCKETS)
- if (pa_modargs_get_value_boolean(ma, "loopback", &loopback) < 0) {
- pa_log(__FILE__": loopback= expects a boolean argument.");
- goto fail;
- }
-
if (pa_modargs_get_value_u32(ma, "port", &port) < 0 || port < 1 || port > 0xFFFF) {
pa_log(__FILE__": port= expects a numerical argument between 1 and 65535.");
goto fail;
if (listen_on) {
s_ipv6 = pa_socket_server_new_ipv6_string(c->mainloop, listen_on, port, TCPWRAP_SERVICE);
s_ipv4 = pa_socket_server_new_ipv4_string(c->mainloop, listen_on, port, TCPWRAP_SERVICE);
- } else if (loopback) {
- s_ipv6 = pa_socket_server_new_ipv6_loopback(c->mainloop, port, TCPWRAP_SERVICE);
- s_ipv4 = pa_socket_server_new_ipv4_loopback(c->mainloop, port, TCPWRAP_SERVICE);
} else {
s_ipv6 = pa_socket_server_new_ipv6_any(c->mainloop, port, TCPWRAP_SERVICE);
s_ipv4 = pa_socket_server_new_ipv4_any(c->mainloop, port, TCPWRAP_SERVICE);
goto fail;
#else
- v = pa_modargs_get_value(ma, "socket", UNIX_SOCKET);
- pa_runtime_path(v, tmp, sizeof(tmp));
+
+ pa_runtime_path(pa_modargs_get_value(ma, "socket", UNIX_SOCKET), tmp, sizeof(tmp));
u->socket_path = pa_xstrdup(tmp);
- if (pa_make_secure_parent_dir(tmp) < 0) {
- pa_log(__FILE__": Failed to create secure socket directory.");
+#if defined(USE_PROTOCOL_ESOUND)
+
+ /* This socket doesn't reside in our own runtime dir but in
+ * /tmp/.esd/, hence we have to create the dir first */
+
+ if (pa_make_secure_parent_dir(u->socket_path, c->is_system_instance ? 0755 : 0700, getuid(), getgid()) < 0) {
+ pa_log(__FILE__": Failed to create socket directory: %s\n", pa_cstrerror(errno));
goto fail;
}
-
+#endif
+
if ((r = pa_unix_socket_remove_stale(tmp)) < 0) {
pa_log(__FILE__": Failed to remove stale UNIX socket '%s': %s", tmp, pa_cstrerror(errno));
goto fail;
if (u->protocol_unix)
protocol_free(u->protocol_unix);
+#if defined(USE_PROTOCOL_ESOUND)
if (u->socket_path) {
- char *p;
-
- if ((p = pa_parent_dir(u->socket_path))) {
- if (rmdir(p) < 0 && errno != ENOENT && errno != ENOTEMPTY)
- pa_log(__FILE__": Failed to remove %s: %s.", u->socket_path, pa_cstrerror(errno));
-
- pa_xfree(p);
- }
-
- pa_xfree(u->socket_path);
+ char *p = pa_parent_dir(u->socket_path);
+ rmdir(p);
+ pa_xfree(p);
}
#endif
+
+
+ pa_xfree(u->socket_path);
+#endif
pa_xfree(u);
}