smb.conf:

1[homes]
2  ...
3  root preexec = /users/.create_home.sh '%S'

I lost the one that I was using. -- CyberLeo

createhome.sh:

01#!/bin/sh -e
02 
03pebkac() {
04  echo "Usage: $(basename "${0}") <username>" >&2
05  echo "" >&2
06  echo "Create the zfs home directories for the given user if they do not exist." >&2
07  exit 1
08}
09 
10fsbase="$(realpath "$(dirname "${0}")")"
11zpbase="$(mount | grep ' on '"${fsbase}"' ' | cut -d' ' -f1)"
12 
13user="${1}"
14[ "${user}" ] || pebkac
15 
16zpuser="${zpbase}/${user}"
17fsuser="${fsbase}/${user}"
18 
19[ ! -e "${fsuser}" ] || exit 0
20 
21fspublic="${fsuser}/Public"
22fsprivate="${fsuser}/Private"
23fsdropbox="${fsuser}/DropBox"
24fsrecycle="${fsuser}/.recycle"
25 
26zfs create "${zpuser}"
27mkdir -p "${fspublic}"
28chmod 755 "${fspublic}"
29mkdir -p "${fsprivate}"
30chmod 700 "${fsprivate}"
31mkdir -p "${fsdropbox}"
32chmod 1777 "${fsdropbox}"
33mkdir -p "${fsrecycle}"
34chmod 777 "${fsrecycle}"
35chown -R "${user}" "${fsuser}"