• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

yast / yast-sudo / 10832030092

12 Sep 2024 01:38PM UTC coverage: 6.074%. Remained the same
10832030092

push

github

lslezak
Import the changes from the OBS SLE15-SP6 project

140 of 2305 relevant lines covered (6.07%)

0.24 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

0.0
/src/include/sudo/dialogs.rb
1
# encoding: utf-8
2

3
# ------------------------------------------------------------------------------
4
# Copyright (c) 2006 Novell, Inc. All Rights Reserved.
5
#
6
#
7
# This program is free software; you can redistribute it and/or modify it under
8
# the terms of version 2 of the GNU General Public License as published by the
9
# Free Software Foundation.
10
#
11
# This program is distributed in the hope that it will be useful, but WITHOUT
12
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
13
# FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
14
#
15
# You should have received a copy of the GNU General Public License along with
16
# this program; if not, contact Novell, Inc.
17
#
18
# To contact Novell about this file by physical or electronic mail, you may find
19
# current contact information at www.novell.com.
20
# ------------------------------------------------------------------------------
21

22
# File:        include/sudo/dialogs.ycp
23
# Package:        Configuration of sudo
24
# Summary:        Dialogs definitions
25
# Authors:        Bubli <kmachalkova@suse.cz>
26
#
27
# $Id: dialogs.ycp 27914 2006-02-13 14:32:08Z locilka $
28
module Yast
×
29
  module SudoDialogsInclude
×
30
    def initialize_sudo_dialogs(include_target)
×
31
      Yast.import "UI"
×
32

33
      textdomain "sudo"
×
34

35
      Yast.import "Label"
×
36
      Yast.import "Wizard"
×
37
      Yast.import "Sudo"
×
38
      Yast.import "DialogTree"
×
39

40
      Yast.include include_target, "sudo/helps.rb"
×
41
      Yast.include include_target, "sudo/complex.rb"
×
42

43

44
      @sudo_caption = _("Sudo Configuration")
×
45

46
      @widgets_handling = {
×
47
        "UserSpecifications" => {
×
48
          "widget"        => :custom,
×
49
          "custom_widget" => VBox(),
×
50
          "init"          => fun_ref(method(:InitUserSpecs), "void (string)"),
×
51
          "handle"        => fun_ref(
×
52
            method(:HandleUserSpecs),
×
53
            "symbol (string, map)"
×
54
          ),
×
55
          "help"          => Ops.get_string(@HELPS, "spec", "")
×
56
        },
×
57
        "UserAliases"        => {
×
58
          "widget"        => :custom,
×
59
          "custom_widget" => VBox(),
×
60
          "init"          => fun_ref(method(:InitUserAliases), "void (string)"),
×
61
          "handle"        => fun_ref(
×
62
            method(:HandleUserAliases),
×
63
            "symbol (string, map)"
×
64
          ),
×
65
          "help"          => Ops.get_string(@HELPS, "user_aliases", "")
×
66
        },
×
67
        "RunAsAliases"       => {
×
68
          "widget"        => :custom,
×
69
          "custom_widget" => VBox(),
×
70
          "init"          => fun_ref(method(:InitRunAsAliases), "void (string)"),
×
71
          "handle"        => fun_ref(
×
72
            method(:HandleRunAsAliases),
×
73
            "symbol (string, map)"
×
74
          ),
×
75
          "help"          => Ops.get_string(@HELPS, "runas_aliases", "")
×
76
        },
×
77
        "HostAliases"        => {
×
78
          "widget"        => :custom,
×
79
          "custom_widget" => VBox(),
×
80
          "init"          => fun_ref(method(:InitHostAliases), "void (string)"),
×
81
          "handle"        => fun_ref(
×
82
            method(:HandleHostAliases),
×
83
            "symbol (string, map)"
×
84
          ),
×
85
          "help"          => Ops.get_string(@HELPS, "host_aliases", "")
×
86
        },
×
87
        "CommandAliases"     => {
×
88
          "widget"        => :custom,
×
89
          "custom_widget" => VBox(),
×
90
          "init"          => fun_ref(method(:InitCmndAliases), "void (string)"),
×
91
          "handle"        => fun_ref(
×
92
            method(:HandleCmndAliases),
×
93
            "symbol (string, map)"
×
94
          ),
×
95
          "help"          => Ops.get_string(@HELPS, "command_aliases", "")
×
96
        }
×
97
      }
