yast2-ldap
Public Member Functions | Private Member Functions | Private Attributes

LdapAgent Class Reference

An interface class between YaST2 and Ldap Agent. More...

#include <LdapAgent.h>

Inheritance diagram for LdapAgent:
SCRAgent

List of all members.

Public Member Functions

 LdapAgent ()
virtual ~LdapAgent ()
virtual YCPValue Read (const YCPPath &path, const YCPValue &arg=YCPNull(), const YCPValue &opt=YCPNull())
virtual YCPBoolean Write (const YCPPath &path, const YCPValue &arg, const YCPValue &arg2=YCPNull())
virtual YCPValue Execute (const YCPPath &path, const YCPValue &arg=YCPNull(), const YCPValue &arg2=YCPNull())
virtual YCPList Dir (const YCPPath &path)
virtual YCPValue otherCommand (const YCPTerm &term)

Private Member Functions

string getValue (const YCPMap map, const string key)
int getIntValue (const YCPMap map, const string key, int deflt)
bool getBoolValue (const YCPMap map, const string key)
YCPList getListValue (const YCPMap map, const string key)
StringList ycplist2stringlist (YCPList l)
YCPList stringlist2ycplist (StringList sl)
YCPList stringlist2ycplist_low (StringList sl)
YCPMap getGroupEntry (LDAPEntry *entry, string member_attribute)
YCPMap getUserEntry (LDAPEntry *entry)
YCPMap getSearchedEntry (LDAPEntry *entry, bool sinlge_value)
YCPMap getObjectAttributes (string dn)
YCPBoolean deleteSubTree (string dn)
YCPBoolean moveWithSubtree (string dn, string new_dn, string parent_dn)
YCPBoolean copyOneEntry (string dn, string new_dn)
void debug_exception (LDAPException e, string action)
void debug_referral (LDAPReferralException e, string action)
void set_tls_options (YCPMap args, string tls)
void generate_attr_list (LDAPAttributeList *attrs, YCPMap map)
void generate_mod_list (LDAPModList *modlist, YCPMap map, YCPValue attrs)

Private Attributes

int port
string hostname
string bind_dn
string bind_pw
string ldap_error
string server_error
bool tls_error
int ldap_error_code
bool ldap_initialized
string userpw_hash
LDAPConnection * ldap
LDAPConstraints * cons
LDAPSchema * schema
YCPMap users
YCPMap users_by_name
YCPMap users_by_uidnumber
YCPMap usernames
YCPMap userdns
YCPMap uids
YCPMap homes
YCPMap user_items
YCPMap groups
YCPMap groups_by_name
YCPMap groups_by_gidnumber
YCPMap groupnames
YCPMap gids
YCPMap group_items

Detailed Description

An interface class between YaST2 and Ldap Agent.


Constructor & Destructor Documentation

LdapAgent::LdapAgent ( )

Default constructor.

Constructor

References cons, ldap, ldap_initialized, schema, and tls_error.

LdapAgent::~LdapAgent ( ) [virtual]

Destructor.

Destructor

References cons, ldap, and schema.


Member Function Documentation

YCPBoolean LdapAgent::copyOneEntry ( string  dn,
string  new_dn 
) [private]

copy the LDAP entry to new place (+ changes DN-constructing attribute, like cn,uid,ou etc.)

Parameters:
dnDN of original entry
new_dnnew DN (= new place)

References YCPMap::add(), YCPList::add(), YCPList::contains(), debug_exception(), generate_attr_list(), getSearchedEntry(), ldap, ldap_error, YCPMap::value(), and y2debug.

Referenced by moveWithSubtree().

void LdapAgent::debug_exception ( LDAPException  e,
string  action 
) [private]

log the output of an exception and set the return value from agent's call

References ldap_error, ldap_error_code, server_error, and y2error.

Referenced by copyOneEntry(), deleteSubTree(), Execute(), getObjectAttributes(), moveWithSubtree(), Read(), and Write().

void LdapAgent::debug_referral ( LDAPReferralException  e,
string  action 
) [private]

log the output of Referral Exception

References y2milestone.

Referenced by Execute(), and Read().

YCPBoolean LdapAgent::deleteSubTree ( string  dn) [private]

deletes all children of given entry

delete children of LDAP entry (code from rhafer)

References debug_exception(), ldap, and y2debug.

Referenced by Write().

YCPList LdapAgent::Dir ( const YCPPath path) [virtual]

