mirror of
https://gitlab.freedesktop.org/pulseaudio/pulseaudio.git
synced 2025-10-31 22:25:33 -04:00
auth: move cookie file to ~/.config/pulse/cookie
In order to follow XDG basedir, read the cookie file from ~/.config/pulse/cookie if possible, but fall back to the old file. if it doesn't exist.
This commit is contained in:
parent
9ab510a692
commit
87ae830705
14 changed files with 57 additions and 32 deletions
|
|
@ -73,7 +73,7 @@ USA.
|
||||||
the <file>eval</file> shell command to set the $PULSE_SERVER,
|
the <file>eval</file> shell command to set the $PULSE_SERVER,
|
||||||
$PULSE_SINK, $PULSE_SOURCE environment variables. Also reads the
|
$PULSE_SINK, $PULSE_SOURCE environment variables. Also reads the
|
||||||
authentication cookie from the root window and stores it in
|
authentication cookie from the root window and stores it in
|
||||||
<file>~/.pulse-cookie</file>. </p></optdesc>
|
<file>~/.config/pulse/cookie</file>. </p></optdesc>
|
||||||
</option>
|
</option>
|
||||||
|
|
||||||
<option>
|
<option>
|
||||||
|
|
@ -88,7 +88,7 @@ USA.
|
||||||
exist). If specific options are passed on the command line
|
exist). If specific options are passed on the command line
|
||||||
(<opt>-S</opt>, <opt>-O</opt>, <opt>-I</opt>, <opt>-c</opt>, see
|
(<opt>-S</opt>, <opt>-O</opt>, <opt>-I</opt>, <opt>-c</opt>, see
|
||||||
below), they take precedence. Also uploads the local
|
below), they take precedence. Also uploads the local
|
||||||
authentication cookie <file>~/.pulse-cookie</file> to the X11
|
authentication cookie <file>~/.config/pulse/cookie</file> to the X11
|
||||||
server.</p></optdesc>
|
server.</p></optdesc>
|
||||||
</option>
|
</option>
|
||||||
|
|
||||||
|
|
@ -133,7 +133,7 @@ USA.
|
||||||
|
|
||||||
<optdesc><p>Only valid for <opt>-e</opt>: export the PulseAudio
|
<optdesc><p>Only valid for <opt>-e</opt>: export the PulseAudio
|
||||||
authentication cookie stored in the specified file to the X11
|
authentication cookie stored in the specified file to the X11
|
||||||
display instead of the one stored in <file>~/.pulse-cookie</file>.</p></optdesc>
|
display instead of the one stored in <file>~/.config/pulse/cookie</file>.</p></optdesc>
|
||||||
</option>
|
</option>
|
||||||
|
|
||||||
</options>
|
</options>
|
||||||
|
|
|
||||||
|
|
@ -88,7 +88,7 @@ USA.
|
||||||
<option>
|
<option>
|
||||||
<p><opt>cookie-file=</opt> Specify the path to the PulseAudio
|
<p><opt>cookie-file=</opt> Specify the path to the PulseAudio
|
||||||
authentication cookie. Defaults to
|
authentication cookie. Defaults to
|
||||||
<file>~/.pulse-cookie</file>.</p>
|
<file>~/.config/pulse/cookie</file>.</p>
|
||||||
</option>
|
</option>
|
||||||
|
|
||||||
<option>
|
<option>
|
||||||
|
|
|
||||||
|
|
@ -623,7 +623,7 @@ int pa__init(pa_module*m) {
|
||||||
|
|
||||||
/* Prepare the initial request */
|
/* Prepare the initial request */
|
||||||
u->write_data = pa_xmalloc(u->write_length = ESD_KEY_LEN + sizeof(int32_t));
|
u->write_data = pa_xmalloc(u->write_length = ESD_KEY_LEN + sizeof(int32_t));
|
||||||
if (pa_authkey_load_auto(pa_modargs_get_value(ma, "cookie", ".esd_auth"), u->write_data, ESD_KEY_LEN) < 0) {
|
if (pa_authkey_load_auto(pa_modargs_get_value(ma, "cookie", ".esd_auth"), TRUE, u->write_data, ESD_KEY_LEN) < 0) {
|
||||||
pa_log("Failed to load cookie");
|
pa_log("Failed to load cookie");
|
||||||
goto fail;
|
goto fail;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1971,7 +1971,7 @@ int pa__init(pa_module*m) {
|
||||||
u->rtpoll = pa_rtpoll_new();
|
u->rtpoll = pa_rtpoll_new();
|
||||||
pa_thread_mq_init(&u->thread_mq, m->core->mainloop, u->rtpoll);
|
pa_thread_mq_init(&u->thread_mq, m->core->mainloop, u->rtpoll);
|
||||||
|
|
||||||
if (!(u->auth_cookie = pa_auth_cookie_get(u->core, pa_modargs_get_value(ma, "cookie", PA_NATIVE_COOKIE_FILE), PA_NATIVE_COOKIE_LENGTH)))
|
if (!(u->auth_cookie = pa_auth_cookie_get(u->core, pa_modargs_get_value(ma, "cookie", PA_NATIVE_COOKIE_FILE), TRUE, PA_NATIVE_COOKIE_LENGTH)))
|
||||||
goto fail;
|
goto fail;
|
||||||
|
|
||||||
if (!(u->server_name = pa_xstrdup(pa_modargs_get_value(ma, "server", NULL)))) {
|
if (!(u->server_name = pa_xstrdup(pa_modargs_get_value(ma, "server", NULL)))) {
|
||||||
|
|
|
||||||
|
|
@ -157,7 +157,7 @@ int pa__init(pa_module*m) {
|
||||||
|
|
||||||
u->hook_slot = pa_hook_connect(&pa_native_protocol_hooks(u->protocol)[PA_NATIVE_HOOK_SERVERS_CHANGED], PA_HOOK_NORMAL, servers_changed_cb, u);
|
u->hook_slot = pa_hook_connect(&pa_native_protocol_hooks(u->protocol)[PA_NATIVE_HOOK_SERVERS_CHANGED], PA_HOOK_NORMAL, servers_changed_cb, u);
|
||||||
|
|
||||||
if (!(u->auth_cookie = pa_auth_cookie_get(m->core, pa_modargs_get_value(ma, "cookie", PA_NATIVE_COOKIE_FILE), PA_NATIVE_COOKIE_LENGTH)))
|
if (!(u->auth_cookie = pa_auth_cookie_get(m->core, pa_modargs_get_value(ma, "cookie", PA_NATIVE_COOKIE_FILE), TRUE, PA_NATIVE_COOKIE_LENGTH)))
|
||||||
goto fail;
|
goto fail;
|
||||||
|
|
||||||
if (!(u->x11_wrapper = pa_x11_wrapper_get(m->core, pa_modargs_get_value(ma, "display", NULL))))
|
if (!(u->x11_wrapper = pa_x11_wrapper_get(m->core, pa_modargs_get_value(ma, "display", NULL))))
|
||||||
|
|
|
||||||
|
|
@ -71,7 +71,7 @@ pa_client_conf *pa_client_conf_new(void) {
|
||||||
|
|
||||||
c->daemon_binary = pa_xstrdup(PA_BINARY);
|
c->daemon_binary = pa_xstrdup(PA_BINARY);
|
||||||
c->extra_arguments = pa_xstrdup("--log-target=syslog");
|
c->extra_arguments = pa_xstrdup("--log-target=syslog");
|
||||||
c->cookie_file = pa_xstrdup(PA_NATIVE_COOKIE_FILE);
|
c->cookie_file = NULL;
|
||||||
|
|
||||||
return c;
|
return c;
|
||||||
}
|
}
|
||||||
|
|
@ -178,15 +178,27 @@ int pa_client_conf_env(pa_client_conf *c) {
|
||||||
}
|
}
|
||||||
|
|
||||||
int pa_client_conf_load_cookie(pa_client_conf* c) {
|
int pa_client_conf_load_cookie(pa_client_conf* c) {
|
||||||
pa_assert(c);
|
int k;
|
||||||
|
|
||||||
if (!c->cookie_file)
|
pa_assert(c);
|
||||||
return -1;
|
|
||||||
|
|
||||||
c->cookie_valid = FALSE;
|
c->cookie_valid = FALSE;
|
||||||
|
|
||||||
if (pa_authkey_load_auto(c->cookie_file, c->cookie, sizeof(c->cookie)) < 0)
|
if (c->cookie_file)
|
||||||
return -1;
|
k = pa_authkey_load_auto(c->cookie_file, TRUE, c->cookie, sizeof(c->cookie));
|
||||||
|
else {
|
||||||
|
k = pa_authkey_load_auto(PA_NATIVE_COOKIE_FILE, FALSE, c->cookie, sizeof(c->cookie));
|
||||||
|
|
||||||
|
if (k < 0) {
|
||||||
|
k = pa_authkey_load_auto(PA_NATIVE_COOKIE_FILE_FALLBACK, FALSE, c->cookie, sizeof(c->cookie));
|
||||||
|
|
||||||
|
if (k < 0)
|
||||||
|
k = pa_authkey_load_auto(PA_NATIVE_COOKIE_FILE, TRUE, c->cookie, sizeof(c->cookie));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (k < 0)
|
||||||
|
return k;
|
||||||
|
|
||||||
c->cookie_valid = TRUE;
|
c->cookie_valid = TRUE;
|
||||||
return 0;
|
return 0;
|
||||||
|
|
|
||||||
|
|
@ -42,7 +42,7 @@ struct pa_auth_cookie {
|
||||||
size_t size;
|
size_t size;
|
||||||
};
|
};
|
||||||
|
|
||||||
pa_auth_cookie* pa_auth_cookie_get(pa_core *core, const char *cn, size_t size) {
|
pa_auth_cookie* pa_auth_cookie_get(pa_core *core, const char *cn, pa_bool_t create, size_t size) {
|
||||||
pa_auth_cookie *c;
|
pa_auth_cookie *c;
|
||||||
char *t;
|
char *t;
|
||||||
|
|
||||||
|
|
@ -69,7 +69,7 @@ pa_auth_cookie* pa_auth_cookie_get(pa_core *core, const char *cn, size_t size) {
|
||||||
|
|
||||||
pa_assert_se(pa_shared_set(core, t, c) >= 0);
|
pa_assert_se(pa_shared_set(core, t, c) >= 0);
|
||||||
|
|
||||||
if (pa_authkey_load_auto(cn, (uint8_t*) c + PA_ALIGN(sizeof(pa_auth_cookie)), size) < 0) {
|
if (pa_authkey_load_auto(cn, create, (uint8_t*) c + PA_ALIGN(sizeof(pa_auth_cookie)), size) < 0) {
|
||||||
pa_auth_cookie_unref(c);
|
pa_auth_cookie_unref(c);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -26,7 +26,7 @@
|
||||||
|
|
||||||
typedef struct pa_auth_cookie pa_auth_cookie;
|
typedef struct pa_auth_cookie pa_auth_cookie;
|
||||||
|
|
||||||
pa_auth_cookie* pa_auth_cookie_get(pa_core *c, const char *cn, size_t size);
|
pa_auth_cookie* pa_auth_cookie_get(pa_core *c, const char *cn, pa_bool_t create, size_t size);
|
||||||
pa_auth_cookie* pa_auth_cookie_ref(pa_auth_cookie *c);
|
pa_auth_cookie* pa_auth_cookie_ref(pa_auth_cookie *c);
|
||||||
void pa_auth_cookie_unref(pa_auth_cookie *c);
|
void pa_auth_cookie_unref(pa_auth_cookie *c);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -72,7 +72,7 @@ static int generate(int fd, void *ret_data, size_t length) {
|
||||||
|
|
||||||
/* Load an authorization cookie from file fn and store it in data. If
|
/* Load an authorization cookie from file fn and store it in data. If
|
||||||
* the cookie file doesn't exist, create it */
|
* the cookie file doesn't exist, create it */
|
||||||
static int load(const char *fn, void *data, size_t length) {
|
static int load(const char *fn, pa_bool_t create, void *data, size_t length) {
|
||||||
int fd = -1;
|
int fd = -1;
|
||||||
int writable = 1;
|
int writable = 1;
|
||||||
int unlock = 0, ret = -1;
|
int unlock = 0, ret = -1;
|
||||||
|
|
@ -82,9 +82,9 @@ static int load(const char *fn, void *data, size_t length) {
|
||||||
pa_assert(data);
|
pa_assert(data);
|
||||||
pa_assert(length > 0);
|
pa_assert(length > 0);
|
||||||
|
|
||||||
if ((fd = pa_open_cloexec(fn, O_RDWR|O_CREAT|O_BINARY, S_IRUSR|S_IWUSR)) < 0) {
|
if ((fd = pa_open_cloexec(fn, (create ? O_RDWR|O_CREAT : O_RDONLY)|O_BINARY, S_IRUSR|S_IWUSR)) < 0) {
|
||||||
|
|
||||||
if (errno != EACCES || (fd = open(fn, O_RDONLY|O_BINARY)) < 0) {
|
if (!create || errno != EACCES || (fd = open(fn, O_RDONLY|O_BINARY)) < 0) {
|
||||||
pa_log_warn("Failed to open cookie file '%s': %s", fn, pa_cstrerror(errno));
|
pa_log_warn("Failed to open cookie file '%s': %s", fn, pa_cstrerror(errno));
|
||||||
goto finish;
|
goto finish;
|
||||||
} else
|
} else
|
||||||
|
|
@ -129,14 +129,14 @@ finish:
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Load a cookie from a cookie file. If the file doesn't exist, create it. */
|
/* Load a cookie from a cookie file. If the file doesn't exist, create it. */
|
||||||
int pa_authkey_load(const char *path, void *data, size_t length) {
|
int pa_authkey_load(const char *path, pa_bool_t create, void *data, size_t length) {
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
pa_assert(path);
|
pa_assert(path);
|
||||||
pa_assert(data);
|
pa_assert(data);
|
||||||
pa_assert(length > 0);
|
pa_assert(length > 0);
|
||||||
|
|
||||||
if ((ret = load(path, data, length)) < 0)
|
if ((ret = load(path, create, data, length)) < 0)
|
||||||
pa_log_warn("Failed to load authorization key '%s': %s", path, (ret < 0) ? pa_cstrerror(errno) : "File corrupt");
|
pa_log_warn("Failed to load authorization key '%s': %s", path, (ret < 0) ? pa_cstrerror(errno) : "File corrupt");
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
|
|
@ -169,7 +169,7 @@ static char *normalize_path(const char *fn) {
|
||||||
|
|
||||||
/* Load a cookie from a file in the home directory. If the specified
|
/* Load a cookie from a file in the home directory. If the specified
|
||||||
* path starts with /, use it as absolute path instead. */
|
* path starts with /, use it as absolute path instead. */
|
||||||
int pa_authkey_load_auto(const char *fn, void *data, size_t length) {
|
int pa_authkey_load_auto(const char *fn, pa_bool_t create, void *data, size_t length) {
|
||||||
char *p;
|
char *p;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
|
|
@ -180,7 +180,7 @@ int pa_authkey_load_auto(const char *fn, void *data, size_t length) {
|
||||||
if (!(p = normalize_path(fn)))
|
if (!(p = normalize_path(fn)))
|
||||||
return -2;
|
return -2;
|
||||||
|
|
||||||
ret = pa_authkey_load(p, data, length);
|
ret = pa_authkey_load(p, create, data, length);
|
||||||
pa_xfree(p);
|
pa_xfree(p);
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
|
|
|
||||||
|
|
@ -24,8 +24,8 @@
|
||||||
|
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
|
|
||||||
int pa_authkey_load(const char *path, void *data, size_t len);
|
int pa_authkey_load(const char *path, pa_bool_t create, void *data, size_t len);
|
||||||
int pa_authkey_load_auto(const char *fn, void *data, size_t length);
|
int pa_authkey_load_auto(const char *fn, pa_bool_t create, void *data, size_t length);
|
||||||
|
|
||||||
int pa_authkey_save(const char *path, const void *data, size_t length);
|
int pa_authkey_save(const char *path, const void *data, size_t length);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -177,7 +177,8 @@ enum {
|
||||||
};
|
};
|
||||||
|
|
||||||
#define PA_NATIVE_COOKIE_LENGTH 256
|
#define PA_NATIVE_COOKIE_LENGTH 256
|
||||||
#define PA_NATIVE_COOKIE_FILE ".pulse-cookie"
|
#define PA_NATIVE_COOKIE_FILE ".config/pulse/cookie"
|
||||||
|
#define PA_NATIVE_COOKIE_FILE_FALLBACK ".pulse-cookie"
|
||||||
|
|
||||||
#define PA_NATIVE_DEFAULT_PORT 4713
|
#define PA_NATIVE_DEFAULT_PORT 4713
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1711,7 +1711,7 @@ int pa_esound_options_parse(pa_esound_options *o, pa_core *c, pa_modargs *ma) {
|
||||||
if (!(cn = pa_modargs_get_value(ma, "cookie", NULL)))
|
if (!(cn = pa_modargs_get_value(ma, "cookie", NULL)))
|
||||||
cn = DEFAULT_COOKIE_FILE;
|
cn = DEFAULT_COOKIE_FILE;
|
||||||
|
|
||||||
if (!(o->auth_cookie = pa_auth_cookie_get(c, cn, ESD_KEY_LEN)))
|
if (!(o->auth_cookie = pa_auth_cookie_get(c, cn, TRUE, ESD_KEY_LEN)))
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
} else
|
} else
|
||||||
|
|
|
||||||
|
|
@ -5215,11 +5215,23 @@ int pa_native_options_parse(pa_native_options *o, pa_core *c, pa_modargs *ma) {
|
||||||
|
|
||||||
/* The new name for this is 'auth-cookie', for compat reasons
|
/* The new name for this is 'auth-cookie', for compat reasons
|
||||||
* we check the old name too */
|
* we check the old name too */
|
||||||
if (!(cn = pa_modargs_get_value(ma, "auth-cookie", NULL)))
|
cn = pa_modargs_get_value(ma, "auth-cookie", NULL);
|
||||||
if (!(cn = pa_modargs_get_value(ma, "cookie", NULL)))
|
if (!cn)
|
||||||
cn = PA_NATIVE_COOKIE_FILE;
|
cn = pa_modargs_get_value(ma, "cookie", NULL);
|
||||||
|
|
||||||
if (!(o->auth_cookie = pa_auth_cookie_get(c, cn, PA_NATIVE_COOKIE_LENGTH)))
|
if (cn)
|
||||||
|
o->auth_cookie = pa_auth_cookie_get(c, cn, TRUE, PA_NATIVE_COOKIE_LENGTH);
|
||||||
|
else {
|
||||||
|
o->auth_cookie = pa_auth_cookie_get(c, PA_NATIVE_COOKIE_FILE, FALSE, PA_NATIVE_COOKIE_LENGTH);
|
||||||
|
if (!o->auth_cookie) {
|
||||||
|
o->auth_cookie = pa_auth_cookie_get(c, PA_NATIVE_COOKIE_FILE_FALLBACK, FALSE, PA_NATIVE_COOKIE_LENGTH);
|
||||||
|
|
||||||
|
if (!o->auth_cookie)
|
||||||
|
o->auth_cookie = pa_auth_cookie_get(c, PA_NATIVE_COOKIE_FILE, TRUE, PA_NATIVE_COOKIE_LENGTH);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!o->auth_cookie)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
} else
|
} else
|
||||||
|
|
|
||||||
|
|
@ -195,7 +195,7 @@ int main(int argc, char *argv[]) {
|
||||||
|
|
||||||
pa_client_conf_free(conf);
|
pa_client_conf_free(conf);
|
||||||
|
|
||||||
if (pa_authkey_load_auto(cookie_file, cookie, sizeof(cookie)) < 0) {
|
if (pa_authkey_load_auto(cookie_file, cookie, TRUE, sizeof(cookie)) < 0) {
|
||||||
fprintf(stderr, _("Failed to load cookie data\n"));
|
fprintf(stderr, _("Failed to load cookie data\n"));
|
||||||
goto finish;
|
goto finish;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue