diff options
author | Amitay Isaacs <amitay@gmail.com> | 2017-08-30 16:18:02 +1000 |
---|---|---|
committer | Karolin Seeger <kseeger@samba.org> | 2017-10-25 08:43:03 +0200 |
commit | be97d96803c3254bc2db755505d2c40224f4072c (patch) | |
tree | e1c959ead00385437b7b87f6e6921a44375f0bd8 /ctdb | |
parent | 655c67fadf11256cc6bf82ffee6cbcf65fb58e2d (diff) | |
download | samba-be97d96803c3254bc2db755505d2c40224f4072c.tar.gz |
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>
(cherry picked from commit 02ae3d9fab6cdaaa1a2999a57a37ecc281f7f608)
Diffstat (limited to 'ctdb')
-rw-r--r-- | ctdb/include/ctdb_private.h | 2 | ||||
-rw-r--r-- | ctdb/server/ctdb_control.c | 4 | ||||
-rw-r--r-- | ctdb/server/ctdb_daemon.c | 24 |
3 files changed, 30 insertions, 0 deletions
diff --git a/ctdb/include/ctdb_private.h b/ctdb/include/ctdb_private.h index 043149eedd9..da3760da7b2 100644 --- a/ctdb/include/ctdb_private.h +++ b/ctdb/include/ctdb_private.h @@ -584,6 +584,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); diff --git a/ctdb/server/ctdb_control.c b/ctdb/server/ctdb_control.c index 40484434b4a..6835ccaf063 100644 --- a/ctdb/server/ctdb_control.c +++ b/ctdb/server/ctdb_control.c @@ -701,6 +701,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; diff --git a/ctdb/server/ctdb_daemon.c b/ctdb/server/ctdb_daemon.c index 8e9c1c649cd..a81f8c2d7a2 100644 --- a/ctdb/server/ctdb_daemon.c +++ b/ctdb/server/ctdb_daemon.c @@ -1813,6 +1813,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; |