Provides SCR Dir ().

Dir

Implements SCRAgent.

References y2error.

YCPValue LdapAgent::Execute ( const YCPPath path,
const YCPValue arg = YCPNull(),
const YCPValue arg2 = YCPNull() 
) [virtual]

Provides SCR Execute ().

Execute

initialization: Execute (.ldap,$[ "hostname": <host>, "port": <port>, "use_tls": "no"|"yes"|"try" ] )

ping: Execute (.ldap.ping, $[ "hostname": <host>, "port": <port> ] ) returns true if server is running

ppolicy: Execute (.ldap.ppolicy, $["hostname": <host>, "port": <port>, "bind_dn": <dn>] ) returns true if server suports Password Policy (feature 301179):

rhafer: 'To detect if the server does support LDAP Password Policies you can send it a LDAP Bind Request with the Password Policy Control attached and marked as "critical". The bind-dn should ether be set to the base-dn of the LDAP Database or a child of it (the entry itself does not need to exist in the Database). The bind-pw most not be empty (just some random string is fine) If the server supports Password Policies you'll get back Error Code 49: "Invalid credentials". if it does not support Password Policies you'll get Error Code 53: "Server is unwilling to perform" with the additional message: "critical control unavailable in context"'

bind: Execute(.ldap.bind, $[ "bind_dn": binddn, "bindpw": bindpw] ) for anonymous acess, call bind with empty map

unbind: Execute(.ldap.unbind)

close the connection, delete object

Initialize schema: read and parse it

LDAP users search command Read(.ldap.users.search, <search_map>) -> result list (more special work is done than in generic search)

Reimplemented from SCRAgent.

References YCPMap::add(), addBlanks(), ANSWER, YCPMap::begin(), bind_dn, bind_pw, cons, debug_exception(), debug_referral(), DEFAULT_PORT, YCPMap::end(), getBoolValue(), getGroupEntry(), getIntValue(), getListValue(), getUserEntry(), getValue(), gids, group_items, groupnames, groups, groups_by_gidnumber, groups_by_name, homes, hostname, YCPElement::isNull(), YCPMapIterator::key(), ldap, ldap_error, ldap_error_code, ldap_initialized, PC, port, schema, server_error, set_tls_options(), YCPList::size(), tls_error, uids, user_items, userdns, usernames, users, users_by_name, users_by_uidnumber, YCPMap::value(), YCPList::value(), y2debug, y2error, y2warning, and ycplist2stringlist().

void LdapAgent::generate_attr_list ( LDAPAttributeList *  attrs,
YCPMap  map 
) [private]

creates attributes for new LDAP object and fills their values

References YCPMap::begin(), YCPMap::end(), and ycplist2stringlist().

Referenced by copyOneEntry(), and Write().

void LdapAgent::generate_mod_list ( LDAPModList *  modlist,
YCPMap  map,
YCPValue  attrs 
) [private]

creates list of modifications for LDAP object for removing attribute, use give it empty value

creates list of modifications for LDAP object for removing attribute, give it empty value

References YCPMap::begin(), YCPMap::end(), YCPElement::isNull(), y2warning, and ycplist2stringlist().

Referenced by Write().

bool LdapAgent::getBoolValue ( const YCPMap  map,
const string  key 
) [private]
YCPMap LdapAgent::getGroupEntry ( LDAPEntry *  entry,
string  member_attribute 
) [private]

Return YCP of group, given as LDAP object

Parameters:
entryLDAP object of the group [item of search result]
member_attributename of attribute with members ("member"/"uniquemember")

Return YCP of group, given as LDAP object

Parameters:
entryLDAP object of the group [item of search result]
member_attributename of attribute with members ("member"/"uniqueMember")

References YCPMap::add(), stringlist2ycplist(), and tolower().

Referenced by Execute().

int LdapAgent::getIntValue ( const YCPMap  map,
const string  key,
int  deflt 
) [private]

Search the map for value of given key

Parameters:
mapYCP Map to look in
keykey we are looking for
defltthe default value to be returned if key is not found

References YCPElement::isNull(), and YCPMap::value().

Referenced by Execute(), getBoolValue(), and Read().

YCPList LdapAgent::getListValue ( const YCPMap  map,
const string  key 
) [private]

References YCPElement::isNull(), and YCPMap::value().

Referenced by Execute(), and Read().

