@@ -61,51 +61,47 @@ static int mkjobtmp_rundir (flux_shell_t *shell, char *buf, size_t size)
6161 return 0 ;
6262}
6363
64- static int mkjobtmp_tmpdir (flux_shell_t * shell , char * buf , size_t size )
64+ static int mkjobtmp_tmpdir (flux_shell_t * shell ,
65+ const char * tmpdir ,
66+ char * buf ,
67+ size_t size )
6568{
66- const char * tmpdir = flux_shell_getenv (shell , "TMPDIR" );
67-
6869 if (make_job_path (shell , tmpdir ? tmpdir : "/tmp" , buf , size ) < 0
6970 || mkdir_exist_ok (buf , false) < 0 )
7071 return -1 ;
7172 return 0 ;
7273}
7374
74- static int mktmpdir (flux_shell_t * shell )
75- {
76- const char * tmpdir = flux_shell_getenv (shell , "TMPDIR" );
77-
78- if (tmpdir && mkdir_exist_ok (tmpdir , false) < 0 )
79- return -1 ;
80- return 0 ;
81- }
82-
8375static int tmpdir_init (flux_plugin_t * p ,
8476 const char * topic ,
8577 flux_plugin_arg_t * args ,
8678 void * data )
8779{
8880 flux_shell_t * shell = flux_plugin_get_shell (p );
81+ const char * tmpdir = flux_shell_getenv (shell , "TMPDIR" );
8982 char jobtmp [1024 ];
9083
91- /* Ensure TMPDIR exists if it is set in job environment
84+ /* Attempt to create TMPDIR if set. If this fails, fallback to /tmp.
9285 */
93- if (mktmpdir (shell ) < 0 )
94- shell_die_errno (1 , "error creating TMPDIR" );
86+ if (tmpdir && mkdir_exist_ok (tmpdir , true) < 0 ) {
87+ shell_warn ("Unable to create TMPDIR=%s, resetting TMPDIR=/tmp" ,
88+ tmpdir );
89+ tmpdir = "/tmp" ;
90+ if (flux_shell_setenvf (shell , 1 , "TMPDIR" , "%s" , tmpdir ) < 0 )
91+ shell_die_errno (1 , "Unable to set TMPDIR=/tmp" );
92+ }
9593
9694 /* Try to create jobtmp in broker rundir.
9795 * Fall back to ${TMPDIR:-/tmp} if that fails (e.g. guest user).
9896 */
9997 if (mkjobtmp_rundir (shell , jobtmp , sizeof (jobtmp )) < 0
100- && mkjobtmp_tmpdir (shell , jobtmp , sizeof (jobtmp )) < 0 )
98+ && mkjobtmp_tmpdir (shell , tmpdir , jobtmp , sizeof (jobtmp )) < 0 )
10199 shell_die_errno (1 , "error creating FLUX_JOB_TMPDIR" );
102100 cleanup_push_string (cleanup_directory_recursive , jobtmp );
103101
104102 /* Set/change FLUX_JOB_TMPDIR to jobtmp.
105- * If TMPDIR is unset, set it to $FLUX_JOB_TMPDIR.
106103 */
107- if (flux_shell_setenvf (shell , 1 , "FLUX_JOB_TMPDIR" , "%s" , jobtmp ) < 0
108- || flux_shell_setenvf (shell , 0 , "TMPDIR" , "%s" , jobtmp ) < 0 )
104+ if (flux_shell_setenvf (shell , 1 , "FLUX_JOB_TMPDIR" , "%s" , jobtmp ) < 0 )
109105 shell_die_errno (1 , "error updating job environment" );
110106
111107 return 0 ;
0 commit comments