r26639: librpc: Pass iconv convenience on from RPC connection to NDR library, so...
[bbaumbach/samba-autobuild/.git] / source4 / libcli / cldap / cldap.h
index 5ed7df15c79895d665c6d6cba67498b7d84876cf..8aa98f03312eeaf8c16a70ad22179d5eac434f86 100644 (file)
@@ -7,7 +7,7 @@
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 2 of the License, or
+   the Free Software Foundation; either version 3 of the License, or
    (at your option) any later version.
 
    This program is distributed in the hope that it will be useful,
    GNU General Public License for more details.
 
    You should have received a copy of the GNU General Public License
-   along with this program; if not, write to the Free Software
-   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
 
-#include "asn_1.h"
-#include "librpc/gen_ndr/ndr_nbt.h"
+#include "libcli/util/asn_1.h"
+#include "librpc/gen_ndr/nbt.h"
+
+struct ldap_message;
 
 enum cldap_request_state {CLDAP_REQUEST_SEND, 
                          CLDAP_REQUEST_WAIT, 
                          CLDAP_REQUEST_DONE,
-                         CLDAP_REQUEST_TIMEOUT};
+                         CLDAP_REQUEST_ERROR};
 
 /*
   a cldap request packet
@@ -37,15 +38,17 @@ struct cldap_request {
        struct cldap_socket *cldap;
 
        enum cldap_request_state state;
+       NTSTATUS status;
 
        /* where to send the request */
-       const char *dest_addr;
-       int dest_port;
+       struct socket_address *dest;
 
        /* timeout between retries (seconds) */
        int timeout;
        int num_retries;
 
+       bool is_reply;
+
        /* the ldap message_id */
        int message_id;
 
@@ -55,7 +58,7 @@ struct cldap_request {
        DATA_BLOB encoded;
 
        /* the reply data */
-       struct asn1_data asn1;
+       struct asn1_data *asn1;
 
        /* information on what to do on completion */
        struct {
@@ -83,7 +86,7 @@ struct cldap_socket {
        /* what to do with incoming request packets */
        struct {
                void (*handler)(struct cldap_socket *, struct ldap_message *, 
-                               const char *, int );
+                               struct socket_address *);
                void *private;
        } incoming;
 };
@@ -95,6 +98,7 @@ struct cldap_socket {
 struct cldap_search {
        struct {
                const char *dest_address;
+               uint16_t dest_port;
                const char *filter;
                const char **attributes;
                int timeout;
@@ -108,6 +112,10 @@ struct cldap_search {
 
 struct cldap_socket *cldap_socket_init(TALLOC_CTX *mem_ctx, 
                                       struct event_context *event_ctx);
+NTSTATUS cldap_set_incoming_handler(struct cldap_socket *cldap,
+                                   void (*handler)(struct cldap_socket *, struct ldap_message *, 
+                                                   struct socket_address *),
+                                   void *private);
 struct cldap_request *cldap_search_send(struct cldap_socket *cldap, 
                                        struct cldap_search *io);
 NTSTATUS cldap_search_recv(struct cldap_request *req, TALLOC_CTX *mem_ctx, 
@@ -116,18 +124,44 @@ NTSTATUS cldap_search(struct cldap_socket *cldap, TALLOC_CTX *mem_ctx,
                      struct cldap_search *io);
 
 
+/*
+  a general cldap reply
+*/
+struct cldap_reply {
+       uint32_t messageid;
+       struct socket_address *dest;
+       struct ldap_SearchResEntry *response;
+       struct ldap_Result         *result;
+};
+
+NTSTATUS cldap_reply_send(struct cldap_socket *cldap, struct cldap_reply *io);
+
+NTSTATUS cldap_empty_reply(struct cldap_socket *cldap, 
+                          uint32_t message_id,
+                          struct socket_address *src);
+NTSTATUS cldap_error_reply(struct cldap_socket *cldap, 
+                          uint32_t message_id,
+                          struct socket_address *src,
+                          int resultcode,
+                          const char *errormessage);
+
 /*
   a netlogon cldap request  
 */
 struct cldap_netlogon {
        struct {
                const char *dest_address;
+               uint16_t dest_port;
                const char *realm;
                const char *host;
-               uint8_t version;
+               const char *user;
+               const char *domain_guid;
+               const char *domain_sid;
+               int acct_control;
+               uint32_t version;
        } in;
        struct {
-               struct nbt_cldap_netlogon netlogon;
+               union nbt_cldap_netlogon netlogon;
        } out;
 };
 
@@ -138,3 +172,8 @@ NTSTATUS cldap_netlogon_recv(struct cldap_request *req,
                             struct cldap_netlogon *io);
 NTSTATUS cldap_netlogon(struct cldap_socket *cldap, 
                        TALLOC_CTX *mem_ctx, struct cldap_netlogon *io);
+NTSTATUS cldap_netlogon_reply(struct cldap_socket *cldap, 
+                             uint32_t message_id,
+                             struct socket_address *src,
+                             uint32_t version,
+                             union nbt_cldap_netlogon *netlogon);