2012/08/14

パスワードの読み仮名を作るc2pコマンド

長年サーバ管理者やっています。サーバ管理者の仕事と言えば、導入するサーバの選定、データセンターへの搬入やら現地設定、リモートで構築、日常の運用、障害対応等いろいろあります。

それに加えて組織に新たな人がやってきたり、逆に去っていったりする時にユーザアカウントの発行をすることがあります。

アカウントを発行する時は、主にメールアドレス用のアカウントである事が殆どですが、当然ながら初期パスワードも作る必要があります。

c2pコマンドは生成した初期パスワードの読みを日本語または英語で表示するコマンドです。プロバイダ契約をした時に送られてくる書類に書かれているあれを作るのに役立ちます。

コンパイル

githubにソースコードを置いています。ソースコードを取ってきてコンパイルして、make installで出来上がったコマンドをインストールするだけです。
% git clone https://github.com/azumakuniyuki/c2p ⏎
Cloning into c2p...
remote: Counting objects: 21, done.
remote: Compressing objects: 100% (21/21), done.
remote: Total 21 (delta 8), reused 0 (delta 0)
Unpacking objects: 100% (21/21), done.

% cd ./c2p ⏎
% make LFLAGS='-DJA' ⏎
gcc -O -Wall -DJA -DKANJI  -o c2p c2p.c
% sudo make install ⏎
cp c2p /usr/local/bin/
chmod a+x /usr/local/bin/c2p
コンパイル、インストールから使い方はREADME.JAに書いています。デフォルトのインストール先は /usr/local/bin で、c2pというコマンド名でインストールされます。別の場所にインストールしたい場合はMakefileのPREFIXを編集して下さい。

strlcpyがないシステムでコンパイルするには、make NOSTRL=1とするか、Makefileを編集して下さい。FreeBSD, OpenBSD, Linux, MacOS Xでコンパイルと動作を確認していますので、多分何でも動くと思います。Solarisは手元にないので未確認です。

使い方

使い方もREADME.JAに書いています。が、ブログなので念のためこっちにも書いておきます。
% c2p -h ⏎
Usage: c2p [Options] String
Options:

 Delimiter:
  -d<x>  : c = Comma [,]
         : h = Hyphen [-]
         : p = Pipeline [|]
         : w = White space [ ]

 Language:
  -L<x>  : e = English
         : j = Japanese(UTF-8)

  -s     : Writes a white space after each delimiter.
  -C     : Show control characters too.
  -h     : Shows help message(This screen).
  -v     : Shows version number.

% c2p 3.1415 ⏎
参,点,壱,四,壱,五

% c2p Neko ⏎
エヌ(大),イー,ケー,オー

% c2p -dw CalicoCat ⏎
スィー(大) エイ エル アイ スィー オー スィー(大) エイ ティー

% echo 'Tabby Cat' | c2p ⏎
ティー(大),エイ,ビー,ビー,ワイ,空白,スィー(大),エイ,ティー

% echo 'stray cat' > /tmp/neko ⏎
% c2p < /tmp/neko ⏎
エス,ティー,アール,エイ,ワイ,空白,スィー,エイ,ティー

% c2p -Le bobtail ⏎
Blavo,Oscar,Blavo,Tango,Alfa,India,Lima

最初に作ったのが十年以上前なので、なんで"C"を"シー"ではなく"スィー"ってしたのか覚えてませんが、スィーが気持ち悪い人はjp.hを好きなように編集して下さい。

コマンドオプション

-d 区切り文字(c,h,p,w)

-dは各文字を何で区切るかを指定します。デフォルトは","ですが、ハイフン(-), パイプ(|), 空白でも区切れます。

-L 表示言語(e,j)

-Lオプションは表示する言語を切り替えます。コンパイル時にLFALGS='-DJA'を付けているので、オプション無しでは日本語で表示されます。-Leで読み方が英語向けになります。10年以上前、このコマンドを作った当時にオーストラリアの人が「英語でも出せたらいいなぁ」って言っていたので、英語では何を出せばいいのか聞いたら「アルファ、ブラボーとかのあれかな」って感じの答えでしたので、欧文通話表のそれを出す事にしました。

Mission Impossibleでイーサン・ハントのトム・クルーズさんがプラハの公衆電話からCIAに電話した時に言っていた「Bravo, Echo, One, One」のあれです。

-C 制御文字も表示

あと、何の役に立つのかわかりませんが、-Cオプションで表示できない文字も出ます。
% printf '\a\x12\b\e' | c2p -C ⏎
[ベル],[装置制御2],[1文字後退],[エスケープ]

パスワードを生成するコマンド: apg

そもそも生成する初期パスワードに0とかOとか1とかlとか紛らわしい文字を入れなければ、態々読みがなを出す必要もなく、アカウントの連絡票に初期パスワードだけを書けば良いのですが、連絡票の文字が小さくて初期パスワードが読みにくいって場合でも、読みがなは役に立ちます。

僕がいつも使っているのはapgというコマンドです。
% apg -n 4 -x 12 -m 12 -MNCL ⏎
ZwyowlAtsEm8
kajhidOjlad5
WecOcdealOj0
TaHuthbebit5
最小文字数12で最大文字数も12の大文字小文字数字を入れたパスワードを4つ作っている例です。このapgコマンドの面白いところは、覚えやすい(発音で記憶しやすい)パスワードが発音つきで作れるところです。
% apg -n 4 -x 12 -m 12 -MNCL -a0 -t ⏎
Icdijcedsin3 (Ic-dij-ceds-in-THREE)
cenyegTafEj4 (cen-yeg-Taf-Ej-FOUR)
KenEnijNook8 (Ken-En-ij-Nook-EIGHT)
vefIrdEminn6 (vef-Ird-Em-inn-SIX)

%  apg -n 4 -x 8 -m 8 -MNCL -a1 -l ⏎
Fz1NNNbZ Foxtrot-zulu-ONE-November-November-November-bravo-Zulu
EG35aYbE Echo-Golf-THREE-FIVE-alfa-Yankee-bravo-Echo
pHJ8VrM1 papa-Hotel-Juliett-EIGHT-Victor-romeo-Mike-ONE
5M7h1ixn FIVE-Mike-SEVEN-hotel-ONE-india-x_ray-november
最初の例は英単語っぽい感じのパスワードで、単語の羅列ではなく発音しやすい感じで作られます。次の例は単純に単語の読みを通話表のそれに基づいて出力します。

apgは英語前提の発音を出してくれますが、日本語が必要ならc2pがよいかもしれないです。

その他

元々プログラマではないので、c2pはC言語の練習用に書いた中身がクソな可能性が高いコードです。あと、それほど頻繁にCで何かを書く事が無いので、たまにどうでも良い機能を実装してC言語を完全に忘れないようにしています。

例えばコンパイル時に指定できるKANJIマクロに'-DDAIJI'を指定すると、数字が大字で表示されるようになります。壱とか弐とかのあれです、緋村剣心が九頭龍閃を放つ時のコマに書いてた奴です、何の役にも立ちません。

strcpy,strlcpyあたりの処理も怪しい気がするので、ソース見てこれはひどいと思ったらパッチ下さい。

No comments:

Post a Comment