Annotation of loncom/pwchange, revision 1.4

1.1       harris41    1: #!/usr/bin/perl
                      2: 
1.4     ! harris41    3: # The Learning Online Network with CAPA
1.2       harris41    4: #
                      5: # pwchange - setuid script to change unix passwords
                      6: #
                      7: # YEAR=2001
                      8: # 10/23,11/13,11/15 Scott Harrison
                      9: #
1.4     ! harris41   10: # $Id: pwchange,v 1.3 2001/11/15 18:15:06 harris41 Exp $
1.2       harris41   11: ###
                     12: 
1.1       harris41   13: use strict;
1.2       harris41   14: 
                     15: # ------------------------------------------------------------------ Untainting
1.1       harris41   16: $ENV{'PATH'}='/bin:/usr/bin'; # Nullify path information.
1.2       harris41   17: delete @ENV{qw(IFS CDPATH ENV BASH_ENV)}; # nullify potential taints
1.1       harris41   18: 
1.2       harris41   19: # ----------------------------- Make sure this process is running from user=www
                     20: my $wwwid=getpwnam('www');
                     21: if ($wwwid!=$<) {
                     22:    exit 1;
                     23: }
                     24: # ----------------------------------------------- If not running setuid as root
1.1       harris41   25: if ($>!=0) {
                     26:     exit 1;
                     27: }
                     28: 
1.2       harris41   29: # ----------------------------------------------- Make sure arguments are valid
1.1       harris41   30: my $user=shift @ARGV;
                     31: $user=~/^(\w+)$/;
                     32: my $safe=$1;
                     33: my $pword=<>;
                     34: chomp $pword;
                     35: unless (length($safe) and ($user eq $safe) and ($safe=~/^[A-Za-z]/)) {
                     36:     exit 2;
                     37: }
                     38: 
                     39: my $pbad=0;
                     40: map {if (($_<32)&&($_>126)){$pbad=1;}} (split(//,$pword));
                     41: exit 3 if $pbad;
                     42: 
1.2       harris41   43: # --------------------------------------------------------- Call system command
1.1       harris41   44: open OUT,"|passwd --stdin $safe >/dev/null";
                     45: print OUT $pword;
                     46: print OUT "\n";
                     47: close OUT;
                     48: 
1.2       harris41   49: # --------------------------------------- exit with status of command execution
1.1       harris41   50: exit $?/256;
1.2       harris41   51: 
                     52: =head1 NAME
                     53: 
                     54: pwchange - setuid script to change unix passwords
                     55: 
                     56: =head1 DESCRIPTION
                     57: 
                     58: Setuid script to change unix passwords.
                     59: 
                     60: =head1 README
                     61: 
                     62: Setuid script to change unix passwords.
                     63: 
                     64: =head1 PREREQUISITES
                     65: 
                     66: =head1 COREQUISITES
                     67: 
                     68: =pod OSNAMES
                     69: 
                     70: linux
                     71: 
                     72: =pod SCRIPT CATEGORIES
                     73: 
                     74: LONCAPA/Administrative
                     75: 
                     76: =cut

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>