--- daemon.c.orig 2010-02-04 23:23:19 -0800 +++ daemon.c 2010-02-04 23:40:01 -0800 @@ -14,6 +14,10 @@ #define NI_MAXSERV 32 #endif +#ifdef __INTERIX +#include +#endif + static int log_syslog; static int verbose; static int reuseaddr; @@ -914,10 +918,19 @@ die("unable to allocate any listen sockets on host %s port %u", listen_addr, listen_port); +#ifdef __INTERIX + if (pass) + if (setuser(pass->pw_name, NULL, SU_COMPLETE) != 0) + die("cannot drop privileges"); + if (gid && (gid != getgid())) + if (setgid(gid) != 0) + die("cannot setgid()"); +#else if (pass && gid && (initgroups(pass->pw_name, gid) || setgid (gid) || setuid(pass->pw_uid))) die("cannot drop privileges"); +#endif return service_loop(socknum, socklist); } --- git-compat-util.h.orig 2010-02-05 00:11:04 -0800 +++ git-compat-util.h 2010-02-05 00:12:30 -0800 @@ -93,7 +93,11 @@ #include #ifndef __MINGW32__ #include +#ifdef __INTERIX +#include +#else #include +#endif #include #include #ifndef NO_SYS_SELECT_H @@ -105,6 +109,9 @@ #include #include #include +#ifdef __INTERIX +#include +#endif #if defined(__CYGWIN__) #undef _XOPEN_SOURCE #include @@ -448,10 +455,16 @@ #define ST_CTIME_NSEC(st) ((unsigned int)((st).st_ctimespec.tv_nsec)) #define ST_MTIME_NSEC(st) ((unsigned int)((st).st_mtimespec.tv_nsec)) #else +#ifdef __INTERIX +/* or is this just a general bug? */ +#define ST_CTIME_NSEC(st) ((unsigned int)((st).st_ctime.tv_nsec)) +#define ST_MTIME_NSEC(st) ((unsigned int)((st).st_mtime.tv_nsec)) +#else #define ST_CTIME_NSEC(st) ((unsigned int)((st).st_ctim.tv_nsec)) #define ST_MTIME_NSEC(st) ((unsigned int)((st).st_mtim.tv_nsec)) #endif #endif +#endif #ifdef UNRELIABLE_FSTAT #define fstat_is_reliable() 0