summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
authorJason A. Donenfeld <Jason@zx2c4.com>2020-01-31 18:56:52 +0100
committerJason A. Donenfeld <Jason@zx2c4.com>2020-01-31 18:56:52 +0100
commit6771c4454eab2661166c1c672db7b76ff3f18020 (patch)
treee0e9b12fec4f949a1079e1162519fc68a99a1fe4
parentversion: bump (diff)
downloadwireguard-tools-6771c4454eab2661166c1c672db7b76ff3f18020.tar.xz
wireguard-tools-6771c4454eab2661166c1c672db7b76ff3f18020.zip
wg-quick: android: split uids into multiple commands
Different versions of netd have different limits on how many can be passed at once. Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com> Reported-by: Alexey <zaranecc@bk.ru>
-rw-r--r--src/wg-quick/android.c9
1 files changed, 8 insertions, 1 deletions
diff --git a/src/wg-quick/android.c b/src/wg-quick/android.c
index cedc8a7..54ea81c 100644
--- a/src/wg-quick/android.c
+++ b/src/wg-quick/android.c
@@ -785,6 +785,7 @@ static uid_t *get_uid_list(const char *selected_applications)
static void set_users(unsigned int netid, const char *excluded_applications)
{
_cleanup_free_ uid_t *excluded_uids = get_uid_list(excluded_applications);
+ unsigned int args_per_command = 0;
_cleanup_free_ char *ranges = NULL;
char range[22];
uid_t start;
@@ -797,13 +798,19 @@ static void set_users(unsigned int netid, const char *excluded_applications)
else
snprintf(range, sizeof(range), "%u-%u", start, *excluded_uids - 1);
ranges = concat_and_free(ranges, " ", range);
+ if (++args_per_command % 18 == 0) {
+ cndc("network users add %u %s", netid, ranges);
+ free(ranges);
+ ranges = NULL;
+ }
}
if (start < 99999) {
snprintf(range, sizeof(range), "%u-99999", start);
ranges = concat_and_free(ranges, " ", range);
}
- cndc("network users add %u %s", netid, ranges);
+ if (ranges)
+ cndc("network users add %u %s", netid, ranges);
}
static void set_dnses(unsigned int netid, const char *dnses)