aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorWayne Davison <wayned@samba.org>2015-08-24 10:07:43 -0700
committerWayne Davison <wayned@samba.org>2015-08-24 10:09:57 -0700
commit3da1dc4d188b108933240dcac72121985e3fea88 (patch)
tree8c92f0bf3f769f3d89c1775815f3c248b1f73259
parentabfb41e63e9c18f05984bad5ac5a627f38b278ed (diff)
downloadandroid_external_rsync-3da1dc4d188b108933240dcac72121985e3fea88.tar.gz
android_external_rsync-3da1dc4d188b108933240dcac72121985e3fea88.tar.bz2
android_external_rsync-3da1dc4d188b108933240dcac72121985e3fea88.zip
Add configure option to set max daemon gid list.
Fixes bug 11456.
-rw-r--r--NEWS1
-rw-r--r--clientserver.c8
-rw-r--r--configure.ac8
3 files changed, 12 insertions, 5 deletions
diff --git a/NEWS b/NEWS
index b4e92f40..9a3ddd57 100644
--- a/NEWS
+++ b/NEWS
@@ -31,6 +31,7 @@ Changes since 3.1.1:
DEVELOPER RELATED:
+ - Added --with-max-daemon-gid=NUM option to configure.
- Fixed a bug with the Makefile's use of INSTALL_STRIP.
- Improve a test in the suite that could get an erroneous timestamp error.
- Tweaks for newer versions of git in the packaging tools.
diff --git a/clientserver.c b/clientserver.c
index 3f720b02..cf602a17 100644
--- a/clientserver.c
+++ b/clientserver.c
@@ -60,8 +60,6 @@ extern char *iconv_opt;
extern iconv_t ic_send, ic_recv;
#endif
-#define MAX_GID_LIST 32
-
char *auth_user;
int read_only = 0;
int module_id = -1;
@@ -81,7 +79,7 @@ static int rl_nulls = 0;
static struct sigaction sigact;
#endif
-static gid_t gid_list[MAX_GID_LIST];
+static gid_t gid_list[MAX_DAEMON_GID_LIST];
static int gid_count = 0;
/* Used when "reverse lookup" is off. */
@@ -444,7 +442,7 @@ static int add_a_group(int f_out, const char *gname)
io_printf(f_out, "@ERROR: invalid gid %s\n", gname);
return -1;
}
- if (gid_count == MAX_GID_LIST) {
+ if (gid_count == MAX_DAEMON_GID_LIST) {
rprintf(FLOG, "Too many groups specified via gid parameter.\n");
io_printf(f_out, "@ERROR: too many groups\n");
return -1;
@@ -457,7 +455,7 @@ static int add_a_group(int f_out, const char *gname)
static int want_all_groups(int f_out, uid_t uid)
{
const char *err;
- gid_count = MAX_GID_LIST;
+ gid_count = MAX_DAEMON_GID_LIST;
if ((err = getallgroups(uid, gid_list, &gid_count)) != NULL) {
rsyserr(FLOG, errno, "%s", err);
io_printf(f_out, "@ERROR: %s\n", err);
diff --git a/configure.ac b/configure.ac
index 3aca2a10..89753667 100644
--- a/configure.ac
+++ b/configure.ac
@@ -98,6 +98,14 @@ AC_ARG_WITH(rsync-path,
AC_DEFINE_UNQUOTED(RSYNC_PATH, "$RSYNC_PATH", [location of rsync on remote machine])
+AC_ARG_WITH(max-daemon-gid,
+ AS_HELP_STRING([--with-max-daemon-gid=NUM],
+ [set maximum number of GIDs in the daemon "gid=LIST" config item (default: 32)]),
+ [ MAX_DAEMON_GID_LIST=$with_max_daemon_gid ],
+ [ MAX_DAEMON_GID_LIST=32 ])
+
+AC_DEFINE_UNQUOTED(MAX_DAEMON_GID_LIST, $MAX_DAEMON_GID_LIST, [maximum GIDs in a daemon module gid list])
+
AC_ARG_WITH(rsyncd-conf,
AS_HELP_STRING([--with-rsyncd-conf=PATH],[set configuration file for rsync server to PATH (default: /etc/rsyncd.conf)]),
[ if test ! -z "$with_rsyncd_conf" ; then