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