# IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # bos72D src/bos/usr/sbin/install/ecc/lib/ECC/ProxyPwdManager.pm 1.3.1.2 # # Licensed Materials - Property of IBM # # Restricted Materials of IBM # # COPYRIGHT International Business Machines Corp. 2006,2015 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG package ProxyPwdManager; use strict; use warnings; use Exporter; use lib '/usr/ecc/lib/ECC'; use Definitions; use Utils; use vars qw(@ISA @EXPORT); @ISA = ('Exporter'); @EXPORT = ('setPassword'); # use Digest::MD5 qw(md5_base64); use MIME::Base64; sub remove_backspaces($) { my $str = shift; my $str_prev; do { $str_prev = $str; $str =~ s/(.|^)[\b]//; } while ($str ne $str_prev); return $str; } sub enter_pwd() { system "stty -echo"; my $p = ; chomp $p; system "stty echo"; print "\n"; return remove_backspaces($p); } sub digest_pwd($) { my $result = encode_base64(shift); chomp $result; return $result; } sub setPassword($) { my $username = shift; my $LOCK_EXCLUSIVE = 2; my $UNLOCK = 8; if ($username ne 'C10' && $username ne 'C20' && $username ne 'C30' && $username ne 'L1') { &Utils::showMessage(1, 17, '"\n\n0975-017 Invalid password handle. Contact your local Service Representative.\n"'); exit 1; } my $new_pwd; my $new_pwd_confirm; if (! -e Definitions::REPO_FILE_LOC) { open(repo_file, "+> @{[ Definitions::REPO_FILE_LOC ]}"); } else { open(repo_file, "+< @{[ Definitions::REPO_FILE_LOC ]}"); } flock repo_file, $LOCK_EXCLUSIVE; my %repo; while ($_ = ) { next if $_ =~ /^\s*#|^\s*$/; chomp; (my $uid, my $pwd) = split /\s*=\s*/, $_, 2; $repo{$uid} = $pwd; } &Utils::showMessage(2, 27, '"\n\nEnter proxy password: "'); $new_pwd = enter_pwd(); if ( $new_pwd eq "" ) { &Utils::showMessage(1, 22, '"0975-022 Passwords can not be empty"'); exit 1; } &Utils::showMessage(2, 28, '"Confirm password: "'); $new_pwd_confirm = enter_pwd; if ( $new_pwd ne $new_pwd_confirm ) { &Utils::showMessage(1, 18, '"0975-018 Passwords do not match."'); exit 1; } $repo{$username} = digest_pwd($new_pwd); truncate repo_file, 0; seek repo_file, 0, 0; foreach (keys %repo) { print repo_file "$_ = $repo{$_}\n"; } flock repo_file, $UNLOCK; close(repo_file); } sub setPasswordUI { my $username = $_[0]; my $new_pwd = $_[1]; my $LOCK_EXCLUSIVE = 2; my $UNLOCK = 8; if ($username ne 'C10' && $username ne 'C20' && $username ne 'C30' && $username ne 'L1') { &Utils::showMessage(1, 17, '"\n\n0975-017 Invalid password handle. Contact your local Service Representative.\n"'); exit 1; } if (! -e Definitions::REPO_FILE_LOC) { open(repo_file, "+> @{[ Definitions::REPO_FILE_LOC ]}"); } else { open(repo_file, "+< @{[ Definitions::REPO_FILE_LOC ]}"); } flock repo_file, $LOCK_EXCLUSIVE; my %repo; while ($_ = ) { next if $_ =~ /^\s*#|^\s*$/; chomp; (my $uid, my $pwd) = split /\s*=\s*/, $_, 2; $repo{$uid} = $pwd; } $repo{$username} = digest_pwd($new_pwd); truncate repo_file, 0; seek repo_file, 0, 0; foreach (keys %repo) { print repo_file "$_ = $repo{$_}\n"; } flock repo_file, $UNLOCK; close(repo_file); } sub getPassword($) { my $username = shift; open(repo_file, "< @{[ Definitions::REPO_FILE_LOC ]}"); my %repo; while ($_ = ) { next if $_ =~ /^\s*#|^\s*$/; chomp; (my $uid, my $pwd) = split /\s*=\s*/, $_, 2; $repo{$uid} = $pwd; } close(repo_file); my $ppwd = decode_base64($repo{$username}); return $ppwd; } 1;