Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
-#define WINBINDD_DIR "/tmp/.winbindd/"
-#define WINBINDD_SOCKET WINBINDD_DIR"socket"
-/* the privileged socket is in smbd_tmp_dir() */
-#define WINBINDD_PRIVILEGED_SOCKET "winbind_socket"
+#include "nsswitch/winbindd_nss.h"
+
+
-#define WINBINDD_SAMBA3_SOCKET WINBINDD_DIR"pipe"
+#define WINBINDD_SAMBA3_SOCKET "pipe"
/* the privileged socket is in smbd_tmp_dir() */
#define WINBINDD_SAMBA3_PRIVILEGED_SOCKET "winbind_pipe"
/* this struct stores global data for the winbind task */
struct wbsrv_service {
struct task_server *task;
+
+ const struct dom_sid *primary_sid;
+ struct wbsrv_domain *domains;
};
-/*
- this is an abstraction for the actual protocol being used,
- so that we can listen on different sockets with different protocols
- e.g. the old samba3 protocol on one socket and a new protocol on another socket
-*/
-struct wbsrv_protocol_ops {
+struct wbsrv_samconn {
+ struct wbsrv_domain *domain;
+ void *private_data;
+
+ struct composite_context (*seqnum_send)(struct wbsrv_samconn *);
+ NTSTATUS (*seqnum_recv)(struct composite_context *, uint64_t *);
+};
+
+struct wb_dom_info {
const char *name;
- BOOL allow_pending_calls;
- uint32_t (*packet_length)(DATA_BLOB blob);
- NTSTATUS (*pull_request)(DATA_BLOB blob, TALLOC_CTX *mem_ctx, struct wbsrv_call **call);
- NTSTATUS (*handle_call)(struct wbsrv_call *call);
- NTSTATUS (*push_reply)(struct wbsrv_call *call, TALLOC_CTX *mem_ctx, DATA_BLOB *blob);
+ const char *dns_name;
+ const struct dom_sid *sid;
+
+ const char *dc_name;
+ const char *dc_dns_name;
+ const char *dc_address;
+};
+
+struct wbsrv_domain {
+ struct wbsrv_domain *next, *prev;
+
+ struct wb_dom_info *info;
+
+ struct dcerpc_pipe *lsa_pipe;
+ struct policy_handle *lsa_policy;
+ uint8_t lsa_auth_type;
+
+ struct dcerpc_pipe *samr_pipe;
+ struct policy_handle *samr_handle;
+ struct policy_handle *domain_handle;
+
+ struct ldap_connection *ldap_conn;
+
+ struct dcerpc_pipe *netlogon_pipe;
+ struct cli_credentials *schannel_creds;
};
/*
const char *socket_path;
struct wbsrv_service *service;
BOOL privileged;
- const struct wbsrv_protocol_ops *ops;
};
/*
/* storage for protocol specific data */
void *protocol_private_data;
- /* the partial data we've receiced yet */
- DATA_BLOB partial;
-
- /* the amount that we used yet from the partial buffer */
- uint32_t partial_read;
-
- /* prevent loops when we use half async code, while processing a requuest */
- BOOL processing;
-
/* how many calls are pending */
uint32_t pending_calls;
- struct data_blob_list_item *send_queue;
+ struct packet_context *packet;
};
+#define WBSRV_SAMBA3_SET_STRING(dest, src) do { \
+ strncpy(dest, src, sizeof(dest)-1);\
+} while(0)
+
/*
state of one request
NOTE about async replies:
if the backend wants to reply later:
- - it should set the WBSRV_CALL_FLAGS_REPLY_ASYNC flag, and may set a talloc_destructor
- on the this structure or on the private_data (if it's a talloc child of this structure),
- so that wbsrv_terminate_connection called by another call clean up the whole connection
- correct.
- - When the backend is ready to reply it should call wbsrv_queue_reply(call),
- wbsrv_queue_reply implies talloc_free(call), so the backend should use talloc_reference(call),
- if it needs it later.
- - If wbsrv_queue_reply doesn't return NT_STATUS_OK, the backend function should call,
- wbsrv_terminate_connection(call->wbconn, nt_errstr(status));
- return;
+
+ - it should set the WBSRV_CALL_FLAGS_REPLY_ASYNC flag, and may set a
+ talloc_destructor on the this structure or on the private_data (if it's a
+ talloc child of this structure), so that wbsrv_terminate_connection
+ called by another call clean up the whole connection correct.
+ - When the backend is ready to reply it should call wbsrv_send_reply(call),
+ wbsrv_send_reply implies talloc_free(call), so the backend should use
+ talloc_reference(call), if it needs it later.
+ - If wbsrv_send_reply doesn't return NT_STATUS_OK, the backend function
+ should call, wbsrv_terminate_connection(call->wbconn, nt_errstr(status));
+ return;
*/
-struct wbsrv_call {
+struct wbsrv_samba3_call {
#define WBSRV_CALL_FLAGS_REPLY_ASYNC 0x00000001
uint32_t flags;
- /* the backend should use this event context */
- struct event_context *event_ctx;
-
/* the connection the call belongs to */
struct wbsrv_connection *wbconn;
- /* storage for protocol specific data */
+ /* the backend should use this event context */
+ struct event_context *event_ctx;
+
+ /* here the backend can store stuff like composite_context's ... */
void *private_data;
+
+ /* the request structure of the samba3 protocol */
+ struct winbindd_request request;
+
+ /* the response structure of the samba3 protocol*/
+ struct winbindd_response response;
};
+
+struct netr_LMSessionKey;
+struct netr_UserSessionKey;
+
+#include "winbind/wb_proto.h"