2 Unix SMB/CIFS implementation.
4 Samba internal messaging functions (send).
6 Copyright (C) Andrew Tridgell 2004
8 This program is free software; you can redistribute it and/or modify
9 it under the terms of the GNU General Public License as published by
10 the Free Software Foundation; either version 3 of the License, or
11 (at your option) any later version.
13 This program is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 GNU General Public License for more details.
18 You should have received a copy of the GNU General Public License
19 along with this program. If not, see <http://www.gnu.org/licenses/>.
23 #include "messaging/messaging.h"
24 #include "messaging/irpc.h"
25 #include "lib/messaging/messages_dgm.h"
26 #include "lib/messaging/messages_dgm_ref.h"
27 #include "../source3/lib/messages_util.h"
28 #include "messaging/messaging_internal.h"
29 #include "lib/util/server_id_db.h"
30 #include "cluster/cluster.h"
31 #include "../lib/util/unix_privs.h"
34 * This file is for functions that can be called from auth_log without
35 * depending on all of dcerpc and so cause dep loops.
39 return a list of server ids for a server name
41 NTSTATUS
irpc_servers_byname(struct imessaging_context
*msg_ctx
,
42 TALLOC_CTX
*mem_ctx
, const char *name
,
43 unsigned *num_servers
,
44 struct server_id
**servers
)
48 ret
= server_id_db_lookup(msg_ctx
->names
, name
, mem_ctx
,
49 num_servers
, servers
);
51 return map_nt_error_from_unix_common(ret
);
57 Send a message to a particular server
59 NTSTATUS
imessaging_send(struct imessaging_context
*msg
, struct server_id server
,
60 uint32_t msg_type
, const DATA_BLOB
*data
)
62 uint8_t hdr
[MESSAGE_HDR_LENGTH
];
68 if (!cluster_node_equal(&msg
->server_id
, &server
)) {
69 /* No cluster in source4... */
73 message_hdr_put(hdr
, msg_type
, msg
->server_id
, server
);
75 iov
[0] = (struct iovec
) { .iov_base
= &hdr
, .iov_len
= sizeof(hdr
) };
79 iov
[1] = (struct iovec
) { .iov_base
= data
->data
,
80 .iov_len
= data
->length
};
89 ret
= messaging_dgm_send(pid
, iov
, num_iov
, NULL
, 0);
92 priv
= root_privileges();
93 ret
= messaging_dgm_send(pid
, iov
, num_iov
, NULL
, 0);
98 return map_nt_error_from_unix_common(ret
);
104 Send a message to a particular server, with the message containing a single pointer
106 NTSTATUS
imessaging_send_ptr(struct imessaging_context
*msg
, struct server_id server
,
107 uint32_t msg_type
, void *ptr
)
111 blob
.data
= (uint8_t *)&ptr
;
112 blob
.length
= sizeof(void *);
114 return imessaging_send(msg
, server
, msg_type
, &blob
);