87e5e6843e22e6def3df5c302be2a327ef5571cc
[freeside.git] / fs_selfservice / FS-SelfService / cgi / passwd.cgi
1 #!/usr/bin/perl -T
2 #!/usr/bin/perl -Tw
3
4 use strict;
5 use Getopt::Std;
6 use FS::SelfService qw(passwd);
7 use CGI;
8 use CGI::Carp qw(fatalsToBrowser);
9
10 my $freeside_uid = scalar(getpwnam('freeside'));
11
12 $ENV{'PATH'} ='/usr/local/bin:/usr/bin:/usr/ucb:/bin';
13 $ENV{'SHELL'} = '/bin/sh';
14 $ENV{'IFS'} = " \t\n";
15 $ENV{'CDPATH'} = '';
16 $ENV{'ENV'} = '';
17 $ENV{'BASH_ENV'} = '';
18
19 die "passwd.cgi isn't running as freeside user\n" if $> != $freeside_uid;
20
21 my $cgi = new CGI;
22
23 $cgi->param('username') =~ /^([^\n]{0,255}$)/ or die "Illegal username";
24 my $me = $1;
25
26 $cgi->param('domain') =~ /^([^\n]{0,255}$)/ or die "Illegal domain";
27 my $domain = $1;
28
29 $cgi->param('old_password') =~ /^([^\n]{0,255}$)/ or die "Illegal old_password";
30 my $old_password = $1;
31
32 $cgi->param('new_password') =~ /^([^\n]{0,255}$)/ or die "Illegal new_password";
33 my $new_password = $1;
34
35 die "New passwords don't match"
36   unless $new_password eq $cgi->param('new_password2');
37
38 my $rv = passwd(
39   'username'     => $me,
40   'domain'       => $domain,
41   'old_password' => $old_password,
42   'new_password' => $new_password,
43 );
44
45 my $error = $rv->{error};
46
47 if ($error) {
48   die $error;
49 } else {
50   print $cgi->header(), <<END;
51 <html>
52   <head>
53     <title>Password changed</title>
54   </head>
55   <body bgcolor="#e8e8e8">
56     <h3>Password changed</h3>
57 <br>Your password has been changed.
58   </body>
59 </html>
60 END
61 }