database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
PostgreSQL
Firebird
Oracle
Informix
Sybase
MS-SQL
DB2
Cache
CUBRID
ㆍLDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
LDAP Q&A 2193 게시물 읽기
No. 2193
한글뒤에 이상한글자가 보이는 현상???
작성자
김자우
작성일
2005-08-04 23:24
조회수
8,508

사용자B

응B?B

ldap브라우저로 보았을경우 한글이 이렇게 깨져서 들어갑니다

C프로그램에서 "사용자" " 응" 등의 입력값이 utf8인지 확인한다음 공백을 제거하고

utf8로 변환해서 insert하면 잘들어가긴 하는데 위와같이보입니다.

무엇을 잘못했나요?

지금 일주일째 고생입니다.ㅠ.ㅠ

송상준씨 글 잘읽었습니다 부디 ................

이 글에 대한 댓글이 총 4건 있습니다.

음 utf8로 컨버징할때 쓰레기 값이 들어가지 않았나요?

 

"사용자"를 UTF8로 바꾸고 이를 base64 encoding한 값이 아래와 같이

 나와야 합니다. 확인해 보세요

그럼

7IKs7Jqp7J6Q

송상준(sjsong)님이 2005-08-05 09:53에 작성한 댓글입니다.

쓰레기 값은 들어가지 않았습니다. 공백도 다 제거 해보았구요

먼저 질문입니다.

한글이 들어왔을때 utf인지 확인한후 아니면  utf로 바꾸어서 넣어주는것이 맞나요?

전 그렇게 알고 있는데요

근데 이 쓰레기 때문에..ㅠ.ㅠ.

해당부분 소스 입니다.

EncodeUTF8 API가 잘못된거 아닌가 하는데요??

말씀하신대로는 잘나옵니다. 글자수에 관련이 있는거 같기두 하구요

 

도대체 무엇을 잘못했는지 모르겠습니다. ㅠ.ㅠ.

 

char *attribute_cn[2];

char str[100]="자우";

  if(is_utf8(str)==0)
  {
   if(EncodeUTF8((const unsigned char*)str, &utf8_buf, &utf8_len) == -1)
   {
      sprintf(errmsg,"EncodeUTF8 Fail");    
    goto NADE_ADMIN_ID_INSERT_FAIL ;
   }
    attribute_cn[0] = utf8_buf;
    attribute_cn[1] = NULL;   
    sprintf(dn,"cn=%s, ou=ids, o=itnade,c=kr",utf8_buf);
   }
 mods[0]->mod_op = 0;
 mods[0]->mod_type = "objectclass";
 mods[0]->mod_values = object_vals;

 mods[1]->mod_op = 0;
 mods[1]->mod_type = "cn";
 mods[1]->mod_values = attribute_cn;

 

 

김자우님이 2005-08-05 20:35에 작성한 댓글입니다.
이 댓글은 2005-08-05 20:37에 마지막으로 수정되었습니다. Edit

utf8encoder 문제가 맞습니다.

utf8encoder내부 소스를 보니까

메모리를 할당만하고 클리어를 안해서 뒤에 쓰레기가

붙는 문제였네요

 

이상준님이 2005-08-06 11:18에 작성한 댓글입니다. Edit

아래는 제가 작성한 C언어를 사용하여 LDAP에 값을 입력하고 그값을 가져와 비교하는 프로그램의 일부분입니다.

아래 프로그램에서 한글은 입력해보지 않았지만 제 생각에는

mods[ 8 ]->mod_op = LDAP_MOD_ADD | LDAP_MOD_BVALUES; 

이분분에서 mod_op부분을 조금 수정해 주면 되지 않을까 생각합니다

지금은 바이너리 값으로 설정 되어 잇는데 utf8로 설정해서 저장하면은 되지 않을까 생각합니다. 혹시 참고가 됬으면해서 올립니다.

