1 /***********************************************************
3 Copyright 1987, 1998 The Open Group
5 Permission to use, copy, modify, distribute, and sell this software and its
6 documentation for any purpose is hereby granted without fee, provided that
7 the above copyright notice appear in all copies and that both that
8 copyright notice and this permission notice appear in supporting
11 The above copyright notice and this permission notice shall be included in
12 all copies or substantial portions of the Software.
14 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17 OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
18 AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
19 CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
21 Except as contained in this notice, the name of The Open Group shall not be
22 used in advertising or otherwise to promote the sale, use or other dealings
23 in this Software without prior written authorization from The Open Group.
25 Copyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts.
29 Permission to use, copy, modify, and distribute this software and its
30 documentation for any purpose and without fee is hereby granted,
31 provided that the above copyright notice appear in all copies and that
32 both that copyright notice and this permission notice appear in
33 supporting documentation, and that the name of Digital not be
34 used in advertising or publicity pertaining to distribution of the
35 software without specific, written prior permission.
37 DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
38 ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
39 DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
40 ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
41 WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
42 ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
45 ******************************************************************/
55 #define SCREEN_SAVER_ON 0
56 #define SCREEN_SAVER_OFF 1
57 #define SCREEN_SAVER_FORCER 2
58 #define SCREEN_SAVER_CYCLE 3
60 #ifndef MAX_REQUEST_SIZE
61 #define MAX_REQUEST_SIZE 65535
63 #ifndef MAX_BIG_REQUEST_SIZE
64 #define MAX_BIG_REQUEST_SIZE 4194303
67 typedef struct _FontPathRec *FontPathPtr;
68 typedef struct _NewClientRec *NewClientPtr;
71 #define xnfalloc(size) XNFalloc((unsigned long)(size))
72 #define xnfcalloc(_num, _size) XNFcalloc((unsigned long)(_num)*(unsigned long)(_size))
73 #define xnfrealloc(ptr, size) XNFrealloc((pointer)(ptr), (unsigned long)(size))
75 #define xalloc(size) Xalloc((unsigned long)(size))
76 #define xcalloc(_num, _size) Xcalloc((unsigned long)(_num)*(unsigned long)(_size))
77 #define xrealloc(ptr, size) Xrealloc((pointer)(ptr), (unsigned long)(size))
78 #define xfree(ptr) Xfree((pointer)(ptr))
79 #define xstrdup(s) Xstrdup(s)
80 #define xnfstrdup(s) XNFstrdup(s)
87 extern void ddxBeforeReset(void);
91 extern _X_EXPORT void (*OsVendorVErrorFProc) (const char *, va_list args);
94 extern _X_EXPORT int WaitForSomething(int * /*pClientsReady */
97 extern _X_EXPORT int ReadRequestFromClient(ClientPtr /*client */ );
99 extern _X_EXPORT Bool InsertFakeRequest(ClientPtr /*client */ ,
103 extern _X_EXPORT void ResetCurrentRequest(ClientPtr /*client */ );
105 extern _X_EXPORT void FlushAllOutput(void);
107 extern _X_EXPORT void FlushIfCriticalOutputPending(void);
109 extern _X_EXPORT void SetCriticalOutputPending(void);
111 extern _X_EXPORT int WriteToClient(ClientPtr /*who */ , int /*count */ ,
112 const void * /*buf */ );
114 extern _X_EXPORT void ResetOsBuffers(void);
116 extern _X_EXPORT void InitConnectionLimits(void);
118 extern _X_EXPORT void NotifyParentProcess(void);
120 extern _X_EXPORT void CreateWellKnownSockets(void);
122 extern _X_EXPORT void ResetWellKnownSockets(void);
124 extern _X_EXPORT void CloseWellKnownConnections(void);
126 extern _X_EXPORT XID AuthorizationIDOfClient(ClientPtr /*client */ );
128 extern _X_EXPORT const char *ClientAuthorized(ClientPtr /*client */ ,
129 unsigned int /*proto_n */ ,
130 char * /*auth_proto */ ,
131 unsigned int /*string_n */ ,
132 char * /*auth_string */ );
134 extern _X_EXPORT Bool EstablishNewConnections(ClientPtr /*clientUnused */ ,
135 pointer /*closure */ );
137 extern _X_EXPORT void CheckConnections(void);
139 extern _X_EXPORT void CloseDownConnection(ClientPtr /*client */ );
141 extern _X_EXPORT void AddGeneralSocket(int /*fd */ );
143 extern _X_EXPORT void RemoveGeneralSocket(int /*fd */ );
145 extern _X_EXPORT void AddEnabledDevice(int /*fd */ );
147 extern _X_EXPORT void RemoveEnabledDevice(int /*fd */ );
149 extern _X_EXPORT int OnlyListenToOneClient(ClientPtr /*client */ );
151 extern _X_EXPORT void ListenToAllClients(void);
153 extern _X_EXPORT void IgnoreClient(ClientPtr /*client */ );
155 extern _X_EXPORT void AttendClient(ClientPtr /*client */ );
157 extern _X_EXPORT void MakeClientGrabImpervious(ClientPtr /*client */ );
159 extern _X_EXPORT void MakeClientGrabPervious(ClientPtr /*client */ );
162 extern void ListenOnOpenFD(int /* fd */ , int /* noxauth */ );
165 extern _X_EXPORT CARD32 GetTimeInMillis(void);
167 extern _X_EXPORT void AdjustWaitForDelay(pointer /*waitTime */ ,
168 unsigned long /*newdelay */ );
170 typedef struct _OsTimerRec *OsTimerPtr;
172 typedef CARD32 (*OsTimerCallback) (OsTimerPtr /* timer */ ,
176 extern _X_EXPORT void TimerInit(void);
178 extern _X_EXPORT Bool TimerForce(OsTimerPtr /* timer */ );
180 #define TimerAbsolute (1<<0)
181 #define TimerForceOld (1<<1)
183 extern _X_EXPORT OsTimerPtr TimerSet(OsTimerPtr /* timer */ ,
185 CARD32 /* millis */ ,
186 OsTimerCallback /* func */ ,
189 extern _X_EXPORT void TimerCheck(void);
190 extern _X_EXPORT void TimerCancel(OsTimerPtr /* pTimer */ );
191 extern _X_EXPORT void TimerFree(OsTimerPtr /* pTimer */ );
193 extern _X_EXPORT void SetScreenSaverTimer(void);
194 extern _X_EXPORT void FreeScreenSaverTimer(void);
196 extern _X_EXPORT void AutoResetServer(int /*sig */ );
198 extern _X_EXPORT void GiveUp(int /*sig */ );
200 extern _X_EXPORT void UseMsg(void);
202 extern _X_EXPORT void ProcessCommandLine(int /*argc */ , char * /*argv */ []);
204 extern _X_EXPORT int set_font_authorizations(char ** /* authorizations */ ,
206 pointer /* client */ );
208 #ifndef _HAVE_XALLOC_DECLS
209 #define _HAVE_XALLOC_DECLS
212 * Use malloc(3) instead.
214 extern _X_EXPORT void *
215 Xalloc(unsigned long /*amount */ ) _X_DEPRECATED;
218 * Use calloc(3) instead
220 extern _X_EXPORT void *
221 Xcalloc(unsigned long /*amount */ ) _X_DEPRECATED;
224 * Use realloc(3) instead
226 extern _X_EXPORT void *
227 Xrealloc(void * /*ptr */ , unsigned long /*amount */ )
231 * Use free(3) instead
233 extern _X_EXPORT void
234 Xfree(void * /*ptr */ )
240 * This function malloc(3)s buffer, terminating the server if there is not
243 extern _X_EXPORT void *
244 XNFalloc(unsigned long /*amount */ );
247 * This function calloc(3)s buffer, terminating the server if there is not
250 extern _X_EXPORT void *
251 XNFcalloc(unsigned long /*amount */ );
254 * This function realloc(3)s passed buffer, terminating the server if there is
257 extern _X_EXPORT void *
258 XNFrealloc(void * /*ptr */ , unsigned long /*amount */ );
261 * This function strdup(3)s passed string. The only difference from the library
262 * function that it is safe to pass NULL, as NULL will be returned.
264 extern _X_EXPORT char *
265 Xstrdup(const char *s);
268 * This function strdup(3)s passed string, terminating the server if there is
269 * not enough memory. If NULL is passed to this function, NULL is returned.
271 extern _X_EXPORT char *
272 XNFstrdup(const char *s);
274 /* Include new X*asprintf API */
277 /* Older api deprecated in favor of the asprintf versions */
278 extern _X_EXPORT char *
279 Xprintf(const char *fmt, ...)
280 _X_ATTRIBUTE_PRINTF(1, 2)
282 extern _X_EXPORT char *
283 Xvprintf(const char *fmt, va_list va)
284 _X_ATTRIBUTE_PRINTF(1, 0)
286 extern _X_EXPORT char *
287 XNFprintf(const char *fmt, ...)
288 _X_ATTRIBUTE_PRINTF(1, 2)
290 extern _X_EXPORT char *
291 XNFvprintf(const char *fmt, va_list va)
292 _X_ATTRIBUTE_PRINTF(1, 0)
295 typedef void (*OsSigHandlerPtr) (int /* sig */ );
296 typedef int (*OsSigWrapperPtr) (int /* sig */ );
298 extern _X_EXPORT OsSigHandlerPtr
299 OsSignal(int /* sig */ , OsSigHandlerPtr /* handler */ );
300 extern _X_EXPORT OsSigWrapperPtr
301 OsRegisterSigWrapper(OsSigWrapperPtr newWrap);
303 extern _X_EXPORT int auditTrailLevel;
305 extern _X_EXPORT void
307 extern _X_EXPORT void
311 OsLookupColor(int /*screen */ ,
314 unsigned short * /*pred */ ,
315 unsigned short * /*pgreen */ ,
316 unsigned short * /*pblue */ );
318 extern _X_EXPORT void
321 extern _X_EXPORT void
324 extern _X_EXPORT void
325 OsVendorFatalError(const char *f, va_list args)
326 _X_ATTRIBUTE_PRINTF(1, 0);
328 extern _X_EXPORT void
331 extern _X_EXPORT void
332 OsBlockSignals(void);
334 extern _X_EXPORT void
335 OsReleaseSignals(void);
340 extern _X_EXPORT void
341 OsReleaseSIGIO(void);
344 OsResetSignals(void);
346 extern _X_EXPORT void
352 System(const char *);
353 extern _X_EXPORT pointer
354 Popen(const char *, const char *);
357 extern _X_EXPORT pointer
358 Fopen(const char *, const char *);
367 System(const char *cmdline);
369 #define Fopen(a,b) fopen(a,b)
370 #define Fclose(a) fclose(a)
373 extern _X_EXPORT void
374 CheckUserParameters(int argc, char **argv, char **envp);
375 extern _X_EXPORT void
376 CheckUserAuthorization(void);
379 AddHost(ClientPtr /*client */ ,
381 unsigned /*length */ ,
382 const void * /*pAddr */ );
384 extern _X_EXPORT Bool
385 ForEachHostInFamily(int /*family */ ,
387 unsigned char * /* addr */ ,
389 pointer /* closure */ ),
390 pointer /*closure */ );
393 RemoveHost(ClientPtr /*client */ ,
395 unsigned /*length */ ,
396 pointer /*pAddr */ );
399 GetHosts(pointer * /*data */ ,
402 BOOL * /*pEnabled */ );
404 typedef struct sockaddr *sockaddrPtr;
407 InvalidHost(sockaddrPtr /*saddr */ , int /*len */ , ClientPtr client);
410 LocalClient(ClientPtr /* client */ );
413 LocalClientCred(ClientPtr, int *, int *);
415 #define LCC_UID_SET (1 << 0)
416 #define LCC_GID_SET (1 << 1)
417 #define LCC_PID_SET (1 << 2)
418 #define LCC_ZID_SET (1 << 3)
421 int fieldsSet; /* Bit mask of fields set */
422 int euid; /* Effective uid */
423 int egid; /* Primary effective group id */
424 int nSuppGids; /* Number of supplementary group ids */
425 int *pSuppGids; /* Array of supplementary group ids */
426 int pid; /* Process id */
427 int zoneid; /* Only set on Solaris 10 & later */
428 } LocalClientCredRec;
431 GetLocalClientCreds(ClientPtr, LocalClientCredRec **);
432 extern _X_EXPORT void
433 FreeLocalClientCreds(LocalClientCredRec *);
436 ChangeAccessControl(ClientPtr /*client */ , int /*fEnabled */ );
439 GetAccessControl(void);
441 extern _X_EXPORT void
444 extern _X_EXPORT void
445 ResetHosts(char *display);
447 extern _X_EXPORT void
448 EnableLocalHost(void);
450 extern _X_EXPORT void
451 DisableLocalHost(void);
453 extern _X_EXPORT void
454 AccessUsingXdmcp(void);
456 extern _X_EXPORT void
457 DefineSelf(int /*fd */ );
460 extern _X_EXPORT void
461 AugmentSelf(pointer /*from */ , int /*len */ );
463 extern _X_EXPORT void
464 RegisterAuthorizations(void);
467 extern _X_EXPORT void
468 InitAuthorization(char * /*filename */ );
470 /* extern int LoadAuthorization(void); */
473 AuthorizationFromID(XID id,
474 unsigned short *name_lenp,
476 unsigned short *data_lenp, char **datap);
479 CheckAuthorization(unsigned int /*namelength */ ,
480 const char * /*name */ ,
481 unsigned int /*datalength */ ,
482 const char * /*data */ ,
483 ClientPtr /*client */ ,
484 const char ** /*reason */
487 extern _X_EXPORT void
488 ResetAuthorization(void);
491 RemoveAuthorization(unsigned short name_length,
493 unsigned short data_length, const char *data);
496 AddAuthorization(unsigned int /*name_length */ ,
497 const char * /*name */ ,
498 unsigned int /*data_length */ ,
503 GenerateAuthorization(unsigned int /* name_length */ ,
504 const char * /* name */ ,
505 unsigned int /* data_length */ ,
506 const char * /* data */ ,
507 unsigned int * /* data_length_return */ ,
508 char ** /* data_return */ );
512 ddxProcessArgument(int /*argc */ , char * /*argv */ [], int /*i */ );
514 extern _X_EXPORT void
517 /* stuff for ReplyCallback */
518 extern _X_EXPORT CallbackListPtr ReplyCallback;
521 const void *replyData;
522 unsigned long dataLenBytes; /* actual bytes from replyData + pad bytes */
523 unsigned long bytesRemaining;
525 unsigned long padBytes; /* pad bytes from zeroed array */
528 /* stuff for FlushCallback */
529 extern _X_EXPORT CallbackListPtr FlushCallback;
534 EXIT_ERR_CONFIGURE = 2,
535 EXIT_ERR_DRIVERS = 3,
538 extern _X_EXPORT void
539 AbortDDX(enum ExitCode error);
540 extern _X_EXPORT void
541 ddxGiveUp(enum ExitCode error);
543 TimeSinceLastInputEvent(void);
546 #ifndef HAVE_STRCASECMP
547 #define strcasecmp xstrcasecmp
549 xstrcasecmp(const char *s1, const char *s2);
552 #ifndef HAVE_STRNCASECMP
553 #define strncasecmp xstrncasecmp
555 xstrncasecmp(const char *s1, const char *s2, size_t n);
558 #ifndef HAVE_STRCASESTR
559 #define strcasestr xstrcasestr
560 extern _X_EXPORT char *
561 xstrcasestr(const char *s, const char *find);
565 extern _X_EXPORT size_t
566 strlcpy(char *dst, const char *src, size_t siz);
567 extern _X_EXPORT size_t
568 strlcat(char *dst, const char *src, size_t siz);
572 extern _X_EXPORT char *
573 strndup(const char *str, size_t n);
577 typedef enum _LogParameter {
584 /* Flags for log messages. */
586 X_PROBED, /* Value was probed */
587 X_CONFIG, /* Value was given in the config file */
588 X_DEFAULT, /* Value is a default */
589 X_CMDLINE, /* Value was given on the command line */
590 X_NOTICE, /* Notice */
591 X_ERROR, /* Error message */
592 X_WARNING, /* Warning message */
593 X_INFO, /* Informational message */
594 X_NONE, /* No prefix */
595 X_NOT_IMPLEMENTED, /* Not implemented */
596 X_DEBUG, /* Debug message */
597 X_UNKNOWN = -1 /* unknown -- this must always be last */
600 extern _X_EXPORT const char *
601 LogInit(const char *fname, const char *backup);
602 extern _X_EXPORT void
603 LogClose(enum ExitCode error);
604 extern _X_EXPORT Bool
605 LogSetParameter(LogParameter param, int value);
606 extern _X_EXPORT void
607 LogVWrite(int verb, const char *f, va_list args)
608 _X_ATTRIBUTE_PRINTF(2, 0);
609 extern _X_EXPORT void
610 LogWrite(int verb, const char *f, ...)
611 _X_ATTRIBUTE_PRINTF(2, 3);
612 extern _X_EXPORT void
613 LogVMessageVerb(MessageType type, int verb, const char *format, va_list args)
614 _X_ATTRIBUTE_PRINTF(3, 0);
615 extern _X_EXPORT void
616 LogMessageVerb(MessageType type, int verb, const char *format, ...)
617 _X_ATTRIBUTE_PRINTF(3, 4);
618 extern _X_EXPORT void
619 LogMessage(MessageType type, const char *format, ...)
620 _X_ATTRIBUTE_PRINTF(2, 3);
621 extern _X_EXPORT void
622 LogMessageVerbSigSafe(MessageType type, int verb, const char *format, ...)
623 _X_ATTRIBUTE_PRINTF(3, 4);
624 extern _X_EXPORT void
625 LogVMessageVerbSigSafe(MessageType type, int verb, const char *format, va_list args)
626 _X_ATTRIBUTE_PRINTF(3, 0);
628 extern _X_EXPORT void
629 LogVHdrMessageVerb(MessageType type, int verb,
630 const char *msg_format, va_list msg_args,
631 const char *hdr_format, va_list hdr_args)
632 _X_ATTRIBUTE_PRINTF(3, 0)
633 _X_ATTRIBUTE_PRINTF(5, 0);
634 extern _X_EXPORT void
635 LogHdrMessageVerb(MessageType type, int verb,
636 const char *msg_format, va_list msg_args,
637 const char *hdr_format, ...)
638 _X_ATTRIBUTE_PRINTF(3, 0)
639 _X_ATTRIBUTE_PRINTF(5, 6);
640 extern _X_EXPORT void
641 LogHdrMessage(MessageType type, const char *msg_format,
642 va_list msg_args, const char *hdr_format, ...)
643 _X_ATTRIBUTE_PRINTF(2, 0)
644 _X_ATTRIBUTE_PRINTF(4, 5);
646 extern _X_EXPORT void
647 FreeAuditTimer(void);
648 extern _X_EXPORT void
649 AuditF(const char *f, ...)
650 _X_ATTRIBUTE_PRINTF(1, 2);
651 extern _X_EXPORT void
652 VAuditF(const char *f, va_list args)
653 _X_ATTRIBUTE_PRINTF(1, 0);
654 extern _X_EXPORT void
655 FatalError(const char *f, ...)
656 _X_ATTRIBUTE_PRINTF(1, 2)
660 #define DebugF ErrorF
662 #define DebugF(...) /* */
665 extern _X_EXPORT void
666 VErrorF(const char *f, va_list args)
667 _X_ATTRIBUTE_PRINTF(1, 0);
668 extern _X_EXPORT void
669 ErrorF(const char *f, ...)
670 _X_ATTRIBUTE_PRINTF(1, 2);
671 extern _X_EXPORT void
672 VErrorFSigSafe(const char *f, va_list args)
673 _X_ATTRIBUTE_PRINTF(1, 0);
674 extern _X_EXPORT void
675 ErrorFSigSafe(const char *f, ...)
676 _X_ATTRIBUTE_PRINTF(1, 2);
677 extern _X_EXPORT void
678 LogPrintMarkers(void);
680 extern _X_EXPORT void
681 xorg_backtrace(void);