1 package FS::ClientAPI::passwd;
4 use FS::Record qw(qsearchs);
8 use FS::ClientAPI; #hmm
9 FS::ClientAPI->register_handlers(
10 'passwd/passwd' => \&passwd,
11 'passwd/chfn' => \&chfn,
12 'passwd/chsh' => \&chsh,
18 #my $domain = qsearchs('svc_domain', { 'domain' => $packet->{'domain'} } )
19 # or return { error => "Domain $domain not found" };
21 my $old_password = $packet->{'old_password'};
22 my $new_password = $packet->{'new_password'};
23 my $new_gecos = $packet->{'new_gecos'};
24 my $new_shell = $packet->{'new_shell'};
26 #false laziness w/FS::ClientAPI::MyAccount::login (needs to handle encrypted pw)
28 ( length($old_password) < 13
29 && qsearchs( 'svc_acct', { 'username' => $packet->{'username'},
30 #'domsvc' => $svc_domain->svcnum,
31 '_password' => $old_password } )
33 || qsearchs( 'svc_acct', { 'username' => $packet->{'username'},
34 #'domsvc' => $svc_domain->svcnum,
35 '_password' => $old_password } );
37 unless ( $svc_acct ) { return { error => 'Incorrect password.' } }
39 my %hash = $svc_acct->hash;
40 my $new_svc_acct = new FS::svc_acct ( \%hash );
41 $new_svc_acct->setfield('_password', $new_password )
42 if $new_password && $new_password ne $old_password;
43 $new_svc_acct->setfield('finger',$new_gecos) if $new_gecos;
44 $new_svc_acct->setfield('shell',$new_shell) if $new_shell;
45 my $error = $new_svc_acct->replace($svc_acct);
47 return { error => $error };