--- loncom/pwchange 2002/09/16 13:27:40 1.7 +++ loncom/pwchange 2009/07/17 02:20:59 1.10 @@ -5,25 +5,28 @@ # pwchange - setuid script to change unix passwords # # YEAR=2001 -# 10/23,11/13,11/15 Scott Harrison # # YEAR=2002 # 02/19 Matthew Hall # -# $Id: pwchange,v 1.7 2002/09/16 13:27:40 foxr Exp $ +# $Id: pwchange,v 1.10 2009/07/17 02:20:59 raeburn Exp $ ### use strict; my $noprint = 1; + + +print "In pwchange\n" unless $noprint; +print "Real uid = $< effective uid = $> \n" unless $noprint; # ------------------------------------------------------------------ Untainting $ENV{'PATH'}='/bin:/usr/bin'; # Nullify path information. delete @ENV{qw(IFS CDPATH ENV BASH_ENV)}; # nullify potential taints # ---------------------------- Make sure this process is running from user=root -my $wwwid=getpwnam('www'); -if (0!=$<) { - print "Username not www" unless $noprint; + +if (0 != $<) { + print "Username not root" unless $noprint; exit 1; } # ----------------------------------------------- If not running setuid as root @@ -49,10 +52,20 @@ foreach (split(//,$pword)) {if ((ord($_) exit 3 if $pbad; # --------------------------------------------------------- Call system command -open OUT,"|passwd --stdin $safe >/dev/null"; -print OUT $pword; -print OUT "\n"; -close OUT; +my $distro; +if (open(PIPE,"perl distprobe|")) { + $distro = ; + close(PIPE); +} +if ($distro =~ /^ubuntu|debian/) { + open(OUT,"|/usr/sbin/usermod -p `mkpasswd $pword` $safe"); + close(OUT); +} else { + open(OUT,"|passwd --stdin $safe >/dev/null"); + print OUT $pword; + print OUT "\n"; + close(OUT); +} # --------------------------------------- exit with status of command execution exit $?/256;