diff --git a/hw/xfree86/parser/write.c b/hw/xfree86/parser/write.c index 6e96ba053..f4aa03b3d 100644 --- a/hw/xfree86/parser/write.c +++ b/hw/xfree86/parser/write.c @@ -65,9 +65,6 @@ #include #include -#if defined(HAVE_SETEUID) && defined(_POSIX_SAVED_IDS) && _POSIX_SAVED_IDS > 0 -#define HAS_SAVED_IDS_AND_SETEUID -#endif #if defined(WIN32) #define HAS_NO_UIDS #endif @@ -133,38 +130,6 @@ xf86writeConfigFile(const char *filename, XF86ConfigPtr cptr) int ret; if (getuid() != geteuid()) { - -#if !defined(HAS_SAVED_IDS_AND_SETEUID) - int pid, p; - int status; - void (*csig) (int); - - /* Need to fork to change ruid without losing euid */ - csig = OsSignal(SIGCHLD, SIG_DFL); - switch ((pid = fork())) { - case -1: - ErrorF("xf86writeConfigFile(): fork failed (%s)\n", - strerror(errno)); - return 0; - case 0: /* child */ - if (setuid(getuid()) == -1) - FatalError("xf86writeConfigFile(): " - "setuid failed(%s)\n", strerror(errno)); - ret = doWriteConfigFile(filename, cptr); - exit(ret); - break; - default: /* parent */ - do { - p = waitpid(pid, &status, 0); - } while (p == -1 && errno == EINTR); - } - OsSignal(SIGCHLD, csig); - if (p != -1 && WIFEXITED(status) && WEXITSTATUS(status) == 0) - return 1; /* success */ - else - return 0; - -#else /* HAS_SAVED_IDS_AND_SETEUID */ int ruid, euid; ruid = getuid(); @@ -182,9 +147,6 @@ xf86writeConfigFile(const char *filename, XF86ConfigPtr cptr) euid, strerror(errno)); } return ret; - -#endif /* HAS_SAVED_IDS_AND_SETEUID */ - } else #endif /* !HAS_NO_UIDS */ diff --git a/os/utils.c b/os/utils.c index a4712d0bf..1620442c1 100644 --- a/os/utils.c +++ b/os/utils.c @@ -202,10 +202,6 @@ char *SeatId = NULL; sig_atomic_t inSignalContext = FALSE; -#if defined(SVR4) || defined(__linux__) || defined(CSRG_BASED) -#define HAS_SAVED_IDS_AND_SETEUID -#endif - #ifdef MONOTONIC_CLOCK static clockid_t clockid; #endif @@ -1518,78 +1514,6 @@ void * Fopen(const char *file, const char *type) { FILE *iop; - -#ifndef HAS_SAVED_IDS_AND_SETEUID - struct pid *cur; - int pdes[2], pid; - - if (file == NULL || type == NULL) - return NULL; - - if ((*type != 'r' && *type != 'w') || type[1]) - return NULL; - - if ((cur = malloc(sizeof(struct pid))) == NULL) - return NULL; - - if (pipe(pdes) < 0) { - free(cur); - return NULL; - } - - switch (pid = fork()) { - case -1: /* error */ - close(pdes[0]); - close(pdes[1]); - free(cur); - return NULL; - case 0: /* child */ - if (setgid(getgid()) == -1) - _exit(127); - if (setuid(getuid()) == -1) - _exit(127); - if (*type == 'r') { - if (pdes[1] != 1) { - /* stdout */ - dup2(pdes[1], 1); - close(pdes[1]); - } - close(pdes[0]); - } - else { - if (pdes[0] != 0) { - /* stdin */ - dup2(pdes[0], 0); - close(pdes[0]); - } - close(pdes[1]); - } - execl("/bin/cat", "cat", file, (char *) NULL); - _exit(127); - } - - /* Avoid EINTR during stdio calls */ - OsBlockSignals(); - - /* parent */ - if (*type == 'r') { - iop = fdopen(pdes[0], type); - close(pdes[1]); - } - else { - iop = fdopen(pdes[1], type); - close(pdes[0]); - } - - cur->fp = iop; - cur->pid = pid; - cur->next = pidlist; - pidlist = cur; - - DebugF("Fopen(%s), fp = %p\n", file, iop); - - return iop; -#else int ruid, euid; ruid = getuid(); @@ -1605,7 +1529,6 @@ Fopen(const char *file, const char *type) return NULL; } return iop; -#endif /* HAS_SAVED_IDS_AND_SETEUID */ } int @@ -1650,11 +1573,7 @@ Pclose(void *iop) int Fclose(void *iop) { -#ifdef HAS_SAVED_IDS_AND_SETEUID return fclose(iop); -#else - return Pclose(iop); -#endif } #endif /* !WIN32 */