diff --git a/src/signal_handler.c b/src/signal_handler.c
index a820340df0422ab0b00cada7d966dd3cf8698546..8ab1a2cc07d13af658f475a6ce6bcbae18f665e6 100644
--- a/src/signal_handler.c
+++ b/src/signal_handler.c
@@ -25,7 +25,7 @@
 #include "main.h"
 #include <signal.h>
 
-RCSID("$Id: signal_handler.c,v 1.162 2000/01/16 05:20:09 hubbe Exp $");
+RCSID("$Id: signal_handler.c,v 1.163 2000/01/27 15:58:19 grubba Exp $");
 
 #ifdef HAVE_PASSWD_H
 # include <passwd.h>
@@ -2525,6 +2525,9 @@ void f_create_process(INT32 args)
 		buf[1]);
 	  break;
 	case PROCE_DUP2:
+	  if (buf[1] == EINVAL) {
+	    error("Process.create_process(): dup2() failed with EINVAL.\n");
+	  }
 	  error("Process.create_process(): dup2() failed. errno:%d\n",
 		buf[1]);
 	  break;
@@ -2533,6 +2536,11 @@ void f_create_process(INT32 args)
 		buf[2], buf[1]);
 	  break;
 	case PROCE_SETGROUPS:
+	  if (buf[1] == EINVAL) {
+	    error("Process.create_process(): setgroups() failed with EINVAL.\n"
+		  "Too many supplementary groups (%d)?\n",
+		  storage.num_wanted_gids);
+	  }
 	  error("Process.create_process(): setgroups() failed. errno:%d\n",
 		buf[1]);
 	  break;
@@ -2545,10 +2553,20 @@ void f_create_process(INT32 args)
 		buf[1]);
 	  break;
 	case PROCE_SETUID:
+	  if (buf[1] == EINVAL) {
+	    error("Process.create_process(): Invalid uid: %d.\n",
+		  wanted_uid);
+	  }
 	  error("Process.create_process(): setuid(%d) failed. errno:%d\n",
 		buf[2], buf[1]);
 	  break;
 	case PROCE_EXEC:
+	  if (buf[1] == ENOENT) {
+	    error("Process.create_process(): Executable file not found.\n");
+	  }
+	  if (buf[1] == EACCESS) {
+	    error("Process.create_process(): Access denied.\n");
+	  }
 	  error("Process.create_process(): exec() failed. errno:%d\n"
 		"File not found?\n", buf[1]);
 	  break;