about summary refs log tree commit diff
path: root/nixpkgs/pkgs/servers/ftp
diff options
context:
space:
mode:
authorAlyssa Ross <hi@alyssa.is>2019-01-07 02:18:36 +0000
committerAlyssa Ross <hi@alyssa.is>2019-01-07 02:18:47 +0000
commit36f56d99fa0a0765c9f1de4a5f17a9b05830c3f2 (patch)
treeb3faaf573407b32aa645237a4d16b82778a39a92 /nixpkgs/pkgs/servers/ftp
parent4e31070265257dc67d120c27e0f75c2344fdfa9a (diff)
parentabf060725d7614bd3b9f96764262dfbc2f9c2199 (diff)
downloadnixlib-36f56d99fa0a0765c9f1de4a5f17a9b05830c3f2.tar
nixlib-36f56d99fa0a0765c9f1de4a5f17a9b05830c3f2.tar.gz
nixlib-36f56d99fa0a0765c9f1de4a5f17a9b05830c3f2.tar.bz2
nixlib-36f56d99fa0a0765c9f1de4a5f17a9b05830c3f2.tar.lz
nixlib-36f56d99fa0a0765c9f1de4a5f17a9b05830c3f2.tar.xz
nixlib-36f56d99fa0a0765c9f1de4a5f17a9b05830c3f2.tar.zst
nixlib-36f56d99fa0a0765c9f1de4a5f17a9b05830c3f2.zip
Add 'nixpkgs/' from commit 'abf060725d7614bd3b9f96764262dfbc2f9c2199'
git-subtree-dir: nixpkgs
git-subtree-mainline: 4e31070265257dc67d120c27e0f75c2344fdfa9a
git-subtree-split: abf060725d7614bd3b9f96764262dfbc2f9c2199
Diffstat (limited to 'nixpkgs/pkgs/servers/ftp')
-rw-r--r--nixpkgs/pkgs/servers/ftp/bftpd/default.nix36
-rw-r--r--nixpkgs/pkgs/servers/ftp/pure-ftpd/default.nix22
-rw-r--r--nixpkgs/pkgs/servers/ftp/vsftpd/CVE-2015-1419.patch104
-rw-r--r--nixpkgs/pkgs/servers/ftp/vsftpd/default.nix51
4 files changed, 213 insertions, 0 deletions
diff --git a/nixpkgs/pkgs/servers/ftp/bftpd/default.nix b/nixpkgs/pkgs/servers/ftp/bftpd/default.nix
new file mode 100644
index 000000000000..02bf714a42bf
--- /dev/null
+++ b/nixpkgs/pkgs/servers/ftp/bftpd/default.nix
@@ -0,0 +1,36 @@
+{ stdenv, fetchurl }:
+
+let
+  pname = "bftpd";
+
+in stdenv.mkDerivation rec {
+  name = "${pname}-${version}";
+  version = "5.0";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/project/${pname}/${pname}/${name}/${name}.tar.gz";
+    sha256 = "1qagqsbg7zblkhg3vrj47k5f1q09r4az7gna86rxf253kmg90yqp";
+  };
+
+  preConfigure = ''
+    sed -re 's/-[og] 0//g' -i Makefile*
+  '';
+
+  postInstall = ''
+    mkdir -p $out/share/doc/${pname}
+    mv $out/etc/*.conf $out/share/doc/${pname}
+    rm -rf $out/{etc,var}
+  '';
+
+  enableParallelBuilding = true;
+
+  meta = with stdenv.lib; {
+    inherit version;
+    description = "A minimal ftp server";
+    downloadPage = "http://bftpd.sf.net/download.html";
+    homepage = http://bftpd.sf.net/;
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ raskin ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/servers/ftp/pure-ftpd/default.nix b/nixpkgs/pkgs/servers/ftp/pure-ftpd/default.nix
new file mode 100644
index 000000000000..f41bb726a28c
--- /dev/null
+++ b/nixpkgs/pkgs/servers/ftp/pure-ftpd/default.nix
@@ -0,0 +1,22 @@
+{ stdenv, fetchurl, openssl }:
+
+stdenv.mkDerivation rec {
+  name = "pure-ftpd-1.0.47";
+
+  src = fetchurl {
+    url = "https://download.pureftpd.org/pub/pure-ftpd/releases/${name}.tar.gz";
+    sha256 = "1b97ixva8m10vln8xrfwwwzi344bkgxqji26d0nrm1yzylbc6h27";
+  };
+
+  buildInputs = [ openssl ];
+
+  configureFlags = [ "--with-tls" ];
+
+  meta = with stdenv.lib; {
+    description = "A free, secure, production-quality and standard-conformant FTP server";
+    homepage = https://www.pureftpd.org;
+    license = licenses.isc; # with some parts covered by BSD3(?)
+    maintainers = [ maintainers.lethalman ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/servers/ftp/vsftpd/CVE-2015-1419.patch b/nixpkgs/pkgs/servers/ftp/vsftpd/CVE-2015-1419.patch
new file mode 100644
index 000000000000..0a6144395116
--- /dev/null
+++ b/nixpkgs/pkgs/servers/ftp/vsftpd/CVE-2015-1419.patch
@@ -0,0 +1,104 @@
+Description: CVE-2015-1419: config option deny_file is not handled correctly
+Author: Marcus Meissner <meissner@suse.com>
+Origin: https://bugzilla.novell.com/show_bug.cgi?id=CVE-2015-1419
+Bug-Debian: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=776922
+Last-Update: 2015-02-24
+---
+This patch header follows DEP-3: http://dep.debian.net/deps/dep3/
+Index: trunk/ls.c
+===================================================================
+--- trunk.orig/ls.c
++++ trunk/ls.c
+@@ -7,6 +7,7 @@
+  * Would you believe, code to handle directory listing.
+  */
+ 
++#include <stdlib.h>
+ #include "ls.h"
+ #include "access.h"
+ #include "defs.h"
+@@ -243,11 +244,42 @@ vsf_filename_passes_filter(const struct
+   struct mystr temp_str = INIT_MYSTR;
+   struct mystr brace_list_str = INIT_MYSTR;
+   struct mystr new_filter_str = INIT_MYSTR;
++  struct mystr normalize_filename_str = INIT_MYSTR;
++  const char *normname;
++  const char *path;
+   int ret = 0;
+   char last_token = 0;
+   int must_match_at_current_pos = 1;
++
+   str_copy(&filter_remain_str, p_filter_str);
+-  str_copy(&name_remain_str, p_filename_str);
++
++  /* normalize filepath */
++  path = str_strdup(p_filename_str);
++  normname = realpath(path, NULL);
++  if (normname == NULL)
++     goto out;
++  str_alloc_text(&normalize_filename_str, normname);
++
++  if (!str_isempty (&filter_remain_str) && !str_isempty(&normalize_filename_str)) {
++    if (str_get_char_at(p_filter_str, 0) == '/') {
++      if (str_get_char_at(&normalize_filename_str, 0) != '/') {
++        str_getcwd (&name_remain_str);
++
++        if (str_getlen(&name_remain_str) > 1) /* cwd != root dir */
++          str_append_char (&name_remain_str, '/');
++
++        str_append_str (&name_remain_str, &normalize_filename_str);
++      }
++      else
++       str_copy (&name_remain_str, &normalize_filename_str);
++    } else {
++      if (str_get_char_at(p_filter_str, 0) != '{')
++        str_basename (&name_remain_str, &normalize_filename_str);
++      else
++        str_copy (&name_remain_str, &normalize_filename_str);
++    }
++  } else
++    str_copy(&name_remain_str, &normalize_filename_str);
+ 
+   while (!str_isempty(&filter_remain_str) && *iters < VSFTP_MATCHITERS_MAX)
+   {
+@@ -379,6 +411,9 @@ vsf_filename_passes_filter(const struct
+     ret = 0;
+   }
+ out:
++  free((char*) normname);
++  free((char*) path);
++  str_free(&normalize_filename_str);
+   str_free(&filter_remain_str);
+   str_free(&name_remain_str);
+   str_free(&temp_str);
+Index: trunk/str.c
+===================================================================
+--- trunk.orig/str.c
++++ trunk/str.c
+@@ -723,3 +723,14 @@ str_replace_unprintable(struct mystr* p_
+   }
+ }
+ 
++void
++str_basename (struct mystr* d_str, const struct mystr* path)
++{
++  static struct mystr tmp;
++
++  str_copy (&tmp, path);
++  str_split_char_reverse(&tmp, d_str, '/');
++
++  if (str_isempty(d_str))
++   str_copy (d_str, path);
++}
+Index: trunk/str.h
+===================================================================
+--- trunk.orig/str.h
++++ trunk/str.h
+@@ -101,6 +101,7 @@ void str_replace_unprintable(struct myst
+ int str_atoi(const struct mystr* p_str);
+ filesize_t str_a_to_filesize_t(const struct mystr* p_str);
+ unsigned int str_octal_to_uint(const struct mystr* p_str);
++void str_basename (struct mystr* d_str, const struct mystr* path);
+ 
+ /* PURPOSE: Extract a line of text (delimited by \n or EOF) from a string
+  * buffer, starting at character position 'p_pos'. The extracted line will
diff --git a/nixpkgs/pkgs/servers/ftp/vsftpd/default.nix b/nixpkgs/pkgs/servers/ftp/vsftpd/default.nix
new file mode 100644
index 000000000000..cc7493f9533c
--- /dev/null
+++ b/nixpkgs/pkgs/servers/ftp/vsftpd/default.nix
@@ -0,0 +1,51 @@
+{ stdenv, fetchurl, openssl, sslEnable ? false, libcap, pam }:
+
+stdenv.mkDerivation rec {
+  name = "vsftpd-3.0.3";
+
+  src = fetchurl {
+    url = "https://security.appspot.com/downloads/${name}.tar.gz";
+    sha256 = "1xsyjn68k3fgm2incpb3lz2nikffl9by2safp994i272wvv2nkcx";
+  };
+
+  patches = [ ./CVE-2015-1419.patch ];
+
+  preConfigure = stdenv.lib.optionalString sslEnable ''
+    echo "Will enable SSL"
+    sed -i "/VSF_BUILD_SSL/s/^#undef/#define/" builddefs.h
+  '';
+
+  # The gcc-wrappers use -idirafter for glibc, and vsftpd also, and
+  # their dummyinc come before those of glibc, then the build works bad.
+  prePatch = ''
+    sed -i -e 's/-idirafter.*//' Makefile
+  '';
+
+  preBuild =
+    let
+      sslLibs = if sslEnable then "-lcrypt -lssl -lcrypto" else "";
+    in ''
+      makeFlagsArray=( "LIBS=${sslLibs} -lpam -lcap -fstack-protector" )
+    '';
+
+  # It won't link without this flag, used in CFLAGS
+
+  buildInputs = [ openssl libcap pam ];
+
+  installPhase = ''
+    mkdir -pv $out/sbin
+    install -v -m 755 vsftpd $out/sbin/vsftpd
+
+    mkdir -pv $out/share/man/man{5,8}
+    install -v -m 644 vsftpd.8 $out/share/man/man8/vsftpd.8
+    install -v -m 644 vsftpd.conf.5 $out/share/man/man5/vsftpd.conf.5
+
+    mkdir -pv $out/etc/xinetd.d
+    install -v -m 644 xinetd.d/vsftpd $out/etc/xinetd.d/vsftpd
+  '';
+
+  meta = {
+    platforms = stdenv.lib.platforms.linux;
+    license = stdenv.lib.licenses.gpl2;
+  };
+}