1
0
mirror of https://github.com/samba-team/samba.git synced 2025-01-08 21:18:16 +03:00

ctdb-tools: Don't trust non-hosting nodes in "ctdb ip all"

Redundant RELEASE_IPs gives nodes a preview of where an IP address
will move to.  However, if the associated TAKEOVER_IP fails then the
node will actually be unhosted.

This is similar to commit 77a29b3733.

BUG: https://bugzilla.samba.org/show_bug.cgi?id=12470

Signed-off-by: Martin Schwenke <martin@meltin.net>
Reviewed-by: Amitay Isaacs <amitay@gmail.com>

Autobuild-User(master): Amitay Isaacs <amitay@samba.org>
Autobuild-Date(master): Fri Dec 16 12:32:02 CET 2016 on sn-devel-144
This commit is contained in:
Martin Schwenke 2016-12-13 11:16:05 +11:00 committed by Amitay Isaacs
parent 2514a9cd17
commit cd20ced3fb

View File

@ -1536,11 +1536,34 @@ static int get_all_public_ips(struct ctdb_context *ctdb, TALLOC_CTX *mem_ctx,
ip.pnn = ips->ip[j].pnn;
ip.addr = ips->ip[j].addr;
ret = db_hash_add(ipdb, (uint8_t *)&ip.addr,
sizeof(ip.addr),
(uint8_t *)&ip, sizeof(ip));
if (ret != 0) {
goto failed;
if (pnn_list[i] == ip.pnn) {
/* Node claims IP is hosted on it, so
* save that information
*/
ret = db_hash_add(ipdb, (uint8_t *)&ip.addr,
sizeof(ip.addr),
(uint8_t *)&ip, sizeof(ip));
if (ret != 0) {
goto failed;
}
} else {
/* Node thinks IP is hosted elsewhere,
* so overwrite with CTDB_UNKNOWN_PNN
* if there's no existing entry
*/
ret = db_hash_exists(ipdb, (uint8_t *)&ip.addr,
sizeof(ip.addr));
if (ret == ENOENT) {
ip.pnn = CTDB_UNKNOWN_PNN;
ret = db_hash_add(ipdb,
(uint8_t *)&ip.addr,
sizeof(ip.addr),
(uint8_t *)&ip,
sizeof(ip));
if (ret != 0) {
goto failed;
}
}
}
}