From c8928081a5a9cbfaf16b14d4db57476bda8e1189 Mon Sep 17 00:00:00 2001 From: "Eric S. Raymond" Date: Wed, 4 Sep 2002 13:59:02 +0000 Subject: Cygwin port fix. svn path=/trunk/; revision=3692 --- fetchmail.c | 6 +++--- fetchmail.h | 6 ++++++ idle.c | 6 ++++-- lock.c | 2 +- sink.c | 6 +++++- 5 files changed, 19 insertions(+), 7 deletions(-) diff --git a/fetchmail.c b/fetchmail.c index 93f4754a..78f3993f 100644 --- a/fetchmail.c +++ b/fetchmail.c @@ -492,7 +492,7 @@ int main(int argc, char **argv) * but ignore them otherwise so as not to interrupt a poll. */ signal(SIGUSR1, SIG_IGN); - if (run.poll_interval && !getuid()) + if (run.poll_interval && getuid() == ROOT_UID) signal(SIGHUP, SIG_IGN); } else @@ -732,7 +732,7 @@ int main(int argc, char **argv) * for people who think all system daemons wake up on SIGHUP. */ signal(SIGUSR1, donothing); - if (!getuid()) + if (getuid() != ROOT_UID) signal(SIGHUP, donothing); /* @@ -1187,7 +1187,7 @@ static int load_params(int argc, char **argv, int optind) */ if (!run.postmaster) { - if (getuid()) /* ordinary user */ + if (getuid() != ROOT_UID) /* ordinary user */ run.postmaster = user; else /* root */ run.postmaster = "postmaster"; diff --git a/fetchmail.h b/fetchmail.h index bf67a280..7b2f0436 100644 --- a/fetchmail.h +++ b/fetchmail.h @@ -647,4 +647,10 @@ char *strerror (); } while(0) #endif /* FETCHMAIL_DEBUG */ +#ifdef __CYGWIN__ +#define ROOT_UID 18 +#else /* !__CYGWIN__ */ +#define ROOT_UID 0 +#endif /* __CYGWIN__ */ + /* fetchmail.h ends here */ diff --git a/idle.c b/idle.c index 8e6f36dc..155f434b 100644 --- a/idle.c +++ b/idle.c @@ -22,6 +22,7 @@ MIT license. Compile with -DMAIN to build the demonstrator. #include #include #include +#include /* for ROOT_UID */ #ifndef TRUE #define TRUE 1 @@ -154,12 +155,13 @@ int interruptible_idle(int seconds) pause(); signal(SIGALRM, SIG_IGN); #endif /* ! EMX */ - if (lastsig == SIGUSR1 || ((seconds && !getuid()) && lastsig == SIGHUP)) + if (lastsig == SIGUSR1 || ((seconds && getuid() == ROOT_UID) + && lastsig == SIGHUP)) awoken = TRUE; /* now lock out interrupts again */ signal(SIGUSR1, SIG_IGN); - if (!getuid()) + if (getuid() == ROOT_UID) signal(SIGHUP, SIG_IGN); return(awoken ? lastsig : 0); diff --git a/lock.c b/lock.c index 2aa7a051..8b3f03f3 100644 --- a/lock.c +++ b/lock.c @@ -29,7 +29,7 @@ void lock_setup(void) { /* set up to do lock protocol */ #define FETCHMAIL_PIDFILE "fetchmail.pid" - if (!getuid()) { + if (getuid() == ROOT_UID) { lockfile = (char *)xmalloc( sizeof(PID_DIR) + sizeof(FETCHMAIL_PIDFILE) + 1); sprintf(lockfile, "%s/%s", PID_DIR, FETCHMAIL_PIDFILE); diff --git a/sink.c b/sink.c index ca2dc657..4e160206 100644 --- a/sink.c +++ b/sink.c @@ -937,6 +937,9 @@ static int open_mda_sink(struct query *ctl, struct msgblk *msg, #ifdef HAVE_SIGACTION struct sigaction sa_new; #endif /* HAVE_SIGACTION */ +#ifdef HAVE_SETEUID + uid_t orig_uid; +#endif /* HAVE_SETEUID */ struct idlist *idp; int length = 0, fromlen = 0, nameslen = 0; char *names = NULL, *before, *after, *from = NULL; @@ -1062,6 +1065,7 @@ static int open_mda_sink(struct query *ctl, struct msgblk *msg, * MDA creates properly. (The seteuid call is available * under all BSDs and Linux) */ + orig_uid = getuid(); seteuid(ctl->uid); #endif /* HAVE_SETEUID */ @@ -1071,7 +1075,7 @@ static int open_mda_sink(struct query *ctl, struct msgblk *msg, #ifdef HAVE_SETEUID /* this will fail quietly if we didn't start as root */ - seteuid(0); + seteuid(orig_uid); #endif /* HAVE_SETEUID */ if (!sinkfp) -- cgit v1.2.3