home *** CD-ROM | disk | FTP | other *** search
/ InfoMagic Source Code 1993 July / THE_SOURCE_CODE_CD_ROM.iso / X / mit / clients / xdm / dm.h < prev    next >
Encoding:
C/C++ Source or Header  |  1993-07-21  |  9.2 KB  |  334 lines

  1. /*
  2.  * xdm - display manager daemon
  3.  *
  4.  * $XConsortium: dm.h,v 1.51 91/09/19 16:28:35 keith Exp $
  5.  *
  6.  * Copyright 1988 Massachusetts Institute of Technology
  7.  *
  8.  * Permission to use, copy, modify, and distribute this software and its
  9.  * documentation for any purpose and without fee is hereby granted, provided
  10.  * that the above copyright notice appear in all copies and that both that
  11.  * copyright notice and this permission notice appear in supporting
  12.  * documentation, and that the name of M.I.T. not be used in advertising or
  13.  * publicity pertaining to distribution of the software without specific,
  14.  * written prior permission.  M.I.T. makes no representations about the
  15.  * suitability of this software for any purpose.  It is provided "as is"
  16.  * without express or implied warranty.
  17.  *
  18.  * Author:  Keith Packard, MIT X Consortium
  19.  */
  20.  
  21. /*
  22.  * dm.h
  23.  *
  24.  * public interfaces for greet/verify functionality
  25.  */
  26.  
  27. # include    <X11/Xos.h>
  28. # include    <X11/Xfuncs.h>
  29. # include    <X11/Xmd.h>
  30. # include    <X11/Xauth.h>
  31.  
  32. #if !defined(X_NOT_POSIX) && !defined(_POSIX_SOURCE)
  33. #define _POSIX_SOURCE
  34. # include    <setjmp.h>
  35. #undef _POSIX_SOURCE
  36. #else
  37. # include    <setjmp.h>
  38. #endif
  39.  
  40. /* If XDMCP symbol defined, compile to run XDMCP protocol */
  41.  
  42. #define XDMCP
  43.  
  44. #ifdef XDMCP
  45. # include    <X11/Xdmcp.h>
  46. #endif
  47.  
  48. #ifndef X_NOT_POSIX
  49. #ifdef _POSIX_SOURCE
  50. # include    <limits.h>
  51. #else
  52. #define _POSIX_SOURCE
  53. # include    <limits.h>
  54. #undef _POSIX_SOURCE
  55. #endif
  56. #endif
  57. #ifndef NGROUPS_MAX
  58. # include    <sys/param.h>
  59. #ifdef NGROUPS
  60. #define NGROUPS_MAX NGROUPS
  61. #endif
  62. #endif
  63.  
  64. #ifdef pegasus
  65. #undef dirty        /* Some bozo put a macro called dirty in sys/param.h */
  66. #endif /* pegasus */
  67.  
  68. #ifndef X_NOT_POSIX
  69. #ifdef _POSIX_SOURCE
  70. #include <sys/wait.h>
  71. #else
  72. #define _POSIX_SOURCE
  73. #include <sys/wait.h>
  74. #undef _POSIX_SOURCE
  75. #endif
  76. # define waitCode(w)    (WIFEXITED(w) ? WEXITSTATUS(w) : 0)
  77. # define waitSig(w)    (WIFSIGNALED(w) ? WTERMSIG(w) : 0)
  78. # define waitCore(w)    0    /* not in POSIX.  so what? */
  79. typedef int        waitType;
  80. #else /* X_NOT_POSIX */
  81. #ifdef SYSV
  82. # define waitCode(w)    (((w) >> 8) & 0x7f)
  83. # define waitSig(w)    ((w) & 0xff)
  84. # define waitCore(w)    (((w) >> 15) & 0x01)
  85. typedef int        waitType;
  86. #else /* SYSV */
  87. # include    <sys/wait.h>
  88. # define waitCode(w)    ((w).w_T.w_Retcode)
  89. # define waitSig(w)    ((w).w_T.w_Termsig)
  90. # define waitCore(w)    ((w).w_T.w_Coredump)
  91. typedef union wait    waitType;
  92. #endif
  93. #endif /* X_NOT_POSIX */
  94.  
  95. # define waitCompose(sig,core,code) ((sig) * 256 + (core) * 128 + (code))
  96. # define waitVal(w)    waitCompose(waitSig(w), waitCore(w), waitCode(w))
  97.  
  98. typedef enum displayStatus { running, notRunning, zombie, phoenix } DisplayStatus;
  99.  
  100. #ifndef FD_ZERO
  101. typedef    struct    my_fd_set { int fds_bits[1]; } my_fd_set;
  102. # define FD_ZERO(fdp)    bzero ((fdp), sizeof (*(fdp)))
  103. # define FD_SET(f,fdp)    ((fdp)->fds_bits[(f) / (sizeof (int) * 8)] |=  (1 << ((f) % (sizeof (int) * 8))))
  104. # define FD_CLR(f,fdp)    ((fdp)->fds_bits[(f) / (sizeof (int) * 8)] &= ~(1 << ((f) % (sizeof (int) * 8))))
  105. # define FD_ISSET(f,fdp)    ((fdp)->fds_bits[(f) / (sizeof (int) * 8)] & (1 << ((f) % (sizeof (int) * 8))))
  106. # define FD_TYPE    my_fd_set
  107. #else
  108. # define FD_TYPE    fd_set
  109. #endif
  110.  
  111. /*
  112.  * local     - server runs on local host
  113.  * foreign   - server runs on remote host
  114.  * permanent - session restarted when it exits
  115.  * transient - session not restarted when it exits
  116.  * fromFile  - started via entry in servers file
  117.  * fromXDMCP - started with XDMCP
  118.  */
  119.  
  120. typedef struct displayType {
  121.     unsigned int    location:1;
  122.     unsigned int    lifetime:1;
  123.     unsigned int    origin:1;
  124. } DisplayType;
  125.  
  126. # define Local        1
  127. # define Foreign    0
  128.  
  129. # define Permanent    1
  130. # define Transient    0
  131.  
  132. # define FromFile    1
  133. # define FromXDMCP    0
  134.  
  135. extern DisplayType parseDisplayType ();
  136.  
  137. typedef enum fileState { NewEntry, OldEntry, MissingEntry } FileState;
  138.  
  139. struct display {
  140.     struct display    *next;
  141.     /* Xservers file / XDMCP information */
  142.     char        *name;        /* DISPLAY name */
  143.     char        *class;        /* display class (may be NULL) */
  144.     DisplayType    displayType;    /* method to handle with */
  145.     char        **argv;        /* program name and arguments */
  146.  
  147.     /* display state */
  148.     DisplayStatus    status;        /* current status */
  149.     int        pid;        /* process id of child */
  150.     int        serverPid;    /* process id of server (-1 if none) */
  151.     FileState    state;        /* state during HUP processing */
  152.     int        startTries;    /* current start try */
  153.  
  154. #ifdef XDMCP
  155.     /* XDMCP state */
  156.     CARD32        sessionID;    /* ID of active session */
  157.     XdmcpNetaddr    peer;        /* display peer address */
  158.     int        peerlen;    /* length of peer address */
  159.     XdmcpNetaddr    from;        /* XDMCP port of display */
  160.     int        fromlen;
  161.     CARD16        displayNumber;
  162.     int        useChooser;    /* Run the chooser for this display */
  163.     ARRAY8        clientAddr;    /* for chooser picking */
  164.     CARD16        connectionType;    /* ... */
  165. #endif
  166.     /* server management resources */
  167.     int        serverAttempts;    /* number of attempts at running X */
  168.     int        openDelay;    /* open delay time */
  169.     int        openRepeat;    /* open attempts to make */
  170.     int        openTimeout;    /* abort open attempt timeout */
  171.     int        startAttempts;    /* number of attempts at starting */
  172.     int        pingInterval;    /* interval between XSync */
  173.     int        pingTimeout;    /* timeout for XSync */
  174.     int        terminateServer;/* restart for each session */
  175.     int        grabServer;    /* keep server grabbed for Login */
  176.     int        grabTimeout;    /* time to wait for grab */
  177.     int        resetSignal;    /* signal to reset server */
  178.     int        termSignal;    /* signal to terminate server */
  179.     int        resetForAuth;    /* server reads auth file at reset */
  180.  
  181.     /* session resources */
  182.     char        *resources;    /* resource file */
  183.     char        *xrdb;        /* xrdb program */
  184.     char        *setup;        /* Xsetup program */
  185.     char        *startup;    /* Xstartup program */
  186.     char        *reset;        /* Xreset program */
  187.     char        *session;    /* Xsession program */
  188.     char        *userPath;    /* path set for session */
  189.     char        *systemPath;    /* path set for startup/reset */
  190.     char        *systemShell;    /* interpreter for startup/reset */
  191.     char        *failsafeClient;/* a client to start when the session fails */
  192.     char        *chooser;    /* chooser program */
  193.  
  194.     /* authorization resources */
  195.     int        authorize;    /* enable authorization */
  196.     char        **authNames;    /* authorization protocol names */
  197.     unsigned short    *authNameLens;    /* authorization protocol name lens */
  198.     char        *clientAuthFile;/* client specified auth file */
  199.     char        *userAuthDir;    /* backup directory for tickets */
  200.     int        authComplain;    /* complain when no auth for XDMCP */
  201.  
  202.     /* information potentially derived from resources */
  203.     int        authNameNum;    /* number of protocol names */
  204.     Xauth        **authorizations;/* authorization data */
  205.     int        authNum;    /* number of authorizations */
  206.     char        *authFile;    /* file to store authorization in */
  207. };
  208.  
  209. #ifdef XDMCP
  210.  
  211. #define PROTO_TIMEOUT    (30 * 60)   /* 30 minutes should be long enough */
  212.  
  213. struct protoDisplay {
  214.     struct protoDisplay    *next;
  215.     XdmcpNetaddr        address;   /* UDP address */
  216.     int            addrlen;    /* UDP address length */
  217.     unsigned long        date;        /* creation date */
  218.     CARD16            displayNumber;
  219.     CARD16            connectionType;
  220.     ARRAY8            connectionAddress;
  221.     CARD32            sessionID;
  222.     Xauth            *fileAuthorization;
  223.     Xauth            *xdmcpAuthorization;
  224.     ARRAY8            authenticationName;
  225.     ARRAY8            authenticationData;
  226.     XdmAuthKeyRec        key;
  227. };
  228. #endif /* XDMCP */
  229.  
  230. struct greet_info {
  231.     char        *name;        /* user name */
  232.     char        *password;    /* user password */
  233.     char        *string;    /* random string */
  234. };
  235.  
  236. /* setgroups is not covered by POSIX, arg type varies */
  237. #if defined(SYSV) || defined(SVR4)
  238. #define GID_T gid_t
  239. #else
  240. #define GID_T int
  241. #endif
  242.  
  243. struct verify_info {
  244.     int        uid;        /* user id */
  245. #ifdef NGROUPS_MAX
  246.     GID_T        groups[NGROUPS_MAX];/* group list */
  247.     int        ngroups;    /* number of elements in groups */
  248. #else
  249.     int        gid;        /* group id */
  250. #endif
  251.     char        **argv;        /* arguments to session */
  252.     char        **userEnviron;    /* environment for session */
  253.     char        **systemEnviron;/* environment for startup/reset */
  254. };
  255.  
  256. /* display manager exit status definitions */
  257.  
  258. # define OBEYSESS_DISPLAY    0    /* obey multipleSessions resource */
  259. # define REMANAGE_DISPLAY    1    /* force remanage */
  260. # define UNMANAGE_DISPLAY    2    /* force deletion */
  261. # define RESERVER_DISPLAY    3    /* force server termination */
  262. # define OPENFAILED_DISPLAY    4    /* XOpenDisplay failed, retry */
  263.  
  264. #ifndef TRUE
  265. #define TRUE    1
  266. #define FALSE    0
  267. #endif
  268.  
  269. extern char    *config;
  270.  
  271. extern char    *servers;
  272. extern int    request_port;
  273. extern int    debugLevel;
  274. extern char    *errorLogFile;
  275. extern int    daemonMode;
  276. extern char    *pidFile;
  277. extern int    lockPidFile;
  278. extern char    *authDir;
  279. extern int    autoRescan;
  280. extern int    removeDomainname;
  281. extern char    *keyFile;
  282. extern char    *accessFile;
  283. extern char    **exportList;
  284. extern char    *randomFile;
  285.  
  286. extern struct display    *FindDisplayByName (),
  287.             *FindDisplayBySessionID (),
  288.             *FindDisplayByAddress (),
  289.             *FindDisplayByPid (),
  290.             *FindDisplayByServerPid (),
  291.             *NewDisplay ();
  292.  
  293. extern struct protoDisplay    *FindProtoDisplay (),
  294.                 *NewProtoDisplay ();
  295.  
  296. extern char        *localHostname ();
  297. /*
  298.  * CloseOnFork flags
  299.  */
  300.  
  301. # define CLOSE_ALWAYS        0
  302. # define LEAVE_FOR_DISPLAY  1
  303.  
  304. #ifndef X_NOT_STDC_ENV
  305. #include <stdlib.h>
  306. #else
  307. char *malloc(), *realloc();
  308. #endif
  309. #if defined(macII) && !defined(__STDC__)  /* stdlib.h fails to define these */
  310. char *malloc(), *realloc();
  311. #endif /* macII */
  312.  
  313. #if defined(X_NOT_POSIX) && defined(SIGNALRETURNSINT)
  314. #define SIGVAL int
  315. #else
  316. #define SIGVAL void
  317. #endif
  318.  
  319. #ifdef X_NOT_POSIX
  320. #ifdef SYSV
  321. #define SIGNALS_RESET_WHEN_CAUGHT
  322. #define UNRELIABLE_SIGNALS
  323. #endif
  324. #define Setjmp(e)    setjmp(e)
  325. #define Longjmp(e,v)    longjmp(e,v)
  326. #define Jmp_buf        jmp_buf
  327. #else
  328. #define Setjmp(e)   sigsetjmp(e,1)
  329. #define Longjmp(e,v)    siglongjmp(e,v)
  330. #define Jmp_buf        sigjmp_buf
  331. #endif
  332.  
  333. SIGVAL (*Signal())();
  334.