diff --git a/src/srun/srun.c b/src/srun/srun.c
index 96f9d9686f75f52736bb369f9f6843192da37b68..eeaba690e43270facb1156770194ad445a25d6ac 100644
--- a/src/srun/srun.c
+++ b/src/srun/srun.c
@@ -91,6 +91,7 @@ static int   _is_file_text (char *, char**);
 static int   _run_batch_job (void);
 static void  _run_job_script(uint32_t jobid, uint32_t node_cnt);
 static int   _set_batch_script_env(uint32_t jobid, uint32_t node_cnt);
+static int   _set_rlimit_env(void);
 
 
 #ifdef HAVE_LIBELAN3
@@ -103,22 +104,16 @@ srun(int ac, char **av)
 {
 	allocation_resp *resp;
 	job_t *job;
-	struct rlimit rlim;
 
 	log_options_t logopt = LOG_OPTS_STDERR_ONLY;
 
-
 	log_init(xbasename(av[0]), logopt, 0, NULL);
 
 	/* set default options, process commandline arguments, and
 	 * verify some basic values
 	 */
 	initialize_and_process_args(ac, av);
-
-	if (getrlimit(RLIMIT_NOFILE, &rlim) == 0) {
-		rlim.rlim_cur = rlim.rlim_max;
-		setrlimit(RLIMIT_NOFILE, &rlim);
-	}
+	(void) _set_rlimit_env();
 
 	/* reinit log with new verbosity (if changed by command line)
 	 */
@@ -545,19 +540,20 @@ _build_script (char *fname, int file_type)
 static int
 _set_batch_script_env(uint32_t jobid, uint32_t node_cnt)
 {
+	int rc = SLURM_SUCCESS;
 	char *dist = NULL;
 
 	if (jobid > 0) {
 		if (setenvf("SLURM_JOBID=%u", jobid)) {
 			error("Unable to set SLURM_JOBID environment");
-			return -1;
+			rc = SLURM_FAILURE;
 		}
 	}
 
 	if (node_cnt > 0) {
 		if (setenvf("SLURM_NNODES=%u", node_cnt)) {
 			error("Unable to set SLURM_NNODES environment");
-			return -1;
+			rc = SLURM_FAILURE;
 		}
 		if (!opt.nprocs_set)
 			opt.nprocs = node_cnt;
@@ -565,13 +561,13 @@ _set_batch_script_env(uint32_t jobid, uint32_t node_cnt)
 
 	if (opt.nprocs_set && setenvf("SLURM_NPROCS=%u", opt.nprocs)) {
 		error("Unable to set SLURM_NPROCS environment variable");
-		return -1;
+		rc = SLURM_FAILURE;
 	}
 
 	if ( (opt.cpus_per_task > 0) &&
 	     setenvf("SLURM_CPUS_PER_TASK=%u", opt.cpus_per_task)) {
 		error("Unable to set SLURM_CPUS_PER_TASK");
-		return -1;
+		rc = SLURM_FAILURE;
 	}
 
 	if (opt.distribution != SRUN_DIST_UNKNOWN) {
@@ -580,23 +576,68 @@ _set_batch_script_env(uint32_t jobid, uint32_t node_cnt)
 
 		if (setenvf("SLURM_DISTRIBUTION=%s", dist)) {
 			error("Can't set SLURM_DISTRIBUTION env variable");
-			return -1;
+			rc = SLURM_FAILURE;
 		}
 	}
 
 	if ((opt.overcommit) &&
 	    (setenvf("SLURM_OVERCOMMIT=1"))) {
 		error("Unable to set SLURM_OVERCOMMIT environment variable");
-		return -1;
+		rc = SLURM_FAILURE;
 	}
 
 	if ((opt.slurmd_debug) 
 	    && setenvf("SLURMD_DEBUG=%d", opt.slurmd_debug)) {
 		error("Can't set SLURMD_DEBUG environment variable");
-		return -1;
+		rc = SLURM_FAILURE;
 	}
 
-	return 0;
+	return rc;
+}
+
+/* Set SLURM_RLIMIT_* environment variables with current resource 
+ * limit values, reset RLIMIT_NOFILE to maximum possible value */
+static int _set_rlimit_env(void)
+{
+	int rc = SLURM_SUCCESS;
+	struct rlimit my_rlimit;
+
+	if (getrlimit(RLIMIT_FSIZE, &my_rlimit) ||
+	    setenvf("SLURM_RLIMIT_FSIZE=%ld", (long)my_rlimit.rlim_cur)) {
+		error("Can't set SLURM_RLIMIT_FSIZE environment variable");
+		rc = SLURM_FAILURE;
+	}
+
+	if (getrlimit(RLIMIT_CORE, &my_rlimit) ||
+	    setenvf("SLURM_RLIMIT_CORE=%ld", (long)my_rlimit.rlim_cur)) {
+		error("Can't set SLURM_RLIMIT_CORE environment variable");
+		rc = SLURM_FAILURE;
+	}
+
+	if (getrlimit(RLIMIT_NPROC, &my_rlimit) ||
+	    setenvf("SLURM_RLIMIT_NPROC=%ld", (long)my_rlimit.rlim_cur)) {
+		error("Can't set SLURM_RLIMIT_NPROC environment variable");
+		rc = SLURM_FAILURE;
+	}
+
+	if (getrlimit(RLIMIT_NOFILE, &my_rlimit) == 0) {
+		if (setenvf("SLURM_RLIMIT_NOFILE=%ld", 
+			    (long)my_rlimit.rlim_cur)) {
+			error("Can't set SLURM_RLIMIT_NOFILE environment variable");
+			rc = SLURM_FAILURE;
+		}
+		my_rlimit.rlim_cur = my_rlimit.rlim_max;
+		if (setrlimit(RLIMIT_NOFILE, &my_rlimit)) {
+			error("Can't set SLURM_RLIMIT_NOFILE value");
+			rc = SLURM_FAILURE;
+		}
+	} else {
+		error("Can't get RLIMIT_NOFILE value");
+		rc = SLURM_FAILURE;
+	}
+
+
+	return rc;
 }
 
 /* allocation option specified, spawn a script and wait for it to exit */