Skip to content

Commit a44ae8b

Browse files
authored
Merge pull request #12152 from Mic92/dscl
scripts/install-darwin-multi-user: workaround dscl failing sometimes
2 parents 84f116e + ed4f2c3 commit a44ae8b

File tree

1 file changed

+23
-8
lines changed

1 file changed

+23
-8
lines changed

scripts/install-darwin-multi-user.sh

Lines changed: 23 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -145,13 +145,28 @@ poly_user_id_get() {
145145
dsclattr "/Users/$1" "UniqueID"
146146
}
147147

148+
dscl_create() {
149+
# workaround a bug in dscl where it sometimes fails with eNotYetImplemented:
150+
# https://github.com/NixOS/nix/issues/12140
151+
while ! _sudo "$1" /usr/bin/dscl . -create "$2" "$3" "$4" 2> "$SCRATCH/dscl.err"; do
152+
local err=$?
153+
if [[ $err -eq 140 ]] && grep -q "-14988 (eNotYetImplemented)" "$SCRATCH/dscl.err"; then
154+
echo "dscl failed with eNotYetImplemented, retrying..."
155+
sleep 1
156+
continue
157+
fi
158+
cat "$SCRATCH/dscl.err"
159+
return $err
160+
done
161+
}
162+
148163
poly_user_hidden_get() {
149164
dsclattr "/Users/$1" "IsHidden"
150165
}
151166

152167
poly_user_hidden_set() {
153-
_sudo "in order to make $1 a hidden user" \
154-
/usr/bin/dscl . -create "/Users/$1" "IsHidden" "1"
168+
dscl_create "in order to make $1 a hidden user" \
169+
"/Users/$1" "IsHidden" "1"
155170
}
156171

157172
poly_user_home_get() {
@@ -161,26 +176,26 @@ poly_user_home_get() {
161176
poly_user_home_set() {
162177
# This can trigger a permission prompt now:
163178
# "Terminal" would like to administer your computer. Administration can include modifying passwords, networking, and system settings.
164-
_sudo "in order to give $1 a safe home directory" \
165-
/usr/bin/dscl . -create "/Users/$1" "NFSHomeDirectory" "$2"
179+
dscl_create "in order to give $1 a safe home directory" \
180+
"/Users/$1" "NFSHomeDirectory" "$2"
166181
}
167182

168183
poly_user_note_get() {
169184
dsclattr "/Users/$1" "RealName"
170185
}
171186

172187
poly_user_note_set() {
173-
_sudo "in order to give $username a useful note" \
174-
/usr/bin/dscl . -create "/Users/$1" "RealName" "$2"
188+
dscl_create "in order to give $1 a useful note" \
189+
"/Users/$1" "RealName" "$2"
175190
}
176191

177192
poly_user_shell_get() {
178193
dsclattr "/Users/$1" "UserShell"
179194
}
180195

181196
poly_user_shell_set() {
182-
_sudo "in order to give $1 a safe shell" \
183-
/usr/bin/dscl . -create "/Users/$1" "UserShell" "$2"
197+
dscl_create "in order to give $1 a safe shell" \
198+
"/Users/$1" "UserShell" "$2"
184199
}
185200

186201
poly_user_in_group_check() {

0 commit comments

Comments
 (0)