Merge lp:~jelmer/brz/srv-records into lp:brz/3.2

Proposed by Jelmer Vernooij
Status: Superseded
Proposed branch: lp:~jelmer/brz/srv-records
Merge into: lp:brz/3.2
Diff against target: 78 lines (+26/-5)
3 files modified
breezy/bzr/smart/medium.py (+3/-3)
breezy/transport/__init__.py (+18/-0)
breezy/transport/sftp.py (+5/-2)
To merge this branch: bzr merge lp:~jelmer/brz/srv-records
Reviewer Review Type Date Requested Status
Breezy developers Pending
Review via email: mp+413539@code.launchpad.net

This proposal has been superseded by a proposal from 2022-10-27.

Description of the change

Proof of concept: Add really basically support for srv records.

To post a comment you must log in.

Unmerged revisions

7569. By Jelmer Vernooij

Add really basically support for srv records.

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'breezy/bzr/smart/medium.py'
2--- breezy/bzr/smart/medium.py 2020-02-18 01:57:45 +0000
3+++ breezy/bzr/smart/medium.py 2021-12-31 13:44:49 +0000
4@@ -51,7 +51,7 @@
5 )
6 from breezy.i18n import gettext
7 from breezy.bzr.smart import client, protocol, request, signals, vfs
8-from breezy.transport import ssh
9+from breezy.transport import ssh, lookup_srv_single
10 """)
11 from ... import (
12 errors,
13@@ -1029,9 +1029,9 @@
14 vendor = ssh._get_ssh_vendor()
15 else:
16 vendor = self._vendor
17+ (host, port) = lookup_srv_single('_bzr+ssh._tcp', self._ssh_params.host, self._ssh_params.port)
18 self._ssh_connection = vendor.connect_ssh(self._ssh_params.username,
19- self._ssh_params.password, self._ssh_params.host,
20- self._ssh_params.port,
21+ self._ssh_params.password, host, port,
22 command=[self._ssh_params.bzr_remote_path, 'serve', '--inet',
23 '--directory=/', '--allow-writes'])
24 io_kind, io_object = self._ssh_connection.get_sock_or_pipes()
25
26=== modified file 'breezy/transport/__init__.py'
27--- breezy/transport/__init__.py 2021-01-10 00:25:52 +0000
28+++ breezy/transport/__init__.py 2021-12-31 13:44:49 +0000
29@@ -1629,6 +1629,24 @@
30 raise errors.TooManyRedirections
31
32
33+def lookup_srv_single(service, host, port=None):
34+ """Lookup a single host/port combination to connect to."""
35+ try:
36+ import dns.resolver
37+ except ModuleNotFoundError:
38+ mutter('dns.resolver not found, ignoring SRV record')
39+ return (host, port)
40+ srv_name = service + '.' + host
41+ try:
42+ srv_records = dns.resolver.query(srv_name, 'SRV')
43+ except dns.resolver.NXDOMAIN:
44+ mutter('srv record %s not found', srv_name)
45+ return (host, port)
46+ for srv in srv_records:
47+ return (str(srv.target).rstrip('.'), port or srv.port)
48+ return (host, port)
49+
50+
51 class Server(object):
52 """A Transport Server.
53
54
55=== modified file 'breezy/transport/sftp.py'
56--- breezy/transport/sftp.py 2020-02-18 01:57:45 +0000
57+++ breezy/transport/sftp.py 2021-12-31 13:44:49 +0000
58@@ -52,6 +52,7 @@
59 FileFileStream,
60 _file_streams,
61 ssh,
62+ lookup_srv_single,
63 ConnectedTransport,
64 )
65
66@@ -407,8 +408,10 @@
67 auth = config.AuthenticationConfig()
68 user = auth.get_user('ssh', self._parsed_url.host,
69 self._parsed_url.port)
70- connection = vendor.connect_sftp(self._parsed_url.user, password,
71- self._parsed_url.host, self._parsed_url.port)
72+ (host, port) = lookup_srv_single(
73+ '_sftp._tcp', self._parsed_url.host, self._parsed_url.port)
74+ connection = vendor.connect_sftp(
75+ self._parsed_url.user, password, host, port)
76 return connection, (user, password)
77
78 def disconnect(self):

Subscribers

People subscribed via source and target branches