×
98

99
      @functions = { :abort => fun_ref(Sudo.method(:Abort), "boolean ()") }
×
100

101
      @tabs = {
×
102
        "user_specs"    => {
×
103
          "contents"        => VBox(
×
104
            HBox(
×
105
              Table(
×
106
                Id("table_user_spec"),
×
107
                Opt(:keepSorting),
×
108
                Header(
×
109
                  _("Users"),
×
110
                  _("Hosts"),
×
111
                  _("RunAs"),
×
112
                  _("NOPASSWD"),
×
113
                  _("Commands")
×
114
                ),
×
115
                []
×
116
              ),
×
117
              VBox(
×
118
                PushButton(Id("up"), _("Up")),
×
119
                PushButton(Id("down"), _("Down"))
×
120
              )
×
121
            ),
×
122
            Left(
×
123
              HBox(
×
124
                PushButton(
×
125
                  Id("add_spec"),
×
126
                  Opt(:key_F3),
×
127
                  Ops.add(Ops.add(" ", Label.AddButton), " ")
×
128
                ),
×
129
                PushButton(
×
130
                  Id("edit_spec"),
×
131
                  Opt(:key_F4),
×
132
                  Ops.add(Ops.add(" ", Label.EditButton), " ")
×
133
                ),
×
134
                PushButton(
×
135
                  Id("delete_spec"),
×
136
                  Opt(:key_F5),
×
137
                  Ops.add(Ops.add(" ", Label.DeleteButton), " ")
×
138
                )
×
139
              )
×
140
            )
×
141
          ),
×
142
          "caption"         => Ops.add(
×
143
            Ops.add(@sudo_caption, ": "),
×
144
            _("Rules for sudo")
×
145
          ),
×
146
          "tree_item_label" => _("Rules for sudo "),
×
147
          "widget_names"    => ["UserSpecifications"]
×
148
        },
×
149
        "user_aliases"  => {
×
150
          "contents"        => VBox(
×
151
            Table(
×
152
              Id("table_user_aliases"),
×
153
              Opt(:keepSorting),
×
154
              Header(_("Alias Name"), _("Members")),
×
155
              []
×
156
            ),
×
157
            Left(
×
158
              HBox(
×
159
                PushButton(
×
160
                  Id("add_user_alias"),
×
161
                  Opt(:key_F3),
×
162
                  Ops.add(Ops.add(" ", Label.AddButton), " ")
×
163
                ),
×
164
                PushButton(
×
165
                  Id("edit_user_alias"),
×
166
                  Opt(:key_F4),
×
167
                  Ops.add(Ops.add(" ", Label.EditButton), " ")
×
168
                ),
×
169
                PushButton(
×
170
                  Id("delete_user_alias"),
×
171
                  Opt(:key_F5),
×
172
                  Ops.add(Ops.add(" ", Label.DeleteButton), " ")
×
173
                )
×
174
              )
×
175
            )
×
176
          ),
×
177
          "caption"         => Ops.add(
×
178
            Ops.add(@sudo_caption, ": "),
×
179
            _("User Aliases")
×
180
          ),
×
181
          "tree_item_label" => _("User Aliases"),
×
182
          "widget_names"    => ["UserAliases"]
×
183
        },
×
184
        "runas_aliases" => {
×
185
          "contents"        => VBox(
×
186
            Table(
×
187
              Id("table_runas_aliases"),
×
188
              Opt(:keepSorting),
×
189
              Header(_("Alias Name"), _("Members")),
×
190
              []
×
191
            ),
×
192
            Left(
×
193
              HBox(
×
194
                PushButton(
×
195
                  Id("add_runas_alias"),
×
196
                  Opt(:key_F3),
×
197
                  Ops.add(Ops.add(" ", Label.AddButton), " ")
×
198
                ),
×
199
                PushButton(
×
200
                  Id("edit_runas_alias"),
×
201
                  Opt(:key_F4),
×
202
                  Ops.add(Ops.add(" ", Label.EditButton), " ")
×
203
                ),
×
204
                PushButton(
×
205
                  Id("delete_runas_alias"),
×
206
                  Opt(:key_F5),
×
207
                  Ops.add(Ops.add(" ", Label.DeleteButton), " ")
×
208
                )
×
209
              )
×
210
            )
×
211
          ),
×
212
          "caption"         => Ops.add(
×
213
            Ops.add(@sudo_caption, ": "),
×
214
            _("RunAs Aliases")
×
215
          ),
×
216
          "tree_item_label" => _("RunAs Aliases"),
×
217
          "widget_names"    => ["RunAsAliases"]
×
218
        },
×
219
        "host_aliases"  => {
×
220
          "contents"        => VBox(
×
221
            Table(
×
222
              Id("table_host_aliases"),
×
223
              Opt(:keepSorting),
×
224
              Header(_("Alias Name"), _("Hosts")),
×
225
              []
×
226
            ),
×
227
            Left(
×
228
              HBox(
×
229
                PushButton(
×
230
                  Id("add_host_alias"),
×
231
                  Opt(:key_F3),
×
232
                  Ops.add(Ops.add(" ", Label.AddButton), " ")
×
233
                ),
×
234
                PushButton(
×
235
                  Id("edit_host_alias"),
×
236
                  Opt(:key_F4),
×
237
                  Ops.add(Ops.add(" ", Label.EditButton), " ")
×
238
                ),
×
239
                PushButton(
×
240
                  Id("delete_host_alias"),
×
241
                  Opt(:key_F5),
×
242
                  Ops.add(Ops.add(" ", Label.DeleteButton), " ")
×
243
                )
×
244
              )
×
245
            )
×
246
          ),
×
247
          "caption"         => Ops.add(
×
248
            Ops.add(@sudo_caption, ": "),
×
249
            _("Host Aliases")
×
250
          ),
×
251
          "tree_item_label" => _("Host Aliases"),
×
252
          "widget_names"    => ["HostAliases"]
×
253
        },
×
254
        "cmnd_aliases"  => {
×
255
          "contents"        => VBox(
×
256
            Table(
×
257
              Id("table_command_aliases"),
×
258
              Opt(:keepSorting),
×
259
              Header(_("Alias Name"), _("Commands")),
×
260
              []
×
261
            ),
×
262
            Left(
×
263
              HBox(
×
264
                PushButton(
×
265
                  Id("add_command_alias"),
×
266
                  Opt(:key_F3),
×
267
                  Ops.add(Ops.add(" ", Label.AddButton), " ")
×
268
                ),
×
269
                PushButton(
×
270
                  Id("edit_command_alias"),
×
271
                  Opt(:key_F4),
×
272
                  Ops.add(Ops.add(" ", Label.EditButton), " ")
×
273
                ),
×
274
                PushButton(
×
275
                  Id("delete_command_alias"),
×
276
                  Opt(:key_F5),
×
277
                  Ops.add(Ops.add(" ", Label.DeleteButton), " ")
×
278
                )
×
279
              )
×
280
            )
×
281
          ),
×
282
          "caption"         => Ops.add(
×
283
            Ops.add(@sudo_caption, ": "),
×
284
            _("Command Aliases")
×
285
          ),
×
286
          "tree_item_label" => _("Command Aliases"),
×
287
          "widget_names"    => ["CommandAliases"]
×
288
        }
×
289
      }
×
290
    end
×
291

292
    def CreateItems(aliases)
×
293
      aliases = deep_copy(aliases)
×
294
      items = []
×
295
      i = 0
×
296

297
      Builtins.foreach(aliases) do |ent|
×
298
        items = Builtins.add(
×
299
          items,
×
300
          Item(
×
301
            Id(i),
×
302
            Ops.get_string(ent, "name", ""),
×
303
            Builtins.mergestring(Ops.get_list(ent, "mem", []), ",")
×
304
          )
×
305
        )
×
306
        i = Ops.add(i, 1)
×
307
      end
×
308

309
      deep_copy(items)
×
310
    end
×
311

312
    def SwapUIItems(idx1, idx2)
×
313
      items = Convert.convert(
×
314
        UI.QueryWidget(Id("table_user_spec"), :Items),
×
315
        :from => "any",
×
316
        :to   => "list <term>"
×
317
      )
×
318
      args1 = Builtins.argsof(Ops.get(items, idx1, term(:none)))
×
319
      args2 = Builtins.argsof(Ops.get(items, idx2, term(:none)))
×
320

321
      Ops.set(
×
322
        items,
×
323
        idx1,
×
324
        Builtins.toterm(
×
325
          :item,
×
326
          Builtins.merge([Id(idx1)], Builtins.sublist(args2, 1))
×
327
        )
×
328
      )
