[Samba] debugging smbldap-useradd failures
tarjei
tarjei at nu.no
Sat Jan 27 15:11:33 GMT 2007
Hi, I just thought I'd post here some notes after a loong bugsearch.
Keywords:
failed to perform search; Unexpected EOF
using Domain Admins to add machines
The problem was that I got this in the sambalog:
_samr_create_user: Running the command `/usr/sbin/smbldap-useradd -w
"machine$"' gave 127
Part of the problem was that this isn't a lot to go on, and the command
worked if I ran it from the commandline.
To get around that, I wrote a wrapperscript that logged the output from
the command [1]. The script combined with some extra debugging output
placed in the smbldap-tools code showed that smbldap-tools expected the
user to be root and if not it would not read the file smbldap_bind.conf.
Here's part of the code:
if ($< == 0) {
( read the file )
} else {
$conf{slaveDN}=$conf{slavePw}=$conf{masterDN}=$conf{masterPw}="";
}
Thus , no bind attributes are set. Smbldaptools does not see this as
something that should be noted somehow. The reason in my case was that
someone had added a administrator user to the local users on the box
with uid 999.
I have included a patch [2] that should at least give some more warnings
when this happens. IMHO smbldaptools should not need to run as root -
but that is another issue.
I hope this post may help someone some time.
kind regards,
Tarjei
1. The wrapperscript I used to get extra logging from smbldap-useradd:
#!/usr/bin/perl -w
my $log = "/tmp/smb.log" ;
open(LOG , '>>' ,$log) or die($@);
open STDERR, ">>$log" or die($@);
$cmd = "/usr/sbin/smbldap-useradd";
print LOG `date`;
print LOG "Command: " . $cmd . " " . join(" " , @ARGV) . "\n";
#$ret = system($cmd, @ARGV);
$cmd = $cmd . " " . join(" " , @ARGV);
$ret = `$cmd`;
print LOG "Return: \n" . $ret . "\n";
$who = `whoami`;
print LOG "Whoami: $who\n";
close(LOG);
close(STDERR);
exit($?);
2. This patch adds better warnings to smbldaptools:
--- smbldap_tools.pm.orig 2007-01-27 15:50:05.000000000 +0100
+++ smbldap_tools.pm 2007-01-27 15:54:21.000000000 +0100
@@ -170,6 +170,7 @@
close (CONFIGFILE);
} else {
$conf{slaveDN}=$conf{slavePw}=$conf{masterDN}=$conf{masterPw}="";
+ warn ("Could not open smbLdap_bind_conf file as user with uid
$< is not root. Bind details not set\n");
}
# automatically find SID
if (not $conf{SID}) {
@@ -278,6 +279,7 @@
sub connect_ldap_master
{
+ my $mesg;
# bind to a directory with dn and password
my $ldap_master = Net::LDAP->new(
"$config{masterLDAP}",
@@ -288,16 +290,22 @@
)
or die "erreur LDAP: Can't contact master ldap server ($@)";
if ($config{ldapTLS} == 1) {
- $ldap_master->start_tls(
+ $mesg = $ldap_master->start_tls(
verify =>
"$config{verify}",
clientcert =>
"$config{clientcert}",
clientkey =>
"$config{clientkey}",
cafile =>
"$config{cafile}"
);
+ if ($mesg->code) {
+ warn("Could not start_tls: " . $mesg->error);
+ }
}
- $ldap_master->bind ( "$config{masterDN}",
+ $mesg = $ldap_master->bind ( "$config{masterDN}",
password =>
"$config{masterPw}"
);
+ if ($mesg->code) {
+ die ("Could not bind (login) to master ldapserver.
Error: " . $mesg->error);
+ }
$ldap=$ldap_master;
return($ldap_master);
}
More information about the samba
mailing list