Package: debmirror
Version: 1:2.14
Severity: wishlist
Tags: patch
Hi!
Add the https method for situation that repository use only https.
As options, it has disable option for ssl verification on cases that
web server use self-signed certificate.
debmirror --method https {--self-signed} ...
In attachment is two patch files. One base the last version release
(2.14) and another base master branch.
Regards,
-- System Information:
Debian Release: 7.0
APT prefers unstable
APT policy: (500, 'unstable'), (500, 'testing'), (500, 'stable'), (1,
'experimental')
Architecture: amd64 (x86_64)
Foreign Architectures: i386
Kernel: Linux 3.2.0-4-amd64 (SMP w/4 CPU cores)
Locale: LANG=pt_BR.UTF-8, LC_CTYPE=pt_BR.UTF-8 (charmap=UTF-8)
Shell: /bin/sh linked to /bin/dash
Versions of packages debmirror depends on:
ii bzip2 1.0.6-4
pn libdigest-md5-perl <none>
ii liblockfile-simple-perl 0.208-1
ii libnet-inet6glue-perl 0.5-1
ii libwww-perl 6.04-1
ii perl [libdigest-sha-perl] 5.14.2-16
ii perl-modules [libnet-perl] 5.14.2-16
ii rsync 3.0.9-4
Versions of packages debmirror recommends:
ii ed 1.6-2
ii gpgv 1.4.12-7
ii patch 2.6.1-3
Versions of packages debmirror suggests:
ii gnupg 1.4.12-7
-- no debconf information
diff --git a/debmirror b/debmirror
index 9126548..8007749 100755
--- a/debmirror
+++ b/debmirror
@@ -103,7 +103,7 @@ directory has a F<dists> subdirectory.
=item B<--method>=I<method>
Specify the method to download files. Currently, supported methods are
-B<ftp>, B<http>, and B<rsync>.
+B<ftp>, B<http>, B<https>, and B<rsync>.
=item B<--passive>
@@ -429,6 +429,11 @@ but B<debmirror>
will automatically create a new symlink S<suite -E<gt> codename> (immediately
after moving meta files in place). This conversion should only be needed once.
+=item B<--self-signed>=I<number>
+
+By default debmirror checks if the certificate (https) is self-signed
+or not. If host certificate is self-signed, you have disable the verification ("0").
+
=item B<--debmarshal>
On each pull, keep the repository meta data from dists/* in a numbered
@@ -878,6 +883,17 @@ sub init_connection {
return;
};
+ /^https$/ && do {
+ $ua = LWP::UserAgent->new(keep_alive => 1, ssl_opts => {
+ verify_hostname => $self_signed });
+ $ua->timeout($timeout);
+ $ua->proxy('https', $ENV{http_proxy}) if $ENV{https_proxy};
+ $ua->proxy('https', $proxy) if $proxy;
+ $ua->show_progress($progress);
+ return;
+ };
+
+
/^ftp$/ && do {
if ($proxy || $ENV{ftp_proxy}) {
$ua = LWP::UserAgent->new;
@@ -1292,7 +1308,8 @@ say("Files to download: ".print_dl_size($bytes_to_get - $bytes_gotten));
batch_get();
sub batch_get {
- if ($download_method eq 'ftp' || $download_method eq 'http') {
+ if ($download_method eq 'ftp' || $download_method eq 'http' ||
+ $download_method eq 'https') {
my $dirname;
my $i=0;
foreach my $file (sort keys %files) {
@@ -1651,8 +1668,9 @@ sub remote_get {
$tdir=$tempdir unless $tdir;
chdir($tdir) or die "unable to chdir($tdir): $!\n";
- if ($download_method eq 'ftp' || $download_method eq 'http') {
- $res=$ftp ? ftp_get($file) : http_get($file);
+ if ($download_method eq 'ftp' || $download_method eq 'http' ||
+ $download_method eq 'https') {
+ $res=$ftp ? ftp_get($file) : http_get($file);
$res=$res && check_lists($file);
if (-f $file && !$res) {
say("$file failed checksum verification, removing");
diff --git a/doc/design.txt b/doc/design.txt
index 9e8875f..68b6b45 100644
--- a/doc/design.txt
+++ b/doc/design.txt
@@ -68,6 +68,7 @@ Source:
- ftp
- hftp (ftp via http://user:pass@proxy:port/)
- http
+ - https
- rsync
- wget (wget-ftp)
- print (output what should be done)
--- debmirror-2.14/debmirror 2012-06-26 20:28:46.000000000 -0300
+++ debmirror_https/debmirror 2013-01-08 04:20:25.378316228 -0200
@@ -103,7 +103,7 @@
=item B<--method>=I<method>
Specify the method to download files. Currently, supported methods are
-B<ftp>, B<http>, and B<rsync>.
+B<ftp>, B<http>, B<https>, and B<rsync>.
=item B<--passive>
@@ -402,6 +402,11 @@
will automatically create a new symlink S<suite -E<gt> codename> (immediately
after moving meta files in place). This conversion should only be needed once.
+=item B<--self-signed>=I<number>
+
+By default debmirror checks if the certificate (https) is self-signed
+or not. If host certificate is self-signed, you have disable the verification ("0").
+
=item B<--debmarshal>
On each pull, keep the repository meta data from dists/* in a numbered
@@ -581,6 +586,7 @@
our $allow_dist_rename=0;
our $debmarshal=0;
our $slow_cpu=0;
+ our $self_signed=1;
our $check_gpg=1;
our $new_mirror=0;
my @errlog;
@@ -692,6 +698,7 @@
'allow-dist-rename' => \$allow_dist_rename,
'debmarshal' => \$debmarshal,
'slow-cpu' => \$slow_cpu,
+ 'self-signed' => \$self_signed,
'help' => \$help,
) or usage;
usage if $help;
@@ -844,6 +851,16 @@
return;
};
+ /^https$/ && do {
+ $ua = LWP::UserAgent->new(keep_alive => 1, ssl_opts => {
+ verify_hostname => $self_signed });
+ $ua->timeout($timeout);
+ $ua->proxy('https', $ENV{http_proxy}) if $ENV{https_proxy};
+ $ua->proxy('https', $proxy) if $proxy;
+ $ua->show_progress($progress);
+ return;
+ };
+
/^ftp$/ && do {
if ($proxy || $ENV{ftp_proxy}) {
$ua = LWP::UserAgent->new;
@@ -1238,7 +1255,8 @@
batch_get();
sub batch_get {
- if ($download_method eq 'ftp' || $download_method eq 'http') {
+ if ($download_method eq 'ftp' || $download_method eq 'http' ||
+ $download_method eq 'https') {
my $dirname;
my $i=0;
foreach my $file (sort keys %files) {
@@ -1577,7 +1595,8 @@
$tdir=$tempdir unless $tdir;
chdir($tdir) or die "unable to chdir($tdir): $!\n";
- if ($download_method eq 'ftp' || $download_method eq 'http') {
+ if ($download_method eq 'ftp' || $download_method eq 'http' ||
+ $download_method eq 'https') {
$res=$ftp ? ftp_get($file) : http_get($file);
$res=$res && check_lists($file);
if (-f $file && !$res) {