]> git.sur5r.net Git - openldap/commitdiff
initial support for SASL
authorRalf Haferkamp <ralf@openldap.org>
Thu, 20 Dec 2007 12:33:48 +0000 (12:33 +0000)
committerRalf Haferkamp <ralf@openldap.org>
Thu, 20 Dec 2007 12:33:48 +0000 (12:33 +0000)
14 files changed:
contrib/ldapc++/src/LDAPAsynConnection.cpp
contrib/ldapc++/src/LDAPAsynConnection.h
contrib/ldapc++/src/LDAPBindRequest.cpp
contrib/ldapc++/src/LDAPBindRequest.h
contrib/ldapc++/src/LDAPMessage.cpp
contrib/ldapc++/src/LDAPMessage.h
contrib/ldapc++/src/LDAPRequest.cpp
contrib/ldapc++/src/LDAPRequest.h
contrib/ldapc++/src/LDAPResult.cpp
contrib/ldapc++/src/LDAPResult.h
contrib/ldapc++/src/LDAPSaslBindResult.cpp [new file with mode: 0644]
contrib/ldapc++/src/LDAPSaslBindResult.h [new file with mode: 0644]
contrib/ldapc++/src/Makefile.am
contrib/ldapc++/src/config.h.in

index edff84d95cbc3cc12c911dca7e41a0b06372ca9d..95539719461d849bbfb6d9acd88f9d8fc1858064 100644 (file)
 
 using namespace std;
 
-LDAPAsynConnection::LDAPAsynConnection(const string& hostname, int port,
+LDAPAsynConnection::LDAPAsynConnection(const string& url, int port,
                                LDAPConstraints *cons ){
     DEBUG(LDAP_DEBUG_CONSTRUCT,"LDAPAsynConnection::LDAPAsynConnection()"
             << endl);
     DEBUG(LDAP_DEBUG_CONSTRUCT | LDAP_DEBUG_PARAMETER,
-            "   host:" << hostname << endl << "   port:" << port << endl);
+            "   URL:" << url << endl << "   port:" << port << endl);
     cur_session=0;
     m_constr = 0;
-    this->init(hostname, port);
+    // Is this an LDAP URI?
+    if ( url.find("://") == std::string::npos ) {
+       this->init(url, port);
+    } else {
+       this->initialize(url);
+    }
     this->setConstraints(cons);
 }
 
@@ -95,6 +100,41 @@ LDAPMessageQueue* LDAPAsynConnection::bind(const string& dn,
     }
 }
 
