add부분은 adsi에서 다시 netscape api로 바꾸어서 성공했습니다.
도움 주셔서 감사...^^
근데 한글을 입력할때 문제가 생기는데, slapd의 디버그
에러 메세지가 invalid data 네요...뭐..넘 간단한 메세지라 ...
netscape api의 함수중에 ldap_utf8copy() 이걸로 UTF8로 변환해서
LDAPMod **mods;
mods[ 5 ]->mod_op = 0;
mods[ 5 ]->mod_type = "description";
mods[ 5 ]->mod_values = description_values;
mods[ 6 ] = NULL;
이런식으로 샘플에 있는데로 했는데 일단 컴파일 에러는 없구요..
정작 ldapadd할때 에러로 떨어지네요..
어딘가에 문제가 있긴있을텐데, 이것저것 다 해봤는데도,
도무지 찾질 못하겠어요..
염치없는줄 알지만, 알려주시면 감사하겠습니다.
아래는 문제의 소스입니다. 혹시 보시면 감잡히실까해서리...
샘플을 보고 한것이기때문에 잘하고 있는지 어떤지도 잘모릅니다.-.-;;
다른 방법이 있다면 다른방법도 알려주시면 고맙겠습니다.
LDAP *ld;
LDAPMessage *result;
char *dn;
int i;
int rc;
int msgid;
int finished;
struct timeval zerotime;
LDAPMod **mods;
char *objectclass_values[] = { "top", "person", "organizationalPerson", NULL };
char *cn_values[] = { "subset2", NULL };
char *sn_values[] = { "ws, Jung", NULL };
char *givenname_values[] = { "정원식", NULL };
char *telephonenumber_values[] = { "+555 1212", NULL };
char *postalAddress_values[] = { "village 5 - 404", NULL };
char *description_values[] = { "한글아 들어가라!!", NULL };
TCHAR szObject[ 128 ];
WCHAR wszObject[ 128 ];
strcpy(szObjectDN, description_values[0]);
MultiByteToWideChar(CP_ACP, 0, szObjectDN , -1, wszObject, (strlen( szObject )+1)*sizeof(wszObject[0]));
wszObject[ wcslen ( wszObject ) ] = L'';
ldap_utf8copy( description_values[0], (const char *)wszObject );
zerotime.tv_sec = zerotime.tv_usec = 0L;
// Specify the DN we're adding
dn = "cn=subset2,ou=people,o=xxx.com";
// get a handle to an LDAP connection
if ( (ld = ldap_init( "ip", 389 )) == NULL )
{
perror( "ldap_init" );
return 1 ;
}
// authenticate to the directory as the Directory Manager
if ( ldap_simple_bind_s( ld, "cn=root,o=xxx.com", "xxxx" ) != LDAP_SUCCESS )//MGR_DN, MGR_PW ) != LDAP_SUCCESS )
{
ldap_perror( ld, "ldap_simple_bind_s" );
return 1 ;
}
// Construct the array of values to add
mods = ( LDAPMod ** ) malloc(( NMODS + 1 ) * sizeof( LDAPMod * ));
if ( mods == NULL )
{
fprintf( stderr, "Cannot allocate memory for mods array\n" );
}
for ( i = 0; i < NMODS; i++ )
{
if (( mods[ i ] = ( LDAPMod * ) malloc( sizeof( LDAPMod )))
== NULL )
{
fprintf( stderr, "Cannot allocate memory for mods element\n" );
return 1 ;
}
}
mods[ 0 ]->mod_op = 0;
mods[ 0 ]->mod_type = "objectclass";
mods[ 0 ]->mod_values = objectclass_values;
mods[ 1 ]->mod_op = 0;
mods[ 1 ]->mod_type = "cn";
mods[ 1 ]->mod_values = cn_values;
mods[ 2 ]->mod_op = 0;
mods[ 2 ]->mod_type = "sn";
mods[ 2 ]->mod_values = sn_values;
mods[ 3 ]->mod_op = 0;
mods[ 3 ]->mod_type = "telephonenumber";
mods[ 3 ]->mod_values = telephonenumber_values;
mods[ 4 ]->mod_op = 0;
mods[ 4 ]->mod_type = "postalAddress";
mods[ 4 ]->mod_values = postalAddress_values;
mods[ 5 ]->mod_op = 0;
mods[ 5 ]->mod_type = "description";
mods[ 5 ]->mod_values = description_values;
mods[ 6 ] = NULL;
// Initiate the add operation
if (( msgid = ldap_add_s( ld, dn, mods )) < 0 )
{
ldap_perror( ld, "ldap_add" );
free_mods( mods );
return 1 ;
}
|