단순히 LDAP에 관해 알고 싶어 들렸다가 우연히 보게되었는데
C logic 상에 문제가 있어서 수정이 있어야 할거 같습니다.
아래 선언문에 "char* attVal1[2]"를
"char *arrVal1[] = { " ", NULL }" 로
작성해야 합니다.
님께서 작성한 내용은 변수에 대한 포인터공간(2*포인터변수크기)만 선언한 것이지
내용이 들어갈 공간은 확보하지 않은 상태입니다.
그래서 선언과 동시에 저장할 공간을 확보해 주어야 합니다.
.. 참조가 되었으면 합니다...
>>노희창 님께서 쓰시길<<
:: 아래와 같이 코딩하니 에러 없이 정상적으로 컴파일 되거든요.
:: 그런데 실행하고 나서 search해보면 추가가 않되어 있네요.
:: 어디가 잘못된 것일까요?
:: 코딩자체의 문제인지 아니면 openldap setting(설치)의 문제인지
:: 방향을 못 잡겠습니다.
:: 항상 저의 우문에 친절히 답해주시는 님들께 또 부탁하는 처지네요.
:: 애고..
:: #include <stdio.h>
:: #include "lber.h"
:: #include "ldap.h"
::
:: int main( )
:: {
:: LDAPMod attr1,attr2;
:: LDAPMod * attrs[3];
:: LDAP *ld;
:: char* attVal1[2];
:: char* attVal2[2];
::
:: attVal1[0]="bb";
:: attVal1[1]=NULL;
:: attVal2[0]="016-016-0166";
:: attVal2[1]=NULL;
::
:: attr1.mod_op=LDAP_MOD_ADD;
:: attr1.mod_type="cn";
:: attr1.mod_values=attVal1;
:: attr1.mod_next=&attr2;
:: attr2.mod_op=LDAP_MOD_ADD;
:: attr2.mod_type="telephonenumber";
:: attr2.mod_values=attVal2;
:: attr2.mod_next=NULL;
::
:: attrs[0]=&attr1;
:: attrs[1]=&attr2;
:: attrs[2]=NULL;
::
:: if ( (ld = ldap_init( "127.0.0.1", 389 )) == NULL )
:: {
:: perror( "ldap_init" );
:: return( 1 );
:: }
::
:: if ( ldap_simple_bind_s( ld, NULL, NULL ) != LDAP_SUCCESS )
:: {
:: ldap_perror( ld, "ldap_simple_bind_s" );
:: return( 1 );
:: }
::
::
:: if (( ldap_add( ld, " dc=bb,dc=my-domain,dc=com",attrs)) == -1 )
:: {
:: ldap_perror( ld, "ldap_add" );
:: return( 1 );
:: }
::
:: ldap_unbind( ld );
:: return( 0 );
:: } //main end
::
|