dm.h revision b7d26471
1629baa8cSmrg/* 2629baa8cSmrg 3629baa8cSmrgCopyright 1988, 1998 The Open Group 4629baa8cSmrg 5629baa8cSmrgPermission to use, copy, modify, distribute, and sell this software and its 6629baa8cSmrgdocumentation for any purpose is hereby granted without fee, provided that 7629baa8cSmrgthe above copyright notice appear in all copies and that both that 8629baa8cSmrgcopyright notice and this permission notice appear in supporting 9629baa8cSmrgdocumentation. 10629baa8cSmrg 11629baa8cSmrgThe above copyright notice and this permission notice shall be included 12629baa8cSmrgin all copies or substantial portions of the Software. 13629baa8cSmrg 14629baa8cSmrgTHE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 15629baa8cSmrgOR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 16629baa8cSmrgMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 17629baa8cSmrgIN NO EVENT SHALL THE OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR 18629baa8cSmrgOTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, 19629baa8cSmrgARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 20629baa8cSmrgOTHER DEALINGS IN THE SOFTWARE. 21629baa8cSmrg 22629baa8cSmrgExcept as contained in this notice, the name of The Open Group shall 23629baa8cSmrgnot be used in advertising or otherwise to promote the sale, use or 24629baa8cSmrgother dealings in this Software without prior written authorization 25629baa8cSmrgfrom The Open Group. 26629baa8cSmrg 27629baa8cSmrg*/ 28629baa8cSmrg 29629baa8cSmrg/* 30629baa8cSmrg * xdm - display manager daemon 31629baa8cSmrg * Author: Keith Packard, MIT X Consortium 32629baa8cSmrg * 33629baa8cSmrg * dm.h 34629baa8cSmrg * 35629baa8cSmrg * public interfaces for greet/verify functionality 36629baa8cSmrg */ 37629baa8cSmrg 38629baa8cSmrg#ifndef _DM_H_ 39629baa8cSmrg# define _DM_H_ 1 40629baa8cSmrg 41629baa8cSmrg# ifdef HAVE_CONFIG_H 42629baa8cSmrg# include "config.h" 43629baa8cSmrg# endif 44629baa8cSmrg 45629baa8cSmrg# include <X11/Xos.h> 46629baa8cSmrg# include <X11/Xfuncs.h> 47629baa8cSmrg# include <X11/Xfuncproto.h> 48629baa8cSmrg# include <X11/Xmd.h> 49629baa8cSmrg# include <X11/Xauth.h> 50629baa8cSmrg# include <X11/Intrinsic.h> 51629baa8cSmrg 52629baa8cSmrg# if defined(X_POSIX_C_SOURCE) 53629baa8cSmrg# define _POSIX_C_SOURCE X_POSIX_C_SOURCE 54629baa8cSmrg# include <setjmp.h> 55629baa8cSmrg# include <limits.h> 56629baa8cSmrg# undef _POSIX_C_SOURCE 57629baa8cSmrg# else 58629baa8cSmrg# include <setjmp.h> 59629baa8cSmrg# include <limits.h> 60629baa8cSmrg# endif 61629baa8cSmrg# include <time.h> 62629baa8cSmrg# define Time_t time_t 63629baa8cSmrg 64629baa8cSmrg/* If XDMCP symbol defined, compile to run XDMCP protocol */ 65629baa8cSmrg 66629baa8cSmrg# define XDMCP 67629baa8cSmrg 68629baa8cSmrg# ifdef XDMCP 69629baa8cSmrg# include <X11/Xdmcp.h> 70629baa8cSmrg# endif 71629baa8cSmrg 72629baa8cSmrg# ifdef pegasus 73629baa8cSmrg# undef dirty /* Some bozo put a macro called dirty in sys/param.h */ 74629baa8cSmrg# endif /* pegasus */ 75629baa8cSmrg 76629baa8cSmrg# ifndef X_NOT_POSIX 77629baa8cSmrg# ifdef _POSIX_SOURCE 78629baa8cSmrg# include <sys/wait.h> 79629baa8cSmrg# else 80629baa8cSmrg# define _POSIX_SOURCE 81629baa8cSmrg# include <sys/wait.h> 82629baa8cSmrg# undef _POSIX_SOURCE 83629baa8cSmrg# endif 84629baa8cSmrg# define waitCode(w) (WIFEXITED(w) ? WEXITSTATUS(w) : 0) 85629baa8cSmrg# define waitSig(w) (WIFSIGNALED(w) ? WTERMSIG(w) : 0) 86629baa8cSmrg# define waitCore(w) 0 /* not in POSIX. so what? */ 87629baa8cSmrgtypedef int waitType; 88629baa8cSmrg# else /* X_NOT_POSIX */ 89629baa8cSmrg# ifdef SYSV 90629baa8cSmrg# define waitCode(w) (((w) >> 8) & 0x7f) 91629baa8cSmrg# define waitSig(w) ((w) & 0xff) 92629baa8cSmrg# define waitCore(w) (((w) >> 15) & 0x01) 93629baa8cSmrgtypedef int waitType; 94629baa8cSmrg# else /* SYSV */ 95629baa8cSmrg# include <sys/wait.h> 96629baa8cSmrg# define waitCode(w) ((w).w_T.w_Retcode) 97629baa8cSmrg# define waitSig(w) ((w).w_T.w_Termsig) 98629baa8cSmrg# define waitCore(w) ((w).w_T.w_Coredump) 99629baa8cSmrgtypedef union wait waitType; 100629baa8cSmrg# endif 101629baa8cSmrg# endif /* X_NOT_POSIX */ 102629baa8cSmrg 103629baa8cSmrg# ifdef USE_PAM 104b7d26471Smrg# ifdef HAVE_SECURITY_PAM_APPL_H 105b7d26471Smrg# include <security/pam_appl.h> 106b7d26471Smrg# elif defined(HAVE_PAM_PAM_APPL_H) 107b7d26471Smrg# include <pam/pam_appl.h> 108b7d26471Smrg# else 109b7d26471Smrg# error "Unable to determine pam headers" 110b7d26471Smrg# endif 111629baa8cSmrg# endif 112629baa8cSmrg 113629baa8cSmrg# ifdef CSRG_BASED 114629baa8cSmrg# include <sys/param.h> 115629baa8cSmrg# ifdef HAVE_SETUSERCONTEXT 116629baa8cSmrg# include <login_cap.h> 117629baa8cSmrg# include <pwd.h> 118629baa8cSmrg# ifdef USE_BSDAUTH 119629baa8cSmrg# include <bsd_auth.h> 120629baa8cSmrg# endif 121629baa8cSmrg# endif 122629baa8cSmrg# endif 123629baa8cSmrg 124629baa8cSmrg# define waitCompose(sig,core,code) ((sig) * 256 + (core) * 128 + (code)) 125629baa8cSmrg# define waitVal(w) waitCompose(waitSig(w), waitCore(w), waitCode(w)) 126629baa8cSmrg 127629baa8cSmrgtypedef enum displayStatus { running, notRunning, zombie, phoenix } DisplayStatus; 128629baa8cSmrg 129629baa8cSmrg# ifndef FD_ZERO 130629baa8cSmrgtypedef struct my_fd_set { int fds_bits[1]; } my_fd_set; 131629baa8cSmrg# define FD_ZERO(fdp) bzero ((fdp), sizeof (*(fdp))) 132629baa8cSmrg# define FD_SET(f,fdp) ((fdp)->fds_bits[(f) / (sizeof (int) * 8)] |= (1 << ((f) % (sizeof (int) * 8)))) 133629baa8cSmrg# define FD_CLR(f,fdp) ((fdp)->fds_bits[(f) / (sizeof (int) * 8)] &= ~(1 << ((f) % (sizeof (int) * 8)))) 134629baa8cSmrg# define FD_ISSET(f,fdp) ((fdp)->fds_bits[(f) / (sizeof (int) * 8)] & (1 << ((f) % (sizeof (int) * 8)))) 135629baa8cSmrg# define FD_TYPE my_fd_set 136629baa8cSmrg# else 137629baa8cSmrg# define FD_TYPE fd_set 138629baa8cSmrg# endif 139629baa8cSmrg 140629baa8cSmrg/* 141629baa8cSmrg * local - server runs on local host 142629baa8cSmrg * foreign - server runs on remote host 143629baa8cSmrg * permanent - session restarted when it exits 144629baa8cSmrg * transient - session not restarted when it exits 145629baa8cSmrg * fromFile - started via entry in servers file 146629baa8cSmrg * fromXDMCP - started with XDMCP 147629baa8cSmrg */ 148629baa8cSmrg 149629baa8cSmrgtypedef struct displayType { 150629baa8cSmrg unsigned int location:1; 151629baa8cSmrg unsigned int lifetime:1; 152629baa8cSmrg unsigned int origin:1; 153629baa8cSmrg} DisplayType; 154629baa8cSmrg 155629baa8cSmrg# define Local 1 156629baa8cSmrg# define Foreign 0 157629baa8cSmrg 158629baa8cSmrg# define Permanent 1 159629baa8cSmrg# define Transient 0 160629baa8cSmrg 161629baa8cSmrg# define FromFile 1 162629baa8cSmrg# define FromXDMCP 0 163629baa8cSmrg 164629baa8cSmrgextern DisplayType parseDisplayType (char *string, int *usedDefault); 165629baa8cSmrg 166629baa8cSmrgtypedef enum fileState { NewEntry, OldEntry, MissingEntry } FileState; 167629baa8cSmrg 168629baa8cSmrgstruct display { 169629baa8cSmrg struct display *next; 170629baa8cSmrg /* Xservers file / XDMCP information */ 171629baa8cSmrg char *name; /* DISPLAY name */ 172629baa8cSmrg char *class; /* display class (may be NULL) */ 173629baa8cSmrg DisplayType displayType; /* method to handle with */ 174629baa8cSmrg char **argv; /* program name and arguments */ 175629baa8cSmrg 176629baa8cSmrg /* display state */ 177629baa8cSmrg DisplayStatus status; /* current status */ 178629baa8cSmrg pid_t pid; /* process id of child */ 179629baa8cSmrg pid_t serverPid; /* process id of server (-1 if none) */ 180629baa8cSmrg FileState state; /* state during HUP processing */ 181629baa8cSmrg int startTries; /* current start try */ 182629baa8cSmrg Time_t lastReserv; /* time of last reserver crash */ 183629baa8cSmrg int reservTries; /* current reserver try */ 184629baa8cSmrg# ifdef XDMCP 185629baa8cSmrg /* XDMCP state */ 186629baa8cSmrg CARD32 sessionID; /* ID of active session */ 187629baa8cSmrg XdmcpNetaddr peer; /* display peer address */ 188629baa8cSmrg int peerlen; /* length of peer address */ 189629baa8cSmrg XdmcpNetaddr from; /* XDMCP port of display */ 190629baa8cSmrg int fromlen; 191629baa8cSmrg CARD16 displayNumber; 192629baa8cSmrg int useChooser; /* Run the chooser for this display */ 193629baa8cSmrg ARRAY8 clientAddr; /* for chooser picking */ 194629baa8cSmrg CARD16 connectionType; /* ... */ 195629baa8cSmrg int xdmcpFd; 196629baa8cSmrg# endif 197629baa8cSmrg /* server management resources */ 198629baa8cSmrg int serverAttempts; /* number of attempts at running X */ 199629baa8cSmrg int openDelay; /* open delay time */ 200629baa8cSmrg int openRepeat; /* open attempts to make */ 201629baa8cSmrg int openTimeout; /* abort open attempt timeout */ 202629baa8cSmrg int startAttempts; /* number of attempts at starting */ 203629baa8cSmrg int reservAttempts; /* allowed start-IO error sequences */ 204629baa8cSmrg int pingInterval; /* interval between XSync */ 205629baa8cSmrg int pingTimeout; /* timeout for XSync */ 206629baa8cSmrg int terminateServer;/* restart for each session */ 207629baa8cSmrg int grabServer; /* keep server grabbed for Login */ 208629baa8cSmrg int grabTimeout; /* time to wait for grab */ 209629baa8cSmrg int resetSignal; /* signal to reset server */ 210629baa8cSmrg int termSignal; /* signal to terminate server */ 211629baa8cSmrg int resetForAuth; /* server reads auth file at reset */ 212629baa8cSmrg char *keymaps; /* binary compat with DEC */ 213629baa8cSmrg char *greeterLib; /* greeter shared library name */ 214629baa8cSmrg 215629baa8cSmrg /* session resources */ 216629baa8cSmrg char *resources; /* resource file */ 217629baa8cSmrg char *xrdb; /* xrdb program */ 218629baa8cSmrg char *setup; /* Xsetup program */ 219629baa8cSmrg char *startup; /* Xstartup program */ 220629baa8cSmrg char *reset; /* Xreset program */ 221629baa8cSmrg char *session; /* Xsession program */ 222629baa8cSmrg char *userPath; /* path set for session */ 223629baa8cSmrg char *systemPath; /* path set for startup/reset */ 224629baa8cSmrg char *systemShell; /* interpreter for startup/reset */ 225629baa8cSmrg char *failsafeClient;/* a client to start when the session fails */ 226629baa8cSmrg char *chooser; /* chooser program */ 227629baa8cSmrg 228629baa8cSmrg /* authorization resources */ 229629baa8cSmrg int authorize; /* enable authorization */ 230629baa8cSmrg char **authNames; /* authorization protocol names */ 231629baa8cSmrg unsigned short *authNameLens; /* authorization protocol name lens */ 232629baa8cSmrg char *clientAuthFile;/* client specified auth file */ 233629baa8cSmrg char *userAuthDir; /* backup directory for tickets */ 234629baa8cSmrg int authComplain; /* complain when no auth for XDMCP */ 235629baa8cSmrg 236629baa8cSmrg /* information potentially derived from resources */ 237629baa8cSmrg int authNameNum; /* number of protocol names */ 238629baa8cSmrg Xauth **authorizations;/* authorization data */ 239629baa8cSmrg int authNum; /* number of authorizations */ 240629baa8cSmrg char *authFile; /* file to store authorization in */ 241629baa8cSmrg 242629baa8cSmrg int version; /* to keep dynamic greeter clued in */ 243629baa8cSmrg /* add new fields only after here. And preferably at the end. */ 244629baa8cSmrg 245629baa8cSmrg /* Hack for making "Willing to manage" configurable */ 246629baa8cSmrg char *willing; /* "Willing to manage" program */ 247629baa8cSmrg Display *dpy; /* Display */ 248629baa8cSmrg char *windowPath; /* path to server "window" */ 249629baa8cSmrg}; 250629baa8cSmrg 251629baa8cSmrg# ifdef XDMCP 252629baa8cSmrg 253629baa8cSmrg# define PROTO_TIMEOUT (30 * 60) /* 30 minutes should be long enough */ 254629baa8cSmrg# define XDM_BROKEN_INTERVAL (120) /* server crashing more than once within */ 255629baa8cSmrg /* two minutes is assumed to be broken! */ 256629baa8cSmrgstruct protoDisplay { 257629baa8cSmrg struct protoDisplay *next; 258629baa8cSmrg XdmcpNetaddr address; /* UDP address */ 259629baa8cSmrg int addrlen; /* UDP address length */ 260629baa8cSmrg unsigned long date; /* creation date */ 261629baa8cSmrg CARD16 displayNumber; 262629baa8cSmrg CARD16 connectionType; 263629baa8cSmrg ARRAY8 connectionAddress; 264629baa8cSmrg CARD32 sessionID; 265629baa8cSmrg Xauth *fileAuthorization; 266629baa8cSmrg Xauth *xdmcpAuthorization; 267629baa8cSmrg ARRAY8 authenticationName; 268629baa8cSmrg ARRAY8 authenticationData; 269629baa8cSmrg XdmAuthKeyRec key; 270629baa8cSmrg}; 271629baa8cSmrg# endif /* XDMCP */ 272629baa8cSmrg 273629baa8cSmrgstruct greet_info { 274629baa8cSmrg char *name; /* user name */ 275629baa8cSmrg char *password; /* user password */ 276629baa8cSmrg char *string; /* random string */ 277629baa8cSmrg char *passwd; /* binary compat with DEC */ 278629baa8cSmrg int version; /* for dynamic greeter to see */ 279629baa8cSmrg /* add new fields below this line, and preferably at the end */ 280629baa8cSmrg Boolean allow_null_passwd; /* allow null password on login */ 281629baa8cSmrg Boolean allow_root_login; /* allow direct root login */ 282629baa8cSmrg}; 283629baa8cSmrg 284629baa8cSmrgtypedef void (*ChooserFunc)(CARD16 connectionType, ARRAY8Ptr addr, char *closure); 285629baa8cSmrgtypedef void (*ListenFunc)(ARRAY8Ptr addr, void **closure); 286629baa8cSmrg 287629baa8cSmrgstruct verify_info { 288629baa8cSmrg int uid; /* user id */ 289629baa8cSmrg int gid; /* group id */ 290629baa8cSmrg char **argv; /* arguments to session */ 291629baa8cSmrg char **userEnviron; /* environment for session */ 292629baa8cSmrg char **systemEnviron;/* environment for startup/reset */ 293629baa8cSmrg int version; /* for dynamic greeter to see */ 294629baa8cSmrg /* add new fields below this line, and preferably at the end */ 295629baa8cSmrg}; 296629baa8cSmrg 297629baa8cSmrg/* display manager exit status definitions */ 298629baa8cSmrg 299629baa8cSmrg# define OBEYSESS_DISPLAY 0 /* obey multipleSessions resource */ 300629baa8cSmrg# define REMANAGE_DISPLAY 1 /* force remanage */ 301629baa8cSmrg# define UNMANAGE_DISPLAY 2 /* force deletion */ 302629baa8cSmrg# define RESERVER_DISPLAY 3 /* force server termination */ 303629baa8cSmrg# define OPENFAILED_DISPLAY 4 /* XOpenDisplay failed, retry */ 304629baa8cSmrg 305629baa8cSmrg# ifndef TRUE 306629baa8cSmrg# define TRUE 1 307629baa8cSmrg# define FALSE 0 308629baa8cSmrg# endif 309629baa8cSmrg 310629baa8cSmrgextern char *config; 311629baa8cSmrg 312629baa8cSmrgextern char *servers; 313629baa8cSmrgextern int request_port; 314629baa8cSmrgextern int debugLevel; 315629baa8cSmrgextern char *errorLogFile; 316629baa8cSmrgextern int daemonMode; 317629baa8cSmrgextern char *pidFile; 318629baa8cSmrgextern int lockPidFile; 319629baa8cSmrgextern char *authDir; 320629baa8cSmrgextern int autoRescan; 321629baa8cSmrgextern int removeDomainname; 322629baa8cSmrgextern char *keyFile; 323629baa8cSmrgextern char *accessFile; 324629baa8cSmrgextern char **exportList; 325629baa8cSmrg# if !defined(HAVE_ARC4RANDOM) 326629baa8cSmrgextern char *randomFile; 327629baa8cSmrgextern char *prngdSocket; 328629baa8cSmrgextern int prngdPort; 329629baa8cSmrg# endif 330629baa8cSmrg 331629baa8cSmrgextern char *greeterLib; 332629baa8cSmrgextern char *willing; 333629baa8cSmrgextern int choiceTimeout; /* chooser choice timeout */ 334629baa8cSmrg 335629baa8cSmrgextern struct display *FindDisplayByName (char *name), 336629baa8cSmrg *FindDisplayBySessionID (CARD32 sessionID), 337629baa8cSmrg *FindDisplayByAddress (XdmcpNetaddr addr, int addrlen, CARD16 displayNumber), 338629baa8cSmrg *FindDisplayByPid (pid_t pid), 339629baa8cSmrg *FindDisplayByServerPid (pid_t serverPid), 340629baa8cSmrg *NewDisplay (char *name, char *class); 341629baa8cSmrg 342629baa8cSmrgextern struct protoDisplay *FindProtoDisplay ( 343629baa8cSmrg XdmcpNetaddr address, 344629baa8cSmrg int addrlen, 345629baa8cSmrg CARD16 displayNumber); 346629baa8cSmrgextern struct protoDisplay *NewProtoDisplay ( 347629baa8cSmrg XdmcpNetaddr address, 348629baa8cSmrg int addrlen, 349629baa8cSmrg CARD16 displayNumber, 350629baa8cSmrg CARD16 connectionType, 351629baa8cSmrg ARRAY8Ptr connectionAddress, 352629baa8cSmrg CARD32 sessionID); 353629baa8cSmrg 354629baa8cSmrg/* in Login.c */ 355629baa8cSmrgextern void DrawFail (Widget ctx); 356629baa8cSmrg 357629baa8cSmrg/* in access.c */ 358629baa8cSmrgextern ARRAY8Ptr getLocalAddress (void); 359629baa8cSmrgextern int AcceptableDisplayAddress (ARRAY8Ptr clientAddress, CARD16 connectionType, xdmOpCode type); 360629baa8cSmrgextern int ForEachMatchingIndirectHost (ARRAY8Ptr clientAddress, CARD16 connectionType, ChooserFunc function, char *closure); 361629baa8cSmrgextern int ScanAccessDatabase (void); 362629baa8cSmrgextern int UseChooser (ARRAY8Ptr clientAddress, CARD16 connectionType); 363629baa8cSmrgextern void ForEachChooserHost (ARRAY8Ptr clientAddress, CARD16 connectionType, ChooserFunc function, char *closure); 364629baa8cSmrgextern void ForEachListenAddr(ListenFunc listenfunction, 365629baa8cSmrg ListenFunc mcastfcuntion, void **closure); 366629baa8cSmrg 367629baa8cSmrg/* in choose.c */ 368629baa8cSmrgextern ARRAY8Ptr IndirectChoice (ARRAY8Ptr clientAddress, CARD16 connectionType); 369629baa8cSmrgextern int IsIndirectClient (ARRAY8Ptr clientAddress, CARD16 connectionType); 370629baa8cSmrgextern int RememberIndirectClient (ARRAY8Ptr clientAddress, CARD16 connectionType); 371629baa8cSmrgextern void ForgetIndirectClient ( ARRAY8Ptr clientAddress, CARD16 connectionType); 372629baa8cSmrgextern void ProcessChooserSocket (int fd); 373629baa8cSmrg 374629baa8cSmrg/* in chooser.c */ 375b7d26471Smrgextern void RunChooser (struct display *d) _X_NORETURN; 376629baa8cSmrg 377629baa8cSmrg/* in daemon.c */ 378629baa8cSmrgextern void BecomeDaemon (void); 379629baa8cSmrgextern void BecomeOrphan (void); 380629baa8cSmrg 381629baa8cSmrg/* in dm.c */ 382629baa8cSmrgextern void CloseOnFork (void); 383629baa8cSmrgextern void RegisterCloseOnFork (int fd); 384629baa8cSmrgextern void StartDisplay (struct display *d); 385629baa8cSmrg# ifndef HAVE_SETPROCTITLE 386629baa8cSmrgextern void SetTitle (char *name, ...); 387629baa8cSmrg# endif 388629baa8cSmrg 389629baa8cSmrg/* in dpylist.c */ 390629baa8cSmrgextern int AnyDisplaysLeft (void); 391629baa8cSmrgextern void ForEachDisplay (void (*f)(struct display *)); 392629baa8cSmrgextern void RemoveDisplay (struct display *old); 393629baa8cSmrg 394629baa8cSmrg/* in file.c */ 395629baa8cSmrgextern void ParseDisplay (char *source, DisplayType *acceptableTypes, int numAcceptable); 396629baa8cSmrg 397629baa8cSmrg/* in netaddr.c */ 398629baa8cSmrgextern char *NetaddrAddress(XdmcpNetaddr netaddrp, int *lenp); 399629baa8cSmrgextern char *NetaddrPort(XdmcpNetaddr netaddrp, int *lenp); 400629baa8cSmrgextern int ConvertAddr (XdmcpNetaddr saddr, int *len, char **addr); 401629baa8cSmrgextern int NetaddrFamily (XdmcpNetaddr netaddrp); 402629baa8cSmrgextern int addressEqual (XdmcpNetaddr a1, int len1, XdmcpNetaddr a2, int len2); 403629baa8cSmrg 404629baa8cSmrg/* in policy.c */ 405629baa8cSmrgextern ARRAY8Ptr ChooseAuthentication (ARRAYofARRAY8Ptr authenticationNames); 406629baa8cSmrgextern int CheckAuthentication (struct protoDisplay *pdpy, ARRAY8Ptr displayID, ARRAY8Ptr name, ARRAY8Ptr data); 407629baa8cSmrgextern int SelectAuthorizationTypeIndex (ARRAY8Ptr authenticationName, ARRAYofARRAY8Ptr authorizationNames); 408629baa8cSmrgextern int SelectConnectionTypeIndex (ARRAY16Ptr connectionTypes, ARRAYofARRAY8Ptr connectionAddresses); 409629baa8cSmrgextern int Willing (ARRAY8Ptr addr, CARD16 connectionType, ARRAY8Ptr authenticationName, ARRAY8Ptr status, xdmOpCode type); 410629baa8cSmrg 411629baa8cSmrg/* in protodpy.c */ 412629baa8cSmrgextern void DisposeProtoDisplay(struct protoDisplay *pdpy); 413629baa8cSmrg 414629baa8cSmrg/* in reset.c */ 415629baa8cSmrgextern void pseudoReset (Display *dpy); 416629baa8cSmrg 417629baa8cSmrg/* in resource.c */ 418629baa8cSmrgextern void InitResources (int argc, char **argv); 419629baa8cSmrgextern void LoadDMResources (void); 420629baa8cSmrgextern void LoadServerResources (struct display *d); 421629baa8cSmrgextern void LoadSessionResources (struct display *d); 422629baa8cSmrgextern void ReinitResources (void); 423629baa8cSmrg 424629baa8cSmrg/* in session.c */ 425629baa8cSmrg# ifdef USE_PAM 426629baa8cSmrgextern pam_handle_t **thepamhp(void); 427629baa8cSmrgextern pam_handle_t *thepamh(void); 428629baa8cSmrg# endif 429629baa8cSmrgextern char **defaultEnv (void); 430629baa8cSmrgextern char **systemEnv (struct display *d, char *user, char *home); 431629baa8cSmrgextern int PingServer(struct display *d, Display *alternateDpy); 432629baa8cSmrgextern int source (char **environ, char *file); 433629baa8cSmrgextern void ClearCloseOnFork (int fd); 434629baa8cSmrgextern void DeleteXloginResources (struct display *d, Display *dpy); 435629baa8cSmrgextern void LoadXloginResources (struct display *d); 436b7d26471Smrgextern void ManageSession (struct display *d) _X_NORETURN; 437629baa8cSmrgextern void SecureDisplay (struct display *d, Display *dpy); 438b7d26471Smrgextern void SessionExit (struct display *d, int status, int removeAuth) _X_NORETURN; 439b7d26471Smrgextern void SessionPingFailed (struct display *d) _X_NORETURN; 440629baa8cSmrgextern void SetupDisplay (struct display *d); 441629baa8cSmrgextern void UnsecureDisplay (struct display *d, Display *dpy); 442629baa8cSmrgextern void execute(char **argv, char **environ); 443629baa8cSmrg 444629baa8cSmrg/* server.c */ 445b7d26471Smrgextern const char *_SysErrorMsg (int n); 446629baa8cSmrgextern int StartServer (struct display *d); 447629baa8cSmrgextern int WaitForServer (struct display *d); 448629baa8cSmrgextern void ResetServer (struct display *d); 449629baa8cSmrg 450b7d26471Smrg/* socket.c */ 451629baa8cSmrgextern int GetChooserAddr (char *addr, int *lenp); 452629baa8cSmrgextern void CreateWellKnownSockets (void); 453629baa8cSmrgextern void UpdateListenSockets (void); 454629baa8cSmrgextern void CloseListenSockets (void); 455629baa8cSmrgextern void ProcessListenSockets (fd_set *readmask); 456629baa8cSmrg 457629baa8cSmrg/* in util.c */ 458629baa8cSmrg# ifndef HAVE_ASPRINTF 459629baa8cSmrg# define asprintf Asprintf 460629baa8cSmrgextern int Asprintf(char ** ret, const char *restrict format, ...) 461629baa8cSmrg _X_ATTRIBUTE_PRINTF(2,3); 462629baa8cSmrg# endif 463629baa8cSmrgextern char *localHostname (void); 464b7d26471Smrgextern char **parseArgs (char **argv, const char *string); 465b7d26471Smrgextern char **setEnv (char **e, const char *name, const char *value); 466629baa8cSmrgextern char **putEnv(const char *string, char **env); 467b7d26471Smrgextern char *getEnv (char **e, const char *name); 468629baa8cSmrgextern void CleanUpChild (void); 469629baa8cSmrgextern void freeArgs (char **argv); 470629baa8cSmrgextern void freeEnv (char **env); 471629baa8cSmrgextern void printEnv (char **e); 472629baa8cSmrg 473629baa8cSmrg/* in verify.c */ 474629baa8cSmrgextern int Verify (struct display *d, struct greet_info *greet, struct verify_info *verify); 475629baa8cSmrg 476629baa8cSmrg/* in xdmcp.c */ 477629baa8cSmrgextern char *NetworkAddressToHostname (CARD16 connectionType, ARRAY8Ptr connectionAddress); 478629baa8cSmrgextern int AnyWellKnownSockets (void); 479629baa8cSmrgextern void DestroyWellKnownSockets (void); 480b7d26471Smrgextern void SendFailed (struct display *d, const char *reason); 481629baa8cSmrgextern void StopDisplay (struct display *d); 482629baa8cSmrgextern void WaitForChild (void); 483629baa8cSmrgextern void WaitForSomething (void); 484629baa8cSmrgextern void init_session_id(void); 485629baa8cSmrgextern void registerHostname(char *name, int namelen); 486629baa8cSmrgextern void ProcessRequestSocket(int fd); 487629baa8cSmrg 488629baa8cSmrg/* 489629baa8cSmrg * CloseOnFork flags 490629baa8cSmrg */ 491629baa8cSmrg 492629baa8cSmrg# define CLOSE_ALWAYS 0 493629baa8cSmrg# define LEAVE_FOR_DISPLAY 1 494629baa8cSmrg 495629baa8cSmrg# include <stdlib.h> 496629baa8cSmrg 497b7d26471Smrg# if defined(X_NOT_POSIX) || defined(__NetBSD__) && defined(__sparc__) 498b7d26471Smrg# if defined(SYSV) 499629baa8cSmrg# define SIGNALS_RESET_WHEN_CAUGHT 500629baa8cSmrg# define UNRELIABLE_SIGNALS 501629baa8cSmrg# endif 502629baa8cSmrg# define Setjmp(e) setjmp(e) 503629baa8cSmrg# define Longjmp(e,v) longjmp(e,v) 504629baa8cSmrg# define Jmp_buf jmp_buf 505629baa8cSmrg# else 506629baa8cSmrg# define Setjmp(e) sigsetjmp(e,1) 507629baa8cSmrg# define Longjmp(e,v) siglongjmp(e,v) 508629baa8cSmrg# define Jmp_buf sigjmp_buf 509629baa8cSmrg# endif 510629baa8cSmrg 511b7d26471Smrgtypedef void (*SIGFUNC)(int); 512629baa8cSmrg 513b7d26471Smrgvoid (*Signal(int, SIGFUNC Handler))(int); 514629baa8cSmrg 515629baa8cSmrg#endif /* _DM_H_ */ 516