這個工作很單純的,但是學長就是說用直接處理的方式會出現問題,所以一定有奇怪的問題存在,所以我就感到有點可怕了…
1. 最基本上想法,就是把nis上的gecos解出來,然後放到ldap的匯入格式 ldif,然後再叫 ldapmodify來吃就好了。
(如果事情有這麼單純,這樣真的就解決了)
2. 但是大家的gecos info都會亂塞資料,像是我的名字是繁體中文的,而ldap只吃utf-8的資料,所以就要先轉碼囉,用perl的話,就要用 Text::Iconv 這個東西了 :p 可是就算是改成utf-8,ldap一樣吃不進去,google告訴我,預設的ldap的nis.schema中的gecos這個欄位只吃IA5String,所以要改一下schema。
#attributetype ( 1.3.6.1.1.1.1.2 NAME 'gecos'
# DESC 'The GECOS field; the common name'
# EQUALITY caseIgnoreIA5Match
# SUBSTR caseIgnoreIA5SubstringsMatch
# SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 SINGLE-VALUE )
attributetype ( 1.3.6.1.1.1.1.2 NAME 'gecos'
DESC 'The GECOS field; the common name'
EQUALITY caseExactMatch
SUBSTR caseExactSubstringsMatch
SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 SINGLE-VALUE )
這樣就可以在gecos中擺UTF-8字元了
3. 再來就是ldif裡面出現空白好像會出問題,所以要餵LDAP吃有空白的資料的話,那麼就得先把它轉成Base64,這個要用到 MIME::Base64
4. 就可以準備來玩匯入的功能了,不幸的是,有些人的匯入結果會顯示 Invalid format ...
看一下文字檔的內容,應該是因為gecos是沒有東西的關係… 那麼就是 gecos是空白的話,那就不要去replace gecos
5. 匯入還是出現錯誤,結果發現有些使用者不存在LDAP裡面,總管說把那些帳號建回來。(用MigrationTools)
6. 還是有錯誤,一樣是Invalid format,那麼就用暴力法,
# sudo ypcat master.passwd | grep uid馬賽克:馬賽克:馬賽克:馬賽克::0:0:馬賽克,馬賽克,馬賽克 ,馬賽克,馬賽克:馬賽克:/bin/tcsh
有關個人隱私與安全部份全部被我馬賽克取代了… 看起來一切都好,那問題是出在哪邊呢?
換另外一個試試,這個gecos就比較長了,也讓我好奇是不是超過長度,但是我的gecos跟他的一樣長,我的就沒事哩!?不過我注意到一點,為什麼他的gecos會一半就斷掉了哩?
# sudo ypcat master.passwd | grep uid | cut -d":" -f 8 | hd結果被我發現帳號的gecos裡面居然藏了一個 0x0A(換行字元),我想應該是這邊出問題吧 Orz
沒有留言:
張貼留言