Kaydet (Commit) ea968972 authored tarafından Fridrich Štrba's avatar Fridrich Štrba

First step to proper handling of character encodings in windows ldap backend

Change-Id: Id28174af5c28346fc363e3f62a8004ce0cf98c6a
üst b7911551
......@@ -138,8 +138,8 @@ void LdapConnection::connectSimple()
// Do the bind
LdapErrCode retCode = ldap_simple_bind_s(mConnection,
CONST_PCHAR_CAST mLdapDefinition.mAnonUser.getStr(),
CONST_PCHAR_CAST mLdapDefinition.mAnonCredentials.getStr()) ;
CONST_PCHAR_CAST rtl::OUStringToOString( mLdapDefinition.mAnonUser, RTL_TEXTENCODING_UTF8 ).getStr(),
CONST_PCHAR_CAST rtl::OUStringToOString( mLdapDefinition.mAnonCredentials, RTL_TEXTENCODING_UTF8 ).getStr()) ;
checkLdapReturnCode("SimpleBind", retCode, mConnection) ;
}
......@@ -158,14 +158,14 @@ void LdapConnection::initConnection()
if (mLdapDefinition.mPort == 0) mLdapDefinition.mPort = LDAP_PORT;
mConnection = ldap_init(CONST_PCHAR_CAST mLdapDefinition.mServer.getStr(),
mConnection = ldap_init(CONST_PCHAR_CAST rtl::OUStringToOString( mLdapDefinition.mServer, RTL_TEXTENCODING_UTF8 ).getStr(),
mLdapDefinition.mPort) ;
if (mConnection == NULL)
{
rtl::OUStringBuffer message ;
message.appendAscii("Cannot initialise connection to LDAP server ") ;
message.appendAscii(mLdapDefinition.mServer.getStr()) ;
message.append(mLdapDefinition.mServer) ;
message.appendAscii(":") ;
message.append(mLdapDefinition.mPort) ;
throw ldap::LdapConnectionException(message.makeStringAndClear(),
......@@ -181,11 +181,11 @@ void LdapConnection::initConnection()
OSL_ASSERT(data != 0);
if (!isValid()) { connectSimple(); }
rtl::OString aUserDn =findUserDn( rtl::OUStringToOString(aUser, RTL_TEXTENCODING_ASCII_US));
rtl::OUString aUserDn =findUserDn( aUser );
LdapMessageHolder result;
LdapErrCode retCode = ldap_search_s(mConnection,
CONST_PCHAR_CAST aUserDn.getStr(),
CONST_PCHAR_CAST rtl::OUStringToOString( aUserDn, RTL_TEXTENCODING_UTF8 ).getStr(),
LDAP_SCOPE_BASE,
"(objectclass=*)",
0,
......@@ -209,7 +209,7 @@ void LdapConnection::initConnection()
}
}
//------------------------------------------------------------------------------
rtl::OString LdapConnection::findUserDn(const rtl::OString& aUser)
rtl::OUString LdapConnection::findUserDn(const rtl::OUString& aUser)
throw (lang::IllegalArgumentException,
ldap::LdapConnectionException, ldap::LdapGenericException)
{
......@@ -225,7 +225,7 @@ void LdapConnection::initConnection()
rtl::OStringBuffer filter( "(&(objectclass=" );
rtl::OUStringBuffer filter( "(&(objectclass=" );
filter.append( mLdapDefinition.mUserObjectClass ).append(")(") ;
filter.append( mLdapDefinition.mUserUniqueAttr ).append("=").append(aUser).append("))") ;
......@@ -235,19 +235,19 @@ void LdapConnection::initConnection()
attributes[0]= const_cast<sal_Char *>(LDAP_NO_ATTRS);
attributes[1]= NULL;
LdapErrCode retCode = ldap_search_s(mConnection,
CONST_PCHAR_CAST mLdapDefinition.mBaseDN.getStr(),
CONST_PCHAR_CAST rtl::OUStringToOString( mLdapDefinition.mBaseDN, RTL_TEXTENCODING_UTF8 ).getStr(),
LDAP_SCOPE_SUBTREE,
CONST_PCHAR_CAST filter.makeStringAndClear().getStr(), attributes, 0, &result.msg) ;
CONST_PCHAR_CAST rtl::OUStringToOString( filter.makeStringAndClear(), RTL_TEXTENCODING_UTF8 ).getStr(), attributes, 0, &result.msg) ;
checkLdapReturnCode("FindUserDn", retCode,mConnection) ;
rtl::OString userDn ;
rtl::OUString userDn ;
LDAPMessage *entry = ldap_first_entry(mConnection, result.msg) ;
if (entry != NULL)
{
sal_Char *charsDn = ldap_get_dn(mConnection, entry) ;
userDn = charsDn ;
userDn = rtl::OStringToOUString( charsDn, RTL_TEXTENCODING_UTF8 );
ldap_memfree(charsDn) ;
}
else
......
......@@ -45,19 +45,19 @@ struct LdapUserProfile;
struct LdapDefinition
{
/** LDAP server name */
rtl::OString mServer ;
rtl::OUString mServer ;
/** LDAP server port number */
sal_Int32 mPort ;
/** Repository base DN */
rtl::OString mBaseDN ;
rtl::OUString mBaseDN ;
/** DN to use for "anonymous" connection */
rtl::OString mAnonUser ;
rtl::OUString mAnonUser ;
/** Credentials to use for "anonymous" connection */
rtl::OString mAnonCredentials ;
rtl::OUString mAnonCredentials ;
/** User Entity Object Class */
rtl::OString mUserObjectClass;
rtl::OUString mUserObjectClass;
/** User Entity Unique Attribute */
rtl::OString mUserUniqueAttr;
rtl::OUString mUserUniqueAttr;
} ;
typedef std::map< rtl::OUString, rtl::OUString > LdapData; // key/value pairs
......@@ -94,7 +94,7 @@ public:
/** finds DN of user
@return DN of User
*/
rtl::OString findUserDn(const rtl::OString& aUser)
rtl::OUString findUserDn(const rtl::OUString& aUser)
throw (lang::IllegalArgumentException,
ldap::LdapConnectionException,
ldap::LdapGenericException);
......
......@@ -171,11 +171,9 @@ bool LdapUserProfileBe::readLdapConfiguration(
bool LdapUserProfileBe::getLdapStringParam(
uno::Reference<container::XNameAccess>& xAccess,
const rtl::OUString& aLdapSetting,
rtl::OString& aServerParameter)
rtl::OUString& aServerParameter)
{
rtl::OUString sParam;
xAccess->getByName(aLdapSetting) >>= sParam;
aServerParameter = rtl::OUStringToOString(sParam, RTL_TEXTENCODING_ASCII_US);
xAccess->getByName(aLdapSetting) >>= aServerParameter;
return !aServerParameter.isEmpty();
}
......
......@@ -151,7 +151,7 @@ class LdapUserProfileBe : private LdapProfileMutexHolder, public BackendBase
bool getLdapStringParam(uno::Reference<container::XNameAccess>& xAccess,
const rtl::OUString& aLdapSetting,
rtl::OString& aServerParameter);
rtl::OUString& aServerParameter);
LdapData data_;
} ;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment