#!/usr/bin/perl -w use strict; use Apache::Htpasswd; my $htpasswd = "/etc/htsec/motion.ht"; my $method = new Apache::Htpasswd($htpasswd); my %formdata; my @pairs; my $buffer; my $pair; my @getpairs; my $key; my $value; &parseform(); if ($formdata{username}) { $method->htpasswd($formdata{username}, $formdata{newpw}, $formdata{oldpw}); } print < Password Administration
Username: 
Password: 
New Password: 

HTML sub parseform { if ($ENV{'REQUEST_METHOD'} eq 'GET') { @pairs = split(/&/, $ENV{'QUERY_STRING'}); } elsif ($ENV{'REQUEST_METHOD'} eq 'POST') { read (STDIN, $buffer, $ENV{'CONTENT_LENGTH'}); @pairs = split(/&/, $buffer); if ($ENV{'QUERY_STRING'}) { @getpairs =split(/&/, $ENV{'QUERY_STRING'}); push(@pairs,@getpairs); } } else { print "Content-type: text/html\n\n"; print "

Use Post or Get"; } foreach $pair (@pairs) { ($key, $value) = split (/=/, $pair); $key =~ tr/+/ /; $key =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; $value =~ tr/+/ /; $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; $value =~ s///g; if ($formdata{$key}) { $formdata{$key} .= ", $value"; } else { $formdata{$key} = $value; } } }