[libvirt] [PATCH v2 3/3] storage: Generate correct parameters for CIFS

John Ferlan jferlan at redhat.com
Mon Jun 15 21:30:37 UTC 2015


https://bugzilla.redhat.com/show_bug.cgi?id=1186969

When generating the path to the dir for a CIFS/Samba driver, the code
would generate a source path for the mount using "%s:%s" while the
mount.cifs expects to see "//%s/%s". So check for the cifsfs and
format the source path appropriately.

Additionally, since there is no means to authenticate, the mount
needs a "-o guest" on the command line in order to anonymously mount
the Samba directory.

Signed-off-by: John Ferlan <jferlan at redhat.com>
---
 docs/formatstorage.html.in       |  7 +++++--
 docs/storage.html.in             |  3 ++-
 src/storage/storage_backend_fs.c | 27 ++++++++++++++++++++++-----
 3 files changed, 29 insertions(+), 8 deletions(-)

diff --git a/docs/formatstorage.html.in b/docs/formatstorage.html.in
index 17558f8..b6f4361 100644
--- a/docs/formatstorage.html.in
+++ b/docs/formatstorage.html.in
@@ -124,11 +124,14 @@
         <span class="since">Since 0.4.1</span></dd>
       <dt><code>dir</code></dt>
       <dd>Provides the source for pools backed by directories (pool
-        type <code>dir</code>), or optionally to select a subdirectory
+        types <code>dir</code>, <code>netfs</code>, <code>gluster</code>),
+        or optionally to select a subdirectory
         within a pool that resembles a filesystem (pool
         type <code>gluster</code>). May
         only occur once. Contains a single attribute <code>path</code>
-        which is the fully qualified path to the backing directory.
+        which is the fully qualified path to the backing directory or
+        for a <code>netfs</code> pool type using <code>format</code>
+        type "cifs", the path to the Samba share without the leading slash.
         <span class="since">Since 0.4.1</span></dd>
       <dt><code>adapter</code></dt>
       <dd>Provides the source for pools backed by SCSI adapters (pool
diff --git a/docs/storage.html.in b/docs/storage.html.in
index 92e9ae7..0b467d5 100644
--- a/docs/storage.html.in
+++ b/docs/storage.html.in
@@ -291,7 +291,8 @@
         the <a href="#StorageBackendGluster">gluster</a> pool.)
       </li>
       <li>
-        <code>cifs</code> - use the SMB (samba) or CIFS file system
+        <code>cifs</code> - use the SMB (samba) or CIFS file system.
+        The mount will use "-o guest" to mount the directory anonymously.
       </li>
     </ul>
 
diff --git a/src/storage/storage_backend_fs.c b/src/storage/storage_backend_fs.c
index d2cf470..b751687 100644
--- a/src/storage/storage_backend_fs.c
+++ b/src/storage/storage_backend_fs.c
@@ -426,6 +426,8 @@ virStorageBackendFileSystemMount(virStoragePoolObjPtr pool)
                     pool->def->source.format == VIR_STORAGE_POOL_NETFS_AUTO);
     bool glusterfs = (pool->def->type == VIR_STORAGE_POOL_NETFS &&
                       pool->def->source.format == VIR_STORAGE_POOL_NETFS_GLUSTERFS);
+    bool cifsfs = (pool->def->type == VIR_STORAGE_POOL_NETFS &&
+                   pool->def->source.format == VIR_STORAGE_POOL_NETFS_CIFS);
     virCommandPtr cmd = NULL;
     int ret = -1;
     int rc;
@@ -444,11 +446,17 @@ virStorageBackendFileSystemMount(virStoragePoolObjPtr pool)
     }
 
     if (pool->def->type == VIR_STORAGE_POOL_NETFS) {
-        if (virAsprintf(&src, "%s:%s",
-                        pool->def->source.hosts[0].name,
-                        pool->def->source.dir) == -1)
-            return -1;
-
+        if (pool->def->source.format == VIR_STORAGE_POOL_NETFS_CIFS) {
+            if (virAsprintf(&src, "//%s/%s",
+                            pool->def->source.hosts[0].name,
+                            pool->def->source.dir) == -1)
+                return -1;
+        } else {
+            if (virAsprintf(&src, "%s:%s",
+                            pool->def->source.hosts[0].name,
+                            pool->def->source.dir) == -1)
+                return -1;
+        }
     } else {
         if (VIR_STRDUP(src, pool->def->source.devices[0].path) < 0)
             return -1;
@@ -468,6 +476,15 @@ virStorageBackendFileSystemMount(virStoragePoolObjPtr pool)
                                    "direct-io-mode=1",
                                    pool->def->target.path,
                                    NULL);
+    else if (cifsfs)
+        cmd = virCommandNewArgList(MOUNT,
+                                   "-t",
+                                   virStoragePoolFormatFileSystemNetTypeToString(pool->def->source.format),
+                                   src,
+                                   pool->def->target.path,
+                                   "-o",
+                                   "guest",
+                                   NULL);
     else
         cmd = virCommandNewArgList(MOUNT,
                                    "-t",
-- 
2.1.0




More information about the libvir-list mailing list