2

次のコマンドを呼び出してランダムに生成されたパスワードを渡す、非常に単純な rake タスクを作成しようとしています (そして、かなり大きな rake タスクにマージします)。さしあたっては、ランダム生成を偽装して、パスワードを「test」に設定してみましょう。

createuser -SDPRE test

私のタスク用のコードは次のとおりです。

desc "Create a test user with test password"
task "test" do
  puts('Creating User')
  IO.popen "createuser -SDRPE test", 'w+' do |io|
    io.write "test\ntest\n"
    io.close_write
  end

  raise 'createuser failed' unless $?.success?
end

io.writeまだパスワードを入力する必要があるため、機能していないようです。また、破壊されていません。タスクを実行して手動でパスワードを入力すると、そのパスワードを使用してpsql.

など、かなりの数のバリエーションを試しましたが、それを使用する他の例を見たので、ファイルio.closeを開きます。'w''r''r+'

これを機能させる方法に少し困惑しています。アイデア/コメント/回答をいただければ幸いです。

編集1:これは、違いが生じる場合に備えて、Debian(Lenny)Linuxシステム上にあります。

4

2 に答える 2

4

createuser/dev/ttyパスワードを読み取るために開いています

パスワードを読み取るプログラムは通常、パスワードに関してUnixツールのパラダイムを犠牲にします。/dev/ttyこれは、他の機能が標準の入力と出力を尊重し、インタラクティブなパスワードを開く間、すべてを一時停止できるため、合理的な方法です。

いずれにせよ、それが実際に開いているstrace(1)ことを明らかにします。createuser/dev/tty

すべてが失われるわけではなく、Perlプログラムcreateuserへのリンクにすぎません。/usr/share/postgresql-common/pg_wrapperパスワードスクリプトの互換性のためにハッキングされる可能性があると確信しています。

于 2009-11-12T20:07:13.877 に答える
0

これがあなたの質問に対する回答ではないことは承知していますが、シェル コマンドを呼び出す代わりに SQL を使用して PG ユーザーを作成することを検討しましたか?

http://www.postgresql.org/docs/8.0/interactive/sql-createuser.html

より安全で信頼できるようです。

于 2009-11-12T19:19:13.367 に答える