UNIX->smbpasswd synch

Peter Samuelson peter at cadcamlab.org
Sun Jun 18 17:25:47 GMT 2000

[Peter Samuelson <peter at wire.cadcamlab.org>]
> Tests so far indicate that Linux `su' behaves rather strangely.  If
> it has a controlling tty, it wants this to be stdin, even when run as
> root (so it doesn't need to prompt for a password).

I figured it out!  I'm feeling a bit stupid right now.  Linux `su' is
entirely deterministic and sensible after all.

The problem was that `su' had no idea it was supposed to be running as
root, since the real uid was non-root.  So, naturally, it was wanting
to prompt for a password.

I give up.  Switching to Perl.


#!/usr/bin/perl -w

# cleanse the path since Perl thinks we're running setuid
$ENV{PATH} = '/usr/local/samba/bin:/usr/bin';

# possibly this should come from smb.conf...

# un-setuid
$) = $(;	# egids = gids
$> = $<;	# euid = uid

# debugging
#open STDOUT, ">>/tmp/passwdchange.out";
#open STDERR, ">>/tmp/passwdchange.err";
close STDOUT;
close STDERR;

while (<STDIN>) {
  if (m/([^ ]+) (.*)/) {
    if ($1 eq 'user') { $u = $2; next; }
    elsif ($1 eq 'password') { $n = $2; next; }
    elsif ($1 eq 'oldpassword') { $o = $2; next; }
# print STDERR "Unexpected line: $_\n";

if (defined($o)) {
  # todo: error checking?
  open OUT, "|smbpasswd -s -r '$ntpdc' -U '$u'";
  print OUT "$o\n$n\n$n\n";
  close OUT;

More information about the samba-ntdom mailing list