Ignore:
Timestamp:
04/03/15 18:36:34 (9 years ago)
Author:
nanardon
Message:

Improve la-sql-crypt-passwd:

  • don't set the password, only the RSA encrypted one
  • ask password two time before setting new key
  • add --delkey option to reset the features (but loosing password)
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/LATMOS-Accounts/bin/la-sql-crypt-passwd

    r1309 r1314  
    2424    'genkey'     => \my $genkey, 
    2525    'regen'      => \my $regen, 
     26    'delkey'     => \my $delkey, 
    2627    'set=s'      => \my $set, 
    2728    'base=s'     => \my $base, 
     
    4748Like --genkey but a new key will replace the current one if already present. 
    4849Stored password will be read and encrypted again using the new key. 
     50 
     51=item --delkey 
     52 
     53Delete the current peer key and all encrypted password stored. 
    4954 
    5055=item --base base 
     
    8186    ReadMode 0; 
    8287    print "\n"; 
     88    printf "Trying to get current stored password (%d)\n", scalar(keys %encpasswd); 
    8389    my $private_key = $labase->private_key($password) or 
    8490        die "Cannot get private key\n"; 
     
    94100            $clear_passwd{$_} = $clearp; 
    95101        } else { 
    96             die "Cannot get password for $_, crypt module said :" . $rsa->errstr(); 
     102            die "Cannot get password for $_, crypt module said :" . $rsa->errstr() . 
     103                "Was the password correct ?\n"; 
    97104        } 
    98105    } 
     
    129136 
    130137    my $clearpasswd = get_clear_password(); 
    131     ReadMode('noecho'); 
    132     print "Enter password for new key: "; 
    133     my $password = ReadLine(0); 
    134     ReadMode 0; 
    135     print "\n"; 
     138 
     139    my $password; 
     140    while (1) { 
     141        ReadMode('noecho'); 
     142        print "Enter password for new key: "; 
     143        $password = ReadLine(0); 
     144        print "\n"; 
     145        print "Enter password again for new key: "; 
     146        my $password2 = ReadLine(0); 
     147        ReadMode 0; 
     148        print "\n"; 
     149        if ($password eq $password2) { 
     150            last; 
     151        } else { 
     152            print "Password mismatch, try again:\n"; 
     153        } 
     154    } 
     155 
     156    print "Generating new RSA key...\n"; 
    136157    my ($public, $private) = $labase->generate_rsa_key($password); 
    137158 
     
    139160    foreach (keys %$clearpasswd) { 
    140161        my $obj = $labase->get_object('user', $_); 
    141         $obj->set_password($clearpasswd->{$_}); 
     162        $obj->setCryptPassword($clearpasswd->{$_}); 
    142163    } 
     164    $labase->commit; 
     165} elsif ($delkey) { 
     166    if (! $labase->get_global_value('rsa_public_key')) { 
     167        die "There is no key in this base, not deleting nothing\n"; 
     168    } 
     169    my %encpasswd = $labase->get_rsa_password; 
     170    print "Deleting password...\n"; 
     171    foreach my $user (keys %encpasswd) { 
     172        my $ouser = $labase->get_object('user', $user) or next; 
     173        $ouser->set_c_fields('encryptedPassword' => undef) or 
     174            die "Cannot delete encryptedPassword attribute for $user\n"; 
     175    } 
     176    $labase->set_global_value('rsa_public_key', undef); 
     177    $labase->set_global_value('rsa_private_key', undef); 
    143178    $labase->commit; 
    144179} else { 
Note: See TracChangeset for help on using the changeset viewer.