]> code.delx.au - pulseaudio/commitdiff
tunnel-new: add cookie module argument
authorAlexander Couzens <lynxis@fe80.eu>
Mon, 16 Sep 2013 12:08:14 +0000 (14:08 +0200)
committerTanu Kaskinen <tanu.kaskinen@linux.intel.com>
Fri, 15 Nov 2013 08:16:29 +0000 (10:16 +0200)
When connecting to a remote server your local generated authentication
cookie is used. If remote server's cookie is different from your local
one you aren't allowed to connect. You can use the cookie argument
or define a wider acl in remote server configuration for
module-native-protocol.

src/modules/module-tunnel-sink-new.c
src/modules/module-tunnel-source-new.c

index ee05d18f95efa4f99b575e2aadd7222f50955356..8d0409275c603dc1f440d76d9ad33dfa56825de2 100644 (file)
@@ -56,7 +56,8 @@ PA_MODULE_USAGE(
         "format=<sample format> "
         "channels=<number of channels> "
         "rate=<sample rate> "
-        "channel_map=<channel map>"
+        "channel_map=<channel map> "
+        "cookie=<cookie file path>"
         );
 
 #define TUNNEL_THREAD_FAILED_MAINLOOP 1
@@ -82,6 +83,7 @@ struct userdata {
 
     bool connected;
 
+    char *cookie_file;
     char *remote_server;
     char *remote_sink_name;
 };
@@ -95,7 +97,7 @@ static const char* const valid_modargs[] = {
     "channels",
     "rate",
     "channel_map",
-   /* "cookie", unimplemented */
+    "cookie",
    /* "reconnect", reconnect if server comes back again - unimplemented */
     NULL,
 };
@@ -139,6 +141,11 @@ static void thread_func(void *userdata) {
         goto fail;
     }
 
+    if (u->cookie_file && pa_context_load_cookie_from_file(u->context, u->cookie_file) != 0) {
+        pa_log_error("Can not load cookie file!");
+        goto fail;
+    }
+
     pa_context_set_state_callback(u->context, context_state_cb, u);
     if (pa_context_connect(u->context,
                            u->remote_server,
@@ -450,7 +457,7 @@ int pa__init(pa_module *m) {
         goto fail;
     }
     u->thread_mainloop_api = pa_mainloop_get_api(u->thread_mainloop);
-
+    u->cookie_file = pa_xstrdup(pa_modargs_get_value(ma, "cookie", NULL));
     u->remote_sink_name = pa_xstrdup(pa_modargs_get_value(ma, "sink", NULL));
 
     u->thread_mq = pa_xnew0(pa_thread_mq, 1);
@@ -541,6 +548,9 @@ void pa__done(pa_module *m) {
     if (u->thread_mainloop)
         pa_mainloop_free(u->thread_mainloop);
 
+    if (u->cookie_file)
+        pa_xfree(u->cookie_file);
+
     if (u->remote_sink_name)
         pa_xfree(u->remote_sink_name);
 
index 8169b07f71b8a83615dc0d29ae807f14d13da65c..d2e2d6c68645765defc4df5a0e5846f82967d40a 100644 (file)
@@ -56,7 +56,8 @@ PA_MODULE_USAGE(
         "format=<sample format> "
         "channels=<number of channels> "
         "rate=<sample rate> "
-        "channel_map=<channel map>"
+        "channel_map=<channel map> "
+        "cookie=<cookie file path>"
         );
 
 #define TUNNEL_THREAD_FAILED_MAINLOOP 1
@@ -81,6 +82,7 @@ struct userdata {
     bool connected;
     bool new_data;
 
+    char *cookie_file;
     char *remote_server;
     char *remote_source_name;
 };
@@ -94,7 +96,7 @@ static const char* const valid_modargs[] = {
     "channels",
     "rate",
     "channel_map",
-   /* "cookie", unimplemented */
+    "cookie",
    /* "reconnect", reconnect if server comes back again - unimplemented */
     NULL,
 };
@@ -198,6 +200,11 @@ static void thread_func(void *userdata) {
         goto fail;
     }
 
+    if (u->cookie_file && pa_context_load_cookie_from_file(u->context, u->cookie_file) != 0) {
+        pa_log_error("Can not load cookie file!");
+        goto fail;
+    }
+
     pa_context_set_state_callback(u->context, context_state_cb, u);
     if (pa_context_connect(u->context,
                            u->remote_server,
@@ -454,6 +461,7 @@ int pa__init(pa_module *m) {
         goto fail;
     }
     u->thread_mainloop_api = pa_mainloop_get_api(u->thread_mainloop);
+    u->cookie_file = pa_xstrdup(pa_modargs_get_value(ma, "cookie", NULL));
     u->remote_source_name = pa_xstrdup(pa_modargs_get_value(ma, "source", NULL));
 
     u->thread_mq = pa_xnew0(pa_thread_mq, 1);
@@ -543,6 +551,9 @@ void pa__done(pa_module *m) {
     if (u->thread_mainloop)
         pa_mainloop_free(u->thread_mainloop);
 
+    if (u->cookie_file)
+        pa_xfree(u->cookie_file);
+
     if (u->remote_source_name)
         pa_xfree(u->remote_source_name);