diff --git a/src/slurmd/req.c b/src/slurmd/req.c
index a1cfe57f9505895a45cf02b286fc81e2bcd7ecdd..e18b668d95f85bd90694a2b2be7d64de988e4d8e 100644
--- a/src/slurmd/req.c
+++ b/src/slurmd/req.c
@@ -176,24 +176,34 @@ _rpc_launch_tasks(slurm_msg_t *msg, slurm_addr *cli)
 	slurm_msg_t resp_msg;
 	launch_tasks_response_msg_t resp;
 	launch_tasks_request_msg_t *req = msg->data;
+	bool super_user = false;
 
-	slurm_get_addr(cli, &port, host, sizeof(host));
 	req_uid = slurm_auth_uid(msg->cred);
+	if ((req_uid == conf->slurm_user_id) || (req_uid == 0))
+		super_user = true;
+	if ((super_user == false) && (req_uid != req->uid)) {
+		error("Security violation, launch task RCP from uid %u",
+		      (unsigned int) req_uid);
+		rc = ESLURM_USER_ID_MISSING;	/* or invalid user */
+		slurm_send_rc_msg(msg, rc);
+		return;
+	}
 
-	info("launch tasks request from %ld@%s", req_uid, host);
+	slurm_get_addr(cli, &port, host, sizeof(host));
+	info("launch task %u.%u request from %ld@%s", req->job_id, 
+	     req->job_step_id, req_uid, host);
 
 	rc = verify_credential(&conf->vctx, 
 			       req->credential, 
 			       conf->cred_state_list);
 
-	if ((rc == SLURM_SUCCESS) && (req_uid == req->uid))
-		rc = _launch_tasks(req, cli);
-	else {
-		info("XXX: Invalid credential from %ld@%s, launching job anyway", 
-		        req_uid, host);
-		rc = _launch_tasks(req, cli);
+	if ((rc != SLURM_SUCCESS) && (super_user == false)) {
+		error("Invalid credential from %ld@%s", req_uid, host);
+		slurm_send_rc_msg(msg, rc);
+		return;
 	}
 
+	rc = _launch_tasks(req, cli);
 	memcpy(&resp_msg.address, cli, sizeof(slurm_addr));
 	slurm_set_addr(&resp_msg.address, req->resp_port, NULL);