diff --git a/actions/delete-ldap-user b/actions/delete-ldap-user index 2038e998f..3787e226f 100755 --- a/actions/delete-ldap-user +++ b/actions/delete-ldap-user @@ -1,4 +1,4 @@ -#!/bin/sh +#!/bin/bash # # This file is part of Plinth. # @@ -29,18 +29,19 @@ else exit 1 fi -cat </dev/null -Y EXTERNAL -H ldapi:/// -b 'ou=groups,dc=thisbox' -LLL "(uniqueMember=uid=$username,ou=users,dc=thisbox)" dn | grep -v '^$') + +while read -r line; do + cat <. +# + +# Must be run as root. + +username="$1" + +ldapsearch 2>/dev/null -Y EXTERNAL -H ldapi:/// -b 'ou=groups,dc=thisbox' -LLL "(uniqueMember=uid=$username,ou=users,dc=thisbox)" cn | awk '/cn:/ { print $2 }' diff --git a/actions/rename-ldap-user b/actions/rename-ldap-user index 6346987bc..acb235dad 100755 --- a/actions/rename-ldap-user +++ b/actions/rename-ldap-user @@ -35,23 +35,21 @@ else exit 1 fi -# check if user is admin -results=$(ldapsearch -Y EXTERNAL -H ldapi:/// -b 'cn=admin,ou=groups,dc=thisbox' -LLL "(uniqueMember=uid=$old_username,ou=users,dc=thisbox)" uniqueMember) +# update groups +results=$(ldapsearch 2>/dev/null -Y EXTERNAL -H ldapi:/// -b 'ou=groups,dc=thisbox' -LLL "(uniqueMember=uid=$old_username,ou=users,dc=thisbox)" dn | grep -v '^$') -if [ -z "$results" ]; then - exit 0 -fi - -cat <
' + 'Users in the admin group will be able to log in to all ' + 'services. They can also log in to the system through SSH ' + 'and have administrative privileges (sudo).')) def __init__(self, request, *args, **kwargs): """Initialize the form with extra request argument.""" @@ -47,22 +59,30 @@ class CreateUserForm(UserCreationForm): user = super(CreateUserForm, self).save(commit) if commit: - if self.cleaned_data['add_ldap_user']: - try: - actions.superuser_run( - 'create-ldap-user', - [user.get_username(), self.cleaned_data['password1']]) - except ActionError: - messages.error(self.request, - _('Creating LDAP user failed.')) + try: + actions.superuser_run( + 'create-ldap-user', + [user.get_username(), self.cleaned_data['password1']]) + except ActionError: + messages.error(self.request, + _('Creating LDAP user failed.')) + for group in self.cleaned_data['groups']: try: actions.superuser_run( 'add-ldap-user-to-group', - [user.get_username(), 'admin']) + [user.get_username(), group]) except ActionError: - messages.error(self.request, - _('Failed to add new user to admin group.')) + messages.error( + self.request, + _('Failed to add new user to %s group.') % group) + + try: + g = Group.objects.get(name=group) + except ObjectDoesNotExist: + g = Group.objects.create(name=group) + g.user_set.add(user) + return user @@ -96,6 +116,27 @@ class UserUpdateForm(forms.ModelForm): messages.error(self.request, _('Renaming LDAP user failed.')) + output = actions.superuser_run('get-ldap-user-groups', + [user.get_username()]) + old_groups = output.strip().split('\n') + new_groups = user.groups.values_list('name', flat=True) + for old_group in old_groups: + if old_group not in new_groups: + try: + actions.superuser_run('remove-ldap-user-from-group', + [user.get_username(), old_group]) + except ActionError: + messages.error(self.request, + _('Failed to add user to group.')) + for new_group in new_groups: + if new_group not in old_groups: + try: + actions.superuser_run('add-ldap-user-to-group', + [user.get_username(), new_group]) + except ActionError: + messages.error(self.request, + _('Failed to remove user from group.')) + return user diff --git a/plinth/modules/users/templates/users_change_password.html b/plinth/modules/users/templates/users_change_password.html index 4eae225e0..15a148c04 100644 --- a/plinth/modules/users/templates/users_change_password.html +++ b/plinth/modules/users/templates/users_change_password.html @@ -31,12 +31,6 @@ {{ form|bootstrap }} - {% if is_ldap_user %} -

This user is also an LDAP user and password for LDAP user will also - be updated. -

- {% endif %} - diff --git a/plinth/modules/users/templates/users_delete.html b/plinth/modules/users/templates/users_delete.html index d8bf3a311..fa2b2ffc2 100644 --- a/plinth/modules/users/templates/users_delete.html +++ b/plinth/modules/users/templates/users_delete.html @@ -24,10 +24,6 @@

Delete User {{ object.username }}

- {% if is_ldap_user %} -

This user is also an LDAP user. LDAP user will also be deleted.

- {% endif %} -

Delete user permanently?

diff --git a/plinth/modules/users/templates/users_update.html b/plinth/modules/users/templates/users_update.html index 0c29e8eba..4a817e1af 100644 --- a/plinth/modules/users/templates/users_update.html +++ b/plinth/modules/users/templates/users_update.html @@ -46,10 +46,6 @@ {{ form|bootstrap }} - {% if is_ldap_user %} -

This user is also an LDAP user.

- {% endif %} -