summaryrefslogtreecommitdiffstats
path: root/krb5-1.11-run_user_0.patch
diff options
context:
space:
mode:
authorNalin Dahyabhai <nalin@dahyabhai.net>2013-05-30 12:26:42 -0400
committerNalin Dahyabhai <nalin@dahyabhai.net>2013-05-30 12:26:42 -0400
commitdc293b3d84ef42a40b6e4a6ee56d24ee730cb8d6 (patch)
tree97ef33fb8d2a73fc0e79b4cd6fc18d500fa692b6 /krb5-1.11-run_user_0.patch
parent559c78a30a78cb45a5e2e261eded99cbac8c94b7 (diff)
downloadkrb5-dc293b3d84ef42a40b6e4a6ee56d24ee730cb8d6.tar.gz
krb5-dc293b3d84ef42a40b6e4a6ee56d24ee730cb8d6.tar.xz
krb5-dc293b3d84ef42a40b6e4a6ee56d24ee730cb8d6.zip
Add a hackish attempt at a workaround for #961235
Add a patch to create /run/user/0 if we're trying to resolve a DIR: ccache somewhere below it and neither the target location nor /run/user/0 exist yet. The better workaround is to set the location's owner to "linger" via logind, since even after we do what we're doing here, if the user logs in and logs back out, our location is still removed.
Diffstat (limited to 'krb5-1.11-run_user_0.patch')
-rw-r--r--krb5-1.11-run_user_0.patch34
1 files changed, 34 insertions, 0 deletions
diff --git a/krb5-1.11-run_user_0.patch b/krb5-1.11-run_user_0.patch
new file mode 100644
index 0000000..6be760a
--- /dev/null
+++ b/krb5-1.11-run_user_0.patch
@@ -0,0 +1,34 @@
+A hack: if we're looking at creating a ccache directory directly below
+the /run/user/0 directory, and /run/user/0 doesn't exist, try to create
+it, too.
+
+--- krb5/src/lib/krb5/ccache/cc_dir.c
++++ krb5/src/lib/krb5/ccache/cc_dir.c
+@@ -61,6 +61,8 @@
+
+ #include <dirent.h>
+
++#define ROOT_SPECIAL_DCC_PARENT "/run/user/0"
++
+ extern const krb5_cc_ops krb5_dcc_ops;
+ extern const krb5_cc_ops krb5_fcc_ops;
+
+@@ -239,6 +241,18 @@
+
+ if (stat(dirname, &st) < 0) {
+ if (errno == ENOENT) {
++ if (strncmp(dirname, ROOT_SPECIAL_DCC_PARENT "/",
++ sizeof(ROOT_SPECIAL_DCC_PARENT)) == 0 &&
++ stat(ROOT_SPECIAL_DCC_PARENT, &st) < 0 &&
++ errno == ENOENT) {
++#ifdef USE_SELINUX
++ selabel = krb5int_push_fscreatecon_for(ROOT_SPECIAL_DCC_PARENT);
++#endif
++ status = mkdir(ROOT_SPECIAL_DCC_PARENT, S_IRWXU);
++#ifdef USE_SELINUX
++ krb5int_pop_fscreatecon(selabel);
++#endif
++ }
+ #ifdef USE_SELINUX
+ selabel = krb5int_push_fscreatecon_for(dirname);
+ #endif