smbldap-toolsでちょっと戸惑う
smbldap-toolsでエラーになったこと
 $ sudo smbldap-useradd -a test
 Use of uninitialized value in concatenation (.) or string at /usr/share/perl5/smbldap_tools.pm line 879.
 Can’t call method “get_value” on an undefined value at /usr/sbin/smbldap-useradd line 204.
 ldapの検索で引っかかっている?
 Jul  9 08:43:40 sacrifice slapd[15885]: conn=0 fd=14 ACCEPT from IP=172.16.241.103:42801 (IP=0.0.0.0:389)
 Jul  9 08:43:40 sacrifice slapd[15885]: conn=0 op=0 BIND dn=”cn=Manager,dc=yatao,dc=local” method=128
 Jul  9 08:43:40 sacrifice slapd[15885]: conn=0 op=0 BIND dn=”cn=Manager,dc=yatao,dc=local” mech=SIMPLE ssf=0
 Jul  9 08:43:40 sacrifice slapd[15885]: conn=0 op=0 RESULT tag=97 err=0 text=
 Jul  9 08:43:40 sacrifice slapd[15885]: conn=0 op=1 SRCH base=”dc=yatao,dc=local” scope=2 deref=2 filter=”(&(objectClass=posixAccount)(uid=testuser))”
 Jul  9 08:43:40 sacrifice slapd[15885]: conn=0 op=1 SEARCH RESULT tag=101 err=0 nentries=0 text=
 Jul  9 08:43:40 sacrifice slapd[15885]: conn=0 op=2 SRCH base=”sambaDomainName=yatao.local,dc=yatao,dc=local” scope=0 deref=2 filter=”(objectClass=sambaUnixIdPool)”
 Jul  9 08:43:40 sacrifice slapd[15885]: conn=0 op=2 SEARCH RESULT tag=101 err=0 nentries=1 text=
 Jul  9 08:43:40 sacrifice slapd[15885]: conn=0 op=3 MOD dn=”sambaDomainName=yatao.local,dc=yatao,dc=local”
 Jul  9 08:43:40 sacrifice slapd[15885]: conn=0 op=3 MOD attr=uidNumber
 Jul  9 08:43:40 sacrifice slapd[15885]: conn=0 op=3 RESULT tag=103 err=0 text=
 Jul  9 08:43:40 sacrifice slapd[15885]: conn=0 op=4 SRCH base=”dc=yatao,dc=local” scope=2 deref=2 filter=”(uidNumber=1005)”
 Jul  9 08:43:40 sacrifice slapd[15885]: conn=0 op=4 SEARCH RESULT tag=101 err=0 nentries=0 text=
 Jul  9 08:43:40 sacrifice slapd[15885]: conn=1 fd=19 ACCEPT from IP=172.16.241.103:42802 (IP=0.0.0.0:389)
 Jul  9 08:43:40 sacrifice slapd[15885]: conn=1 op=0 BIND dn=”cn=Manager,dc=yatao,dc=local” method=128
 Jul  9 08:43:40 sacrifice slapd[15885]: conn=1 op=0 BIND dn=”cn=Manager,dc=yatao,dc=local” mech=SIMPLE ssf=0
 Jul  9 08:43:40 sacrifice slapd[15885]: conn=1 op=0 RESULT tag=97 err=0 text=
 Jul  9 08:43:40 sacrifice slapd[15885]: conn=1 op=1 SRCH base=”dc=yatao,dc=local” scope=2 deref=0 filter=”(&(objectClass=posixAccount)(uidNumber=1005))”
 Jul  9 08:43:40 sacrifice slapd[15885]: conn=1 op=1 SRCH attr=uid userPassword uidNumber gidNumber cn homeDirectory loginShell gecos description objectClass
 Jul  9 08:43:40 sacrifice slapd[15885]: conn=1 op=1 SEARCH RESULT tag=101 err=0 nentries=0 text=
 Jul  9 08:43:40 sacrifice slapd[15885]: conn=0 op=5 SRCH base=”ou=Group,dc=yatao,dc=local” scope=2 deref=2 filter=”(&(objectClass=posixGroup)(?gidNumber=))”
 Jul  9 08:43:40 sacrifice slapd[15885]: conn=0 op=5 SEARCH RESULT tag=101 err=0 nentries=0 text=value does not conform to assertion syntax
 Jul  9 08:43:40 sacrifice slapd[15885]: conn=0 fd=14 closed (connection lost)
 Jul  9 08:43:40 sacrifice slapd[15885]: conn=1 fd=19 closed (connection lost)
 /usr/sbin/smbldap-useradd
 /usr/share/perl5/smbldap_tools.pm
 二つのファイルを読みながら30分悩んだ。
 defaultUserGidというキーワードを発見、早速調べてみるとやはりこれではまっていた人が多いみたい。
 defaultComputerGidという設定もあるのだが、現状で登録端末無いからとりあえず無指定としたがけどsmbldap-useraddは-aオプションで登録が完了することを確認。
 一段落。
 続いてsmbldap-passwdも。
 defaultMaxPasswordAgeを指定しなくちゃ駄目です。
 Use of uninitialized value in string at /usr/sbin/smbldap-passwd line 277, 
 Failed to modify UNIX password: shadowMax: value #0 invalid per syntax at /usr/sbin/smbldap-passwd line 285, 
 こんな感じで注意を受けます。
 端末の登録
 $ sudo smbldap-useradd -w pdc-demo
 Use of uninitialized value in substitution (s///) at /usr/sbin/smbldap-useradd line 241.
 Use of uninitialized value in string at /usr/share/perl5/smbldap_tools.pm line 544.
 failed to add entry: gidNumber: value #0 invalid per syntax at /usr/share/perl5/smbldap_tools.pm line 560.
 またですねぇ。。
 どうもsmbldap.confの内容に不足があるみたい。
 userHomeやuserLoginShellもちゃんと書いておくことを前提としているのですね。
 普通に処理されているので、さわらない方が良いのかもしれませんが誤りっぽいところを発見。(問題とは一切関係なさそう)
 smbldap-tools  0.9.4-1のsmbldap_tools.pmより
 # success = add_posix_machine($user, $uid, $gid)
 sub add_posix_machine
 {
 my ($user,$uid,$gid,$wait) = @_;
 if (!defined $wait) {
 $wait=0;
 }
 # bind to a directory with dn and password
 my $add = $ldap->add ( “uid=$user,$config{computersdn}”,
 attr => [
 #’objectclass’ => [‘top’, ‘person’, ‘organizationalPerson’, ‘inetOrgPerson’, ‘posixAccount’],
 ‘objectclass’ => [‘top’, ‘account’, ‘posixAccount’],
 ‘cn’   => “$user”,
 #’sn’   => “$user”,
 ‘uid’   => “$user”,
 ‘uidNumber’   => “$uid”,
 ‘gidNumber’   => “$gid”,
 ‘homeDirectory’   => ‘/dev/null’,
 ‘loginShell’   => ‘/bin/false’,
 ‘description’   => ‘Computer’,
 ‘gecos’   => ‘Computer’,	# < ==ここのカンマはおかしくないですか?
]
);
$add->code && warn “failed to add entry: “, $add->error ;	#ここが560行
 sleep($wait);
 return 1;
 }
 そんなこんなで、最低限必要と思われる/etc/smbldap-tools/smbldap.confの内容
 SID=”S-1-5-21-2216866858-1619610787-4081851776″
 sambaDomain=”reptec.local”
 masterLDAP=”sacrifice.reptec.local”
 masterPort=”389″
 ldapTLS=”0″
 suffix=”dc=reptec,dc=local”
 usersdn=”ou=People,${suffix}”
 computersdn=”ou=Machine,${suffix}”
 groupsdn=”ou=Group,${suffix}”
 sambaUnixIdPooldn=”sambaDomainName=${sambaDomain},${suffix}”
 scope=”sub”
 hash_encrypt=”SSHA”
 userLoginShell=”/bin/false”
 userHome=”/home/%U”
 userHomeDirectoryMode=”700″
 userGecos=”System User”
 skeletonDir=”/etc/skel”
 defaultUserGid=”513″
 defaultComputerGid=”553″
 defaultMaxPasswordAge=”0″