From 68439f6bacc0fc88de4cbf17b726e080740d2938 Mon Sep 17 00:00:00 2001 From: Chris Roberts Date: Thu, 21 Dec 2017 14:53:55 -0800 Subject: [PATCH] Use sudo for sharing lists on darwin platform On systems prior to high sierra the sharing binary requires root user for access, so use sudo to get full list output and inspect output. --- contrib/sudoers/osx | 3 ++- plugins/hosts/darwin/cap/smb.rb | 10 +++++++--- templates/locales/synced_folder_smb.yml | 2 +- website/source/docs/synced-folders/smb.html.md | 3 ++- 4 files changed, 12 insertions(+), 6 deletions(-) diff --git a/contrib/sudoers/osx b/contrib/sudoers/osx index 5e218db16..d1e1d6606 100644 --- a/contrib/sudoers/osx +++ b/contrib/sudoers/osx @@ -3,4 +3,5 @@ Cmnd_Alias VAGRANT_NFSD = /sbin/nfsd restart Cmnd_Alias VAGRANT_EXPORTS_REMOVE = /usr/bin/sed -E -e /*/ d -ibak /etc/exports Cmnd_Alias VAGRANT_SMB_ADD = /usr/sbin/sharing -a * -S * -s * -g * -n * Cmnd_Alias VAGRANT_SMB_REMOVE = /usr/sbin/sharing -r * -%admin ALL=(root) NOPASSWD: VAGRANT_EXPORTS_ADD, VAGRANT_NFSD, VAGRANT_EXPORTS_REMOVE, VAGRANT_SMB_ADD, VAGRANT_SMB_REMOVE +Cmnd_Alias VAGRANT_SMB_LIST = /usr/sbin/sharing -l +%admin ALL=(root) NOPASSWD: VAGRANT_EXPORTS_ADD, VAGRANT_NFSD, VAGRANT_EXPORTS_REMOVE, VAGRANT_SMB_ADD, VAGRANT_SMB_REMOVE, VAGRANT_SMB_LIST diff --git a/plugins/hosts/darwin/cap/smb.rb b/plugins/hosts/darwin/cap/smb.rb index dfbe4c88d..263d2e4c8 100644 --- a/plugins/hosts/darwin/cap/smb.rb +++ b/plugins/hosts/darwin/cap/smb.rb @@ -18,12 +18,16 @@ module VagrantPlugins def self.smb_cleanup(env, machine, opts) m_id = machine_id(machine) - result = Vagrant::Util::Subprocess.execute("/bin/sh", "-c", - "/usr/sbin/sharing -l | grep -E \"^name:.+\\svgt-#{m_id}-\" | awk '{print $2}'") + result = Vagrant::Util::Subprocess.execute("/usr/bin/sudo", "/usr/sbin/sharing", "-l") if result.exit_code != 0 @@logger.warn("failed to locate any shares for cleanup") end - shares = result.stdout.split(/\s/).map(&:strip) + shares = result.stdout.split("\n").map do |line| + if line.start_with?("name:") + share_name = line.sub("name:", "").strip + share_name if share_name.start_with?("vgt-#{m_id}") + end + end.compact @@logger.debug("shares to be removed: #{shares}") shares.each do |share_name| @@logger.info("removing share name=#{share_name}") diff --git a/templates/locales/synced_folder_smb.yml b/templates/locales/synced_folder_smb.yml index 3754bc408..143a4885f 100644 --- a/templates/locales/synced_folder_smb.yml +++ b/templates/locales/synced_folder_smb.yml @@ -13,7 +13,7 @@ en: warning_password: |- You will be asked for the username and password to use for the SMB folders shortly. Please use the proper username/password of your - Windows account. + account. uac: prune_warning: |- diff --git a/website/source/docs/synced-folders/smb.html.md b/website/source/docs/synced-folders/smb.html.md index a927f3207..1b977db87 100644 --- a/website/source/docs/synced-folders/smb.html.md +++ b/website/source/docs/synced-folders/smb.html.md @@ -55,7 +55,8 @@ without requiring a password each time: ``` Cmnd_Alias VAGRANT_SMB_ADD = /usr/sbin/sharing -a * -S * -s * -g * -n * Cmnd_Alias VAGRANT_SMB_REMOVE = /usr/sbin/sharing -r * -%admin ALL=(root) NOPASSWD: VAGRANT_SMB_ADD, VAGRANT_SMB_REMOVE +Cmnd_Alias VAGRANT_SMB_LIST = /usr/sbin/sharing -l +%admin ALL=(root) NOPASSWD: VAGRANT_SMB_ADD, VAGRANT_SMB_REMOVE, VAGRANT_SMB_LIST ``` ### Guests