X-Git-Url: https://git.rapsys.eu/acme/blobdiff_plain/68e188492b955d3740c4ac897999bb50382480df..d9077b1e3155078c7819629176f65a7720fa1cb6:/letscron diff --git a/letscron b/letscron index b566bae..9a96355 100755 --- a/letscron +++ b/letscron @@ -1,5 +1,20 @@ #! /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 . +# +# Copyright (C) 2016 - 2017 Raphaël Gertz + # Best practice use strict; use warnings; @@ -8,14 +23,15 @@ use warnings; use filetest 'access'; # Load dependancies -use Carp qw(carp); +use Carp qw(carp confess); 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 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); @@ -53,7 +69,7 @@ unless ( ! 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; } @@ -76,6 +92,19 @@ foreach (@{$config->{certificates}}) { 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)) { @@ -107,7 +136,7 @@ foreach (@{$config->{certificates}}) { } # Run letscert with args - my @out = capturex([0..1], './letscert', @args); + my @out = capturex([0..1], 'letscert', @args); # Deal with error if ($EXITVAL != 0) { @@ -142,4 +171,5 @@ foreach (@{$config->{certificates}}) { } } +# Exit with success exit EXIT_SUCCESS;