From: short <> Date: Thu, 6 Nov 2003 20:12:39 +0000 (+0000) Subject: Handle non-standard g_get_tmp_dir() settings (by $ENV{"TMPDIR"} etc.). X-Git-Tag: captive-1_0_2~2 X-Git-Url: http://git.jankratochvil.net/?p=captive.git;a=commitdiff_plain;h=9f6e1fd88dd99453196604e7342d4a876949080a Handle non-standard g_get_tmp_dir() settings (by $ENV{"TMPDIR"} etc.). - Fixes sandbox compatibility with Mandrake TBA. --- diff --git a/src/client/sandbox-server/main.c b/src/client/sandbox-server/main.c index ff77349..c8f96e0 100644 --- a/src/client/sandbox-server/main.c +++ b/src/client/sandbox-server/main.c @@ -312,7 +312,23 @@ struct rlimit rlim; fatal("Unsuccessful setrlimit(%s)",resource_string); } -static gchar *chrooted_orbit_dir; +static void sandbox_server_mkdir_p(const gchar *dirpathname) +{ +gchar *pathname=(/* de-const */ gchar *)captive_strdup_alloca(dirpathname); +gchar *gs,*gs2; + + /* Missing mkdir(2) of the last component path is intentional: */ + for (gs=pathname;(gs2=strchr(gs,'/'));gs=gs2) { + *gs2='\0'; + if (*pathname && mkdir(pathname,S_ISVTX|0777)) { + if (errno!=EEXIST) + fatal("Failed to mkdir(\"%s\"): %m",pathname); + } + *gs2++='/'; + } +} + +static const gchar *chrooted_orbit_dir; static void chroot_setup(gboolean fragile) { @@ -444,7 +460,7 @@ gint gi; /* Prepare /t for /t/o-$PID directories for ORBit2 * and also for parent's hardlink to its /t/o-$pid directory. */ if (optarg_chroot) { -gchar *chrooted_orbit_dir_old,*gs,*gs2; +gchar *chrooted_orbit_dir_old; if (mkdir("/t",S_ISVTX|0777)) { if (errno!=EEXIST) @@ -463,20 +479,14 @@ FILE *f; } g_assert(chroot_pid_hashkey_dir!=NULL); chrooted_orbit_dir=g_strdup_printf("%s/t/o-%d",chroot_pid_hashkey_dir,getpid()); - /* Missing mkdir(2) of the last component path is intentional: */ - for (gs=chrooted_orbit_dir;(gs2=strchr(gs,'/'));gs=gs2) { - *gs2='\0'; - if (*chrooted_orbit_dir && mkdir(chrooted_orbit_dir,S_ISVTX|0777)) { - if (errno!=EEXIST) - fatal("Failed to mkdir(\"%s\"): %m",chrooted_orbit_dir); - } - *gs2++='/'; - } - /* Prepare '/tmp' for the initial CORBA_ORB_init() default path: */ - if (mkdir("/tmp",S_ISVTX|0777)) { - if (errno!=EEXIST) - fatal("Failed to mkdir(\"%s\"): %m","/tmp"); - } + /* Last pathname component is not created: */ + sandbox_server_mkdir_p(chrooted_orbit_dir); + /* Prepare '/tmp' for the initial CORBA_ORB_init() default path. + * Workaround sandbox_server_mkdir_p() does not create last component. + * Do not use '/tmp' directly as some distributions may set custom + * tmpdir pathname by $ENV{"TMPDIR"} etc. + */ + sandbox_server_mkdir_p(captive_printf_alloca("%s/",g_get_tmp_dir())); /* Set '0700' to prevent: Wrong permissions for ... * by linc-1.0.1-1/src/linc-protocols.c/make_local_tmpdir() */