[SCM] Samba Shared Repository - branch master updated
Ralph Böhme
slow at samba.org
Mon Apr 25 19:55:03 UTC 2016
The branch, master has been updated
via ad5a4a9 ctdbd_conn: Make "cstatus" int32_t
via 2bd1bcf ctdbd_conn: Add some more debug info
via aad53cf ctdbd: Use talloc_memdup where appropriate
via 445ad6e ctdbd_conn: Use ctdbd_control_local where possible
via f0525d4 ctdbd_conn: Avoid "includes.h"
via d36def8 lib: serverid.h references struct server_id
via ff72a8a lib: Move ctdbd_init_connection out of ctdbd_traverse()
via 966cef0 ctdbd_conn: Remove unused ctdbd_messaging_connection
via e2d39ae lib: Use ctdbd_init_connection in messaging_ctdbd_init
via 1ff4002 ctdbd_conn: Make ctdbd_init_connection public
via b1277ac ctdbd_conn: Use ctdbd_init_connection in ctdbd_probe
via 14beae7 ctdbd_conn: Use sys_poll_intr
via d59ae31 ctdbd_conn: Adapt loop counter's type to the loop limit
from 39bbd40 fix Invalid read of size 8
https://git.samba.org/?p=samba.git;a=shortlog;h=master
- Log -----------------------------------------------------------------
commit ad5a4a9e369248789b08f8ccad51d4d42df71bc9
Author: Volker Lendecke <vl at samba.org>
Date: Thu Apr 21 13:31:39 2016 +0200
ctdbd_conn: Make "cstatus" int32_t
This converts the "cstatus" parameter of ctdbd_control_local to what it is
defined as in the packet: int32_t. It was used inconsistently throughout the
code.
Signed-off-by: Volker Lendecke <vl at samba.org>
Reviewed-by: Ralph Boehme <slow at samba.org>
Autobuild-User(master): Ralph Böhme <slow at samba.org>
Autobuild-Date(master): Mon Apr 25 21:54:24 CEST 2016 on sn-devel-144
commit 2bd1bcf50c6d9e8fd486262742268f3208c0680d
Author: Volker Lendecke <vl at samba.org>
Date: Thu Apr 21 11:21:26 2016 +0200
ctdbd_conn: Add some more debug info
Signed-off-by: Volker Lendecke <vl at samba.org>
Reviewed-by: Ralph Boehme <slow at samba.org>
commit aad53cf59524355df757c9de7dca081da75b76d0
Author: Volker Lendecke <vl at samba.org>
Date: Mon Apr 4 16:23:09 2016 +0200
ctdbd: Use talloc_memdup where appropriate
.... 40 bytes .text less ;-)
Signed-off-by: Volker Lendecke <vl at samba.org>
Reviewed-by: Ralph Boehme <slow at samba.org>
commit 445ad6e8e42b6fb82aa736f7db904505175e8daf
Author: Volker Lendecke <vl at samba.org>
Date: Wed Apr 13 18:47:46 2016 +0200
ctdbd_conn: Use ctdbd_control_local where possible
Signed-off-by: Volker Lendecke <vl at samba.org>
Reviewed-by: Ralph Boehme <slow at samba.org>
commit f0525d4e07a5d741746f539a508668abeb14f0d5
Author: Volker Lendecke <vl at samba.org>
Date: Fri Apr 8 16:14:33 2016 +0200
ctdbd_conn: Avoid "includes.h"
Signed-off-by: Volker Lendecke <vl at samba.org>
Reviewed-by: Ralph Boehme <slow at samba.org>
commit d36def84aec84f63a92538726bed91dc197f9743
Author: Volker Lendecke <vl at samba.org>
Date: Tue Apr 5 07:26:34 2016 +0200
lib: serverid.h references struct server_id
Signed-off-by: Volker Lendecke <vl at samba.org>
Reviewed-by: Ralph Boehme <slow at samba.org>
commit ff72a8ae82ec2e7760d86bc7ea95837489a93df2
Author: Volker Lendecke <vl at samba.org>
Date: Tue Apr 5 17:30:11 2016 +0200
lib: Move ctdbd_init_connection out of ctdbd_traverse()
2 effects: This removes the [un]become_root calls from ctdbd_conn,
and it makes it possible to re-use the traversal connections, should
the setup/teardown become a problem in the future.
Signed-off-by: Volker Lendecke <vl at samba.org>
Reviewed-by: Ralph Boehme <slow at samba.org>
commit 966cef0d41d85d2753d3664a0e555bb444cef2e3
Author: Volker Lendecke <vl at samba.org>
Date: Tue Apr 5 10:14:11 2016 +0200
ctdbd_conn: Remove unused ctdbd_messaging_connection
Signed-off-by: Volker Lendecke <vl at samba.org>
Reviewed-by: Ralph Boehme <slow at samba.org>
commit e2d39aefae41da5a5614c5061d2aa30f40c5d65d
Author: Volker Lendecke <vl at samba.org>
Date: Tue Apr 5 10:11:44 2016 +0200
lib: Use ctdbd_init_connection in messaging_ctdbd_init
Signed-off-by: Volker Lendecke <vl at samba.org>
Reviewed-by: Ralph Boehme <slow at samba.org>
commit 1ff4002b23d7ff1d9de145f1f356d9a729af9ae9
Author: Volker Lendecke <vl at samba.org>
Date: Tue Apr 5 10:09:35 2016 +0200
ctdbd_conn: Make ctdbd_init_connection public
Signed-off-by: Volker Lendecke <vl at samba.org>
Reviewed-by: Ralph Boehme <slow at samba.org>
commit b1277acb44a51d92af0e7d7e59856606b8806192
Author: Volker Lendecke <vl at samba.org>
Date: Tue Apr 5 09:52:01 2016 +0200
ctdbd_conn: Use ctdbd_init_connection in ctdbd_probe
We are only interested in ctdb connectability here.
ctdbd_messaging_connection() does a few more calls not required here
Signed-off-by: Volker Lendecke <vl at samba.org>
Reviewed-by: Ralph Boehme <slow at samba.org>
commit 14beae7cc9059a1efcc93887b53563b336d26d14
Author: Volker Lendecke <vl at samba.org>
Date: Tue Apr 19 16:14:30 2016 +0200
ctdbd_conn: Use sys_poll_intr
This pulls in far less dependencies than poll_intr_one_fd and is not much more
complex to call
Signed-off-by: Volker Lendecke <vl at samba.org>
Reviewed-by: Ralph Boehme <slow at samba.org>
commit d59ae31cca4d889784ffe06b633e239b60fc0229
Author: Volker Lendecke <vl at samba.org>
Date: Fri Apr 8 15:59:08 2016 +0200
ctdbd_conn: Adapt loop counter's type to the loop limit
Signed-off-by: Volker Lendecke <vl at samba.org>
Reviewed-by: Ralph Boehme <slow at samba.org>
-----------------------------------------------------------------------
Summary of changes:
ctdb/server/ctdb_daemon.c | 4 +-
source3/include/ctdbd_conn.h | 12 ++--
source3/include/serverid.h | 1 +
source3/lib/ctdbd_conn.c | 142 ++++++++++++++-------------------------
source3/lib/dbwrap/dbwrap_ctdb.c | 50 +++++++++++---
source3/lib/messages_ctdbd.c | 16 +++--
6 files changed, 113 insertions(+), 112 deletions(-)
Changeset truncated at 500 lines:
diff --git a/ctdb/server/ctdb_daemon.c b/ctdb/server/ctdb_daemon.c
index a5fefe3..321b86e 100644
--- a/ctdb/server/ctdb_daemon.c
+++ b/ctdb/server/ctdb_daemon.c
@@ -1709,9 +1709,9 @@ int32_t ctdb_control_register_notify(struct ctdb_context *ctdb, uint32_t client_
nl->ctdb = ctdb;
nl->srvid = notify->srvid;
nl->data.dsize = notify->len;
- nl->data.dptr = talloc_size(nl, nl->data.dsize);
+ nl->data.dptr = talloc_memdup(nl, notify->notify_data,
+ nl->data.dsize);
CTDB_NO_MEMORY(ctdb, nl->data.dptr);
- memcpy(nl->data.dptr, notify->notify_data, nl->data.dsize);
DLIST_ADD(client->notify, nl);
talloc_set_destructor(nl, ctdb_client_notify_destructor);
diff --git a/source3/include/ctdbd_conn.h b/source3/include/ctdbd_conn.h
index 27993c7..c91f700 100644
--- a/source3/include/ctdbd_conn.h
+++ b/source3/include/ctdbd_conn.h
@@ -20,15 +20,19 @@
#ifndef _CTDBD_CONN_H
#define _CTDBD_CONN_H
+#include "replace.h"
+#include "system/filesys.h"
+#include "system/network.h"
#include <tdb.h>
+#include <tevent.h>
struct ctdbd_connection;
struct messaging_context;
struct messaging_rec;
-int ctdbd_messaging_connection(TALLOC_CTX *mem_ctx,
- const char *sockname, int timeout,
- struct ctdbd_connection **pconn);
+int ctdbd_init_connection(TALLOC_CTX *mem_ctx,
+ const char *sockname, int timeout,
+ struct ctdbd_connection **pconn);
uint32_t ctdbd_vnn(const struct ctdbd_connection *conn);
@@ -80,7 +84,7 @@ int ctdbd_register_ips(struct ctdbd_connection *conn,
int ctdbd_control_local(struct ctdbd_connection *conn, uint32_t opcode,
uint64_t srvid, uint32_t flags, TDB_DATA data,
TALLOC_CTX *mem_ctx, TDB_DATA *outdata,
- int *cstatus);
+ int32_t *cstatus);
int ctdb_watch_us(struct ctdbd_connection *conn);
int ctdb_unwatch(struct ctdbd_connection *conn);
diff --git a/source3/include/serverid.h b/source3/include/serverid.h
index 5db61b9..19caec8 100644
--- a/source3/include/serverid.h
+++ b/source3/include/serverid.h
@@ -22,6 +22,7 @@
#include "replace.h"
#include "lib/dbwrap/dbwrap.h"
+#include "librpc/gen_ndr/server_id.h"
/*
* Register a server with its unique id
diff --git a/source3/lib/ctdbd_conn.c b/source3/lib/ctdbd_conn.c
index 04f6f2f..9ea029a 100644
--- a/source3/lib/ctdbd_conn.c
+++ b/source3/lib/ctdbd_conn.c
@@ -18,13 +18,18 @@
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-#include "includes.h"
+#include "replace.h"
#include "util_tdb.h"
#include "serverid.h"
#include "ctdbd_conn.h"
#include "system/select.h"
#include "lib/util/sys_rw_data.h"
#include "lib/util/iov_buf.h"
+#include "lib/util/select.h"
+#include "lib/util/debug.h"
+#include "lib/util/talloc_stack.h"
+#include "lib/util/genrand.h"
+#include "lib/util/fault.h"
#include "messages.h"
@@ -67,7 +72,7 @@ static int ctdbd_control(struct ctdbd_connection *conn,
uint64_t srvid, uint32_t flags,
TDB_DATA data,
TALLOC_CTX *mem_ctx, TDB_DATA *outdata,
- int *cstatus);
+ int32_t *cstatus);
/*
* exit on fatal communications errors with the ctdbd daemon
@@ -107,13 +112,13 @@ int register_with_ctdbd(struct ctdbd_connection *conn, uint64_t srvid,
void *private_data)
{
- int ret, cstatus;
+ int ret;
+ int32_t cstatus;
size_t num_callbacks;
struct ctdbd_srvid_cb *tmp;
- ret = ctdbd_control(conn, CTDB_CURRENT_NODE,
- CTDB_CONTROL_REGISTER_SRVID, srvid, 0,
- tdb_null, NULL, NULL, &cstatus);
+ ret = ctdbd_control_local(conn, CTDB_CONTROL_REGISTER_SRVID, srvid, 0,
+ tdb_null, NULL, NULL, &cstatus);
if (ret != 0) {
return ret;
}
@@ -180,9 +185,8 @@ static int get_cluster_vnn(struct ctdbd_connection *conn, uint32_t *vnn)
{
int32_t cstatus=-1;
int ret;
- ret = ctdbd_control(conn,
- CTDB_CURRENT_NODE, CTDB_CONTROL_GET_PNN, 0, 0,
- tdb_null, NULL, NULL, &cstatus);
+ ret = ctdbd_control_local(conn, CTDB_CONTROL_GET_PNN, 0, 0,
+ tdb_null, NULL, NULL, &cstatus);
if (ret != 0) {
DEBUG(1, ("ctdbd_control failed: %s\n", strerror(ret)));
return ret;
@@ -201,11 +205,11 @@ static bool ctdbd_working(struct ctdbd_connection *conn, uint32_t vnn)
struct ctdb_node_map_old *m;
uint32_t failure_flags;
bool ok = false;
- int i, ret;
+ uint32_t i;
+ int ret;
- ret = ctdbd_control(conn, CTDB_CURRENT_NODE,
- CTDB_CONTROL_GET_NODEMAP, 0, 0,
- tdb_null, talloc_tos(), &outdata, &cstatus);
+ ret = ctdbd_control_local(conn, CTDB_CONTROL_GET_NODEMAP, 0, 0,
+ tdb_null, talloc_tos(), &outdata, &cstatus);
if (ret != 0) {
DEBUG(1, ("ctdbd_control failed: %s\n", strerror(ret)));
return false;
@@ -295,12 +299,14 @@ static int ctdb_read_packet(int fd, int timeout, TALLOC_CTX *mem_ctx,
struct ctdb_req_header **result)
{
struct ctdb_req_header *req;
- int ret, revents;
uint32_t msglen;
ssize_t nread;
if (timeout != -1) {
- ret = poll_intr_one_fd(fd, POLLIN, timeout, &revents);
+ struct pollfd pfd = { .fd = fd, .events = POLLIN };
+ int ret;
+
+ ret = sys_poll_intr(&pfd, 1, timeout);
if (ret == -1) {
return errno;
}
@@ -416,9 +422,9 @@ static int ctdbd_connection_destructor(struct ctdbd_connection *c)
* Get us a ctdbd connection
*/
-static int ctdbd_init_connection(TALLOC_CTX *mem_ctx,
- const char *sockname, int timeout,
- struct ctdbd_connection **pconn)
+int ctdbd_init_connection(TALLOC_CTX *mem_ctx,
+ const char *sockname, int timeout,
+ struct ctdbd_connection **pconn)
{
struct ctdbd_connection *conn;
int ret;
@@ -480,36 +486,6 @@ static int ctdbd_init_connection(TALLOC_CTX *mem_ctx,
return ret;
}
-/*
- * Get us a ctdbd connection and register us as a process
- */
-
-int ctdbd_messaging_connection(TALLOC_CTX *mem_ctx,
- const char *sockname, int timeout,
- struct ctdbd_connection **pconn)
-{
- struct ctdbd_connection *conn;
- int ret;
-
- ret = ctdbd_init_connection(mem_ctx, sockname, timeout, &conn);
-
- if (ret != 0) {
- return ret;
- }
-
- ret = register_with_ctdbd(conn, MSG_SRVID_SAMBA, NULL, NULL);
- if (ret != 0) {
- goto fail;
- }
-
- *pconn = conn;
- return 0;
-
- fail:
- TALLOC_FREE(conn);
- return ret;
-}
-
struct messaging_context *ctdb_conn_msg_ctx(struct ctdbd_connection *conn)
{
return conn->msg_ctx;
@@ -638,7 +614,7 @@ static int ctdbd_control(struct ctdbd_connection *conn,
uint64_t srvid, uint32_t flags,
TDB_DATA data,
TALLOC_CTX *mem_ctx, TDB_DATA *outdata,
- int *cstatus)
+ int32_t *cstatus)
{
struct ctdb_req_control_old req;
struct ctdb_req_header *hdr;
@@ -659,7 +635,9 @@ static int ctdbd_control(struct ctdbd_connection *conn,
req.datalen = data.dsize;
req.flags = flags;
- DEBUG(10, ("ctdbd_control: Sending ctdb packet\n"));
+ DBG_DEBUG("Sending ctdb packet reqid=%"PRIu32", vnn=%"PRIu32", "
+ "opcode=%"PRIu32", srvid=%"PRIu64"\n", req.hdr.reqid,
+ req.hdr.destnode, req.opcode, req.srvid);
ctdb_packet_dump(&req.hdr);
iov[0].iov_base = &req;
@@ -850,9 +828,8 @@ char *ctdbd_dbpath(struct ctdbd_connection *conn,
data.dptr = (uint8_t*)&db_id;
data.dsize = sizeof(db_id);
- ret = ctdbd_control(conn, CTDB_CURRENT_NODE,
- CTDB_CONTROL_GETDBPATH, 0, 0, data,
- mem_ctx, &rdata, &cstatus);
+ ret = ctdbd_control_local(conn, CTDB_CONTROL_GETDBPATH, 0, 0, data,
+ mem_ctx, &rdata, &cstatus);
if ((ret != 0) || cstatus != 0) {
DEBUG(0, (__location__ " ctdb_control for getdbpath failed: %s\n",
strerror(ret)));
@@ -875,11 +852,11 @@ int ctdbd_db_attach(struct ctdbd_connection *conn,
data = string_term_tdb_data(name);
- ret = ctdbd_control(conn, CTDB_CURRENT_NODE,
- persistent
- ? CTDB_CONTROL_DB_ATTACH_PERSISTENT
- : CTDB_CONTROL_DB_ATTACH,
- tdb_flags, 0, data, NULL, &data, &cstatus);
+ ret = ctdbd_control_local(conn,
+ persistent
+ ? CTDB_CONTROL_DB_ATTACH_PERSISTENT
+ : CTDB_CONTROL_DB_ATTACH,
+ tdb_flags, 0, data, NULL, &data, &cstatus);
if (ret != 0) {
DEBUG(0, (__location__ " ctdb_control for db_attach "
"failed: %s\n", strerror(ret)));
@@ -901,9 +878,8 @@ int ctdbd_db_attach(struct ctdbd_connection *conn,
data.dptr = (uint8_t *)db_id;
data.dsize = sizeof(*db_id);
- ret = ctdbd_control(conn, CTDB_CURRENT_NODE,
- CTDB_CONTROL_ENABLE_SEQNUM, 0, 0, data,
- NULL, NULL, &cstatus);
+ ret = ctdbd_control_local(conn, CTDB_CONTROL_ENABLE_SEQNUM, 0, 0, data,
+ NULL, NULL, &cstatus);
if ((ret != 0) || cstatus != 0) {
DEBUG(0, (__location__ " ctdb_control for enable seqnum "
"failed: %s\n", strerror(ret)));
@@ -1040,31 +1016,20 @@ int ctdbd_parse(struct ctdbd_connection *conn, uint32_t db_id,
}
/*
- Traverse a ctdb database. This uses a kind-of hackish way to open a second
- connection to ctdbd to avoid the hairy recursive and async problems with
- everything in-line.
+ Traverse a ctdb database. "conn" must be an otherwise unused
+ ctdb_connection where no other messages but the traverse ones are
+ expected.
*/
-int ctdbd_traverse(struct ctdbd_connection *master, uint32_t db_id,
+int ctdbd_traverse(struct ctdbd_connection *conn, uint32_t db_id,
void (*fn)(TDB_DATA key, TDB_DATA data,
void *private_data),
void *private_data)
{
- struct ctdbd_connection *conn;
int ret;
TDB_DATA key, data;
struct ctdb_traverse_start t;
- int cstatus;
-
- become_root();
- ret = ctdbd_init_connection(NULL, master->sockname, master->timeout,
- &conn);
- unbecome_root();
- if (ret != 0) {
- DEBUG(0, ("ctdbd_init_connection failed: %s\n",
- strerror(ret)));
- return ret;
- }
+ int32_t cstatus;
t.db_id = db_id;
t.srvid = conn->rand_srvid;
@@ -1073,9 +1038,9 @@ int ctdbd_traverse(struct ctdbd_connection *master, uint32_t db_id,
data.dptr = (uint8_t *)&t;
data.dsize = sizeof(t);
- ret = ctdbd_control(conn, CTDB_CURRENT_NODE,
- CTDB_CONTROL_TRAVERSE_START, conn->rand_srvid,
- 0, data, NULL, NULL, &cstatus);
+ ret = ctdbd_control_local(conn, CTDB_CONTROL_TRAVERSE_START,
+ conn->rand_srvid,
+ 0, data, NULL, NULL, &cstatus);
if ((ret != 0) || (cstatus != 0)) {
DEBUG(0,("ctdbd_control failed: %s, %d\n", strerror(ret),
@@ -1087,11 +1052,10 @@ int ctdbd_traverse(struct ctdbd_connection *master, uint32_t db_id,
*/
ret = EIO;
}
- TALLOC_FREE(conn);
return ret;
}
- while (True) {
+ while (true) {
struct ctdb_req_header *hdr = NULL;
struct ctdb_req_message_old *m;
struct ctdb_rec_data_old *d;
@@ -1106,7 +1070,6 @@ int ctdbd_traverse(struct ctdbd_connection *master, uint32_t db_id,
if (hdr->operation != CTDB_REQ_MESSAGE) {
DEBUG(0, ("Got operation %u, expected a message\n",
(unsigned)hdr->operation));
- TALLOC_FREE(conn);
return EIO;
}
@@ -1115,7 +1078,6 @@ int ctdbd_traverse(struct ctdbd_connection *master, uint32_t db_id,
if (m->datalen < sizeof(uint32_t) || m->datalen != d->length) {
DEBUG(0, ("Got invalid traverse data of length %d\n",
(int)m->datalen));
- TALLOC_FREE(conn);
return EIO;
}
@@ -1126,14 +1088,12 @@ int ctdbd_traverse(struct ctdbd_connection *master, uint32_t db_id,
if (key.dsize == 0 && data.dsize == 0) {
/* end of traverse */
- TALLOC_FREE(conn);
return 0;
}
if (data.dsize < sizeof(struct ctdb_ltdb_header)) {
DEBUG(0, ("Got invalid ltdb header length %d\n",
(int)data.dsize));
- TALLOC_FREE(conn);
return EIO;
}
data.dsize -= sizeof(struct ctdb_ltdb_header);
@@ -1243,7 +1203,7 @@ int ctdbd_register_ips(struct ctdbd_connection *conn,
int ctdbd_control_local(struct ctdbd_connection *conn, uint32_t opcode,
uint64_t srvid, uint32_t flags, TDB_DATA data,
TALLOC_CTX *mem_ctx, TDB_DATA *outdata,
- int *cstatus)
+ int32_t *cstatus)
{
return ctdbd_control(conn, CTDB_CURRENT_NODE, opcode, srvid, flags, data,
mem_ctx, outdata, cstatus);
@@ -1254,7 +1214,7 @@ int ctdb_watch_us(struct ctdbd_connection *conn)
struct ctdb_notify_data_old reg_data;
size_t struct_len;
int ret;
- int cstatus;
+ int32_t cstatus;
reg_data.srvid = CTDB_SRVID_SAMBA_NOTIFY;
reg_data.len = 1;
@@ -1278,7 +1238,7 @@ int ctdb_unwatch(struct ctdbd_connection *conn)
{
uint64_t srvid = CTDB_SRVID_SAMBA_NOTIFY;
int ret;
- int cstatus;
+ int32_t cstatus;
ret = ctdbd_control_local(
conn, CTDB_CONTROL_DEREGISTER_NOTIFY, conn->rand_srvid, 0,
@@ -1300,8 +1260,8 @@ int ctdbd_probe(const char *sockname, int timeout)
struct ctdbd_connection *conn = NULL;
int ret;
- ret = ctdbd_messaging_connection(talloc_tos(), sockname, timeout,
- &conn);
+ ret = ctdbd_init_connection(talloc_tos(), sockname, timeout,
+ &conn);
/*
* We only care if we can connect.
diff --git a/source3/lib/dbwrap/dbwrap_ctdb.c b/source3/lib/dbwrap/dbwrap_ctdb.c
index 93df7ef..1e4df09 100644
--- a/source3/lib/dbwrap/dbwrap_ctdb.c
+++ b/source3/lib/dbwrap/dbwrap_ctdb.c
@@ -700,7 +700,7 @@ static int db_ctdb_transaction_commit(struct db_context *db)
struct db_ctdb_ctx *ctx = talloc_get_type_abort(db->private_data,
struct db_ctdb_ctx);
NTSTATUS rets;
- int status;
+ int32_t status;
struct db_ctdb_transaction_handle *h = ctx->transaction;
uint64_t old_seqnum, new_seqnum;
int ret;
@@ -855,7 +855,7 @@ static NTSTATUS db_ctdb_send_schedule_for_deletion(struct db_record *rec)
int ret;
struct ctdb_control_schedule_for_deletion *dd;
TDB_DATA indata;
- int cstatus;
+ int32_t cstatus;
struct db_ctdb_rec *crec = talloc_get_type_abort(
rec->private_data, struct db_ctdb_rec);
@@ -884,7 +884,7 @@ static NTSTATUS db_ctdb_send_schedule_for_deletion(struct db_record *rec)
if ((ret != 0) || cstatus != 0) {
DEBUG(1, (__location__ " Error sending local control "
- "SCHEDULE_FOR_DELETION: %s, cstatus = %d\n",
+ "SCHEDULE_FOR_DELETION: %s, cstatus = %"PRIi32"\n",
strerror(ret), cstatus));
if (ret != 0) {
status = map_nt_error_from_unix(ret);
@@ -1358,6 +1358,36 @@ static int traverse_persistent_callback_dbwrap(struct db_record *rec, void* data
return traverse_persistent_callback(NULL, rec->key, rec->value, data);
}
+static int db_ctdbd_traverse(uint32_t db_id,
+ void (*fn)(TDB_DATA key, TDB_DATA data,
+ void *private_data),
+ void *private_data)
+{
+ struct ctdbd_connection *conn;
+ int ret;
+
+ become_root();
+ ret = ctdbd_init_connection(talloc_tos(), lp_ctdbd_socket(),
+ lp_ctdb_timeout(), &conn);
+ unbecome_root();
+ if (ret != 0) {
+ DBG_WARNING("ctdbd_init_connection failed: %s\n",
+ strerror(ret));
+ return ret;
+ }
+
+ ret = ctdbd_traverse(conn, db_id, fn, private_data);
+ TALLOC_FREE(conn);
+
+ if (ret != 0) {
+ DBG_WARNING("ctdbd_traverse failed: %s\n",
+ strerror(ret));
+ return ret;
+ }
+
+ return 0;
+}
+
static int db_ctdb_traverse(struct db_context *db,
int (*fn)(struct db_record *rec,
@@ -1422,8 +1452,7 @@ static int db_ctdb_traverse(struct db_context *db,
return ret;
}
- ret = ctdbd_traverse(messaging_ctdbd_connection(), ctx->db_id,
- traverse_callback, &state);
+ ret = db_ctdbd_traverse(ctx->db_id, traverse_callback, &state);
if (ret != 0) {
return -1;
}
@@ -1512,8 +1541,7 @@ static int db_ctdb_traverse_read(struct db_context *db,
return tdb_traverse_read(ctx->wtdb->tdb, traverse_persistent_callback_read, &state);
}
- ret = ctdbd_traverse(messaging_ctdbd_connection(), ctx->db_id,
- traverse_read_callback, &state);
+ ret = db_ctdbd_traverse(ctx->db_id, traverse_read_callback, &state);
if (ret != 0) {
return -1;
}
@@ -1552,7 +1580,7 @@ struct db_context *db_open_ctdb(TALLOC_CTX *mem_ctx,
struct ctdbd_connection *conn;
struct loadparm_context *lp_ctx;
struct ctdb_db_priority prio;
- int cstatus;
+ int32_t cstatus;
int ret;
if (!lp_clustering()) {
--
Samba Shared Repository
More information about the samba-cvs
mailing list