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:
parent
8082f7e6a8
commit
6771c4454e
1 changed files with 8 additions and 1 deletions
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue