mirror of
https://gitlab.freedesktop.org/pulseaudio/pulseaudio.git
synced 2025-10-29 05:40:23 -04:00
tunnel-new: add cookie module argument
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.
This commit is contained in:
parent
49dd827373
commit
abfca5cb58
2 changed files with 26 additions and 5 deletions
|
|
@ -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);
|
||||
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue