ACC SHELL
/* ------------------------------------------------------------------------------
* Copyright (c) 2006 Novell, Inc. All Rights Reserved.
*
*
* This program is free software; you can redistribute it and/or modify it under
* the terms of version 2 of the GNU General Public License as published by the
* Free Software Foundation.
*
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
* FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along with
* this program; if not, contact Novell, Inc.
*
* To contact Novell about this file by physical or electronic mail, you may find
* current contact information at www.novell.com.
* ------------------------------------------------------------------------------
*/
/**
* File: include/sudo/dialogs.ycp
* Package: Configuration of sudo
* Summary: Dialogs definitions
* Authors: Bubli <kmachalkova@suse.cz>
*
* $Id: dialogs.ycp 27914 2006-02-13 14:32:08Z locilka $
*/
{
textdomain "sudo";
import "Label";
import "Wizard";
import "Sudo";
import "DialogTree";
include "sudo/helps.ycp";
include "sudo/complex.ycp";
string sudo_caption = _("Sudo Configuration");
list <term> CreateItems ( list <map <string, any> > aliases )
{
list < term > items = [];
integer i = 0;
foreach( map <string, any> ent, aliases, {
items = add (items, `item(`id(i), ent["name"]:"", mergestring(ent["mem"]:[],",")));
i = i+1;
});
return items;
}
void SwapUIItems( integer idx1, integer idx2)
{
list <term> items = (list <term>) UI::QueryWidget(`id("table_user_spec"), `Items);
list args1 = argsof(items[idx1]:`none());
list args2 = argsof(items[idx2]:`none());
items[idx1] = toterm( `item, merge([`id(idx1)], sublist(args2,1)) );
items[idx2] = toterm( `item, merge([`id(idx2)], sublist(args1,1)) );
UI::ChangeWidget(`id("table_user_spec"), `Items, items);
}
void SwapItems( integer idx1, integer idx2)
{
map <string, any> item1 = Sudo::GetRule( idx1 );
map <string, any> item2 = Sudo::GetRule( idx2 );
Sudo::SetRule(idx2, item1);
Sudo::SetRule(idx1, item2);
}
symbol HandleUserSpecs(string key, map event) {
any ret = event["ID"]:nil;
if (ret == "add_spec") {
Sudo::SetItem( size(Sudo::GetRules()) );
return `add_spec;
} else if (ret == "edit_spec") {
integer idx = (integer) UI::QueryWidget(`id("table_user_spec"), `CurrentItem);
Sudo::SetItem( idx );
if (Sudo::SystemRulePopup( Sudo::GetRule(idx), false))
return `edit_spec;
} else if (ret == "delete_spec") {
integer idx = (integer) UI::QueryWidget(`id("table_user_spec"), `CurrentItem);
list <term> items = (list <term>) UI::QueryWidget(`id("table_user_spec"), `Items);
if (Sudo::SystemRulePopup( Sudo::GetRule(idx), true)) {
Sudo::RemoveRule(idx);
items = remove(items, idx);
integer i = 0;
items = maplist(term tmp, items,{
list args = argsof( tmp );
term t = toterm( `item, merge ([`id(i)], sublist( args,1 )) );
i = i+1;
return t;
} );
UI::ChangeWidget(`id("table_user_spec"), `Items, items);
Sudo::SetModified();
}
EnableDisableButtons("edit_spec", "delete_spec", items);
} else if ( ret == "up"){
integer idx = (integer) UI::QueryWidget(`id("table_user_spec"), `CurrentItem);
if (idx != 0) {
SwapItems( idx, idx - 1);
SwapUIItems( idx, idx - 1 );
UI::ChangeWidget(`id("table_user_spec"), `CurrentItem, idx-1);
Sudo::SetModified();
}
} else if ( ret == "down"){
integer idx = (integer) UI::QueryWidget(`id("table_user_spec"), `CurrentItem);
if ( idx != (size( Sudo::GetRules())-1) ) {
SwapItems( idx, idx + 1 );
SwapUIItems( idx, idx + 1 );
UI::ChangeWidget(`id("table_user_spec"), `CurrentItem, idx+1);
Sudo::SetModified();
}
}
}
void InitUserSpecs (string key) {
list <term> items = [];
list <map <string,any> > rules = Sudo::GetRules();
integer idx = 0;
foreach(map <string, any> ent, rules, {
string cmds = "";
if (size(ent["commands"]:[]) > 1) {
cmds = mergestring(ent["commands"]:[],",");
}
else
cmds = (ent["commands"]:[])[0]:"";
items = add(items, `item(`id(idx),
(string) ent["user"]:"", (string) ent["host"]:"", (string) ent["run_as"]:"",
(ent["tag"]:"" == "NOPASSWD:") ? _("Yes") : _("No"), cmds));
idx = idx + 1;
});
UI::ChangeWidget(`id("table_user_spec"),`Items,items);
EnableDisableButtons("edit_spec", "delete_spec", items);
}
symbol HandleHostAliases(string key, map event) {
any ret = event["ID"]:nil;
if (ret == "add_host_alias")
{
Sudo::SetItem( size( Sudo::GetHostAliases2()) );
//current_alias_name = "";
return `add_h_alias;
}
else if (ret == "edit_host_alias")
{
Sudo::SetItem( (integer) UI::QueryWidget(`id("table_host_aliases"), `CurrentItem) );
return `edit_h_alias;
}
else if (ret == "delete_host_alias") {
integer idx = (integer) UI::QueryWidget(`id("table_host_aliases"),`CurrentItem);
list <term> items = (list <term>) UI::QueryWidget(`id("table_host_aliases"), `Items);
string name = Sudo::GetHostAliases2()[idx, "name"]:"";
boolean confirm_delete = true;
if(Sudo::SearchRules("host",name)) {
if (!Popup::ContinueCancel (sformat(_("Host alias %1 is being used in one of sudo rules.
Deleting it may result in an inconsistent sudo configuration file. Really delete it ?
"), name)))
confirm_delete = false;
}
if (confirm_delete) {
Sudo::RemoveHostAlias2( idx );
items = CreateItems( Sudo::GetHostAliases2());
UI::ChangeWidget(`id("table_host_aliases"), `Items, items);
Sudo::SetModified();
}
EnableDisableButtons("edit_host_alias", "delete_host_alias", items);
}
}
void InitHostAliases(string key) {
list <map <string, any> > aliases = Sudo::GetHostAliases2();
list <term> items = CreateItems( aliases );
UI::ChangeWidget(`id("table_host_aliases"),`Items,items);
EnableDisableButtons("edit_host_alias", "delete_host_alias", items);
}
symbol HandleUserAliases(string key, map event) {
any ret = event["ID"]:nil;
if (ret == "add_user_alias") {
/* No alias name set so far */
Sudo::SetItem( size( Sudo::GetUserAliases2()) );
return `add_u_alias;
} else if (ret == "edit_user_alias") {
Sudo::SetItem( (integer) UI::QueryWidget(`id("table_user_aliases"),`CurrentItem) );
return `edit_u_alias;
} else if (ret == "delete_user_alias") {
integer idx = (integer) UI::QueryWidget(`id("table_user_aliases"),`CurrentItem);
list <term> items = (list <term>) UI::QueryWidget(`id("table_user_aliases"), `Items);
string name = Sudo::GetUserAliases2()[idx, "name"]:"";
boolean confirm_delete = true;
if(Sudo::SearchRules("user",name)) {
if ( !Popup::ContinueCancel (sformat(_("User alias %1 is being used in one of sudo rules .
Deleting it may result in an inconsistent sudo configuration file. Really delete it ?
"), name)))
confirm_delete = false;
}
if (confirm_delete) {
Sudo::RemoveUserAlias2( idx );
items = CreateItems( Sudo::GetUserAliases2());
UI::ChangeWidget(`id("table_user_aliases"), `Items, items);
Sudo::SetModified();
}
EnableDisableButtons("edit_user_alias", "delete_user_alias", items);
}
}
void InitUserAliases (string key) {
list < map <string, any> > aliases = Sudo::GetUserAliases2();
list <term> items = CreateItems( aliases );
UI::ChangeWidget(`id("table_user_aliases"),`Items,items);
EnableDisableButtons("edit_user_alias", "delete_user_alias", items);
}
symbol HandleRunAsAliases(string key, map event) {
any ret = event["ID"]:nil;
if (ret == "add_runas_alias") {
/* No alias name set so far */
Sudo::SetItem( size(Sudo::GetRunAsAliases2()) );
return `add_r_alias;
} else if (ret == "edit_runas_alias") {
Sudo::SetItem( (integer) UI::QueryWidget(`id("table_runas_aliases"),`CurrentItem));
return `edit_r_alias;
} else if (ret == "delete_runas_alias") {
integer idx = (integer) UI::QueryWidget(`id("table_runas_aliases"),`CurrentItem);
list <term> items = (list <term>) UI::QueryWidget(`id("table_runas_aliases"), `Items);
string name = Sudo::GetRunAsAliases2()[idx, "name"]:"";
boolean confirm_delete = true;
if(Sudo::SearchRules("run_as","(" + name + ")")) {
if (!Popup::ContinueCancel (sformat(_("RunAs alias %1 is being used in one of sudo rules.
Deleting it may result in an inconsistent sudo configuration file. Really delete it ?
"), name)))
confirm_delete = false;
}
if (confirm_delete) {
Sudo::RemoveRunAsAlias2( idx );
items = CreateItems( Sudo::GetRunAsAliases2());
UI::ChangeWidget(`id("table_runas_aliases"), `Items, items);
Sudo::SetModified();
}
EnableDisableButtons("edit_runas_alias", "delete_runas_alias", items);
}
}
void InitRunAsAliases (string key) {
list < map <string, any> > aliases = Sudo::GetRunAsAliases2();
list <term> items = CreateItems( aliases );
UI::ChangeWidget(`id("table_runas_aliases"),`Items,items);
EnableDisableButtons("edit_runas_alias", "delete_runas_alias", items);
}
symbol HandleCmndAliases(string key, map event) {
any ret = event["ID"]:nil;
if (ret == "add_command_alias") {
/* No alias name set so far */
Sudo::SetItem( size(Sudo::GetCmndAliases2()) );
return `add_c_alias;
} else if (ret == "edit_command_alias") {
Sudo::SetItem( (integer) UI::QueryWidget(`id("table_command_aliases"),`CurrentItem) );
return `edit_c_alias;
} else if (ret == "delete_command_alias") {
integer idx = (integer) UI::QueryWidget(`id("table_command_aliases"),`CurrentItem);
list <term> items = (list <term>) UI::QueryWidget(`id("table_command_aliases"), `Items);
string name = Sudo::GetCmndAliases2()[idx, "name"]:"";
boolean confirm_delete = true;
if(Sudo::SearchRules("commands",name)) {
if (!Popup::ContinueCancel (sformat(_("Command alias %1 is being used in one of sudo rules.
Deleting it may result in an inconsistent sudo configuration file. Really delete it ?
"), name)))
confirm_delete = false;
}
if (confirm_delete) {
Sudo::RemoveCmndAlias2( idx );
items = CreateItems( Sudo::GetCmndAliases2());
UI::ChangeWidget(`id("table_command_aliases"), `Items, items );
Sudo::SetModified();
}
EnableDisableButtons("edit_command_alias", "delete_command_alias", items);
}
}
void InitCmndAliases (string key) {
list < map <string, any> > aliases = Sudo::GetCmndAliases2();
list <term> items = CreateItems( aliases );
UI::ChangeWidget(`id("table_command_aliases"),`Items,items);
EnableDisableButtons("edit_command_alias", "delete_command_alias", items);
}
map <string, map <string,any > > widgets_handling = $[
"UserSpecifications" : $[
"widget" : `custom,
"custom_widget" : `VBox(),
"init" : InitUserSpecs,
"handle" : HandleUserSpecs,
"help" : HELPS["spec"]:"",
],
"UserAliases" : $[
"widget" : `custom,
"custom_widget" : `VBox(),
"init" : InitUserAliases,
"handle" : HandleUserAliases,
"help" : HELPS["user_aliases"]:"",
],
"RunAsAliases" : $[
"widget" : `custom,
"custom_widget" : `VBox(),
"init" : InitRunAsAliases,
"handle" : HandleRunAsAliases,
"help" : HELPS["runas_aliases"]:"",
],
"HostAliases" : $[
"widget" : `custom,
"custom_widget" : `VBox(),
"init" : InitHostAliases,
"handle" : HandleHostAliases,
"help" : HELPS["host_aliases"]:"",
],
"CommandAliases" : $[
"widget" : `custom,
"custom_widget" : `VBox(),
"init" : InitCmndAliases,
"handle" : HandleCmndAliases,
"help" : HELPS["command_aliases"]:"",
],
];
map<symbol,any> functions = $[
`abort : Sudo::Abort,
];
map <string, map <string,any> > tabs = $[
"user_specs" : $[
"contents" : `VBox(
`HBox(
`Table(
`id("table_user_spec"),
`opt(`keepSorting),
`header (
_("Users"),
_("Hosts"),
_("RunAs"),
_("NOPASSWD"),
_("Commands")
), []
),
`VBox(
`PushButton(`id("up"), _("Up")),
`PushButton(`id("down"), _("Down"))
)
),
`Left(`HBox (
`PushButton(`id("add_spec"), `opt(`key_F3), " " + Label::AddButton() + " "),
`PushButton(`id("edit_spec"), `opt(`key_F4), " " + Label::EditButton() + " "),
`PushButton(`id("delete_spec"),`opt(`key_F5), " " + Label::DeleteButton() + " ")
))
),
"caption" : sudo_caption + ": " + _("Rules for sudo"),
"tree_item_label" : _("Rules for sudo "),
"widget_names" : ["UserSpecifications"],
],
"user_aliases" : $[
"contents" : `VBox(
`Table(
`id("table_user_aliases"),
`opt(`keepSorting),
`header (
_("Alias Name"),
_("Members")
), []
),
`Left(`HBox (
`PushButton(`id("add_user_alias"), `opt(`key_F3), " " + Label::AddButton() + " "),
`PushButton(`id("edit_user_alias"), `opt(`key_F4), " " + Label::EditButton() + " "),
`PushButton(`id("delete_user_alias"), `opt(`key_F5), " " + Label::DeleteButton() + " ")
))
),
"caption" : sudo_caption + ": " + _("User Aliases"),
"tree_item_label" : _("User Aliases"),
"widget_names" : ["UserAliases"],
] ,
"runas_aliases" : $[
"contents" : `VBox(
`Table(
`id("table_runas_aliases"),
`opt(`keepSorting),
`header (
_("Alias Name"),
_("Members")
), []
),
`Left(`HBox (
`PushButton(`id("add_runas_alias"), `opt(`key_F3), " " + Label::AddButton() + " "),
`PushButton(`id("edit_runas_alias"), `opt(`key_F4), " " + Label::EditButton() + " "),
`PushButton(`id("delete_runas_alias"), `opt(`key_F5), " " + Label::DeleteButton() + " ")
))
),
"caption" : sudo_caption + ": " + _("RunAs Aliases"),
"tree_item_label" : _("RunAs Aliases"),
"widget_names" : ["RunAsAliases"],
],
"host_aliases" : $[
"contents" : `VBox(
`Table(
`id("table_host_aliases"),
`opt(`keepSorting),
`header (
_("Alias Name"),
_("Hosts")
), []
),
`Left(`HBox (
`PushButton(`id("add_host_alias"), `opt(`key_F3), " " + Label::AddButton() + " "),
`PushButton(`id("edit_host_alias"), `opt(`key_F4), " " + Label::EditButton() + " "),
`PushButton(`id("delete_host_alias"), `opt(`key_F5), " " + Label::DeleteButton() + " ")
))
),
"caption" : sudo_caption + ": " + _("Host Aliases"),
"tree_item_label" : _("Host Aliases"),
"widget_names" : ["HostAliases"],
],
"cmnd_aliases" : $[
"contents" : `VBox(
`Table(
`id("table_command_aliases"),
`opt(`keepSorting),
`header (
_("Alias Name"),
_("Commands")
), []
),
`Left(`HBox (
`PushButton(`id("add_command_alias"), `opt(`key_F3), " " + Label::AddButton() + " "),
`PushButton(`id("edit_command_alias"), `opt(`key_F4), " " + Label::EditButton() + " "),
`PushButton(`id("delete_command_alias"), `opt(`key_F5), " " + Label::DeleteButton() + " ")
))
),
"caption" : sudo_caption + ": " + _("Command Aliases"),
"tree_item_label" : _("Command Aliases"),
"widget_names" : ["CommandAliases"],
],
];
any RunSudoDialogs() {
list <string> tree_dialogs = ["user_specs", "user_aliases", "runas_aliases", "host_aliases", "cmnd_aliases"];
return DialogTree::ShowAndRun ($[
"ids_order" : tree_dialogs,
"initial_screen" : initial_screen,
"screens" : tabs,
"widget_descr" : widgets_handling,
"back_button" : nil, //Label::BackButton(),
"abort_button" : Label::CancelButton(),
"next_button" : Label::OKButton(),
"functions" : functions,
]);
}
}
ACC SHELL 2018