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

Peter Krempa pkrempa at redhat.com
Mon Jun 15 20:17:15 UTC 2015


On Wed, Jun 03, 2015 at 13:06:58 -0400, John Ferlan wrote:
> 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 | 29 ++++++++++++++++++++++++-----
>  3 files changed, 31 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 337b8d3..6ba698c 100644
> --- a/src/storage/storage_backend_fs.c
> +++ b/src/storage/storage_backend_fs.c
> @@ -388,6 +388,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);

@cifsfs can be true only if pool->def->type == VIR_STORAGE_POOL_NETFS.

>      virCommandPtr cmd = NULL;
>      int ret = -1;
>      int rc;
> @@ -427,11 +429,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;
> @@ -453,6 +461,17 @@ virStorageBackendFileSystemMount(virStoragePoolObjPtr pool)
>                                     "direct-io-mode=1",
>                                     pool->def->target.path,
>                                     NULL);
> +    else if (cifsfs)
> +        cmd = virCommandNewArgList(MOUNT,
> +                                   "-t",
> +                                   (pool->def->type == VIR_STORAGE_POOL_FS ?

... so the first part of this ternary can't ever be true here.

> +                                    virStoragePoolFormatFileSystemTypeToString(pool->def->source.format) :
> +                                    virStoragePoolFormatFileSystemNetTypeToString(pool->def->source.format)),
> +                                   src,
> +                                   pool->def->target.path,
> +                                   "-o",
> +                                   "guest",
> +                                   NULL);
>      else
>          cmd = virCommandNewArgList(MOUNT,
>                                     "-t",

Peter

-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: Digital signature
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20150615/e8000f0f/attachment-0001.sig>


More information about the libvir-list mailing list