summaryrefslogtreecommitdiffstats
path: root/kdm/backend/dm.c
diff options
context:
space:
mode:
Diffstat (limited to 'kdm/backend/dm.c')
-rw-r--r--kdm/backend/dm.c21
1 files changed, 19 insertions, 2 deletions
diff --git a/kdm/backend/dm.c b/kdm/backend/dm.c
index e696a1a5e..a372686df 100644
--- a/kdm/backend/dm.c
+++ b/kdm/backend/dm.c
@@ -39,6 +39,7 @@ from the copyright holder.
#include "dm_error.h"
#include <stdio.h>
+#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <stdarg.h>
@@ -122,7 +123,8 @@ main( int argc, char **argv )
StrApp( &progpath, directory, "/", argv[0], (char *)0 );
else {
int len;
- char *path, *pathe, *name, *thenam, nambuf[PATH_MAX+1];
+ char *path, *name, *thenam, nambuf[PATH_MAX+1];
+ char *pathe;
if (!(path = getenv( "PATH" )))
Panic( "Can't find myself (no PATH)" );
@@ -131,7 +133,7 @@ main( int argc, char **argv )
memcpy( name, argv[0], len + 1 );
*--name = '/';
do {
- if (!(pathe = strchr( path, ':' )))
+ if (!(pathe = (char*)strchr( path, ':' )))
pathe = path + strlen( path );
len = pathe - path;
if (!len || (len == 1 && *path == '.')) {
@@ -564,6 +566,21 @@ StartRemoteLogin( struct display *d )
Debug( "exec %\"[s\n", argv );
(void)execv( argv[0], argv );
LogError( "X server %\"s cannot be executed\n", argv[0] );
+
+ /* Let's try again with some standard paths */
+ argv[0] = (char *)realloc(argv[0], strlen("/usr/X11R6/bin/X") + 1);
+ if (argv[0] != NULL) {
+ argv[0] = "/usr/X11R6/bin/X";
+ Debug( "exec %\"[s\n", argv );
+ (void)execv( argv[0], argv );
+ LogError( "X server %\"s cannot be executed\n", argv[0] );
+
+ argv[0] = "/usr/bin/X"; /* Shorter than the previous file name */
+ Debug( "exec %\"[s\n", argv );
+ (void)execv( argv[0], argv );
+ LogError( "X server %\"s cannot be executed\n", argv[0] );
+ }
+
exit( 1 );
case -1:
LogError( "Forking X server for remote login failed: %m" );