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