1#!/usr/local/bin/perl 2# Update a private key 3 4require './ssh-lib.pl'; 5&ReadParseMime(); 6&error_setup($text{'ekey_err'}); 7@keys = &list_ssh_keys(); 8($key) = grep { $_->{'private_file'} eq $in{'file'} } @keys; 9$key || &error($text{'ekey_egone'}); 10 11# Validate inputs 12$in{'private'} =~ /\S/ || &error($text{'ekey_eprivate'}); 13 14# Write out the file 15&open_tempfile(PRIVATE, ">$key->{'private_file'}"); 16&print_tempfile(PRIVATE, $in{'private'}); 17&close_tempfile(PRIVATE); 18 19# Re-generate public key 20$cmd = "ssh-keygen -y -f ".quotemeta($key->{'private_file'}); 21$out = &backquote_command("$cmd </dev/null 2>&1"); 22if ($out =~ /((\d+)\s+(\d+)\s+(\d+))$/) { 23 $public = $1; 24 } 25elsif ($out =~ /((\S+)\s+([A-Za-z0-9\/=\+]+))$/) { 26 $public = $1; 27 } 28else { 29 &error($text{'ekey_epublic'}); 30 } 31&open_tempfile(PRIVATE, ">$key->{'public_file'}"); 32&print_tempfile(PRIVATE, $public); 33&close_tempfile(PRIVATE); 34 35&redirect("list_keys.cgi"); 36