diff options
Diffstat (limited to 'install/ui/sudo.js')
-rw-r--r-- | install/ui/sudo.js | 35 |
1 files changed, 20 insertions, 15 deletions
diff --git a/install/ui/sudo.js b/install/ui/sudo.js index 89b7101b..38075f9b 100644 --- a/install/ui/sudo.js +++ b/install/ui/sudo.js @@ -447,12 +447,14 @@ IPA.sudorule_details_facet = function (spec) { }) }; - for (var i=0; i<that.sections.length; i++) { - var section = that.sections[i]; + var sections = that.sections.values; + for (var i=0; i<sections.length; i++) { + var section = sections[i]; var section_fields = section.fields.values; for (var j=0; j<section_fields.length; j++) { var field = section_fields[j]; + if (!field.is_dirty()) continue; var values = field.save(); if (!values) continue; @@ -490,23 +492,26 @@ IPA.sudorule_details_facet = function (spec) { categories[field.name].remove_values = true; } - // use setattr/addattr if param_info not available - if (!param_info) { - for (var k=0; k<values.length; k++) { - modify_operation.command.set_option( - k === 0 ? 'setattr' : 'addattr', - field.name+'='+values[k]); - modify_operation.execute = true; + if (param_info) { + if (values.length == 1) { + modify_operation.command.set_option(field.name, values[0]); + } else if (field.join) { + modify_operation.command.set_option(field.name, values.join(',')); + } else { + modify_operation.command.set_option(field.name, values); } - continue; - } - // set modify options - if (values.length == 1) { - modify_operation.command.set_option(field.name, values[0]); } else { - modify_operation.command.set_option(field.name, values); + if (values.length) { + modify_operation.command.set_option('setattr', field.name+'='+values[0]); + } else { + modify_operation.command.set_option('setattr', field.name+'='); + } + for (var k=1; k<values.length; k++) { + modify_operation.command.set_option('addattr', field.name+'='+values[k]); + } } + modify_operation.execute = true; } } |