blob: 9eb48d3eaa8af04e5cc81213b6282c51d1b76c6c (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
|
/**
* @file rpc_host.idl
*
* Definitions for communication between samba-dcerpcd and rpc helper
* daemons
*/
#include "idl_types.h"
import "named_pipe_auth.idl";
import "dcerpc.idl";
[
pointer_default(unique)
]
interface rpc_host_msg
{
/**
* @brief MSG_RPC_HOST_NEW_CLIENT: samba-dcerpcd->rpcd
*
* samba-dcerpcd to rpcd msg announcing a new client. This
* will carry a file descriptor representing the new
* connection
*/
typedef [public] struct {
/**
* @brief The binding the client wants to connect to
*/
[string,charset(UTF8)] char *binding;
/**
* @brief Auth info inherited from SMB
*/
named_pipe_auth_req_info8 *npa_info8;
/**
* @brief Raw bind PDU
*
* Already read from the socket by samba-dcerpcd
*/
DATA_BLOB bind_packet;
} rpc_host_client;
/**
* @brief MSG_RPC_WORKER_STATUS: rpcd->samba-dcerpcd
*
* Once a client has been handed over from samba-dcerpcd to an
* rpcd, samba-dcerpc has no control over this socket
* anymore. So it can't know when the client exits and the
* rpcd helper process has a slot free. Thus whenever a client
* exits, rpcd sends this message up to samba-dcerpc for a
* status update.
*/
typedef [flag(NDR_NOALIGN),public] struct {
/**
* @brief Which rpc service is this message from
*
* samba-dcerpcd will only have the source pid of this
* message. To avoid a walk through all arrays with
* all rpcd helpers, give samba-dcerpcd a hint where
* in its arrays to find the rpcd that sent this
* message.
*/
uint32 server_index;
/**
* @brief Which of the processes of a helper prog is this from
*
* @note while this is uint32, we currently only support 16-bit
* values, as we use it in the high 16-bits of the 32-bit
* association group id.
*/
uint32 worker_index;
/**
* @brief How many association groups this process serves right now
*
* @note while this is uint32, we currently only support 16-bit
* values, as we use the worker_index in the high 16-bits of
* so we only have 16-bit per worker in order to form the 32-bit
* association group id.
*/
uint32 num_association_groups;
/**
* @brief How many client connections this process serves right now
*
* @note might be greater or equal to num_association_groups.
*/
uint32 num_connections;
} rpc_worker_status;
}
|