libkrisp가 KRNIC data를 이용해서 parsing 하는 것이라서 script 화를 해 놓았는데, 이 스크립트가 작동하지 않아서 보니.. 이런 변경 사항이 있었습니다. 그래서.. 뚫을 수 있는 스크립트를 다시 만들어 보았습니다.
이 스크립트를 작동 하시기 위해서는 curl extension 이 필요 합니다.
뭘 이런걸..
일정이 대충 나오는 것 같습니다. (PST 기준)
10.29 String freeze
11.02 L10n freeze
11.03 Rc1 code freeze
11.10 Rc1 release
이 후에 필요하다면 rc2가 나올 예정이랍니다. (물론 나오겠지만.. ^^) 11/2 이 지나면 메시지 고치려면 버그 등록하고 승인을 받아야 합니다. 그 전에 리포팅 많이 해 주세요.
http://forums.mozilla.or.kr/viewtopic.php?f=15&t=12285 으로 해 주시면 됩니다.
[root@work ~]# ssh domain.com
The authenticity of host 'domain.com (12.0.0.1)' can't be established.
RSA key fingerprint is fe:de:8d:34:27:82:7c:42:09:16:0f:34:33:dd:72:d9.
Are you sure you want to continue connecting (yes/no)?
[root@work ~]# ssh -H domain.com
LInux AnNyung release 1.3R5 (Indongcho)
Login domain.com in 20:04 on Friday, 02 October 2009
root@domain.com's password:
[root@work ~] ssh 안녕리눅스.com
LInux AnNyung release 1.3R5 (Indongcho)
Login 안녕리눅스.com in 20:04 on Friday, 02 October 2009
root@안녕리눅스.com's password:
[root@work ~]# ssh domain.com
LInux AnNyung release 1.3R5 (Indongcho)
Login domain.com in 20:04 on Friday, 02 October 2009
root@domain.com's password:
\t, \d - 현재 시간과 날자를 출력
\h, \n - 시스템의 노드명(FQDN)을 출력
\s - 운영체제의 이름을 출력
\m - 하드웨어의 유형을 출력
\r - 운영체제의 릴리즈를 출력
\v - 운영체제의 버전을 출력
\\ - '\' charactor 를 출력
[miscellany]
enable-auto-props = yes
[auto-props]
*.java = svn:keywords=Author Date Id Revision;svn:eol-style=native
shell> svn up
shell> svn propset svn:keywords "Author Date Id Rev" file_name
shell> svn commit -m "Adding Id and Rev property to all files"
Python Chardet result:
google.cn {'confidence': 0.98999999999999999, 'encoding': 'GB2312'}
yahoo.jp {'confidence': 0.98999999999999999, 'encoding': 'utf-8'}
amazon.co.jp {'confidence': 1, 'encoding': 'SHIFT_JIS'}
pravda.ru {'confidence': 0.93312187961594417, 'encoding': 'windows-1251'}
auction.co.kr {'confidence': 0.56471064895612277, 'encoding': 'ISO-8859-2'}
haaretz.co.il {'confidence': 0.98999999999999999, 'encoding': 'windows-1255'}
www.nectec.or.th {'confidence': 0.77645629965698426, 'encoding': 'TIS-620'}
feedparser.org {'confidence': 0.98999999999999999, 'encoding': 'utf-8'}
PHP mod_chardet result:
google.cn (7121)
ICU : Encoding -> GB18030 Confidence -> 100
MOZ : Encoding -> GB2312 Confidence -> 98
yahoo.jp (30367)
ICU : Encoding -> UTF-8 Confidence -> 100
MOZ : Encoding -> utf-8 Confidence -> 98
amazon.co.jp (166082)
ICU : Encoding -> Shift_JIS Confidence -> 100
MOZ : Encoding -> SHIFT_JIS Confidence -> 100
pravda.ru (97826)
ICU : Encoding -> ISO-8859-1 Confidence -> 28
MOZ : Encoding -> windows-1251 Confidence -> 93
auction.co.kr (101330)
ICU : Encoding -> EUC-KR Confidence -> 100
MOZ : Encoding -> ISO-8859-2 Confidence -> 56
haaretz.co.il (174179)
ICU : Encoding -> ISO-8859-1 Confidence -> 32
MOZ : Encoding -> windows-1255 Confidence -> 98
www.nectec.or.th (41527)
ICU : Encoding -> ISO-8859-1 Confidence -> 37
MOZ : Encoding -> TIS-620 Confidence -> 77
feedparser.org (28443)
ICU : Encoding -> UTF-8 Confidence -> 100
MOZ : Encoding -> utf-8 Confidence -> 98
18.33 Sec
$buf = preg_replace ('/<[^>]*>/', '', $buf);
PHP mod_chardet result:
google.cn (2781)
ICU : Encoding -> GB18030 Confidence -> 100
MOZ : Encoding -> GB2312 Confidence -> 98
yahoo.jp (3561)
ICU : Encoding -> UTF-8 Confidence -> 100
MOZ : Encoding -> utf-8 Confidence -> 98
amazon.co.jp (30739)
ICU : Encoding -> Shift_JIS Confidence -> 100
MOZ : Encoding -> SHIFT_JIS Confidence -> 100
pravda.ru (15728)
ICU : Encoding -> windows-1251 Confidence -> 28
MOZ : Encoding -> windows-1251 Confidence -> 94
auction.co.kr (36084)
ICU : Encoding -> EUC-KR Confidence -> 100
MOZ : Encoding -> ISO-8859-2 Confidence -> 27
haaretz.co.il (44570)
ICU : Encoding -> ISO-8859-8-I Confidence -> 23
MOZ : Encoding -> windows-1255 Confidence -> 98
www.nectec.or.th (10425)
ICU : Encoding -> EUC-JP Confidence -> 64
MOZ : Encoding -> TIS-620 Confidence -> 76
feedparser.org (5854)
ICU : Encoding -> UTF-8 Confidence -> 100
MOZ : Encoding -> utf-8 Confidence -> 98
4.86 Sec
정균님 안녕하세요.
요 모듈 아직도 서포트 받을 수 있는지 궁금하네요 ^^
libtool 버전이 2.2.6으로 올라가면서 CDPATH관련 에러두 나구요. --tag를 찾네요
그리고
/home/sangjins/mod_chardet/php_chardet.h:104: error: expected specifier-qualifier-list before 'UErrorCode'
/home/sangjins/mod_chardet/php_chardet.c: In function 'zif_chardet_detect':
/home/sangjins/mod_chardet/php_chardet.c:375: error: duplicate case value
/home/sangjins/mod_chardet/php_chardet.c:367: error: previously used here
/home/sangjins/mod_chardet/php_chardet.c:392: error: 'CharDetObj' has no member named 'status'
/home/sangjins/mod_chardet/php_chardet.c: In function 'chardet_obj_init':
/home/sangjins/mod_chardet/php_chardet.c:422: error: 'CharDetObj' has no member named 'status'
/home/sangjins/mod_chardet/php_chardet.c: In function 'moz_chardet':
/home/sangjins/mod_chardet/php_chardet.c:442: error: 'CharDetObj' has no member named 'status'
/home/sangjins/mod_chardet/php_chardet.c:448: error: 'CharDetObj' has no member named 'status'
의 에러도 나네요; 잘 사용하다가 재설치 하려니 이런 문제가 발생했습니다;
바쁘신데 이거 실례가 되지 않을런지.. ㅜㅜ
제 짧은 소견으로는 배포가 문제라면 귀찮게 소스 관리를 하시느니, 정적으로 link 시키는 것이 더 편하지 않을까 싶습니다. MPL 은 GPL 이나 LGPL 처럼 과격하지 않으니, static link 하시거나 dynamic link 하신 후에, MPL 라이센스 파일 하나 넣어 주시는 것으로 끝이 납니다. 전반적으로 GPL/LGPL로 배포를 하고 싶으시다면, 특정 부분에 call 을 MPL call 을 사용하신다고 명기를 하시면 될 것 같습니다. MPL은 다른 라이센스와 결합하는데 크게 지장이 없는 라이센스이니까요.
제가 개발하는 코드들은 대부분 필요에 의해서 제작을 하는 것입니다. 그렇기 때문에 순수하게 제가 처음부터 설계/코딩을 하는 경우 보다는 비슷한 것을 찾아서 제가 사용하기 편하도록 수정/개발을 하는 경우가 많습니다.
그러다 보니, 항상 license가 문제가 골치거리가 되는데, 가장 좋은 방법은 원 코드의 license 를 유지하는 것이 가장 편한 방법이더군요. 그리고 libcharset 의 원형이 Mozilla Universal Charset Detector 이기는 하지만, 저는 이 코드를 Perl Moudle 에서 친절하게 잘 분리해 놓은 것을 C wrapper 를 만들어서 c/c++ library 로 둔갑을 시켜 놓은 것입니다. 그리고 해당 Perl Module 이 license를 MPL로 해 놓아서 저 역시 이를 승계한 것이고요.
다만, Universal Chardet code 를 보면 MPL/GPL2/LGPL2.1 중에 하나를 선택할 수 있도록 되어 있습니다. 그리고, 저와 Perl module 개발자가 추가한 코드에서 이 문구는 역시 포함이 되어 있기 때문에 재배포를 하시고 싶고, license 를 변경하고 싶다면 저작권에 위배되지 않도록 결정을 하시면 될 것 같습니다.
저도 나름 살짝 고민했다가 GPL보다 MPL이 더 자유롭지 않을까 생각해서 MPL로 그냥 고민없이 승계를 했습니다.
mod_chardet 0.0.2 로 업데이트 했습니다. Python C API로 지원하던 mozilla universal charset detect mode 를 제거하고, libchardet 을 만들어서 C++로 지원하도록 변경했습니다. 속도가 캡빵 빨라졌습니다. :-) python-chardet 보다 정확도가 조금 더 좋습니다.
ftp://ftp.oops.org/pub/oops/php/extensions/mod_chardet 에서 받으실 수 있습니다.
http://cvs.oops.org/?cvsroot=PHP-Module&module=mod_chardet&file=README,v&rev=1.3 를 참조해서 빌드 하실 수 있습니다.
이 버전은 libchardet 이 기본 모드로 지원되며, CHARDET_ICU mode 로 ICU chardet mode 를 사용할 수 있으며, 개발시의 debug mode로 CHARDET_PY (default option 아님) 를 이용할 수 있습니다.
source 안에 있는 test.php 와 http://cvs.oops.org/?cvsroot=PHP-Module&module=mod_chardet&file=Reference,v&rev=1.1 를 참조하시면 될 것 같습니다. test.php 역시 제일 첫라인을 제외하면 web에서 그대로 사용하실 수 있습니다.
shell> openssl x509 -in cacert.cer -inform DER -out cacert.pem -outform PEM
LDAP Support => enabled
RCS Version => $Id: ldap.c,v 1.161.2.3.2.13 2008/05/04 21:19:17 colder Exp $
Total Links => 0/unlimited
API Version => 3001
Vendor Name => OpenLDAP
Vendor Version => 20327
SASL Support => Enabled
<?php
function make_ad_passwd ($pass) {
$pass = '"' . $pass . '"';
$len = strlen ($pass);
for ( $i=0; $i<$len; $i++ )
$newpass .= $pass[$i] . "\000";
return $newpass;
}
?>
<?php
# SSL 로 접속을 해야 하기 때문에 ldaps:// protocol 을 사용한다.
$host = "ldaps://ad.domain.controller.com";
# ldaps 의 기본 포트는 636 을 사용한다.
$port = "636";
# 인증서 설정
$certfile = '/some/path/cacert.pem';
# default DN
$defaultdn = 'domain_manager@DOMAIN.NAME.COM';
$accesspw = 'password_of_domain_manager';
# 관리 OU
$ou = "OU=Users,DS=DOMAIN,DS=NAME,DS=com"
$username = $argv[1];
$userpass = $argv[2] ? $argv[2] : 'abcd';
if ( ! $username ) {
echo "ERROR: You must input changed username on argv[1]\n";
exit 1;
}
#
# system 의 ldap 설정을 건드리지 않고 하기 위해서 다음의 환경 변수를 설정한다.
putenv ('LDAPTLS_REQCERT=never');
putenv ("LDAPTLS_CACERT={$certfile}");
$ldap = ldap_connect ($host, $port);
if ( $ldap === false ) {
echo "ERROR: connect failed to $host\n";
exit 1;
}
$bind = @ldap_bind ($ldap, $defaultdn, $accesspw);
if ( $bind === false ) {
echo ldap_error ($ldap) . "\n";
exit 1;
}
$filter = "(samaccountname={$username})";
$result = ldap_search ($ldap, $ou, $filter);
ldap_sort ($ldap, $result, 'sn');
$info = ldap_get_entries ($ldap, $result);
for ( $i=0; $i<$info['count']; $i++ ) {
echo "You are changing the password for " .
$info[$i]['givenname'][0] . ", " .
$info[$i]['sn'][0] . " (" .
$info[$i]['samaccountname'][0] .
") to {$userpass}\n";
$userdata['unicodePwd'] = make_ad_passwd ($userpass);
$result = ldap_mod_replace ($ldap, $info[$i]['distinguishedname'][0], $userdata);
if ( $result === false )
echo "There was a problem changing your password, please call IT for help\n";
else
echo "Your password han been changed!\n";
}
@ldap_close ($ldap);
?>
일단 bind 문제는 답변을 하기가 쉽지 않네요. AD 에서 ldaps:// protocol 을 받아 주는지 확인이 되었나 부터가 우선이 되어야 해서요.
그리고, 인증서는 저의 경우에는 PEM 형식만 가능 햇습니다. 문서들에서 PEM 형식으로 변환하라고 되어 있었고요.
그리고, defaultdn, 과 accesspw 가 고정되어 있는 이유는, 위의 스크립트의 목적이 각 개별 사용자가 암호를 변경하기 위한 목적이 아니라, 전체 리스트를 관리를 하는 것이 목적이기 때문에 super user 의 권한을 가진 ldap 계정을 지정해 놓은 것입니다.
각 계정별로 자신의 password를 수정하는 것이라면 각 계정의 dn와 pw를 이용해도 무방합니다. 단, 자기 자신의 것만 수정이 가능 하겠죠.
담변 감사합니다.
SFU 3.0를 간단히 테스트해보았습니다. 테스트하면서 글을 읽으니 많이 도움이 되고 있습니다.
그런데 필자님의 글에 다른 의문이 하나 더 생겼습니다.
password sync 이 부분인데요 Windows AD의 유저, 패스워드를 어떤 식으로 Linux하고 동기화 시키는지 잘 모르겠습니다.
예로 생성파일을 user id로 정했다면 UFS를 통해 유저의 ID를 리눅스 시스템 인지하는 것은 어느정도 알겠는데 passwd 부분에서 어떻게 동기화를 시키는지 궁금합니다.
그러므로 사용자의 AD암호만 변경하면 실제로 서비스를 하는 Linux NIS까지 암호가 변경이 이해가 잘 가지 않습니다.
자꾸 귀찮게하는것 같습니다. 아직 많이 부족하여 자꾸 질문을 드리게 됩니다.
조언 기다리겠습니다.
이승환
019-445-1813
lucifertear@gmail.com
예)
너무 대단한 작업으로 생각 하시는 것 같습니다. :-) sync 는 간단하게 Linux NIS 에서 ypcat 으로 AD의 NIS entry 를 가져와서 파싱하여 Linux NIS entry 를 새로 생성하는 것 뿐입니다. 즉 AD의 NIS entry 에서는 userid/passwd field 만 사용하고, 나머지 정보는 Linux NIS 서버에서 알아서 취급을 한다는 의미입니다.
현재는, ypcat 을 사용하지 않고, Linux NIS 서버에서 LDAP 으로 AD의 SFU entry 들을 가져와서 NIS entry 를 만들고 있습니다. ^^;
Windows 2003R2 부터는 MS 예전에 application 으로 제공해 오던 Service For Unix (SFU) 를 service 로 제공합니다. 그래서 SFU에 있는 NIS를 이용해서 AD에서 NIS service 를 할 수 있습니다. 그런데 SFU의 NIS의 문제가 AD entry 에 multibyte 문자가 존재할 경우 예를 들어 CN 값을 한글 이름으로 지정할 경우, 관리툴에서 Unix Attribute tab 의 활성화가 되지 않습니다. 그래서 power shell 로 CN부분을 id와 동일하게 넣고선, Linux 에서 AD의 nis entry 를 받아와서 CN부분을 LDAP으로 값을 가져와서 복구시킨 후에 Linux NIS 에 entry 를 생성하는 방식을 사용한 것입니다. 즉, AD의 NIS는 password sync 를 위해서만 사용을 하고, Linux NIS가 실제 NIS 서비스를 하는 셈이 되는 것이죠.
이렇게 구성하면 사용자 입장에서는 AD의 암호만 변경을 하면 NIS까지 같이 변경이 되니 2군데 암호를 변경할 필요가 없게 되는 것이고요. 그리고 이렇게 이원화를 해 놓으면, OU별로 별도의 NIS entry 를 구분할 수 있는 점이 이런 설계를 가져오게 된 것입니다. 즉, 이 문서에서의 LDAP은, Linux NIS 에서 AD에서 가져온 entry 를 복구하기 위하여 사용을 하는 꽁수 때문에 작성이 된 것입니다.
사진 보기..
사진 보기..
사진 보기..
Comments List
안녕하세요. 저도 비슷한 문제에 봉착해서 어떻게 해결하셨는지 조언 듣고 싶어서 연락드립니다.
서버 최초 접속 시
<html><script lang=javascript>
document.cookie = '_accessKey2=4K0vhJlSdVkvJXFyslMRDa8MH1-L9cIG'
window.location.reload();
</script></html>
코드로 리로드 시키는데, 문제는 OCX단에서 보내는 요청도 이 코드가 응답으로 와서 문제입니다.
해당 웹서버를 우리가 관리하는게 아닌터라 어떤 단(?)에서 어떤 녀석(?)이 위 코드를 뿌려주는건지 알 수 있을까요?
처리는 간단합니다. 해당 코드가 쿠키를 구어서 보내라는 의미이기 때문에 쿠키 데이터를 넣어서 query를 다시 보낸 것 입니다. :-)
위 코드는 해당 웹서버가 보내주는 것일 겁니다..
ㅎㅎ 쓸데 없는 행동을 한 것을 안 것인지, 이번달에 보니 풀어 버렸네요. :-)
오오오오 +_+