1 // $OpenLDAP$ 2 /* 3 * Copyright 2000-2021 The OpenLDAP Foundation, All Rights Reserved. 4 * COPYING RESTRICTIONS APPLY, see COPYRIGHT file 5 */ 6 7 8 #include "LDAPControl.h" 9 #include "debug.h" 10 11 using namespace std; 12 13 LDAPCtrl::LDAPCtrl(const char *oid, bool critical, const char* data, 14 int length){ 15 DEBUG(LDAP_DEBUG_CONSTRUCT,"LDAPCtrl::LDAPCtrl()" << endl); 16 DEBUG(LDAP_DEBUG_CONSTRUCT | LDAP_DEBUG_PARAMETER, 17 " oid:" << oid << endl << " critical:" << critical << endl); 18 m_oid = oid; 19 m_isCritical=critical; 20 if (data != 0 && length !=0){ 21 m_data.assign(data,length); 22 m_noData=false; 23 }else{ 24 m_data=string(); 25 m_noData=true; 26 } 27 } 28 29 LDAPCtrl::LDAPCtrl(const string& oid, bool critical, const string& data){ 30 DEBUG(LDAP_DEBUG_CONSTRUCT,"LDAPCtrl::LDAPCtrl()" << endl); 31 DEBUG(LDAP_DEBUG_CONSTRUCT | LDAP_DEBUG_PARAMETER, 32 " oid:" << oid << endl << " critical:" << critical << endl); 33 m_oid=oid; 34 m_isCritical=critical; 35 m_data=data; 36 m_noData=false; 37 } 38 39 LDAPCtrl::LDAPCtrl(const LDAPControl* ctrl){ 40 DEBUG(LDAP_DEBUG_CONSTRUCT,"LDAPCtrl::LDAPCtrl()" << endl); 41 m_oid = string(ctrl->ldctl_oid); 42 m_isCritical = ctrl->ldctl_iscritical ? true : false; 43 m_data = string(ctrl->ldctl_value.bv_val, ctrl->ldctl_value.bv_len ); 44 m_noData = ctrl->ldctl_value.bv_len ? false : true; 45 } 46 47 LDAPCtrl::~LDAPCtrl(){ 48 DEBUG(LDAP_DEBUG_DESTROY,"LDAPCtrl::~LDAPCtrl" << endl); 49 } 50 51 string LDAPCtrl::getOID() const{ 52 DEBUG(LDAP_DEBUG_TRACE,"LDAPCtrl::getOID()" << endl); 53 return m_oid; 54 } 55 56 bool LDAPCtrl::isCritical()const { 57 DEBUG(LDAP_DEBUG_TRACE,"LDAPCtrl::isCritical()" << endl); 58 return m_isCritical; 59 } 60 61 bool LDAPCtrl::hasData() const{ 62 return !m_noData; 63 } 64 65 string LDAPCtrl::getData() const { 66 DEBUG(LDAP_DEBUG_TRACE,"LDAPCtrl::getData()" << endl); 67 return m_data; 68 } 69 70 LDAPControl* LDAPCtrl::getControlStruct() const { 71 DEBUG(LDAP_DEBUG_TRACE,"LDAPCtrl::getControlStruct()" << endl); 72 LDAPControl* ret = new LDAPControl; 73 ret->ldctl_oid= new char[m_oid.size() + 1]; 74 m_oid.copy(ret->ldctl_oid,string::npos); 75 ret->ldctl_oid[m_oid.size()]=0; 76 if ( m_noData ) { 77 ret->ldctl_value.bv_len = 0; 78 ret->ldctl_value.bv_val = NULL; 79 } else { 80 ret->ldctl_value.bv_len=m_data.size(); 81 ret->ldctl_value.bv_val= new char[m_data.size()]; 82 m_data.copy(ret->ldctl_value.bv_val,string::npos); 83 } 84 ret->ldctl_iscritical = ( m_isCritical ? 1:0); 85 return ret; 86 } 87 88 void LDAPCtrl::freeLDAPControlStruct(LDAPControl *ctrl){ 89 DEBUG(LDAP_DEBUG_TRACE,"LDAPCtrl::freeControlStruct()" << endl); 90 delete[] ctrl->ldctl_oid; 91 delete[] ctrl->ldctl_value.bv_val; 92 delete ctrl; 93 } 94 95