mirror of
https://github.com/systemd/systemd.git
synced 2024-10-31 16:21:26 +03:00
resolved: when picking a new hostname make sure two hosts pick different ones
This way we can avoid always picking the same replacement hostnames when picking one.
This commit is contained in:
parent
4d91eec42d
commit
556a22945f
@ -1646,7 +1646,7 @@ void manager_refresh_rrs(Manager *m) {
|
|||||||
|
|
||||||
int manager_next_hostname(Manager *m) {
|
int manager_next_hostname(Manager *m) {
|
||||||
const char *p;
|
const char *p;
|
||||||
uint64_t u;
|
uint64_t u, a;
|
||||||
char *h;
|
char *h;
|
||||||
|
|
||||||
assert(m);
|
assert(m);
|
||||||
@ -1664,7 +1664,15 @@ int manager_next_hostname(Manager *m) {
|
|||||||
if (*p == 0 || safe_atou64(p, &u) < 0 || u <= 0)
|
if (*p == 0 || safe_atou64(p, &u) < 0 || u <= 0)
|
||||||
u = 1;
|
u = 1;
|
||||||
|
|
||||||
u++;
|
/* Add a random number to the old value. This way we can avoid
|
||||||
|
* that two hosts pick the same hostname, win on IPv4 and lose
|
||||||
|
* on IPv6 (or vice versa), and pick the same hostname
|
||||||
|
* replacement hostname, ad infinitum. We still want the
|
||||||
|
* numbers to go up monotonically, hence we just add a random
|
||||||
|
* value 1..10 */
|
||||||
|
|
||||||
|
random_bytes(&a, sizeof(a));
|
||||||
|
u += 1 + a % 10;
|
||||||
|
|
||||||
if (asprintf(&h, "%.*s%" PRIu64, (int) (p - m->hostname), m->hostname, u) < 0)
|
if (asprintf(&h, "%.*s%" PRIu64, (int) (p - m->hostname), m->hostname, u) < 0)
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
|
Loading…
Reference in New Issue
Block a user