Jenkins をパスワード管理なしで使う方法

Jenkins をインターネットから安全にアクセス可能にするために、パスワード管理なしで使えるようにしたので、その方法を紹介する。

この種のサービスをインターネットからアクセス可能にするには、パスワードを保護するために SSL による暗号通信を用いることが多いと思われる。しかし SSL にはサーバー証明書が必要であり、正規に取得したものでない限りブラウザーにより警告表示が出るのが煩わしさを感じるところでもある。

そこで SSL を使わない方法ということで考えたのが、既存の安全な認証機能を利用するということである。これには OpenID プラグインが役立った。

まあ何のことはない。以前 Google Apps が無料だった頃に申し込んであったドメインを使って SSO を設定しただけである。実際に設定してみたらあっけなく機能してしまった。

C++Builder & VCL でリストビューにソート順アイコン表示

C++Builder の VCL アプリケーションで、ソート可能なリストビューのヘッダーにソート対象カラムとソート順を示すアイコンを表示させる方法を調べたのでまとめてみる。

問題は、VCL にリストビュー内のヘッダーコントロールを取得する手段がないというところで、仕方ないので Win32 API から以下を利用する。

  • ListView_GetHeader() – ヘッダーコントロールのハンドル取得
  • Header_GetItemCount() – アイテム数取得
  • Header_GetItem() と Header_SetItem() – アイテム情報の取得と変更

使ったところは次のような感じ。

https://bitbucket.org/kazssym/dmolist/src/8038d1e15d6f400d3f4fdb049355c84ddda9a462/src/Main.cpp?at=default#cl-127

Mercurial #hg / #TortoiseHg で Beyond Compare Lite

Embarcadero RAD Studio に付属の Beyond Compare Lite を Mercurial / TortoiseHg で使うための設定例を曝してみる。

[merge-tools]
bcomparelite.priority = -4
bcomparelite.executable = C:\Program Files (x86)\Embarcadero\RAD Studio\version\bin\BCompareLite.exe
bcomparelite.args = /ro /title1=local /title2=other $local $other
bcomparelite.gui = True
bcomparelite.diffargs = /ro1 /title1='$plabel1' /title2='$clabel' $parent1 $child

ここが変だよ! #Embarcadero C++Builder (part 2)

今回は不具合ではなくて言語仕様の話をしようと思う。

C++Builder では Delphi のクラスを使えるように拡張されているが、元々異なるものをくっつけたのでちぐはぐになっているという一例がこれ。

Link: C  Builder VCL でのオブジェクト生成 – RAD Studio.

Delphi (Object Pascal)  のクラスでは、最派生クラスのコンストラクターがまず呼び出されて、そこから基底クラスのコンストラクターを入れ子的に呼び出す仕組みなのに対して、C++ では基底クラスのコンストラクターから順に呼び出されるという言語仕様なので、呼び出される順番が異なる―というわけで、木に竹を接いだらこうなりましたというすごい仕様になっていたりする。

ここが変だよ! #Embarcadero C++Builder

C++Builderプロジェクトでmem.hというヘッダーファイルを作ると大変という話。

C++Builderでは,memcpyやmemsetといったCの標準ライブラリー関数を<mem.h>で宣言していて,<string.h>から間接的にインクルードしているのだが,このせいでユーザーがプロジェクトでmem.hというヘッダーファイルを作ると,そちらが使われてしまってmem*系の関数が宣言されないという困ったことになってしまうのである。

Link: mem.h – RAD Studio XE3.

続きを読む →

オレオレ証明書でAuthenticodeコード署名を―の続き

コード署名用の証明書はとりあえず以下のようなセクションをopenssl.confに書いて-extensions codeSigningのようにオプションを指定すれば作成できるようである。

[codeSigning]
subjectKeyIdentifier = hash
keyUsage = critical, digitalSignature
authorityKeyIdentifier = keyid, issuer
extendedKeyUsage = codeSigning

critical指定はお好みで。

リンク: オレオレ証明書でAuthenticodeコード署名を: おーぷんそーす日記™ 3.0.

オレオレ証明書でAuthenticodeコード署名を

Microsoft Windows向けのコード署名には高価なコードサイニング証明書を買わないといけないと思われているようだが,実際のところオレオレ証明書で可能だったりする。(信用はされないかもしれないが。)

コード署名用のオレオレ証明書の作成方法は別の機会に書くとして,証明書ストアに証明書があればsigntool sign /a example.exeとするだけでできてしまうのであった。

もっともこれだけだと証明書の有効期限が切れると署名が無効になってしまうので,signtool sign /a /t Timestamp-URL example.exeとしてタイムスタンプサーバーを利用すると良い。タイムスタンプサーバーもオレオレ証明書で問題がなかったりする。

リンク: SignTool.exe (署名ツール).

rtnetlinkでインターフェースアドレス取得

rtnetlinkにRTM_GETADDRという機能があって,ネットワークインターフェースのアドレス情報を取得できることになっているんだが,調べてみると,インターフェースを指定するにはそのアドレスを正確に渡す必要があるらしい…

馬鹿じゃないのか,この仕様。アドレスを知りたいのにそのためにアドレスが必要とか

結局全てのアドレスを列挙するしか使い道がないぞ