]> git.proxmox.com Git - pmg-api.git/commitdiff
cluster: refactor ssh pubkey verification
authorStoiko Ivanov <s.ivanov@proxmox.com>
Wed, 14 Jul 2021 14:44:29 +0000 (16:44 +0200)
committerThomas Lamprecht <t.lamprecht@proxmox.com>
Wed, 14 Jul 2021 15:48:27 +0000 (17:48 +0200)
to only have the regex in one place.

Signed-off-by: Stoiko Ivanov <s.ivanov@proxmox.com>
src/PMG/Cluster.pm
src/PMG/ClusterConfig.pm

index 131b41fcf71ed3b144415ff8fcf7a93256f6bcb1..127d597d2585642e80a3a6db1b0b42f0b1664a16 100644 (file)
@@ -94,8 +94,9 @@ sub read_local_cluster_info {
     $hostrsapubkey =~ s/^.*ssh-rsa\s+//i;
     $hostrsapubkey =~ s/\s+root\@\S+\s*$//i;
 
+    my $sshpubkeypattern = PMG::ClusterConfig::Node::valid_ssh_pubkey();
     die "unable to parse ${hostrsapubkey_fn}\n"
-       if $hostrsapubkey !~ m/^[A-Za-z0-9\.\/\+]{200,}$/;
+       if $hostrsapubkey !~ m/$sshpubkeypattern/;
 
     my $nodename = PVE::INotify::nodename();
 
@@ -117,7 +118,7 @@ sub read_local_cluster_info {
     $rootrsapubkey =~ s/\s+root\@\S+\s*$//i;
 
     die "unable to parse ${rootrsapubkey_fn}\n"
-       if $rootrsapubkey !~ m/^[A-Za-z0-9\.\/\+]{200,}$/;
+       if $rootrsapubkey !~ m/$sshpubkeypattern/;
 
     $res->{rootrsapubkey} = $rootrsapubkey;
 
index 166e927cbbea9b5d78ac8bf03b71f9388e29ff64..b615a6c0e325b2c717704d922ac1a5ee6d288376 100644 (file)
@@ -45,6 +45,10 @@ use warnings;
 
 use base qw(PMG::ClusterConfig::Base);
 
+sub valid_ssh_pubkey {
+    return'^[A-Za-z0-9\.\/\+]{200,}$';
+}
+
 sub type {
     return 'node';
 }
@@ -61,12 +65,12 @@ sub properties {
        hostrsapubkey => {
            description => "Public SSH RSA key for the host.",
            type => 'string',
-           pattern => '^[A-Za-z0-9\.\/\+]{200,}$',
+           pattern => valid_ssh_pubkey(),
        },
        rootrsapubkey => {
            description => "Public SSH RSA key for the root user.",
            type => 'string',
-           pattern => '^[A-Za-z0-9\.\/\+]{200,}$',
+           pattern => valid_ssh_pubkey(),
        },
        fingerprint => {
            description => "SSL certificate fingerprint.",