ldap スキーマの情報を返す web api の実装
一昨日、昨日 と ldap スキーマの parser について調査して実装した。最終的には構文解析した値をそのまますべて返すわけではなく、実際に ui や内部の処理で必要な情報のみを使いやすい構造にして web api として実装する。マージリクエストを作成してメンバーにコードレビューをしてもらっていて、スキーマ情報だけでは足りない仕様に1つ気付いた。たとえば、次の cn
という属性の定義には SUP (super の略語で親の定義から派生していることを表す) として name
が定義されている。
attributetype ( 2.5.4.41 NAME 'name'
EQUALITY caseIgnoreMatch
SUBSTR caseIgnoreSubstringsMatch
SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{32768} )
attributetype ( 2.5.4.3 NAME ( 'cn' 'commonName' )
DESC 'RFC2256: common name(s) for which the entity is known by'
SUP name )
cn
の定義には SYNTAX は定義されていないが、これは name
の定義にある SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 (Directory String
のこと) の oid を継承するという仕様になっている。自分で SUP を調べて継承元の情報を取得するのは面倒なので構文解析した後に SUP が指定されていれば Equality, Ordering, SubStr, Syntax を親から取得するように改善した。こういうところは自前で parser を実装しているので自分たちの都合にあわせてカスタマイズしやすい。
3日もかかってしまったが、これで ldap スキーマを返す web api の実装を完了できた。いまの開発フェーズにおける、私が機能拡張する issue はこれで完了にしようと考えている。来週からはテストや qa 向けの作業にのみ注力していこうと思う。本番導入前に少しでも運用トラブルの懸念を減らす、もしくは品質をあげるための取り組みをあと3週間やってからしっかり検証をしていく。ここ1ヶ月ほど深夜までコードを書いていることが多かった。終わってみれば、面倒で厄介な issue も大半を fix した。当たり前の話だけど、四六時中ずっとコードを書いていたら気付いたら成果として積み上がってきた。マネージャーを移管したことでその分の労力を開発にまわせているのもある。