FreeBSDでpkgのメッセージが二重にURIエンコードされてて、盛大に勘違いした

Posted on 2015/08/15(Sat) 17:45 in technical

導入

FreeBSD 10.1-RELEASE-p16にpkgからOpenLDAPを入れて認証基盤にしようとしたところ、:

/usr/local/etc/rc.d/slapd: WARNING: slapd: Can't find socket /var/run/openldap/ldapi

なるWARNINGが止まらなかったのだけど、そう設定しろって言ってくるpkgのバグだってことが分かるまでのお話。

状況

FreeBSD 10.1-RELEASE-p16にpkgを使ってopenldap-serverをインストールすると、以下のような説明が出ました。:

************************************************************
Message for openldap-server-2.4.41:
************************************************************

The OpenLDAP server package has been successfully installed.

In order to run the LDAP server, you need to edit
  /usr/local/etc/openldap/slapd.conf
to suit your needs and add the following lines to /etc/rc.conf:
  slapd_enable="YES"
  slapd_flags='-h "ldapi://%252fvar%252frun%252fopenldap%252fldapi/ ldap://0.0.0.0/"'
  slapd_sockets="/var/run/openldap/ldapi"

Then start the server with
  /usr/local/etc/rc.d/slapd start
or reboot.

Try `man slapd' and the online manual at
  http://www.OpenLDAP.org/doc/
for more information.

slapd runs under a non-privileged user id (by default `ldap'),
see /usr/local/etc/rc.d/slapd for more information.

************************************************************

これに従って、以下のように /etc/rc.conf に設定を入れます。:

# sysrc slapd_enable="YES"
# sysrc slapd_flags="-h 'ldapi://%252fvar%252frun%252fopenldap%252fldapi/ ldap://0.0.0.0/'"
# sysrc slapd_sockets="/var/run/openldap/ldapi"

警告

余談だけど、sysrcを使ってインストール時のメッセージをそのまま投入すると、 ' が " に変更されてしまうので、投入可能な記載に変更してます。

/usr/local/etc/openldap/slapd.conf の設定は省略するけど、上記の起動パラメータで起動すると以下のようなWARNINGが出ます。:

# sysrc slapd_flags
slapd_flags: -h 'ldapi://%252fvar%252frun%252fopenldap%252fldapi/ ldap://0.0.0.0/'
# service slapd restart
Stopping slapd.
Waiting for PIDS: 1604.
Starting slapd.
/usr/local/etc/rc.d/slapd: WARNING: slapd: Can't find socket /var/run/openldap/ldapi

調査

まずはバージョン:

# uname -a
FreeBSD ldap.ainoniwa.net 10.1-RELEASE-p16 FreeBSD 10.1-RELEASE-p16 #0: Tue Jul 28 12:04:19 UTC 2015     root@amd64-builder.daemonology.net:/usr/obj/usr/src/sys/GENERIC  amd64
# pkg info openldap-server | head
openldap-server-2.4.41
Name           : openldap-server
Version        : 2.4.41
Installed on   : Sat Aug 15 03:45:16 JST 2015
Origin         : net/openldap24-server
Architecture   : freebsd:10:x86:64
Prefix         : /usr/local
Categories     : net databases
Licenses       : OPENLDAP
Maintainer     : delphij@FreeBSD.org

起動状況:

# ps ax | grep "[l]dap"
4132  -  Is     0:00.01 /usr/local/libexec/slapd -h ldapi://%252fvar%252frun%252fopenldap%252fldapi/ ldap://0.0.0.0/ -u ldap -g ldap
# netstat -an | grep ldap
fffff8000d3733c0 stream      0      0 fffff80018150760        0        0        0 %2fvar%2frun%2fopenldap%2fldapi

古いやつ(FreeBSD 8.4で動いているやつ)の動作状況:

# ps ax | grep "[l]dap"
1296  ??  Is     0:01.13 /usr/local/libexec/slapd -h ldapi://%2fvar%2frun%2fopenldap%2fldapi/ ldap://0.0.0.0/ -u ldap -g ldap
# netstat -an | grep ldap
ffffff00185cf690 stream      0      0 ffffff0018d18ce8        0        0        0 /var/run/openldap/ldapi

ん? %252f じゃなくて %2f だぞ?

結論

pkgのdescriptionやmessageが二重にURIエンコードされているようだ。

古いやつに合わせたらちゃんと動作した。:

# sysrc slapd_flags
slapd_flags: -h 'ldapi://%2fvar%2frun%2fopenldap%2fldapi/ ldap://0.0.0.0/'
# service slapd restart
Stopping slapd.
Waiting for PIDS: 3849.
Starting slapd.

つまり、pkgでインストールした時のメッセージは正しくはこう(試しに/usr/portsからも入れてみたけど、そっちはこうだった):

************************************************************
Message for openldap-server-2.4.41:
************************************************************

The OpenLDAP server package has been successfully installed.

In order to run the LDAP server, you need to edit
  /usr/local/etc/openldap/slapd.conf
to suit your needs and add the following lines to /etc/rc.conf:
  slapd_enable="YES"
  slapd_flags='-h "ldapi://%2fvar%2frun%2fopenldap%2fldapi/ ldap://0.0.0.0/"'
  slapd_sockets="/var/run/openldap/ldapi"

Then start the server with
  /usr/local/etc/rc.d/slapd start
or reboot.

Try `man slapd' and the online manual at
  http://www.OpenLDAP.org/doc/
for more information.

slapd runs under a non-privileged user id (by default `ldap'),
see /usr/local/etc/rc.d/slapd for more information.

************************************************************

で、どうも pkg のバグ(https://github.com/freebsd/pkg/pull/1306)らしいので、今後は直る気配。

おしまい。

蛇足

最初動かねぇ!とか思ってバグ報告投げた(https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=202343)んだけど、論点がずれてたっぽくてメンテナの方にはご迷惑をおかけしたようだ。すまない。