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:
Lennart Poettering 2012-05-15 23:59:33 +02:00
parent 9ab510a692
commit 87ae830705
14 changed files with 57 additions and 32 deletions

View file

@ -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;
}

View file

@ -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);

View file

@ -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;

View file

@ -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);

View file

@ -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

View file

@ -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

View file

@ -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