threads / discuss / 25557

add support for SUA (interix)

Subject: add support for SUA (interix)

## tl;dr

6 messages between Oct 27, 2010 and Oct 29, 2010.

replies: 5people: 3as markdown or json

mduft@s01en22.salomon.at· Oct 27, 2010, 08:39 UTC · re: mduft@s01en22.salomon.at · lore

[PATCH 1/2] add support for the SUA layer (interix; windows)

From: Markus Duft <mduft@gentoo.org>
* add required build options to Makefile.
* introduce new NO_INTTYPES_H for systems lacking inttypes; code
  includes stdint.h instead, if this is set.
* introduce new NO_SYS_POLL_H for systems lacking sys/poll.h; code
  includes poll.h instead, if this is set.
* introduce NO_INITGROUPS. initgroups() call is simply omitted.
Signed-off-by: Markus Duft <mduft@gentoo.org>
---
 Makefile          |   28 ++++++++++++++++++++++++++++
 daemon.c          |    6 +++++-
 git-compat-util.h |    8 ++++++++
 3 files changed, 41 insertions(+), 1 deletions(-)
diff --git a/Makefile b/Makefile
index 1f1ce04..c9d8c9e 100644
--- a/Makefile
+++ b/Makefile
@@ -1096,6 +1096,25 @@ else
 endif
 	X = .exe
 endif
+ifeq ($(uname_S),Interix)
+	NO_SYS_POLL_H = YesPlease
+	NO_INTTYPES_H = YesPlease
+	NO_INITGROUPS = YesPlease
+	NO_IPV6 = YesPlease
+	NO_MEMMEM = YesPlease
+	NO_MKDTEMP = YesPlease
+	NO_STRTOUMAX = YesPlease
+	NO_NSEC = YesPlease
+	NO_MKSTEMPS = YesPlease
+	ifeq ($(uname_R),3.5)
+		NO_INET_NTOP = YesPlease
+		NO_INET_PTON = YesPlease
+	endif
+	ifeq ($(uname_R),5.2)
+		NO_INET_NTOP = YesPlease
+		NO_INET_PTON = YesPlease
+	endif
+endif
 ifneq (,$(findstring MINGW,$(uname_S)))
 	pathsep = ;
 	NO_PREAD = YesPlease
@@ -1360,6 +1379,15 @@ endif
 ifdef NO_SYS_SELECT_H
 	BASIC_CFLAGS += -DNO_SYS_SELECT_H
 endif
+ifdef NO_SYS_POLL_H
+	BASIC_CFLAGS += -DNO_SYS_POLL_H
+endif
+ifdef NO_INTTYPES_H
+	BASIC_CFLAGS += -DNO_INTTYPES_H
+endif
+ifdef NO_INITGROUPS
+	BASIC_CFLAGS += -DNO_INITGROUPS
+endif
 ifdef NO_MMAP
 	COMPAT_CFLAGS += -DNO_MMAP
 	COMPAT_OBJS += compat/mmap.o
