diff --git a/src/trees-common.c b/src/trees-common.c
index 6f9271211acf8864e9a967223d2247aeda974487..5698d4e4dea7e5d2aba664e0405e5d9b5584f455 100644
--- a/src/trees-common.c
+++ b/src/trees-common.c
@@ -46,35 +46,6 @@ trees_initialize(void)
   return 0;
 }
 
-const char *
-trees_read_line_fd(pool_t pool, int fd)
-{
-  string_t *buffer = str_new(pool, MAXIMAL_PASSWORD_LENGTH);
-  char *result = str_c_modifiable(buffer);
-  char *pointer = result;
-
-  ssize_t read_result = read(fd, pointer, 1);
-  unsigned int bytes_read = 0;
-  while (read_result != -1 && pointer[0] != '\n') {
-    pointer++;
-    bytes_read++;
-
-    if (bytes_read > MAXIMAL_PASSWORD_LENGTH) {
-      i_error("error reading form fd %d: password too long", fd);
-      break;
-    }
-
-    read_result = read(fd, pointer, 1);
-  }
-
-  pointer[0] = 0;
-
-  if (read_result == -1)
-    i_error("error reading from fd %d: %s (%d)", fd, strerror(errno), errno);
-
-  return result;
-}
-
 #ifdef DEBUG_STREAMS
 
 void
diff --git a/src/trees-common.h b/src/trees-common.h
index d8ca434db67a02f8cf44dcee0a358af0245f2c83..821883b545e1afa2090c27005e13d841f83fc2b8 100644
--- a/src/trees-common.h
+++ b/src/trees-common.h
@@ -37,7 +37,6 @@
 /* Aligns with the docevot default buffer size. */
 #define CHUNK_SIZE 8192
 #define ENCRYPTED_CHUNK_SIZE (crypto_box_SEALBYTES + CHUNK_SIZE)
-#define MAXIMAL_PASSWORD_LENGTH 256
 #define MAX_ISTREAM_BUFFER_SIZE (ENCRYPTED_CHUNK_SIZE * 2)
 
 #define MIN(a,b) \
diff --git a/src/trees-plugin.c b/src/trees-plugin.c
index 8fe131ee8ee384224bbdfb3f4eb5f8d6149d7046..238d03ff20fe36d640acc80ff811fcd4483f0563 100644
--- a/src/trees-plugin.c
+++ b/src/trees-plugin.c
@@ -135,7 +135,7 @@ static int
 trees_get_private_key(struct mail_user *user,
                       struct trees_user *suser)
 {
-  int have_salt, password_fd;
+  int have_salt;
   unsigned long long opslimit, memlimit;
   unsigned char pw_salt[crypto_pwhash_SALTBYTES];
   unsigned char sk_nonce[crypto_secretbox_NONCEBYTES];
@@ -149,10 +149,6 @@ trees_get_private_key(struct mail_user *user,
 
   /* Get the user password that we'll use to . */
   password = trees_get_string_setting(user, "trees_password");
-  password_fd = trees_get_integer_setting(user, "trees_password_fd");
-  if (password == NULL && password_fd >= 0) {
-    password = trees_read_line_fd(user->pool, password_fd);
-  }
 
   /* No password means that we are receiving email and have no access to the
    * user private data so stop now. */