2017-01-10 3 views
0

私はそれがこの時点でユーザ名とパスワードの入力を求められますアプリケーション内からどのようにdavfsをマウントできますか?

sudo mount -t davfs https://myserver.com /tmp/dav 

経由でのWebDAV経由マウントすることができ、リモートファイルシステムを持っています。

次に、fstabにエントリを追加し、~/.davfs2/secrets fileを作成しました。私は今

mount /tmp/dav 

を実行した場合 それは動作します。

私はこれをCコードから自動的にアプリケーション内にマウントする必要があります。

は、私が呼び出す場合:

int result = mount("https://myserver.com", "/tmp/dav", "davfs", 0, "user,noauto,file_mode=600,dir_mode=700"); 

マウント、結果を返す-1と、errnoは19に設定されています:strerrorをプリント "はそのようなデバイス"。

マウントのmanページには示しています

ENODEV filesystemtype not configured in the kernel. 

私はこれが動作するように取得できますか?それはdavfsがヒューズベースなのか?

答えて

0

答えは私が思ったよりも簡単であることが判明しました。私はパスワードのプロンプトも削除したいと指摘しました。これが私が解決した方法です。

これが判明しました。mount.davfsは、mountコマンドによって実行されるサーバです。しかし、それは登録されたファイルシステムではないので、システムのmount(2)呼び出しを使用することはできません。代わりに、mountコマンドを直接実行する必要があります。

自分の秘密ファイルを提供するために、私はこれを行いました。

  1. の/ etc/davfs2で

    マウントtmpfsのは(実際のdavfs2.confなど非表示になります)

    mount("none", "/etc/davfs2/secrets", "tmpfs", 0, NULL);

  2. 作成の/ etc/davfs2 /秘密モード0600含むたちの秘密

  3. ランマウント-t davfs url/yourpath(つまり、fork + execでマウントコマンドを実行する)
  4. /yourpathのファイルを読み書きすることによってwebdavを使用する
  5. アンマウント/ yourpath
  6. アンマウント/ etc/davfs2
  7. 終了プログラムが終了しました。

さらに、プロセスの外側からマウントを隠すために、非共有を使用しました。

関連する問題