diff options
Diffstat (limited to 'contrib/ldapc++/src/LDAPConnection.cpp')
-rw-r--r-- | contrib/ldapc++/src/LDAPConnection.cpp | 382 |
1 files changed, 382 insertions, 0 deletions
diff --git a/contrib/ldapc++/src/LDAPConnection.cpp b/contrib/ldapc++/src/LDAPConnection.cpp new file mode 100644 index 0000000..5094b6e --- /dev/null +++ b/contrib/ldapc++/src/LDAPConnection.cpp @@ -0,0 +1,382 @@ +// $OpenLDAP$ +/* + * Copyright 2000-2018 The OpenLDAP Foundation, All Rights Reserved. + * COPYING RESTRICTIONS APPLY, see COPYRIGHT file + */ + +#include "debug.h" + +#include "LDAPResult.h" +#include "LDAPException.h" +#include "LDAPUrlList.h" + +#include "LDAPConnection.h" +const int LDAPConnection::SEARCH_BASE = LDAPAsynConnection::SEARCH_BASE; +const int LDAPConnection::SEARCH_ONE = LDAPAsynConnection::SEARCH_ONE; +const int LDAPConnection::SEARCH_SUB = LDAPAsynConnection::SEARCH_SUB; + +using namespace std; + +LDAPConnection::LDAPConnection(const string& hostname, int port, + LDAPConstraints* cons) : + LDAPAsynConnection(hostname, port, cons){ +} + +LDAPConnection::~LDAPConnection(){ +} + +void LDAPConnection::start_tls(){ + LDAPAsynConnection::start_tls(); +} + +void LDAPConnection::bind(const string& dn, const string& passwd, + LDAPConstraints* cons){ + DEBUG(LDAP_DEBUG_TRACE,"LDAPConnection::bind" << endl); + LDAPMessageQueue* msg=0; + LDAPResult* res=0; + try{ + msg = LDAPAsynConnection::bind(dn,passwd,cons); + res = (LDAPResult*)msg->getNext(); + }catch(LDAPException e){ + delete msg; + delete res; + throw; + } + int resCode=res->getResultCode(); + if(resCode != LDAPResult::SUCCESS) { + if(resCode == LDAPResult::REFERRAL){ + LDAPUrlList urls = res->getReferralUrls(); + delete res; + delete msg; + throw LDAPReferralException(urls); + }else{ + string srvMsg = res->getErrMsg(); + delete res; + delete msg; + throw LDAPException(resCode, srvMsg); + } + } + delete res; + delete msg; // memcheck +} + +void LDAPConnection::saslInteractiveBind( const std::string &mech, + int flags, + SaslInteractionHandler *sih, + const LDAPConstraints *cons) +{ + DEBUG(LDAP_DEBUG_TRACE,"LDAPConnection::bind" << endl); + LDAPMessageQueue* msg=0; + LDAPResult* res=0; + try{ + msg = LDAPAsynConnection::saslInteractiveBind(mech, flags, sih, cons); + res = (LDAPResult*)msg->getNext(); + }catch(LDAPException e){ + delete msg; + delete res; + throw; + } + int resCode=res->getResultCode(); + if(resCode != LDAPResult::SUCCESS) { + if(resCode == LDAPResult::REFERRAL){ + LDAPUrlList urls = res->getReferralUrls(); + delete res; + delete msg; + throw LDAPReferralException(urls); + }else{ + string srvMsg = res->getErrMsg(); + delete res; + delete msg; + throw LDAPException(resCode, srvMsg); + } + } + delete res; + delete msg; +} + +void LDAPConnection::unbind(){ + LDAPAsynConnection::unbind(); +} + +bool LDAPConnection::compare(const string& dn, const LDAPAttribute& attr, + LDAPConstraints* cons){ + DEBUG(LDAP_DEBUG_TRACE,"LDAPConnection::compare" << endl); + LDAPMessageQueue* msg=0; + LDAPResult* res=0; + try{ + msg = LDAPAsynConnection::compare(dn,attr,cons); + res = (LDAPResult*)msg->getNext(); + }catch(LDAPException e){ + delete msg; + delete res; + throw; + } + int resCode=res->getResultCode(); + switch (resCode){ + case LDAPResult::COMPARE_TRUE : + delete res; + delete msg; + return true; + break; + case LDAPResult::COMPARE_FALSE : + delete res; + delete msg; + return false; + break; + case LDAPResult::REFERRAL : + { + LDAPUrlList urls = res->getReferralUrls(); + delete res; + delete msg; + throw LDAPReferralException(urls); + } + break; + default : + string srvMsg = res->getErrMsg(); + delete res; + delete msg; + throw LDAPException(resCode, srvMsg); + } +} + +void LDAPConnection::del(const string& dn, const LDAPConstraints* cons){ + DEBUG(LDAP_DEBUG_TRACE,"LDAPConnection::del" << endl); + LDAPMessageQueue* msg=0; + LDAPResult* res=0; + try{ + msg = LDAPAsynConnection::del(dn,cons); + res = (LDAPResult*)msg->getNext(); + }catch(LDAPException e){ + delete msg; + delete res; + throw; + } + int resCode=res->getResultCode(); + switch (resCode){ + case LDAPResult::SUCCESS : + delete res; + delete msg; + break; + case LDAPResult::REFERRAL : + { + LDAPUrlList urls = res->getReferralUrls(); + delete res; + delete msg; + throw LDAPReferralException(urls); + } + break; + default : + string srvMsg = res->getErrMsg(); + delete res; + delete msg; + throw LDAPException(resCode, srvMsg); + } + +} + +void LDAPConnection::add(const LDAPEntry* le, const LDAPConstraints* cons){ + DEBUG(LDAP_DEBUG_TRACE,"LDAPConnection::add" << endl); + LDAPMessageQueue* msg=0; + LDAPResult* res=0; + try{ + msg = LDAPAsynConnection::add(le,cons); + res = (LDAPResult*)msg->getNext(); + }catch(LDAPException e){ + delete msg; + delete res; + throw; + } + int resCode=res->getResultCode(); + switch (resCode){ + case LDAPResult::SUCCESS : + delete res; + delete msg; + break; + case LDAPResult::REFERRAL : + { + LDAPUrlList urls = res->getReferralUrls(); + delete res; + delete msg; + throw LDAPReferralException(urls); + } + break; + default : + string srvMsg = res->getErrMsg(); + delete res; + delete msg; + throw LDAPException(resCode, srvMsg); + } +} + +void LDAPConnection::modify(const string& dn, const LDAPModList* mods, + const LDAPConstraints* cons){ + DEBUG(LDAP_DEBUG_TRACE,"LDAPConnection::modify" << endl); + LDAPMessageQueue* msg=0; + LDAPResult* res=0; + try{ + msg = LDAPAsynConnection::modify(dn,mods,cons); + res = (LDAPResult*)msg->getNext(); + }catch(LDAPException e){ + delete msg; + delete res; + throw; + } + int resCode=res->getResultCode(); + switch (resCode){ + case LDAPResult::SUCCESS : + delete res; + delete msg; + break; + case LDAPResult::REFERRAL : + { + LDAPUrlList urls = res->getReferralUrls(); + delete res; + delete msg; + throw LDAPReferralException(urls); + } + break; + default : + string srvMsg = res->getErrMsg(); + delete res; + delete msg; + throw LDAPException(resCode, srvMsg); + } + +} + +void LDAPConnection::rename(const string& dn, const string& newRDN, + bool delOldRDN, const string& newParentDN, + const LDAPConstraints* cons){ + DEBUG(LDAP_DEBUG_TRACE,"LDAPConnection::rename" << endl); + LDAPMessageQueue* msg=0; + LDAPResult* res=0; + try{ + msg = LDAPAsynConnection::rename(dn,newRDN,delOldRDN, newParentDN, + cons); + res = (LDAPResult*)msg->getNext(); + }catch(LDAPException e){ + delete msg; + delete res; + throw; + } + int resCode=res->getResultCode(); + switch (resCode){ + case LDAPResult::SUCCESS : + delete res; + delete msg; + break; + case LDAPResult::REFERRAL : + { + LDAPUrlList urls = res->getReferralUrls(); + delete res; + delete msg; + throw LDAPReferralException(urls); + } + break; + default : + string srvMsg = res->getErrMsg(); + delete res; + delete msg; + throw LDAPException(resCode, srvMsg); + } +} + +LDAPSearchResults* LDAPConnection::search(const string& base, int scope, + const string& filter, const StringList& attrs, bool attrsOnly, + const LDAPConstraints* cons){ + DEBUG(LDAP_DEBUG_TRACE,"LDAPConnection::search" << endl); + LDAPMessageQueue* msgq=0; + LDAPResult* res=0; + LDAPSearchResults* results= 0; + + try{ + results = new LDAPSearchResults(); + msgq = LDAPAsynConnection::search(base,scope, filter, attrs, attrsOnly, + cons); + res = results->readMessageQueue(msgq); + }catch(LDAPException e){ + delete results; // memcheck + delete msgq; + throw; + } + if(res != 0){ + int resCode=res->getResultCode(); + switch (resCode){ + case LDAPResult::SUCCESS : + delete res; + delete msgq; + return results; + break; + case LDAPResult::REFERRAL : + { + LDAPUrlList urls = res->getReferralUrls(); + delete results; // memcheck + delete res; + delete msgq; + throw LDAPReferralException(urls); + } + break; + default : + string srvMsg = res->getErrMsg(); + delete results; // memcheck + delete res; + delete msgq; + throw LDAPException(resCode, srvMsg); + } + } + return 0; +} + +LDAPExtResult* LDAPConnection::extOperation(const string& oid, + const string& value, const LDAPConstraints *cons){ + DEBUG(LDAP_DEBUG_TRACE,"LDAPConnection::extOperation" << endl); + LDAPMessageQueue* msg=0; + LDAPExtResult* res=0; + try{ + msg = LDAPAsynConnection::extOperation(oid,value,cons); + res = (LDAPExtResult*)msg->getNext(); + }catch(LDAPException e){ + delete msg; + delete res; + throw; + } + int resCode=res->getResultCode(); + switch (resCode){ + case LDAPResult::SUCCESS : + delete msg; + return res; + case LDAPResult::REFERRAL : + { + LDAPUrlList urls = res->getReferralUrls(); + delete res; + delete msg; + throw LDAPReferralException(urls); + } + break; + default : + string srvMsg = res->getErrMsg(); + delete res; + delete msg; + throw LDAPException(resCode, srvMsg); + } +} + +const string& LDAPConnection::getHost() const{ + return LDAPAsynConnection::getHost(); +} + +int LDAPConnection::getPort() const{ + return LDAPAsynConnection::getPort(); +} + +void LDAPConnection::setConstraints(LDAPConstraints* cons){ + LDAPAsynConnection::setConstraints(cons); +} + +const LDAPConstraints* LDAPConnection::getConstraints() const{ + return LDAPAsynConnection::getConstraints(); +} + +TlsOptions LDAPConnection::getTlsOptions() const { + return LDAPAsynConnection::getTlsOptions(); +} |