Skip to content

Instantly share code, notes, and snippets.

@macsimom
Last active September 11, 2019 09:33
Show Gist options
  • Save macsimom/008d297f467f9d7033f94c65a697aafc to your computer and use it in GitHub Desktop.
Save macsimom/008d297f467f9d7033f94c65a697aafc to your computer and use it in GitHub Desktop.
Query a domain server or multiple domain servers for fileshares. Try and mount each share. If accessible then add to NoMAD menu.
#!/bin/bash
SERVERS="server1 server2"
# Maybe use commandline arguments as servers: SERVERS="$@"
TEMPPLIST=$(mktemp -t nstl)
cat <<EOF > "$TEMPPLIST"
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>HomeMount</key>
<dict>
<key>Groups</key>
<array>
<string>All</string>
</array>
<key>Mount</key>
<false/>
<key>Options</key>
<array/>
</dict>
<key>Shares</key>
<array>
EOF
DOMAIN=$(defaults read com.trusourcelabs.NoMAD ADDomain)
for SERVER in $SERVERS ; do
# For debugging test `smbutil view "//${SERVER}.${DOMAIN}"` in Terminal on its own
# dollar-shares (i.e. hidden shares) are filtered out by the grep -v -E '(.+[$])' step
SHARES=$(smbutil view "//${SERVER}.${DOMAIN}" | grep Disk |grep -v -E '(.+[$])' | awk '{print $1}')
for SHARE in $SHARES ; do
TMPMNT=$(mktemp -d -t mnt)
mount_smbfs "//$SERVER.$DOMAIN/$SHARE" "$TMPMNT" 2>/dev/null
ACCESSIBLE=$?
if [ "$ACCESSIBLE" -eq "0" ]; then
umount "$TMPMNT"
rmdir "$TMPMNT"
echo "Adding $SERVER - $SHARE" 1>&2
cat <<EOF >> "$TEMPPLIST"
<dict>
<key>AutoMount</key>
<false/>
<key>ConnectedOnly</key>
<true/>
<key>Groups</key>
<array/>
<key>LocalMount</key>
<string></string>
<key>Name</key>
<string>$SERVER - $SHARE</string>
<key>Options</key>
<array/>
<key>URL</key>
<string>smb://$SERVER.$DOMAIN/$SHARE</string>
</dict>
EOF
else
rmdir "$TMPMNT"
fi
done
done
cat <<EOF >> "$TEMPPLIST"
</array>
<key>Version</key>
<string>1</string>
</dict>
</plist>
EOF
if [[ "$(/usr/libexec/PlistBuddy -c "print :Shares" "$TEMPPLIST" |wc -l)" -gt "2" ]]; then
defaults delete "menu.nomad.shares" Shares
cat "$TEMPPLIST" > ~/Library/Preferences/menu.nomad.shares.plist
defaults read "$HOME/Library/Preferences/menu.nomad.shares" > /dev/null
fi
rm "$TEMPPLIST"
open nomad:/update
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment