Make setgroups(3) function optional

For example, Interix is missing this function, which prevented
ngIRCd to build on this platform. When setgroups(3) isn't available,
a warning message is issued when ngIRCd starts up.
This commit is contained in:
Alexander Barton 2015-06-06 22:19:47 +02:00
parent 5c48d7e9c7
commit 2fc61ce8a6
2 changed files with 7 additions and 2 deletions

View File

@ -221,8 +221,8 @@ AC_CHECK_FUNCS([ \
# Optional functions # Optional functions
AC_CHECK_FUNCS_ONCE([ AC_CHECK_FUNCS_ONCE([
arc4random arc4random_stir gai_strerror getnameinfo inet_aton \ arc4random arc4random_stir gai_strerror getnameinfo inet_aton \
sigaction sigprocmask snprintf vsnprintf strdup strndup strlcpy strlcat \ setgroups sigaction sigprocmask snprintf strdup strlcat strlcpy \
strtok_r unsetenv waitpid]) strndup strtok_r unsetenv vsnprintf waitpid])
WORKING_GETADDRINFO WORKING_GETADDRINFO

View File

@ -724,6 +724,7 @@ NGIRCd_Init(bool NGIRCd_NoDaemon)
if (real_errno != EPERM) if (real_errno != EPERM)
goto out; goto out;
} }
#ifdef HAVE_SETGROUPS
if (setgroups(0, NULL) != 0) { if (setgroups(0, NULL) != 0) {
real_errno = errno; real_errno = errno;
Log(LOG_ERR, "Can't drop supplementary group IDs: %s!", Log(LOG_ERR, "Can't drop supplementary group IDs: %s!",
@ -731,6 +732,10 @@ NGIRCd_Init(bool NGIRCd_NoDaemon)
if (real_errno != EPERM) if (real_errno != EPERM)
goto out; goto out;
} }
#else
Log(LOG_WARNING,
"Can't drop supplementary group IDs: setgroups(3) missing!");
#endif
} }
#endif #endif