]> Raphaël G. Git Repositories - acme/blobdiff - letscron
Fix config generation
[acme] / letscron
index b566baed5541c05608217fa909add448644418da..9a9635503422d0efa381415f2e9f7c5a09f35281 100755 (executable)
--- a/letscron
+++ b/letscron
@@ -1,5 +1,20 @@
 #! /usr/bin/perl
 
 #! /usr/bin/perl
 
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+#
+# Copyright (C) 2016 - 2017 Raphaël Gertz <acmepl@rapsys.eu>
+
 # Best practice
 use strict;
 use warnings;
 # Best practice
 use strict;
 use warnings;
@@ -8,14 +23,15 @@ use warnings;
 use filetest 'access';
 
 # Load dependancies
 use filetest 'access';
 
 # Load dependancies
-use Carp qw(carp);
+use Carp qw(carp confess);
 use DateTime;
 use DateTime;
+use File::Path qw(make_path);
 use File::stat qw(stat);
 use File::Spec;
 use File::Slurp qw(read_file write_file);
 use JSON qw(decode_json);
 use IPC::System::Simple qw(capturex $EXITVAL);
 use File::stat qw(stat);
 use File::Spec;
 use File::Slurp qw(read_file write_file);
 use JSON qw(decode_json);
 use IPC::System::Simple qw(capturex $EXITVAL);
-use acme qw(CERT_DIR CONFIG DS KEY_DIR SERVER_CRT SERVER_KEY);
+use Acme qw(CERT_DIR CONFIG DS KEY_DIR SERVER_CRT SERVER_KEY);
 
 # Load POSIX
 use POSIX qw(strftime EXIT_SUCCESS EXIT_FAILURE);
 
 # Load POSIX
 use POSIX qw(strftime EXIT_SUCCESS EXIT_FAILURE);
@@ -53,7 +69,7 @@ unless (
                ! scalar map {unless(defined($_->{cert}) && defined($_->{key}) && defined($_->{mail}) && defined($_->{domain}) && defined($_->{domains})) {1;} else {();}} @{$config->{certificates}}
        }
 ) {
                ! scalar map {unless(defined($_->{cert}) && defined($_->{key}) && defined($_->{mail}) && defined($_->{domain}) && defined($_->{domains})) {1;} else {();}} @{$config->{certificates}}
        }
 ) {
-       print 'Config file '.CONFIG.' is invalid'."\n";
+       print 'Config file '.CONFIG.' is not readable or invalid'."\n";
        exit EXIT_FAILURE;
 }
 
        exit EXIT_FAILURE;
 }
 
@@ -76,6 +92,19 @@ foreach (@{$config->{certificates}}) {
                next;
        }
 
                next;
        }
 
+       # Check that key directory exists
+       if (! -d KEY_DIR) {
+               # Create all paths
+               make_path(KEY_DIR, {error => \my $err});
+               if (@$err) {
+                       map {
+                               my ($file, $msg) = %$_;
+                               carp ($file eq '' ? '' : $file.': ').$msg if ($debug);
+                       } @$err;
+                       confess 'make_path failed';
+               }
+       }
+
        # Unlink if is a symlink
        if (-l KEY_DIR.DS.SERVER_KEY) {
                unless(unlink(KEY_DIR.DS.SERVER_KEY)) {
        # Unlink if is a symlink
        if (-l KEY_DIR.DS.SERVER_KEY) {
                unless(unlink(KEY_DIR.DS.SERVER_KEY)) {
@@ -107,7 +136,7 @@ foreach (@{$config->{certificates}}) {
        }
 
        # Run letscert with args
        }
 
        # Run letscert with args
-       my @out = capturex([0..1], './letscert', @args);
+       my @out = capturex([0..1], 'letscert', @args);
 
        # Deal with error
        if ($EXITVAL != 0) {
 
        # Deal with error
        if ($EXITVAL != 0) {
@@ -142,4 +171,5 @@ foreach (@{$config->{certificates}}) {
        }
 }
 
        }
 }
 
+# Exit with success
 exit EXIT_SUCCESS;
 exit EXIT_SUCCESS;