• ベストアンサー

sambaのsmbmount使用時のパスワード自動入力方法

c言語でsambaのsmbmountを使用し、各クライアントの共有フォルダをmountし、linuxからでも閲覧するようなプログラムを作成しています。 現在、system()関数を使用し、smbmountまでは動作確認しているのですが、smbmount後のpasswordの自動入力のプログラム記述が分からない状況です。 popenやfopenなどの関数を使用してみましたが、問題は解消できませんでした。 すみませんが、ご教授よろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • Fooky
  • ベストアンサー率71% (59/82)
回答No.1

smbmountのコマンドラインオプション"-o password=xxxx"でパスワードを指定できるのは分かっているんですよね.それだとpsコマンドなんかでパスワードが見えてしまうから,パイプか何かでsmbmountに食わせたいと. ああいうパスワード取得プログラムは,直接/dev/tty(そのプロセスに接続されている制御端末)からパスワードを取得します.標準入力を経由しないんでパイプでは通常は無理です.ただ,多くのプログラムはttyのオープンに失敗した後,標準入力からパスワードを取得するという作戦をとります.ですから,ttyをオープンできないようにしてやればパイプでパスワードを取れるようになる場合があります. で,ttyをオープンできないようにするには,制御端末から切り離してしまえばOKです.それにはまず/dev/ttyをオープンしてから,そのファイルディスクリプターをioctl()で指定して,TIOCNOTTYコマンドで切り離します.↓ int main ( int argc, char **argv ) { int pfd[2]; int pid; int fd; char pswd[] = "xxxxxxx\n"; pipe (pfd); if ( (pid = fork ()) == 0 ){ /* 子プロセス */ /* パイプを標準入力につなぐ */ close (pfd[1]); close (0); dup (pfd[0]); /* /dev/ttyをオープン */ fd = open ("/dev/tty", O_RDONLY); /* 制御端末切り離し */ ioctl (fd, TIOCNOTTY); system ("smbmount //srv/rsc /mntpnt"); exit (0); } /* 親プロセス */ close (pfd[0]); write (pfd[1], pswd, strlen(pswd)); exit(0); } こうすると,子プロセスをpsコマンドで見るとTTYの項目が?になっていて,制御端末から切り離されます.smbmountが上記の作戦にしたがうならこれでいけます.ちなみにうちではOKでした.sambaのバージョンによってはもしかしたらだめかも.

996
質問者

お礼

ありがとうございます。 大変に参考になりました。

関連するQ&A