web-dev-qa-db-ja.com

offsetimaprcの任意のフィールドを暗号化できますか?

たとえばGmailと同期するためにofflineimapを使用している場合は、パスワードを暗号化し、pythonスクリプトを使用して実行時に復号化できます。これは、設定によって行われます。

remotepass = passwd( 'gmail.gpg')

passwdがpython関数であるofflineimaprcファイル内。このようなpython関数の使用は、remotepassのような特定のキーに制限されていますか。上記の例、または理論的にはすべてのキーの右側にあるpython関数を使用できますか?私が尋ねる理由は次のとおりです:他のキーの他の値を暗号化しようとしていますただし、次のようなエラーが発生します。

ERROR: While attempting to sync account 'gmail'
  ('http error', 401, 'Unauthorized', <httplib.HTTPMessage instance at 0x7f8ca13541b8>) (configuration is: {'client_secret': "passwd('gmail_client_secret.gpg')", 'grant_type': 'refresh_token', 'refresh_token': "passwd('gmail_rf_token.gpg')", 'client_id': "passwd('gmail_client_id.gpg')"})

関数passwdが実際に実行されているかどうかはわかりません。 python関数をpythonインタープリターで実行すると、正しい結果が得られます。

1
math

私が理解しているように、evaled as python code。これらのいくつかは、で終わるキーによって構成ファイルで明示的にされます。 remotepassevalなどの文字列「eval」ですが、nametransなどのコメントにのみ記載されているものもありますが、これは明らかに関数である必要があります。

offlineimapはPythonであるため、おそらくディストリビューションでソースを見つけることができます。私の場合、ファイル/usr/lib/python2.7/site-packages/offlineimap/repository/IMAP.pyにはremotepassevalを処理するコードがあり、これはかなり理解しやすいものです。

    passwd = self.getconf('remotepasseval', None)
    if passwd != None:
        return self.localeval.eval(passwd)

localevalの他の使用法を探して、この方法で処理されるキーを確認できます。また、他のキーを評価したい場合は、同様の呼び出しでこのプログラムの独自のバージョンを作成することはそれほど難しくないかもしれません。

2
meuh