Warning, /frameworks/kio/autotests/ftpd is written in an unsupported language. File is not indexed.
0001 #!/usr/bin/env ruby
0002 # SPDX-FileCopyrightText: 2019 Harald Sitter <sitter@kde.org>
0003 #
0004 # SPDX-License-Identifier: LGPL-2.0-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL
0005
0006 require 'ftpd'
0007 require 'logger'
0008 require 'tmpdir'
0009
0010 STDOUT.sync = true
0011
0012 # Monkey patch the site handler, it's not implemented so fake it a bit for ftp
0013 # worker purposes.
0014
0015 # FIXME: and yet I seee kio_ftp(8319)/(kf5.kio.kio_ftp) Ftp::ftpChmod: ftpChmod: CHMOD not supported - disabling
0016
0017 module Ftpd
0018 class CmdSite
0019 alias cmd_site_orig cmd_site
0020 def cmd_site(_argument)
0021 # We don't support chmod bugger off.
0022 reply '500 cmd_site.'
0023 end
0024 end
0025 end
0026
0027 module Ftpd
0028 class CmdRest
0029 def cmd_rest(_argument)
0030 reply "350 cmd_rest."
0031 end
0032 end
0033 end
0034
0035 module Ftpd
0036 class CmdStor
0037 alias cmd_stor_orig cmd_stor
0038 def cmd_stor(argument)
0039 if argument.include?('__badResume__')
0040 reply '550 out of quota'
0041 else
0042 cmd_stor_orig(argument)
0043 end
0044 end
0045 end
0046 end
0047
0048 # Add some simulation capabilities to the file system
0049 class MangledDiskFileSystem < Ftpd::DiskFileSystem
0050 def accessible?(path, *args)
0051 return false if path.include?('__inaccessiblePath__')
0052
0053 super(path, *args)
0054 end
0055 end
0056
0057 class Driver
0058 def initialize(temp_dir)
0059 @temp_dir = temp_dir
0060 end
0061
0062 def authenticate(_user, _password)
0063 true
0064 end
0065
0066 def file_system(_user)
0067 MangledDiskFileSystem.new(@temp_dir)
0068 end
0069 end
0070
0071 # NB: stderr is used to communicate with the parent!
0072
0073 port = ARGV.fetch(0)
0074 temp_dir = ARGV.fetch(1)
0075
0076 driver = Driver.new(temp_dir)
0077 server = Ftpd::FtpServer.new(driver)
0078 server.port = port
0079 server.log = Logger.new($stdout)
0080 server.start
0081 warn "port = #{server.bound_port}"
0082 puts "Server listening on port #{server.bound_port}"
0083 loop do
0084 sleep(1)
0085 end