diff --git a/packaging/installer/functions.sh b/packaging/installer/functions.sh index d611343a2b..9989e3b426 100644 --- a/packaging/installer/functions.sh +++ b/packaging/installer/functions.sh @@ -1065,6 +1065,8 @@ portable_add_user() { run dscl . create /Users/"${username}" IsHidden 1 return 0 fi + elif command -v synouser 1> /dev/null 2>&1; then + run synouser -add "${username}" "" "netdata agent" 0 "" 0 && return 0 fi warning "Failed to add ${username} user account!" @@ -1092,6 +1094,8 @@ portable_add_group() { run addgroup "${groupname}" && return 0 elif command -v dseditgroup 1> /dev/null 2>&1; then dseditgroup -o create "${groupname}" && return 0 + elif command -v synogroup 1> /dev/null 2>&1; then + run synogroup --add "${groupname}" && return 0 fi warning >&2 "Failed to add ${groupname} user group !" @@ -1127,6 +1131,21 @@ portable_add_user_to_group() { run addgroup "${username}" "${groupname}" && return 0 elif command -v dseditgroup 1> /dev/null 2>&1; then dseditgroup -u "${username}" "${groupname}" && return 0 + elif command -v synogroup 1> /dev/null 2>&1; then + # Get current members of the group + current_members_list=$(synogroup --get "${groupname}" | grep '^[0-9]') + current_members=$(echo "${current_members_list}" | grep -oP '\[\K[^\]]+' | tr '\n' ' ' | sed 's/ $//') + + # Append username to the list + if [ -n "$current_members" ]; then + new_members="${current_members} ${username}" + else + new_members="${username}" + fi + + # Set the member list + # shellcheck disable=SC2086 + run synogroup --member "${groupname}" ${new_members} && return 0 fi warning >&2 "Failed to add user ${username} to group ${groupname}!" diff --git a/packaging/installer/netdata-uninstaller.sh b/packaging/installer/netdata-uninstaller.sh index 43ffb7406f..47cd78bca6 100755 --- a/packaging/installer/netdata-uninstaller.sh +++ b/packaging/installer/netdata-uninstaller.sh @@ -452,6 +452,16 @@ portable_del_group() { fi fi + # DMS ( Synology ) + if command -v synogroup 1> /dev/null 2>&1; then + if get_group "${groupname}" > /dev/null 2>&1; then + run synogroup --del "${groupname}" && return 0 + else + info "Could not find group ${groupname}, nothing to do" + return 0 + fi; + fi + error "Group ${groupname} was not automatically removed, you might have to remove it manually" return 1 } @@ -515,6 +525,11 @@ portable_del_user() { run sysadminctl -deleteUser "${username}" && return 0 fi + # DMS ( Synology ) + if command -v synouser 1> /dev/null 2>&1; then + run synouser --del "${username}" && return 0 + fi + error "User ${username} could not be deleted from system, you might have to remove it manually" return 1 } @@ -555,6 +570,17 @@ portable_del_user_from_group() { run dseditgroup -o delete -u "${username}" "${groupname}" && return 0 fi + # DSM ( Synology ) + if command -v synogroup 1> /dev/null 2>&1; then + # Get current members of the group removing username + current_members_list=$(synogroup --get "${groupname}" | grep -v "\[${username}\]" | grep '^[0-9]' ) + current_members=$(echo "${current_members_list}" | grep -oP '\[\K[^\]]+' | tr '\n' ' ' | sed 's/ $//') + + # Set the new list of members + # shellcheck disable=SC2086 + run synogroup --member "${groupname}" ${current_members} && return 0 + fi + error "Failed to delete user ${username} from group ${groupname} !" return 1 }