그리고 결과 나오면 저도 좀 알려주세요 앞으로 필요하질 모를것 같아서요 꼭 이요~ 고생하십시오

 

 -----------------------------------------------------------

int my_ldap_add(char *buf,int size)

{

    

....................

   

    struct berval *test[2];

    struct berval tttt;


    test[0] = &tttt;

    test[0]->bv_len = size;

    test[0]->bv_val = buf;    

    test[1] = NULL;

..........................

   if(ldap_set_option(ld,LDAP_OPT_PROTOCOL_VERSION,(void *)&version)){

         printf("Failed to set protocol version to 3\n");

    }

    else {

         printf(" Using LDAPv3\n");

    }

......................................

    mods = ( LDAPMod ** ) malloc(( NMODS + 1 ) * sizeof( LDAPMod * ));

    if ( mods == NULL ) {

          }

 for ( i = 0; i < NMODS; i++ ) {

    if (( mods[ i ] = ( LDAPMod * ) malloc( sizeof( LDAPMod ))) == NULL ) {

              }

    }

.........................

      mods[ 8 ]->mod_op = LDAP_MOD_ADD | LDAP_MOD_BVALUES;

    mods[ 8 ]->mod_type = "RSAKey";

    mods[8]->mod_bvalues = test;


    mods[9]=NULL;

if (( msgid = ldap_add ( ld,  "sn=test13,o=eci,o=Mokpo,dc=mmu,dc=com", mods )) < 0 ) {

      ldap_perror( ld, "ldap_add" );

      free_mods( mods );

      }

    ldap_unbind( ld );

    free_mods( mods );

}


LDAP 서버에 공개키 값을 저장할 때 공개키 값은 바이너리 값이므로  mods 구조체의 mod_op에 바이너리 값을 넣기 위하여 LDAP_MOD_BVALUES 추가하고, struct berval의 bv_val에 키 값을 저장하여 LDAP 서버에 저장하였다.


다음은 server 부분의 소스이다.


{

  initrand64_lt();

  initrandBBS_lt();


  RSApub new_public_key;

  my_ldap_search(temp);

  rd_pub_key(new_public_key);

  .........

  const UCHAR* const mess1 = rndmess (BLCKLNGTH);

 cout_bytes ((const char*)mess1, BLCKLNGTH, "Message_1");

  cout << endl;

  LINT cipher = new_public_key.crypt (mess1, BLCKLNGTH);

  cout << "Message_1 encrypted." << endl;

  cout << "Ciphertext = " << cipher << endl;

  cout<<"Save Ciphertext "<<endl;

  sv_encrypted(cipher);

  return 0;

}


LDAP 서버로부터 공개키 값을 검색을 할 때 키의 값이 바이너리 값이므로  다음과 같이 ldap_get_values_len을 사용하여 키 값을 검색해서 저장한다.


 ber_valu=ldap_get_values_len(ld,entry,attr);

 write_file(ber_valu[i-1]->bv_val,ber_valu[i-1]->bv_len);


윤성중님이 2005-08-07 19:13에 작성한 댓글입니다. Edit
[Top]
No.
제목
작성자
작성일
조회
2197LDAP에서 날짜검색은 어떻게 하는지? [1]
사오정
2005-08-17
7027
2196ONE_LEVEL_SCOPE에서... [3]
황은경
2005-08-12
7028
2194subtree 삭제방법이 궁금합니다. [3]
이상준
2005-08-08
7245
2193한글뒤에 이상한글자가 보이는 현상??? [4]
김자우
2005-08-04
8508
2192LDAP SDK이용시 한글이 입력안되는 현상 [1]
초보자
2005-08-01
7806
2191BMC 통합 사용자 계정관리 솔루션 세미나"에 귀하를 초대합니다.
이동림
2005-08-01
8149
2190AD속성중 memberOf에 대해서... [1]
사오정
2005-08-01
8187
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2023 DSN, All rights reserved.
작업시간: 0.049초, 이곳 서비스는
	PostgreSQL v16.1로 자료를 관리합니다