r13244: Allow control of the location of the Samba3-compatible winbindd pipe
[jelmer/samba4-debian.git] / source / winbind / wb_server.h
index 2c93c02323a45c963d1178029fda95c37699a468..7906e52de694620a3e108fefeb6991513dcb054d 100644 (file)
    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;
 };
 
 /*
@@ -55,7 +80,6 @@ struct wbsrv_listen_socket {
        const char *socket_path;
        struct wbsrv_service *service;
        BOOL privileged;
-       const struct wbsrv_protocol_ops *ops;
 };
 
 /*
@@ -71,48 +95,55 @@ struct wbsrv_connection {
        /* 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"