On 19 October 2012 09:28, Glyph <gl...@twistedmatrix.com> wrote:
> On Oct 18, 2012, at 9:41 PM, Nathan Mower <nath...@securitymetrics.com> wrote:
>
>> The following sample code worked until Twisted began to prefer memory BIOs 
>> over socket BIOs.  Now it produces this error...
>>
>> exceptions.AttributeError: 'NoneType' object has no attribute 'getpeername'
>>
>> ...on line 9 where getpeername() is called by the verify() callback.
>>
>> Is there any way to obtain the peer name, given the OpenSSL.SSL.Connection 
>> object passed into verify()?  Anything that surfaces the underlying socket?  
>> (Perhaps something similar to what is done in connectionMade(), which does 
>> work.)  Or alternatively, is there a way to tell the reactor to employ 
>> socket BIOs?
>
> The 'socket' attribute that you're accessing is not a documented attribute of 
> ITransport, so in a way I'm glad that your code broke - this wasn't a valid 
> way to use Twisted in the first place :).  See 
> <http://twistedmatrix.com/documents/current/api/twisted.internet.interfaces.ITransport.html>.
>
> Now, as it happens, 
> <http://twistedmatrix.com/documents/current/api/twisted.protocols.tls.TLSMemoryBIOProtocol.html>
>  implements 
> <http://twistedmatrix.com/documents/current/api/twisted.internet.interfaces.ISSLTransport.html>
>  which is a subinterface of 
> <http://twistedmatrix.com/documents/current/api/twisted.internet.interfaces.ITCPTransport.html>,
>  which is therefore guaranteed to have a getPeer method 
> <http://twistedmatrix.com/documents/current/api/twisted.internet.interfaces.ITCPTransport.html#getPeer>
>  that returns an IPv4Address 
> <http://twistedmatrix.com/documents/current/api/twisted.internet.address.IPv4Address.html>
>  or IPv6Address 
> <http://twistedmatrix.com/documents/current/api/twisted.internet.address.IPv6Address.html>,
>  both of which have a 'host' attribute that is the hostname.
>
> So, in short, substitute "self.transport.getPeer().host" and your code should 
> work again.

Hi,

Thanks for the explanation about new interfaces.

I think that the initial question was about the
SSL.Context.set_verify(connection, certificate, errnum, errdepth,
code) callback.

>From what I can see, SSL.Context or SSL.Connection has no transport attribute.

In previous version there was SSL.Connection.getpeername()

-- 
Adi Roiban

_______________________________________________
Twisted-Python mailing list
Twisted-Python@twistedmatrix.com
http://twistedmatrix.com/cgi-bin/mailman/listinfo/twisted-python

Reply via email to