diff --git a/src/allmydata/client.py b/src/allmydata/client.py index a768ba354..47073dbca 100644 --- a/src/allmydata/client.py +++ b/src/allmydata/client.py @@ -1071,7 +1071,7 @@ class _Client(node.Node, pollmixin.PollMixin): if accountfile: accountfile = self.config.get_config_path(accountfile) accounturl = self.config.get_config("sftpd", "accounts.url", None) - sftp_portstr = self.config.get_config("sftpd", "port", "8022") + sftp_portstr = self.config.get_config("sftpd", "port", "tcp:8022") pubkey_file = self.config.get_config("sftpd", "host_pubkey_file") privkey_file = self.config.get_config("sftpd", "host_privkey_file") diff --git a/src/allmydata/frontends/sftpd.py b/src/allmydata/frontends/sftpd.py index db914fa45..b25ac0270 100644 --- a/src/allmydata/frontends/sftpd.py +++ b/src/allmydata/frontends/sftpd.py @@ -1975,6 +1975,8 @@ class Dispatcher(object): class SFTPServer(service.MultiService): + name = "frontend:sftp" + def __init__(self, client, accountfile, accounturl, sftp_portstr, pubkey_file, privkey_file): precondition(isinstance(accountfile, (unicode, NoneType)), accountfile) diff --git a/src/allmydata/test/data/openssh-rsa-2048 b/src/allmydata/test/data/openssh-rsa-2048 new file mode 100644 index 000000000..9c8669d03 --- /dev/null +++ b/src/allmydata/test/data/openssh-rsa-2048 @@ -0,0 +1,27 @@ +-----BEGIN OPENSSH PRIVATE KEY----- +b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAABFwAAAAdzc2gtcn +NhAAAAAwEAAQAAAQEA8eSX2j8BNsH1yEHJpRrXvRDwG605hzxjhfz7me9Vz2t5mUxzEELn +PefYJi8bqZnHOaOI2HvFU8E+m2zZemDPh5gry911R9AanTNpaSgkwf1s0gMhVL/IEo0FV3 +pEZvcBevbWZD67narrUy4al1OREolM34VPgsR0FvpAH9dGHfUevFdX/I5LloxKHlXwpbY+ +zuX0ZaaLqE15/NzFAFwdyf8A46Y546dj8b1y9seWgh7c3dVghhJrVmx2b0QNWtBBNt9831 +zR4OMS3d8nFKgMaEZQnAtt9IrVAV7a+KoAzM0XbC/hxlq3CfuMns5UI/pfJnO74ubITU+x +w0X74v6xOwAAA8gG6fYoBun2KAAAAAdzc2gtcnNhAAABAQDx5JfaPwE2wfXIQcmlGte9EP +AbrTmHPGOF/PuZ71XPa3mZTHMQQuc959gmLxupmcc5o4jYe8VTwT6bbNl6YM+HmCvL3XVH +0BqdM2lpKCTB/WzSAyFUv8gSjQVXekRm9wF69tZkPrudqutTLhqXU5ESiUzfhU+CxHQW+k +Af10Yd9R68V1f8jkuWjEoeVfCltj7O5fRlpouoTXn83MUAXB3J/wDjpjnjp2PxvXL2x5aC +Htzd1WCGEmtWbHZvRA1a0EE233zfXNHg4xLd3ycUqAxoRlCcC230itUBXtr4qgDMzRdsL+ +HGWrcJ+4yezlQj+l8mc7vi5shNT7HDRfvi/rE7AAAAAwEAAQAAAQBc8ukC/RjbULbAJ79z +SRhDV2HcULj9ZVAc6XRI13XSyUqlhIHmar7uw8sECTAJAMVUOanY/d56a5RCJxZ+dvrn8K +pLoSJy4N2JMHs95CYTwOzy2i8RoMwhjLzTu3DTW/DerkD9rjlrwYTBpsKjCYKCa+31KgW+ +ivzM44aGdbNEyO+yHaxdcyEr3OLcRMppgZmwTieFnG053lCP5XyYRQmZ1a78G6WOzpOgbO +2N6Z1sbEqTMVd3oxFZAbmqA8kE4jLJzRcso/SSK5NDs22JzMfxByJQSlitWzDDvHdWpQpy +8C6Eu7+48ataLI68VOOXuDWDy9Dck0ev89u7Z4vNLWBhAAAAgAndOZZ0C179Um6sn6gmfM +0ttXEaSIqYNGRhkoYqn9vvw03bOMbSnqdEJiwFhbE/rWv7PypB5MeY7tRoCyBMWsUYj0pA +HKSl68diLr5g5EOIRGAWu8e//7T2HgZKOo+VaG1IXgmb7PUoAJ6Tzsmb4jdnYfg+BP/TDd +e9yCcoiT2fAAAAgQD6T7Kr6ECg0ME8vt/ixsjKdA2zS9SIHyjCMXbdMv1Ok1hkr5rRWbbZ +jm79fF+a8pOQUg30Qw2JUx7II50akt2xL6zesGDDUcOHD2GE/B6Ftji53G3fwWZCqeQ5sD +YP25qAWlrqDBGJvF+hkEdlceS8etYJ3XWXjNIYwfR7frQvkQAAAIEA92Pq3FWH63TS3Lqe +mQjhfNV75tU0AwENG+xlI1g0nQb7Qsdbm6rIg6XqewUfw03Q+/AqPvwG/1mbyVF7jRZ+qw +cl69yM70c9qY74GHjIIOOcC8Kgv29LQrm/VqVp0Lesn5RA8SIiLcMfyYBTEX8V9VY99Zkd +v6WwRr4XK1bPRgsAAAAOZXhhcmt1bkBiYXJ5b24BAgMEBQ== +-----END OPENSSH PRIVATE KEY----- diff --git a/src/allmydata/test/data/openssh-rsa-2048.pub b/src/allmydata/test/data/openssh-rsa-2048.pub new file mode 100644 index 000000000..3c7a32df6 --- /dev/null +++ b/src/allmydata/test/data/openssh-rsa-2048.pub @@ -0,0 +1 @@ +ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDx5JfaPwE2wfXIQcmlGte9EPAbrTmHPGOF/PuZ71XPa3mZTHMQQuc959gmLxupmcc5o4jYe8VTwT6bbNl6YM+HmCvL3XVH0BqdM2lpKCTB/WzSAyFUv8gSjQVXekRm9wF69tZkPrudqutTLhqXU5ESiUzfhU+CxHQW+kAf10Yd9R68V1f8jkuWjEoeVfCltj7O5fRlpouoTXn83MUAXB3J/wDjpjnjp2PxvXL2x5aCHtzd1WCGEmtWbHZvRA1a0EE233zfXNHg4xLd3ycUqAxoRlCcC230itUBXtr4qgDMzRdsL+HGWrcJ+4yezlQj+l8mc7vi5shNT7HDRfvi/rE7 exarkun@baryon diff --git a/src/allmydata/test/test_client.py b/src/allmydata/test/test_client.py index 0f0648a4c..f6d3d4b84 100644 --- a/src/allmydata/test/test_client.py +++ b/src/allmydata/test/test_client.py @@ -1,5 +1,4 @@ import os, sys -import mock from functools import ( partial, ) @@ -422,19 +421,32 @@ class Basic(testutil.ReallyEqualMixin, unittest.TestCase): """ configuration for sftpd results in it being started """ + root = FilePath(self.mktemp()) + root.makedirs() + accounts = root.child(b"sftp-accounts") + accounts.touch() + + data = FilePath(__file__).sibling(b"data") + privkey = data.child(b"openssh-rsa-2048") + pubkey = data.child(b"openssh-rsa-2048.pub") + basedir = u"client.Basic.test_ftp_create" create_node_dir(basedir, "testing") with open(os.path.join(basedir, "tahoe.cfg"), "w") as f: - f.write( + f.write(( '[sftpd]\n' 'enabled = true\n' - 'accounts.file = foo\n' - 'host_pubkey_file = pubkey\n' - 'host_privkey_file = privkey\n' - ) - with mock.patch('allmydata.frontends.sftpd.SFTPServer') as p: - yield client.create_client(basedir) - self.assertTrue(p.called) + 'accounts.file = {}\n' + 'host_pubkey_file = {}\n' + 'host_privkey_file = {}\n' + ).format(accounts.path, pubkey.path, privkey.path)) + + client_node = yield client.create_client( + basedir, + ) + sftp = client_node.getServiceNamed("frontend:sftp") + self.assertIs(sftp.parent, client_node) + @defer.inlineCallbacks def test_ftp_auth_keyfile(self):