diff --git a/src/backend/postmaster/postmaster.c b/src/backend/postmaster/postmaster.c
index b657a2a64a6c05adde6567ffdc2518ea7845c5f8..c1757b10892e5ba003547055aedc116fe5534994 100644
--- a/src/backend/postmaster/postmaster.c
+++ b/src/backend/postmaster/postmaster.c
@@ -10,7 +10,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/postmaster/postmaster.c,v 1.85 1998/06/09 04:06:12 momjian Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/postmaster/postmaster.c,v 1.86 1998/06/09 17:13:03 momjian Exp $
  *
  * NOTES
  *
@@ -324,7 +324,7 @@ PostmasterMain(int argc, char *argv[])
 			new_argv[i] = "";
 		new_argv[4] = NULL;
 
-		if (!Execfile[0] && FindExec(Execfile, argv[0]) < 0)
+		if (!Execfile[0] && FindExec(Execfile, argv[0], "postmaster") < 0)
 		{
 			fprintf(stderr, "%s: could not find postmaster to execute...\n",
 					argv[0]);
@@ -385,7 +385,7 @@ PostmasterMain(int argc, char *argv[])
 				break;
 			case 'b':
 				/* Set the backend executable file to use. */
-				if (!ValidateBackend(optarg))
+				if (!ValidateBinary(optarg))
 					strcpy(Execfile, optarg);
 				else
 				{
@@ -479,7 +479,7 @@ PostmasterMain(int argc, char *argv[])
 		exit(2);
 	}
 
-	if (!Execfile[0] && FindExec(Execfile, argv[0]) < 0)
+	if (!Execfile[0] && FindExec(Execfile, argv[0], "postgres") < 0)
 	{
 		fprintf(stderr, "%s: could not find backend to execute...\n",
 				argv[0]);
diff --git a/src/backend/tcop/postgres.c b/src/backend/tcop/postgres.c
index e2a778b4916471160b8b48a28582ca5e04c7ee44..e0d8599465b7fb76d1eb6a6f0c23f99b98ee6e3e 100644
--- a/src/backend/tcop/postgres.c
+++ b/src/backend/tcop/postgres.c
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/tcop/postgres.c,v 1.74 1998/06/08 22:28:27 momjian Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/tcop/postgres.c,v 1.75 1998/06/09 17:13:04 momjian Exp $
  *
  * NOTES
  *	  this is the "main" module of the postgres backend and
@@ -1167,7 +1167,7 @@ PostgresMain(int argc, char *argv[], int real_argc, char *real_argv[])
 	SetCharSet();
 #endif
 
-	if (FindExec(pg_pathname, argv[0]) < 0)
+	if (FindExec(pg_pathname, argv[0], "postgres") < 0)
 		elog(FATAL, "%s: could not locate executable, bailing out...",
 			 argv[0]);
 
@@ -1314,7 +1314,7 @@ PostgresMain(int argc, char *argv[], int real_argc, char *real_argv[])
 	if (!IsUnderPostmaster)
 	{
 		puts("\nPOSTGRES backend interactive interface");
-		puts("$Revision: 1.74 $ $Date: 1998/06/08 22:28:27 $");
+		puts("$Revision: 1.75 $ $Date: 1998/06/09 17:13:04 $");
 	}
 
 	/* ----------------
diff --git a/src/backend/utils/init/findbe.c b/src/backend/utils/init/findbe.c
index 74571ebc4abe7c20bb0e0c7b4719a1fdb2c3433a..e84256d6de98021cdf31c36393e7833b309504a4 100644
--- a/src/backend/utils/init/findbe.c
+++ b/src/backend/utils/init/findbe.c
@@ -6,7 +6,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/utils/init/Attic/findbe.c,v 1.8 1998/06/08 22:28:28 momjian Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/utils/init/Attic/findbe.c,v 1.9 1998/06/09 17:13:05 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -34,14 +34,14 @@
 #endif
 
 /*
- * ValidateBackend -- validate "path" as a POSTGRES executable file
+ * ValidateBinary -- validate "path" as a POSTMASTER/POSTGRES executable file
  *
  * returns 0 if the file is found and no error is encountered.
  *		  -1 if the regular file "path" does not exist or cannot be executed.
  *		  -2 if the file is otherwise valid but cannot be read.
  */
 int
-ValidateBackend(char *path)
+ValidateBinary(char *path)
 {
 	struct stat buf;
 	uid_t		euid;
@@ -61,7 +61,7 @@ ValidateBackend(char *path)
 	if (strlen(path) >= MAXPGPATH)
 	{
 		if (DebugLvl > 1)
-			fprintf(stderr, "ValidateBackend: pathname \"%s\" is too long\n",
+			fprintf(stderr, "ValidateBinary: pathname \"%s\" is too long\n",
 					path);
 		return (-1);
 	}
@@ -69,14 +69,14 @@ ValidateBackend(char *path)
 	if (stat(path, &buf) < 0)
 	{
 		if (DebugLvl > 1)
-			fprintf(stderr, "ValidateBackend: can't stat \"%s\"\n",
+			fprintf(stderr, "ValidateBinary: can't stat \"%s\"\n",
 					path);
 		return (-1);
 	}
 	if (!(buf.st_mode & S_IFREG))
 	{
 		if (DebugLvl > 1)
-			fprintf(stderr, "ValidateBackend: \"%s\" is not a regular file\n",
+			fprintf(stderr, "ValidateBinary: \"%s\" is not a regular file\n",
 					path);
 		return (-1);
 	}
@@ -85,7 +85,7 @@ ValidateBackend(char *path)
 	 * Ensure that we are using an authorized backend.
 	 *
 	 * XXX I'm open to suggestions here.  I would like to enforce ownership
-	 * of backends by user "postgres" but people seem to like to run as
+	 * of binaries by user "postgres" but people seem to like to run as
 	 * users other than "postgres"...
 	 */
 
@@ -102,7 +102,7 @@ ValidateBackend(char *path)
 		is_r = buf.st_mode & S_IRUSR;
 		is_x = buf.st_mode & S_IXUSR;
 		if (DebugLvl > 1 && !(is_r && is_x))
-			fprintf(stderr, "ValidateBackend: \"%s\" is not user read/execute\n",
+			fprintf(stderr, "ValidateBinary: \"%s\" is not user read/execute\n",
 					path);
 		return (is_x ? (is_r ? 0 : -2) : -1);
 	}
@@ -130,7 +130,7 @@ ValidateBackend(char *path)
 			is_r = buf.st_mode & S_IRGRP;
 			is_x = buf.st_mode & S_IXGRP;
 			if (DebugLvl > 1 && !(is_r && is_x))
-				fprintf(stderr, "ValidateBackend: \"%s\" is not group read/execute\n",
+				fprintf(stderr, "ValidateBinary: \"%s\" is not group read/execute\n",
 						path);
 			return (is_x ? (is_r ? 0 : -2) : -1);
 		}
@@ -138,7 +138,7 @@ ValidateBackend(char *path)
 	is_r = buf.st_mode & S_IROTH;
 	is_x = buf.st_mode & S_IXOTH;
 	if (DebugLvl > 1 && !(is_r && is_x))
-		fprintf(stderr, "ValidateBackend: \"%s\" is not other read/execute\n",
+		fprintf(stderr, "ValidateBinary: \"%s\" is not other read/execute\n",
 				path);
 	return (is_x ? (is_r ? 0 : -2) : -1);
 }
@@ -147,11 +147,12 @@ ValidateBackend(char *path)
  * FindExec -- find an absolute path to a valid backend executable
  *
  * The reason we have to work so hard to find an absolute path is that
- * we need to feed the backend server the location of its actual
- * executable file -- otherwise, we can't do dynamic loading.
+ * we need to feed the binary the location of its actual executable file,
+ * otherwise, we can't do dynamic loading.  It needs a full pathname because
+ * we change directories to the /data directory.
  */
 int
-FindExec(char *backend, char *argv0)
+FindExec(char *full_path, char *argv0, char *binary_name)
 {
 	char		buf[MAXPGPATH + 2];
 	char	   *p;
@@ -161,7 +162,7 @@ FindExec(char *backend, char *argv0)
 	int			pathlen;
 
 	/*
-	 * for the postmaster: First try: use the backend that's located in
+	 * for the postmaster: First try: use the binary that's located in
 	 * the same directory as the postmaster, if it was invoked with an
 	 * explicit path. Presumably the user used an explicit path because it
 	 * wasn't in PATH, and we don't want to use incompatible executables.
@@ -171,7 +172,7 @@ FindExec(char *backend, char *argv0)
 	 * trees (obj/post{master,gres}) because they all put the two binaries
 	 * in the same place.
 	 *
-	 * for the backend server: First try: if we're given some kind of path,
+	 * for the binary: First try: if we're given some kind of path,
 	 * use it (making sure that a relative path is made absolute before
 	 * returning it).
 	 */
@@ -183,16 +184,16 @@ FindExec(char *backend, char *argv0)
 			strcat(buf, "/");
 		strcat(buf, argv0);
 		p = strrchr(buf, '/');
-		strcpy(++p, "postgres");
-		if (!ValidateBackend(buf))
+		strcpy(++p, binary_name);
+		if (!ValidateBinary(buf))
 		{
-			strncpy(backend, buf, MAXPGPATH);
+			strncpy(full_path, buf, MAXPGPATH);
 			if (DebugLvl)
 				fprintf(stderr, "FindExec: found \"%s\" using argv[0]\n",
-						backend);
+						full_path);
 			return (0);
 		}
-		fprintf(stderr, "FindExec: invalid backend \"%s\"\n",
+		fprintf(stderr, "FindExec: invalid binary \"%s\"\n",
 				buf);
 		return (-1);
 	}
@@ -219,20 +220,21 @@ FindExec(char *backend, char *argv0)
 			if (*startp == '/' || !getcwd(buf, MAXPGPATH))
 				buf[0] = '\0';
 			strcat(buf, startp);
-			strcat(buf, "/postgres");
-			switch (ValidateBackend(buf))
+			strcat(buf, "/");
+			strcat(buf, binary_name);
+			switch (ValidateBinary(buf))
 			{
 				case 0: /* found ok */
-					strncpy(backend, buf, MAXPGPATH);
+					strncpy(full_path, buf, MAXPGPATH);
 					if (DebugLvl)
 						fprintf(stderr, "FindExec: found \"%s\" using PATH\n",
-								backend);
+								full_path);
 					free(path);
 					return (0);
 				case -1:		/* wasn't even a candidate, keep looking */
 					break;
 				case -2:		/* found but disqualified */
-					fprintf(stderr, "FindExec: could not read backend \"%s\"\n",
+					fprintf(stderr, "FindExec: could not read binary \"%s\"\n",
 							buf);
 					free(path);
 					return (-1);
@@ -243,6 +245,6 @@ FindExec(char *backend, char *argv0)
 		free(path);
 	}
 
-	fprintf(stderr, "FindExec: could not find a backend to execute...\n");
+	fprintf(stderr, "FindExec: could not find a %s to execute...\n", binary_name);
 	return (-1);
 }
diff --git a/src/include/miscadmin.h b/src/include/miscadmin.h
index 0c6dcfaaf974b812906d6d88649e175d3f3a94a1..6f4d6f4028f410ee13193a583536327b057c0efb 100644
--- a/src/include/miscadmin.h
+++ b/src/include/miscadmin.h
@@ -11,7 +11,7 @@
  *
  * Copyright (c) 1994, Regents of the University of California
  *
- * $Id: miscadmin.h,v 1.25 1998/06/08 22:28:30 momjian Exp $
+ * $Id: miscadmin.h,v 1.26 1998/06/09 17:13:06 momjian Exp $
  *
  * NOTES
  *	  some of the information in this file will be moved to
@@ -125,8 +125,8 @@ extern char *getpgusername(void);
 extern void SetPgUserName(void);
 extern Oid	GetUserId(void);
 extern void SetUserId(void);
-extern int	ValidateBackend(char *path);
-extern int	FindExec(char *backend, char *argv0);
+extern int	ValidateBinary(char *path);
+extern int	FindExec(char *backend, char *argv0, char *binary_name);
 extern int	CheckPathAccess(char *path, char *name, int open_mode);
 
 /* lower case version for case-insensitive SQL referenced in pg_proc.h */