[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: annoucement: auto-login patch for xdm



> There is something that I always asked myself about the differnet display
> managers. Why do they not handle the login window as an external
> application ?
you can find something like that on freshmeat ("XDM-External Greet"), but
the url is dead ... -(
however, the external greeter concept of xdm would require the app to
always provide a password, which must be stored somewhere in clear text.
my modifications of xdm completely bypass password verification, so you
needn't to store it anywhere (except if you need nis or kerberos auth).

> Ideally the interface with this login app could even be a bit more extended,
> so that the login app could also return the name of a remote display to log
> on,
that is achived the other way round: the external display queries XDM via
XDMCP for a session. see attachement for a simple xdm-replacement which
would be run on a pc acting as a x terminal.

> and it could also return a set of environment variables to pass to
> the Xstartup script, so this interface would allow the login app to also
> work as a chooser for remote X11 sessions, or to choose between different
> window managers or sessions as wdm does, or whatever. basically this means
> all the functionality of wdm/gdm/whatever could be implemented in the login
> app and the startup scripts.
well ... this is already done ... kind of. you can specify a Xsession to
be executed by the display manager. additionally the greeter may pass an
arbitrary argument string to the session (this is, what kdm and wdm do).

> I'm sure there is a good reason why things were not implemented this way,
> but I just cant see it :)
because they are implemented another way. ;-)
xdm has even the possibility to make the greeter a shared library, which
is loaded at run time (on debian it is linked statically). the only thing
that i really missed was the possibility to say "auth the user without a
password" - so i added this feature: passing a null pointer will skip
passwd auth (in opposite to passing an empty string).

-- 
Hi! I'm a .signature virus! Copy me into your ~/.signature, please!
--
If Windows is the answer, I want the problems back!
#include <stdio.h>
#include <unistd.h>
#include <time.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <signal.h>

pid_t child=0;

void sighand(int sig)
{
  if(child)
    kill(child,SIGTERM);
  exit(0);
}

int main(int argc, char **argv)
{
  time_t thistest,lasttest;
  int retstat,retries=0;
  pid_t forkw;
  
  if(argc!=2) {
    printf("usage: %s <xdmcp-server>\n",argv[0]); return 2;
  }  
  switch(fork()) {
    case 0: break;
    case -1: printf("MiniXDM: cannot daemonize: fork failed\n"); exit(1);
    default: exit(0);
  }
  signal(SIGTERM,sighand);
  signal(SIGINT,sighand);
  for(;;) {
    time(&lasttest);
    forkw=fork();
    if(forkw<0) {
      printf("MiniXDM: cannot run X server: fork failed\n"); return 1;
    }
    if(forkw==0) {
      execl("/usr/X11R6/bin/X","X","-query",argv[1],NULL);
      printf("MiniXDM: cannot exec /usr/X11R6/bin/X\n"); return 1;
    }
    child=forkw;
    wait(&retstat);
    child=0;
    if(retstat!=0) {
      printf("X returned status != 0\n"); return 3;
    }
    time(&thistest);
    if(thistest-lasttest<10) {
      if(retries++>4) {
        printf("X exited five times in less than ten seconds\n"); return 4;
      }
    } else
      retries=0;
  }
}

Reply to: