diff -r -u sysvinit-2.86.base/src/init.c sysvinit-2.86.initprog/src/init.c
--- sysvinit-2.86.base/src/init.c	2004-07-30 08:16:20.000000000 -0400
+++ sysvinit-2.86.initprog/src/init.c	2006-01-03 00:40:59.000000000 -0500
@@ -1825,6 +1825,25 @@
 }
 
 /*
+ *	Find var in env
+ */
+char *find_var(char **env, char *var, char *def)
+{
+	int n, s, i;
+	if ( !env ) return def;
+	s = strlen(var);
+	for ( n = 0; env[n]; ++n ) ;
+	for ( i = n; 0 <= --i; ) {
+	    if ( strncmp(env[i], var, s) )
+		continue;
+	    if ( env[i][s] != '=' )
+		continue;
+	    return &(env[i][++s]);
+	}
+	return def;
+}
+
+/*
  *	Attempt to re-exec.
  */
 void re_exec(void)
@@ -1832,10 +1851,11 @@
 	CHILD		*ch;
 	sigset_t	mask, oldset;
 	pid_t		pid;
+	char		*init_prog;
 	char		**env;
 	int		fd;
 
	if (strchr("S12345",runlevel) == NULL)
 		return;
 
 	/*
@@ -1884,7 +1904,8 @@
 	 *	The existing init process execs a new init binary.
 	 */
 	env = init_buildenv(0);
-	execl(myname, myname, "--init", NULL, env);
+	init_prog = find_var(env, "INIT_PROG", myname);
+	execle(init_prog, init_prog, "--init", NULL, env);
 
 	/*
 	 *	We shouldn't be here, something failed. 




