Skip to content

Commit 4968e4e

Browse files
committed
Done
1 parent b2ba521 commit 4968e4e

1 file changed

Lines changed: 85 additions & 80 deletions

File tree

src/parts/builtin/user.sh

Lines changed: 85 additions & 80 deletions
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,7 @@ user::exists () {
9696

9797
fi
9898

99-
if sys::is_linux || sys::is_wsl; then
99+
if sys::is_linux; then
100100

101101
if sys::has getent; then
102102
getent passwd "${user}" >/dev/null 2>&1 || return 1
@@ -152,7 +152,7 @@ user::all () {
152152

153153
if [[ -z "${group}" ]]; then
154154

155-
if sys::is_linux || sys::is_wsl; then
155+
if sys::is_linux; then
156156

157157
if sys::has getent; then
158158
getent passwd 2>/dev/null | awk -F: '{ print $1 }' | awk 'NF && !seen[$0]++ { print }'
@@ -219,7 +219,7 @@ user::all () {
219219
return
220220

221221
fi
222-
if sys::is_linux || sys::is_wsl; then
222+
if sys::is_linux; then
223223

224224
while IFS=: read -r _user _x _uid _gid _rest || [[ -n "${_user:-}" ]]; do
225225

@@ -293,7 +293,7 @@ user::add () {
293293

294294
group::exists "${group}" || return 1
295295

296-
if sys::is_linux || sys::is_wsl; then
296+
if sys::is_linux; then
297297

298298
if sys::has useradd; then
299299
useradd -m -g "${group}" "${user}" >/dev/null 2>&1
@@ -385,7 +385,7 @@ user::del () {
385385

386386
user::exists "${user}" || return 0
387387

388-
if sys::is_linux || sys::is_wsl; then
388+
if sys::is_linux; then
389389

390390
if sys::has userdel; then
391391
userdel "${user}" >/dev/null 2>&1
@@ -517,7 +517,7 @@ user::add_group () {
517517
group::exists "${group}" || return 1
518518
user::exists "${user}" "${group}" && return 0
519519

520-
if sys::is_linux || sys::is_wsl; then
520+
if sys::is_linux; then
521521

522522
if sys::has usermod; then
523523
usermod -a -G "${group}" "${user}" >/dev/null 2>&1
@@ -578,7 +578,7 @@ user::del_group () {
578578
group::exists "${group}" || return 1
579579
user::exists "${user}" "${group}" || return 0
580580

581-
if sys::is_linux || sys::is_wsl; then
581+
if sys::is_linux; then
582582

583583
if sys::has gpasswd; then
584584
gpasswd -d "${user}" "${group}" >/dev/null 2>&1
@@ -639,7 +639,7 @@ user::shell () {
639639
printf '%s\n' "${SHELL}"
640640
return 0
641641
fi
642-
if sys::is_linux || sys::is_wsl; then
642+
if sys::is_linux; then
643643

644644
if sys::has getent; then
645645
v="$(getent passwd "${user}" 2>/dev/null | awk -F: 'NR == 1 { print $7 }')"
@@ -702,7 +702,7 @@ user::home () {
702702

703703
fi
704704

705-
if sys::is_linux || sys::is_wsl; then
705+
if sys::is_linux; then
706706

707707
if sys::has getent; then
708708
v="$(getent passwd "${user}" 2>/dev/null | awk -F: 'NR == 1 { print $6 }')"
@@ -916,7 +916,7 @@ group::exists () {
916916
[[ -n "${group}" ]] || return 1
917917
[[ "${group}" != *$'\n'* && "${group}" != *$'\r'* ]] || return 1
918918

919-
if sys::is_linux || sys::is_wsl; then
919+
if sys::is_linux; then
920920

921921
if sys::has getent; then
922922
getent group "${group}" >/dev/null 2>&1 || return 1
@@ -965,73 +965,20 @@ group::all () {
965965
current="$(user::name 2>/dev/null || true)"
966966
[[ "${user}" != *$'\n'* && "${user}" != *$'\r'* ]] || return 1
967967

968-
if [[ -n "${user}" ]]; then
969-
970-
if sys::is_windows && sys::has powershell.exe; then
971-
972-
# shellcheck disable=SC2016
973-
SYS_USER_QUERY="${user}" powershell.exe -NoProfile -NonInteractive -Command '
974-
$u = $env:SYS_USER_QUERY
975-
Get-LocalGroup | ForEach-Object {
976-
try {
977-
$name = $_.Name
978-
$hit = Get-LocalGroupMember -Group $name -ErrorAction Stop | Where-Object {
979-
$short = ( $_.Name -split "\\" )[ -1 ]
980-
$short -eq $u -or $_.Name -eq $u
981-
}
982-
if ( $hit ) { $name }
983-
} catch {}
984-
}
985-
' 2>/dev/null | tr -d '\r' | awk 'NF && !seen[$0]++ { print }'
986-
987-
return
988-
989-
fi
990-
if sys::has id; then
991-
992-
if [[ -n "${current}" && "${user}" == "${current}" ]]; then v="$(id -Gn 2>/dev/null || true)"
993-
else v="$(id -Gn "${user}" 2>/dev/null || true)"
994-
fi
995-
996-
[[ -n "${v}" ]] || return 1
997-
for x in ${v}; do printf '%s\n' "${x}"; done | awk 'NF && !seen[$0]++ { print }'
998-
999-
return 0
1000-
1001-
fi
1002-
1003-
return 1
1004-
1005-
fi
1006-
if sys::is_linux || sys::is_wsl; then
1007-
1008-
if sys::has getent; then
1009-
getent group 2>/dev/null | awk -F: '{ print $1 }' | awk 'NF && !seen[$0]++ { print }'
1010-
return
1011-
fi
1012-
1013-
[[ -r /etc/group ]] || return 1
1014-
awk -F: '{ print $1 }' /etc/group 2>/dev/null | awk 'NF && !seen[$0]++ { print }'
1015-
return
1016-
1017-
fi
1018-
if sys::is_macos; then
1019-
1020-
sys::has dscl || return 1
1021-
dscl . -list /Groups 2>/dev/null | awk 'NF && !seen[$0]++ { print }'
1022-
return
1023-
1024-
fi
1025968
if sys::is_windows; then
1026969

1027970
if sys::has powershell.exe; then
1028971

1029972
if [[ -n "${user}" ]]; then
1030973

974+
user::exists "${user}" || return 1
975+
1031976
# shellcheck disable=SC2016
1032977
v="$(SYS_USER_QUERY="${user}" powershell.exe -NoProfile -NonInteractive -Command '
978+
$u = $env:SYS_USER_QUERY
979+
$out = @()
980+
1033981
try {
1034-
$u = $env:SYS_USER_QUERY
1035982
Get-LocalUser -Name $u -ErrorAction Stop | Out-Null
1036983
1037984
Get-LocalGroup | ForEach-Object {
@@ -1042,35 +989,46 @@ group::all () {
1042989
$short -eq $u -or $_.Name -eq $u
1043990
}
1044991
1045-
if ( $hit ) { $name }
992+
if ( $hit ) { $out += $name }
1046993
} catch {}
1047994
}
1048995
996+
if ( $out.Count -lt 1 ) { exit 1 }
997+
998+
$out | Select-Object -Unique
1049999
exit 0
10501000
} catch {
10511001
exit 1
10521002
}
1053-
' 2>/dev/null | tr -d '\r' | awk 'NF && !seen[$0]++ { print }' || true)"
1003+
' 2>/dev/null | tr -d '\r' || true)"
10541004

10551005
[[ -n "${v}" ]] || return 1
1056-
printf '%s\n' "${v}"
1006+
printf '%s\n' "${v}" | awk 'NF && !seen[$0]++ { print }'
10571007

10581008
return 0
10591009

10601010
fi
10611011

1062-
powershell.exe -NoProfile -NonInteractive -Command "Get-LocalGroup | Select-Object -ExpandProperty Name" 2>/dev/null |
1063-
tr -d '\r' |
1064-
awk 'NF && !seen[$0]++ { print }'
1012+
v="$(powershell.exe -NoProfile -NonInteractive -Command '
1013+
try {
1014+
Get-LocalGroup | Select-Object -ExpandProperty Name
1015+
exit 0
1016+
} catch {
1017+
exit 1
1018+
}
1019+
' 2>/dev/null | tr -d '\r' || true)"
1020+
1021+
[[ -n "${v}" ]] || return 1
1022+
printf '%s\n' "${v}" | awk 'NF && !seen[$0]++ { print }'
10651023

1066-
return
1024+
return 0
10671025

10681026
fi
10691027
if sys::has net.exe; then
10701028

10711029
[[ -n "${user}" ]] && return 1
10721030

1073-
net.exe localgroup 2>/dev/null | tr -d '\r' | awk '
1031+
v="$(net.exe localgroup 2>/dev/null | tr -d '\r' | awk '
10741032
BEGIN { cap = 0 }
10751033
/^---/ { cap = 1; next }
10761034
/^The command completed successfully\./ { cap = 0 }
@@ -1079,14 +1037,61 @@ group::all () {
10791037
sub(/^[[:space:]]+/, "", line)
10801038
if ( line != "" ) print line
10811039
}
1082-
' | awk 'NF && !seen[$0]++ { print }'
1040+
' || true)"
10831041

1084-
return
1042+
[[ -n "${v}" ]] || return 1
1043+
printf '%s\n' "${v}" | awk 'NF && !seen[$0]++ { print }'
1044+
1045+
return 0
10851046

10861047
fi
10871048

10881049
return 1
10891050

1051+
fi
1052+
if [[ -n "${user}" ]]; then
1053+
1054+
user::exists "${user}" || return 1
1055+
1056+
if sys::has id; then
1057+
1058+
if [[ -n "${current}" && "${user}" == "${current}" ]]; then v="$(id -Gn 2>/dev/null || true)"
1059+
else v="$(id -Gn "${user}" 2>/dev/null || true)"
1060+
fi
1061+
1062+
[[ -n "${v}" ]] || return 1
1063+
1064+
for x in ${v}; do
1065+
printf '%s\n' "${x}"
1066+
done | awk 'NF && !seen[$0]++ { print }'
1067+
1068+
return 0
1069+
1070+
fi
1071+
1072+
return 1
1073+
1074+
fi
1075+
if sys::is_linux; then
1076+
1077+
if sys::has getent; then
1078+
getent group 2>/dev/null | awk -F: '{ print $1 }' | awk 'NF && !seen[$0]++ { print }'
1079+
return
1080+
fi
1081+
1082+
[[ -r /etc/group ]] || return 1
1083+
awk -F: '{ print $1 }' /etc/group 2>/dev/null | awk 'NF && !seen[$0]++ { print }'
1084+
1085+
return
1086+
1087+
fi
1088+
if sys::is_macos; then
1089+
1090+
sys::has dscl || return 1
1091+
dscl . -list /Groups 2>/dev/null | awk 'NF && !seen[$0]++ { print }'
1092+
1093+
return
1094+
10901095
fi
10911096

10921097
return 1
@@ -1101,7 +1106,7 @@ group::add () {
11011106

11021107
group::exists "${group}" && return 0
11031108

1104-
if sys::is_linux || sys::is_wsl; then
1109+
if sys::is_linux; then
11051110

11061111
if sys::has groupadd; then
11071112
groupadd "${group}" >/dev/null 2>&1
@@ -1172,7 +1177,7 @@ group::del () {
11721177

11731178
group::exists "${group}" || return 0
11741179

1175-
if sys::is_linux || sys::is_wsl; then
1180+
if sys::is_linux; then
11761181

11771182
if sys::has groupdel; then
11781183
groupdel "${group}" >/dev/null 2>&1

0 commit comments

Comments
 (0)