+LDAPMessageQueue* LDAPAsynConnection::saslBind(const std::string &mech,
+               const std::string &cred,
+               const LDAPConstraints *cons)
+{
+    DEBUG(LDAP_DEBUG_TRACE, "LDAPAsynConnection::saslBind()" <<  endl);
+    LDAPSaslBindRequest *req = new LDAPSaslBindRequest(mech, cred, this, cons);
+    try{
+        LDAPMessageQueue *ret = req->sendRequest();
+        return ret;
+    }catch(LDAPException e){
+        delete req;
+        throw;
+    }
+
+}
+
+LDAPMessageQueue* LDAPAsynConnection::saslInteractiveBind(
+                        const std::string &mech,
+                        int flags,
+                        SaslInteractionHandler *sih,
+                        const LDAPConstraints *cons)
+{
+    DEBUG(LDAP_DEBUG_TRACE, "LDAPAsynConnection::saslInteractiveBind" 
+            << std::endl);
+    LDAPSaslInteractiveBind *req = 
+            new LDAPSaslInteractiveBind(mech, flags, sih, this, cons);
+    try {
+        LDAPMessageQueue *ret = req->sendRequest();
+        return ret;
+    }catch(LDAPException e){
+        delete req;
+        throw;
+    } 
+}
+
 LDAPMessageQueue* LDAPAsynConnection::search(const string& base,int scope, 
                                          const string& filter, 
                                          const StringList& attrs, 
index 5ac36c581ab106503380107d523ce6939fdab96b..8854a7b54b34de29177d476946b06f2388664bd8 100644 (file)
@@ -21,6 +21,7 @@
 #include <LDAPModList.h>
 #include <LDAPUrl.h>
 #include <LDAPUrlList.h>
+#include <SaslInteractionHandler.h>
 
 //* Main class for an asynchronous LDAP connection 
 /**
@@ -59,9 +60,6 @@ class LDAPAsynConnection{
          * Search
          */
         static const int SEARCH_SUB=2;
-//        static const int SEARCH_SUB=LDAP_SCOPE_SUBTREE;
-//        static const int SEARCH_ONE=LDAP_SCOPE_ONELEVEL;
-//        static const int SEARCH_SUB=LDAP_SCOPE_SUBTREE;
 
         /** Construtor that initializes a connection to a server
          * @param hostname Name (or IP-Adress) of the destination host
@@ -69,7 +67,7 @@ class LDAPAsynConnection{
          * @param cons Default constraints to use with operations over 
          *      this connection
          */
-        LDAPAsynConnection(const std::string& hostname=std::string("localhost"),
+        LDAPAsynConnection(const std::string& url=std::string("localhost"),
                 int port=0, LDAPConstraints *cons=new LDAPConstraints() );
 
         //* Destructor
@@ -116,7 +114,17 @@ class LDAPAsynConnection{
          * @param dn the distiguished name to bind as
          * @param passwd cleartext password to use
          */
-        LDAPMessageQueue* bind(const std::string& dn="", const std::string& passwd="",
+        LDAPMessageQueue* bind(const std::string& dn="", 
+                const std::string& passwd="",
+                const LDAPConstraints *cons=0);
+
+        LDAPMessageQueue* saslBind(const std::string& mech, 
+                const std::string& cred, 
+                const LDAPConstraints *cons=0);
+
+        LDAPMessageQueue* saslInteractiveBind(const std::string& mech,
+                int flags=0,
+                SaslInteractionHandler *sih=0,
                 const LDAPConstraints *cons=0);
 
         /** Performing a search on a directory tree.
index 26bf869506faadd70f2adbfc3081b3acbeea6375..6d690f8f06588eeced115f8f1ed064f4d81019c0 100644 (file)
@@ -9,8 +9,11 @@
 
 #include "LDAPBindRequest.h"
 #include "LDAPException.h"
+#include "SaslInteractionHandler.h"
+#include "SaslInteraction.h"
 
 #include <cstdlib>
+#include <sasl/sasl.h>
 
 using namespace std;
 
@@ -73,10 +76,97 @@ LDAPMessageQueue* LDAPBindRequest::sendRequest(){
     }
 }
 
-LDAPRequest* LDAPBindRequest::followReferral(LDAPMsg* /*urls*/){
-    DEBUG(LDAP_DEBUG_TRACE,"LDAPBindRequest::followReferral()" << endl);
-    DEBUG(LDAP_DEBUG_TRACE,
-            "ReferralChasing for bind-operation not implemented yet" << endl);
-    return 0;
+LDAPSaslBindRequest::LDAPSaslBindRequest(const std::string& mech,
+        const std::string& cred, 
+        LDAPAsynConnection *connect,
+        const LDAPConstraints *cons, 
+        bool isReferral) : LDAPRequest(connect, cons, isReferral),m_mech(mech), m_cred(cred) {}
+
+LDAPMessageQueue* LDAPSaslBindRequest::sendRequest()
+{
+    DEBUG(LDAP_DEBUG_TRACE,"LDAPSaslBindRequest::sendRequest()" << endl);
+    int msgID=0;
+    
+    BerValue tmpcred;
+    tmpcred.bv_val = (char*) malloc( m_cred.size() * sizeof(char));
+    m_cred.copy(tmpcred.bv_val,string::npos);
+    tmpcred.bv_len = m_cred.size();
+    
+    LDAPControl** tmpSrvCtrls=m_cons->getSrvCtrlsArray();
+    LDAPControl** tmpClCtrls=m_cons->getClCtrlsArray();
+    int err=ldap_sasl_bind(m_connection->getSessionHandle(), "", m_mech.c_str(), 
+            &tmpcred, tmpSrvCtrls, tmpClCtrls, &msgID);
+    LDAPControlSet::freeLDAPControlArray(tmpSrvCtrls);
+    LDAPControlSet::freeLDAPControlArray(tmpClCtrls);
+    free(tmpcred.bv_val);
+
+    if(err != LDAP_SUCCESS){
+        throw LDAPException(err);
+    }else{
+        m_msgID=msgID;
+        return new LDAPMessageQueue(this);
+    }
+}
+
+LDAPSaslBindRequest::~LDAPSaslBindRequest()
+{
+    DEBUG(LDAP_DEBUG_DESTROY,"LDAPSaslBindRequest::~LDAPSaslBindRequest()" << endl);
+}
+
+LDAPSaslInteractiveBind::LDAPSaslInteractiveBind( const std::string& mech, 
+        int flags, SaslInteractionHandler *sih, LDAPAsynConnection *connect,
+        const LDAPConstraints *cons, bool isReferral) : 
+            LDAPRequest(connect, cons, isReferral),
+            m_mech(mech), m_flags(flags), m_sih(sih), m_res(0)
+{
+}
+
+static int my_sasl_interact(LDAP *l, unsigned flags, void *cbh, void *interact)
+{
+    DEBUG(LDAP_DEBUG_TRACE, "LDAPSaslInteractiveBind::my_sasl_interact()" 
+            << std::endl );
+    std::list<SaslInteraction*> interactions;
+
+    sasl_interact_t *iter = (sasl_interact_t*) interact;
+    while ( iter->id != SASL_CB_LIST_END ) {
+        SaslInteraction *si = new SaslInteraction(iter);
+        interactions.push_back( si );
+        iter++;
+    }
+    ((SaslInteractionHandler*)cbh)->handleInteractions(interactions);
+    return LDAP_SUCCESS;
+}
+
+/* This kind of fakes an asynchronous operation, ldap_sasl_interactive_bind_s
+ * is synchronous */
+LDAPMessageQueue *LDAPSaslInteractiveBind::sendRequest()
+{
+    DEBUG(LDAP_DEBUG_TRACE, "LDAPSaslInteractiveBind::sendRequest()" <<
+            m_mech << std::endl);
+
+    LDAPControl** tmpSrvCtrls=m_cons->getSrvCtrlsArray();
+    LDAPControl** tmpClCtrls=m_cons->getClCtrlsArray();
+    int res = ldap_sasl_interactive_bind_s( m_connection->getSessionHandle(),
+            "", m_mech.c_str(), tmpSrvCtrls, tmpClCtrls, m_flags, 
+            my_sasl_interact, m_sih );
+
+    DEBUG(LDAP_DEBUG_TRACE, "ldap_sasl_interactive_bind_s returned: " 
+            << res << std::endl);
+    if(res != LDAP_SUCCESS){
+        throw LDAPException(res);
+    } else {
+        m_res = new LDAPResult(LDAPMsg::BIND_RESPONSE, res, ""); 
+    }
+    return new LDAPMessageQueue(this);
+}
+
+LDAPMsg* LDAPSaslInteractiveBind::getNextMessage() const 
+{
+    return m_res;
+}
+
+LDAPSaslInteractiveBind::~LDAPSaslInteractiveBind()
+{
+    DEBUG(LDAP_DEBUG_DESTROY,"LDAPSaslInteractiveBind::~LDAPSaslInteractiveBind()" << endl);
 }
 
index 33a74764bd8eb4043f73407efc085cf524bccb88..74886ac30f56eafba57657c35df157669be53f82 100644 (file)
@@ -7,6 +7,8 @@
 #define LDAP_BIND_REQUEST_H
 
 #include <LDAPRequest.h>
+#include <LDAPResult.h>
+#include <SaslInteractionHandler.h>
 
 class LDAPBindRequest : LDAPRequest {
     private:
@@ -15,14 +17,44 @@ class LDAPBindRequest : LDAPRequest {
         std::string m_mech;
 
     public:
-        LDAPBindRequest(const LDAPBindRequest& req);
+        LDAPBindRequest( const LDAPBindRequest& req);
         //just for simple authentication
         LDAPBindRequest(const std::string&, const std::string& passwd, 
                 LDAPAsynConnection *connect, const LDAPConstraints *cons, 
                 bool isReferral=false);
         virtual ~LDAPBindRequest();
         virtual LDAPMessageQueue *sendRequest();
-        virtual LDAPRequest* followReferral(LDAPMsg* urls);
+};
+
+class LDAPSaslBindRequest : LDAPRequest
+{
+    public:
+        LDAPSaslBindRequest( const std::string& mech, const std::string& cred, 
+        LDAPAsynConnection *connect, const LDAPConstraints *cons, 
+                bool isReferral=false);
+        virtual LDAPMessageQueue *sendRequest();
+        virtual ~LDAPSaslBindRequest();
+
+    private:
+        std::string m_mech;
+        std::string m_cred;
+};
+
+class LDAPSaslInteractiveBind : LDAPRequest
+{
+    public:
+        LDAPSaslInteractiveBind( const std::string& mech, int flags,
+                SaslInteractionHandler *sih, LDAPAsynConnection *connect, 
+                const LDAPConstraints *cons, bool isReferral=false);
+        virtual LDAPMessageQueue *sendRequest();
+        virtual LDAPMsg* getNextMessage() const;
+        virtual ~LDAPSaslInteractiveBind();
+
+    private:
+        std::string m_mech;
+        int m_flags;
+        SaslInteractionHandler *m_sih;
+        LDAPResult *m_res;
 };
 #endif //LDAP_BIND_REQUEST_H
 
index 5c33f650d1d51cee2a1fd3cfcf3e15e7bcb3117f..5f5c73c0de131f95c87706e56adef237a393b440 100644 (file)
@@ -8,6 +8,7 @@
 
 #include "LDAPResult.h"
 #include "LDAPExtResult.h"
+#include "LDAPSaslBindResult.h"
 #include "LDAPRequest.h"
 #include "LDAPSearchResult.h"
 #include "LDAPSearchReference.h"
@@ -22,6 +23,13 @@ LDAPMsg::LDAPMsg(LDAPMessage *msg){
     m_hasControls=false;
 }
 
+LDAPMsg::LDAPMsg(int type, int id=0){
+    DEBUG(LDAP_DEBUG_CONSTRUCT,"LDAPMsg::LDAPMsg()" << endl);
+    msgType = type;
+    msgID = id;
+    m_hasControls=false;
+}
+
 LDAPMsg* LDAPMsg::create(const LDAPRequest *req, LDAPMessage *msg){
     DEBUG(LDAP_DEBUG_TRACE,"LDAPMsg::create()" << endl);
     switch(ldap_msgtype(msg)){
@@ -34,6 +42,8 @@ LDAPMsg* LDAPMsg::create(const LDAPRequest *req, LDAPMessage *msg){
         case EXTENDED_RESPONSE :
             return new LDAPExtResult(req,msg);
         break;
+        case BIND_RESPONSE :
+            return new LDAPSaslBindResult(req,msg);
         default :
             return new LDAPResult(req, msg);
     }
index 1f57fdd90cc067d44e127e73d54f14b8ea01262d..b5a06958e06992953f4b8bdc23063640698dd76c 100644 (file)
@@ -98,6 +98,7 @@ class LDAPMsg{
          * Only for internal use.
          */
         LDAPMsg(LDAPMessage *msg);
+        LDAPMsg(int msgType, int msgID);
        
         /**
          * This attribute stores Server-Control that were returned with the
index 3ce7b540cbe90e9f55557a8fac881e9332e30248..fd1024536711ac8f6754cf76ec2a14637417d4e1 100644 (file)
@@ -70,6 +70,13 @@ LDAPMsg* LDAPRequest::getNextMessage() const
     }
 }
 
+LDAPRequest* LDAPRequest::followReferral(LDAPMsg* /*urls*/){
+    DEBUG(LDAP_DEBUG_TRACE,"LDAPBindRequest::followReferral()" << endl);
+    DEBUG(LDAP_DEBUG_TRACE,
+            "ReferralChasing not implemented for this operation" << endl);
+    return 0;
+}
+
 const LDAPConstraints* LDAPRequest::getConstraints() const{
     DEBUG(LDAP_DEBUG_TRACE,"LDAPRequest::getConstraints()" << endl);
     return m_cons;
index 632297828e16c3543fd0295528b2aec5fb1ab11b..1de6ded907d04f03a793adddaf8dd2ad94dd4dcc 100644 (file)
@@ -40,7 +40,7 @@ class LDAPRequest{
         
         const LDAPConstraints* getConstraints() const;
         const LDAPAsynConnection* getConnection() const;
-        LDAPMsg *getNextMessage() const;
+        virtual LDAPMsg *getNextMessage() const;
         int getType()const;
         int getMsgID() const;
         int getHopCount() const;
@@ -64,7 +64,7 @@ class LDAPRequest{
          * functions of the C-API to send the Request to a LDAP-Server
          */
         virtual LDAPMessageQueue* sendRequest()=0;
-        virtual LDAPRequest* followReferral(LDAPMsg* ref)=0;
+        virtual LDAPRequest* followReferral(LDAPMsg* ref);
 
         /**
          * Compare this request with another on. And returns true if they
index 202d4fdec112cbdbf5678f0f83d59da468518907..613867e49946353ea671c29d7be47b594dd9c867 100644 (file)
@@ -53,6 +53,11 @@ LDAPResult::LDAPResult(const LDAPRequest *req, LDAPMessage *msg) :
     }
 }
 
+LDAPResult::LDAPResult(int type, int resultCode, const std::string &msg) : 
+        LDAPMsg(type,0), m_resCode(resultCode), m_errMsg(msg)
+{}
+
+
 LDAPResult::~LDAPResult(){
     DEBUG(LDAP_DEBUG_DESTROY,"LDAPResult::~LDAPResult()" << endl);
 }
index f5a53ce76c9301364d789856fb5afd8c546d0845..2e9f1510f8832dc0bbde16e530e04b6425334631 100644 (file)
@@ -103,6 +103,7 @@ class LDAPResult : public LDAPMsg{
          *              Message.
          */
         LDAPResult(const LDAPRequest *req, LDAPMessage *msg);
+        LDAPResult(int type, int resultCode, const std::string &msg); 
         
         /**
          * The destructor.
diff --git a/contrib/ldapc++/src/LDAPSaslBindResult.cpp b/contrib/ldapc++/src/LDAPSaslBindResult.cpp
new file mode 100644 (file)
index 0000000..e5887ee
--- /dev/null
@@ -0,0 +1,44 @@
+/*
+ * Copyright 2007, OpenLDAP Foundation, All Rights Reserved.
+ * COPYING RESTRICTIONS APPLY, see COPYRIGHT file
+ */
+
+#include "debug.h"
+#include <lber.h>
+#include "LDAPRequest.h"
+#include "LDAPException.h"
+
+#include "LDAPResult.h"
+#include "LDAPSaslBindResult.h"
+
+using namespace std;
+
+LDAPSaslBindResult::LDAPSaslBindResult(const LDAPRequest* req, LDAPMessage* msg) :
+        LDAPResult(req, msg){
+    DEBUG(LDAP_DEBUG_CONSTRUCT,"LDAPSaslBindResult::LDAPSaslBindResult()" 
+            << std::endl);
+    BerValue* data = 0;
+    LDAP* lc = req->getConnection()->getSessionHandle();
+    int err = ldap_parse_sasl_bind_result(lc, msg, &data, 0);
+    if( err != LDAP_SUCCESS && err != LDAP_SASL_BIND_IN_PROGRESS ){
+        ber_bvfree(data);
+        throw LDAPException(err);
+    }else{
+        if(data){
+            DEBUG(LDAP_DEBUG_TRACE, "   creds present" << std::endl);
+            m_creds=string(data->bv_val, data->bv_len);
+            ber_bvfree(data);
+        } else {
+            DEBUG(LDAP_DEBUG_TRACE, "   no creds present" << std::endl);
+        }
+    }
+}
+
+LDAPSaslBindResult::~LDAPSaslBindResult(){
+    DEBUG(LDAP_DEBUG_DESTROY,"LDAPSaslBindResult::~LDAPSaslBindResult()" << endl);
+}
+
+const string& LDAPSaslBindResult::getServerCreds() const{
+    return m_creds;
+}
+
diff --git a/contrib/ldapc++/src/LDAPSaslBindResult.h b/contrib/ldapc++/src/LDAPSaslBindResult.h
new file mode 100644 (file)
index 0000000..d139b9f
--- /dev/null
@@ -0,0 +1,42 @@
+/*
+ * Copyright 2007, OpenLDAP Foundation, All Rights Reserved.
+ * COPYING RESTRICTIONS APPLY, see COPYRIGHT file
+ */
+
+#ifndef LDAP_SASL_BIND_RESULT_H
+#define LDAP_SASL_BIND_RESULT_H
+
+#include <ldap.h>
+
+#include <LDAPResult.h>
+
+class LDAPRequest;
+
+/**
+ * Object of this class are created by the LDAPMsg::create method if
+ * results for an Extended Operation were returned by a LDAP server.
+ */
+class LDAPSaslBindResult : public LDAPResult {
+    public :
+        /**
+         * Constructor that creates an LDAPExtResult-object from the C-API
+         * structures
+         */
+        LDAPSaslBindResult(const LDAPRequest* req, LDAPMessage* msg);
+
+        /**
+         * The Destructor
+         */
+        virtual ~LDAPSaslBindResult();
+
+        /**
+         * @returns If the result contained data this method will return
+         *          the data to the caller as a std::string.
+         */
+        const std::string& getServerCreds() const;
+
+    private:
+        std::string m_creds;
+};
+
+#endif // LDAP_SASL_BIND_RESULT_H
index 0768c693c8c15a2eddf11853714c0d6515b108d1..1e5cf8eebdd0778621dd97b646493563e5b02283 100644 (file)
@@ -6,73 +6,79 @@
 lib_LTLIBRARIES = libldapcpp.la
 
 libldapcpp_la_SOURCES = LDAPAddRequest.cpp \
-                        LDAPAsynConnection.cpp \
-                        LDAPAttribute.cpp \
-                        LDAPAttributeList.cpp \
-                        LDAPAttrType.cpp \
-                        LDAPBindRequest.cpp \
-                        LDAPCompareRequest.cpp \
-                        LDAPConnection.cpp \
-                        LDAPConstraints.cpp \
-                        LDAPControl.cpp \
-                        LDAPControlSet.cpp \
-                        LDAPDeleteRequest.cpp \
-                        LDAPEntry.cpp \
-                        LDAPEntryList.cpp \
-                        LDAPException.cpp \
-                        LDAPExtRequest.cpp \
-                        LDAPExtResult.cpp \
-                        LDAPMessage.cpp \
-                        LDAPMessageQueue.cpp \
-                        LDAPModDNRequest.cpp \
-                        LDAPModification.cpp \
-                        LDAPModifyRequest.cpp \
-                        LDAPModList.cpp \
-                        LDAPObjClass.cpp \
-                        LDAPRebind.cpp \
-                        LDAPRebindAuth.cpp \
-                        LDAPReferralException.cpp \
-                        LDAPReferenceList.cpp \
-                        LDAPRequest.cpp \
-                        LDAPResult.cpp \
-                        LDAPSchema.cpp \
-                        LDAPSearchReference.cpp \
-                        LDAPSearchRequest.cpp \
-                        LDAPSearchResult.cpp \
-                        LDAPSearchResults.cpp \
-                        LDAPUrl.cpp \
-                        LDAPUrlList.cpp \
-                        StringList.cpp 
+                       LDAPAsynConnection.cpp \
+                       LDAPAttribute.cpp \
+                       LDAPAttributeList.cpp \
+                       LDAPAttrType.cpp \
+                       LDAPBindRequest.cpp \
+                       LDAPCompareRequest.cpp \
+                       LDAPConnection.cpp \
+                       LDAPConstraints.cpp \
+                       LDAPControl.cpp \
+                       LDAPControlSet.cpp \
+                       LDAPDeleteRequest.cpp \
+                       LDAPEntry.cpp \
+                       LDAPEntryList.cpp \
+                       LDAPException.cpp \
+                       LDAPExtRequest.cpp \
+                       LDAPExtResult.cpp \
+                       LDAPMessage.cpp \
+                       LDAPMessageQueue.cpp \
+                       LDAPModDNRequest.cpp \
+                       LDAPModification.cpp \
+                       LDAPModifyRequest.cpp \
+                       LDAPModList.cpp \
+                       LDAPObjClass.cpp \
+                       LDAPRebind.cpp \
+                       LDAPRebindAuth.cpp \
+                       LDAPReferralException.cpp \
+                       LDAPReferenceList.cpp \
+                       LDAPRequest.cpp \
+                       LDAPResult.cpp \
+                       LDAPSaslBindResult.cpp \
+                       LDAPSchema.cpp \
+                       LDAPSearchReference.cpp \
+                       LDAPSearchRequest.cpp \
+                       LDAPSearchResult.cpp \
+                       LDAPSearchResults.cpp \
+                       LDAPUrl.cpp \
+                       LDAPUrlList.cpp \
+                       SaslInteraction.cpp \
+                       SaslInteractionHandler.cpp \
+                       StringList.cpp 
 
 include_HEADERS = LDAPAsynConnection.h \
-                        LDAPAttribute.h \
-                        LDAPAttributeList.h \
-                        LDAPAttrType.h \
-                        LDAPConnection.h \
-                        LDAPConstraints.h \
-                        LDAPControl.h \
-                        LDAPControlSet.h \
-                        LDAPEntry.h \
-                        LDAPEntryList.h \
-                        LDAPException.h \
-                        LDAPExtResult.h \
-                        LDAPMessage.h \
-                        LDAPMessageQueue.h \
-                        LDAPModification.h \
-                        LDAPModList.h \
-                        LDAPObjClass.h \
-                        LDAPRebind.h \
-                        LDAPRebindAuth.h \
-                        LDAPReferralException.h \
-                        LDAPReferenceList.h \
-                        LDAPResult.h \
-                        LDAPSchema.h \
-                        LDAPSearchReference.h \
-                        LDAPSearchResult.h \
-                        LDAPSearchResults.h \
-                        LDAPUrl.h \
-                        LDAPUrlList.h \
-                        StringList.h 
+                       LDAPAttribute.h \
+                       LDAPAttributeList.h \
+                       LDAPAttrType.h \
+                       LDAPConnection.h \
+                       LDAPConstraints.h \
+                       LDAPControl.h \
+                       LDAPControlSet.h \
+                       LDAPEntry.h \
+                       LDAPEntryList.h \
+                       LDAPException.h \
+                       LDAPExtResult.h \
+                       LDAPMessage.h \
+                       LDAPMessageQueue.h \
+                       LDAPModification.h \
+                       LDAPModList.h \
+                       LDAPObjClass.h \
+                       LDAPRebind.h \
+                       LDAPRebindAuth.h \
+                       LDAPReferralException.h \
+                       LDAPReferenceList.h \
+                       LDAPResult.h \
+                       LDAPSaslBindResult.h \
+                       LDAPSchema.h \
+                       LDAPSearchReference.h \
+                       LDAPSearchResult.h \
+                       LDAPSearchResults.h \
+                       LDAPUrl.h \
+                       LDAPUrlList.h \
+                       SaslInteraction.h \
+                       SaslInteractionHandler.h \
+                       StringList.h 
 
 noinst_HEADERS = LDAPAddRequest.h \
                 LDAPBindRequest.h \
index a56e34b48c6cae68ecbf8c49ef791580653cb1f2..7f011bec52b640c18575579e46cb3d782b130904 100644 (file)
@@ -6,6 +6,9 @@
 /* Define to 1 if you have the <inttypes.h> header file. */
 #undef HAVE_INTTYPES_H
 
+/* Define to 1 if you have the <ldap.h> header file. */
+#undef HAVE_LDAP_H
+
 /* Define to 1 if you have the `resolv' library (-lresolv). */
 #undef HAVE_LIBRESOLV
 
@@ -30,6 +33,9 @@
 /* Define to 1 if you have the <sys/types.h> header file. */
 #undef HAVE_SYS_TYPES_H
 
+/* Define to 1 if you have the <termios.h> header file. */
+#undef HAVE_TERMIOS_H
+
 /* Define to 1 if you have the <unistd.h> header file. */
 #undef HAVE_UNISTD_H