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

ctdb-daemon: Add implementation of control CHECK_PID_SRVID

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

Signed-off-by: Amitay Isaacs <amitay@gmail.com>
Reviewed-by: Martin Schwenke <martin@meltin.net>
This commit is contained in:
Amitay Isaacs 2017-08-30 16:18:02 +10:00 committed by Martin Schwenke
parent 7115378f75
commit 02ae3d9fab
3 changed files with 30 additions and 0 deletions

View File

@ -582,6 +582,8 @@ struct ctdb_client *ctdb_find_client_by_pid(struct ctdb_context *ctdb,
pid_t pid);
int32_t ctdb_control_process_exists(struct ctdb_context *ctdb, pid_t pid);
int32_t ctdb_control_check_pid_srvid(struct ctdb_context *ctdb,
TDB_DATA indata);
int ctdb_control_getnodesfile(struct ctdb_context *ctdb, uint32_t opcode,
TDB_DATA indata, TDB_DATA *outdata);

View File

@ -696,6 +696,10 @@ static int32_t ctdb_control_dispatch(struct ctdb_context *ctdb,
return 0;
}
case CTDB_CONTROL_CHECK_PID_SRVID:
CHECK_CONTROL_DATA_SIZE((sizeof(pid_t) + sizeof(uint64_t)));
return ctdb_control_check_pid_srvid(ctdb, indata);
default:
DEBUG(DEBUG_CRIT,(__location__ " Unknown CTDB control opcode %u\n", opcode));
return -1;

View File

@ -1771,6 +1771,30 @@ int32_t ctdb_control_process_exists(struct ctdb_context *ctdb, pid_t pid)
return kill(pid, 0);
}
int32_t ctdb_control_check_pid_srvid(struct ctdb_context *ctdb,
TDB_DATA indata)
{
struct ctdb_client *client;
pid_t pid;
uint64_t srvid;
int ret;
pid = *(pid_t *)indata.dptr;
srvid = *(uint64_t *)(indata.dptr + sizeof(pid_t));
client = ctdb_find_client_by_pid(ctdb, pid);
if (client == NULL) {
return -1;
}
ret = srvid_exists(ctdb->srv, srvid, client);
if (ret != 0) {
return -1;
}
return 0;
}
int ctdb_control_getnodesfile(struct ctdb_context *ctdb, uint32_t opcode, TDB_DATA indata, TDB_DATA *outdata)
{
struct ctdb_node_map_old *node_map = NULL;