+// $OpenLDAP$
/*
- * Copyright 2000, OpenLDAP Foundation, All Rights Reserved.
+ * Copyright 2000-2011 The OpenLDAP Foundation, All Rights Reserved.
* COPYING RESTRICTIONS APPLY, see COPYRIGHT file
*/
#include "LDAPResult.h"
#include "LDAPException.h"
-#include "LDAPReferralException.h"
#include "LDAPUrlList.h"
#include "LDAPConnection.h"
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){
delete msg;
throw LDAPReferralException(urls);
}else{
+ string srvMsg = res->getErrMsg();
delete res;
delete msg;
- throw LDAPException(resCode);
+ 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(){
}
break;
default :
+ string srvMsg = res->getErrMsg();
delete res;
delete msg;
- throw LDAPException(resCode);
+ throw LDAPException(resCode, srvMsg);
}
}
}
break;
default :
+ string srvMsg = res->getErrMsg();
delete res;
delete msg;
- throw LDAPException(resCode);
+ throw LDAPException(resCode, srvMsg);
}
}
-void LDAPConnection::add(const LDAPEntry* le, const LDAPConstraints* cons=0){
+void LDAPConnection::add(const LDAPEntry* le, const LDAPConstraints* cons){
DEBUG(LDAP_DEBUG_TRACE,"LDAPConnection::add" << endl);
LDAPMessageQueue* msg=0;
LDAPResult* res=0;
}
break;
default :
+ string srvMsg = res->getErrMsg();
delete res;
delete msg;
- throw LDAPException(resCode);
+ throw LDAPException(resCode, srvMsg);
}
}
}
break;
default :
+ string srvMsg = res->getErrMsg();
delete res;
delete msg;
- throw LDAPException(resCode);
+ throw LDAPException(resCode, srvMsg);
}
}
void LDAPConnection::rename(const string& dn, const string& newRDN,
bool delOldRDN, const string& newParentDN,
- const LDAPConstraints* cons=0){
+ const LDAPConstraints* cons){
DEBUG(LDAP_DEBUG_TRACE,"LDAPConnection::rename" << endl);
LDAPMessageQueue* msg=0;
LDAPResult* res=0;
}
break;
default :
+ string srvMsg = res->getErrMsg();
delete res;
delete msg;
- throw LDAPException(resCode);
+ throw LDAPException(resCode, srvMsg);
}
}
LDAPSearchResults* results= 0;
try{
+ results = new LDAPSearchResults();
msgq = LDAPAsynConnection::search(base,scope, filter, attrs, attrsOnly,
cons);
- results = new LDAPSearchResults();
res = results->readMessageQueue(msgq);
}catch(LDAPException e){
+ delete results; // memcheck
delete msgq;
throw;
}
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);
+ throw LDAPException(resCode, srvMsg);
}
}
return 0;
}
LDAPExtResult* LDAPConnection::extOperation(const string& oid,
- const string& value, const LDAPConstraints *cons = 0){
+ const string& value, const LDAPConstraints *cons){
DEBUG(LDAP_DEBUG_TRACE,"LDAPConnection::extOperation" << endl);
LDAPMessageQueue* msg=0;
LDAPExtResult* res=0;
}
break;
default :
+ string srvMsg = res->getErrMsg();
delete res;
delete msg;
- throw LDAPException(resCode);
+ throw LDAPException(resCode, srvMsg);
}
}
const LDAPConstraints* LDAPConnection::getConstraints() const{
return LDAPAsynConnection::getConstraints();
}
+
+TlsOptions LDAPConnection::getTlsOptions() const {
+ return LDAPAsynConnection::getTlsOptions();
+}