From ca9627e70852f6b2e835660df870fe3ab405882d Mon Sep 17 00:00:00 2001 From: "Suren A. Chilingaryan" Date: Sun, 1 Sep 2019 00:00:32 +0200 Subject: Initial import --- net-ftp/bsdftpd-ssl/Manifest | 17 + net-ftp/bsdftpd-ssl/bsdftpd-ssl-1.0.2-r1.ebuild | 43 ++ net-ftp/bsdftpd-ssl/bsdftpd-ssl-1.0.2-r2.ebuild | 46 ++ net-ftp/bsdftpd-ssl/files/auth.sslftp | 43 ++ .../files/bsdftpd-ds-anonymous.patch.bz2 | Bin 0 -> 768 bytes net-ftp/bsdftpd-ssl/files/bsdftpd-ds-argmax.diff | 17 + net-ftp/bsdftpd-ssl/files/bsdftpd-ds-cmdtab.diff | 20 + net-ftp/bsdftpd-ssl/files/bsdftpd-ds-compile.patch | 89 +++ .../bsdftpd-ssl/files/bsdftpd-ds-extprog.patch.bz2 | Bin 0 -> 608 bytes net-ftp/bsdftpd-ssl/files/bsdftpd-ds-getline.diff | 45 ++ .../files/bsdftpd-ds-keypassword.patch.bz2 | Bin 0 -> 1162 bytes .../bsdftpd-ssl/files/bsdftpd-ds-pport.patch.bz2 | Bin 0 -> 1210 bytes .../bsdftpd-ssl/files/bsdftpd-ds-termcap.patch.bz2 | Bin 0 -> 322 bytes net-ftp/bsdftpd-ssl/files/bsdftpd.pam | 5 + net-ftp/bsdftpd-ssl/files/bsdftpd.sysconfig | 7 + net-ftp/bsdftpd-ssl/files/bsdftpd.sysinit | 20 + net-ftp/bsdftpd-ssl/files/x509.auth | 2 + net-ftp/gftp/Manifest | 5 + net-ftp/gftp/files/gftp-2.0.18-fix_gtk1.patch | 31 + net-ftp/gftp/files/gftp-2.0.18-ssh2-read.patch | 13 + net-ftp/gftp/files/gftp-ds-rcc.patch | 822 +++++++++++++++++++++ net-ftp/gftp/gftp-2.0.18-r5.ebuild | 54 ++ 22 files changed, 1279 insertions(+) create mode 100644 net-ftp/bsdftpd-ssl/Manifest create mode 100644 net-ftp/bsdftpd-ssl/bsdftpd-ssl-1.0.2-r1.ebuild create mode 100644 net-ftp/bsdftpd-ssl/bsdftpd-ssl-1.0.2-r2.ebuild create mode 100644 net-ftp/bsdftpd-ssl/files/auth.sslftp create mode 100644 net-ftp/bsdftpd-ssl/files/bsdftpd-ds-anonymous.patch.bz2 create mode 100644 net-ftp/bsdftpd-ssl/files/bsdftpd-ds-argmax.diff create mode 100644 net-ftp/bsdftpd-ssl/files/bsdftpd-ds-cmdtab.diff create mode 100644 net-ftp/bsdftpd-ssl/files/bsdftpd-ds-compile.patch create mode 100644 net-ftp/bsdftpd-ssl/files/bsdftpd-ds-extprog.patch.bz2 create mode 100644 net-ftp/bsdftpd-ssl/files/bsdftpd-ds-getline.diff create mode 100644 net-ftp/bsdftpd-ssl/files/bsdftpd-ds-keypassword.patch.bz2 create mode 100644 net-ftp/bsdftpd-ssl/files/bsdftpd-ds-pport.patch.bz2 create mode 100644 net-ftp/bsdftpd-ssl/files/bsdftpd-ds-termcap.patch.bz2 create mode 100644 net-ftp/bsdftpd-ssl/files/bsdftpd.pam create mode 100644 net-ftp/bsdftpd-ssl/files/bsdftpd.sysconfig create mode 100644 net-ftp/bsdftpd-ssl/files/bsdftpd.sysinit create mode 100644 net-ftp/bsdftpd-ssl/files/x509.auth create mode 100644 net-ftp/gftp/Manifest create mode 100644 net-ftp/gftp/files/gftp-2.0.18-fix_gtk1.patch create mode 100644 net-ftp/gftp/files/gftp-2.0.18-ssh2-read.patch create mode 100644 net-ftp/gftp/files/gftp-ds-rcc.patch create mode 100644 net-ftp/gftp/gftp-2.0.18-r5.ebuild (limited to 'net-ftp') diff --git a/net-ftp/bsdftpd-ssl/Manifest b/net-ftp/bsdftpd-ssl/Manifest new file mode 100644 index 0000000..3939400 --- /dev/null +++ b/net-ftp/bsdftpd-ssl/Manifest @@ -0,0 +1,17 @@ +AUX auth.sslftp 935 RMD160 15e8e26956603a309519c580ec6adb8c9e2800e6 SHA1 c70ecfc35e91044a7087afe197c9c768b06591c6 SHA256 3b96a7a0a7c37ea29e90c45af9cdc7e441c1d93389a35d04ef93afc532768240 +AUX bsdftpd-ds-anonymous.patch.bz2 768 RMD160 499d6b90daf298aebfd12f218a16e864a3f48d88 SHA1 698017cdfff99cbc9677995613295e2792da3057 SHA256 97582e327cf06202db3206193cd84f5aae12c5943ae0e862dd616fadb68aa690 +AUX bsdftpd-ds-argmax.diff 589 RMD160 5c0e201c3f5bd581a0607d6fa19a23eeea43232e SHA1 c1ea10cf3dce478b11f294656c1d8359fe750602 SHA256 40e3c8bd365c9e93c2fab39878be735e8e6f138def824a079599fc10df6f9f02 +AUX bsdftpd-ds-cmdtab.diff 516 RMD160 2c4cff8ac85025a522a0f2752868cf1a631ecae4 SHA1 ead2dc44aea879e2dbe91e11acccc400ce8f08e2 SHA256 1981c8a6c67aec61311de88f2f5d8df8cb011bdff76bb5e4bf5d2acce5ba1d08 +AUX bsdftpd-ds-compile.patch 1898 RMD160 c37a1c5ca088e2b1e7efee5f9d424235aa7c7528 SHA1 234fec93670eae8bb28fe0a6b0b542bb79cec407 SHA256 6208ebb6a27794d108ecde2e5bad70952c15de57d91cfece5e6b47a47557fba1 +AUX bsdftpd-ds-extprog.patch.bz2 608 RMD160 22e4ac807cce0af2eab8587f4deec58c0d626d37 SHA1 dcc924792afdfadb598be87e2d1282f575c58563 SHA256 f30123fb91e16b572eb5803bf61f6b1a33ea212c419b7cac3fdd04f8c1938257 +AUX bsdftpd-ds-getline.diff 1767 RMD160 d2caa5da608963ca9a08768a3a877e9a81bf782e SHA1 eed7d26e9b37a09b2b336a827fbbde4d419d0ff6 SHA256 f3e8527df1649022882d702a53efb93a83d8640ecea5474032bf69ea4eb5a1b6 +AUX bsdftpd-ds-keypassword.patch.bz2 1162 RMD160 d96d3fa4f4a8f275104500df1f007b22a22a62c6 SHA1 d61f96bb29b49991c171c578b6eecdca78a0553a SHA256 fada73af7de8d9e9e4fc93bc2f93dfa5dac731d2161f6cab0bd67a94e49e2ee1 +AUX bsdftpd-ds-pport.patch.bz2 1210 RMD160 3013d11418562efadf1d6ddad070b7bc4aabf257 SHA1 a188fd76f9faf14b748c6c3910d0c52c3a0c3e17 SHA256 8354ea675c4503fd35a2c5f26cbdcc575e1ae403e14e5879b7cddc5731a8d87d +AUX bsdftpd-ds-termcap.patch.bz2 322 RMD160 fca285e05cd2b248be40c6862df3d77169999b87 SHA1 0b819f70ad062315c9a7cc81557e058d4b7836f4 SHA256 6703ebd7f61c7bdb5686754536be0b714eb4392036f332627dfea3f4613664d2 +AUX bsdftpd.pam 224 RMD160 172202763da083bcb02c0968531c11b428253d82 SHA1 e823192291fe8212078915b26a53d5eb2cc380e2 SHA256 5688e1e4b692047002e0b014022a52b7f2836ce25e30ee92eefac574916f6afd +AUX bsdftpd.sysconfig 297 RMD160 77dd2c9d061bd6f44678988cd2269e414ff52f11 SHA1 a932ebf5b269c738975ed68e2a01a77b9d812ea5 SHA256 8c6aa6eab45035df2a4416aa1350ed838972d3f3ea253f03449aca1b59639b1c +AUX bsdftpd.sysinit 657 RMD160 849752223533cc36ca3883adcf298ac239b31ef9 SHA1 ace30d1061b4cc565a07d81e7d2c52bad90b2bbd SHA256 1dd52acaee0aef4b42559de05416634fb71bc7a240d693890fd865e008670f28 +AUX x509.auth 83 RMD160 0670566f51e7eccb1312988e9a77cef02ca939c0 SHA1 0631ce725ff90217c50dc3d900669ffd5cbf0f7a SHA256 162055fedc8f3e3e7b74da581492ac38a8f347b8ef8d94f9505e196cc15e6175 +DIST bsdftpd-ssl-1.0.2.tar.bz2 267043 RMD160 f91098b477489ff522769b31e7d14fb0c86c5d51 SHA1 1c07ac55a0340df3b11600f67e2137d80d19daa0 SHA256 82876c16defb72237a1eaa3177b45b115b2bba9abf35294b81bf8e400792396d +EBUILD bsdftpd-ssl-1.0.2-r1.ebuild 1451 RMD160 fabf1d5c73268bedb4e092a8ebcabfa73f76d582 SHA1 d90d121d484e53d65c6904bebcefd5d5921a69e2 SHA256 7ba3e1eeb7fcdb547b3e5bc2b0324300ff661cc7fa509367ba424da02f238f83 +EBUILD bsdftpd-ssl-1.0.2-r2.ebuild 1668 RMD160 51b4f84e47e106023b8291e8adda531a838ae929 SHA1 e203711795e0850264c195e63bd6aebb3c84e7ee SHA256 7e43fdf772612d1db141b5847d79965faa4c1c9c7320f91ac00be01b6d27787a diff --git a/net-ftp/bsdftpd-ssl/bsdftpd-ssl-1.0.2-r1.ebuild b/net-ftp/bsdftpd-ssl/bsdftpd-ssl-1.0.2-r1.ebuild new file mode 100644 index 0000000..6ebae69 --- /dev/null +++ b/net-ftp/bsdftpd-ssl/bsdftpd-ssl-1.0.2-r1.ebuild @@ -0,0 +1,43 @@ +# Copyright 1999-2005 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 +# $Header: + +inherit eutils + +DESCRIPTION="BSD SSL enabled FTP server" +SRC_URI="http://dside.dyndns.org/files/darklin/bsdftpd-ssl-1.0.2.tar.bz2" +SLOT="0" +LICENSE="GPL-2" +KEYWORDS="amd64 x86" +RDEPEND="sys-libs/ncurses dev-util/byacc" + +src_unpack() { + unpack ${P}.tar.bz2 + EPATCH_OPTS="-p1 -d ${P}" epatch ${FILESDIR}/bsdftpd-ds-keypassword.patch.bz2 + EPATCH_OPTS="-p1 -d ${P}" epatch ${FILESDIR}/bsdftpd-ds-extprog.patch.bz2 + EPATCH_OPTS="-p1 -d ${P}" epatch ${FILESDIR}/bsdftpd-ds-anonymous.patch.bz2 + EPATCH_OPTS="-p1 -d ${P}" epatch ${FILESDIR}/bsdftpd-ds-pport.patch.bz2 + EPATCH_OPTS="-p1 -d ${P}" epatch ${FILESDIR}/bsdftpd-ds-termcap.patch.bz2 + EPATCH_OPTS="-p1 -d ${P}" epatch ${FILESDIR}/bsdftpd-ds-compile.patch +} + +src_compile() { + ./config.sh Linux + make || die +} + +src_install() { + into /usr + mkdir -p ${D}/usr/bin/ + mkdir -p ${D}/usr/sbin + make install DESTDIR=${D} INSTALLTOP=${D}/usr + mkdir -p ${D}/etc/init.d/ + mkdir -p ${D}/etc/conf.d/ + mkdir -p ${D}/etc/pam.d/ + + install -m 0755 ${FILESDIR}/bsdftpd.sysinit ${D}/etc/init.d/bsdftpd + install -m 0644 ${FILESDIR}/bsdftpd.sysconfig ${D}/etc/conf.d/bsdftpd + install -m 0644 ${FILESDIR}/bsdftpd.pam ${D}/etc/pam.d/ftpd + install -m 0755 ${FILESDIR}/auth.sslftp ${D}/usr/bin + install -m 0644 ${FILESDIR}/x509.auth ${D}/etc +} diff --git a/net-ftp/bsdftpd-ssl/bsdftpd-ssl-1.0.2-r2.ebuild b/net-ftp/bsdftpd-ssl/bsdftpd-ssl-1.0.2-r2.ebuild new file mode 100644 index 0000000..2748a8a --- /dev/null +++ b/net-ftp/bsdftpd-ssl/bsdftpd-ssl-1.0.2-r2.ebuild @@ -0,0 +1,46 @@ +# Copyright 1999-2005 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 +# $Header: + +inherit eutils + +DESCRIPTION="BSD SSL enabled FTP server" +SRC_URI="http://dside.dyndns.org/files/darklin/bsdftpd-ssl-1.0.2.tar.bz2" +SLOT="0" +LICENSE="GPL-2" +KEYWORDS="amd64 x86" +RDEPEND="sys-libs/ncurses dev-util/byacc" + +src_unpack() { + unpack ${P}.tar.bz2 + EPATCH_OPTS="-p1 -d ${P}" epatch ${FILESDIR}/bsdftpd-ds-keypassword.patch.bz2 + EPATCH_OPTS="-p1 -d ${P}" epatch ${FILESDIR}/bsdftpd-ds-extprog.patch.bz2 + EPATCH_OPTS="-p1 -d ${P}" epatch ${FILESDIR}/bsdftpd-ds-anonymous.patch.bz2 + EPATCH_OPTS="-p1 -d ${P}" epatch ${FILESDIR}/bsdftpd-ds-pport.patch.bz2 + EPATCH_OPTS="-p1 -d ${P}" epatch ${FILESDIR}/bsdftpd-ds-termcap.patch.bz2 + EPATCH_OPTS="-p1 -d ${P}" epatch ${FILESDIR}/bsdftpd-ds-compile.patch + EPATCH_OPTS="-p1 -d ${P}" epatch ${FILESDIR}/bsdftpd-ds-argmax.diff + EPATCH_OPTS="-p1 -d ${P}" epatch ${FILESDIR}/bsdftpd-ds-cmdtab.diff + EPATCH_OPTS="-p1 -d ${P}" epatch ${FILESDIR}/bsdftpd-ds-getline.diff +} + +src_compile() { + ./config.sh Linux + make || die +} + +src_install() { + into /usr + mkdir -p ${D}/usr/bin/ + mkdir -p ${D}/usr/sbin + make install DESTDIR=${D} INSTALLTOP=${D}/usr + mkdir -p ${D}/etc/init.d/ + mkdir -p ${D}/etc/conf.d/ + mkdir -p ${D}/etc/pam.d/ + + install -m 0755 ${FILESDIR}/bsdftpd.sysinit ${D}/etc/init.d/bsdftpd + install -m 0644 ${FILESDIR}/bsdftpd.sysconfig ${D}/etc/conf.d/bsdftpd + install -m 0644 ${FILESDIR}/bsdftpd.pam ${D}/etc/pam.d/ftpd + install -m 0755 ${FILESDIR}/auth.sslftp ${D}/usr/bin + install -m 0644 ${FILESDIR}/x509.auth ${D}/etc +} diff --git a/net-ftp/bsdftpd-ssl/files/auth.sslftp b/net-ftp/bsdftpd-ssl/files/auth.sslftp new file mode 100644 index 0000000..539140d --- /dev/null +++ b/net-ftp/bsdftpd-ssl/files/auth.sslftp @@ -0,0 +1,43 @@ +#! /usr/bin/perl + +# Output must be at least 8 bytes + +sub return_error { + print STDOUT "200\r\n\r\n"; + exit; +} + +sub return_ok { + $user=@_[0]; + print STDOUT "100\r\n$user\r\n"; + exit; +} + +$/="\r\n"; +$user=;chomp($user); +$/="\n"; +$mode=0; +while (<>) { + if (($mode==0)&&($_ =~ /-----BEGIN CERTIFICATE-----/)) { $mode = 1; } + elsif (($mode==1)&&($_ =~ /-----END CERTIFICATE-----/)) { $mode = 2; } + if ($mode) { + $_ =~ /^(.*)[\n\r]+$/; + $cert.=$1; + } + if ($mode==2) { last; } +} + +#$cert=join "", @cert_lines; +$cert =~ m/-----BEGIN CERTIFICATE-----(.*)-----END CERTIFICATE-----/; +$client_cert = $1; + +open(ucf, "/opt/ssl/user_certs/$user.crt") or return_error(); +@cert_lines=; +chomp(@cert_lines); +$cert=join "", @cert_lines; +close(ucf); +$cert =~ m/-----BEGIN CERTIFICATE-----(.*)-----END CERTIFICATE-----/; +$user_cert = $1; + +if (($user_cert cmp $client_cert) == 0) { return_ok($user); } +return_error(); diff --git a/net-ftp/bsdftpd-ssl/files/bsdftpd-ds-anonymous.patch.bz2 b/net-ftp/bsdftpd-ssl/files/bsdftpd-ds-anonymous.patch.bz2 new file mode 100644 index 0000000..0a18ecb Binary files /dev/null and b/net-ftp/bsdftpd-ssl/files/bsdftpd-ds-anonymous.patch.bz2 differ diff --git a/net-ftp/bsdftpd-ssl/files/bsdftpd-ds-argmax.diff b/net-ftp/bsdftpd-ssl/files/bsdftpd-ds-argmax.diff new file mode 100644 index 0000000..8f425db --- /dev/null +++ b/net-ftp/bsdftpd-ssl/files/bsdftpd-ds-argmax.diff @@ -0,0 +1,17 @@ +diff -dPNur bsdftpd-ssl-1.0.2.orig/contrib/libbsdport/libc/gen/glob.c bsdftpd-ssl-1.0.2/contrib/libbsdport/libc/gen/glob.c +--- bsdftpd-ssl-1.0.2.orig/contrib/libbsdport/libc/gen/glob.c 2003-10-24 21:53:18.000000000 +0000 ++++ bsdftpd-ssl-1.0.2/contrib/libbsdport/libc/gen/glob.c 2012-01-13 20:16:21.000000000 +0000 +@@ -79,6 +79,13 @@ + #include + #include + ++#if defined(_SC_ARG_MAX) ++# if defined(ARG_MAX) ++# undef ARG_MAX ++# endif ++# define ARG_MAX sysconf (_SC_ARG_MAX) ++#endif ++ + #include "collate.h" + /* SKYNICK: from collate.c */ + int __collate_load_error = 1; diff --git a/net-ftp/bsdftpd-ssl/files/bsdftpd-ds-cmdtab.diff b/net-ftp/bsdftpd-ssl/files/bsdftpd-ds-cmdtab.diff new file mode 100644 index 0000000..4ea1912 --- /dev/null +++ b/net-ftp/bsdftpd-ssl/files/bsdftpd-ds-cmdtab.diff @@ -0,0 +1,20 @@ +diff -dPNur bsdftpd-ssl-1.0.2.orig/ftp/ftp_var.h bsdftpd-ssl-1.0.2/ftp/ftp_var.h +--- bsdftpd-ssl-1.0.2.orig/ftp/ftp_var.h 2004-05-30 19:19:37.000000000 +0000 ++++ bsdftpd-ssl-1.0.2/ftp/ftp_var.h 2012-01-13 20:30:15.000000000 +0000 +@@ -61,7 +61,6 @@ + #endif /* LINUX */ + #endif /* !SMALL */ + +-#include "extern.h" + + #define HASHBYTES 1024 + #define FTPBUFLEN MAXPATHLEN + 200 +@@ -200,6 +199,8 @@ + struct macel macros[16]; + char macbuf[4096]; + ++#include "extern.h" ++ + #include "sslapp.h" + #include "ssl_port_ftps.h" + diff --git a/net-ftp/bsdftpd-ssl/files/bsdftpd-ds-compile.patch b/net-ftp/bsdftpd-ssl/files/bsdftpd-ds-compile.patch new file mode 100644 index 0000000..e49d2ad --- /dev/null +++ b/net-ftp/bsdftpd-ssl/files/bsdftpd-ds-compile.patch @@ -0,0 +1,89 @@ +diff -dPNur bsdftpd-ssl-1.0.2/ftp/ftp.c bsdftpd-ssl-1.0.2-new/ftp/ftp.c +--- bsdftpd-ssl-1.0.2/ftp/ftp.c 2004-07-04 23:00:32.000000000 +0500 ++++ bsdftpd-ssl-1.0.2-new/ftp/ftp.c 2006-04-05 05:41:54.000000000 +0500 +@@ -1544,6 +1544,7 @@ + prt[1] &= 0xff; + error = 0; + epsv_done: ++ ; + } else + error = 1; + +@@ -1867,6 +1868,7 @@ + + return NULL; + default: ++ ; + } + + X509_free(x509_ssl_con); +@@ -1982,6 +1984,7 @@ + + return NULL; + default: ++ ; + } + + X509_free(x509_ssl_con); +diff -dPNur bsdftpd-ssl-1.0.2/ftp/util.c bsdftpd-ssl-1.0.2-new/ftp/util.c +--- bsdftpd-ssl-1.0.2/ftp/util.c 2004-05-31 03:24:47.000000000 +0500 ++++ bsdftpd-ssl-1.0.2-new/ftp/util.c 2006-04-05 05:42:14.000000000 +0500 +@@ -987,6 +987,7 @@ + ssl_log_msgn(bio_err,"Reason: Certificate revoked"); + break; + default: ++ ; + } + + warnx("TLS/SSL connection to server failed"); +diff -dPNur bsdftpd-ssl-1.0.2/ftpd/ftpd.c bsdftpd-ssl-1.0.2-new/ftpd/ftpd.c +--- bsdftpd-ssl-1.0.2/ftpd/ftpd.c 2006-04-05 04:55:31.000000000 +0500 ++++ bsdftpd-ssl-1.0.2-new/ftpd/ftpd.c 2006-04-05 04:57:30.000000000 +0500 +@@ -2322,6 +2322,7 @@ + SSL_get_shutdown(ssl_data_con); + break; + default: ++ ; + } + } + SSL_free(ssl_data_con); +@@ -2445,6 +2446,7 @@ + SSL_get_shutdown(ssl_data_con); + break; + default: ++ ; + } + } + SSL_free(ssl_data_con); +@@ -2696,6 +2698,7 @@ + + return NULL; + default: ++ ; + } + + X509_free(x509_ssl_con); +@@ -2857,6 +2860,7 @@ + + return NULL; + default: ++ ; + } + + X509_free(x509_ssl_con); +@@ -4185,6 +4189,7 @@ + SSL_get_shutdown(ssl_data_con); + break; + default: ++ ; + } + } + SSL_free(ssl_data_con); +@@ -4299,6 +4304,7 @@ + SSL_get_shutdown(ssl_data_con); + break; + default: ++ ; + } + } + SSL_free(ssl_data_con); diff --git a/net-ftp/bsdftpd-ssl/files/bsdftpd-ds-extprog.patch.bz2 b/net-ftp/bsdftpd-ssl/files/bsdftpd-ds-extprog.patch.bz2 new file mode 100644 index 0000000..b473e30 Binary files /dev/null and b/net-ftp/bsdftpd-ssl/files/bsdftpd-ds-extprog.patch.bz2 differ diff --git a/net-ftp/bsdftpd-ssl/files/bsdftpd-ds-getline.diff b/net-ftp/bsdftpd-ssl/files/bsdftpd-ds-getline.diff new file mode 100644 index 0000000..7aaf626 --- /dev/null +++ b/net-ftp/bsdftpd-ssl/files/bsdftpd-ds-getline.diff @@ -0,0 +1,45 @@ +diff -dPNur bsdftpd-ssl-1.0.2.orig/ftpd/extern.h bsdftpd-ssl-1.0.2/ftpd/extern.h +--- bsdftpd-ssl-1.0.2.orig/ftpd/extern.h 2004-04-18 12:20:14.000000000 +0000 ++++ bsdftpd-ssl-1.0.2/ftpd/extern.h 2012-01-13 20:21:33.000000000 +0000 +@@ -47,7 +47,7 @@ + void ftpd_logwtmp(char *, char *, struct sockaddr *addr); + int ftpd_pclose(FILE *); + FILE *ftpd_popen(char *, char *); +-char *getline(char *, int, FILE *); ++char *mygetline(char *, int, FILE *); + void lreply(int, const char *, ...); + void makedir(char *); + void nack(char *); +diff -dPNur bsdftpd-ssl-1.0.2.orig/ftpd/ftpcmd.y bsdftpd-ssl-1.0.2/ftpd/ftpcmd.y +--- bsdftpd-ssl-1.0.2.orig/ftpd/ftpcmd.y 2004-05-30 18:55:11.000000000 +0000 ++++ bsdftpd-ssl-1.0.2/ftpd/ftpcmd.y 2012-01-13 20:21:27.000000000 +0000 +@@ -1374,7 +1374,7 @@ + * getline - a hacked up version of fgets to ignore TELNET escape codes. + */ + char * +-getline(char *s, int n, FILE *iop) ++mygetline(char *s, int n, FILE *iop) + { + int c; + register char *cs; +@@ -1522,7 +1522,7 @@ + case CMD: + (void) signal(SIGALRM, toolong); + (void) alarm((unsigned) timeout); +- if (getline(cbuf, sizeof(cbuf)-1, stdin) == NULL) { ++ if (mygetline(cbuf, sizeof(cbuf)-1, stdin) == NULL) { + reply(221, "You could at least say goodbye."); + dologout(0); + } +diff -dPNur bsdftpd-ssl-1.0.2.orig/ftpd/ftpd.c bsdftpd-ssl-1.0.2/ftpd/ftpd.c +--- bsdftpd-ssl-1.0.2.orig/ftpd/ftpd.c 2012-01-13 19:55:37.000000000 +0000 ++++ bsdftpd-ssl-1.0.2/ftpd/ftpd.c 2012-01-13 20:21:48.000000000 +0000 +@@ -3750,7 +3750,7 @@ + tv.tv_usec=0; + if (select(fileno(stdin)+1, &mask, NULL, NULL, &tv)) { + #endif /*USE_SSL*/ +- if (getline(cp, 7, stdin) == NULL) { ++ if (mygetline(cp, 7, stdin) == NULL) { + reply(221, "You could at least say goodbye."); + dologout(0); + } diff --git a/net-ftp/bsdftpd-ssl/files/bsdftpd-ds-keypassword.patch.bz2 b/net-ftp/bsdftpd-ssl/files/bsdftpd-ds-keypassword.patch.bz2 new file mode 100644 index 0000000..e3cea58 Binary files /dev/null and b/net-ftp/bsdftpd-ssl/files/bsdftpd-ds-keypassword.patch.bz2 differ diff --git a/net-ftp/bsdftpd-ssl/files/bsdftpd-ds-pport.patch.bz2 b/net-ftp/bsdftpd-ssl/files/bsdftpd-ds-pport.patch.bz2 new file mode 100644 index 0000000..a105ddf Binary files /dev/null and b/net-ftp/bsdftpd-ssl/files/bsdftpd-ds-pport.patch.bz2 differ diff --git a/net-ftp/bsdftpd-ssl/files/bsdftpd-ds-termcap.patch.bz2 b/net-ftp/bsdftpd-ssl/files/bsdftpd-ds-termcap.patch.bz2 new file mode 100644 index 0000000..a8a67cc Binary files /dev/null and b/net-ftp/bsdftpd-ssl/files/bsdftpd-ds-termcap.patch.bz2 differ diff --git a/net-ftp/bsdftpd-ssl/files/bsdftpd.pam b/net-ftp/bsdftpd-ssl/files/bsdftpd.pam new file mode 100644 index 0000000..836e5bb --- /dev/null +++ b/net-ftp/bsdftpd-ssl/files/bsdftpd.pam @@ -0,0 +1,5 @@ +#%PAM-1.0 +auth required /lib/security/pam_listfile.so item=user sense=deny file=/etc/ftpusers onerr=succeed +auth required /lib/security/pam_shells.so +auth include system-auth +account include system-auth diff --git a/net-ftp/bsdftpd-ssl/files/bsdftpd.sysconfig b/net-ftp/bsdftpd-ssl/files/bsdftpd.sysconfig new file mode 100644 index 0000000..ae24158 --- /dev/null +++ b/net-ftp/bsdftpd-ssl/files/bsdftpd.sysconfig @@ -0,0 +1,7 @@ +BSDFTPDSSL_SSL_CERT=/opt/ssl/server_certs/server.crt +BSDFTPDSSL_SSL_KEY=/opt/ssl/server_keys/server.key +BSDFTPDSSL_SSL_PASSWORD=/etc/apc.pwd +BSDFTPDSSL_SSL_CHAIN=/opt/ssl/ca/chain.crt +BSDFTPDSSL_SSL_USERS=/opt/ssl/user_certs/ +BSDFTPDSSL_FIRST_PASSIVE_PORT=40000 +BSDFTPDSSL_LAST_PASSIVE_PORT=45000 diff --git a/net-ftp/bsdftpd-ssl/files/bsdftpd.sysinit b/net-ftp/bsdftpd-ssl/files/bsdftpd.sysinit new file mode 100644 index 0000000..942c062 --- /dev/null +++ b/net-ftp/bsdftpd-ssl/files/bsdftpd.sysinit @@ -0,0 +1,20 @@ +#!/sbin/runscript +# Copyright 1999-2004 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 +# $Header: + +depend() { + need net +} + +start() { + ebegin "Starting BSD FTPD - SSL" + ftpd -h -S wu-ext -X wu-ext -l -l -B $BSDFTPDSSL_FIRST_PASSIVE_PORT:$BSDFTPDSSL_LAST_PASSIVE_PORT -D -z secure -z cert=$BSDFTPDSSL_SSL_CERT -z key=$BSDFTPDSSL_SSL_KEY -z verify=1 -z auth=1 -z CAfile=$BSDFTPDSSL_SSL_CHAIN -z CApath=$BSDFTPDSSL_SSL_USERS -z certsok -z KEYpassword=$BSDFTPDSSL_SSL_PASSWORD -z defau -z refnu -z cipher=HIGH + eend $? +} + +stop() { + ebegin "Stopping BSD FTPD - SSL" + killall ${KILL_OPTS} ftpd + eend $? +} diff --git a/net-ftp/bsdftpd-ssl/files/x509.auth b/net-ftp/bsdftpd-ssl/files/x509.auth new file mode 100644 index 0000000..06a5890 --- /dev/null +++ b/net-ftp/bsdftpd-ssl/files/x509.auth @@ -0,0 +1,2 @@ +ftpd:allow:/CN:-p/usr/bin/perl /usr/bin/auth.sslftp +ftpd:allow:*:-f~/certs/ftp.crt diff --git a/net-ftp/gftp/Manifest b/net-ftp/gftp/Manifest new file mode 100644 index 0000000..cd949db --- /dev/null +++ b/net-ftp/gftp/Manifest @@ -0,0 +1,5 @@ +AUX gftp-2.0.18-fix_gtk1.patch 1095 RMD160 a7f81b7527440dd238b64f3d49b28f5c4a69a329 SHA1 14d5bcbb102d9069fcdceafb50ff6f1c226e1e5e SHA256 560b21ba0ea7db75ba0d33fcec9b9705c4009eadd7a67e3dcd19a949182657c9 +AUX gftp-2.0.18-ssh2-read.patch 326 RMD160 512c6ffb7b31588a63c8efa48c15f70c33854862 SHA1 78d2d8e1a7921a8cfb456f8e414b11a6a04d11f3 SHA256 3ae9e62999aef08911dcc374433fa1797d277494cb86fdbb54e969098230582d +AUX gftp-ds-rcc.patch 26389 RMD160 58263f86b91ba505aedef2487a352be061501ebb SHA1 95df6779cf175bc70dadf577ae714f206f04e4df SHA256 4bd18670646c499d76d2810649030e0e1b850eac0e8fab3d68371fa34bb4ce54 +DIST gftp-2.0.18.tar.bz2 1374850 RMD160 0e0daea8543ae822b25635647360193362a2648d SHA1 c2468f1ff1fe978a5fab3a198e513558f3b48f5a SHA256 8145e18d1edf13e8cb6cd7a69bb69de5c46307086997755654488fb8282d38a2 +EBUILD gftp-2.0.18-r5.ebuild 1248 RMD160 ff3494e98d169b5c8cc21be8e99378dd2c8666a9 SHA1 bf69439a4d28d88612ff4f17fd50b74b96c3dd34 SHA256 785d82c9aed8afc2286cf0e08d193ac4c136dc87c30862b774ef764afcffb699 diff --git a/net-ftp/gftp/files/gftp-2.0.18-fix_gtk1.patch b/net-ftp/gftp/files/gftp-2.0.18-fix_gtk1.patch new file mode 100644 index 0000000..a7fd44e --- /dev/null +++ b/net-ftp/gftp/files/gftp-2.0.18-fix_gtk1.patch @@ -0,0 +1,31 @@ +diff -uNr gftp-2.0.18/src/gtk/options_dialog.c gftp-2.0.18.patched/src/gtk/options_dialog.c +--- gftp-2.0.18/src/gtk/options_dialog.c 2005-01-04 14:32:20.000000000 +0100 ++++ gftp-2.0.18.patched/src/gtk/options_dialog.c 2005-02-14 16:44:10.064677160 +0100 +@@ -1002,7 +1002,7 @@ + gtk_widget_show (box); + + #if GTK_MAJOR_VERSION == 1 +- tempwid = gtk_label_new (_("Type:")) ++ tempwid = gtk_label_new (_("Type:")); + #else + tempwid = gtk_label_new_with_mnemonic (_("_Type:")); + #endif +diff -uNr gftp-2.0.18/src/text/gftp-text.c gftp-2.0.18.patched/src/text/gftp-text.c +--- gftp-2.0.18/src/text/gftp-text.c 2005-01-25 02:11:00.000000000 +0100 ++++ gftp-2.0.18.patched/src/text/gftp-text.c 2005-02-14 16:44:12.299337440 +0100 +@@ -185,6 +185,7 @@ + else + infd = stdin; + ++#if GLIB_MAJOR_VERSION > 1 + locale_question = g_locale_from_utf8 (question, -1, NULL, NULL, NULL); + if (locale_question != NULL) + { +@@ -193,6 +194,7 @@ + g_free (locale_question); + } + else ++#endif + printf ("%s%s%s ", GFTPUI_COMMON_COLOR_BLUE, question, + GFTPUI_COMMON_COLOR_DEFAULT); + diff --git a/net-ftp/gftp/files/gftp-2.0.18-ssh2-read.patch b/net-ftp/gftp/files/gftp-2.0.18-ssh2-read.patch new file mode 100644 index 0000000..765741b --- /dev/null +++ b/net-ftp/gftp/files/gftp-2.0.18-ssh2-read.patch @@ -0,0 +1,13 @@ +--- gftp-2.0.18.orig/lib/sshv2.c ++++ gftp-2.0.18/lib/sshv2.c +@@ -1841,7 +1841,7 @@ + { + int ret; + +- if ((ret = sshv2_open_file (request, file, startsize, SSH_FXP_OPEN)) < 0) ++ if ((ret = sshv2_open_file (request, file, startsize, SSH_FXF_READ)) < 0) + return (ret); + + return (sshv2_get_file_size (request, file)); + + diff --git a/net-ftp/gftp/files/gftp-ds-rcc.patch b/net-ftp/gftp/files/gftp-ds-rcc.patch new file mode 100644 index 0000000..a704deb --- /dev/null +++ b/net-ftp/gftp/files/gftp-ds-rcc.patch @@ -0,0 +1,822 @@ +diff -dPNur gftp-2.0.18-orig/configure.in gftp-2.0.18-new/configure.in +--- gftp-2.0.18-orig/configure.in 2005-02-04 16:42:32.000000000 +0100 ++++ gftp-2.0.18-new/configure.in 2005-07-23 18:54:53.000000000 +0200 +@@ -288,6 +288,20 @@ + fi + AC_SUBST(SSL_LIBS) + ++AC_CHECK_LIB(rccui, rccUiInit,[ ++ AC_CHECK_HEADERS(librcc.h librccui.h,[ ++ LIBRCC_LIBS="-lrccui" ++ LIBRCC_INCLUDES="-DHAVE_LIBRCC" ++ ],[ ++ LIBRCC_LIBS="" ++ LIBRCC_INCLUDES="" ++])],[ ++ LIBRCC_LIBS="" ++ LIBRCC_INCLUDES="" ++]) ++AC_SUBST(LIBRCC_LIBS) ++AC_SUBST(LIBRCC_INCLUDES) ++ + AM_GNU_GETTEXT + + AC_CHECK_PROG(DB2HTML, db2html, true, false) +diff -dPNur gftp-2.0.18-orig/lib/gftp.h gftp-2.0.18-new/lib/gftp.h +--- gftp-2.0.18-orig/lib/gftp.h 2005-01-19 00:09:58.000000000 +0100 ++++ gftp-2.0.18-new/lib/gftp.h 2005-07-23 20:57:03.000000000 +0200 +@@ -362,6 +362,7 @@ + { + int protonum; /* Current number of the protocol this is + set to */ ++ int language, charset; /* Remote language and encoding */ + char *hostname, /* Hostname we will connect to */ + *username, /* Username for host*/ + *password, /* Password for host */ +@@ -928,6 +929,12 @@ + const char *filename, + mode_t * mode ); + ++void gftp_set_language ( gftp_request * request, ++ int language ); ++ ++void gftp_set_charset ( gftp_request * request, ++ int charset ); ++ + void gftp_set_hostname ( gftp_request * request, + const char *hostname ); + +diff -dPNur gftp-2.0.18-orig/lib/Makefile.am gftp-2.0.18-new/lib/Makefile.am +--- gftp-2.0.18-orig/lib/Makefile.am 2005-01-16 17:10:12.000000000 +0100 ++++ gftp-2.0.18-new/lib/Makefile.am 2005-07-23 18:58:12.000000000 +0200 +@@ -4,6 +4,6 @@ + noinst_LIBRARIES = libgftp.a + libgftp_a_SOURCES=bookmark.c cache.c config_file.c fsp.c ftps.c https.c \ + local.c misc.c mkstemps.c protocols.c pty.c rfc959.c \ +- rfc2068.c sshv2.c sslcommon.c +-INCLUDES=@GLIB_CFLAGS@ @PTHREAD_CFLAGS@ -I../intl -DSHARE_DIR=\"$(datadir)/gftp\" -DLOCALE_DIR=\"$(datadir)/locale\" +-noinst_HEADERS=gftp.h ftpcommon.h httpcommon.h options.h ++ rfc2068.c sshv2.c sslcommon.c rcc.c ++INCLUDES=@LIBRCC_INCLUDES@ @GLIB_CFLAGS@ @PTHREAD_CFLAGS@ -I../intl -DSHARE_DIR=\"$(datadir)/gftp\" -DLOCALE_DIR=\"$(datadir)/locale\" ++noinst_HEADERS=gftp.h ftpcommon.h httpcommon.h options.h rcc.h +diff -dPNur gftp-2.0.18-orig/lib/rcc.c gftp-2.0.18-new/lib/rcc.c +--- gftp-2.0.18-orig/lib/rcc.c 1970-01-01 01:00:00.000000000 +0100 ++++ gftp-2.0.18-new/lib/rcc.c 2005-07-24 01:53:25.000000000 +0200 +@@ -0,0 +1,289 @@ ++#include ++ ++#ifdef HAVE_LIBRCC ++# include ++# include ++#endif /* HAVE_LIBRCC */ ++ ++#include "rcc.h" ++ ++#ifdef HAVE_LIBRCC ++static rcc_class classes[] = { ++ { "ftp", RCC_CLASS_STANDARD, NULL, NULL, "FTP Encoding", 0 }, ++ { "http", RCC_CLASS_STANDARD, NULL, NULL, "HTTP Encoding", 0 }, ++ { "ssh", RCC_CLASS_STANDARD, NULL, NULL, "SSH Encoding", 0 }, ++ { "fs", RCC_CLASS_STANDARD, NULL, NULL, "FS Encoding", 0 }, ++ { "out", RCC_CLASS_STANDARD, NULL, NULL, "Output Encoding", 0 }, ++ { NULL, RCC_CLASS_STANDARD, NULL, NULL, NULL, 0 } ++}; ++ ++rcc_context ctx; ++rcc_ui_context uictx; ++static int rcc_initialized = 0; ++#endif /* HAVE_LIBRCC */ ++ ++ ++void rccPatchFree() { ++#ifdef HAVE_LIBRCC ++ if (rcc_initialized) { ++ rccUiFreeContext(uictx); ++ rccFreeContext(ctx); ++ rccUiFree(); ++ rccFree(); ++ rcc_initialized = 0; ++ } ++#endif /* HAVE_LIBRCC */ ++} ++ ++void rccPatchInit() { ++#ifdef HAVE_LIBRCC ++ if (rcc_initialized) return; ++ rccInit(); ++ ctx = rccCreateContext(NULL, 0, 0, classes, 0); ++ if (ctx) { ++ rccLoad(ctx, "ftp"); ++ rccInitDb4(ctx, NULL, 0); ++ rccUiInit(); ++ uictx = rccUiCreateContext(ctx); ++ if (uictx) rcc_initialized = 1; ++ else { ++ rccUiFree(); ++ rccFreeContext(ctx); ++ rccFree(); ++ } ++ } else rccFree(); ++#endif /* HAVE_LIBRCC */ ++} ++ ++ ++#ifdef HAVE_LIBRCC ++static char *rcc_languages[RCC_MAX_LANGUAGES+1]; ++static char *rcc_charsets[RCC_MAX_CHARSETS+1]; ++#endif /* HAVE_LIBRCC */ ++ ++char **rccPatchGetLanguageList() { ++#ifdef HAVE_LIBRCC ++ unsigned int i, num; ++ ++ if (rcc_initialized) { ++ num = rccGetLanguageNumber(ctx); ++ for (i=0;i<(num?num:1);i++) ++ rcc_languages[i] = (char*)rccUiGetLanguageName(uictx, (rcc_language_id)i); ++ ++ rcc_languages[i] = NULL; ++ return rcc_languages; ++ } ++#endif /* HAVE_LIBRCC */ ++ ++ return NULL; ++ ++} ++ ++char **rccPatchGetCharsetList(int lid) { ++#ifdef HAVE_LIBRCC ++ unsigned int i, num; ++ rcc_language_config config; ++ ++ if (rcc_initialized) { ++ config = rccGetConfig(ctx, (rcc_language_id)lid); ++ num = rccConfigGetCharsetNumber(config); ++ for (i=0;i<(num?num:1);i++) ++ rcc_charsets[i] = (char*)rccUiGetCharsetName(uictx, (rcc_language_id)lid, (rcc_class_id)0 /* first class, they are equal*/, (rcc_charset_id)i); ++ ++ rcc_charsets[i] = NULL; ++ return rcc_charsets; ++ } ++#endif /* HAVE_LIBRCC */ ++ ++ return NULL; ++} ++ ++char *rccPatchFrom(gftp_request * request, const char *str) { ++#ifdef HAVE_LIBRCC ++ rcc_class_id cl; ++ if (rcc_initialized) { ++ switch (request->protonum) { ++ case GFTP_FTP_NUM: ++ case GFTP_FTPS_NUM: ++ cl = (rcc_class_id)RCC_CLASS_FTP; ++ break; ++ case GFTP_HTTP_NUM: ++ case GFTP_HTTPS_NUM: ++ cl = (rcc_class_id)RCC_CLASS_HTTP; ++ break; ++ case GFTP_SSHV2_NUM: ++ cl = (rcc_class_id)RCC_CLASS_SSH; ++ break; ++ case GFTP_LOCAL_NUM: ++ cl = (rcc_class_id)RCC_CLASS_FS; ++ break; ++ default: ++ return NULL; ++ } ++ ++ if ((cl == RCC_CLASS_FTP)||(cl == RCC_CLASS_HTTP)||(cl == RCC_CLASS_SSH)) { ++ if (request->language) rccSetLanguage(ctx, (rcc_language_id)request->language); ++ if (request->charset) rccSetCharset(ctx, cl, (rcc_charset_id)request->charset); ++ } ++ ++ return rccRecodeFromCharset(ctx, cl, "UTF-8", str); ++ } ++#endif /* HAVE_LIBRCC */ ++ return NULL; ++} ++ ++char *rccPatchTo(gftp_request * request, const char *str) { ++#ifdef HAVE_LIBRCC ++ rcc_class_id cl; ++ if (rcc_initialized) { ++ switch (request->protonum) { ++ case GFTP_FTP_NUM: ++ case GFTP_FTPS_NUM: ++ cl = (rcc_class_id)RCC_CLASS_FTP; ++ break; ++ case GFTP_HTTP_NUM: ++ case GFTP_HTTPS_NUM: ++ cl = (rcc_class_id)RCC_CLASS_HTTP; ++ break; ++ case GFTP_SSHV2_NUM: ++ cl = (rcc_class_id)RCC_CLASS_SSH; ++ break; ++ case GFTP_LOCAL_NUM: ++ cl = (rcc_class_id)RCC_CLASS_FS; ++ break; ++ default: ++ return NULL; ++ } ++ ++ if ((cl == RCC_CLASS_FTP)||(cl == RCC_CLASS_HTTP)||(cl == RCC_CLASS_SSH)) { ++ if (request->language) rccSetLanguage(ctx, (rcc_language_id)request->language); ++ if (request->charset) rccSetCharset(ctx, cl, (rcc_charset_id)request->charset); ++ } ++ ++ return rccRecodeToCharset(ctx, cl, "UTF-8", str); ++ } ++#endif /* HAVE_LIBRCC */ ++ return NULL; ++} ++ ++char *rccPatch(gftp_request *from, gftp_request *to, const char *str) { ++ char *res, *ret; ++ const char *tmp; ++ ++ if (from->protonum == to->protonum) return NULL; ++ printf("%u %u\n", from->protonum, to->protonum); ++ ++ tmp = strstr(str, to->directory); ++ if (!tmp) tmp = str; ++ ++ res = rccPatchTo(from, tmp); ++ if (!res) res = (char*)tmp; ++ ++ ret = rccPatchFrom(to, res); ++ if (ret) { ++ if (res!=tmp) free(res); ++ } else { ++ if (res!=tmp) ret = res; ++ else return NULL; ++ } ++ ++ if (tmp != str) { ++ res = (char*)malloc((strlen(ret) + (tmp-str) + 1)*sizeof(char)); ++ if (res) { ++ memcpy(res, str, (tmp-str)); ++ strcpy(res+(tmp-str), ret); ++ } ++ free(ret); ++ if (res) puts(res); ++ return res; ++ } ++ ++ return ret; ++} ++ ++char *rccPatchFromClass(gftp_request * request, int from, const char *str) { ++#ifdef HAVE_LIBRCC ++ rcc_class_id cl; ++ if (rcc_initialized) { ++ switch (request->protonum) { ++ case GFTP_FTP_NUM: ++ case GFTP_FTPS_NUM: ++ cl = (rcc_class_id)RCC_CLASS_FTP; ++ break; ++ case GFTP_HTTP_NUM: ++ case GFTP_HTTPS_NUM: ++ cl = (rcc_class_id)RCC_CLASS_HTTP; ++ break; ++ case GFTP_SSHV2_NUM: ++ cl = (rcc_class_id)RCC_CLASS_SSH; ++ break; ++ case GFTP_LOCAL_NUM: ++ cl = (rcc_class_id)RCC_CLASS_FS; ++ break; ++ default: ++ return NULL; ++ } ++ ++ if ((cl == RCC_CLASS_FTP)||(cl == RCC_CLASS_HTTP)||(cl == RCC_CLASS_SSH)) { ++ if (request->language) rccSetLanguage(ctx, (rcc_language_id)request->language); ++ if (request->charset) rccSetCharset(ctx, cl, (rcc_charset_id)request->charset); ++ } ++ ++ return rccRecode(ctx, (rcc_class_id)from, cl, str); ++ } ++#endif /* HAVE_LIBRCC */ ++ return NULL; ++} ++ ++char *rccPatchToClass(gftp_request * request, int to, const char *str) { ++#ifdef HAVE_LIBRCC ++ rcc_class_id cl; ++ if (rcc_initialized) { ++ switch (request->protonum) { ++ case GFTP_FTP_NUM: ++ case GFTP_FTPS_NUM: ++ cl = (rcc_class_id)RCC_CLASS_FTP; ++ break; ++ case GFTP_HTTP_NUM: ++ case GFTP_HTTPS_NUM: ++ cl = (rcc_class_id)RCC_CLASS_HTTP; ++ break; ++ case GFTP_SSHV2_NUM: ++ cl = (rcc_class_id)RCC_CLASS_SSH; ++ break; ++ case GFTP_LOCAL_NUM: ++ cl = (rcc_class_id)RCC_CLASS_FS; ++ break; ++ default: ++ return NULL; ++ } ++ ++ if ((cl == RCC_CLASS_FTP)||(cl == RCC_CLASS_HTTP)||(cl == RCC_CLASS_SSH)) { ++ if (request->language) rccSetLanguage(ctx, (rcc_language_id)request->language); ++ if (request->charset) rccSetCharset(ctx, cl, (rcc_charset_id)request->charset); ++ } ++ ++ return rccRecode(ctx, cl, (rcc_class_id)to, str); ++ } ++#endif /* HAVE_LIBRCC */ ++ return NULL; ++} ++ ++ ++char *rccPatchUTF2OUT(const char *str) { ++#ifdef HAVE_LIBRCC ++ if (rcc_initialized) { ++ return rccRecodeFromCharset(ctx, RCC_CLASS_OUT, "UTF-8", str); ++ } ++#endif /* HAVE_LIBRCC */ ++ return NULL; ++} ++ ++char *rccPatchOUT2UTF(const char *str) { ++#ifdef HAVE_LIBRCC ++ if (rcc_initialized) { ++ return rccRecodeToCharset(ctx, RCC_CLASS_OUT, "UTF-8", str); ++ } ++#endif /* HAVE_LIBRCC */ ++ return NULL; ++} +diff -dPNur gftp-2.0.18-orig/lib/rcc.h gftp-2.0.18-new/lib/rcc.h +--- gftp-2.0.18-orig/lib/rcc.h 1970-01-01 01:00:00.000000000 +0100 ++++ gftp-2.0.18-new/lib/rcc.h 2005-07-24 01:49:20.000000000 +0200 +@@ -0,0 +1,28 @@ ++#ifndef _RCC_H ++#define _RCC_H ++ ++#include "gftp.h" ++ ++#define RCC_CLASS_FTP 0 ++#define RCC_CLASS_HTTP 1 ++#define RCC_CLASS_SSH 2 ++#define RCC_CLASS_FS 3 ++#define RCC_CLASS_OUT 4 ++ ++void rccPatchFree(); ++void rccPatchInit(); ++ ++char **rccPatchGetLanguageList(); ++char **rccPatchGetCharsetList(int lid); ++ ++char *rccPatchFrom(gftp_request * request, const char *str); ++char *rccPatchTo(gftp_request * request, const char *str); ++char *rccPatch(gftp_request *from, gftp_request *to, const char *str); ++ ++char *rccPatchFromClass(gftp_request * request, int from, const char *str); ++char *rccPatchToClass(gftp_request * request, int to, const char *str); ++ ++char *rccPatchUTF2OUT(const char *str); ++char *rccPatchOUT2UTF(const char *str); ++ ++#endif /* _RCC_H */ +diff -dPNur gftp-2.0.18-orig/src/gtk/gtkui.c gftp-2.0.18-new/src/gtk/gtkui.c +--- gftp-2.0.18-orig/src/gtk/gtkui.c 2005-01-26 04:22:05.000000000 +0100 ++++ gftp-2.0.18-new/src/gtk/gtkui.c 2005-07-24 00:40:47.000000000 +0200 +@@ -351,6 +351,8 @@ + filelist = wdata->files; + templist = get_next_selection (templist, &filelist, &num); + curfle = filelist->data; ++ cdata->source_string = gftp_string_to_utf8(wdata->request, curfle->file); ++ if (!cdata->source_string) + cdata->source_string = g_strdup (curfle->file); + + tempstr = g_strdup_printf (_("What would you like to rename %s to?"), +diff -dPNur gftp-2.0.18-orig/src/gtk/Makefile.am gftp-2.0.18-new/src/gtk/Makefile.am +--- gftp-2.0.18-orig/src/gtk/Makefile.am 2005-01-16 17:12:08.000000000 +0100 ++++ gftp-2.0.18-new/src/gtk/Makefile.am 2005-07-23 19:16:26.000000000 +0200 +@@ -5,6 +5,6 @@ + gftp_gtk_SOURCES = bookmarks.c chmod_dialog.c delete_dialog.c dnd.c \ + gftp-gtk.c gtkui.c gtkui_transfer.c menu-items.c \ + misc-gtk.c options_dialog.c transfer.c view_dialog.c +-INCLUDES = @GTK_CFLAGS@ @PTHREAD_CFLAGS@ -I../../intl +-LDADD = ../../lib/libgftp.a ../../lib/fsplib/libfsp.a ../uicommon/libgftpui.a @GTK_LIBS@ @PTHREAD_LIBS@ @EXTRA_LIBS@ @GTHREAD_LIBS@ @SSL_LIBS@ @LIBINTL@ ++INCLUDES = @LIBRCC_INCLUDES@ @GTK_CFLAGS@ @PTHREAD_CFLAGS@ -I../../intl ++LDADD = ../../lib/libgftp.a ../../lib/fsplib/libfsp.a ../uicommon/libgftpui.a @GTK_LIBS@ @PTHREAD_LIBS@ @EXTRA_LIBS@ @GTHREAD_LIBS@ @SSL_LIBS@ @LIBINTL@ @LIBRCC_LIBS@ + noinst_HEADERS = gftp-gtk.h +diff -dPNur gftp-2.0.18-orig/src/text/gftp-text.c gftp-2.0.18-new/src/text/gftp-text.c +--- gftp-2.0.18-orig/src/text/gftp-text.c 2005-01-25 02:11:00.000000000 +0100 ++++ gftp-2.0.18-new/src/text/gftp-text.c 2005-07-24 01:54:25.000000000 +0200 +@@ -18,6 +18,7 @@ + /*****************************************************************************/ + + #include "gftp-text.h" ++#include "../../lib/rcc.h" + static const char cvsid[] = "$Id: gftp-text.c,v 1.45 2005/01/25 01:11:00 masneyb Exp $"; + + unsigned int +@@ -93,6 +94,7 @@ + const char *string, ...) + { + char tempstr[512], *utf8_str = NULL, *outstr; ++ char *locale_str; + va_list argp; + + g_return_if_fail (string != NULL); +@@ -140,7 +142,14 @@ + } + + if (level == gftp_logging_misc_nolog) ++{ ++ locale_str = rccPatchUTF2OUT(outstr); ++ if (locale_str) { ++ printf ("%s", locale_str); ++ free(locale_str); ++ } else + printf ("%s", outstr); ++} + else + gftp_text_write_string (request, outstr); + +@@ -158,6 +167,7 @@ + gchar *locale_question; + sigset_t sig, sigsave; + char *pos, *termname; ++ char *tmp; + int singlechar; + FILE *infd; + +@@ -247,6 +257,9 @@ + #else + char tempstr[512]; + #endif ++ char *recoded = NULL; ++ ++ rccPatchInit(); + + gftpui_common_init (&argc, &argv, gftp_text_log); + +@@ -298,9 +311,11 @@ + g_snprintf (prompt, sizeof (prompt), "%sftp%s> ", GFTPUI_COMMON_COLOR_BLUE, GFTPUI_COMMON_COLOR_DEFAULT); + while ((tempstr = readline (prompt))) + { ++ if (recoded) free(recoded); ++ recoded = rccPatchFromClass(gftp_text_remreq, RCC_CLASS_OUT, tempstr); + if (gftpui_common_process_command (locuidata, gftp_text_locreq, + remuidata, gftp_text_remreq, +- tempstr) == 0) ++ recoded?recoded:tempstr) == 0) + break; + + add_history (tempstr); +@@ -310,16 +325,20 @@ + printf ("%sftp%s> ", GFTPUI_COMMON_COLOR_BLUE, GFTPUI_COMMON_COLOR_DEFAULT); + while (fgets (tempstr, sizeof (tempstr), stdin) != NULL) + { ++ if (recoded) free(recoded); ++ recoded = rccPatchFromClass(gftp_tetxt_remreq, RCC_CLASS_OUT, tempstr); + if (gftpui_common_process_command (locuidata, gftp_text_locreq, + remuidata, gftp_text_remreq, +- tempstr) == 0) ++ recoded?recoded:tempstr) == 0) + break; + + printf ("%sftp%s> ", GFTPUI_COMMON_COLOR_BLUE, GFTPUI_COMMON_COLOR_DEFAULT); + } + #endif +- ++ if (recoded) free(recoded); ++ + gftp_shutdown (); ++ rccPatchFree(); + return (0); + } + +diff -dPNur gftp-2.0.18-orig/src/text/Makefile.am gftp-2.0.18-new/src/text/Makefile.am +--- gftp-2.0.18-orig/src/text/Makefile.am 2005-01-16 17:12:00.000000000 +0100 ++++ gftp-2.0.18-new/src/text/Makefile.am 2005-07-23 19:16:39.000000000 +0200 +@@ -3,7 +3,7 @@ + bin_PROGRAMS = @GFTP_TEXT@ + EXTRA_PROGRAMS = gftp-text + gftp_text_SOURCES=gftp-text.c textui.c +-INCLUDES=@GLIB_CFLAGS@ -I../../intl +-LDADD = ../../lib/libgftp.a ../../lib/fsplib/libfsp.a ../uicommon/libgftpui.a @GLIB_LIBS@ @EXTRA_LIBS@ @READLINE_LIBS@ @SSL_LIBS@ @LIBINTL@ ++INCLUDES=@LIBRCC_INCLUDES@ @GLIB_CFLAGS@ -I../../intl ++LDADD = ../../lib/libgftp.a ../../lib/fsplib/libfsp.a ../uicommon/libgftpui.a @GLIB_LIBS@ @EXTRA_LIBS@ @READLINE_LIBS@ @SSL_LIBS@ @LIBINTL@ @LIBRCC_LIBS@ + noinst_HEADERS=gftp-text.h + localedir=$(datadir)/locale +diff -dPNur gftp-2.0.18-orig/lib/protocols.c gftp-2.0.18-new/lib/protocols.c +--- gftp-2.0.18-orig/lib/protocols.c 2005-07-23 15:30:59.000000000 +0200 ++++ gftp-2.0.18-new/lib/protocols.c 2005-07-24 00:56:12.000000000 +0200 +@@ -18,6 +18,8 @@ + /*****************************************************************************/ + + #include "gftp.h" ++#include "rcc.h" ++ + static const char cvsid[] = "$Id: protocols.c,v 1.125 2005/01/25 02:34:18 masneyb Exp $"; + + gftp_request * +@@ -26,6 +28,8 @@ + gftp_request *request; + + request = g_malloc0 (sizeof (*request)); ++ request->language = 0; ++ request->charset = 0; + request->datafd = -1; + request->cachefd = -1; + request->server_type = GFTP_DIRTYPE_OTHER; +@@ -460,6 +469,9 @@ + gftp_lookup_request_option (request, "remote_charsets", &tempstr); + if (*tempstr == '\0') + { ++ ret = rccPatchTo(request, str); ++ if (ret) return ret; ++ + error = NULL; + if ((ret = g_locale_to_utf8 (str, -1, &bread, &bwrite, &error)) != NULL) + return (ret); +@@ -531,6 +544,9 @@ + gftp_lookup_request_option (request, "remote_charsets", &tempstr); + if (*tempstr == '\0') + { ++ ret = rccPatchFrom(request, str); ++ if (ret) return ret; ++ + error = NULL; + if ((ret = g_locale_from_utf8 (str, -1, &bread, &bwrite, &error)) != NULL) + return (ret); +@@ -919,6 +935,18 @@ + } + + ++void ++gftp_set_language (gftp_request * request, int language) { ++ g_return_if_fail (request != NULL); ++ request->language = language; ++} ++ ++void ++gftp_set_charset (gftp_request * request, int charset) { ++ g_return_if_fail (request != NULL); ++ request->charset = charset; ++} ++ + void + gftp_set_hostname (gftp_request * request, const char *hostname) + { +@@ -1056,6 +1084,7 @@ + const char *newname) + { + char *utf8; ++ char *oldutf8; + int ret; + + g_return_val_if_fail (request != NULL, GFTP_EFATAL); +@@ -1064,13 +1093,13 @@ + return (GFTP_EFATAL); + + utf8 = gftp_string_from_utf8 (request, newname); ++ oldutf8 = gftp_string_from_utf8 (request, oldname); ++ ret = request->rename (request, oldutf8?oldutf8:oldname, utf8?utf8:newname); ++ + if (utf8 != NULL) +- { +- ret = request->rename (request, oldname, utf8); + g_free (utf8); +- } +- else +- ret = request->rename (request, oldname, newname); ++ if (oldutf8 != NULL) ++ g_free (oldutf8); + + return (ret); + } +@@ -1948,11 +1977,14 @@ + (newsize = g_hash_table_lookup (dirhash, fle->file)) != NULL) + fle->startsize = *newsize; + +- if (transfer->toreq && fle->destfile == NULL) ++ if (transfer->toreq && fle->destfile == NULL) { ++ newname = rccPatch(transfer->fromreq, transfer->toreq, fle->file); + fle->destfile = gftp_build_path (transfer->toreq, + transfer->toreq->directory, +- fle->file, NULL); +- ++ newname?newname:fle->file, NULL); ++ if (newname) free(newname); ++ } ++ + if (transfer->fromreq->directory != NULL && + *transfer->fromreq->directory != '\0' && + *fle->file != '/') +@@ -2026,11 +2058,15 @@ + return (curfle->size); + } + +- if (transfer->toreq && curfle->destfile == NULL) ++ if (transfer->toreq && curfle->destfile == NULL) { ++ newname = rccPatch(transfer->fromreq, transfer->toreq, curfle->file); + curfle->destfile = gftp_build_path (transfer->toreq, + transfer->toreq->directory, +- curfle->file, NULL); ++ newname?newname:curfle->file, NULL); ++ if (newname) free(newname); ++ } + ++ + if (transfer->fromreq->directory != NULL && + *transfer->fromreq->directory != '\0' && *curfle->file != '/') + { +diff -dPNur gftp-2.0.18-orig/src/gtk/gftp-gtk.c gftp-2.0.18-new/src/gtk/gftp-gtk.c +--- gftp-2.0.18-orig/src/gtk/gftp-gtk.c 2005-01-25 03:34:19.000000000 +0100 ++++ gftp-2.0.18-new/src/gtk/gftp-gtk.c 2005-07-23 22:22:42.000000000 +0200 +@@ -18,6 +18,7 @@ + /*****************************************************************************/ + + #include "gftp-gtk.h" ++#include "../../lib/rcc.h" + static const char cvsid[] = "$Id: gftp-gtk.c,v 1.66 2005/01/25 02:34:19 masneyb Exp $"; + + static GtkItemFactory *log_factory, *dl_factory; +@@ -28,6 +29,7 @@ + GtkWidget * stop_btn, * hostedit, * useredit, * passedit, * portedit, * logwdw, + * dlwdw, * protocol_menu, * optionmenu, * gftpui_command_widget, + * download_left_arrow, * upload_right_arrow, * openurl_btn; ++GtkWidget * language_menu, * charset_menu; + GtkTooltips * openurl_tooltip; + GtkAdjustment * logwdw_vadj; + #if GTK_MAJOR_VERSION > 1 +@@ -420,6 +422,42 @@ + return (factory->widget); + } + ++#ifdef HAVE_LIBRCC ++static int rcc_current_language = 0; ++static int rcc_current_charset = 0; ++ ++static void rccCharsetCB(GtkWidget * w, gpointer item) { ++ rcc_current_charset = g_list_index(GTK_MENU_SHELL(charset_menu)->children, gtk_menu_get_active(GTK_MENU(charset_menu))); ++} ++ ++static void rccLanguageCB(GtkWidget * w, gpointer item) { ++ GtkWidget *tempwid, *optionmenu; ++ unsigned int i; ++ char **langs; ++ gint cur; ++ ++ cur = g_list_index(GTK_MENU_SHELL(language_menu)->children, gtk_menu_get_active(GTK_MENU(language_menu))); ++ optionmenu = gtk_menu_get_attach_widget(GTK_MENU(charset_menu)); ++ ++ rcc_current_language = cur; ++ rcc_current_charset = 0; ++ ++ langs = rccPatchGetCharsetList(cur); ++ if (langs) { ++ charset_menu = gtk_menu_new (); ++ for (i=0;langs[i];i++) { ++ tempwid = gtk_menu_item_new_with_label (langs[i]); ++ gtk_object_set_user_data (GTK_OBJECT (tempwid), GINT_TO_POINTER(i)); ++ gtk_menu_append (GTK_MENU (charset_menu), tempwid); ++ gtk_widget_show (tempwid); ++ } ++ ++ gtk_option_menu_remove_menu (GTK_OPTION_MENU (optionmenu)); ++ gtk_option_menu_set_menu (GTK_OPTION_MENU (optionmenu), charset_menu); ++ gtk_option_menu_set_history (GTK_OPTION_MENU (optionmenu), 0); ++ } ++} ++#endif /* HAVE_LIBRCC */ + + static GtkWidget * + CreateConnectToolbar (GtkWidget * parent) +@@ -430,14 +468,19 @@ + {"application/x-rootwin-drop", 0, 1} + }; + GtkWidget *toolbar, *box, *tempwid; ++ GtkWidget *vbox; ++ GtkWidget *tmpoptionmenu; + gftp_config_list_vars * tmplistvar; + char *default_protocol, *tempstr; ++ char **langs; + int i, num; + + toolbar = gtk_handle_box_new (); + ++ vbox = gtk_vbox_new (FALSE, 0); + box = gtk_hbox_new (FALSE, 4); +- gtk_container_add (GTK_CONTAINER (toolbar), box); ++ gtk_box_pack_start(GTK_BOX(vbox), box, FALSE, FALSE, 0); ++ gtk_container_add (GTK_CONTAINER (toolbar), vbox); + gtk_container_border_width (GTK_CONTAINER (box), 5); + + openurl_tooltip = gtk_tooltips_new (); +@@ -548,6 +591,7 @@ + optionmenu = gtk_option_menu_new (); + gtk_box_pack_start (GTK_BOX (tempwid), optionmenu, TRUE, FALSE, 0); + ++ + num = 0; + gftp_lookup_global_option ("default_protocol", &default_protocol); + protocol_menu = gtk_menu_new (); +@@ -584,6 +628,61 @@ + gtk_container_border_width (GTK_CONTAINER (stop_btn), 1); + gtk_box_pack_start (GTK_BOX (box), stop_btn, FALSE, FALSE, 0); + ++#ifdef HAVE_LIBRCC ++ box = gtk_hbox_new (FALSE, 4); ++ gtk_box_pack_start(GTK_BOX(vbox), box, FALSE, FALSE, 0); ++ gtk_container_border_width (GTK_CONTAINER (box), 5); ++ ++ langs = rccPatchGetCharsetList(0); ++ if (langs) { ++ tempwid = gtk_vbox_new (FALSE, 0); ++ gtk_box_pack_end (GTK_BOX (box), tempwid, FALSE, FALSE, 0); ++ ++ tmpoptionmenu = gtk_option_menu_new (); ++ gtk_box_pack_start (GTK_BOX (tempwid), tmpoptionmenu, TRUE, FALSE, 0); ++ ++ charset_menu = gtk_menu_new (); ++ for (i=0;langs[i];i++) { ++ tempwid = gtk_menu_item_new_with_label (langs[i]); ++ gtk_signal_connect(GTK_OBJECT(tempwid), "activate", GTK_SIGNAL_FUNC(rccCharsetCB), NULL); ++ gtk_object_set_user_data (GTK_OBJECT (tempwid), GINT_TO_POINTER(i)); ++ gtk_menu_append (GTK_MENU (charset_menu), tempwid); ++ gtk_widget_show (tempwid); ++ } ++ ++ gtk_option_menu_set_menu (GTK_OPTION_MENU (tmpoptionmenu), charset_menu); ++ gtk_option_menu_set_history (GTK_OPTION_MENU (tmpoptionmenu), rcc_current_charset); ++ ++ tempwid = gtk_label_new (_("Charset: ")); ++ gtk_box_pack_end (GTK_BOX (box), tempwid, FALSE, FALSE, 0); ++ } ++ ++ langs = rccPatchGetLanguageList(); ++ if (langs) { ++ tempwid = gtk_vbox_new (FALSE, 0); ++ gtk_box_pack_end (GTK_BOX (box), tempwid, FALSE, FALSE, 0); ++ ++ tmpoptionmenu = gtk_option_menu_new (); ++ gtk_box_pack_start (GTK_BOX (tempwid), tmpoptionmenu, TRUE, FALSE, 0); ++ ++ language_menu = gtk_menu_new (); ++ for (i=0;langs[i];i++) { ++ tempwid = gtk_menu_item_new_with_label (langs[i]); ++ gtk_signal_connect(GTK_OBJECT(tempwid), "activate", GTK_SIGNAL_FUNC(rccLanguageCB), NULL); ++ gtk_object_set_user_data (GTK_OBJECT (tempwid), GINT_TO_POINTER(i)); ++ gtk_menu_append (GTK_MENU (language_menu), tempwid); ++ gtk_widget_show (tempwid); ++ } ++ ++ gtk_option_menu_set_menu (GTK_OPTION_MENU (tmpoptionmenu), language_menu); ++ gtk_option_menu_set_history (GTK_OPTION_MENU (tmpoptionmenu), rcc_current_language); ++ ++ tempwid = gtk_label_new (_("Language: ")); ++ gtk_box_pack_end (GTK_BOX (box), tempwid, FALSE, FALSE, 0); ++ } ++#endif /* HAVE_LIBRCC */ ++ ++ + gtk_widget_grab_focus (GTK_COMBO (hostedit)->entry); + + return (toolbar); +@@ -1132,6 +1231,16 @@ + add_history (current_wdata->combo, current_wdata->history, + current_wdata->histlen, current_wdata->request->directory); + ++#ifdef HAVE_LIBRCC ++ tempwid = gtk_menu_get_active (GTK_MENU (language_menu)); ++ num = GPOINTER_TO_INT (gtk_object_get_user_data (GTK_OBJECT (tempwid))); ++ gftp_set_language(current_wdata->request, num); ++ ++ tempwid = gtk_menu_get_active (GTK_MENU (charset_menu)); ++ num = GPOINTER_TO_INT (gtk_object_get_user_data (GTK_OBJECT (tempwid))); ++ gftp_set_charset(current_wdata->request, num); ++#endif /* HAVE_LIBRCC */ ++ + ftp_connect (current_wdata, current_wdata->request, 1); + } + +@@ -1270,6 +1379,8 @@ + { + GtkWidget *window, *ui; + ++ rccPatchInit(); ++ + /* We override the read color functions because we are using a GdkColor + structures to store the color. If I put this in lib/config_file.c, then + the core library would be dependant on Gtk+ being present */ +@@ -1336,6 +1447,8 @@ + GDK_THREADS_ENTER (); + gtk_main (); + GDK_THREADS_LEAVE (); ++ ++ rccPatchFree(); + + return (0); + } diff --git a/net-ftp/gftp/gftp-2.0.18-r5.ebuild b/net-ftp/gftp/gftp-2.0.18-r5.ebuild new file mode 100644 index 0000000..0906ada --- /dev/null +++ b/net-ftp/gftp/gftp-2.0.18-r5.ebuild @@ -0,0 +1,54 @@ +# Copyright 1999-2006 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 +# $Header: /var/cvsroot/gentoo-x86/net-ftp/gftp/gftp-2.0.18-r4.ebuild,v 1.1 2006/01/22 05:44:32 compnerd Exp $ + +inherit eutils + +DESCRIPTION="Gnome based FTP Client" +SRC_URI="http://www.gftp.org/${P}.tar.bz2" +HOMEPAGE="http://www.gftp.org" + +LICENSE="GPL-2" +SLOT="0" +KEYWORDS="~alpha amd64 ~ppc ~ppc64 ~sparc x86" +IUSE="gtk ssl rcc" + +RDEPEND=">=dev-libs/glib-2 + sys-devel/gettext + sys-libs/ncurses + sys-libs/readline + gtk? ( >=x11-libs/gtk+-2 ) + ssl? ( dev-libs/openssl ) + rcc? ( app-i18n/librcc )" + +DEPEND="${RDEPEND} + >=dev-util/pkgconfig-0.9" + +src_unpack() { + unpack ${A} + cd ${S} + + # patch to allow fetching of ssh2 files + # that are read-only, see bug #91269 and upstream link. + epatch ${FILESDIR}/${P}-ssh2-read.patch + +#SDS + epatch ${FILESDIR}/${P}-fix_gtk1.patch + if use ssl; then + epatch ${FILESDIR}/gftp-ds-rcc.patch + aclocal + automake + autoconf + fi +#EDS +} + +src_compile() { + econf $(use_enable gtk gtkport) $(use_enable ssl) || die "configure failed" + emake || die "make failed" +} + +src_install() { + make DESTDIR=${D} install || die "install failed" + dodoc ChangeLog README* THANKS TODO docs/USERS-GUIDE +} -- cgit v1.2.3