summaryrefslogtreecommitdiff
path: root/fs_passwd
diff options
context:
space:
mode:
authorivan <ivan>2004-03-11 07:33:55 +0000
committerivan <ivan>2004-03-11 07:33:55 +0000
commitc959e1e7039535de9eed1afcdcc1adf3db9a0f9f (patch)
tree721a885e55157efacbe7c2497ce98658cc452bdf /fs_passwd
parent7fa84ef3ef04fe18608d85c8c3aa1f34fe824c6c (diff)
update fs_passwd stuff as wrappers around self-service
Diffstat (limited to 'fs_passwd')
-rwxr-xr-xfs_passwd/fs_passwd22
-rwxr-xr-xfs_passwd/fs_passwd.cgi17
-rwxr-xr-xfs_passwd/fs_passwd_server88
-rwxr-xr-xfs_passwd/fs_passwdd62
4 files changed, 20 insertions, 169 deletions
diff --git a/fs_passwd/fs_passwd b/fs_passwd/fs_passwd
index 0b467aefc..feddb462c 100755
--- a/fs_passwd/fs_passwd
+++ b/fs_passwd/fs_passwd
@@ -10,14 +10,14 @@
#
# password lengths 0,255 instead of 6,8 - we'll let the server process
# check the data ivan@sisd.com 98-jul-17
+#
+# updated for the exciting new world of self-service 2004-mar-10
use strict;
use Getopt::Std;
-use Socket;
-use IO::Handle;
+use FS::SelfService qw(passwd);
use vars qw($opt_f $opt_s);
-my($fs_passwdd_socket)="/usr/local/freeside/fs_passwdd_socket";
my($freeside_uid)=scalar(getpwnam('freeside'));
$ENV{'PATH'} ='/usr/local/bin:/usr/bin:/usr/ucb:/bin';
@@ -114,13 +114,15 @@ print "\n";
system '/bin/stty', 'echo';
-socket(SOCK, PF_UNIX, SOCK_STREAM, 0) or die "socket: $!";
-connect(SOCK, sockaddr_un($fs_passwdd_socket)) or die "connect: $!";
-print SOCK join("\n",$me,$old_password,$new_password,$new_gecos,$new_shell),"\n";
-SOCK->flush;
-my($error);
-$error = <SOCK>;
-chop $error;
+my $rv = passwd(
+ 'username' => $me,
+ 'old_password' => $old_password,
+ 'new_password' => $new_password,
+ 'new_gecos' => $new_gecos,
+ 'new_shell' => $new_shell,
+);
+
+my $error = $rv->{error};
if ($error) {
print "\nUpdate error: $error\n";
diff --git a/fs_passwd/fs_passwd.cgi b/fs_passwd/fs_passwd.cgi
index 3f676fff3..34a33c7f5 100755
--- a/fs_passwd/fs_passwd.cgi
+++ b/fs_passwd/fs_passwd.cgi
@@ -2,12 +2,10 @@
use strict;
use Getopt::Std;
-use Socket;
-use IO::Handle;
+use FS::SelfService qw(passwd);
use CGI;
use CGI::Carp qw(fatalsToBrowser);
-my $fs_passwdd_socket = "/usr/local/freeside/fs_passwdd_socket";
my $freeside_uid = scalar(getpwnam('freeside'));
$ENV{'PATH'} ='/usr/local/bin:/usr/bin:/usr/ucb:/bin';
@@ -33,12 +31,13 @@ my $new_password = $1;
die "New passwords don't match"
unless $new_password eq $cgi->param('new_password2');
-socket(SOCK, PF_UNIX, SOCK_STREAM, 0) or die "socket: $!";
-connect(SOCK, sockaddr_un($fs_passwdd_socket)) or die "connect: $!";
-print SOCK join("\n", $me, $old_password, $new_password, '', ''), "\n";
-SOCK->flush;
-my $error = <SOCK>;
-chomp $error;
+my $rv = passwd(
+ 'username' => $me,
+ 'old_password' => $old_password,
+ 'new_password' => $new_password,
+);
+
+my $error = $rv->{error};
if ($error) {
die $error;
diff --git a/fs_passwd/fs_passwd_server b/fs_passwd/fs_passwd_server
deleted file mode 100755
index a29b2c738..000000000
--- a/fs_passwd/fs_passwd_server
+++ /dev/null
@@ -1,88 +0,0 @@
-#!/usr/bin/perl -Tw
-#
-# fs_passwd_server
-#
-# portions of this script are copied from the `passwd' script in the original
-# (perl 4) camel book, now archived at
-# http://www.perl.com/CPAN/scripts/nutshell/ch6/passwd
-#
-# ivan@sisd.com 98-mar-9
-#
-# crypt-aware, s/password/_password/; ivan@sisd.com 98-aug-23
-
-use strict;
-use vars qw($pid);
-use subs qw(killssh);
-use IO::Handle;
-use Net::SSH qw(sshopen2);
-use FS::UID qw(adminsuidsetup);
-use FS::Record qw(qsearchs);
-use FS::svc_acct;
-
-my $user = shift or die &usage;
-adminsuidsetup $user;
-
-my($shellmachine)=shift or die &usage;
-
-#causing trouble for some folks
-#$SIG{CHLD} = sub { wait() };
-
-$SIG{HUP} = \&killssh;
-$SIG{INT} = \&killssh;
-$SIG{QUIT} = \&killssh;
-$SIG{TERM} = \&killssh;
-$SIG{PIPE} = \&killssh;
-
-sub killssh { kill 'TERM', $pid if $pid; exit; };
-
-my($fs_passwdd)="/usr/local/sbin/fs_passwdd";
-
-while (1) {
- my($reader,$writer)=(new IO::Handle, new IO::Handle);
- $writer->autoflush(1);
- $pid = sshopen2($shellmachine,$reader,$writer,$fs_passwdd);
- while (1) {
- my($username,$old_password,$new_password,$new_gecos,$new_shell);
- defined($username=<$reader>) or last;
- defined($old_password=<$reader>) or last;
- defined($new_password=<$reader>) or last;
- defined($new_gecos=<$reader>) or last;
- defined($new_shell=<$reader>) or last;
- chop($username);
- chop($old_password);
- chop($new_password);
- chop($new_gecos);
- chop($new_shell);
- my($svc_acct);
-
- #need to try both $old_password and encrypted $old_password
- #maybe the crypt function in svc_acct.export needs to be a library?
- my $salt = substr($old_password,0,2);
- my $cold_password = crypt($old_password,$salt);
- $svc_acct=qsearchs('svc_acct',{'username'=>$username,
- '_password'=>$old_password,
- } )
- || qsearchs('svc_acct',{'username'=>$username,
- '_password'=>$cold_password,
- } );
- unless ( $svc_acct ) { print $writer "Incorrect password.\n"; next; }
-
- my(%hash)=$svc_acct->hash;
- my($new_svc_acct) = new FS::svc_acct ( \%hash );
- $new_svc_acct->setfield('_password',$new_password)
- if $new_password && $new_password ne $old_password;
- $new_svc_acct->setfield('finger',$new_gecos) if $new_gecos;
- $new_svc_acct->setfield('shell',$new_shell) if $new_shell;
- my($error)=$new_svc_acct->replace($svc_acct);
- print $writer $error,"\n";
- }
- close $writer;
- close $reader;
- sleep 60;
- warn "Connection to $shellmachine lost! Reconnecting...\n";
-}
-
-sub usage {
- die "Usage:\n\n fs_passwd_server user shellmachine\n";
-}
-
diff --git a/fs_passwd/fs_passwdd b/fs_passwd/fs_passwdd
deleted file mode 100755
index cce98e787..000000000
--- a/fs_passwd/fs_passwdd
+++ /dev/null
@@ -1,62 +0,0 @@
-#!/usr/bin/perl -Tw
-#
-# fs_passwdd
-#
-# This is run REMOTELY over ssh by fs_passwd_server.
-#
-# ivan@sisd.com 98-mar-9
-
-use strict;
-use Socket;
-
-my $fs_passwdd_socket = "/usr/local/freeside/fs_passwdd_socket";
-my $pid_file = "$fs_passwdd_socket.pid";
-
-$ENV{'PATH'} ='/usr/local/bin:/usr/bin:/usr/ucb:/bin';
-$ENV{'SHELL'} = '/bin/sh';
-$ENV{'IFS'} = " \t\n";
-$ENV{'CDPATH'} = '';
-$ENV{'ENV'} = '';
-$ENV{'BASH_ENV'} = '';
-
-$|=1;
-
-my $uaddr = sockaddr_un($fs_passwdd_socket);
-my $proto = getprotobyname('tcp');
-
-socket(Server,PF_UNIX,SOCK_STREAM,0) or die "socket: $!";
-unlink($fs_passwdd_socket);
-bind(Server, $uaddr) or die "bind: $!";
-listen(Server,SOMAXCONN) or die "listen: $!";
-
-if ( -e $pid_file ) {
- open(PIDFILE,"<$pid_file");
- #chomp( my $old_pid = <PIDFILE> );
- my $old_pid = <PIDFILE>;
- close PIDFILE;
- $old_pid =~ /^(\d+)$/;
- kill 'TERM', $1;
-}
-open(PIDFILE,">$pid_file");
-print PIDFILE "$$\n";
-close PIDFILE;
-
-my($paddr);
-for ( ; $paddr = accept(Client,Server); close Client) {
- my($me,$old_password,$new_password,$new_gecos,$new_shell);
-
- $me=<Client>;
- $old_password=<Client>;
- $new_password=<Client>;
- $new_gecos=<Client>;
- $new_shell=<Client>;
-
- print $me,$old_password,$new_password,$new_gecos,$new_shell;
- my($error);
-
- $error=<STDIN>;
-
- print Client $error;
- close Client;
-}
-