⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ldapattribute.cpp

📁 ldap服务器源码
💻 CPP
字号:
/* * Copyright 2000, OpenLDAP Foundation, All Rights Reserved. * COPYING RESTRICTIONS APPLY, see COPYRIGHT file *///TODO!!!//  * some kind of iterator to step through the attribute values//  * remove values from Attribute//  * handling of subtypes (;de; and so on)//  * some documentation#include <ldap.h> //#include <ctype.h>#include "debug.h"#include "StringList.h"#include "LDAPAttribute.h"using namespace std;LDAPAttribute::LDAPAttribute(){    DEBUG(LDAP_DEBUG_CONSTRUCT, "LDAPAttribute::LDAPAttribute( )" << endl);    m_name=string();}LDAPAttribute::LDAPAttribute(const LDAPAttribute& attr){    DEBUG(LDAP_DEBUG_CONSTRUCT, "LDAPAttribute::LDAPAttribute(&)" << endl);    DEBUG(LDAP_DEBUG_CONSTRUCT | LDAP_DEBUG_PARAMETER,            "   attr:" << attr << endl);	m_name=attr.m_name;    m_values=StringList(attr.m_values);}LDAPAttribute::LDAPAttribute(const string& name, const string& value){    DEBUG(LDAP_DEBUG_CONSTRUCT, "LDAPAttribute::LDAPAttribute()" << endl);    DEBUG(LDAP_DEBUG_CONSTRUCT | LDAP_DEBUG_PARAMETER,            "   name:" << name << endl << "   value:" << value << endl);    this->setName(name);    if(value != ""){    	this->addValue(value);    }}LDAPAttribute::LDAPAttribute(const string& name, const StringList& values){    DEBUG(LDAP_DEBUG_CONSTRUCT, "LDAPAttribute::LDAPAttribute()" << endl);    DEBUG(LDAP_DEBUG_CONSTRUCT | LDAP_DEBUG_PARAMETER,            "   name:" << name << endl);    m_name=name;    m_values=values;}LDAPAttribute::LDAPAttribute(const char *name, char **values){    DEBUG(LDAP_DEBUG_CONSTRUCT, "LDAPAttribute::LDAPAttribute()" << endl);    DEBUG(LDAP_DEBUG_CONSTRUCT | LDAP_DEBUG_PARAMETER,            "   name:" << name << endl);	this->setName(name);	this->setValues(values);}LDAPAttribute::LDAPAttribute(const char *name, BerValue **values){    DEBUG(LDAP_DEBUG_CONSTRUCT, "LDAPAttribute::LDAPAttribute()" << endl);    DEBUG(LDAP_DEBUG_CONSTRUCT | LDAP_DEBUG_PARAMETER,            "   name:" << name << endl);	this->setName(name);	this->setValues(values);}LDAPAttribute::~LDAPAttribute(){    DEBUG(LDAP_DEBUG_DESTROY,"LDAPAttribute::~LDAPAttribute()" << endl);}void LDAPAttribute::addValue(const string& value){    DEBUG(LDAP_DEBUG_TRACE,"LDAPAttribute::addValue()" << endl);    m_values.add(value);}int LDAPAttribute::addValue(const BerValue *value){    DEBUG(LDAP_DEBUG_TRACE,"LDAPAttribute::addValue()" << endl);	if(value!=0){		this->addValue(string(value->bv_val, value->bv_len));		return 0;	}	return -1;}int LDAPAttribute::setValues(char **values){    DEBUG(LDAP_DEBUG_TRACE,"LDAPAttribute::setValues()" << endl);	if(values){        m_values.clear();        for( char **i=values; *i!=0; i++){            this->addValue(*i);        }    }    return 0;}int LDAPAttribute::setValues(BerValue **values){    DEBUG(LDAP_DEBUG_TRACE,"LDAPAttribute::setValues()" << endl);    if(values){	    m_values.clear();        for( BerValue **i=values; *i!=0; i++){            if( this->addValue(*i) ){                return -1;            }        }    }	return 0;}void LDAPAttribute::setValues(const StringList& values){    DEBUG(LDAP_DEBUG_TRACE,"LDAPAttribute::setValues()" << endl);    m_values=values;}const StringList& LDAPAttribute::getValues() const{    DEBUG(LDAP_DEBUG_TRACE,"LDAPAttribute::getValues()" << endl);    return m_values;}BerValue** LDAPAttribute::getBerValues() const{    DEBUG(LDAP_DEBUG_TRACE,"LDAPAttribute::getBerValues()" << endl);    size_t size=m_values.size();    if (size == 0){        return 0;    }else{        BerValue **temp = (BerValue**) malloc(sizeof(BerValue*) * (size+1));        StringList::const_iterator i;        int p=0;        for(i=m_values.begin(), p=0; i!=m_values.end(); i++,p++){            temp[p]=(BerValue*) malloc(sizeof(BerValue));            temp[p]->bv_len= i->size();            temp[p]->bv_val= (char*) malloc(sizeof(char) * (i->size()+1));            i->copy(temp[p]->bv_val,string::npos);        }        temp[size]=0;        return temp;    }}int LDAPAttribute::getNumValues() const{    DEBUG(LDAP_DEBUG_TRACE,"LDAPAttribute::getNumValues()" << endl);	return m_values.size();}const string& LDAPAttribute::getName() const {    DEBUG(LDAP_DEBUG_TRACE, "LDAPAttribute::getName()" << endl);	return m_name;}void LDAPAttribute::setName(const string& name){    DEBUG(LDAP_DEBUG_TRACE, "LDAPAttribute::setName()" << endl);    DEBUG(LDAP_DEBUG_TRACE | LDAP_DEBUG_PARAMETER,"   name:" << name << endl);    m_name.erase();    m_name=name;}// The bin-FLAG of the mod_op  is always set to LDAP_MOD_BVALUES (0x80) LDAPMod* LDAPAttribute::toLDAPMod() const {    DEBUG(LDAP_DEBUG_TRACE, "LDAPAttribute::toLDAPMod()" << endl);    LDAPMod* ret= (LDAPMod*) malloc(sizeof(LDAPMod));    ret->mod_op=LDAP_MOD_BVALUES;	//always assume binary-Values    ret->mod_type= (char*) malloc(sizeof(char) * (m_name.size()+1));    m_name.copy(ret->mod_type,string::npos);    ret->mod_type[m_name.size()]=0;    ret->mod_bvalues=this->getBerValues();    return ret;}bool LDAPAttribute::isNotPrintable() const {    StringList::const_iterator i;    for(i=m_values.begin(); i!=m_values.end(); i++){	size_t len = i->size();	for(size_t j=0; j<len; j++){	    if (! isprint( (i->data())[j] ) ){		return true;	    }	}    }    return false;}ostream& operator << (ostream& s, const LDAPAttribute& attr){    s << attr.m_name << "=";    StringList::const_iterator i;    if (attr.isNotPrintable()){	    s << "NOT_PRINTABLE" ;    }else{	for(i=attr.m_values.begin(); i!=attr.m_values.end(); i++){	    s << *i << " ";	}    }	return s;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -