summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKevin McCarthy <kmccarth@redhat.com>2007-09-19 13:43:52 -0700
committerKevin McCarthy <kmccarth@redhat.com>2007-09-19 13:43:52 -0700
commit036cf58042871e91bb8c86382108da53b9c3b301 (patch)
treebdfe894e9dbc4f75ac516ced9652dbb9de0e22c9
parentf17071533a73c5e989ead1b243de5397d36a38d3 (diff)
downloadfreeipa-036cf58042871e91bb8c86382108da53b9c3b301.tar.gz
freeipa-036cf58042871e91bb8c86382108da53b9c3b301.tar.xz
freeipa-036cf58042871e91bb8c86382108da53b9c3b301.zip
Handle add/remove failures a little bit better.
Still some refinements that can be done, but at least it shows the failures now.
-rw-r--r--ipa-server/ipa-gui/ipagui/controllers.py45
-rw-r--r--ipa-server/xmlrpc-server/funcs.py4
2 files changed, 31 insertions, 18 deletions
diff --git a/ipa-server/ipa-gui/ipagui/controllers.py b/ipa-server/ipa-gui/ipagui/controllers.py
index 7a6d87ff5..7e1f2fc28 100644
--- a/ipa-server/ipa-gui/ipagui/controllers.py
+++ b/ipa-server/ipa-gui/ipagui/controllers.py
@@ -446,7 +446,6 @@ class Root(controllers.RootController):
return dict(form=group_edit_form, group=group_dict, members=member_dicts)
except ipaerror.IPAError, e:
- turbogears.flash("User show failed: " + str(e))
turbogears.flash("Group edit failed: " + str(e))
raise turbogears.redirect('/groupshow', uid=kw.get('cn'))
@@ -489,12 +488,12 @@ class Root(controllers.RootController):
if group_modified:
rv = client.update_group(new_group)
- #
- # TODO - if the group update succeeds, but below operations fail,
- # we needs to make sure a subsequent submit doesn't try to update
- # the group again. Probably by overwriting the group_orig hidden
- # field blob.
- #
+ #
+ # If the group update succeeds, but below operations fail, we
+ # need to make sure a subsequent submit doesn't try to update
+ # the group again.
+ #
+ kw['group_orig'] = b64encode(dumps(new_group.toDict()))
except ipaerror.IPAError, e:
turbogears.flash("User update failed: " + str(e))
return dict(form=group_edit_form, group=kw, members=member_dicts,
@@ -503,15 +502,14 @@ class Root(controllers.RootController):
#
# Add members
#
+ failed_adds = []
try:
uidadds = kw.get('uidadd')
if uidadds != None:
if not(isinstance(uidadds,list) or isinstance(uidadds,tuple)):
uidadds = [uidadds]
- failed = client.add_users_to_group(uidadds, kw.get('cn'))
- #
- # TODO - deal with failed adds
- #
+ failed_adds = client.add_users_to_group(uidadds, kw.get('cn'))
+ kw['uidadd'] = failed_adds
except ipaerror.IPAError, e:
turbogears.flash("User update failed: " + str(e))
return dict(form=group_edit_form, group=kw, members=member_dicts,
@@ -520,21 +518,36 @@ class Root(controllers.RootController):
#
# Remove members
#
+ failed_dels = []
try:
uiddels = kw.get('uiddel')
if uiddels != None:
if not(isinstance(uiddels,list) or isinstance(uiddels,tuple)):
uiddels = [uiddels]
- failed = client.remove_users_from_group(uiddels, kw.get('cn'))
- #
- # TODO - deal with failed removals
- #
+ failed_dels = client.remove_users_from_group(uiddels, kw.get('cn'))
+ kw['uiddel'] = failed_dels
except ipaerror.IPAError, e:
turbogears.flash("User update failed: " + str(e))
return dict(form=group_edit_form, group=kw, members=member_dicts,
tg_template='ipagui.templates.groupedit')
- # TODO if not group_modified
+ #
+ # TODO - check failed ops to see if it's because of another update.
+ # handle "someone else already did it" errors better - perhaps
+ # not even as an error
+ # TODO - update the Group Members list.
+ # (note that we have to handle the above todo first, or else
+ # there will be an error message, but the add/del lists will
+ # be empty)
+ #
+ if (len(failed_adds) > 0) or (len(failed_dels) > 0):
+ message = "There was an error updating group members.<br />"
+ message += "Failures have been preserved in the add/remove lists."
+ if group_modified:
+ message = "Group Details successfully updated.<br />" + message
+ turbogears.flash(message)
+ return dict(form=group_edit_form, group=kw, members=member_dicts,
+ tg_template='ipagui.templates.groupedit')
turbogears.flash("%s updated!" % kw['cn'])
raise turbogears.redirect('/groupshow', cn=kw['cn'])
diff --git a/ipa-server/xmlrpc-server/funcs.py b/ipa-server/xmlrpc-server/funcs.py
index 4e23fde28..52376f1cc 100644
--- a/ipa-server/xmlrpc-server/funcs.py
+++ b/ipa-server/xmlrpc-server/funcs.py
@@ -697,7 +697,7 @@ class IPAServer:
except ipaerror.exception_for(ipaerror.LDAP_EMPTY_MODLIST):
# User is already in the group
failed.append(user)
- except ipaerror.gen_exception(ipaerror.LDAP_NOT_FOUND):
+ except ipaerror.exception_for(ipaerror.LDAP_NOT_FOUND):
# User or the group does not exist
failed.append(user)
@@ -755,7 +755,7 @@ class IPAServer:
except ipaerror.exception_for(ipaerror.LDAP_EMPTY_MODLIST):
# User is not in the group
failed.append(user)
- except ipaerror.gen_exception(ipaerror.LDAP_NOT_FOUND):
+ except ipaerror.exception_for(ipaerror.LDAP_NOT_FOUND):
# User or the group does not exist
failed.append(user)