2017-01-10 2 views
0

J'ai un système de fichiers distant, je peux monter à travers webdav viaComment puis-je monter davfs à partir de l'application?

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

Il me demande un nom d'utilisateur et mot de passe à ce moment. J'ai ensuite ajouté une entrée à fstab et créé ~/.davfs2/secrets file. Si je lance maintenant

mount /tmp/dav 

Il fonctionne.

Maintenant, j'ai besoin que ce soit monté à partir de mon application automatiquement à partir du code C.

Si je l'appelle:

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

retours de montage résultent -1 et errno est réglé sur 19: imprime strerror "pas un tel dispositif de".

Les spectacles page de manuel de montage:

ENODEV filesystemtype not configured in the kernel. 

Comment puis-je obtenir ce travail? Est-ce parce que davfs est basé sur un fusible?

Répondre

0

La réponse s'est avérée plus simple que je ne le pensais. Je devrais signaler que je voulais également supprimer l'invite pour le mot de passe. C'est ainsi que je l'ai résolu.

Il s'est avéré que mount.davfs est un serveur qui est exécuté par la commande mount. Mais ce n'est pas un système de fichiers enregistré, vous ne pouvez donc pas utiliser l'appel système mount (2). Au lieu de cela, nous devons exécuter la commande mount directement.

Pour fournir mon propre fichier de secrets, je l'ai fait.

  1. Mont tmpfs/etc/davfs2 (cache réel davfs2.conf etc.)

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

  2. Créer/etc/davfs2/mode de secrets 0600 contenant notre secret

  3. Run montage -t davfs url/yourpath (ex: fork + exec la commande mount)
  4. Utilisez webdav en lisant et écrivant des fichiers dans/votre chemin
  5. démontez/yourpath
  6. démontez/etc/davfs2
  7. quittez le programme une fois terminé.

En outre, j'ai utilisé unshare pour cacher le montage de l'extérieur du processus.