diff options
author | Lennart Poettering <lennart@poettering.net> | 2012-05-15 23:59:33 +0200 |
---|---|---|
committer | Lennart Poettering <lennart@poettering.net> | 2012-05-15 23:59:33 +0200 |
commit | 87ae8307057944662bb8a4b638f56fa980eef48a (patch) | |
tree | 06da8c75979700e9941c301b2c6b4bd6bcd126f5 /src | |
parent | 9ab510a69216b468c80acad92a0e2360ffccfea2 (diff) |
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.
Diffstat (limited to 'src')
-rw-r--r-- | src/modules/module-esound-sink.c | 2 | ||||
-rw-r--r-- | src/modules/module-tunnel.c | 2 | ||||
-rw-r--r-- | src/modules/x11/module-x11-publish.c | 2 | ||||
-rw-r--r-- | src/pulse/client-conf.c | 24 | ||||
-rw-r--r-- | src/pulsecore/auth-cookie.c | 4 | ||||
-rw-r--r-- | src/pulsecore/auth-cookie.h | 2 | ||||
-rw-r--r-- | src/pulsecore/authkey.c | 14 | ||||
-rw-r--r-- | src/pulsecore/authkey.h | 4 | ||||
-rw-r--r-- | src/pulsecore/native-common.h | 3 | ||||
-rw-r--r-- | src/pulsecore/protocol-esound.c | 2 | ||||
-rw-r--r-- | src/pulsecore/protocol-native.c | 20 | ||||
-rw-r--r-- | src/utils/pax11publish.c | 2 |
12 files changed, 53 insertions, 28 deletions
diff --git a/src/modules/module-esound-sink.c b/src/modules/module-esound-sink.c index 1e26e5e4b..08387163a 100644 --- a/src/modules/module-esound-sink.c +++ b/src/modules/module-esound-sink.c @@ -623,7 +623,7 @@ int pa__init(pa_module*m) { /* Prepare the initial request */ 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"); goto fail; } diff --git a/src/modules/module-tunnel.c b/src/modules/module-tunnel.c index 091671789..554eecf67 100644 --- a/src/modules/module-tunnel.c +++ b/src/modules/module-tunnel.c @@ -1971,7 +1971,7 @@ int pa__init(pa_module*m) { u->rtpoll = pa_rtpoll_new(); 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; if (!(u->server_name = pa_xstrdup(pa_modargs_get_value(ma, "server", NULL)))) { diff --git a/src/modules/x11/module-x11-publish.c b/src/modules/x11/module-x11-publish.c index 716fe0b8a..643b735e5 100644 --- a/src/modules/x11/module-x11-publish.c +++ b/src/modules/x11/module-x11-publish.c @@ -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); - 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; if (!(u->x11_wrapper = pa_x11_wrapper_get(m->core, pa_modargs_get_value(ma, "display", NULL)))) diff --git a/src/pulse/client-conf.c b/src/pulse/client-conf.c index e2c2aae17..781fdf919 100644 --- a/src/pulse/client-conf.c +++ b/src/pulse/client-conf.c @@ -71,7 +71,7 @@ pa_client_conf *pa_client_conf_new(void) { c->daemon_binary = pa_xstrdup(PA_BINARY); c->extra_arguments = pa_xstrdup("--log-target=syslog"); - c->cookie_file = pa_xstrdup(PA_NATIVE_COOKIE_FILE); + c->cookie_file = NULL; 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) { - pa_assert(c); + int k; - if (!c->cookie_file) - return -1; + pa_assert(c); c->cookie_valid = FALSE; - if (pa_authkey_load_auto(c->cookie_file, c->cookie, sizeof(c->cookie)) < 0) - return -1; + if (c->cookie_file) + 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; return 0; diff --git a/src/pulsecore/auth-cookie.c b/src/pulsecore/auth-cookie.c index 0897502f0..97ea351bf 100644 --- a/src/pulsecore/auth-cookie.c +++ b/src/pulsecore/auth-cookie.c @@ -42,7 +42,7 @@ struct pa_auth_cookie { 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; 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); - 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); return NULL; } diff --git a/src/pulsecore/auth-cookie.h b/src/pulsecore/auth-cookie.h index 3db40bcdf..5f871b10a 100644 --- a/src/pulsecore/auth-cookie.h +++ b/src/pulsecore/auth-cookie.h @@ -26,7 +26,7 @@ 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); void pa_auth_cookie_unref(pa_auth_cookie *c); diff --git a/src/pulsecore/authkey.c b/src/pulsecore/authkey.c index ac81513d2..c37d3fe5f 100644 --- a/src/pulsecore/authkey.c +++ b/src/pulsecore/authkey.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 * 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 writable = 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(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)); goto finish; } else @@ -129,14 +129,14 @@ finish: } /* 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; pa_assert(path); pa_assert(data); 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"); 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 * 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; int ret; @@ -180,7 +180,7 @@ int pa_authkey_load_auto(const char *fn, void *data, size_t length) { if (!(p = normalize_path(fn))) return -2; - ret = pa_authkey_load(p, data, length); + ret = pa_authkey_load(p, create, data, length); pa_xfree(p); return ret; diff --git a/src/pulsecore/authkey.h b/src/pulsecore/authkey.h index 8301db1e2..22ec990de 100644 --- a/src/pulsecore/authkey.h +++ b/src/pulsecore/authkey.h @@ -24,8 +24,8 @@ #include <sys/types.h> -int pa_authkey_load(const char *path, void *data, size_t len); -int pa_authkey_load_auto(const char *fn, void *data, size_t length); +int pa_authkey_load(const char *path, pa_bool_t create, void *data, size_t len); +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); diff --git a/src/pulsecore/native-common.h b/src/pulsecore/native-common.h index 5d1ba6a69..8fde0236f 100644 --- a/src/pulsecore/native-common.h +++ b/src/pulsecore/native-common.h @@ -177,7 +177,8 @@ enum { }; #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 diff --git a/src/pulsecore/protocol-esound.c b/src/pulsecore/protocol-esound.c index 4e1c56cf9..00ea00061 100644 --- a/src/pulsecore/protocol-esound.c +++ b/src/pulsecore/protocol-esound.c @@ -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))) 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; } else diff --git a/src/pulsecore/protocol-native.c b/src/pulsecore/protocol-native.c index 41fc0a023..396e143c7 100644 --- a/src/pulsecore/protocol-native.c +++ b/src/pulsecore/protocol-native.c @@ -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 * we check the old name too */ - if (!(cn = pa_modargs_get_value(ma, "auth-cookie", NULL))) - if (!(cn = pa_modargs_get_value(ma, "cookie", NULL))) - cn = PA_NATIVE_COOKIE_FILE; + cn = pa_modargs_get_value(ma, "auth-cookie", NULL); + if (!cn) + 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; } else diff --git a/src/utils/pax11publish.c b/src/utils/pax11publish.c index d3ffc78b6..0f9a030e0 100644 --- a/src/utils/pax11publish.c +++ b/src/utils/pax11publish.c @@ -195,7 +195,7 @@ int main(int argc, char *argv[]) { 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")); goto finish; } |