diff options
Diffstat (limited to 'kdm/backend/dm.h')
-rw-r--r-- | kdm/backend/dm.h | 630 |
1 files changed, 0 insertions, 630 deletions
diff --git a/kdm/backend/dm.h b/kdm/backend/dm.h deleted file mode 100644 index c05d4c865..000000000 --- a/kdm/backend/dm.h +++ /dev/null @@ -1,630 +0,0 @@ -/* - -Copyright 1988, 1998 The Open Group -Copyright 2000-2005 Oswald Buddenhagen <ossi@kde.org> - -Permission to use, copy, modify, distribute, and sell this software and its -documentation for any purpose is hereby granted without fee, provided that -the above copyright notice appear in all copies and that both that -copyright notice and this permission notice appear in supporting -documentation. - -The above copyright notice and this permission notice shall be included -in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR -OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, -ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -OTHER DEALINGS IN THE SOFTWARE. - -Except as contained in this notice, the name of a copyright holder shall -not be used in advertising or otherwise to promote the sale, use or -other dealings in this Software without prior written authorization -from the copyright holder. - -*/ - -/* - * xdm - display manager daemon - * Author: Keith Packard, MIT X Consortium - * - * global xdm core declarations - */ - -#ifndef _DM_H_ -#define _DM_H_ 1 - -#define WITH_CONSOLE_KIT - -#include "greet.h" -#include <config.ci> - -#include <X11/X.h> /* FamilyInternet6 */ -#include <X11/Xos.h> -#include <X11/Xfuncs.h> -#include <X11/Xmd.h> -#include <X11/Xauth.h> -#include <X11/Intrinsic.h> - -#include <sys/param.h> -#ifdef HAVE_LIMITS_H -# include <limits.h> -#endif - -#include <time.h> -#define Time_t time_t - -#include <stdlib.h> -#include <errno.h> - -#ifdef XDMCP -# if defined(__osf__) -/* someone somewhere defines QUERY under Tru64 which confuses Xdmcp.h */ -# undef QUERY -# endif -# include <X11/Xdmcp.h> -#endif - -#ifndef PATH_MAX -# ifdef MAXPATHLEN -# define PATH_MAX MAXPATHLEN -# else -# define PATH_MAX 1024 -# endif -#endif - -#include <sys/wait.h> -#define waitCode(w) (WIFEXITED(w) ? WEXITSTATUS(w) : 0) -#define waitSig(w) (WIFSIGNALED(w) ? WTERMSIG(w) : 0) -#ifdef WCOREDUMP -# define waitCore(w) (WCOREDUMP(w)) -#else -# define waitCore(w) 0 /* not in POSIX. so what? */ -#endif -typedef int waitType; - -#define waitCompose(sig,core,code) ((sig) * 256 + (core) * 128 + (code)) -#define waitVal(w) waitCompose(waitSig(w), waitCore(w), waitCode(w)) -#define WaitCode(w) ((w) & 0x7f) -#define WaitCore(w) (((w) >> 7) & 1) -#define WaitSig(w) (((w) >> 8) & 0xff) - -#include <sys/time.h> -#define FD_TYPE fd_set - -#include <setjmp.h> -#if defined(__EMX__) || (defined(__NetBSD__) && defined(__sparc__)) /* XXX netbsd? */ -# define Setjmp(e) setjmp(e) -# define Longjmp(e,v) longjmp(e,v) -# define Jmp_buf jmp_buf -#else -# define Setjmp(e) sigsetjmp(e,1) -# define Longjmp(e,v) siglongjmp(e,v) -# define Jmp_buf sigjmp_buf -#endif - -#include <utmp.h> -#ifdef HAVE_UTMPX -# include <utmpx.h> -# define STRUCTUTMP struct utmpx -# define UTMPNAME utmpxname -# define SETUTENT setutxent -# define GETUTENT getutxent -# define PUTUTLINE pututxline -# define ENDUTENT endutxent -# define LASTLOG lastlogx -# define ut_time ut_tv.tv_sec -# define ll_time ll_tv.tv_sec -#else -# define STRUCTUTMP struct utmp -# define UTMPNAME utmpname -# define SETUTENT setutent -# define GETUTENT getutent -# define PUTUTLINE pututline -# define ENDUTENT endutent -# define LASTLOG lastlog -#endif -#ifndef HAVE_STRUCT_UTMP_UT_USER -# define ut_user ut_name -#endif -#ifndef WTMP_FILE -# ifdef _PATH_WTMPX -# define WTMP_FILE _PATH_WTMPX -# elif defined(_PATH_WTMP) -# define WTMP_FILE _PATH_WTMP -# else -# define WTMP_FILE "/usr/adm/wtmp" -# endif -#endif -#ifndef UTMP_FILE -# ifdef _PATH_UTMPX -# define UTMP_FILE _PATH_UTMPX -# elif defined(_PATH_UTMP) -# define UTMP_FILE _PATH_UTMP -# else -# define UTMP_FILE "/etc/utmp" -# endif -#endif - -#ifdef HAVE_NETCONFIG_H -# define STREAMSCONN -#else -# define UNIXCONN -# define TCPCONN -# ifdef FamilyInternet6 -# define IPv6 -# endif -# ifdef HAVE_NETDNET_DN_H -# define DNETCONN -# endif -#endif - -#if !defined(HAVE_ARC4RANDOM) && !defined(DEV_RANDOM) -# define NEED_ENTROPY -#endif - -typedef struct GPipe { - int wfd, rfd; - char *who; -} GPipe; - -typedef struct GTalk { - GPipe *pipe; - Jmp_buf errjmp; -} GTalk; - -typedef struct GProc { - GPipe pipe; - int pid; -} GProc; - -typedef enum displayStatus { notRunning = 0, running, zombie, phoenix, raiser, - textMode, reserve, remoteLogin } DisplayStatus; - -typedef enum serverStatus { ignore = 0, awaiting, starting, - terminated, killed, pausing } ServerStatus; - -typedef struct RcStr { - struct RcStr *next; - char *str; - int cnt; -} RcStr; - -typedef struct CfgDep { - RcStr *name; - long time; -} CfgDep; - -typedef struct CfgArr { - char *data; /* config value array; allocated */ - long *idx; /* config index array; alias */ - CfgDep dep; /* filestamp */ - int numCfgEnt; /* number of config entries */ -} CfgArr; - -struct bsock { - int fd; - int buflen; - char *buffer; -}; - -struct cmdsock { - struct cmdsock *next; - struct bsock sock; /* buffered fd of the socket */ -}; - -typedef struct { - struct cmdsock *css; /* open connections */ - - char *path; /* filename of the socket */ -#ifndef HONORS_SOCKET_PERMS - char *realdir; /* real dirname of the socket */ -#endif - int fd; /* fd of the socket */ - int gid; /* owner group of the socket */ - - char *fpath; /* filename of the fifo */ - struct bsock fifo; /* buffered fd of the fifo */ -} CtrlRec; - -struct display { - struct display *next; - struct disphist *hstent; /* display history entry */ - - /* basic display information */ - char *name; /* DISPLAY name -- also referenced in hstent */ - char *class2; /* display class (may be NULL) */ - int displayType; /* location/origin/lifetime */ - CfgArr cfg; /* config data array */ - - /* display state */ - DisplayStatus status; /* current status */ - int zstatus; /* substatus while zombie */ - int pid; /* process id of child */ - int serverPid; /* process id of server (-1 if none) */ -#ifdef HAVE_VTS - int serverVT; /* server VT (0 = none, -1 = pending) */ - struct display *follower; /* on exit, hand VT to this display */ -#endif - ServerStatus serverStatus; /* X server startup state */ - Time_t lastStart; /* time of last display start */ - int startTries; /* current start try */ - int stillThere; /* state during HUP processing */ - int userSess; /* -1=nobody, otherwise uid */ - char *userName; - char *sessName; - CtrlRec ctrl; /* command socket & fifo */ - GPipe pipe; /* comm master <-> slave */ - GPipe gpipe; /* comm master <-> greeter */ -#ifdef XDMCP - char *remoteHost; /* for X -query type remote login */ - /* XDMCP state */ - unsigned sessionID; /* ID of active session */ - ARRAY8 peer; /* display peer address */ - ARRAY8 from; /* XDMCP port of display */ - unsigned displayNumber; /* numerical part of name */ - int useChooser; /* Run the chooser for this display */ - ARRAY8 clientAddr; /* for chooser picking */ - unsigned connectionType; /* ... */ - int xdmcpFd; -#endif - - CONF_CORE_LOCAL_DEFS - - int idleTimeout; /* abort login after that time */ - - unsigned short *authNameLens; /* authorization protocol name lens */ - - /* information potentially derived from resources */ - int authNameNum; /* number of protocol names */ - Xauth **authorizations; /* authorization data */ - int authNum; /* number of authorizations */ - char *authFile; /* file to store authorization in */ -}; - -typedef struct { - unsigned how:2, /* 0=none 1=reboot 2=halt (SHUT_*) */ - force:2; - int uid; - int start; - int timeout; - char *osname; - time_t bmstamp; - int osindex; -} SdRec; - -struct disphist { - struct disphist *next; - char *name; - Time_t lastExit; /* time of last display exit */ - unsigned rLogin:2, /* 0=nothing 1=relogin 2=login */ - lock:1, /* screen locker running */ - goodExit:1; /* was the last exit "peaceful"? */ - SdRec sdRec; - char *nuser, *npass, *nargs; -}; - -#ifdef XDMCP - -#define PROTO_TIMEOUT (30 * 60) /* 30 minutes should be long enough */ - -struct protoDisplay { - struct protoDisplay *next; - XdmcpNetaddr address; /* UDP address */ - int addrlen; /* UDP address length */ - unsigned long date; /* creation date */ - CARD16 displayNumber; - CARD16 connectionType; - ARRAY8 connectionAddress; - CARD32 sessionID; - Xauth *fileAuthorization; - Xauth *xdmcpAuthorization; - ARRAY8 authenticationName; - ARRAY8 authenticationData; - XdmAuthKeyRec key; -}; -#endif /* XDMCP */ - -/* status code for RStopDisplay */ -#define DS_RESTART 0 -#define DS_TEXTMODE 1 -#define DS_RESERVE 2 -#define DS_REMOTE 3 -#define DS_REMOVE 4 - -/* command codes dpy process -> master process */ -#define D_User 1 -#define D_ReLogin 2 -#define D_ChooseHost 4 -#define D_RemoteHost 5 -#define D_XConnOk 6 - -extern int debugLevel; - -CONF_CORE_GLOBAL_DECLS - -/* in daemon.c */ -void BecomeDaemon( void ); - -/* in dm.c */ -extern char *prog, *progpath; -extern time_t now; -extern SdRec sdRec; -void StartDisplay( struct display *d ); -void StartDisplayP2( struct display *d ); -void StopDisplay( struct display *d ); -void SetTitle( const char *name ); -void SwitchToX( struct display *d ); -void setNLogin( struct display *d, - const char *nuser, const char *npass, char *nargs, - int rl ); -void cancelShutdown( void ); -int TTYtoVT( const char *tty ); -int activateVT( int vt ); - -/* in ctrl.c */ -void openCtrl( struct display *d ); -void closeCtrl( struct display *d ); -int handleCtrl( FD_TYPE *reads, struct display *d ); -void chownCtrl( CtrlRec *cr, int uid ); -void updateCtrl( void ); - -/* in dpylist.c */ -extern struct display *displays; /* that's ugly ... */ -int AnyDisplaysLeft( void ); -void ForEachDisplay( void (*f)( struct display * ) ); -#ifdef HAVE_VTS -void ForEachDisplayRev( void (*f)( struct display * ) ); -#endif -void RemoveDisplay( struct display *old ); -struct display - *FindDisplayByName( const char *name ), -#ifdef XDMCP - *FindDisplayBySessionID( CARD32 sessionID ), - *FindDisplayByAddress( XdmcpNetaddr addr, int addrlen, CARD16 displayNumber ), -#endif /* XDMCP */ - *FindDisplayByPid( int pid ), - *FindDisplayByServerPid( int serverPid ), - *NewDisplay( const char *name ); -int AnyActiveDisplays( void ); -int AnyRunningDisplays( void ); -int AnyReserveDisplays( void ); -int idleReserveDisplays( void ); -int AllLocalDisplaysLocked( struct display *dp ); -int StartReserveDisplay( int lt ); -void ReapReserveDisplays( void ); - -/* in reset.c */ -void pseudoReset( void ); - -/* in resource.c */ -char **FindCfgEnt( struct display *d, int id ); -int InitResources( char **argv ); -int LoadDMResources( int force ); -int LoadDisplayResources( struct display *d ); -void ScanServers( void ); -void CloseGetter( void ); -int startConfig( int what, CfgDep *dep, int force ); -RcStr *newStr( char *str ); -void delStr( RcStr *str ); -extern GTalk cnftalk; - -/* in session.c */ -extern struct display *td; -extern const char *td_setup; -char **baseEnv( const char *user ); -char **inheritEnv( char **env, const char **what ); -char **systemEnv( const char *user ); -int source( char **env, const char *file, const char *arg ); -void ManageSession( struct display *d ); - -extern GTalk mstrtalk, grttalk; -extern GProc grtproc; -void OpenGreeter( void ); -int CloseGreeter( int force ); -int CtrlGreeterWait( int wreply ); -void PrepErrorGreet( void ); -char *conv_interact( int what, const char *prompt ); - -/* process.c */ -typedef void (*SIGFUNC)( int ); -SIGFUNC Signal( int, SIGFUNC Handler ); - -void RegisterInput( int fd ); -void UnregisterInput( int fd ); -void RegisterCloseOnFork( int fd ); -void ClearCloseOnFork( int fd ); -void CloseNClearCloseOnFork( int fd ); -int Fork( void ); -int Wait4( int pid ); -void execute( char **argv, char **env ); -int runAndWait( char **args, char **env ); -FILE *pOpen( char **what, char m, int *pid ); -int pClose( FILE *f, int pid ); -char *locate( const char *exe ); -void TerminateProcess( int pid, int sig ); - -void GSet( GTalk *talk); /* call before GOpen! */ -int GFork( GPipe *pajp, const char *pname, char *cname, - GPipe *ogp, char *cgname ); -void GClosen( GPipe *pajp ); -int GOpen( GProc *proc, - char **argv, const char *what, char **env, char *cname, - GPipe *gp ); -int GClose( GProc *proc, GPipe *gp, int force ); - -void GSendInt( int val ); -int GRecvInt( void ); -int GRecvCmd( int *cmd ); -void GSendArr( int len, const char *data ); -char *GRecvArr( int *len ); -int GRecvStrBuf( char *buf ); -int GRecvArrBuf( char *buf ); -void GSendStr( const char *buf ); -void GSendNStr( const char *buf, int len ); /* exact len, buf != 0 */ -void GSendStrN( const char *buf, int len ); /* maximal len */ -char *GRecvStr( void ); -void GSendArgv( char **argv ); -void GSendStrArr( int len, char **data ); -char **GRecvStrArr( int *len ); -char **GRecvArgv( void ); - -/* client.c */ -#define GCONV_NORMAL 0 -#define GCONV_HIDDEN 1 -#define GCONV_USER 2 -#define GCONV_PASS 3 -#define GCONV_PASS_ND 4 -#define GCONV_BINARY 5 -typedef char *(*GConvFunc)( int what, const char *prompt ); -int Verify( GConvFunc gconv, int rootok ); -#ifdef WITH_CONSOLE_KIT -int StartClient( const char *ck_session_cookie ); -#else -int StartClient( void ); -#endif -void SessionExit( int status ) ATTR_NORETURN; -int ReadDmrc( void ); -extern char **userEnviron, **systemEnviron; -extern char *curuser, *curpass, *curtype, *newpass, - *dmrcuser, *curdmrc, *newdmrc; -extern int cursource; -#define PWSRC_MANUAL 0 -#define PWSRC_AUTOLOGIN 1 -#define PWSRC_RELOGIN 2 - -/* server.c */ -char **PrepServerArgv( struct display *d, const char *args ); -void StartServer( struct display *d ); -void AbortStartServer( struct display *d ); -void StartServerSuccess( void ); -void StartServerFailed( void ); -void StartServerTimeout( void ); -extern struct display *startingServer; -extern time_t serverTimeout; - -void WaitForServer( struct display *d ); -void ResetServer( struct display *d ); -int PingServer(struct display *d ); -extern Display *dpy; - -/* in util.c */ -void *Calloc( size_t nmemb, size_t size ); -void *Malloc( size_t size ); -void *Realloc( void *ptr, size_t size ); -void WipeStr( char *str ); -int StrCmp( const char *s1, const char *s2 ); -#ifdef HAVE_STRNLEN -# define StrNLen(s, m) strnlen(s, m) -#else -int StrNLen( const char *s, int max ); -#endif -int StrNDup( char **dst, const char *src, int len ); -int StrDup( char **dst, const char *src ); -int arrLen( char **arr ); -void freeStrArr( char **arr ); -char **initStrArr( char **arr ); -char **xCopyStrArr( int rn, char **arr ); -/* Note: the following functions free the old data even in case of failure */ -int ReStrN( char **dst, const char *src, int len ); -int ReStr( char **dst, const char *src ); -int StrApp( char **dst, ... ); -char **addStrArr( char **arr, const char *str, int len ); -char **parseArgs( char **argv, const char *string ); -/* End note */ -char **setEnv( char **e, const char *name, const char *value ); -char **putEnv( const char *string, char **env ); -const char *getEnv( char **e, const char *name ); -const char *localHostname( void ); -int Reader( int fd, void *buf, int len ); -int Writer( int fd, const void *buf, int len ); -int fGets( char *buf, int max, FILE *f ); -void randomStr( char *s ); -time_t mTime( const char *fn ); -void ListSessions( int flags, struct display *d, void *ctx, - void (*emitXSess)( struct display *, struct display *, void * ), - void (*emitTTYSess)( STRUCTUTMP *, struct display *, void * ) ); - -/* in inifile.c */ -char *iniLoad( const char *fname ); -int iniSave( const char *data, const char *fname ); -char *iniEntry( char *data, const char *section, const char *key, const char *value ); -char *iniMerge( char *data, const char *newdata ); - -/* in bootman.c */ -int getBootOptions( char ***opts, int *def, int *cur ); -int setBootOption( const char *opt, SdRec *sdr ); -void commitBootOption( void ); - -/* in netaddr.c */ -char *NetaddrAddress( char *netaddrp, int *lenp ); -char *NetaddrPort( char *netaddrp, int *lenp ); -int ConvertAddr( char *saddr, int *len, char **addr ); -int NetaddrFamily( char *netaddrp ); -int addressEqual( char *a1, int len1, char *a2, int len2 ); - -#ifdef XDMCP - -/* in xdmcp.c */ -char *NetworkAddressToHostname( CARD16 connectionType, ARRAY8Ptr connectionAddress ); -void SendFailed( struct display *d, const char *reason ); -void init_session_id( void ); - -/* in policy.c */ -struct sockaddr; -ARRAY8Ptr Accept( struct sockaddr *from, int fromlen, CARD16 displayNumber ); -ARRAY8Ptr ChooseAuthentication( ARRAYofARRAY8Ptr authenticationNames ); -int CheckAuthentication( struct protoDisplay *pdpy, ARRAY8Ptr displayID, ARRAY8Ptr name, ARRAY8Ptr data ); -int SelectAuthorizationTypeIndex( ARRAY8Ptr authenticationName, ARRAYofARRAY8Ptr authorizationNames ); -int SelectConnectionTypeIndex( ARRAY16Ptr connectionTypes, ARRAYofARRAY8Ptr connectionAddresses ); -int Willing( ARRAY8Ptr addr, CARD16 connectionType, ARRAY8Ptr authenticationName, ARRAY8Ptr status, xdmOpCode type ); - -/* in protodpy.c */ -void DisposeProtoDisplay( struct protoDisplay *pdpy ); - -struct protoDisplay *FindProtoDisplay( XdmcpNetaddr address, int addrlen, - CARD16 displayNumber ); -struct protoDisplay *NewProtoDisplay( XdmcpNetaddr address, int addrlen, - CARD16 displayNumber, - CARD16 connectionType, - ARRAY8Ptr connectionAddress, - CARD32 sessionID ); - -#define FamilyBroadcast 0xffff -typedef void (*ChooserFunc)( CARD16 connectionType, ARRAY8Ptr addr, char *closure ); -typedef void (*ListenFunc)( ARRAY8Ptr addr, void **closure ); - -/* in access.c */ -ARRAY8Ptr getLocalAddress( void ); -int AcceptableDisplayAddress( ARRAY8Ptr clientAddress, CARD16 connectionType, xdmOpCode type ); -int ForEachMatchingIndirectHost( ARRAY8Ptr clientAddress, CARD16 connectionType, ChooserFunc function, char *closure ); -void ScanAccessDatabase( int force ); -int UseChooser( ARRAY8Ptr clientAddress, CARD16 connectionType ); -void ForEachChooserHost( ARRAY8Ptr clientAddress, CARD16 connectionType, ChooserFunc function, char *closure ); -void ForEachListenAddr( ListenFunc listenfunction, ListenFunc mcastfcuntion, void **closure ); - -/* in choose.c */ -ARRAY8Ptr IndirectChoice( ARRAY8Ptr clientAddress, CARD16 connectionType ); -int IsIndirectClient( ARRAY8Ptr clientAddress, CARD16 connectionType ); -int RememberIndirectClient( ARRAY8Ptr clientAddress, CARD16 connectionType ); -void ForgetIndirectClient( ARRAY8Ptr clientAddress, CARD16 connectionType ); -int RegisterIndirectChoice( ARRAY8Ptr clientAddress, CARD16 connectionType, ARRAY8Ptr choice ); -int DoChoose( void ); - -/* socket.c or streams.c */ -void UpdateListenSockets( void ); -int AnyListenSockets( void ); -int ProcessListenSockets( FD_TYPE *reads ); - -/* in xdmcp.c */ -void ProcessRequestSocket( int fd ); - -#endif /* XDMCP */ - -/* in sessreg.c */ -void sessreg( struct display *d, int pid, const char *user, int uid ); - -#endif /* _DM_H_ */ |