Archived
1
0
This repository has been archived on 2021-10-08. You can view files and clone it, but cannot push or open issues or pull requests.
ACU/process/ldap/check_ssh_key.pl

70 lines
1.5 KiB
Perl
Raw Normal View History

2013-09-03 13:10:42 +00:00
#! /usr/bin/env perl
use v5.10.1;
use strict;
use warnings;
use File::Temp qw/ tempfile /;
use Pod::Usage;
BEGIN {
push @INC, "../../";
}
use ACU::Process;
use ACU::API::Base;
2013-09-04 00:56:29 +00:00
use ACU::Log;
2013-09-03 13:10:42 +00:00
2013-09-04 00:56:29 +00:00
sub check_key($)
2013-09-03 13:10:42 +00:00
{
2013-09-06 03:24:42 +00:00
my $filename = shift;
2013-09-03 13:10:42 +00:00
# Call ssh-keygen
2013-09-06 03:24:42 +00:00
if (`ssh-keygen -l -f $filename 2> /dev/null` =~ /^([0-9]+) [0-9a-f:]+ [a-zA-Z0-9\/_-]+ \(([A-Z]+)\)$/)
2013-09-03 13:10:42 +00:00
{
2013-09-06 03:24:42 +00:00
log INFO, "Receive valid key: type $2, size $1";
2013-09-03 13:10:42 +00:00
if ($2 eq "RSA") {
if ($1 >= 4096) {
return API::Base::make_response("0", "Clef RSA valide.");
}
else {
return API::Base::make_response("2", "Clef RSA trop petite, utilisez ssh-keygen -t rsa -b 4096.");
}
}
elsif ($2 eq "ECDSA") {
return API::Base::make_response("0", "Clef ECDSA valide.");
}
elsif ($2 eq "DSA") {
return API::Base::make_response("3", "Veuillez utiliser ssh-keygen -t rsa ou ssh-keygen -t ecdsa");
}
2013-09-04 00:56:29 +00:00
else {
2013-09-06 03:24:42 +00:00
do_warn("Unknown type: $2");
2013-09-04 00:56:29 +00:00
return API::Base::make_response("3", "Veuillez utiliser ssh-keygen -t rsa ou ssh-keygen -t ecdsa");
}
2013-09-03 13:10:42 +00:00
}
else {
return API::Base::make_response("4", "Veuillez utiliser ssh-keygen -t rsa ou ssh-keygen -t ecdsa");
}
2013-09-04 00:56:29 +00:00
}
2013-09-03 13:10:42 +00:00
2013-09-04 00:56:29 +00:00
sub process
{
my ($given_args, $args) = @_;
my ($fh, $filename) = tempfile();
# Write key to file
print $fh $args->{param}{key};
2013-09-03 13:10:42 +00:00
close $fh;
2013-09-04 00:56:29 +00:00
2013-09-06 03:24:42 +00:00
my $msg = check_key $filename;
2013-09-04 00:56:29 +00:00
2013-09-03 13:10:42 +00:00
unlink $filename;
2013-09-06 03:24:42 +00:00
return $msg;
2013-09-03 13:10:42 +00:00
}
2013-09-04 00:56:29 +00:00
if (@ARGV) {
2013-09-06 03:24:42 +00:00
check_key shift;
2013-09-04 00:56:29 +00:00
}
else {
Process::register("check_ssh_key", \&process);
}