×
329
      Ops.set(
×
330
        items,
×
331
        idx2,
×
332
        Builtins.toterm(
×
333
          :item,
×
334
          Builtins.merge([Id(idx2)], Builtins.sublist(args1, 1))
×
335
        )
×
336
      )
×
337

338
      UI.ChangeWidget(Id("table_user_spec"), :Items, items)
×
339

340
      nil
×
341
    end
×
342

343
    def SwapItems(idx1, idx2)
×
344
      item1 = Sudo.GetRule(idx1)
×
345
      item2 = Sudo.GetRule(idx2)
×
346

347
      Sudo.SetRule(idx2, item1)
×
348
      Sudo.SetRule(idx1, item2)
×
349

350
      nil
×
351
    end
×
352

353
    def HandleUserSpecs(key, event)
×
354
      event = deep_copy(event)
×
355
      ret = Ops.get(event, "ID")
×
356

357
      if ret == "add_spec"
×
358
        Sudo.SetItem(Builtins.size(Sudo.GetRules))
×
359
        return :add_spec
×
360
      elsif ret == "edit_spec"
×
361
        idx = Convert.to_integer(
×
362
          UI.QueryWidget(Id("table_user_spec"), :CurrentItem)
×
363
        )
×
364
        Sudo.SetItem(idx)
×
365
        return :edit_spec if Sudo.SystemRulePopup(Sudo.GetRule(idx), false)
×
366
      elsif ret == "delete_spec"
×
367
        idx = Convert.to_integer(
×
368
          UI.QueryWidget(Id("table_user_spec"), :CurrentItem)
×
369
        )
×
370
        items = Convert.convert(
×
371
          UI.QueryWidget(Id("table_user_spec"), :Items),
×
372
          :from => "any",
×
373
          :to   => "list <term>"
×
374
        )
×
375

376
        if Sudo.SystemRulePopup(Sudo.GetRule(idx), true)
×
377
          Sudo.RemoveRule(idx)
×
378
          items = Builtins.remove(items, idx)
×
379

380
          i = 0
×
381
          items = Builtins.maplist(items) do |tmp|
×
382
            args = Builtins.argsof(tmp)
×
383
            t = Builtins.toterm(
×
384
              :item,
×
385
              Builtins.merge([Id(i)], Builtins.sublist(args, 1))
×
386
            )
×
387
            i = Ops.add(i, 1)
×
388
            deep_copy(t)
×
389
          end
×
390
          UI.ChangeWidget(Id("table_user_spec"), :Items, items)
×
391
          Sudo.SetModified
×
392
        end
×
393
        EnableDisableButtons("edit_spec", "delete_spec", items)
×
394
      elsif ret == "up"
×
395
        idx = Convert.to_integer(
×
396
          UI.QueryWidget(Id("table_user_spec"), :CurrentItem)
×
397
        )
×
398
        if idx != 0
×
399
          SwapItems(idx, Ops.subtract(idx, 1))
×
400
          SwapUIItems(idx, Ops.subtract(idx, 1))
×
401
          UI.ChangeWidget(
×
402
            Id("table_user_spec"),
×
403
            :CurrentItem,
×
404
            Ops.subtract(idx, 1)
×
405
          )
×
406
          Sudo.SetModified
×
407
        end
×
408
      elsif ret == "down"
×
409
        idx = Convert.to_integer(
×
410
          UI.QueryWidget(Id("table_user_spec"), :CurrentItem)
×
411
        )
×
412
        if idx != Ops.subtract(Builtins.size(Sudo.GetRules), 1)
×
413
          SwapItems(idx, Ops.add(idx, 1))
×
414
          SwapUIItems(idx, Ops.add(idx, 1))