diff --git a/daemon.c b/daemon.c
index 9326d3a..d68a31f 100644
--- a/daemon.c
+++ b/daemon.c
@@ -956,7 +956,11 @@ static int serve(char *listen_addr, int listen_port, struct passwd *pass, gid_t
 		    listen_addr, listen_port);
 
 	if (pass && gid &&
-	    (initgroups(pass->pw_name, gid) || setgid (gid) ||
+	    (
+#ifndef NO_INITGROUPS
+		    initgroups(pass->pw_name, gid) || 
+#endif
+	     setgid (gid) ||
 	     setuid(pass->pw_uid)))
 		die("cannot drop privileges");
 
diff --git a/git-compat-util.h b/git-compat-util.h
index 2af8d3e..625b2e4 100644
--- a/git-compat-util.h
+++ b/git-compat-util.h
@@ -106,7 +106,11 @@
 #include <utime.h>
 #ifndef __MINGW32__
 #include <sys/wait.h>
+#ifndef NO_SYS_POLL_H
 #include <sys/poll.h>
+#else
+#include <poll.h>
+#endif
 #include <sys/socket.h>
 #include <sys/ioctl.h>
 #include <termios.h>
@@ -118,7 +122,11 @@
 #include <arpa/inet.h>
 #include <netdb.h>
 #include <pwd.h>
+#ifndef NO_INTTYPES_H
 #include <inttypes.h>
+#else
+#include <stdint.h>
+#endif
 #if defined(__CYGWIN__)
 #undef _XOPEN_SOURCE
 #include <grp.h>
-- 
1.7.2.2
Junio C Hamano· Oct 29, 2010, 00:50 UTC · re: mduft@s01en22.salomon.at · lore

Re: [PATCH 1/2] add support for the SUA layer (interix; windows)

mduft@s01en22.salomon.at writes:
Show 17 quoted lines
> diff --git a/daemon.c b/daemon.c
> index 9326d3a..d68a31f 100644
> --- a/daemon.c
> +++ b/daemon.c
> @@ -956,7 +956,11 @@ static int serve(char *listen_addr, int listen_port, struct passwd *pass, gid_t
>  		    listen_addr, listen_port);
>  
>  	if (pass && gid &&
> -	    (initgroups(pass->pw_name, gid) || setgid (gid) ||
> +	    (
> +#ifndef NO_INITGROUPS
> +		    initgroups(pass->pw_name, gid) || 
> +#endif
> +	     setgid (gid) ||
>  	     setuid(pass->pw_uid)))
>  		die("cannot drop privileges");
>  
It would be much nicer to do this:
        #ifdef NO_INITGROUPS
        #define initgroups(x,y) (0) /* nothing */
        #endif

near the beginning of the file. That would make life of people who have changes in flight that would touch the same area of the code a lot easier.

Markus Duft· Oct 29, 2010, 05:27 UTC · re: Junio C Hamano · lore

Re: [PATCH 1/2] add support for the SUA layer (interix; windows)

On 10/29/2010 02:50 AM, Junio C Hamano wrote:
> mduft@s01en22.salomon.at writes:
[snip]
Show 9 quoted lines
> 
> It would be much nicer to do this:
> 
>         #ifdef NO_INITGROUPS
>         #define initgroups(x,y) (0) /* nothing */
>         #endif
> 
> near the beginning of the file.  That would make life of people who have
> changes in flight that would touch the same area of the code a lot easier.
ok, i see the point, thanks for your suggestion! I'll change this.

may i ask where i should send v3 of the patch so it gets processed further? just the ml again, or is there a specific maintainer i should send this to?

regards, thanks for the help :) Markus

Junio C Hamano· Oct 29, 2010, 16:08 UTC · re: Markus Duft · lore

Re: [PATCH 1/2] add support for the SUA layer (interix; windows)

Markus Duft <mduft@gentoo.org> writes:
Show 17 quoted lines
> On 10/29/2010 02:50 AM, Junio C Hamano wrote:
>> mduft@s01en22.salomon.at writes:
> [snip]
>> 
>> It would be much nicer to do this:
>> 
>>         #ifdef NO_INITGROUPS
>>         #define initgroups(x,y) (0) /* nothing */
>>         #endif
>> 
>> near the beginning of the file.  That would make life of people who have
>> changes in flight that would touch the same area of the code a lot easier.
>
> ok, i see the point, thanks for your suggestion! I'll change this.
>
> may i ask where i should send v3 of the patch so it gets processed further?
> just the ml again, or is there a specific maintainer i should send this to?

If your v3 will be different from your v2 with only that change, there is no need to resend. Please check what I queued in 'pu'---it has the above fix already squashed in.

mduft@s01en22.salomon.at· Oct 27, 2010, 08:39 UTC · re: mduft@s01en22.salomon.at · lore

[PATCH 2/2] add configure checks for previously created feature flags

From: Markus Duft <mduft@gentoo.org>
 *) add check for sys/poll.h. define NO_SYS_POLL_H otherwise.
 *) add check for inttypes.h, define NO_INTTYPES_H otherwise.
 *) add check for initgroups(), define NO_INITGROUPS otherwise.
Signed-off-by: Markus Duft <mduft@gentoo.org>
---
 configure.ac |   18 ++++++++++++++++++
 1 files changed, 18 insertions(+), 0 deletions(-)
diff --git a/configure.ac b/configure.ac
index cc55b6d..c5bc9a0 100644
--- a/configure.ac
+++ b/configure.ac
@@ -617,6 +617,18 @@ AC_CHECK_HEADER([sys/select.h],
 [NO_SYS_SELECT_H=UnfortunatelyYes])
 AC_SUBST(NO_SYS_SELECT_H)
 #
+# Define NO_SYS_POLL_H if you don't have sys/poll.h
+AC_CHECK_HEADER([sys/poll.h],
+[NO_SYS_POLL_H=],
+[NO_SYS_POLL_H=UnfortunatelyYes])
+AC_SUBST(NO_SYS_POLL_H)
+#
+# Define NO_INTTYPES_H if you don't have inttypes.h
+AC_CHECK_HEADER([inttypes.h],
+[NO_INTTYPES_H=],
+[NO_INTTYPES_H=UnfortunatelyYes])
+AC_SUBST(NO_INTTYPES_H)
+#
 # Define OLD_ICONV if your library has an old iconv(), where the second
 # (input buffer pointer) parameter is declared with type (const char **).
 AC_DEFUN([OLDICONVTEST_SRC], [[
@@ -868,6 +880,12 @@ GIT_CHECK_FUNC(mkstemps,
 [NO_MKSTEMPS=YesPlease])
 AC_SUBST(NO_MKSTEMPS)
 #
+# Define NO_INITGROUPS if you don't have initgroups in the C library.
+GIT_CHECK_FUNC(initgroups,
+[NO_INITGROUPS=],
+[NO_INITGROUPS=YesPlease])
+AC_SUBST(NO_INITGROUPS)
+#
 #
 # Define NO_MMAP if you want to avoid mmap.
 #
-- 
1.7.2.2

← back to recent threads