YCPMap LdapAgent::getObjectAttributes ( string  dn) [private]

searches for one object and gets all his non-empty attributes

Parameters:
dnobject's dn
Returns:
map of type $[ attr_name: [] ]

References YCPMap::add(), debug_exception(), getSearchedEntry(), and ldap.

Referenced by Write().

YCPMap LdapAgent::getSearchedEntry ( LDAPEntry *  entry,
bool  single_values 
) [private]

creates YCPMap describing object returned as a part of LDAP search call

Parameters:
single_valuesif true, return string when argument has only one value (otherwise return always list)

creates YCPMap describing object returned as a part of LDAP search command

Parameters:
single_valuesif true, return string when argument has only one value

References YCPMap::add(), YCPList::add(), stringlist2ycplist(), and YCPList::value().

Referenced by copyOneEntry(), getObjectAttributes(), and Read().

YCPMap LdapAgent::getUserEntry ( LDAPEntry *  entry) [private]

Return YCP of user, given as LDAP object

Parameters:
entryLDAP object of the user [item of search result]

References YCPMap::add(), YCPList::add(), YCPElement::isNull(), stringlist2ycplist(), tolower(), and YCPMap::value().

Referenced by Execute().

string LdapAgent::getValue ( const YCPMap  map,
const string  key 
) [private]

search the map for value of given key; both key and value have to be strings when key is not present, empty string is returned

References YCPElement::isNull(), and YCPMap::value().

Referenced by Execute(), Read(), set_tls_options(), and Write().

YCPBoolean LdapAgent::moveWithSubtree ( string  dn,
string  new_dn,
string  parent_dn 
) [private]

move the entry in LDAP tree with all its children

Parameters:
dnDN of original entry
new_dnnew DN (= new place)
parent_dnDN of the new parent of the entry

References copyOneEntry(), debug_exception(), ldap, ldap_error, and y2debug.

Referenced by Write().

YCPValue LdapAgent::otherCommand ( const YCPTerm term) [virtual]

Used for mounting the agent.

otherCommand

Reimplemented from SCRAgent.

References YCPTerm::name().

YCPValue LdapAgent::Read ( const YCPPath path,
const YCPValue arg = YCPNull(),
const YCPValue opt = YCPNull() 
) [virtual]

Provides SCR Read ().

Parameters:
pathPath that should be read.
argAdditional parameter.

Read

error: Read(.ldap.error) -> returns last error message

