2009-08-07 10 views
1

私はOpenSSLライブラリへのpyOpenSSLインターフェイスを使用していますが、必要な機能がいくつかありません。これらのメソッドをサポートするためには変更できません。理由)。オブジェクトの内部構造のポインタにアクセスする

私が達成したいことは、OpenSSLオブジェクトポインタを取得することです。その後、私はctypesを通して欠けている機能を呼び出すことができます。それを行う最善の方法は何ですか?

私はid()を使用してpyOpenSSLオブジェクトへのポインタを取得できることをすでに発見しました。どうすればssl変数にアクセスできますか? pyOpenSSL/connections.hから

:あなたは彼らと何もできないよう

typedef struct { 
     PyObject_HEAD 
     SSL     *ssl; 
     ssl_ContextObj  *context; 
     PyObject   *socket; 
     PyThreadState  *tstate; 
     PyObject   *app_data; 
    } ssl_ConnectionObj; 

答えて

3

ポインタは本当に、Pythonであまり意味がありません。それらは整数にすぎません。ご存知のように、idメソッドを使ってオブジェクトのアドレスを取得することができます。しかし、それはまさにそのアドレスです。それはポインタではないので、あなたはそれで何もできません。

また、次のように表示されます。Pythonのすべてがポインタです。 pyOpenSSLオブジェクトの変数は、ポインタです。しかし、pyOpenSSLオブジェクトへのポインタであり、接続構造体へのポインタではありません。あなたはその構造に直接アクセスすることはできません。

代わりに何をしたいか教えてください。たぶんもう一つの解決策があります。

+0

pyOpenSSLで利用できないSSL_set_verify関数を使用したい(SSL接続ではなくコンテキストオブジェクトに対してのみset_verifyがある)、pyOpenSSLを変更したくない(Ubuntuでパッケージ化されたものを使いたいパッチを提供しても変更される可能性の低いLTS 8.04)。 – math

+0

一般に公開されていない関数は使用できません。あなたはpyOpenSSLを一切使わずにスキップして、ctypesを使うだけでも可能です。私はctypesに慣れていませんが、pyOpenSSLから正しいハンドルを取得するのは難しいので、ミックスで使用することはできません。 私はあなたの最善の策は、ソースからpyOpenSSLをインストールしてパッチを提出することだと思います。 –

関連する問題