diff --git a/daemon/blkid.c b/daemon/blkid.c index e8e7b58ca..1ac42b4ff 100644 --- a/daemon/blkid.c +++ b/daemon/blkid.c @@ -82,6 +82,8 @@ do_vfs_label (const mountable_t *mountable) if (type) { if (STREQ (type, "btrfs") && optgroup_btrfs_available ()) return btrfs_get_label (mountable->device); + if (STREQ (type, "ntfs") && optgroup_ntfsprogs_available ()) + return ntfs_get_label (mountable->device); } return get_blkid_tag (mountable->device, "LABEL"); diff --git a/daemon/daemon.h b/daemon/daemon.h index 2057bb1a7..53cb797b5 100644 --- a/daemon/daemon.h +++ b/daemon/daemon.h @@ -265,6 +265,9 @@ extern char *debug_bmap_device (const char *subcmd, size_t argc, char *const *co /*-- in btrfs.c --*/ extern char *btrfs_get_label (const char *device); +/*-- in ntfs.c --*/ +extern char *ntfs_get_label (const char *device); + /* ordinary daemon functions use these to indicate errors * NB: you don't need to prefix the string with the current command, * it is added automatically by the client-side RPC stubs. diff --git a/daemon/ntfs.c b/daemon/ntfs.c index cd6f221db..0f633912d 100644 --- a/daemon/ntfs.c +++ b/daemon/ntfs.c @@ -33,6 +33,7 @@ GUESTFSD_EXT_CMD(str_ntfs3g_probe, ntfs-3g.probe); GUESTFSD_EXT_CMD(str_ntfsresize, ntfsresize); GUESTFSD_EXT_CMD(str_ntfsfix, ntfsfix); +GUESTFSD_EXT_CMD(str_ntfslabel, ntfslabel); int optgroup_ntfs3g_available (void) @@ -46,6 +47,29 @@ optgroup_ntfsprogs_available (void) return prog_exists (str_ntfsresize); } +char * +ntfs_get_label (const char *device) +{ + int r; + CLEANUP_FREE char *err = NULL; + char *out = NULL; + size_t len; + + r = command (&out, &err, str_ntfslabel, device, NULL); + if (r == -1) { + reply_with_error ("%s", err); + free (out); + return NULL; + } + + /* Trim trailing \n if present. */ + len = strlen (out); + if (len > 0 && out[len-1] == '\n') + out[len-1] = '\0'; + + return out; +} + int do_ntfs_3g_probe (int rw, const char *device) {