generic LDAP search command Read(.ldap.search, <search_map>) -> result list/map of objects (return value depends on value of "return_map" parameter

get the users map (previously searched by users.search) Read(.ldap.users) -> map

get the groups map (previously searched by users.search) Read(.ldap.groups) -> map

get the map of object class with given name Read(.ldap.schema.oc, $[ "name": name]) -> map

get the map of attribute type with given name Read(.ldap.schema.at, $[ "name": name]) -> map

get the mapping of usernames to uid's (used for users module) DEPRECATED, users_by_name is empty now Read(.ldap.users.by_name) -> map

get the mapping of uid numbers to user names (used for users module) Read(.ldap.users.by_uidnumber) -> map

get the list of home directories (used for users module) Read(.ldap.users.homes) -> list of homes

get the list of UID's (used for users module) Read(.ldap.users.uids) -> list

get the list of user names (used for users module) Read(.ldap.users.usernames) -> list

get the list of user DN's (used for users module) Read(.ldap.users.userdns) -> list

get the items for user table (used for users module) Read(.ldap.users.itemlist) -> list of items

get the map of gid's indexed by group names (used for users module) DEPRECATED, groups_by_name is empty now Read(.ldap.groups.by_name) -> map

get the mapping of gid numbers to group names (used for users module) Read(.ldap.groups.by_uidnumber) -> map

get the list of GID's (used for users module) Read(.ldap.groups.gids) -> list

get the list of group names (used for users module) Read(.ldap.groups.groupnames) -> list

get the items for group table (used for users module) Read(.ldap.groups.itemlist) -> list of items

check if given object class exists in schema Read(.ldap.schema.oc.check, $[ "name": name]) -> boolean

Implements SCRAgent.

References YCPList::add(), YCPMap::add(), cons, debug_exception(), debug_referral(), getBoolValue(), getIntValue(), getListValue(), getSearchedEntry(), getValue(), gids, group_items, groupnames, groups, groups_by_gidnumber, groups_by_name, homes, YCPElement::isNull(), ldap, ldap_error, ldap_error_code, ldap_initialized, PC, schema, server_error, stringlist2ycplist(), tls_error, uids, user_items, userdns, usernames, users, users_by_name, users_by_uidnumber, y2debug, y2error, and ycplist2stringlist().

void LdapAgent::set_tls_options ( YCPMap  args,
string  set_tls 
) [private]

Adapt TLS Settings of existing LDAP connection

Adapt TLS Settings of existing LDAP connection args is argument map got from YCP call tls is string, values are "yes" and "try"

References getValue(), and ldap.

Referenced by Execute().

YCPList LdapAgent::stringlist2ycplist ( StringList  sl) [private]

converts StringList object to YCPList value

References YCPList::add().

Referenced by getGroupEntry(), getSearchedEntry(), getUserEntry(), and Read().

YCPList LdapAgent::stringlist2ycplist_low ( StringList  sl) [private]

converts StringList object to YCPList value + each item is lowercased

References YCPList::add(), and tolower().

YCPBoolean LdapAgent::Write ( const YCPPath path,
const YCPValue arg,
const YCPValue arg2 = YCPNull() 
) [virtual]

Provides SCR Write ().

Write

generic LDAP add command Write(.ldap.add, $[ "dn": dn ], <add_map>) -> boolean

generic LDAP modify command Write(.ldap.modify, <arg_map>, <modify_map>) -> boolean

  • modify_map is list of attributes and its values to add or modify.
  • To remove some attribute, use empty value ("" or []) for it.
  • arg_map has to contain "dn" entry.
  • If arg_map contains "rdn" key, object will be renamed using the value of "rdn" as new Relative Distinguished Name. For moving, use "newParentDN" value for new parent DN of object.
  • "new_dn" new DN of renamed object
  • If arg_map contains "check_attrs" key (with true value), there will be done search for current object's attributes before modify. When some attribute in modify_map has empty value it will be ignored, if object currently has not this attribute. Otherwise ("check_attrs" is false as default), this situation leads to error message, because non-existent attribute is set for deletion.

generic LDAP delete command Write(.ldap.delete, $[ "dn" : dn ]) -> boolean

Implements SCRAgent.

References debug_exception(), deleteSubTree(), generate_attr_list(), generate_mod_list(), getBoolValue(), getObjectAttributes(), getValue(), YCPElement::isNull(), ldap, ldap_error, ldap_initialized, moveWithSubtree(), PC, y2debug, and y2error.

StringList LdapAgent::ycplist2stringlist ( YCPList  l) [private]

converts YCPList to StringList object

References YCPList::size(), and YCPList::value().

Referenced by Execute(), generate_attr_list(), generate_mod_list(), and Read().


Member Data Documentation

string LdapAgent::bind_dn [private]

Referenced by Execute().

string LdapAgent::bind_pw [private]

Referenced by Execute().

LDAPConstraints* LdapAgent::cons [private]

Referenced by Execute(), LdapAgent(), Read(), and ~LdapAgent().

Referenced by Execute(), and Read().

Referenced by Execute(), and Read().

Referenced by Execute(), and Read().

Referenced by Execute(), and Read().

Referenced by Execute(), and Read().

Referenced by Execute(), and Read().

Referenced by Execute(), and Read().

string LdapAgent::hostname [private]

Referenced by Execute().

LDAPConnection* LdapAgent::ldap [private]
string LdapAgent::ldap_error [private]

Referenced by debug_exception(), Execute(), and Read().

Referenced by Execute(), LdapAgent(), Read(), and Write().

int LdapAgent::port [private]

Agent private variables

Referenced by Execute().

LDAPSchema* LdapAgent::schema [private]

Referenced by Execute(), LdapAgent(), Read(), and ~LdapAgent().

string LdapAgent::server_error [private]

Referenced by debug_exception(), Execute(), and Read().

bool LdapAgent::tls_error [private]

Referenced by Execute(), LdapAgent(), and Read().

Referenced by Execute(), and Read().

Referenced by Execute(), and Read().

Referenced by Execute(), and Read().

Referenced by Execute(), and Read().

string LdapAgent::userpw_hash [private]

Referenced by Execute(), and Read().

Referenced by Execute(), and Read().

Referenced by Execute(), and Read().


The documentation for this class was generated from the following files:

Generated on a sunny day for yast2-ldap by doxygen 1.7.3