|
Packit |
8f70b4 |
#!/usr/bin/perl
|
|
Packit |
8f70b4 |
# Copyright (c) 2001,2005,2007,2010 Alexander V. Lukyanov <lav@yars.free.net>
|
|
Packit |
8f70b4 |
# See COPYING file (GNU GPL) for complete license.
|
|
Packit |
8f70b4 |
|
|
Packit |
8f70b4 |
# This script converts mozilla-style cookies to lftp set commands.
|
|
Packit |
8f70b4 |
|
|
Packit |
8f70b4 |
use strict;
|
|
Packit |
8f70b4 |
use DBI;
|
|
Packit |
8f70b4 |
|
|
Packit |
8f70b4 |
my $file=$ARGV[0] if defined $ARGV[0];
|
|
Packit |
8f70b4 |
$file=qx{
|
|
Packit |
8f70b4 |
ls -t \$HOME/.netscape/cookies \\
|
|
Packit |
8f70b4 |
`find \$HOME/.mozilla -name cookies.txt -or -name cookies.sqlite` | head -1
|
|
Packit |
8f70b4 |
},chomp $file if !defined $file;
|
|
Packit |
8f70b4 |
|
|
Packit |
8f70b4 |
print "# converted from $file\n";
|
|
Packit |
8f70b4 |
my %cookie;
|
|
Packit |
8f70b4 |
sub add_cookie($$$$$) {
|
|
Packit |
8f70b4 |
my ($domain,$path,$secure_bool,$name,$value)=@_;
|
|
Packit |
8f70b4 |
for($domain,$path,$name,$value) { s/"/\\"/g; s/'/\\'/g; s/ /%20/g; }
|
|
Packit |
8f70b4 |
my $secure='';
|
|
Packit |
8f70b4 |
$secure=';secure' if $secure_bool eq 'TRUE' || $secure_bool eq '1';
|
|
Packit |
8f70b4 |
$domain="*$domain" if $domain =~ /^\./;
|
|
Packit |
8f70b4 |
$path='' if $path eq '/';
|
|
Packit |
8f70b4 |
$path=";path=$path" if $path ne '';
|
|
Packit |
8f70b4 |
$value="=$value" if $name ne '';
|
|
Packit |
8f70b4 |
$cookie{"$domain$path$secure"}.=" $name$value";
|
|
Packit |
8f70b4 |
}
|
|
Packit |
8f70b4 |
if($file=~/\.sqlite$/) {
|
|
Packit |
8f70b4 |
my $file1="$file.$$.tmp";
|
|
Packit |
8f70b4 |
$SIG{__DIE__}=sub { unlink $file1 };
|
|
Packit |
8f70b4 |
system('cp',$file,$file1);
|
|
Packit |
8f70b4 |
my $dbh=DBI->connect("dbi:SQLite:dbname=$file1",'','');
|
|
Packit |
8f70b4 |
unlink $file1;
|
|
Packit |
8f70b4 |
my $q=$dbh->prepare("select host,path,isSecure,name,value from moz_cookies");
|
|
Packit |
8f70b4 |
$q->execute;
|
|
Packit |
8f70b4 |
$q->bind_columns(\my($domain,$path,$secure_bool,$name,$value));
|
|
Packit |
8f70b4 |
while($q->fetch) {
|
|
Packit |
8f70b4 |
add_cookie($domain,$path,$secure_bool,$name,$value);
|
|
Packit |
8f70b4 |
}
|
|
Packit |
8f70b4 |
} else {
|
|
Packit |
8f70b4 |
open COOKIES,'<',$file or die "open($file): $!";
|
|
Packit |
8f70b4 |
while(<COOKIES>)
|
|
Packit |
8f70b4 |
{
|
|
Packit |
8f70b4 |
chomp;
|
|
Packit |
8f70b4 |
next if /^#/ or /^$/;
|
|
Packit |
8f70b4 |
my ($domain,undef,$path,$secure_bool,$expires,$name,$value)=split /\t/;
|
|
Packit |
8f70b4 |
add_cookie($domain,$path,$secure_bool,$name,$value);
|
|
Packit |
8f70b4 |
}
|
|
Packit |
8f70b4 |
}
|
|
Packit |
8f70b4 |
foreach(sort keys %cookie)
|
|
Packit |
8f70b4 |
{
|
|
Packit |
8f70b4 |
$cookie{$_}=~s/^ //;
|
|
Packit |
8f70b4 |
my $c=($_=~/;/?qq{"$_"}:$_);
|
|
Packit |
8f70b4 |
print qq{set http:cookie/$c "$cookie{$_}"\n};
|
|
Packit |
8f70b4 |
}
|