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>
This commit is contained in:
Jason A. Donenfeld 2020-01-31 18:56:52 +01:00
parent 8082f7e6a8
commit 6771c4454e

View file

@ -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) static void set_users(unsigned int netid, const char *excluded_applications)
{ {
_cleanup_free_ uid_t *excluded_uids = get_uid_list(excluded_applications); _cleanup_free_ uid_t *excluded_uids = get_uid_list(excluded_applications);
unsigned int args_per_command = 0;
_cleanup_free_ char *ranges = NULL; _cleanup_free_ char *ranges = NULL;
char range[22]; char range[22];
uid_t start; uid_t start;
@ -797,12 +798,18 @@ static void set_users(unsigned int netid, const char *excluded_applications)
else else
snprintf(range, sizeof(range), "%u-%u", start, *excluded_uids - 1); snprintf(range, sizeof(range), "%u-%u", start, *excluded_uids - 1);
ranges = concat_and_free(ranges, " ", range); 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) { if (start < 99999) {
snprintf(range, sizeof(range), "%u-99999", start); snprintf(range, sizeof(range), "%u-99999", start);
ranges = concat_and_free(ranges, " ", range); ranges = concat_and_free(ranges, " ", range);
} }
if (ranges)
cndc("network users add %u %s", netid, ranges); cndc("network users add %u %s", netid, ranges);
} }