×
415
          UI.ChangeWidget(Id("table_user_spec"), :CurrentItem, Ops.add(idx, 1))
×
416
          Sudo.SetModified
×
417
        end
×
418
      end
×
419

420
      nil
×
421
    end
×
422

423
    def InitUserSpecs(key)
×
424
      items = []
×
425
      rules = Sudo.GetRules
×
426
      idx = 0
×
427

428
      Builtins.foreach(rules) do |ent|
×
429
        cmds = ""
×
430
        if Ops.greater_than(Builtins.size(Ops.get_list(ent, "commands", [])), 1)
×
431
          cmds = Builtins.mergestring(Ops.get_list(ent, "commands", []), ",")
×
432
        else
×
433
          cmds = Ops.get(Ops.get_list(ent, "commands", []), 0, "")
×
434
        end
×
435
        items = Builtins.add(
×
436
          items,
×
437
          Item(
×
438
            Id(idx),
×
439
            Ops.get_string(ent, "user", ""),
×
440
            Ops.get_string(ent, "host", ""),
×
441
            Ops.get_string(ent, "run_as", ""),
×
442
            Ops.get_string(ent, "tag", "") == "NOPASSWD:" ? _("Yes") : _("No"),
×
443
            cmds
×
444
          )
×
445
        )
×
446
        idx = Ops.add(idx, 1)
×
447
      end
×
448

449
      UI.ChangeWidget(Id("table_user_spec"), :Items, items)
×
450
      EnableDisableButtons("edit_spec", "delete_spec", items)
×
451

452
      nil
×
453
    end
×
454

455
    def HandleHostAliases(key, event)
×
456
      event = deep_copy(event)
×
457
      ret = Ops.get(event, "ID")
×
458

459
      if ret == "add_host_alias"
×
460
        Sudo.SetItem(Builtins.size(Sudo.GetHostAliases2))
×
461
        #current_alias_name = "";
462
        return :add_h_alias
×
463
      elsif ret == "edit_host_alias"
×
464
        Sudo.SetItem(
×
465
          Convert.to_integer(
×
466
            UI.QueryWidget(Id("table_host_aliases"), :CurrentItem)
×
467
          )
×
468
        )
×
469
        return :edit_h_alias
×
470
      elsif ret == "delete_host_alias"
×
471
        idx = Convert.to_integer(
×
472
          UI.QueryWidget(Id("table_host_aliases"), :CurrentItem)
×
473
        )
×
474
        items = Convert.convert(
×
475
          UI.QueryWidget(Id("table_host_aliases"), :Items),
×
476
          :from => "any",
×
477
          :to   => "list <term>"
×
478
        )
×
479
        name = Ops.get_string(Sudo.GetHostAliases2, [idx, "name"], "")
×
480

481
        confirm_delete = true
×
482

483
        if Sudo.SearchRules("host", name)
×
484
          if !Popup.ContinueCancel(
×
485
              Builtins.sformat(
×
486
                _(
×
487
                  "Host alias %1 is being used in one of the sudo rules.\nDeleting it may result in an inconsistent sudo configuration file. Really delete it?\n"
×
488
                ),
×
489
                name
×
490
              )
×
491
            )
×
492
            confirm_delete = false
×
493
          end
×
494
        end
×
495

496
        if confirm_delete
×
497
          Sudo.RemoveHostAlias2(idx)
×
498
          items = CreateItems(Sudo.GetHostAliases2)
×
499
          UI.ChangeWidget(Id("table_host_aliases"), :Items, items)
×
500
          Sudo.SetModified
×
501
        end
×
502
        EnableDisableButtons("edit_host_alias", "delete_host_alias", items)
×
503
      end
×
504

505
      nil
×
506
    end
×
507

508
    def InitHostAliases(key)
×
509
      aliases = Sudo.GetHostAliases2
×
510
      items = CreateItems(aliases)
×
511

512
      UI.ChangeWidget(Id("table_host_aliases"), :Items, items)
×
513
      EnableDisableButtons("edit_host_alias", "delete_host_alias", items)
×
514

515
      nil
×
516
    end
×
517

518
    def HandleUserAliases(key, event)
×
519
      event = deep_copy(event)
×
520
      ret = Ops.get(event, "ID")
×
521

