X-Git-Url: https://mattmccutchen.net/rsync/rsync.git/blobdiff_plain/e26cfccf1651a65046d9ed21d1bbde3914f416a2..fdd10da6f7995296f6bb5ee3dd7231d6dbc20b5e:/configure.in diff --git a/configure.in b/configure.in index 58ef9a09..63b66d01 100644 --- a/configure.in +++ b/configure.in @@ -5,7 +5,7 @@ AC_CONFIG_SRCDIR([byteorder.h]) AC_CONFIG_HEADER(config.h) AC_PREREQ(2.59) -RSYNC_VERSION=2.6.8pre1 +RSYNC_VERSION=2.6.9pre2 AC_SUBST(RSYNC_VERSION) AC_MSG_NOTICE([Configuring rsync $RSYNC_VERSION]) @@ -123,15 +123,23 @@ else fi AC_DEFINE_UNQUOTED(RSYNC_RSH, "$RSYNC_RSH", [default -e command]) -AC_MSG_CHECKING([the group for user "nobody"]) -if grep '^nobody:' /etc/group >/dev/null 2>&1; then - NOBODY_GROUP=nobody -elif grep '^nogroup:' /etc/group >/dev/null 2>&1; then - NOBODY_GROUP=nogroup -else - NOBODY_GROUP=nobody # test for others? +AC_ARG_WITH(nobody-group, + AC_HELP_STRING([--with-nobody-group=GROUP], + [set the default unprivileged group (default nobody or nogroup)]), + [ NOBODY_GROUP="$with_nobody_group" ]) + +if test x"$with_nobody_group" = x; then + AC_MSG_CHECKING([the group for user "nobody"]) + if grep '^nobody:' /etc/group >/dev/null 2>&1; then + NOBODY_GROUP=nobody + elif grep '^nogroup:' /etc/group >/dev/null 2>&1; then + NOBODY_GROUP=nogroup + else + NOBODY_GROUP=nobody # test for others? + fi + AC_MSG_RESULT($NOBODY_GROUP) fi -AC_MSG_RESULT($NOBODY_GROUP) + AC_DEFINE_UNQUOTED(NOBODY_USER, "nobody", [unprivileged user--e.g. nobody]) AC_DEFINE_UNQUOTED(NOBODY_GROUP, "$NOBODY_GROUP", [unprivileged group for unprivileged user]) @@ -302,6 +310,31 @@ AC_CHECK_HEADERS(sys/fcntl.h sys/select.h fcntl.h sys/time.h sys/unistd.h \ netdb.h malloc.h float.h limits.h iconv.h libcharset.h langinfo.h) AC_HEADER_MAJOR +AC_CACHE_CHECK([if makedev takes 3 args],rsync_cv_MAKEDEV_TAKES_3_ARGS,[ +AC_TRY_RUN([ +#include +#ifdef MAJOR_IN_MKDEV +#include +# if !defined makedev && (defined mkdev || defined _WIN32 || defined __WIN32__) +# define makedev mkdev +# endif +#elif defined MAJOR_IN_SYSMACROS +#include +#endif + +int main(void) +{ + dev_t dev = makedev(0, 5, 7); + if (major(dev) != 5 || minor(dev) != 7) + exit(1); + return 0; +} +], +rsync_cv_MAKEDEV_TAKES_3_ARGS=yes,rsync_cv_MAKEDEV_TAKES_3_ARGS=no,rsync_cv_MAKEDEV_TAKES_3_ARGS=no)]) +if test x"$rsync_cv_MAKEDEV_TAKES_3_ARGS" = x"yes"; then + AC_DEFINE(MAKEDEV_TAKES_3_ARGS, 1, [Define to 1 if makedev() takes 3 args]) +fi + AC_CHECK_SIZEOF(int) AC_CHECK_SIZEOF(long) AC_CHECK_SIZEOF(long long) @@ -502,8 +535,7 @@ if test $ac_cv_func_getpgrp = yes; then AC_FUNC_GETPGRP fi -# Determine whether chown follows symlinks (it should). -AC_CACHE_CHECK([whether chown() dereferences symlinks],rsync_cv_chown_follows_symlink,[ +AC_CACHE_CHECK([whether chown() modifies symlinks],rsync_cv_chown_modifies_symlink,[ AC_TRY_RUN([ #if HAVE_UNISTD_H # include @@ -514,14 +546,52 @@ AC_CACHE_CHECK([whether chown() dereferences symlinks],rsync_cv_chown_follows_sy char const *dangling_symlink = "conftest.dangle"; unlink(dangling_symlink); if (symlink("conftest.no-such", dangling_symlink) < 0) abort(); - if (chown(dangling_symlink, getuid(), getgid()) < 0 && errno == ENOENT) exit(0); - exit(1); + if (chown(dangling_symlink, getuid(), getgid()) < 0 && errno == ENOENT) exit(1); + exit(0); }], - rsync_cv_chown_follows_symlink=yes,rsync_cv_chown_follows_symlink=no,rsync_cv_chown_follows_symlink=yes)]) -if test $rsync_cv_chown_follows_symlink = no; then + rsync_cv_chown_modifies_symlink=yes,rsync_cv_chown_modifies_symlink=no,rsync_cv_chown_modifies_symlink=no)]) +if test $rsync_cv_chown_modifies_symlink = yes; then AC_DEFINE(CHOWN_MODIFIES_SYMLINK, 1, [Define to 1 if chown modifies symlinks.]) fi +AC_CACHE_CHECK([whether link() can hard-link symlinks],rsync_cv_can_hardlink_symlink,[ + AC_TRY_RUN([ +#if HAVE_UNISTD_H +# include +#endif +#include +#include +#define FILENAME "conftest.dangle" + main() { + unlink(FILENAME); + if (symlink("conftest.no-such", FILENAME) < 0) abort(); + if (link(FILENAME, FILENAME "2") < 0) exit(1); + exit(0); + }], + rsync_cv_can_hardlink_symlink=yes,rsync_cv_can_hardlink_symlink=no,rsync_cv_can_hardlink_symlink=no)]) +if test $rsync_cv_can_hardlink_symlink = yes; then + AC_DEFINE(CAN_HARDLINK_SYMLINK, 1, [Define to 1 if link() can hard-link symlinks.]) +fi + +AC_CACHE_CHECK([whether link() can hard-link special files],rsync_cv_can_hardlink_special,[ + AC_TRY_RUN([ +#if HAVE_UNISTD_H +# include +#endif +#include +#include +#define FILENAME "conftest.fifi" + main() { + unlink(FILENAME); + if (mkfifo(FILENAME, 0777) < 0) abort(); + if (link(FILENAME, FILENAME "2") < 0) exit(1); + exit(0); + }], + rsync_cv_can_hardlink_special=yes,rsync_cv_can_hardlink_special=no,rsync_cv_can_hardlink_special=no)]) +if test $rsync_cv_can_hardlink_special = yes; then + AC_DEFINE(CAN_HARDLINK_SPECIAL, 1, [Define to 1 if link() can hard-link special files.]) +fi + AC_CACHE_CHECK([for working socketpair],rsync_cv_HAVE_SOCKETPAIR,[ AC_TRY_RUN([ #include @@ -650,35 +720,6 @@ if test x"$rsync_cv_HAVE_SECURE_MKSTEMP" = x"yes"; then fi -AC_CACHE_CHECK([for broken inet_ntoa],rsync_cv_REPLACE_INET_NTOA,[ -AC_TRY_RUN([ -#include -#include -#include -#include -main() { struct in_addr ip; ip.s_addr = 0x12345678; -if (strcmp(inet_ntoa(ip),"18.52.86.120") && - strcmp(inet_ntoa(ip),"120.86.52.18")) { exit(1); } -exit(0);}], - rsync_cv_REPLACE_INET_NTOA=no,rsync_cv_REPLACE_INET_NTOA=yes,rsync_cv_REPLACE_INET_NTOA=cross)]) -if test x"$rsync_cv_REPLACE_INET_NTOA" = x"yes"; then - AC_DEFINE(REPLACE_INET_NTOA, 1, [Define to 1 if inet_ntoa() needs to be replaced]) -fi - - -AC_CACHE_CHECK([for broken inet_aton],rsync_cv_REPLACE_INET_ATON,[ -AC_TRY_RUN([ -#include -#include -#include -#include -main() { struct in_addr ip; -if (inet_aton("example", &ip) == 0) exit(0); exit(1);}], - rsync_cv_REPLACE_INET_ATON=no,rsync_cv_REPLACE_INET_ATON=yes,rsync_cv_REPLACE_INET_ATON=cross)]) -if test x"$rsync_cv_REPLACE_INET_ATON" = x"yes"; then - AC_DEFINE(REPLACE_INET_ATON, 1, [Define to 1 if inet_aton() needs to be replaced]) -fi - AC_CACHE_CHECK([if mknod creates FIFOs],rsync_cv_MKNOD_CREATES_FIFOS,[ AC_TRY_RUN([ #include