[Twisted-Python] More Conch Questions

Robert DiFalco robert.difalco at gmail.com
Mon Nov 30 21:21:19 MST 2020


Alright, it's a but in twisted. How do I report twisted bugs? Under python3
service.name is bytes and not a string.

https://github.com/twisted/twisted/blob/trunk/src/twisted/conch/client/direct.py#L86

On Mon, Nov 30, 2020 at 4:00 PM Robert DiFalco <robert.difalco at gmail.com>
wrote:

> Ok, my solution is to re-write the connect function like this. Any issues
> with this approach?
>
> def connect(options, userAuthObject):
>     d_connect = Deferred()
>     d_authorized = Deferred()
>
>     factory = SFTPClientFactory(d_connect, options, userAuthObject)
>
>     def _connect_failed(*args, **kwargs):
>         d_authorized.errback(args[0])
>
>     def _connected(*args, **kwargs):
>         # Reset the factory's deferred
>         factory.d = d_authorized
>
>     d_connect.addErrback(_connect_failed).addCallback(_connected)
>
>     reactor.connectTCP(options["host"], options["port"], factory)
>
>     return d_authorized.addCallback(lambda ignore: factory)
>
>
> On Sun, Nov 29, 2020 at 9:41 AM Robert DiFalco <robert.difalco at gmail.com>
> wrote:
>
>> I'm continuing to wrestle with conch, this time around authentication and
>> notifying deferred of auth failure.
>>
>> It seems like the SSH factory has a deferred to be notified of auth
>> failures here:
>>
>> https://github.com/twisted/twisted/blob/trunk/src/twisted/conch/client/direct.py#L61-L66
>>
>> Unfortunately, this deferred is cleared because prior to auth, it
>> receives this on successful connect:
>>
>> https://github.com/twisted/twisted/blob/trunk/src/twisted/conch/client/direct.py#L83-L88
>>
>> As you can see this clears the deferred so it is no longer available to
>> get an errback. This also prevents the SSHClientTransport from getting a
>> sendDisconnect.
>>
>> To try it change the user to something invalid here:
>> https://gist.github.com/radifalco/5a5cca4bf8d49d5c61113e36f9be7553#file-sftp-py-L328
>>
>> This will never get a callback to errback.
>>
>> I guess I would have expected this to get the error but it actually
>> succeeds with None. As a result there is no deferred to get the auth
>> failure and my app waits forever for a notification.
>>
>> There is one ting I *think* I know how to do, add a timeout with a
>> callback later on the sftpClient deferred. But that seems lame. What I'd
>> like to do is to get this ConchError as it has the actual reason for the
>> connection failure.  Thoughts?
>>
>>
>> https://github.com/twisted/twisted/blob/trunk/src/twisted/conch/client/direct.py#L61-L66
>>
>>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: </pipermail/twisted-python/attachments/20201130/7a4c4ac6/attachment.htm>


More information about the Twisted-Python mailing list