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
LDAPCtrl(const char * oid,bool critical,const char * data,int length)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
LDAPCtrl(const string & oid,bool critical,const string & data)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
LDAPCtrl(const LDAPControl * ctrl)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
~LDAPCtrl()47 LDAPCtrl::~LDAPCtrl(){
48 DEBUG(LDAP_DEBUG_DESTROY,"LDAPCtrl::~LDAPCtrl" << endl);
49 }
50
getOID() const51 string LDAPCtrl::getOID() const{
52 DEBUG(LDAP_DEBUG_TRACE,"LDAPCtrl::getOID()" << endl);
53 return m_oid;
54 }
55
isCritical() const56 bool LDAPCtrl::isCritical()const {
57 DEBUG(LDAP_DEBUG_TRACE,"LDAPCtrl::isCritical()" << endl);
58 return m_isCritical;
59 }
60
hasData() const61 bool LDAPCtrl::hasData() const{
62 return !m_noData;
63 }
64
getData() const65 string LDAPCtrl::getData() const {
66 DEBUG(LDAP_DEBUG_TRACE,"LDAPCtrl::getData()" << endl);
67 return m_data;
68 }
69
getControlStruct() const70 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
freeLDAPControlStruct(LDAPControl * ctrl)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