522
      if ret == "add_user_alias"
×
523
        # No alias name set so far
524
        Sudo.SetItem(Builtins.size(Sudo.GetUserAliases2))
×
525
        return :add_u_alias
×
526
      elsif ret == "edit_user_alias"
×
527
        Sudo.SetItem(
×
528
          Convert.to_integer(
×
529
            UI.QueryWidget(Id("table_user_aliases"), :CurrentItem)
×
530
          )
×
531
        )
×
532
        return :edit_u_alias
×
533
      elsif ret == "delete_user_alias"
×
534
        idx = Convert.to_integer(
×
535
          UI.QueryWidget(Id("table_user_aliases"), :CurrentItem)
×
536
        )
×
537
        items = Convert.convert(
×
538
          UI.QueryWidget(Id("table_user_aliases"), :Items),
×
539
          :from => "any",
×
540
          :to   => "list <term>"
×
541
        )
×
542
        name = Ops.get_string(Sudo.GetUserAliases2, [idx, "name"], "")
×
543

544
        confirm_delete = true
×
545

546
        if Sudo.SearchRules("user", name)
×
547
          if !Popup.ContinueCancel(
×
548
              Builtins.sformat(
×
549
                _(
×
550
                  "User alias %1 is being used in one of the sudo rules.\nDeleting it may result in an inconsistent sudo configuration file. Really delete it?\n"
×
551
                ),
×
552
                name
×
553
              )
×
554
            )
×
555
            confirm_delete = false
×
556
          end
×
557
        end
×
558

559
        if confirm_delete
×
560
          Sudo.RemoveUserAlias2(idx)
×
561
          items = CreateItems(Sudo.GetUserAliases2)
×
562
          UI.ChangeWidget(Id("table_user_aliases"), :Items, items)
×
563
          Sudo.SetModified
×
564
        end
×
565
        EnableDisableButtons("edit_user_alias", "delete_user_alias", items)
×
566
      end
×
567

568
      nil
×
569
    end
×
570

571
    def InitUserAliases(key)
×
572
      aliases = Sudo.GetUserAliases2
×
573
      items = CreateItems(aliases)
×
574

575
      UI.ChangeWidget(Id("table_user_aliases"), :Items, items)
×
576
      EnableDisableButtons("edit_user_alias", "delete_user_alias", items)
×
577

578
      nil
×
579
    end
×
580

581
    def HandleRunAsAliases(key, event)
×
582
      event = deep_copy(event)
×
583
      ret = Ops.get(event, "ID")
×
584

585
      if ret == "add_runas_alias"
×
586
        # No alias name set so far
587
        Sudo.SetItem(Builtins.size(Sudo.GetRunAsAliases2))
×
588
        return :add_r_alias
×
589
      elsif ret == "edit_runas_alias"
×
590
        Sudo.SetItem(
×
591
          Convert.to_integer(
×
592
            UI.QueryWidget(Id("table_runas_aliases"), :CurrentItem)
×
593
          )
×
594
        )
×
595
        return :edit_r_alias
×
596
      elsif ret == "delete_runas_alias"
×
597
        idx = Convert.to_integer(
×
598
          UI.QueryWidget(Id("table_runas_aliases"), :CurrentItem)
×
599
        )
×
600
        items = Convert.convert(
×
601
          UI.QueryWidget(Id("table_runas_aliases"), :Items),
×
602
          :from => "any",
×
603
          :to   => "list <term>"
×
604
        )
×
605
        name = Ops.get_string(Sudo.GetRunAsAliases2, [idx, "name"], "")
×
606

607
        confirm_delete = true
×
608

609
        if Sudo.SearchRules("run_as", Ops.add(Ops.add("(", name), ")"))
×
610
          if !Popup.ContinueCancel(
×
611
              Builtins.sformat(
×
612
                _(
×
613
                  "RunAs alias %1 is being used in one of the sudo rules.\nDeleting it may result in an inconsistent sudo configuration file. Really delete it?\n"
×
614
                ),
×
615
                name
×
616
              )
×
617
            )
×
618
            confirm_delete = false
×
619
          end
×
620
        end
×
621

622
        if confirm_delete
×
623
          Sudo.RemoveRunAsAlias2(idx)
