os.h revision f7df2e56
105b261ecSmrg/***********************************************************
205b261ecSmrg
305b261ecSmrgCopyright 1987, 1998  The Open Group
405b261ecSmrg
505b261ecSmrgPermission to use, copy, modify, distribute, and sell this software and its
605b261ecSmrgdocumentation for any purpose is hereby granted without fee, provided that
705b261ecSmrgthe above copyright notice appear in all copies and that both that
805b261ecSmrgcopyright notice and this permission notice appear in supporting
905b261ecSmrgdocumentation.
1005b261ecSmrg
1105b261ecSmrgThe above copyright notice and this permission notice shall be included in
1205b261ecSmrgall copies or substantial portions of the Software.
1305b261ecSmrg
1405b261ecSmrgTHE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
1505b261ecSmrgIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
1605b261ecSmrgFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
1705b261ecSmrgOPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
1805b261ecSmrgAN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
1905b261ecSmrgCONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
2005b261ecSmrg
2105b261ecSmrgExcept as contained in this notice, the name of The Open Group shall not be
2205b261ecSmrgused in advertising or otherwise to promote the sale, use or other dealings
2305b261ecSmrgin this Software without prior written authorization from The Open Group.
2405b261ecSmrg
2505b261ecSmrgCopyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts.
2605b261ecSmrg
2705b261ecSmrg                        All Rights Reserved
2805b261ecSmrg
29f7df2e56SmrgPermission to use, copy, modify, and distribute this software and its
30f7df2e56Smrgdocumentation for any purpose and without fee is hereby granted,
3105b261ecSmrgprovided that the above copyright notice appear in all copies and that
32f7df2e56Smrgboth that copyright notice and this permission notice appear in
3305b261ecSmrgsupporting documentation, and that the name of Digital not be
3405b261ecSmrgused in advertising or publicity pertaining to distribution of the
35f7df2e56Smrgsoftware without specific, written prior permission.
3605b261ecSmrg
3705b261ecSmrgDIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
3805b261ecSmrgALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
3905b261ecSmrgDIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
4005b261ecSmrgANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
4105b261ecSmrgWHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
4205b261ecSmrgARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
4305b261ecSmrgSOFTWARE.
4405b261ecSmrg
4505b261ecSmrg******************************************************************/
4605b261ecSmrg
4705b261ecSmrg#ifndef OS_H
4805b261ecSmrg#define OS_H
4905b261ecSmrg
5005b261ecSmrg#include "misc.h"
5105b261ecSmrg#include <stdarg.h>
52f7df2e56Smrg#include <stdint.h>
5365b04b38Smrg#include <string.h>
5405b261ecSmrg
5505b261ecSmrg#define SCREEN_SAVER_ON   0
5605b261ecSmrg#define SCREEN_SAVER_OFF  1
5705b261ecSmrg#define SCREEN_SAVER_FORCER 2
5805b261ecSmrg#define SCREEN_SAVER_CYCLE  3
5905b261ecSmrg
6005b261ecSmrg#ifndef MAX_REQUEST_SIZE
6105b261ecSmrg#define MAX_REQUEST_SIZE 65535
6205b261ecSmrg#endif
6305b261ecSmrg#ifndef MAX_BIG_REQUEST_SIZE
6405b261ecSmrg#define MAX_BIG_REQUEST_SIZE 4194303
6505b261ecSmrg#endif
6605b261ecSmrg
6705b261ecSmrgtypedef struct _FontPathRec *FontPathPtr;
6805b261ecSmrgtypedef struct _NewClientRec *NewClientPtr;
6905b261ecSmrg
70f7df2e56Smrg#ifndef xnfalloc
7105b261ecSmrg#define xnfalloc(size) XNFalloc((unsigned long)(size))
72f7df2e56Smrg#define xnfcalloc(_num, _size) XNFcallocarray((_num), (_size))
73f7df2e56Smrg#define xnfrealloc(ptr, size) XNFrealloc((void *)(ptr), (unsigned long)(size))
7405b261ecSmrg
7505b261ecSmrg#define xstrdup(s) Xstrdup(s)
7605b261ecSmrg#define xnfstrdup(s) XNFstrdup(s)
77f7df2e56Smrg
78f7df2e56Smrg#define xallocarray(num, size) reallocarray(NULL, (num), (size))
79f7df2e56Smrg#define xnfallocarray(num, size) XNFreallocarray(NULL, (num), (size))
80f7df2e56Smrg#define xnfreallocarray(ptr, num, size) XNFreallocarray((ptr), (num), (size))
8105b261ecSmrg#endif
8205b261ecSmrg
8305b261ecSmrg#include <stdio.h>
8405b261ecSmrg#include <stdarg.h>
85de0a7c19Smacallan#include <string.h>
86de0a7c19Smacallan#include <strings.h>
87de0a7c19Smacallan
8805b261ecSmrg
894202a189Smrg#ifdef DDXBEFORERESET
90f7df2e56Smrgextern void ddxBeforeReset(void);
9105b261ecSmrg#endif
9205b261ecSmrg
934202a189Smrg#ifdef DDXOSVERRORF
94f7df2e56Smrgextern _X_EXPORT void (*OsVendorVErrorFProc) (const char *,
95f7df2e56Smrg                                              va_list args)
96f7df2e56Smrg_X_ATTRIBUTE_PRINTF(1, 0);
974202a189Smrg#endif
9805b261ecSmrg
99f7df2e56Smrgextern _X_EXPORT int WaitForSomething(int *     /*pClientsReady */
100f7df2e56Smrg    );
101f7df2e56Smrg
102f7df2e56Smrgextern _X_EXPORT int ReadRequestFromClient(ClientPtr /*client */ );
10305b261ecSmrg
104f7df2e56Smrg#if XTRANS_SEND_FDS
105f7df2e56Smrgextern _X_EXPORT int ReadFdFromClient(ClientPtr client);
10605b261ecSmrg
107f7df2e56Smrgextern _X_EXPORT int WriteFdToClient(ClientPtr client, int fd, Bool do_close);
108f7df2e56Smrg#endif
109f7df2e56Smrg
110f7df2e56Smrgextern _X_EXPORT Bool InsertFakeRequest(ClientPtr /*client */ ,
111f7df2e56Smrg                                        char * /*data */ ,
112f7df2e56Smrg                                        int /*count */ );
11305b261ecSmrg
114f7df2e56Smrgextern _X_EXPORT void ResetCurrentRequest(ClientPtr /*client */ );
11505b261ecSmrg
1164202a189Smrgextern _X_EXPORT void FlushAllOutput(void);
11705b261ecSmrg
1184202a189Smrgextern _X_EXPORT void FlushIfCriticalOutputPending(void);
11905b261ecSmrg
1204202a189Smrgextern _X_EXPORT void SetCriticalOutputPending(void);
12105b261ecSmrg
122f7df2e56Smrgextern _X_EXPORT int WriteToClient(ClientPtr /*who */ , int /*count */ ,
123f7df2e56Smrg                                   const void * /*buf */ );
12405b261ecSmrg
1254202a189Smrgextern _X_EXPORT void ResetOsBuffers(void);
12605b261ecSmrg
1274202a189Smrgextern _X_EXPORT void InitConnectionLimits(void);
12805b261ecSmrg
1294202a189Smrgextern _X_EXPORT void NotifyParentProcess(void);
130637ac9abSmrg
1314202a189Smrgextern _X_EXPORT void CreateWellKnownSockets(void);
13205b261ecSmrg
1334202a189Smrgextern _X_EXPORT void ResetWellKnownSockets(void);
13405b261ecSmrg
1354202a189Smrgextern _X_EXPORT void CloseWellKnownConnections(void);
13605b261ecSmrg
137f7df2e56Smrgextern _X_EXPORT XID AuthorizationIDOfClient(ClientPtr /*client */ );
13805b261ecSmrg
139f7df2e56Smrgextern _X_EXPORT const char *ClientAuthorized(ClientPtr /*client */ ,
140f7df2e56Smrg                                              unsigned int /*proto_n */ ,
141f7df2e56Smrg                                              char * /*auth_proto */ ,
142f7df2e56Smrg                                              unsigned int /*string_n */ ,
143f7df2e56Smrg                                              char * /*auth_string */ );
14405b261ecSmrg
145f7df2e56Smrgextern _X_EXPORT Bool EstablishNewConnections(ClientPtr clientUnused,
146f7df2e56Smrg                                              void *closure);
14705b261ecSmrg
1484202a189Smrgextern _X_EXPORT void CheckConnections(void);
14905b261ecSmrg
150f7df2e56Smrgextern _X_EXPORT void CloseDownConnection(ClientPtr /*client */ );
15105b261ecSmrg
152f7df2e56Smrgextern _X_EXPORT void AddGeneralSocket(int /*fd */ );
15305b261ecSmrg
154f7df2e56Smrgextern _X_EXPORT void RemoveGeneralSocket(int /*fd */ );
15505b261ecSmrg
156f7df2e56Smrgextern _X_EXPORT void AddEnabledDevice(int /*fd */ );
15705b261ecSmrg
158f7df2e56Smrgextern _X_EXPORT void RemoveEnabledDevice(int /*fd */ );
15905b261ecSmrg
160f7df2e56Smrgextern _X_EXPORT int OnlyListenToOneClient(ClientPtr /*client */ );
16105b261ecSmrg
1624202a189Smrgextern _X_EXPORT void ListenToAllClients(void);
16305b261ecSmrg
164f7df2e56Smrgextern _X_EXPORT void IgnoreClient(ClientPtr /*client */ );
16505b261ecSmrg
166f7df2e56Smrgextern _X_EXPORT void AttendClient(ClientPtr /*client */ );
16705b261ecSmrg
168f7df2e56Smrgextern _X_EXPORT void MakeClientGrabImpervious(ClientPtr /*client */ );
16905b261ecSmrg
170f7df2e56Smrgextern _X_EXPORT void MakeClientGrabPervious(ClientPtr /*client */ );
17105b261ecSmrg
172f7df2e56Smrgextern _X_EXPORT void ListenOnOpenFD(int /* fd */ , int /* noxauth */ );
173f7df2e56Smrg
174f7df2e56Smrgextern _X_EXPORT Bool AddClientOnOpenFD(int /* fd */ );
17505b261ecSmrg
1764202a189Smrgextern _X_EXPORT CARD32 GetTimeInMillis(void);
177f7df2e56Smrgextern _X_EXPORT CARD64 GetTimeInMicros(void);
17805b261ecSmrg
179f7df2e56Smrgextern _X_EXPORT void AdjustWaitForDelay(void *waitTime,
180f7df2e56Smrg                                         unsigned long newdelay);
18105b261ecSmrg
182f7df2e56Smrgtypedef struct _OsTimerRec *OsTimerPtr;
18305b261ecSmrg
184f7df2e56Smrgtypedef CARD32 (*OsTimerCallback) (OsTimerPtr timer,
185f7df2e56Smrg                                   CARD32 time,
186f7df2e56Smrg                                   void *arg);
18705b261ecSmrg
1884202a189Smrgextern _X_EXPORT void TimerInit(void);
18905b261ecSmrg
190f7df2e56Smrgextern _X_EXPORT Bool TimerForce(OsTimerPtr /* timer */ );
19105b261ecSmrg
19205b261ecSmrg#define TimerAbsolute (1<<0)
19305b261ecSmrg#define TimerForceOld (1<<1)
19405b261ecSmrg
195f7df2e56Smrgextern _X_EXPORT OsTimerPtr TimerSet(OsTimerPtr timer,
196f7df2e56Smrg                                     int flags,
197f7df2e56Smrg                                     CARD32 millis,
198f7df2e56Smrg                                     OsTimerCallback func,
199f7df2e56Smrg                                     void *arg);
20005b261ecSmrg
2014202a189Smrgextern _X_EXPORT void TimerCheck(void);
202f7df2e56Smrgextern _X_EXPORT void TimerCancel(OsTimerPtr /* pTimer */ );
203f7df2e56Smrgextern _X_EXPORT void TimerFree(OsTimerPtr /* pTimer */ );
20405b261ecSmrg
2054202a189Smrgextern _X_EXPORT void SetScreenSaverTimer(void);
2064202a189Smrgextern _X_EXPORT void FreeScreenSaverTimer(void);
20705b261ecSmrg
208f7df2e56Smrgextern _X_EXPORT void AutoResetServer(int /*sig */ );
20905b261ecSmrg
210f7df2e56Smrgextern _X_EXPORT void GiveUp(int /*sig */ );
21105b261ecSmrg
2124202a189Smrgextern _X_EXPORT void UseMsg(void);
21305b261ecSmrg
214f7df2e56Smrgextern _X_EXPORT void ProcessCommandLine(int /*argc */ , char * /*argv */ []);
21505b261ecSmrg
216f7df2e56Smrgextern _X_EXPORT int set_font_authorizations(char **authorizations,
217f7df2e56Smrg                                             int *authlen,
218f7df2e56Smrg                                             void *client);
2194202a189Smrg
220f7df2e56Smrg#if 0
221ced5a22fSmrg/*
222ced5a22fSmrg * These causes all sorts of warnings->errors in the xsrc build.
223ced5a22fSmrg */
224ced5a22fSmrg#ifdef __NetBSD__
225ced5a22fSmrg#undef _X_DEPRECATED
226ced5a22fSmrg#define _X_DEPRECATED
227ced5a22fSmrg#endif
22805b261ecSmrg#endif
22905b261ecSmrg
2304202a189Smrg/*
2314202a189Smrg * This function malloc(3)s buffer, terminating the server if there is not
2324202a189Smrg * enough memory.
2334202a189Smrg */
234f7df2e56Smrgextern _X_EXPORT void *
235f7df2e56SmrgXNFalloc(unsigned long /*amount */ );
236f7df2e56Smrg
2374202a189Smrg/*
2384202a189Smrg * This function calloc(3)s buffer, terminating the server if there is not
2394202a189Smrg * enough memory.
2404202a189Smrg */
241f7df2e56Smrgextern _X_EXPORT void *
242f7df2e56SmrgXNFcalloc(unsigned long /*amount */ ) _X_DEPRECATED;
243f7df2e56Smrg
244f7df2e56Smrg/*
245f7df2e56Smrg * This function calloc(3)s buffer, terminating the server if there is not
246f7df2e56Smrg * enough memory or the arguments overflow when multiplied
247f7df2e56Smrg */
248f7df2e56Smrgextern _X_EXPORT void *
249f7df2e56SmrgXNFcallocarray(size_t nmemb, size_t size);
250f7df2e56Smrg
2514202a189Smrg/*
2524202a189Smrg * This function realloc(3)s passed buffer, terminating the server if there is
2534202a189Smrg * not enough memory.
2544202a189Smrg */
255f7df2e56Smrgextern _X_EXPORT void *
256f7df2e56SmrgXNFrealloc(void * /*ptr */ , unsigned long /*amount */ );
257f7df2e56Smrg
258f7df2e56Smrg/*
259f7df2e56Smrg * This function reallocarray(3)s passed buffer, terminating the server if
260f7df2e56Smrg * there is not enough memory or the arguments overflow when multiplied.
261f7df2e56Smrg */
262f7df2e56Smrgextern _X_EXPORT void *
263f7df2e56SmrgXNFreallocarray(void *ptr, size_t nmemb, size_t size);
26405b261ecSmrg
2654202a189Smrg/*
2664202a189Smrg * This function strdup(3)s passed string. The only difference from the library
2674202a189Smrg * function that it is safe to pass NULL, as NULL will be returned.
2684202a189Smrg */
269f7df2e56Smrgextern _X_EXPORT char *
270f7df2e56SmrgXstrdup(const char *s);
27105b261ecSmrg
2724202a189Smrg/*
2734202a189Smrg * This function strdup(3)s passed string, terminating the server if there is
2744202a189Smrg * not enough memory. If NULL is passed to this function, NULL is returned.
2754202a189Smrg */
276f7df2e56Smrgextern _X_EXPORT char *
277f7df2e56SmrgXNFstrdup(const char *s);
27805b261ecSmrg
27965b04b38Smrg/* Include new X*asprintf API */
28065b04b38Smrg#include "Xprintf.h"
28165b04b38Smrg
28265b04b38Smrg/* Older api deprecated in favor of the asprintf versions */
283f7df2e56Smrgextern _X_EXPORT char *
284f7df2e56SmrgXprintf(const char *fmt, ...)
285f7df2e56Smrg_X_ATTRIBUTE_PRINTF(1, 2)
286f7df2e56Smrg    _X_DEPRECATED;
287f7df2e56Smrgextern _X_EXPORT char *
288f7df2e56SmrgXvprintf(const char *fmt, va_list va)
289f7df2e56Smrg_X_ATTRIBUTE_PRINTF(1, 0)
290f7df2e56Smrg    _X_DEPRECATED;
291f7df2e56Smrgextern _X_EXPORT char *
292f7df2e56SmrgXNFprintf(const char *fmt, ...)
293f7df2e56Smrg_X_ATTRIBUTE_PRINTF(1, 2)
294f7df2e56Smrg    _X_DEPRECATED;
295f7df2e56Smrgextern _X_EXPORT char *
296f7df2e56SmrgXNFvprintf(const char *fmt, va_list va)
297f7df2e56Smrg_X_ATTRIBUTE_PRINTF(1, 0)
298f7df2e56Smrg    _X_DEPRECATED;
29905b261ecSmrg
300f7df2e56Smrgtypedef void (*OsSigHandlerPtr) (int /* sig */ );
301f7df2e56Smrgtypedef int (*OsSigWrapperPtr) (int /* sig */ );
30205b261ecSmrg
303f7df2e56Smrgextern _X_EXPORT OsSigHandlerPtr
304f7df2e56SmrgOsSignal(int /* sig */ , OsSigHandlerPtr /* handler */ );
305f7df2e56Smrgextern _X_EXPORT OsSigWrapperPtr
306f7df2e56SmrgOsRegisterSigWrapper(OsSigWrapperPtr newWrap);
30705b261ecSmrg
3084202a189Smrgextern _X_EXPORT int auditTrailLevel;
3094202a189Smrg
310f7df2e56Smrgextern _X_EXPORT void
311f7df2e56SmrgLockServer(void);
312f7df2e56Smrgextern _X_EXPORT void
313f7df2e56SmrgUnlockServer(void);
3144202a189Smrg
315f7df2e56Smrgextern _X_EXPORT int
316f7df2e56SmrgOsLookupColor(int /*screen */ ,
317f7df2e56Smrg              char * /*name */ ,
318f7df2e56Smrg              unsigned /*len */ ,
319f7df2e56Smrg              unsigned short * /*pred */ ,
320f7df2e56Smrg              unsigned short * /*pgreen */ ,
321f7df2e56Smrg              unsigned short * /*pblue */ );
32205b261ecSmrg
323f7df2e56Smrgextern _X_EXPORT void
324f7df2e56SmrgOsInit(void);
32505b261ecSmrg
326f7df2e56Smrgextern _X_EXPORT void
327f7df2e56SmrgOsCleanup(Bool);
32805b261ecSmrg
329f7df2e56Smrgextern _X_EXPORT void
330f7df2e56SmrgOsVendorFatalError(const char *f, va_list args)
331f7df2e56Smrg_X_ATTRIBUTE_PRINTF(1, 0);
33205b261ecSmrg
333f7df2e56Smrgextern _X_EXPORT void
334f7df2e56SmrgOsVendorInit(void);
33505b261ecSmrg
336f7df2e56Smrgextern _X_EXPORT void
337f7df2e56SmrgOsBlockSignals(void);
33805b261ecSmrg
339f7df2e56Smrgextern _X_EXPORT void
340f7df2e56SmrgOsReleaseSignals(void);
3414202a189Smrg
342f7df2e56Smrgextern _X_EXPORT int
343f7df2e56SmrgOsBlockSIGIO(void);
34405b261ecSmrg
345f7df2e56Smrgextern _X_EXPORT void
346f7df2e56SmrgOsReleaseSIGIO(void);
34705b261ecSmrg
348f7df2e56Smrgextern void
349f7df2e56SmrgOsResetSignals(void);
35005b261ecSmrg
351f7df2e56Smrgextern _X_EXPORT void
352f7df2e56SmrgOsAbort(void)
353f7df2e56Smrg    _X_NORETURN;
35405b261ecSmrg
355f7df2e56Smrg#if !defined(WIN32)
356f7df2e56Smrgextern _X_EXPORT int
357f7df2e56SmrgSystem(const char *);
358f7df2e56Smrgextern _X_EXPORT void *
359f7df2e56SmrgPopen(const char *, const char *);
360f7df2e56Smrgextern _X_EXPORT int
361f7df2e56SmrgPclose(void *);
362f7df2e56Smrgextern _X_EXPORT void *
363f7df2e56SmrgFopen(const char *, const char *);
364f7df2e56Smrgextern _X_EXPORT int
365f7df2e56SmrgFclose(void *);
366f7df2e56Smrg#else
36705b261ecSmrg
368f7df2e56Smrgextern const char *
369f7df2e56SmrgWin32TempDir(void);
37005b261ecSmrg
371f7df2e56Smrgextern int
372f7df2e56SmrgSystem(const char *cmdline);
37305b261ecSmrg
374f7df2e56Smrg#define Fopen(a,b) fopen(a,b)
375f7df2e56Smrg#define Fclose(a) fclose(a)
376f7df2e56Smrg#endif
37705b261ecSmrg
378f7df2e56Smrgextern _X_EXPORT void
379f7df2e56SmrgCheckUserParameters(int argc, char **argv, char **envp);
380f7df2e56Smrgextern _X_EXPORT void
381f7df2e56SmrgCheckUserAuthorization(void);
382f7df2e56Smrg
383f7df2e56Smrgextern _X_EXPORT int
384f7df2e56SmrgAddHost(ClientPtr /*client */ ,
385f7df2e56Smrg        int /*family */ ,
386f7df2e56Smrg        unsigned /*length */ ,
387f7df2e56Smrg        const void * /*pAddr */ );
388f7df2e56Smrg
389f7df2e56Smrgextern _X_EXPORT Bool
390f7df2e56SmrgForEachHostInFamily(int family,
391f7df2e56Smrg                    Bool (*func)(
392f7df2e56Smrg                                           unsigned char *addr,
393f7df2e56Smrg                                           short len,
394f7df2e56Smrg                                           void *closure),
395f7df2e56Smrg                    void *closure);
396f7df2e56Smrg
397f7df2e56Smrgextern _X_EXPORT int
398f7df2e56SmrgRemoveHost(ClientPtr client,
399f7df2e56Smrg           int family,
400f7df2e56Smrg           unsigned length,
401f7df2e56Smrg           void *pAddr);
402f7df2e56Smrg
403f7df2e56Smrgextern _X_EXPORT int
404f7df2e56SmrgGetHosts(void ** /*data */ ,
405f7df2e56Smrg         int * /*pnHosts */ ,
406f7df2e56Smrg         int * /*pLen */ ,
407f7df2e56Smrg         BOOL * /*pEnabled */ );
408f7df2e56Smrg
409f7df2e56Smrgtypedef struct sockaddr *sockaddrPtr;
410f7df2e56Smrg
411f7df2e56Smrgextern _X_EXPORT int
412f7df2e56SmrgInvalidHost(sockaddrPtr /*saddr */ , int /*len */ , ClientPtr client);
41305b261ecSmrg
414637ac9abSmrg#define LCC_UID_SET	(1 << 0)
415637ac9abSmrg#define LCC_GID_SET	(1 << 1)
416637ac9abSmrg#define LCC_PID_SET	(1 << 2)
417637ac9abSmrg#define LCC_ZID_SET	(1 << 3)
418637ac9abSmrg
419637ac9abSmrgtypedef struct {
420f7df2e56Smrg    int fieldsSet;              /* Bit mask of fields set */
421f7df2e56Smrg    int euid;                   /* Effective uid */
422f7df2e56Smrg    int egid;                   /* Primary effective group id */
423f7df2e56Smrg    int nSuppGids;              /* Number of supplementary group ids */
424f7df2e56Smrg    int *pSuppGids;             /* Array of supplementary group ids */
425f7df2e56Smrg    int pid;                    /* Process id */
426f7df2e56Smrg    int zoneid;                 /* Only set on Solaris 10 & later */
427637ac9abSmrg} LocalClientCredRec;
428637ac9abSmrg
429f7df2e56Smrgextern _X_EXPORT int
430f7df2e56SmrgGetLocalClientCreds(ClientPtr, LocalClientCredRec **);
431f7df2e56Smrg
432f7df2e56Smrgextern _X_EXPORT void
433f7df2e56SmrgFreeLocalClientCreds(LocalClientCredRec *);
434f7df2e56Smrg
435f7df2e56Smrgextern _X_EXPORT int
436f7df2e56SmrgChangeAccessControl(ClientPtr /*client */ , int /*fEnabled */ );
437f7df2e56Smrg
438f7df2e56Smrgextern _X_EXPORT int
439f7df2e56SmrgGetClientFd(ClientPtr);
440f7df2e56Smrg
441f7df2e56Smrgextern _X_EXPORT Bool
442f7df2e56SmrgClientIsLocal(ClientPtr client);
443f7df2e56Smrg
444f7df2e56Smrgextern _X_EXPORT int
445f7df2e56SmrgGetAccessControl(void);
446f7df2e56Smrg
447f7df2e56Smrgextern _X_EXPORT void
448f7df2e56SmrgAddLocalHosts(void);
449637ac9abSmrg
450f7df2e56Smrgextern _X_EXPORT void
451f7df2e56SmrgResetHosts(const char *display);
45205b261ecSmrg
453f7df2e56Smrgextern _X_EXPORT void
454f7df2e56SmrgEnableLocalAccess(void);
45505b261ecSmrg
456f7df2e56Smrgextern _X_EXPORT void
457f7df2e56SmrgDisableLocalAccess(void);
45805b261ecSmrg
459f7df2e56Smrgextern _X_EXPORT void
460f7df2e56SmrgEnableLocalHost(void);
46105b261ecSmrg
462f7df2e56Smrgextern _X_EXPORT void
463f7df2e56SmrgDisableLocalHost(void);
46405b261ecSmrg
465f7df2e56Smrg#ifndef NO_LOCAL_CLIENT_CRED
466f7df2e56Smrgextern _X_EXPORT void
467f7df2e56SmrgEnableLocalUser(void);
46805b261ecSmrg
469f7df2e56Smrgextern _X_EXPORT void
470f7df2e56SmrgDisableLocalUser(void);
47105b261ecSmrg
472f7df2e56Smrgextern _X_EXPORT void
473f7df2e56SmrgLocalAccessScopeUser(void);
474f7df2e56Smrg#endif
475f7df2e56Smrg
476f7df2e56Smrgextern _X_EXPORT void
477f7df2e56SmrgAccessUsingXdmcp(void);
47805b261ecSmrg
479f7df2e56Smrgextern _X_EXPORT void
480f7df2e56SmrgDefineSelf(int /*fd */ );
48105b261ecSmrg
4824202a189Smrg#if XDMCP
483f7df2e56Smrgextern _X_EXPORT void
484f7df2e56SmrgAugmentSelf(void *from, int len);
48505b261ecSmrg
486f7df2e56Smrgextern _X_EXPORT void
487f7df2e56SmrgRegisterAuthorizations(void);
4884202a189Smrg#endif
48905b261ecSmrg
490f7df2e56Smrgextern _X_EXPORT void
491f7df2e56SmrgInitAuthorization(const char * /*filename */ );
49205b261ecSmrg
4934202a189Smrg/* extern int LoadAuthorization(void); */
49405b261ecSmrg
495f7df2e56Smrgextern _X_EXPORT int
496f7df2e56SmrgAuthorizationFromID(XID id,
497f7df2e56Smrg                    unsigned short *name_lenp,
498f7df2e56Smrg                    const char **namep,
499f7df2e56Smrg                    unsigned short *data_lenp, char **datap);
500f7df2e56Smrg
501f7df2e56Smrgextern _X_EXPORT XID
502f7df2e56SmrgCheckAuthorization(unsigned int /*namelength */ ,
503f7df2e56Smrg                   const char * /*name */ ,
504f7df2e56Smrg                   unsigned int /*datalength */ ,
505f7df2e56Smrg                   const char * /*data */ ,
506f7df2e56Smrg                   ClientPtr /*client */ ,
507f7df2e56Smrg                   const char **        /*reason */
508f7df2e56Smrg    );
509f7df2e56Smrg
510f7df2e56Smrgextern _X_EXPORT void
511f7df2e56SmrgResetAuthorization(void);
512f7df2e56Smrg
513f7df2e56Smrgextern _X_EXPORT int
514f7df2e56SmrgRemoveAuthorization(unsigned short name_length,
515f7df2e56Smrg                    const char *name,
516f7df2e56Smrg                    unsigned short data_length, const char *data);
517f7df2e56Smrg
518f7df2e56Smrgextern _X_EXPORT int
519f7df2e56SmrgAddAuthorization(unsigned int /*name_length */ ,
520f7df2e56Smrg                 const char * /*name */ ,
521f7df2e56Smrg                 unsigned int /*data_length */ ,
522f7df2e56Smrg                 char * /*data */ );
52305b261ecSmrg
5244202a189Smrg#ifdef XCSECURITY
525f7df2e56Smrgextern _X_EXPORT XID
526f7df2e56SmrgGenerateAuthorization(unsigned int /* name_length */ ,
527f7df2e56Smrg                      const char * /* name */ ,
528f7df2e56Smrg                      unsigned int /* data_length */ ,
529f7df2e56Smrg                      const char * /* data */ ,
530f7df2e56Smrg                      unsigned int * /* data_length_return */ ,
531f7df2e56Smrg                      char ** /* data_return */ );
5324202a189Smrg#endif
53305b261ecSmrg
534f7df2e56Smrgextern _X_EXPORT int
535f7df2e56SmrgddxProcessArgument(int /*argc */ , char * /*argv */ [], int /*i */ );
53605b261ecSmrg
537f7df2e56Smrgextern _X_EXPORT void
538f7df2e56SmrgddxUseMsg(void);
53905b261ecSmrg
54005b261ecSmrg/* stuff for ReplyCallback */
5414202a189Smrgextern _X_EXPORT CallbackListPtr ReplyCallback;
54205b261ecSmrgtypedef struct {
54305b261ecSmrg    ClientPtr client;
544637ac9abSmrg    const void *replyData;
545f7df2e56Smrg    unsigned long dataLenBytes; /* actual bytes from replyData + pad bytes */
54605b261ecSmrg    unsigned long bytesRemaining;
54705b261ecSmrg    Bool startOfReply;
548f7df2e56Smrg    unsigned long padBytes;     /* pad bytes from zeroed array */
54905b261ecSmrg} ReplyInfoRec;
55005b261ecSmrg
55105b261ecSmrg/* stuff for FlushCallback */
5524202a189Smrgextern _X_EXPORT CallbackListPtr FlushCallback;
55305b261ecSmrg
554f7df2e56Smrgenum ExitCode {
555f7df2e56Smrg    EXIT_NO_ERROR = 0,
556f7df2e56Smrg    EXIT_ERR_ABORT = 1,
557f7df2e56Smrg    EXIT_ERR_CONFIGURE = 2,
558f7df2e56Smrg    EXIT_ERR_DRIVERS = 3,
559f7df2e56Smrg};
560f7df2e56Smrg
561f7df2e56Smrgextern _X_EXPORT void
562f7df2e56SmrgAbortDDX(enum ExitCode error);
563f7df2e56Smrgextern _X_EXPORT void
564f7df2e56SmrgddxGiveUp(enum ExitCode error);
565f7df2e56Smrgextern _X_EXPORT int
566f7df2e56SmrgTimeSinceLastInputEvent(void);
567f7df2e56Smrg
568f7df2e56Smrg/* Function fallbacks provided by AC_REPLACE_FUNCS in configure.ac */
569f7df2e56Smrg
570f7df2e56Smrg#ifndef HAVE_REALLOCARRAY
571f7df2e56Smrg#define reallocarray xreallocarray
572f7df2e56Smrgextern _X_EXPORT void *
573f7df2e56Smrgreallocarray(void *optr, size_t nmemb, size_t size);
574f7df2e56Smrg#endif
57505b261ecSmrg
576f7df2e56Smrg#ifndef HAVE_STRCASECMP
577637ac9abSmrg#define strcasecmp xstrcasecmp
578f7df2e56Smrgextern _X_EXPORT int
579f7df2e56Smrgxstrcasecmp(const char *s1, const char *s2);
580637ac9abSmrg#endif
581637ac9abSmrg
582f7df2e56Smrg#ifndef HAVE_STRNCASECMP
583637ac9abSmrg#define strncasecmp xstrncasecmp
584f7df2e56Smrgextern _X_EXPORT int
585f7df2e56Smrgxstrncasecmp(const char *s1, const char *s2, size_t n);
586637ac9abSmrg#endif
587637ac9abSmrg
588f7df2e56Smrg#ifndef HAVE_STRCASESTR
589637ac9abSmrg#define strcasestr xstrcasestr
590f7df2e56Smrgextern _X_EXPORT char *
591f7df2e56Smrgxstrcasestr(const char *s, const char *find);
592637ac9abSmrg#endif
593637ac9abSmrg
594f7df2e56Smrg#ifndef HAVE_STRLCPY
595f7df2e56Smrgextern _X_EXPORT size_t
596f7df2e56Smrgstrlcpy(char *dst, const char *src, size_t siz);
597f7df2e56Smrgextern _X_EXPORT size_t
598f7df2e56Smrgstrlcat(char *dst, const char *src, size_t siz);
599f7df2e56Smrg#endif
600f7df2e56Smrg
601f7df2e56Smrg#ifndef HAVE_STRNDUP
602f7df2e56Smrgextern _X_EXPORT char *
603f7df2e56Smrgstrndup(const char *str, size_t n);
604637ac9abSmrg#endif
605637ac9abSmrg
60605b261ecSmrg/* Logging. */
60705b261ecSmrgtypedef enum _LogParameter {
60805b261ecSmrg    XLOG_FLUSH,
60905b261ecSmrg    XLOG_SYNC,
61005b261ecSmrg    XLOG_VERBOSITY,
61105b261ecSmrg    XLOG_FILE_VERBOSITY
61205b261ecSmrg} LogParameter;
61305b261ecSmrg
61405b261ecSmrg/* Flags for log messages. */
61505b261ecSmrgtypedef enum {
616f7df2e56Smrg    X_PROBED,                   /* Value was probed */
617f7df2e56Smrg    X_CONFIG,                   /* Value was given in the config file */
618f7df2e56Smrg    X_DEFAULT,                  /* Value is a default */
619f7df2e56Smrg    X_CMDLINE,                  /* Value was given on the command line */
620f7df2e56Smrg    X_NOTICE,                   /* Notice */
621f7df2e56Smrg    X_ERROR,                    /* Error message */
622f7df2e56Smrg    X_WARNING,                  /* Warning message */
623f7df2e56Smrg    X_INFO,                     /* Informational message */
624f7df2e56Smrg    X_NONE,                     /* No prefix */
625f7df2e56Smrg    X_NOT_IMPLEMENTED,          /* Not implemented */
626f7df2e56Smrg    X_DEBUG,                    /* Debug message */
627f7df2e56Smrg    X_UNKNOWN = -1              /* unknown -- this must always be last */
62805b261ecSmrg} MessageType;
62905b261ecSmrg
630f7df2e56Smrgextern _X_EXPORT const char *
631f7df2e56SmrgLogInit(const char *fname, const char *backup);
632f7df2e56Smrgextern void
633f7df2e56SmrgLogSetDisplay(void);
634f7df2e56Smrgextern _X_EXPORT void
635f7df2e56SmrgLogClose(enum ExitCode error);
636f7df2e56Smrgextern _X_EXPORT Bool
637f7df2e56SmrgLogSetParameter(LogParameter param, int value);
638f7df2e56Smrgextern _X_EXPORT void
639f7df2e56SmrgLogVWrite(int verb, const char *f, va_list args)
640f7df2e56Smrg_X_ATTRIBUTE_PRINTF(2, 0);
641f7df2e56Smrgextern _X_EXPORT void
642f7df2e56SmrgLogWrite(int verb, const char *f, ...)
643f7df2e56Smrg_X_ATTRIBUTE_PRINTF(2, 3);
644f7df2e56Smrgextern _X_EXPORT void
645f7df2e56SmrgLogVMessageVerb(MessageType type, int verb, const char *format, va_list args)
646f7df2e56Smrg_X_ATTRIBUTE_PRINTF(3, 0);
647f7df2e56Smrgextern _X_EXPORT void
648f7df2e56SmrgLogMessageVerb(MessageType type, int verb, const char *format, ...)
649f7df2e56Smrg_X_ATTRIBUTE_PRINTF(3, 4);
650f7df2e56Smrgextern _X_EXPORT void
651f7df2e56SmrgLogMessage(MessageType type, const char *format, ...)
652f7df2e56Smrg_X_ATTRIBUTE_PRINTF(2, 3);
653f7df2e56Smrgextern _X_EXPORT void
654f7df2e56SmrgLogMessageVerbSigSafe(MessageType type, int verb, const char *format, ...)
655f7df2e56Smrg_X_ATTRIBUTE_PRINTF(3, 4);
656f7df2e56Smrgextern _X_EXPORT void
657f7df2e56SmrgLogVMessageVerbSigSafe(MessageType type, int verb, const char *format, va_list args)
658f7df2e56Smrg_X_ATTRIBUTE_PRINTF(3, 0);
659f7df2e56Smrg
660f7df2e56Smrgextern _X_EXPORT void
661f7df2e56SmrgLogVHdrMessageVerb(MessageType type, int verb,
662f7df2e56Smrg                   const char *msg_format, va_list msg_args,
663f7df2e56Smrg                   const char *hdr_format, va_list hdr_args)
664f7df2e56Smrg_X_ATTRIBUTE_PRINTF(3, 0)
665f7df2e56Smrg_X_ATTRIBUTE_PRINTF(5, 0);
666f7df2e56Smrgextern _X_EXPORT void
667f7df2e56SmrgLogHdrMessageVerb(MessageType type, int verb,
668f7df2e56Smrg                  const char *msg_format, va_list msg_args,
669f7df2e56Smrg                  const char *hdr_format, ...)
670f7df2e56Smrg_X_ATTRIBUTE_PRINTF(3, 0)
671f7df2e56Smrg_X_ATTRIBUTE_PRINTF(5, 6);
672f7df2e56Smrgextern _X_EXPORT void
673f7df2e56SmrgLogHdrMessage(MessageType type, const char *msg_format,
674f7df2e56Smrg              va_list msg_args, const char *hdr_format, ...)
675f7df2e56Smrg_X_ATTRIBUTE_PRINTF(2, 0)
676f7df2e56Smrg_X_ATTRIBUTE_PRINTF(4, 5);
677f7df2e56Smrg
678f7df2e56Smrgextern _X_EXPORT void
679f7df2e56SmrgFreeAuditTimer(void);
680f7df2e56Smrgextern _X_EXPORT void
681f7df2e56SmrgAuditF(const char *f, ...)
682f7df2e56Smrg_X_ATTRIBUTE_PRINTF(1, 2);
683f7df2e56Smrgextern _X_EXPORT void
684f7df2e56SmrgVAuditF(const char *f, va_list args)
685f7df2e56Smrg_X_ATTRIBUTE_PRINTF(1, 0);
686f7df2e56Smrgextern _X_EXPORT void
687f7df2e56SmrgFatalError(const char *f, ...)
688f7df2e56Smrg_X_ATTRIBUTE_PRINTF(1, 2)
689f7df2e56Smrg    _X_NORETURN;
69005b261ecSmrg
69105b261ecSmrg#ifdef DEBUG
69205b261ecSmrg#define DebugF ErrorF
69305b261ecSmrg#else
694f7df2e56Smrg#define DebugF(...)             /* */
69505b261ecSmrg#endif
69605b261ecSmrg
697f7df2e56Smrgextern _X_EXPORT void
698f7df2e56SmrgVErrorF(const char *f, va_list args)
699f7df2e56Smrg_X_ATTRIBUTE_PRINTF(1, 0);
700f7df2e56Smrgextern _X_EXPORT void
701f7df2e56SmrgErrorF(const char *f, ...)
702f7df2e56Smrg_X_ATTRIBUTE_PRINTF(1, 2);
703f7df2e56Smrgextern _X_EXPORT void
704f7df2e56SmrgVErrorFSigSafe(const char *f, va_list args)
705f7df2e56Smrg_X_ATTRIBUTE_PRINTF(1, 0);
706f7df2e56Smrgextern _X_EXPORT void
707f7df2e56SmrgErrorFSigSafe(const char *f, ...)
708f7df2e56Smrg_X_ATTRIBUTE_PRINTF(1, 2);
709f7df2e56Smrgextern _X_EXPORT void
710f7df2e56SmrgLogPrintMarkers(void);
711f7df2e56Smrg
712f7df2e56Smrgextern _X_EXPORT void
713f7df2e56Smrgxorg_backtrace(void);
714f7df2e56Smrg
715f7df2e56Smrgextern _X_EXPORT int
716f7df2e56Smrgos_move_fd(int fd);
717f7df2e56Smrg
718f7df2e56Smrg#endif                          /* OS_H */
719