[SCM] Samba Shared Repository - branch master updated
Martin Schwenke
martins at samba.org
Tue May 3 06:09:04 UTC 2016
The branch, master has been updated
via a7cfb92 docs: Fix an outdated remark, tdbsam is default
via 10dbedd ctdb-protocol: Return required buffer size in push functions
via f288ce8 ctdb-client: Drop unnecessary discard_const
via 1fcedeb ctdb-protocol: Use consistent names for function arguments
via bf9b0b9 ctdb-protocol: Drop buffer allocation from protocol push functions
via 0885872 ctdb-tests: Make sure the packet length matches the allocated size
via 2717427 ctdb-protocol: Check arguments in ctdb_allocate_pkt
via 0eca31b ctdb-protocol: Expose function to allocate a packet
via e834e0a ctdb-protocol: Fix marshalling of ctdb_reply_control
via 75363b9 ctdb-protocol: Use length routines for protocol elements
via 8a20c11 ctdb-protocol: Add length routines for protocol elements
via 6ec25c7 ctdb-protocol: Use ctdb_req_header marshalling
via 79d1507 ctdb-protocol: Fix marshalling of ctdb_req_header
via 2e14d4e ctdb-protocol: Use TDB_DATA marshalling
via c64435f ctdb-protocol: Fix marshalling of TDB_DATA
via 324ae75 ctdb-protocol: Use ctdb_string marshalling
via fcb2ab7 ctdb-protocol: Fix marshalling of ctdb_string
via ddfbd74 ctdb-doc: Fix example NFS Ganesha recovery directory maintenance logic
from 685e813 Add build option for default smbpasswd location
https://git.samba.org/?p=samba.git;a=shortlog;h=master
- Log -----------------------------------------------------------------
commit a7cfb9232ca219957672c8e359af0a9c700f8edc
Author: Volker Lendecke <vl at samba.org>
Date: Mon May 2 10:58:12 2016 +0200
docs: Fix an outdated remark, tdbsam is default
Signed-off-by: Volker Lendecke <vl at samba.org>
Reviewed-by: Martin Schwenke <martin at meltin.net>
Autobuild-User(master): Martin Schwenke <martins at samba.org>
Autobuild-Date(master): Tue May 3 08:08:31 CEST 2016 on sn-devel-144
commit 10dbeddab5237b401c1eb42a50a27dde19a580c9
Author: Amitay Isaacs <amitay at gmail.com>
Date: Sun May 1 22:13:35 2016 +1000
ctdb-protocol: Return required buffer size in push functions
If the buffer size provided is not sufficient, then return the required
buffer length.
Signed-off-by: Amitay Isaacs <amitay at gmail.com>
Reviewed-by: Martin Schwenke <martin at meltin.net>
commit f288ce84281c62cd8e0026caf3dd9c89acc2a2ef
Author: Amitay Isaacs <amitay at gmail.com>
Date: Fri Apr 22 01:27:50 2016 +1000
ctdb-client: Drop unnecessary discard_const
Signed-off-by: Amitay Isaacs <amitay at gmail.com>
Reviewed-by: Martin Schwenke <martin at meltin.net>
commit 1fcedeb99bd1d2340dbecdf6f8d7e7efc4601736
Author: Amitay Isaacs <amitay at gmail.com>
Date: Fri Apr 22 01:25:06 2016 +1000
ctdb-protocol: Use consistent names for function arguments
Signed-off-by: Amitay Isaacs <amitay at gmail.com>
Reviewed-by: Martin Schwenke <martin at meltin.net>
commit bf9b0b992a4e4e6307899c3f1cf05f393d3a8e16
Author: Amitay Isaacs <amitay at gmail.com>
Date: Fri Apr 22 01:08:11 2016 +1000
ctdb-protocol: Drop buffer allocation from protocol push functions
This means that the packet allocation will happen just before push
functions are called.
Signed-off-by: Amitay Isaacs <amitay at gmail.com>
Reviewed-by: Martin Schwenke <martin at meltin.net>
commit 088587259e2cbfd6878b0680f24db00090e606b5
Author: Amitay Isaacs <amitay at gmail.com>
Date: Mon May 2 12:16:04 2016 +1000
ctdb-tests: Make sure the packet length matches the allocated size
Signed-off-by: Amitay Isaacs <amitay at gmail.com>
Reviewed-by: Martin Schwenke <martin at meltin.net>
commit 2717427e69861a0f8d3c08458ea0e1bf182b2028
Author: Amitay Isaacs <amitay at gmail.com>
Date: Thu Apr 28 18:27:11 2016 +1000
ctdb-protocol: Check arguments in ctdb_allocate_pkt
Signed-off-by: Amitay Isaacs <amitay at gmail.com>
Reviewed-by: Martin Schwenke <martin at meltin.net>
commit 0eca31baf79d509528e126b3ff268163e6414136
Author: Amitay Isaacs <amitay at gmail.com>
Date: Thu Apr 28 18:12:36 2016 +1000
ctdb-protocol: Expose function to allocate a packet
Signed-off-by: Amitay Isaacs <amitay at gmail.com>
Reviewed-by: Martin Schwenke <martin at meltin.net>
commit e834e0a2c0aa1c7861a0f19704951d3ccdd3489a
Author: Amitay Isaacs <amitay at gmail.com>
Date: Fri Apr 29 15:57:44 2016 +1000
ctdb-protocol: Fix marshalling of ctdb_reply_control
Signed-off-by: Amitay Isaacs <amitay at gmail.com>
Reviewed-by: Martin Schwenke <martin at meltin.net>
commit 75363b9954371867a2e295e686276b2f3680a7f0
Author: Amitay Isaacs <amitay at gmail.com>
Date: Fri Apr 29 15:35:12 2016 +1000
ctdb-protocol: Use length routines for protocol elements
Signed-off-by: Amitay Isaacs <amitay at gmail.com>
Reviewed-by: Martin Schwenke <martin at meltin.net>
commit 8a20c116fdf835936f99858f170ed72b637ec05d
Author: Amitay Isaacs <amitay at gmail.com>
Date: Fri Apr 22 00:45:01 2016 +1000
ctdb-protocol: Add length routines for protocol elements
This follows the convention used for marshalling routines for ctdb data types.
Signed-off-by: Amitay Isaacs <amitay at gmail.com>
Reviewed-by: Martin Schwenke <martin at meltin.net>
commit 6ec25c7529bdb59469c9103f49381915c75bd510
Author: Amitay Isaacs <amitay at gmail.com>
Date: Fri Apr 22 00:19:49 2016 +1000
ctdb-protocol: Use ctdb_req_header marshalling
Signed-off-by: Amitay Isaacs <amitay at gmail.com>
Reviewed-by: Martin Schwenke <martin at meltin.net>
commit 79d1507c16b872e18987cbf9d3a4ed8994d282db
Author: Amitay Isaacs <amitay at gmail.com>
Date: Fri Apr 22 00:12:16 2016 +1000
ctdb-protocol: Fix marshalling of ctdb_req_header
Signed-off-by: Amitay Isaacs <amitay at gmail.com>
Reviewed-by: Martin Schwenke <martin at meltin.net>
commit 2e14d4e4e3fb627d2ad276b3c9a812382ad0b44b
Author: Amitay Isaacs <amitay at gmail.com>
Date: Thu Apr 21 23:50:01 2016 +1000
ctdb-protocol: Use TDB_DATA marshalling
Signed-off-by: Amitay Isaacs <amitay at gmail.com>
Reviewed-by: Martin Schwenke <martin at meltin.net>
commit c64435f22e977cd5e3406d018e069e5c7d9b709e
Author: Amitay Isaacs <amitay at gmail.com>
Date: Thu Apr 21 23:56:13 2016 +1000
ctdb-protocol: Fix marshalling of TDB_DATA
Signed-off-by: Amitay Isaacs <amitay at gmail.com>
Reviewed-by: Martin Schwenke <martin at meltin.net>
commit 324ae757c37c45974e5188080ad9d03798aad043
Author: Amitay Isaacs <amitay at gmail.com>
Date: Thu Apr 21 23:49:33 2016 +1000
ctdb-protocol: Use ctdb_string marshalling
Signed-off-by: Amitay Isaacs <amitay at gmail.com>
Reviewed-by: Martin Schwenke <martin at meltin.net>
commit fcb2ab7641f69413738714fff096b20488b63d03
Author: Amitay Isaacs <amitay at gmail.com>
Date: Thu Apr 21 23:48:52 2016 +1000
ctdb-protocol: Fix marshalling of ctdb_string
Signed-off-by: Amitay Isaacs <amitay at gmail.com>
Reviewed-by: Martin Schwenke <martin at meltin.net>
commit ddfbd7460733f6b1243a3796237932629dedc6c6
Author: Martin Schwenke <martin at meltin.net>
Date: Thu Apr 28 12:02:47 2016 +1000
ctdb-doc: Fix example NFS Ganesha recovery directory maintenance logic
This currently fails exactly when it is needed: when there is a
dangling link pointing into an unmounted filesystem. This happens
because [ -e <dangling-link> ] returns false. The solution is simply
to remove that check.
Now the first condition in the "if" statement catches the backward
compatibility case where $GANRECDIR used to be a directory. It will
also catch other problems, such as if a file has been created in this
location. If nothing exists then it will silently succeed (due to
-f).
The second case catches a symlink pointing to the wrong place (e.g. in
an unmounted filesystem).
Signed-off-by: Martin Schwenke <martin at meltin.net>
Reviewed-by: Amitay Isaacs <amitay at gmail.com>
-----------------------------------------------------------------------
Summary of changes:
ctdb/client/client_call.c | 11 +-
ctdb/client/client_connect.c | 2 +-
ctdb/client/client_control.c | 11 +-
ctdb/client/client_message.c | 11 +-
ctdb/doc/examples/nfs-ganesha-callout | 16 +-
ctdb/protocol/protocol_api.h | 85 +++++---
ctdb/protocol/protocol_call.c | 389 ++++++++++++++++------------------
ctdb/protocol/protocol_control.c | 158 +++++++-------
ctdb/protocol/protocol_header.c | 16 +-
ctdb/protocol/protocol_message.c | 129 ++++++-----
ctdb/protocol/protocol_packet.c | 10 +-
ctdb/protocol/protocol_private.h | 3 -
ctdb/protocol/protocol_types.c | 5 +-
ctdb/tests/src/protocol_client_test.c | 131 +++++++++---
ctdb/web/samba.html | 2 +-
15 files changed, 545 insertions(+), 434 deletions(-)
Changeset truncated at 500 lines:
diff --git a/ctdb/client/client_call.c b/ctdb/client/client_call.c
index aa8a05b..088ba67 100644
--- a/ctdb/client/client_call.c
+++ b/ctdb/client/client_call.c
@@ -63,7 +63,7 @@ struct tevent_req *ctdb_client_call_send(TALLOC_CTX *mem_ctx,
struct ctdb_client_call_state *state;
uint32_t reqid;
uint8_t *buf;
- size_t buflen;
+ size_t datalen, buflen;
int ret;
req = tevent_req_create(mem_ctx, &state,
@@ -91,7 +91,14 @@ struct tevent_req *ctdb_client_call_send(TALLOC_CTX *mem_ctx,
ctdb_req_header_fill(&h, 0, CTDB_REQ_CALL, CTDB_CURRENT_NODE,
client->pnn, reqid);
- ret = ctdb_req_call_push(&h, request, state, &buf, &buflen);
+ datalen = ctdb_req_call_len(&h, request);
+ ret = ctdb_allocate_pkt(state, datalen, &buf, &buflen);
+ if (ret != 0) {
+ tevent_req_error(req, ret);
+ return tevent_req_post(req, ev);
+ }
+
+ ret = ctdb_req_call_push(&h, request, buf, &buflen);
if (ret != 0) {
tevent_req_error(req, ret);
return tevent_req_post(req, ev);
diff --git a/ctdb/client/client_connect.c b/ctdb/client/client_connect.c
index f2fe673..3cfcd16 100644
--- a/ctdb/client/client_connect.c
+++ b/ctdb/client/client_connect.c
@@ -166,7 +166,7 @@ static void client_read_handler(uint8_t *buf, size_t buflen,
struct ctdb_req_header hdr;
int ret;
- ret = ctdb_req_header_pull(discard_const(buf), buflen, &hdr);
+ ret = ctdb_req_header_pull(buf, buflen, &hdr);
if (ret != 0) {
DEBUG(DEBUG_WARNING, ("invalid header, ret=%d\n", ret));
return;
diff --git a/ctdb/client/client_control.c b/ctdb/client/client_control.c
index 5c47c9a..1755ecc 100644
--- a/ctdb/client/client_control.c
+++ b/ctdb/client/client_control.c
@@ -67,7 +67,7 @@ struct tevent_req *ctdb_client_control_send(TALLOC_CTX *mem_ctx,
struct ctdb_client_control_state *state;
uint32_t reqid;
uint8_t *buf;
- size_t buflen;
+ size_t datalen, buflen;
int ret;
req = tevent_req_create(mem_ctx, &state,
@@ -98,7 +98,14 @@ struct tevent_req *ctdb_client_control_send(TALLOC_CTX *mem_ctx,
ctdb_req_header_fill(&h, 0, CTDB_REQ_CONTROL, destnode,
client->pnn, reqid);
- ret = ctdb_req_control_push(&h, request, state, &buf, &buflen);
+ datalen = ctdb_req_control_len(&h, request);
+ ret = ctdb_allocate_pkt(state, datalen, &buf, &buflen);
+ if (ret != 0) {
+ tevent_req_error(req, ret);
+ return tevent_req_post(req, ev);
+ }
+
+ ret = ctdb_req_control_push(&h, request, buf, &buflen);
if (ret != 0) {
tevent_req_error(req, ret);
return tevent_req_post(req, ev);
diff --git a/ctdb/client/client_message.c b/ctdb/client/client_message.c
index 4b378a5..03fcfc6 100644
--- a/ctdb/client/client_message.c
+++ b/ctdb/client/client_message.c
@@ -62,7 +62,7 @@ struct tevent_req *ctdb_client_message_send(TALLOC_CTX *mem_ctx,
struct ctdb_req_header h;
uint32_t reqid;
uint8_t *buf;
- size_t buflen;
+ size_t datalen, buflen;
int ret;
req = tevent_req_create(mem_ctx, &state,
@@ -85,7 +85,14 @@ struct tevent_req *ctdb_client_message_send(TALLOC_CTX *mem_ctx,
ctdb_req_header_fill(&h, 0, CTDB_REQ_MESSAGE, destnode,
client->pnn, reqid);
- ret = ctdb_req_message_push(&h, message, state, &buf, &buflen);
+ datalen = ctdb_req_message_len(&h, message);
+ ret = ctdb_allocate_pkt(state, datalen, &buf, &buflen);
+ if (ret != 0) {
+ tevent_req_error(req, ret);
+ return tevent_req_post(req, ev);
+ }
+
+ ret = ctdb_req_message_push(&h, message, buf, &buflen);
if (ret != 0) {
tevent_req_error(req, ret);
return tevent_req_post(req, ev);
diff --git a/ctdb/doc/examples/nfs-ganesha-callout b/ctdb/doc/examples/nfs-ganesha-callout
index 3f0a016..a3d0471 100755
--- a/ctdb/doc/examples/nfs-ganesha-callout
+++ b/ctdb/doc/examples/nfs-ganesha-callout
@@ -145,15 +145,13 @@ create_ganesha_recdirs ()
_mntpt=$(echo "$_mounts" | sort | awk 'NR == 1 {print $3}')
_link_dst="${_mntpt}/${CTDB_GANESHA_REC_SUBDIR}"
mkdir -vp "$_link_dst"
- if [ -e "$GANRECDIR" ]; then
- if [ ! -L "$GANRECDIR" ] ; then
- rm -vrf "$GANRECDIR"
- else
- _t=$(readlink "$GANRECDIR")
- if [ "$_t" != "$_link_dst" ] ; then
- rm -v "$GANRECDIR"
- fi
- fi
+ if [ ! -L "$GANRECDIR" ] ; then
+ rm -vrf "$GANRECDIR"
+ else
+ _t=$(readlink "$GANRECDIR")
+ if [ "$_t" != "$_link_dst" ] ; then
+ rm -v "$GANRECDIR"
+ fi
fi
# This is not an "else". It also re-creates the link if it was
# removed above!
diff --git a/ctdb/protocol/protocol_api.h b/ctdb/protocol/protocol_api.h
index eb1baaf..0f781cc 100644
--- a/ctdb/protocol/protocol_api.h
+++ b/ctdb/protocol/protocol_api.h
@@ -76,81 +76,97 @@ void ctdb_req_header_fill(struct ctdb_req_header *h, uint32_t generation,
uint32_t operation, uint32_t destnode,
uint32_t srcnode, uint32_t reqid);
-int ctdb_req_header_pull(uint8_t *pkt, size_t pkt_len,
+size_t ctdb_req_header_len(struct ctdb_req_header *h);
+void ctdb_req_header_push(struct ctdb_req_header *h, uint8_t *buf);
+int ctdb_req_header_pull(uint8_t *buf, size_t buflen,
struct ctdb_req_header *h);
int ctdb_req_header_verify(struct ctdb_req_header *h, uint32_t operation);
/* From protocol/protocol_call.c */
+size_t ctdb_req_call_len(struct ctdb_req_header *h,
+ struct ctdb_req_call *c);
+
int ctdb_req_call_push(struct ctdb_req_header *h,
struct ctdb_req_call *c,
- TALLOC_CTX *mem_ctx,
- uint8_t **pkt, size_t *pkt_len);
+ uint8_t *buf, size_t *buflen);
-int ctdb_req_call_pull(uint8_t *pkt, size_t pkt_len,
+int ctdb_req_call_pull(uint8_t *buf, size_t buflen,
struct ctdb_req_header *h,
TALLOC_CTX *mem_ctx,
struct ctdb_req_call *c);
+size_t ctdb_reply_call_len(struct ctdb_req_header *h,
+ struct ctdb_reply_call *c);
+
int ctdb_reply_call_push(struct ctdb_req_header *h,
struct ctdb_reply_call *c,
- TALLOC_CTX *mem_ctx,
- uint8_t **pkt, size_t *pkt_len);
+ uint8_t *buf, size_t *buflen);
-int ctdb_reply_call_pull(uint8_t *pkt, size_t pkt_len,
+int ctdb_reply_call_pull(uint8_t *buf, size_t buflen,
struct ctdb_req_header *h,
TALLOC_CTX *mem_ctx,
struct ctdb_reply_call *c);
+size_t ctdb_reply_error_len(struct ctdb_req_header *h,
+ struct ctdb_reply_error *c);
+
int ctdb_reply_error_push(struct ctdb_req_header *h,
struct ctdb_reply_error *c,
- TALLOC_CTX *mem_ctx,
- uint8_t **pkt, size_t *pkt_len);
+ uint8_t *buf, size_t *buflen);
-int ctdb_reply_error_pull(uint8_t *pkt, size_t pkt_len,
+int ctdb_reply_error_pull(uint8_t *buf, size_t buflen,
struct ctdb_req_header *h,
TALLOC_CTX *mem_ctx,
struct ctdb_reply_error *c);
+size_t ctdb_req_dmaster_len(struct ctdb_req_header *h,
+ struct ctdb_req_dmaster *c);
+
int ctdb_req_dmaster_push(struct ctdb_req_header *h,
struct ctdb_req_dmaster *c,
- TALLOC_CTX *mem_ctx,
- uint8_t **pkt, size_t *pkt_len);
+ uint8_t *buf, size_t *buflen);
-int ctdb_req_dmaster_pull(uint8_t *pkt, size_t pkt_len,
+int ctdb_req_dmaster_pull(uint8_t *buf, size_t buflen,
struct ctdb_req_header *h,
TALLOC_CTX *mem_ctx,
struct ctdb_req_dmaster *c);
+size_t ctdb_reply_dmaster_len(struct ctdb_req_header *h,
+ struct ctdb_reply_dmaster *c);
+
int ctdb_reply_dmaster_push(struct ctdb_req_header *h,
struct ctdb_reply_dmaster *c,
- TALLOC_CTX *mem_ctx,
- uint8_t **pkt, size_t *pkt_len);
+ uint8_t *buf, size_t *buflen);
-int ctdb_reply_dmaster_pull(uint8_t *pkt, size_t pkt_len,
+int ctdb_reply_dmaster_pull(uint8_t *buf, size_t buflen,
struct ctdb_req_header *h,
TALLOC_CTX *mem_ctx,
struct ctdb_reply_dmaster *c);
/* From protocol/protocol_control.c */
+size_t ctdb_req_control_len(struct ctdb_req_header *h,
+ struct ctdb_req_control *c);
+
int ctdb_req_control_push(struct ctdb_req_header *h,
struct ctdb_req_control *c,
- TALLOC_CTX *mem_ctx,
- uint8_t **pkt, size_t *pkt_len);
+ uint8_t *buf, size_t *buflen);
-int ctdb_req_control_pull(uint8_t *pkt, size_t pkt_len,
+int ctdb_req_control_pull(uint8_t *buf, size_t buflen,
struct ctdb_req_header *h,
TALLOC_CTX *mem_ctx,
struct ctdb_req_control *c);
+size_t ctdb_reply_control_len(struct ctdb_req_header *h,
+ struct ctdb_reply_control *c);
+
int ctdb_reply_control_push(struct ctdb_req_header *h,
struct ctdb_reply_control *c,
- TALLOC_CTX *mem_ctx,
- uint8_t **pkt, size_t *pkt_len);
+ uint8_t *buf, size_t *buflen);
-int ctdb_reply_control_pull(uint8_t *pkt, size_t pkt_len, uint32_t opcode,
+int ctdb_reply_control_pull(uint8_t *buf, size_t buflen, uint32_t opcode,
struct ctdb_req_header *h,
TALLOC_CTX *mem_ctx,
struct ctdb_reply_control *c);
@@ -633,25 +649,34 @@ void ctdb_packet_print(uint8_t *buf, size_t buflen, FILE *fp);
/* From protocol/protocol_message.c */
+size_t ctdb_req_message_len(struct ctdb_req_header *h,
+ struct ctdb_req_message *c);
+
int ctdb_req_message_push(struct ctdb_req_header *h,
struct ctdb_req_message *c,
- TALLOC_CTX *mem_ctx,
- uint8_t **pkt, size_t *pkt_len);
+ uint8_t *buf, size_t *buflen);
-int ctdb_req_message_pull(uint8_t *pkt, size_t pkt_len,
+int ctdb_req_message_pull(uint8_t *buf, size_t buflen,
struct ctdb_req_header *h,
TALLOC_CTX *mem_ctx,
struct ctdb_req_message *c);
+size_t ctdb_req_message_data_len(struct ctdb_req_header *h,
+ struct ctdb_req_message_data *c);
+
int ctdb_req_message_data_push(struct ctdb_req_header *h,
- struct ctdb_req_message_data *message,
- TALLOC_CTX *mem_ctx,
- uint8_t **pkt, size_t *pkt_len);
+ struct ctdb_req_message_data *c,
+ uint8_t *buf, size_t *buflen);
-int ctdb_req_message_data_pull(uint8_t *pkt, size_t pkt_len,
+int ctdb_req_message_data_pull(uint8_t *buf, size_t buflen,
struct ctdb_req_header *h,
TALLOC_CTX *mem_ctx,
- struct ctdb_req_message_data *message);
+ struct ctdb_req_message_data *c);
+
+/* From protocol/protocol_packet.c */
+
+int ctdb_allocate_pkt(TALLOC_CTX *mem_ctx, size_t datalen,
+ uint8_t **buf, size_t *buflen);
/* From protocol/protocol_util.c */
diff --git a/ctdb/protocol/protocol_call.c b/ctdb/protocol/protocol_call.c
index 660be0c..a2b24cf 100644
--- a/ctdb/protocol/protocol_call.c
+++ b/ctdb/protocol/protocol_call.c
@@ -71,385 +71,366 @@ struct ctdb_reply_dmaster_wire {
uint8_t data[1];
};
+size_t ctdb_req_call_len(struct ctdb_req_header *h, struct ctdb_req_call *c)
+{
+ return offsetof(struct ctdb_req_call_wire, data) +
+ ctdb_tdb_data_len(c->key) + ctdb_tdb_data_len(c->calldata);
+}
+
int ctdb_req_call_push(struct ctdb_req_header *h, struct ctdb_req_call *c,
- TALLOC_CTX *mem_ctx, uint8_t **pkt, size_t *pkt_len)
+ uint8_t *buf, size_t *buflen)
{
- struct ctdb_req_call_wire *wire;
- uint8_t *buf;
- size_t length, buflen;
- int ret;
+ struct ctdb_req_call_wire *wire =
+ (struct ctdb_req_call_wire *)buf;
+ size_t length;
if (c->key.dsize == 0) {
return EINVAL;
}
- length = offsetof(struct ctdb_req_call_wire, data) +
- c->key.dsize + c->calldata.dsize;
-
- ret = allocate_pkt(mem_ctx, length, &buf, &buflen);
- if (ret != 0) {
- return ret;
+ length = ctdb_req_call_len(h, c);
+ if (*buflen < length) {
+ *buflen = length;
+ return EMSGSIZE;
}
- wire = (struct ctdb_req_call_wire *)buf;
-
- h->length = buflen;
- memcpy(&wire->hdr, h, sizeof(struct ctdb_req_header));
+ h->length = *buflen;
+ ctdb_req_header_push(h, (uint8_t *)&wire->hdr);
wire->flags = c->flags;
wire->db_id = c->db_id;
wire->callid = c->callid;
wire->hopcount = c->hopcount;
- wire->keylen = c->key.dsize;
- wire->calldatalen = c->calldata.dsize;
- memcpy(wire->data, c->key.dptr, c->key.dsize);
- if (c->calldata.dsize > 0) {
- memcpy(wire->data + c->key.dsize, c->calldata.dptr,
- c->calldata.dsize);
- }
+ wire->keylen = ctdb_tdb_data_len(c->key);
+ wire->calldatalen = ctdb_tdb_data_len(c->calldata);
+ ctdb_tdb_data_push(c->key, wire->data);
+ ctdb_tdb_data_push(c->calldata, wire->data + wire->keylen);
- *pkt = buf;
- *pkt_len = buflen;
return 0;
}
-int ctdb_req_call_pull(uint8_t *pkt, size_t pkt_len,
+int ctdb_req_call_pull(uint8_t *buf, size_t buflen,
struct ctdb_req_header *h,
TALLOC_CTX *mem_ctx,
struct ctdb_req_call *c)
{
- struct ctdb_req_call_wire *wire;
+ struct ctdb_req_call_wire *wire =
+ (struct ctdb_req_call_wire *)buf;
size_t length;
+ int ret;
length = offsetof(struct ctdb_req_call_wire, data);
- if (pkt_len < length) {
+ if (buflen < length) {
return EMSGSIZE;
}
-
- wire = (struct ctdb_req_call_wire *)pkt;
-
- if (pkt_len < length + wire->keylen + wire->calldatalen) {
+ if (buflen < length + wire->keylen + wire->calldatalen) {
return EMSGSIZE;
}
if (h != NULL) {
- memcpy(h, &wire->hdr, sizeof(struct ctdb_req_header));
+ ret = ctdb_req_header_pull((uint8_t *)&wire->hdr, buflen, h);
+ if (ret != 0) {
+ return ret;
+ }
}
c->flags = wire->flags;
c->db_id = wire->db_id;
c->callid = wire->callid;
c->hopcount = wire->hopcount;
- c->key.dsize = wire->keylen;
- c->key.dptr = talloc_memdup(mem_ctx, wire->data, wire->keylen);
- if (c->key.dptr == NULL) {
- return ENOMEM;
+
+ ret = ctdb_tdb_data_pull(wire->data, wire->keylen, mem_ctx, &c->key);
+ if (ret != 0) {
+ return ret;
}
- c->calldata.dsize = wire->calldatalen;
- if (wire->calldatalen > 0) {
- c->calldata.dptr = talloc_memdup(mem_ctx,
- wire->data + wire->keylen,
- wire->calldatalen);
- if (c->calldata.dptr == NULL) {
- talloc_free(c->key.dptr);
- return ENOMEM;
- }
+
+ ret = ctdb_tdb_data_pull(wire->data + wire->keylen, wire->calldatalen,
+ mem_ctx, &c->calldata);
+ if (ret != 0) {
+ return ret;
}
return 0;
}
-int ctdb_reply_call_push(struct ctdb_req_header *h, struct ctdb_reply_call *c,
- TALLOC_CTX *mem_ctx, uint8_t **pkt, size_t *pkt_len)
+size_t ctdb_reply_call_len(struct ctdb_req_header *h,
+ struct ctdb_reply_call *c)
{
- struct ctdb_reply_call_wire *wire;
- uint8_t *buf;
- size_t length, buflen;
- int ret;
+ return offsetof(struct ctdb_reply_call_wire, data) +
+ ctdb_tdb_data_len(c->data);
+}
- length = offsetof(struct ctdb_reply_call_wire, data) + c->data.dsize;
+int ctdb_reply_call_push(struct ctdb_req_header *h, struct ctdb_reply_call *c,
+ uint8_t *buf, size_t *buflen)
+{
+ struct ctdb_reply_call_wire *wire =
+ (struct ctdb_reply_call_wire *)buf;
+ size_t length;
- ret = allocate_pkt(mem_ctx, length, &buf, &buflen);
- if (ret != 0) {
- return ret;
+ length = ctdb_reply_call_len(h, c);
+ if (*buflen < length) {
+ *buflen = length;
+ return EMSGSIZE;
}
- wire = (struct ctdb_reply_call_wire *)buf;
-
- h->length = buflen;
- memcpy(&wire->hdr, h, sizeof(struct ctdb_req_header));
+ h->length = *buflen;
+ ctdb_req_header_push(h, (uint8_t *)&wire->hdr);
wire->status = c->status;
- wire->datalen = c->data.dsize;
- if (c->data.dsize > 0) {
- memcpy(wire->data, c->data.dptr, c->data.dsize);
- }
+ wire->datalen = ctdb_tdb_data_len(c->data);
+ ctdb_tdb_data_push(c->data, wire->data);
- *pkt = buf;
- *pkt_len = buflen;
return 0;
}
-int ctdb_reply_call_pull(uint8_t *pkt, size_t pkt_len,
+int ctdb_reply_call_pull(uint8_t *buf, size_t buflen,
struct ctdb_req_header *h,
TALLOC_CTX *mem_ctx,
struct ctdb_reply_call *c)
{
- struct ctdb_reply_call_wire *wire;
+ struct ctdb_reply_call_wire *wire =
+ (struct ctdb_reply_call_wire *)buf;
size_t length;
+ int ret;
length = offsetof(struct ctdb_reply_call_wire, data);
- if (pkt_len < length) {
+ if (buflen < length) {
return EMSGSIZE;
}
-
- wire = (struct ctdb_reply_call_wire *)pkt;
-
- if (pkt_len < length + wire->datalen) {
--
Samba Shared Repository
More information about the samba-cvs
mailing list