×
624
          items = CreateItems(Sudo.GetRunAsAliases2)
×
625
          UI.ChangeWidget(Id("table_runas_aliases"), :Items, items)
×
626
          Sudo.SetModified
×
627
        end
×
628
        EnableDisableButtons("edit_runas_alias", "delete_runas_alias", items)
×
629
      end
×
630

631
      nil
×
632
    end
×
633

634
    def InitRunAsAliases(key)
×
635
      aliases = Sudo.GetRunAsAliases2
×
636
      items = CreateItems(aliases)
×
637

638
      UI.ChangeWidget(Id("table_runas_aliases"), :Items, items)
×
639
      EnableDisableButtons("edit_runas_alias", "delete_runas_alias", items)
×
640

641
      nil
×
642
    end
×
643

644
    def HandleCmndAliases(key, event)
×
645
      event = deep_copy(event)
×
646
      ret = Ops.get(event, "ID")
×
647

648
      if ret == "add_command_alias"
×
649
        # No alias name set so far
650
        Sudo.SetItem(Builtins.size(Sudo.GetCmndAliases2))
×
651
        return :add_c_alias
×
652
      elsif ret == "edit_command_alias"
×
653
        Sudo.SetItem(
×
654
          Convert.to_integer(
×
655
            UI.QueryWidget(Id("table_command_aliases"), :CurrentItem)
×
656
          )
×
657
        )
×
658
        return :edit_c_alias
×
659
      elsif ret == "delete_command_alias"
×
660
        idx = Convert.to_integer(
×
661
          UI.QueryWidget(Id("table_command_aliases"), :CurrentItem)
×
662
        )
×
663
        items = Convert.convert(
×
664
          UI.QueryWidget(Id("table_command_aliases"), :Items),
×
665
          :from => "any",
×
666
          :to   => "list <term>"
×
667
        )
×
668
        name = Ops.get_string(Sudo.GetCmndAliases2, [idx, "name"], "")
×
669
        confirm_delete = true
×
670

671
        if Sudo.SearchRules("commands", name)
×
672
          if !Popup.ContinueCancel(
×
673
              Builtins.sformat(
×
674
                _(
×
675
                  "Command alias %1 is being used in one of the sudo rules.\nDeleting it may result in an inconsistent sudo configuration file. Really delete it?\n"
×
676
                ),
×
677
                name
×
678
              )
×
679
            )
×
680
            confirm_delete = false
×
681
          end
×
682
        end
×
683

684
        if confirm_delete
×
685
          Sudo.RemoveCmndAlias2(idx)
×
686
          items = CreateItems(Sudo.GetCmndAliases2)
×
687
          UI.ChangeWidget(Id("table_command_aliases"), :Items, items)
×
688
          Sudo.SetModified
×
689
        end
×
690
        EnableDisableButtons(
×
691
          "edit_command_alias",
×
692
          "delete_command_alias",
×
693
          items
×
694
        )
×
695
      end
×
696

697
      nil
×
698
    end
×
699

700
    def InitCmndAliases(key)
×
701
      aliases = Sudo.GetCmndAliases2
×
702
      items = CreateItems(aliases)
×
703

704
      UI.ChangeWidget(Id("table_command_aliases"), :Items, items)
×
705
      EnableDisableButtons("edit_command_alias", "delete_command_alias", items)
×
706

707
      nil
×
708
    end
×
709

710
    def RunSudoDialogs
×
711
      tree_dialogs = [
×
712
        "user_specs",
×
713
        "user_aliases",
×
714
        "runas_aliases",
×
715
        "host_aliases",
×
716
        "cmnd_aliases"
×
717
      ]
×
718

719

720
      DialogTree.ShowAndRun(
×
721
        {
×
722
          "ids_order"      => tree_dialogs,
×
723
          "initial_screen" => @initial_screen,
×
724
          "screens"        => @tabs,
×
725
          "widget_descr"   => @widgets_handling,
×
726
          "back_button"    => nil, #Label::BackButton(),
×
727
          "abort_button"   => Label.CancelButton,
×
728
          "next_button"    => Label.OKButton,
×
729
          "functions"      => @functions
×
730
        }
×
731
      )
×
732
    end
×
733
  end
×
734
end
×
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc