なぜか複数のGUID

昨日の件を,さらに追求.
例によってAppleのdiscussion listは役に立たない.あれだけ膨大な英単語が並んでいて,答えが滅多にないというのもある意味驚愕的だと思う.
最初,

2009-05-20 18:30:21+0900 [-] [caldav-8009]  [-]     if record.shortName in disabledNames or record.guid in disabledGUIDs:
2009-05-20 18:30:21+0900 [-] [caldav-8009]  [-] TypeError: list objects are unhashable

昨日のログから,まずはdisabledNames か disabledGUIDsがイカレているかと思って30分ほど費やす.
しかし,コードを眺めてみても,どうにもおかしい気がしない.下記のようにしてみた.

            logging.warn("record.shortName %s" % record.shortName);
            logging.warn("record.guid %s" % record.guid);

実行してみる.ログは…(一部伏字)

2009-05-21 10:44:33+0900 [-] [caldav-8010]  [-] record.shortName accessibility
2009-05-21 10:44:33+0900 [-] [caldav-8010]  [-] record.guid ABCDEFAB-CDEF-ABCD-EFAB-wwwwwwwwwwww
2009-05-21 10:44:33+0900 [-] [caldav-8010]  [-] record.shortName admin
2009-05-21 10:44:33+0900 [-] [caldav-8010]  [-] record.guid ['15D7AC6D-620C-4DBC-975D-yyyyyyyyyy', 'ABCDEFAB-CDEF-ABCD-EFAB-CDEFaaaaaaaa']

なんだってー!!!

安直

とりあえずブートさせるのだ.カレンダーは会社の生命線なのだ.ということでbrute-forcedなパッチ.

           if record.shortName == 'admin':
                record.guid = 'ABCDEFAB-CDEF-ABCD-EFAB-CDEFaaaaaaaaa'
            if record.shortName == 'staff':
                record.guid = 'ABCDEFAB-CDEF-ABCD-EFAB-CDEFbbbbbbbb'
            # Check for disabled items
            if record.shortName in disabledNames or record.guid in disabledGUIDs:

…良い子はマネしてはいけないと思います.ダメです.

より真っ当な(?)解決

動きゃいいんだよ動きゃ.でも何か気持ち悪い.

そういえばこの手のGUID不整合って以前あったような気もするなぁ….で,調べてみた.

$ sudo vi /var/db/dslocal/nodes/Default/groups/admin.plist
>|xml|
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
        <key>generateduid</key>
        <array>
                <string>15D7AC6D-620C-4DBC-975D-yyyyyyyyyy</string>
                <string>ABCDEFAB-CDEF-ABCD-EFAB-CDEFaaaaaaaa</string>

ふむるむなるほど.問題のユーザは,こんな風に2行になっているわけね.
で,2行目を削除し,さきほどの劣悪パッチを取り去る.解決フレーバー.

抜本的解決かどうかは,知らない.

結局午前中が

カレンダーサーバのお守りで終わっちゃったよ….