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

yast / yast-kdump / 13586387022

28 Feb 2025 10:37AM UTC coverage: 39.762% (-0.8%) from 40.533%
13586387022

push

github

web-flow
Merge pull request #145 from yast/huha-jbohac-patch-master

Bad KDUMP_CPUS Value in Default KDump Config [master]

734 of 1846 relevant lines covered (39.76%)

3.93 hits per line

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

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

20
# File:        clients/kdump.ycp
21
# Package:        Configuration of kdump
22
# Summary:        Main file
23
# Authors:        Jozef Uhliarik <juhliarik@suse.com>
24
#
25
# $Id: kdump.ycp 27914 2006-02-13 14:32:08Z locilka $
26
#
27
# Main file for kdump configuration. Uses all other files.
28
module Yast
1✔
29
  module KdumpUifunctionsInclude
1✔
30
    def initialize_kdump_uifunctions(_include_target)
1✔
31
      textdomain "kdump"
14✔
32

33
      Yast.import "Popup"
14✔
34
      Yast.import "Kdump"
14✔
35
      Yast.import "Service"
14✔
36
      Yast.import "Package"
14✔
37
      Yast.import "Package"
14✔
38
      Yast.import "Mode"
14✔
39

40
      # EXAMPLE FUNCTIONS
41
      #    void ExampleInit(string key) {
42
      #        y2milestone("Example Init");
43
      #    }
44
      #
45
      #    symbol ExampleHandle(string key, map event) {
46
      #        any ret = event["ID"]:nil;
47
      #        y2milestone("Example Handle");
48
      #        return nil;
49
      #    }
50
      #
51
      #    void ExampleStore(string key, map event) {
52
      #        any ret = event["ID"]:nil;
53
      #        y2milestone("Example Store");
54
      #    }
55
      #
56

57
      @set_network = false
14✔
58

59
      @set_kdump_append = false
14✔
60

61
      # map of values for "KDUMP_SAVEDIR"
62
      #
63
      # local map <string, string >
64
      @KDUMP_SAVE_TARGET = {
65
        "target"    => "file", # ftp, ssh, nfs, cifs
14✔
66
        "server"    => "",
67
        "dir"       => "",
68
        "user_name" => "", # empty means anonymous
69
        "port"      => "", # deafults ftp: 21 ssh:22
70
        "share"     => "",
71
        "password"  => ""
72
      }
73

74
      @type = "local_filesystem"
14✔
75

76
      # definition UI terms for saveing dump target
77
      #
78
      # terms
79

80
      @local_filesystem = VBox(
14✔
81
        Frame(
82
          _("Local Filesystem"),
83
          HBox(
84
            HSpacing(1),
85
            VBox(
86
              Left(
87
                HBox(
88
                  InputField(Id("dir"), _("&Directory for Saving Dumps")),
89
                  VBox(
90
                    Label(""),
91
                    PushButton(Id("select_dir"), _("B&rowse"))
92
                  )
93
                )
94
              )
95
            )
96
          )
97
        )
98
      )
99

100
      @ftp = VBox(
14✔
101
        Frame(
102
          _("FTP"),
103
          HBox(
104
            HSpacing(1),
105
            VBox(
106
              Left(
107
                HBox(
108
                  Left(InputField(Id("server"), _("Server Nam&e"))),
109
                  HSpacing(1),
110
                  Left(IntField(Id("port"), _("P&ort"), 0, 65536, 21)),
111
                  HStretch()
112
                )
113
              ),
114
              # text entry
115
              Left(InputField(Id("dir"), _("&Directory on Server"))),
116
              Left(
117
                CheckBox(
118
                  Id("anonymous"),
119
                  Opt(:notify),
120
                  _("Enable Anon&ymous FTP")
121
                )
122
              ),
123
              Left(
124
                HBox(
125
                  # text entry
126
                  Left(InputField(Id("user_name"), _("&User Name"))),
127
                  HSpacing(1),
128
                  # password entry
129
                  Left(Password(Id("password"), _("&Password")))
130
                )
131
              )
132
            )
133
          )
134
        )
135
      )
136

137
      @ssh = VBox(
14✔
138
        Frame(
139
          _("SSH / SFTP"),
140
          HBox(
141
            HSpacing(1),
142
            VBox(
143
              Left(
144
                HBox(
145
                  Left(InputField(Id("server"), _("Server Nam&e"))),
146
                  HSpacing(1),
147
                  Left(IntField(Id("port"), _("P&ort"), 0, 65536, 22)),
148
                  HStretch()
149
                )
150
              ),
151
              Left(InputField(Id("dir"), _("&Directory on Server"))),
152
              # text entry
153
              Left(
154
                HBox(
155
                  # text entry
156
                  Left(InputField(Id("user_name"), _("&User Name"))),
157
                  HSpacing(1),
158
                  # password entry
159
                  Left(Password(Id("password"), _("&Password")))
160
                )
161
              )
162
            )
163
          )
164
        )
165
      )
166

167
      @nfs = VBox(
14✔
168
        Frame(
169
          _("NFS"),
170
          HBox(
171
            HSpacing(1),
172
            VBox(
173
              Left(InputField(Id("server"), _("Server Nam&e"))),
174
              # text entry
175
              Left(InputField(Id("dir"), _("&Directory on Server")))
176
            )
177
          )
178
        )
179
      )
180

181
      @cifs = VBox(
14✔
182
        Frame(
183
          _("CIFS (SMB)"),
184
          HBox(
185
            HSpacing(1),
186
            VBox(
187
              Left(InputField(Id("server"), _("Server Nam&e"))),
188
              Left(
189
                HBox(
190
                  # text entries
191
                  Left(InputField(Id("share"), _("Exported Sha&re"))),
192
                  HSpacing(1),
193
                  Left(InputField(Id("dir"), _("&Directory on Server")))
194
                )
195
              ),
196
              Left(
197
                CheckBox(
198
                  Id("anonymous"),
199
                  Opt(:notify),
200
                  _("Use Aut&hentication"),
201
                  true
202
                )
203
              ),
204
              Left(
205
                HBox(
206
                  # text entry
207
                  Left(InputField(Id("user_name"), _("&User Name"))),
208
                  HSpacing(1),
209
                  # password entry
210
                  Left(Password(Id("password"), _("&Password")))
211
                )
212
              )
213
            )
214
          )
215
        )
216
      )
217

218
      # helper list, each bit has its decimal representation
219
      @bit_weight_row = [16, 8, 4, 2, 1]
14✔
220
    end
221

222
    # Function initializes option "Enable/Disable kdump"
223
    def InitEnableDisalbeKdump(_key)
1✔
224
      enable = Kdump.add_crashkernel_param
×
225
      enable &&= Service.enabled?(KdumpClass::KDUMP_SERVICE_NAME) unless Mode.installation
×
226

227
      value = enable ? "enable_kdump" : "disable_kdump"
×
228

229
      UI.ChangeWidget(Id("EnableDisalbeKdump"), :Value, value)
×
230

231
      nil
×
232
    end
233

234
    # Function stores option "Enable/Disable kdump"
235
    #
236
    def StoreEnableDisalbeKdump(_key, _event)
1✔
237
      radiobut = Convert.to_string(
×
238
        UI.QueryWidget(Id("EnableDisalbeKdump"), :Value)
239
      )
240
      Kdump.add_crashkernel_param = radiobut == "enable_kdump"
×
241

242
      nil
×
243
    end
244

245
    # Function for handling map values
246
    #
247
    # local map <string, string > KDUMP_SAVE_TARGET
248

249
    def SetUpKDUMP_SAVE_TARGET(target)
1✔
250
      parse_target = target
×
251
      return false if target == ""
×
252

253
      pos = Builtins.search(parse_target, "/")
×
254
      pos1 = -1
×
255
      if pos.zero? # Support for the old '/var/crash' style
×
256
        Ops.set(@KDUMP_SAVE_TARGET, "target", "file")
×
257
      else
258
        Ops.set(
×
259
          @KDUMP_SAVE_TARGET,
260
          "target",
261
          Builtins.substring(parse_target, 0, Ops.subtract(pos, 1))
262
        )
263
        parse_target = Builtins.substring(parse_target, Ops.add(pos, 2))
×
264
      end
265

266
      # file
267
      if Ops.get(@KDUMP_SAVE_TARGET, "target") == "file"
×
268
        Ops.set(@KDUMP_SAVE_TARGET, "dir", parse_target)
×
269

270
        # nfs
271
      elsif Ops.get(@KDUMP_SAVE_TARGET, "target") == "nfs"
×
272
        pos = Builtins.search(parse_target, "/")
×
273
        # pos1 = pos;
274
        Ops.set(
×
275
          @KDUMP_SAVE_TARGET,
276
          "server",
277
          Builtins.substring(parse_target, 0, pos)
278
        )
279
        # pos = find(parse_target, "/");
280
        # KDUMP_SAVE_TARGET["share"]=substring(parse_target,pos1+1,pos-(pos1+1));
281
        Ops.set(
×
282
          @KDUMP_SAVE_TARGET,
283
          "dir",
284
          Builtins.substring(parse_target, pos)
285
        )
286
      elsif ["ftp", "cifs", "ssh", "sftp"].include?(@KDUMP_SAVE_TARGET["target"])
×
287
        pos = Builtins.search(parse_target, "@")
×
288

289
        if !pos.nil?
×
290
          user_pas = Builtins.substring(parse_target, 0, pos)
×
291
          pos1 = Builtins.search(user_pas, ":")
×
292

293
          if pos1.nil?
×
294
            Ops.set(
×
295
              @KDUMP_SAVE_TARGET,
296
              "user_name",
297
              Builtins.substring(user_pas, 0, pos)
298
            )
299
          else
300
            Ops.set(
×
301
              @KDUMP_SAVE_TARGET,
302
              "user_name",
303
              Builtins.substring(user_pas, 0, pos1)
304
            )
305
            Ops.set(
×
306
              @KDUMP_SAVE_TARGET,
307
              "password",
308
              Builtins.substring(user_pas, Ops.add(pos1, 1), pos)
309
            )
310
          end
311
          parse_target = Builtins.substring(parse_target, Ops.add(pos, 1))
×
312
        end
313
        # only ftp & ssh
314
        if ["ftp", "ssh", "sftp"].include?(@KDUMP_SAVE_TARGET["target"])
×
315
          pos1 = Builtins.search(parse_target, ":")
×
316
          pos = Builtins.search(parse_target, "/")
×
317

318
          if pos1.nil?
×
319
            Ops.set(
×
320
              @KDUMP_SAVE_TARGET,
321
              "server",
322
              Builtins.substring(parse_target, 0, pos)
323
            )
324
          else
325
            Ops.set(
×
326
              @KDUMP_SAVE_TARGET,
327
              "server",
328
              Builtins.substring(parse_target, 0, pos1)
329
            )
330
            Ops.set(
×
331
              @KDUMP_SAVE_TARGET,
332
              "port",
333
              Builtins.substring(
334
                parse_target,
335
                Ops.add(pos1, 1),
336
                Ops.subtract(pos, Ops.add(pos1, 1))
337
              )
338
            )
339
          end
340
          # only cifs
341
        else
342
          pos = Builtins.search(parse_target, "/")
×
343
          Ops.set(
×
344
            @KDUMP_SAVE_TARGET,
345
            "server",
346
            Builtins.substring(parse_target, 0, pos)
347
          )
348
          parse_target = Builtins.substring(parse_target, Ops.add(pos, 1))
×
349
          pos = Builtins.search(parse_target, "/")
×
350
          Ops.set(
×
351
            @KDUMP_SAVE_TARGET,
352
            "share",
353
            Builtins.substring(parse_target, 0, pos)
354
          )
355
        end
356

357
        Ops.set(
×
358
          @KDUMP_SAVE_TARGET,
359
          "dir",
360
          Builtins.substring(parse_target, pos)
361
        )
362
      end
363
      debug_KDUMP_SAVE_TARGET = deep_copy(@KDUMP_SAVE_TARGET)
×
364

365
      if Ops.get(debug_KDUMP_SAVE_TARGET, "password", "") != ""
×
366
        Ops.set(debug_KDUMP_SAVE_TARGET, "password", "**********")
×
367
      end
368

369
      Builtins.y2milestone("--------------KDUMP_SAVE_TARGET---------------")
×
370
      Builtins.y2milestone("%1", debug_KDUMP_SAVE_TARGET)
×
371
      Builtins.y2milestone("--------------KDUMP_SAVE_TARGET---------------")
×
372

373
      true
×
374
    end
375

376
    # Function for saving KDUMP_SAVE_TARGET
377
    # to standard outpu for KDUMP_SAVEDIR
378
    #
379
    # e.g. KDUMP_SAVEDIR = "ftp://[user[:pass]]@host[:port]/path
380

381
    def tostringKDUMP_SAVE_TARGET
1✔
382
      result = ""
×
383

384
      # file
385
      if Ops.get(@KDUMP_SAVE_TARGET, "target") == "file"
×
386
        result = "file://"
×
387

388
        if Ops.get(@KDUMP_SAVE_TARGET, "dir") != ""
×
389
          result = Ops.add(result, Ops.get(@KDUMP_SAVE_TARGET, "dir"))
×
390
        end
391

392
        # ftp
393
      elsif Ops.get(@KDUMP_SAVE_TARGET, "target") == "ftp"
×
394
        result = "ftp://"
×
395

396
        if Ops.get(@KDUMP_SAVE_TARGET, "user_name") == ""
×
397
          result = Ops.add(result, Ops.get(@KDUMP_SAVE_TARGET, "server"))
×
398
        else
399
          result = Ops.add(result, Ops.get(@KDUMP_SAVE_TARGET, "user_name"))
×
400

401
          if Ops.get(@KDUMP_SAVE_TARGET, "password") != ""
×
402
            result = Ops.add(
×
403
              Ops.add(result, ":"),
404
              Ops.get(@KDUMP_SAVE_TARGET, "password")
405
            )
406
          end
407
          result = Ops.add(
×
408
            Ops.add(result, "@"),
409
            Ops.get(@KDUMP_SAVE_TARGET, "server")
410
          )
411
        end
412

413
        # add port if it is set...
414
        result = if Ops.get(@KDUMP_SAVE_TARGET, "port") == ""
×
415
          Ops.add(result, Ops.get(@KDUMP_SAVE_TARGET, "dir"))
×
416
        else
417
          Ops.add(
×
418
            Ops.add(Ops.add(result, ":"), Ops.get(@KDUMP_SAVE_TARGET, "port")),
419
            Ops.get(@KDUMP_SAVE_TARGET, "dir")
420
          )
421
        end
422
        # ssh
423
      elsif ["ssh", "sftp"].include?(@KDUMP_SAVE_TARGET["target"])
×
424
        result = @KDUMP_SAVE_TARGET["target"] + "://"
×
425

426
        if Ops.get(@KDUMP_SAVE_TARGET, "user_name") != "" &&
×
427
            Ops.get(@KDUMP_SAVE_TARGET, "password") == ""
428
          result = Ops.add(
×
429
            Ops.add(result, Ops.get(@KDUMP_SAVE_TARGET, "user_name")),
430
            "@"
431
          )
432
        elsif Ops.get(@KDUMP_SAVE_TARGET, "user_name") != "" &&
×
433
            Ops.get(@KDUMP_SAVE_TARGET, "password") != ""
434
          result = Ops.add(result, Ops.get(@KDUMP_SAVE_TARGET, "user_name"))
×
435
          result = Ops.add(
×
436
            Ops.add(
437
              Ops.add(result, ":"),
438
              Ops.get(@KDUMP_SAVE_TARGET, "password")
439
            ),
440
            "@"
441
          )
442
        end
443
        result = Ops.add(result, Ops.get(@KDUMP_SAVE_TARGET, "server"))
×
444
        # add port if it is set...
445
        result = if Ops.get(@KDUMP_SAVE_TARGET, "port") == ""
×
446
          Ops.add(result, Ops.get(@KDUMP_SAVE_TARGET, "dir"))
×
447
        else
448
          Ops.add(
×
449
            Ops.add(Ops.add(result, ":"), Ops.get(@KDUMP_SAVE_TARGET, "port")),
450
            Ops.get(@KDUMP_SAVE_TARGET, "dir")
451
          )
452
        end
453

454
        # nfs
455
      elsif Ops.get(@KDUMP_SAVE_TARGET, "target") == "nfs"
×
456
        result = Ops.add(
×
457
          Ops.add("nfs://", Ops.get(@KDUMP_SAVE_TARGET, "server")),
458
          Ops.get(@KDUMP_SAVE_TARGET, "dir")
459
        )
460

461
        # cifs
462
      elsif Ops.get(@KDUMP_SAVE_TARGET, "target") == "cifs"
×
463
        result = "cifs://"
×
464

465
        if Builtins.findfirstof(Ops.get(@KDUMP_SAVE_TARGET, "dir", ""), "/") != 0
×
466
          Ops.set(
×
467
            @KDUMP_SAVE_TARGET,
468
            "dir",
469
            Ops.add("/", Ops.get(@KDUMP_SAVE_TARGET, "dir", ""))
470
          )
471
        end
472

473
        if Ops.get(@KDUMP_SAVE_TARGET, "user_name") == ""
×
474
          result = Ops.add(
×
475
            Ops.add(
476
              Ops.add(
477
                Ops.add(result, Ops.get(@KDUMP_SAVE_TARGET, "server")),
478
                "/"
479
              ),
480
              Ops.get(@KDUMP_SAVE_TARGET, "share")
481
            ),
482
            Ops.get(@KDUMP_SAVE_TARGET, "dir")
483
          )
484
        else
485
          result = Ops.add(result, Ops.get(@KDUMP_SAVE_TARGET, "user_name"))
×
486

487
          if Ops.get(@KDUMP_SAVE_TARGET, "password") != ""
×
488
            result = Ops.add(
×
489
              Ops.add(result, ":"),
490
              Ops.get(@KDUMP_SAVE_TARGET, "password")
491
            )
492
          end
493

494
          result = Ops.add(
×
495
            Ops.add(
496
              Ops.add(
497
                Ops.add(
498
                  Ops.add(result, "@"),
499
                  Ops.get(@KDUMP_SAVE_TARGET, "server")
500
                ),
501
                "/"
502
              ),
503
              Ops.get(@KDUMP_SAVE_TARGET, "share")
504
            ),
505
            Ops.get(@KDUMP_SAVE_TARGET, "dir")
506
          )
507
        end
508
      end
509

510
      # Popup::Message(result);
511

512
      # y2milestone("-----------------KDUMP_SAVEDIR--------------------");
513
      # y2milestone("%1",result);
514
      # y2milestone("-----------------KDUMP_SAVEDIR--------------------");
515

516
      result
×
517
    end
518

519
    # Function initializes option "Save Traget for Kdump Images"
520
    #
521

522
    def InitTargetKdump(_key)
1✔
523
      SetUpKDUMP_SAVE_TARGET(Ops.get(Kdump.KDUMP_SETTINGS, "KDUMP_SAVEDIR"))
×
524

525
      if Ops.get(@KDUMP_SAVE_TARGET, "target") == "file"
×
526
        # UI::ChangeWidget(`id ("local_filesystem"), `Value, true);
527
        UI.ChangeWidget(Id("TargetKdump"), :Value, "local_filesystem")
×
528
        UI.ReplaceWidget(Id("Targets"), @local_filesystem)
×
529
        UI.ChangeWidget(Id("dir"), :Value, Ops.get(@KDUMP_SAVE_TARGET, "dir"))
×
530
      elsif Ops.get(@KDUMP_SAVE_TARGET, "target") == "nfs"
×
531
        UI.ReplaceWidget(Id("Targets"), @nfs)
×
532
        # UI::ChangeWidget(`id ("nfs"), `Value, true);
533
        UI.ChangeWidget(Id("TargetKdump"), :Value, "nfs")
×
534
        UI.ChangeWidget(
×
535
          Id("server"),
536
          :Value,
537
          Ops.get(@KDUMP_SAVE_TARGET, "server")
538
        )
539
        UI.ChangeWidget(Id("dir"), :Value, Ops.get(@KDUMP_SAVE_TARGET, "dir"))
×
540
      elsif ["ssh", "sftp"].include?(@KDUMP_SAVE_TARGET["target"])
×
541
        UI.ReplaceWidget(Id("Targets"), @ssh)
×
542
        UI.ChangeWidget(Id("TargetKdump"), :Value, @KDUMP_SAVE_TARGET["target"])
×
543
        if Ops.get(@KDUMP_SAVE_TARGET, "port") != ""
×
544
          UI.ChangeWidget(
×
545
            Id("port"),
546
            :Value,
547
            Builtins.tointeger(Ops.get(@KDUMP_SAVE_TARGET, "port"))
548
          )
549
        end
550
        Builtins.foreach(["server", "user_name", "dir", "password"]) do |key2|
×
551
          UI.ChangeWidget(Id(key2), :Value, Ops.get(@KDUMP_SAVE_TARGET, key2))
×
552
        end
553
      elsif Ops.get(@KDUMP_SAVE_TARGET, "target") == "ftp"
×
554
        UI.ReplaceWidget(Id("Targets"), @ftp)
×
555
        # UI::ChangeWidget(`id ("ftp"), `Value, true);
556
        UI.ChangeWidget(Id("TargetKdump"), :Value, "ftp")
×
557
        if Ops.get(@KDUMP_SAVE_TARGET, "port") != ""
×
558
          UI.ChangeWidget(
×
559
            Id("port"),
560
            :Value,
561
            Builtins.tointeger(Ops.get(@KDUMP_SAVE_TARGET, "port"))
562
          )
563
        end
564
        Builtins.foreach(["server", "dir"]) do |key2|
×
565
          UI.ChangeWidget(Id(key2), :Value, Ops.get(@KDUMP_SAVE_TARGET, key2))
×
566
        end
567

568
        if Ops.get(@KDUMP_SAVE_TARGET, "user_name") == ""
×
569
          UI.ChangeWidget(Id("user_name"), :Enabled, false)
×
570
          UI.ChangeWidget(Id("password"), :Enabled, false)
×
571
          UI.ChangeWidget(Id("anonymous"), :Value, true)
×
572
        else
573
          UI.ChangeWidget(
×
574
            Id("user_name"),
575
            :Value,
576
            Ops.get(@KDUMP_SAVE_TARGET, "user_name")
577
          )
578
          UI.ChangeWidget(
×
579
            Id("password"),
580
            :Value,
581
            Ops.get(@KDUMP_SAVE_TARGET, "password")
582
          )
583
        end
584
      elsif Ops.get(@KDUMP_SAVE_TARGET, "target") == "cifs"
×
585
        UI.ReplaceWidget(Id("Targets"), @cifs)
×
586
        # UI::ChangeWidget(`id ("cifs"), `Value, true);
587
        UI.ChangeWidget(Id("TargetKdump"), :Value, "cifs")
×
588
        Builtins.foreach(["server", "dir", "share"]) do |key2|
×
589
          UI.ChangeWidget(Id(key2), :Value, Ops.get(@KDUMP_SAVE_TARGET, key2))
×
590
        end
591

592
        if Ops.get(@KDUMP_SAVE_TARGET, "user_name") == ""
×
593
          UI.ChangeWidget(Id("user_name"), :Enabled, false)
×
594
          UI.ChangeWidget(Id("password"), :Enabled, false)
×
595
          UI.ChangeWidget(Id("anonymous"), :Value, false)
×
596
        else
597
          UI.ChangeWidget(
×
598
            Id("user_name"),
599
            :Value,
600
            Ops.get(@KDUMP_SAVE_TARGET, "user_name")
601
          )
602
          UI.ChangeWidget(
×
603
            Id("password"),
604
            :Value,
605
            Ops.get(@KDUMP_SAVE_TARGET, "password")
606
          )
607
        end
608
      end
609

610
      nil
×
611
    end
612

613
    # Function validates options in
614
    # "Saving Target for Kdump Image"
615

616
    def ValidTargetKdump(_key, _event)
1✔
617
      radiobut = Builtins.tostring(UI.QueryWidget(Id("TargetKdump"), :Value))
×
618
      value = nil
×
619

620
      if radiobut == "local_filesystem"
×
621
        value = Builtins.tostring(UI.QueryWidget(Id("dir"), :Value))
×
622

623
        if value.nil? || value == ""
×
624
          Popup.Error(_("You need to specify \"Directory for Saving Dumps\""))
×
625
          UI.SetFocus(Id("dir"))
×
626
          return false
×
627
        end
628
      elsif radiobut == "ftp"
×
629
        value = Builtins.tostring(UI.QueryWidget(Id("server"), :Value))
×
630

631
        if value.nil? || value == ""
×
632
          Popup.Error(_("You need to specify \"Server Name\""))
×
633
          UI.SetFocus(Id("server"))
×
634
          return false
×
635
        end
636
        value = Builtins.tostring(UI.QueryWidget(Id("dir"), :Value))
×
637

638
        if value.nil? || value == ""
×
639
          Popup.Error(_("You need to specify \"Directory on Server\""))
×
640
          UI.SetFocus(Id("dir"))
×
641
          return false
×
642
        end
643
        anon = Convert.to_boolean(UI.QueryWidget(Id("anonymous"), :Value))
×
644

645
        if !anon
×
646
          value = Builtins.tostring(UI.QueryWidget(Id("user_name"), :Value))
×
647

648
          if value.nil? || value == ""
×
649
            Popup.Error(_("You need to specify \"User Name\""))
×
650
            UI.SetFocus(Id("user_name"))
×
651
            return false
×
652
          end
653
        end
654
      elsif ["ssh", "sftp", "nfs"].include?(radiobut)
×
655
        value = Builtins.tostring(UI.QueryWidget(Id("server"), :Value))
×
656

657
        if value.nil? || value == ""
×
658
          Popup.Error(_("You need to specify \"Server Name\""))
×
659
          UI.SetFocus(Id("server"))
×
660
          return false
×
661
        end
662
        value = Builtins.tostring(UI.QueryWidget(Id("dir"), :Value))
×
663

664
        if value.nil? || value == ""
×
665
          Popup.Error(_("You need to specify \"Directory on Server\""))
×
666
          UI.SetFocus(Id("dir"))
×
667
          return false
×
668
        end
669
      elsif radiobut == "cifs"
×
670
        # fix for bnc #307307 module should check if cifs tools are installed when requested
671
        if Mode.installation || Mode.autoinst
×
672
          Kdump.kdump_packages = Builtins.add(
×
673
            Kdump.kdump_packages,
674
            "cifs-mount"
675
          )
676
          Builtins.y2milestone(
×
677
            "add cifs-mount to selected packages to installation"
678
          )
679
        elsif !Package.Installed("cifs-mount")
×
680
          Builtins.y2milestone(
×
681
            "SMB/CIFS share cannot be mounted, installing missing 'cifs-mount' package..."
682
          )
683
          # install cifs-mount package
684
          Package.CheckAndInstallPackages(["cifs-mount"])
×
685
        end
686

687
        value = Builtins.tostring(UI.QueryWidget(Id("server"), :Value))
×
688

689
        if value.nil? || value == ""
×
690
          Popup.Error(_("You need to specify \"Server Name\""))
×
691
          UI.SetFocus(Id("server"))
×
692
          return false
×
693
        end
694
        value = Builtins.tostring(UI.QueryWidget(Id("dir"), :Value))
×
695

696
        if value.nil? || value == ""
×
697
          Popup.Error(_("You need to specify \"Directory on Server\""))
×
698
          UI.SetFocus(Id("dir"))
×
699
          return false
×
700
        end
701
        value = Builtins.tostring(UI.QueryWidget(Id("share"), :Value))
×
702

703
        if value.nil? || value == ""
×
704
          Popup.Error(_("You need to specify \"Exported Share\""))
×
705
          UI.SetFocus(Id("share"))
×
706
          return false
×
707
        end
708
        anon = Convert.to_boolean(UI.QueryWidget(Id("anonymous"), :Value))
×
709

710
        if anon
×
711
          value = Builtins.tostring(UI.QueryWidget(Id("user_name"), :Value))
×
712

713
          if value.nil? || value == ""
×
714
            Popup.Error(_("You need to specify \"User Name\""))
×
715
            UI.SetFocus(Id("user_name"))
×
716
            return false
×
717
          end
718
        end
719
      end
720

721
      true
×
722
    end
723

724
    # Function handles "Saving Target for Kdump Image"
725
    #
726

727
    def HandleTargetKdump(_key, event)
1✔
728
      event = deep_copy(event)
×
729
      event_name = Ops.get(event, "ID")
×
730
      # StoreTargetKdump ( key, event);
731
      StoreTargetKdumpHandle(@type)
×
732
      radiobut = Builtins.tostring(UI.QueryWidget(Id("TargetKdump"), :Value))
×
733
      @type = radiobut
×
734

735
      if event_name == "anonymous"
×
736
        value = Convert.to_boolean(UI.QueryWidget(Id("anonymous"), :Value))
×
737
        target = Builtins.tostring(UI.QueryWidget(Id("TargetKdump"), :Value))
×
738

739
        if (value && target == "ftp") || (!value && target == "cifs")
×
740
          UI.ChangeWidget(Id("user_name"), :Enabled, false)
×
741
          UI.ChangeWidget(Id("password"), :Enabled, false)
×
742
          # KDUMP_SAVE_TARGET["user_name"]="";
743
          # KDUMP_SAVE_TARGET["password"]="";
744
        elsif (value && target == "cifs") || (!value && target == "ftp")
×
745
          UI.ChangeWidget(Id("user_name"), :Enabled, true)
×
746
          UI.ChangeWidget(Id("password"), :Enabled, true)
×
747
        end
748
      elsif radiobut == "local_filesystem"
×
749
        UI.ReplaceWidget(Id("Targets"), @local_filesystem)
×
750
        @set_network = false
×
751
        UI.ChangeWidget(Id("dir"), :Value, Ops.get(@KDUMP_SAVE_TARGET, "dir"))
×
752
        if event_name == "select_dir"
×
753
          dir = UI.AskForExistingDirectory(
×
754
            "/",
755
            _("Select directory for saving dump images")
756
          )
757
          UI.ChangeWidget(Id("dir"), :Value, dir)
×
758
        end
759
      elsif radiobut == "ftp"
×
760
        UI.ReplaceWidget(Id("Targets"), @ftp)
×
761

762
        if Ops.get(@KDUMP_SAVE_TARGET, "port") != ""
×
763
          UI.ChangeWidget(
×
764
            Id("port"),
765
            :Value,
766
            Builtins.tointeger(Ops.get(@KDUMP_SAVE_TARGET, "port"))
767
          )
768
        end
769
        Builtins.foreach(["server", "dir"]) do |key2|
×
770
          UI.ChangeWidget(Id(key2), :Value, Ops.get(@KDUMP_SAVE_TARGET, key2))
×
771
        end
772

773
        if Ops.get(@KDUMP_SAVE_TARGET, "user_name") == ""
×
774
          UI.ChangeWidget(Id("user_name"), :Enabled, false)
×
775
          UI.ChangeWidget(Id("password"), :Enabled, false)
×
776
          UI.ChangeWidget(Id("anonymous"), :Value, true)
×
777
        else
778
          UI.ChangeWidget(
×
779
            Id("user_name"),
780
            :Value,
781
            Ops.get(@KDUMP_SAVE_TARGET, "user_name")
782
          )
783
          UI.ChangeWidget(
×
784
            Id("password"),
785
            :Value,
786
            Ops.get(@KDUMP_SAVE_TARGET, "password")
787
          )
788
        end
789
      elsif ["ssh", "sftp"].include?(radiobut)
×
790
        UI.ReplaceWidget(Id("Targets"), @ssh)
×
791

792
        if Ops.get(@KDUMP_SAVE_TARGET, "port") != ""
×
793
          UI.ChangeWidget(
×
794
            Id("port"),
795
            :Value,
796
            Builtins.tointeger(Ops.get(@KDUMP_SAVE_TARGET, "port"))
797
          )
798
        end
799
        Builtins.foreach(["server", "user_name", "dir", "password"]) do |key2|
×
800
          UI.ChangeWidget(Id(key2), :Value, Ops.get(@KDUMP_SAVE_TARGET, key2))
×
801
        end
802
      elsif radiobut == "nfs"
×
803
        UI.ReplaceWidget(Id("Targets"), @nfs)
×
804
        UI.ChangeWidget(
×
805
          Id("server"),
806
          :Value,
807
          Ops.get(@KDUMP_SAVE_TARGET, "server")
808
        )
809
        UI.ChangeWidget(Id("dir"), :Value, Ops.get(@KDUMP_SAVE_TARGET, "dir"))
×
810
      elsif radiobut == "cifs"
×
811
        UI.ReplaceWidget(Id("Targets"), @cifs)
×
812
        Builtins.foreach(["server", "dir", "share", "user_name", "password"]) do |key2|
×
813
          UI.ChangeWidget(Id(key2), :Value, Ops.get(@KDUMP_SAVE_TARGET, key2))
×
814
        end
815

816
        if Ops.get(@KDUMP_SAVE_TARGET, "user_name") == ""
×
817
          UI.ChangeWidget(Id("user_name"), :Enabled, false)
×
818
          UI.ChangeWidget(Id("password"), :Enabled, false)
×
819
          UI.ChangeWidget(Id("anonymous"), :Value, false)
×
820
        else
821
          UI.ChangeWidget(
×
822
            Id("user_name"),
823
            :Value,
824
            Ops.get(@KDUMP_SAVE_TARGET, "user_name")
825
          )
826
          UI.ChangeWidget(
×
827
            Id("password"),
828
            :Value,
829
            Ops.get(@KDUMP_SAVE_TARGET, "password")
830
          )
831
        end
832
      end
833
      nil
×
834
    end
835

836
    def StoreTargetKdumpHandle(type)
1✔
837
      radiobut = type
×
838
      value = nil
×
839

840
      if radiobut == "local_filesystem"
×
841
        Ops.set(@KDUMP_SAVE_TARGET, "target", "file")
×
842
        # directory
843
        value = Builtins.tostring(UI.QueryWidget(Id("dir"), :Value))
×
844

845
        if value.nil?
×
846
          Ops.set(@KDUMP_SAVE_TARGET, "dir", "")
×
847
        else
848
          Ops.set(@KDUMP_SAVE_TARGET, "dir", value)
×
849
        end
850
      elsif radiobut == "ftp"
×
851
        Ops.set(@KDUMP_SAVE_TARGET, "target", "ftp")
×
852

853
        # server
854
        value = Builtins.tostring(UI.QueryWidget(Id("server"), :Value))
×
855
        if value.nil?
×
856
          Ops.set(@KDUMP_SAVE_TARGET, "server", "")
×
857
        else
858
          Ops.set(@KDUMP_SAVE_TARGET, "server", value)
×
859
        end
860

861
        # port
862
        if Builtins.tostring(UI.QueryWidget(Id("port"), :Value)) == "21"
×
863
          Ops.set(@KDUMP_SAVE_TARGET, "port", "")
×
864
        else
865
          Ops.set(
×
866
            @KDUMP_SAVE_TARGET,
867
            "port",
868
            Builtins.tostring(UI.QueryWidget(Id("port"), :Value))
869
          )
870
        end
871

872
        # directory
873
        value = Builtins.tostring(UI.QueryWidget(Id("dir"), :Value))
×
874
        if value.nil?
×
875
          Ops.set(@KDUMP_SAVE_TARGET, "dir", "")
×
876
        else
877
          Ops.set(@KDUMP_SAVE_TARGET, "dir", value)
×
878
        end
879

880
        # user_name vs. anonymous
881
        value = Builtins.tostring(UI.QueryWidget(Id("user_name"), :Value))
×
882

883
        if value.nil?
×
884
          Ops.set(@KDUMP_SAVE_TARGET, "user_name", "")
×
885
        else
886
          Ops.set(@KDUMP_SAVE_TARGET, "user_name", value)
×
887
        end
888

889
        # password
890
        value = Builtins.tostring(UI.QueryWidget(Id("password"), :Value))
×
891

892
        if !value.nil? && Ops.get(@KDUMP_SAVE_TARGET, "user_name") != ""
×
893
          Ops.set(@KDUMP_SAVE_TARGET, "password", value)
×
894
        else
895
          Ops.set(@KDUMP_SAVE_TARGET, "password", "")
×
896
        end
897

898
        # directory
899
        if UI.QueryWidget(Id("dir"), :Value)
×
900
          Ops.set(
×
901
            @KDUMP_SAVE_TARGET,
902
            "dir",
903
            Builtins.tostring(UI.QueryWidget(Id("dir"), :Value))
904
          )
905
        else
906
          Ops.set(@KDUMP_SAVE_TARGET, "dir", "")
×
907
        end
908
      elsif ["ssh", "sftp"].include?(radiobut)
×
909
        @KDUMP_SAVE_TARGET["target"] = radiobut
×
910

911
        # server
912
        value = Builtins.tostring(UI.QueryWidget(Id("server"), :Value))
×
913

914
        if value.nil?
×
915
          Ops.set(@KDUMP_SAVE_TARGET, "server", "")
×
916
        else
917
          Ops.set(@KDUMP_SAVE_TARGET, "server", value)
×
918
        end
919

920
        # port
921
        if Builtins.tostring(UI.QueryWidget(Id("port"), :Value)) == "22"
×
922
          Ops.set(@KDUMP_SAVE_TARGET, "port", "")
×
923
        else
924
          Ops.set(
×
925
            @KDUMP_SAVE_TARGET,
926
            "port",
927
            Builtins.tostring(UI.QueryWidget(Id("port"), :Value))
928
          )
929
        end
930

931
        # directory
932
        value = Builtins.tostring(UI.QueryWidget(Id("dir"), :Value))
×
933

934
        if value.nil?
×
935
          Ops.set(@KDUMP_SAVE_TARGET, "dir", "")
×
936
        else
937
          Ops.set(@KDUMP_SAVE_TARGET, "dir", value)
×
938
        end
939

940
        # user_name
941
        value = Builtins.tostring(UI.QueryWidget(Id("user_name"), :Value))
×
942

943
        if value.nil?
×
944
          Ops.set(@KDUMP_SAVE_TARGET, "user_name", "")
×
945
        else
946
          Ops.set(@KDUMP_SAVE_TARGET, "user_name", value)
×
947
        end
948

949
        # password
950
        value = Builtins.tostring(UI.QueryWidget(Id("password"), :Value))
×
951

952
        if !value.nil? && Ops.get(@KDUMP_SAVE_TARGET, "user_name") != ""
×
953
          Ops.set(@KDUMP_SAVE_TARGET, "password", value)
×
954
        else
955
          Ops.set(@KDUMP_SAVE_TARGET, "password", "")
×
956
        end
957
      elsif radiobut == "nfs"
×
958
        Ops.set(@KDUMP_SAVE_TARGET, "target", "nfs")
×
959

960
        # server
961
        value = Builtins.tostring(UI.QueryWidget(Id("server"), :Value))
×
962

963
        if value.nil?
×
964
          Ops.set(@KDUMP_SAVE_TARGET, "server", "")
×
965
        else
966
          Ops.set(@KDUMP_SAVE_TARGET, "server", value)
×
967
        end
968

969
        # directory
970
        value = Builtins.tostring(UI.QueryWidget(Id("dir"), :Value))
×
971

972
        if value.nil?
×
973
          Ops.set(@KDUMP_SAVE_TARGET, "dir", "")
×
974
        else
975
          Ops.set(@KDUMP_SAVE_TARGET, "dir", value)
×
976
        end
977
      elsif radiobut == "cifs"
×
978
        Ops.set(@KDUMP_SAVE_TARGET, "target", "cifs")
×
979

980
        # server
981
        value = Builtins.tostring(UI.QueryWidget(Id("server"), :Value))
×
982

983
        if value.nil?
×
984
          Ops.set(@KDUMP_SAVE_TARGET, "server", "")
×
985
        else
986
          Ops.set(@KDUMP_SAVE_TARGET, "server", value)
×
987
        end
988

989
        # share
990
        value = Builtins.tostring(UI.QueryWidget(Id("share"), :Value))
×
991

992
        if value.nil?
×
993
          Ops.set(@KDUMP_SAVE_TARGET, "share", "")
×
994
        else
995
          Ops.set(@KDUMP_SAVE_TARGET, "share", value)
×
996
        end
997

998
        # directory
999
        value = Builtins.tostring(UI.QueryWidget(Id("dir"), :Value))
×
1000

1001
        if value.nil?
×
1002
          Ops.set(@KDUMP_SAVE_TARGET, "dir", "")
×
1003
        else
1004
          Ops.set(@KDUMP_SAVE_TARGET, "dir", value)
×
1005
        end
1006

1007
        # user_name vs. anonymous
1008
        value = Builtins.tostring(UI.QueryWidget(Id("user_name"), :Value))
×
1009

1010
        if value.nil?
×
1011
          Ops.set(@KDUMP_SAVE_TARGET, "user_name", "")
×
1012
        else
1013
          Ops.set(@KDUMP_SAVE_TARGET, "user_name", value)
×
1014
        end
1015

1016
        # password
1017
        value = Builtins.tostring(UI.QueryWidget(Id("password"), :Value))
×
1018

1019
        if !value.nil? && Ops.get(@KDUMP_SAVE_TARGET, "user_name") != ""
×
1020
          Ops.set(@KDUMP_SAVE_TARGET, "password", value)
×
1021
        else
1022
          Ops.set(@KDUMP_SAVE_TARGET, "password", "")
×
1023
        end
1024
      end
1025
      Ops.set(Kdump.KDUMP_SETTINGS, "KDUMP_SAVEDIR", tostringKDUMP_SAVE_TARGET)
×
1026

1027
      nil
×
1028
    end
1029

1030
    # Function stores option
1031
    # "Saving Target for kdump Image"
1032

1033
    def StoreTargetKdump(_key, _event)
1✔
1034
      @type = Builtins.tostring(UI.QueryWidget(Id("TargetKdump"), :Value))
×
1035

1036
      nil
×
1037
    end
1038

1039
    # Function initializes option "Kdump Command Line"
1040
    #
1041

1042
    def InitKdumpCommandLine(_key)
1✔
1043
      value = Ops.get(Kdump.KDUMP_SETTINGS, "KDUMP_COMMANDLINE")
×
1044
      UI.ChangeWidget(Id("KdumpCommandLine"), :Value, value.nil? ? "" : value)
×
1045

1046
      nil
×
1047
    end
1048

1049
    # Function stores option "Kdump Command Line"
1050
    #
1051
    def StoreKdumpCommandLine(_key, _event)
1✔
1052
      Ops.set(
×
1053
        Kdump.KDUMP_SETTINGS,
1054
        "KDUMP_COMMANDLINE",
1055
        Builtins.tostring(UI.QueryWidget(Id("KdumpCommandLine"), :Value))
1056
      )
1057

1058
      nil
×
1059
    end
1060

1061
    # Function initializes option "Kdump Command Line Append"
1062
    #
1063

1064
    def InitKdumpCommandLineAppend(_key)
1✔
1065
      value = Ops.get(Kdump.KDUMP_SETTINGS, "KDUMP_COMMANDLINE_APPEND")
×
1066
      UI.ChangeWidget(
×
1067
        Id("KdumpCommandLineAppend"),
1068
        :Value,
1069
        value.nil? ? "" : value
×
1070
      )
1071

1072
      nil
×
1073
    end
1074

1075
    # Function stores option "Kdump Command Line Append"
1076
    #
1077
    def StoreKdumpCommandLineAppend(_key, _event)
1✔
1078
      Ops.set(
×
1079
        Kdump.KDUMP_SETTINGS,
1080
        "KDUMP_COMMANDLINE_APPEND",
1081
        Builtins.tostring(UI.QueryWidget(Id("KdumpCommandLineAppend"), :Value))
1082
      )
1083

1084
      nil
×
1085
    end
1086

1087
    # Function initializes option "Number of Old Dumps"
1088
    def InitNumberDumps(_key)
1✔
1089
      UI.ChangeWidget(
×
1090
        Id("NumberDumps"),
1091
        :Value,
1092
        Builtins.tointeger(
1093
          Ops.get(Kdump.KDUMP_SETTINGS, "KDUMP_KEEP_OLD_DUMPS")
1094
        )
1095
      )
1096

1097
      nil
×
1098
    end
1099

1100
    # Function stores option "Number of Old Dumps"
1101
    def StoreNumberDumps(_key, _event)
1✔
1102
      Ops.set(
×
1103
        Kdump.KDUMP_SETTINGS,
1104
        "KDUMP_KEEP_OLD_DUMPS",
1105
        Builtins.tostring(UI.QueryWidget(Id("NumberDumps"), :Value))
1106
      )
1107

1108
      nil
×
1109
    end
1110

1111
    # Function initializes option
1112
    # "Enable Immediate Reboot After Saving the Core"
1113

1114
    def InitEnableReboot(_key)
1✔
1115
      UI.ChangeWidget(
×
1116
        Id("EnableReboot"),
1117
        :Value,
1118
        ["yes", "true", "1"].include?(Ops.get(Kdump.KDUMP_SETTINGS, "KDUMP_IMMEDIATE_REBOOT"))
1119
      )
1120

1121
      nil
×
1122
    end
1123

1124
    # Function stores option
1125
    # "Enable Immediate Reboot After Saving the Core"
1126

1127
    def StoreEnableReboot(_key, _event)
1✔
1128
      Ops.set(
×
1129
        Kdump.KDUMP_SETTINGS,
1130
        "KDUMP_IMMEDIATE_REBOOT",
1131
        Convert.to_boolean(UI.QueryWidget(Id("EnableReboot"), :Value)) ? "true" : "false"
×
1132
      )
1133

1134
      nil
×
1135
    end
1136

1137
    # Function initializes option
1138
    # "Dump Level" - visualization in UI
1139

1140
    def SetDumpLevel(bit_number)
1✔
1141
      counter = -1
×
1142
      Builtins.foreach(
×
1143
        ["free_page", "user_data", "cache_private", "cache_page", "zero_page"]
1144
      ) do |key|
1145
        counter = Ops.add(counter, 1)
×
1146
        one_bit = Builtins.substring(bit_number, counter, 1)
×
1147
        UI.ChangeWidget(Id(key), :Value, one_bit != "1")
×
1148
      end
1149

1150
      nil
×
1151
    end
1152

1153
    # Function initializes option
1154
    # "Dump Level"
1155

1156
    def InitDumpLevel(_key)
1✔
1157
      value = Builtins.tointeger(
×
1158
        Ops.get(Kdump.KDUMP_SETTINGS, "KDUMP_DUMPLEVEL")
1159
      )
1160
      ret = ""
×
1161
      Builtins.foreach(@bit_weight_row) do |try_i|
×
1162
        if Ops.greater_than(Ops.divide(value, try_i), 0)
×
1163
          value = Ops.modulo(value, try_i)
×
1164
          ret = Ops.add(ret, "1")
×
1165
        else
1166
          ret = Ops.add(ret, "0")
×
1167
        end
1168
      end
1169

1170
      # Popup::Message(ret);
1171
      SetDumpLevel(ret)
×
1172

1173
      nil
×
1174
    end
1175

1176
    # Function store option
1177
    # "Dump Level" - info from UI checkboxes
1178
    # @result string binary code e.g. 11000
1179

1180
    def GetDumpLevel
1✔
1181
      ret = ""
×
1182
      Builtins.foreach(
×
1183
        ["free_page", "user_data", "cache_private", "cache_page", "zero_page"]
1184
      ) do |key|
1185
        ret = if Convert.to_boolean(UI.QueryWidget(Id(key), :Value))
×
1186
          Ops.add(ret, "0")
×
1187
        else
1188
          Ops.add(ret, "1")
×
1189
        end
1190
      end
1191
      # Popup::Message(ret);
1192
      ret
×
1193
    end
1194

1195
    # Function validates options in
1196
    # "Dump Level"
1197
    # install makedumpfile if KDUMP_DUMPLEVEL > 0
1198

1199
    def ValidDumpLevel(_key, _event)
1✔
1200
      result = true
×
1201
      value = GetDumpLevel()
×
1202
      counter = -1
×
1203
      dumplevel = 0
×
1204

1205
      while Ops.less_than(counter, 5)
×
1206
        counter = Ops.add(counter, 1)
×
1207
        one_bit = Builtins.substring(value, counter, 1)
×
1208
        dumplevel = Ops.add(dumplevel, Ops.get(@bit_weight_row, counter, 0)) if one_bit == "1"
×
1209
      end
1210

1211
      if Ops.greater_than(dumplevel, 0) || dumplevel.nil?
×
1212
        if Mode.installation || Mode.autoinst
×
1213
          Kdump.kdump_packages = Builtins.add(
×
1214
            Kdump.kdump_packages,
1215
            "makedumpfile"
1216
          )
1217
          Builtins.y2milestone(
×
1218
            "add makedumpfile to selected packages to installation"
1219
          )
1220
        elsif Package.Installed("makedumpfile")
×
1221
          return true
×
1222
        else
1223
          package_list = []
×
1224
          package_list = Builtins.add(package_list, "makedumpfile")
×
1225

1226
          if Package.CheckAndInstallPackages(package_list)
×
1227
            result = true
×
1228
          else
1229
            result = false
×
1230

1231
            if Mode.commandline
×
1232
              CommandLine.Error(
×
1233
                Message.CannotContinueWithoutPackagesInstalled
1234
              )
1235
            else
1236
              Popup.Error(Message.CannotContinueWithoutPackagesInstalled)
×
1237
            end
1238
            Builtins.y2error(
×
1239
              "[kdump] (ValidDumpLevel) Installation of package list %1 failed or aborted",
1240
              package_list
1241
            )
1242
          end
1243
        end
1244
      end
1245
      result
×
1246
    end
1247

1248
    # Function stores option
1249
    # "Dump Level"
1250
    def StoreDumpLevel(_key, _event)
1✔
1251
      value = GetDumpLevel()
×
1252
      counter = -1
×
1253
      int_value = 0
×
1254
      while Ops.less_than(counter, 5)
×
1255
        counter = Ops.add(counter, 1)
×
1256
        one_bit = Builtins.substring(value, counter, 1)
×
1257
        int_value = Ops.add(int_value, Ops.get(@bit_weight_row, counter, 0)) if one_bit == "1"
×
1258
      end
1259

1260
      ret = Builtins.tostring(int_value)
×
1261
      Ops.set(Kdump.KDUMP_SETTINGS, "KDUMP_DUMPLEVEL", ret)
×
1262
      # Popup::Message(ret);
1263

1264
      nil
×
1265
    end
1266

1267
    #  Hadle function for option
1268
    # "Dump Level"
1269

1270
    def HandleDumpLevel(_key, event)
1✔
1271
      ret = Ops.get(event, "ID")
×
1272
      if ret == "cache_private"
×
1273
        value_cache_private = Convert.to_boolean(
×
1274
          UI.QueryWidget(Id("cache_private"), :Value)
1275
        )
1276
        value_cache_page = Convert.to_boolean(
×
1277
          UI.QueryWidget(Id("cache_page"), :Value)
1278
        )
1279
        UI.ChangeWidget(Id("cache_page"), :Value, true) if value_cache_private && !value_cache_page
×
1280
      end
1281

1282
      if ret == "cache_page"
×
1283
        value_cache_private = Convert.to_boolean(
×
1284
          UI.QueryWidget(Id("cache_private"), :Value)
1285
        )
1286
        value_cache_page = Convert.to_boolean(
×
1287
          UI.QueryWidget(Id("cache_page"), :Value)
1288
        )
1289
        if value_cache_private && !value_cache_page
×
1290
          UI.ChangeWidget(Id("cache_private"), :Value, false)
×
1291
        end
1292
      end
1293
      nil
×
1294
    end
1295

1296
    # Value of the low memory in UI
1297
    # @return [Integer]
1298
    def allocated_low_memory
1✔
1299
      UI.QueryWidget(Id("allocated_low_memory"), :Value).to_i
×
1300
    end
1301

1302
    # Value of the high memory in UI, 0 if not supported
1303
    # @return [Integer]
1304
    def allocated_high_memory
1✔
1305
      if Kdump.high_memory_supported?
×
1306
        UI.QueryWidget(Id("allocated_high_memory"), :Value).to_i
×
1307
      else
1308
        0
×
1309
      end
1310
    end
1311

1312
    # Total allocated memory, according to UI
1313
    # @return [Integer]
1314
    def allocated_memory
1✔
1315
      allocated_low_memory + allocated_high_memory
×
1316
    end
1317

1318
    # Updates the free memory displayed in the UI
1319
    def update_usable_memory
1✔
1320
      value = if UI.QueryWidget(Id(:auto_resize), :Value)
×
1321
        "---"
×
1322
      else
1323
        Kdump.total_memory - allocated_memory
×
1324
      end
1325

1326
      UI.ReplaceWidget(Id("usable_memory_rp"), usable_memory_widget(value))
×
1327
    end
1328

1329
    # Function initializes option
1330
    # "KdumpMemory"
1331
    def InitKdumpMemory(_key)
1✔
1332
      if Kdump.using_fadump?
×
1333
        UI.ChangeWidget(Id(:auto_resize), :Enabled, false)
×
1334
        auto_resize = false
×
1335
      else
1336
        auto_resize = ["yes", "true", "1"].include?(Kdump.KDUMP_SETTINGS["KDUMP_AUTO_RESIZE"])
×
1337
      end
1338
      UI.ChangeWidget(Id(:auto_resize), :Value, auto_resize)
×
1339
      if Kdump.total_memory > 0
×
1340
        UI.ChangeWidget(Id(:allocated_memory_box), :Enabled, !auto_resize)
×
1341
        UI.ChangeWidget(
×
1342
          Id("total_memory"),
1343
          :Value,
1344
          Builtins.tostring(Kdump.total_memory)
1345
        )
1346
        UI.ChangeWidget(
×
1347
          Id("allocated_low_memory"),
1348
          :Value,
1349
          Builtins.tointeger(Kdump.allocated_memory[:low])
1350
        )
1351
        if Kdump.high_memory_supported?
×
1352
          UI.ChangeWidget(
×
1353
            Id("allocated_high_memory"),
1354
            :Value,
1355
            Builtins.tointeger(Kdump.allocated_memory[:high])
1356
          )
1357
        end
1358
        update_usable_memory
×
1359
      else
1360
        UI.ChangeWidget(Id(:allocated_memory_box), :Enabled, false)
×
1361
        UI.ChangeWidget(Id("total_memory"), :Value, "0")
×
1362
        UI.ChangeWidget(Id("usable_memory"), :Value, "0")
×
1363
      end
1364

1365
      nil
×
1366
    end
1367

1368
    #  Handle function for option
1369
    # "KdumpMemory"
1370
    def HandleKdumpMemory(_key, event)
1✔
1371
      event = deep_copy(event)
×
1372
      ret = Ops.get(event, "ID")
×
1373
      if ["allocated_low_memory", "allocated_high_memory"].include?(ret)
×
1374
        remaining = Kdump.total_memory - allocated_memory
×
1375
        if remaining <= 0
×
1376
          # Substract (remaining is negative) the excess from the current value
1377
          UI.ChangeWidget(Id(ret), :Value, send(ret.to_sym) + remaining)
×
1378
        end
1379
        update_usable_memory
×
1380
      elsif ret == :auto_resize
×
1381
        value = UI.QueryWidget(Id(ret), :Value)
×
1382
        UI.ChangeWidget(Id(:allocated_memory_box), :Enabled, !value)
×
1383
        update_usable_memory
×
1384
      end
1385

1386
      nil
×
1387
    end
1388

1389
    # Function validates if crashkernel option includes
1390
    # several ranges and ask user about rewritting
1391
    #
1392
    # "KdumpMemory"
1393
    def ValidKdumpMemory(_key, _event)
1✔
1394
      if Kdump.crashkernel_list_ranges && Mode.normal
×
1395
        Kdump.crashkernel_list_ranges = !Popup.YesNo(
×
1396
          _("Kernel option includes several ranges or redundant values. Rewrite it?")
1397
        )
1398
      end
1399

1400
      true
×
1401
    end
1402

1403
    #  Store function for option
1404
    # "KdumpMemory"
1405
    def StoreKdumpMemory(_key, _event)
1✔
1406
      Kdump.KDUMP_SETTINGS["KDUMP_AUTO_RESIZE"] =
×
1407
        UI.QueryWidget(Id(:auto_resize), :Value) ? "true" : "false"
×
1408
      Kdump.allocated_memory[:low] = Builtins.tostring(
×
1409
        UI.QueryWidget(Id("allocated_low_memory"), :Value)
1410
      )
1411
      if Kdump.high_memory_supported?
×
1412
        Kdump.allocated_memory[:high] = Builtins.tostring(
×
1413
          UI.QueryWidget(Id("allocated_high_memory"), :Value)
1414
        )
1415
      end
1416

1417
      nil
×
1418
    end
1419

1420
    # Initializes FADump settings in UI
1421
    def InitFADump(_key)
1✔
1422
      return unless Kdump.fadump_supported? && UI.WidgetExists(Id("FADump"))
×
1423

1424
      UI.ReplaceWidget(
×
1425
        Id("FADump"),
1426
        VBox(
1427
          CheckBox(
1428
            Id("use_fadump"),
1429
            Opt(:notify),
1430
            # T: Checkbox label
1431
            _("Use &Firmware-Assisted Dump"),
1432
            Kdump.using_fadump?
1433
          ),
1434
          VSpacing(1)
1435
        )
1436
      )
1437
    end
1438

1439
    def HandleFADump(_key, event)
1✔
1440
      return if event["ID"] != "use_fadump"
×
1441

1442
      use_fadump_value = UI.QueryWidget(Id("use_fadump"), :Value)
×
1443

1444
      # If cannot adjust the fadump usage
1445
      if !Kdump.use_fadump(use_fadump_value)
×
1446
        UI.ChangeWidget(Id("use_fadump"), :Value, false)
×
1447
        return
×
1448
      end
1449

1450
      UI.ChangeWidget(Id(:auto_resize), :Value, false)
×
1451
      UI.ChangeWidget(Id(:allocated_memory_box), :Enabled, true)
×
1452
      UI.ChangeWidget(Id(:auto_resize), :Enabled, !use_fadump_value)
×
1453

1454
      update_usable_memory
×
1455
      refresh_kdump_memory(use_fadump_value)
×
1456

1457
      nil
×
1458
    end
1459

1460
    def refresh_kdump_memory(fadump)
1✔
1461
      widget_id = Id("allocated_low_memory")
×
1462
      value = UI.QueryWidget(widget_id, :Value)
×
1463
      UI.ReplaceWidget(Id("allocated_low_memory_rp"),
×
1464
        low_memory_widget(value: value, fadump: fadump))
1465
    end
1466

1467
    # Function initializes option
1468
    # "Custom kdump Kernel"
1469

1470
    def InitInitrdKernel(_key)
1✔
1471
      UI.ChangeWidget(
×
1472
        Id("InitrdKernel"),
1473
        :Value,
1474
        Ops.get(Kdump.KDUMP_SETTINGS, "KDUMP_KERNELVER")
1475
      )
1476

1477
      nil
×
1478
    end
1479

1480
    # Function stores option
1481
    # "Custom kdump Kernel"
1482
    def StoreInitrdKernel(_key, _event)
1✔
1483
      Ops.set(
×
1484
        Kdump.KDUMP_SETTINGS,
1485
        "KDUMP_KERNELVER",
1486
        Builtins.tostring(UI.QueryWidget(Id("InitrdKernel"), :Value))
1487
      )
1488

1489
      nil
×
1490
    end
1491

1492
    # Function initializes option
1493
    # "Dump Format"
1494

1495
    def InitDumpFormat(_key)
1✔
1496
      case Ops.get(Kdump.KDUMP_SETTINGS, "KDUMP_DUMPFORMAT")
×
1497
      when "ELF"
1498
        UI.ChangeWidget(Id("DumpFormat"), :Value, "elf_format")
×
1499
      when "compressed"
1500
        UI.ChangeWidget(Id("DumpFormat"), :Value, "compressed_format")
×
1501
      when "lzo"
1502
        UI.ChangeWidget(Id("DumpFormat"), :Value, "lzo_format")
×
1503
      when "snappy"
1504
        UI.ChangeWidget(Id("DumpFormat"), :Value, "snappy_format")
×
1505
      when "zstd"
1506
        UI.ChangeWidget(Id("DumpFormat"), :Value, "zstd_format")
×
1507
      when "raw"
1508
        UI.ChangeWidget(Id("DumpFormat"), :Value, "raw_format")
×
1509
      else
1510
        UI.ChangeWidget(Id("DumpFormat"), :Value, "none_format")
×
1511
      end
1512

1513
      nil
×
1514
    end
1515

1516
    # Function validates options in
1517
    # "Dump Format"
1518
    # install makedumpfile if KDUMP_DUMPFORMAT == "compressed"
1519

1520
    def ValidDumpFormat(_key, _event)
1✔
1521
      result = true
×
1522
      value = Builtins.tostring(UI.QueryWidget(Id("DumpFormat"), :Value))
×
1523

1524
      if value != "raw_format" || value.nil?
×
1525
        if Mode.installation || Mode.autoinst
×
1526
          Kdump.kdump_packages = Builtins.add(
×
1527
            Kdump.kdump_packages,
1528
            "makedumpfile"
1529
          )
1530
          Builtins.y2milestone(
×
1531
            "add makedumpfile to selected packages to installation"
1532
          )
1533
        elsif Package.Installed("makedumpfile")
×
1534
          return true
×
1535
        else
1536
          package_list = []
×
1537
          package_list = Builtins.add(package_list, "makedumpfile")
×
1538

1539
          if Package.CheckAndInstallPackages(package_list)
×
1540
            result = true
×
1541
          else
1542
            result = false
×
1543

1544
            if Mode.commandline
×
1545
              CommandLine.Error(
×
1546
                Message.CannotContinueWithoutPackagesInstalled
1547
              )
1548
            else
1549
              Popup.Error(Message.CannotContinueWithoutPackagesInstalled)
×
1550
            end
1551
            Builtins.y2error(
×
1552
              "[kdump] (ValidDumpFormat) Installation of package list %1 failed or aborted",
1553
              package_list
1554
            )
1555
          end
1556
        end
1557
      end
1558
      result
×
1559
    end
1560

1561
    # Function stores option
1562
    # "Dump Format"
1563

1564
    def StoreDumpFormat(_key, _event)
1✔
1565
      value = Builtins.tostring(UI.QueryWidget(Id("DumpFormat"), :Value))
×
1566
      case value
×
1567
      when "elf_format"
1568
        Ops.set(Kdump.KDUMP_SETTINGS, "KDUMP_DUMPFORMAT", "ELF")
×
1569
      when "compressed_format"
1570
        Ops.set(Kdump.KDUMP_SETTINGS, "KDUMP_DUMPFORMAT", "compressed")
×
1571
      when "lzo_format"
1572
        Ops.set(Kdump.KDUMP_SETTINGS, "KDUMP_DUMPFORMAT", "lzo")
×
1573
      when "snappy_format"
1574
        Ops.set(Kdump.KDUMP_SETTINGS, "KDUMP_DUMPFORMAT", "snappy")
×
1575
      when "zstd_format"
1576
        Ops.set(Kdump.KDUMP_SETTINGS, "KDUMP_DUMPFORMAT", "zstd")
×
1577
      when "raw_format"
1578
        Ops.set(Kdump.KDUMP_SETTINGS, "KDUMP_DUMPFORMAT", "raw")
×
1579
      else
1580
        Ops.set(Kdump.KDUMP_SETTINGS, "KDUMP_DUMPFORMAT", "none")
×
1581
      end
1582

1583
      nil
×
1584
    end
1585

1586
    # Function initializes option
1587
    # "Enable Delete Old Dump Images"
1588

1589
    def InitEnableDeleteImages(_key)
1✔
1590
      UI.ChangeWidget(Id("EnableDeleteImages"), :Notify, true)
×
1591
      if Ops.get(Kdump.KDUMP_SETTINGS, "KDUMP_KEEP_OLD_DUMPS") == "0"
×
1592
        UI.ChangeWidget(Id("EnableDeleteImages"), :Value, false)
×
1593
        UI.ChangeWidget(Id("NumberDumps"), :Enabled, false)
×
1594
      else
1595
        UI.ChangeWidget(Id("NumberDumps"), :Enabled, true)
×
1596
        UI.ChangeWidget(Id("EnableDeleteImages"), :Value, true)
×
1597
      end
1598

1599
      nil
×
1600
    end
1601

1602
    #  Hadle function for option
1603
    # "Enable Delete Old Dump Images"
1604

1605
    def HandleEnableDeleteImages(_key, event)
1✔
1606
      ret = Ops.get(event, "ID")
×
1607
      if ret == "EnableDeleteImages"
×
1608
        value = Convert.to_boolean(
×
1609
          UI.QueryWidget(Id("EnableDeleteImages"), :Value)
1610
        )
1611
        if value
×
1612
          UI.ChangeWidget(
×
1613
            Id("NumberDumps"),
1614
            :Value,
1615
            Builtins.tointeger(
1616
              Ops.get(Kdump.KDUMP_SETTINGS, "KDUMP_KEEP_OLD_DUMPS")
1617
            )
1618
          )
1619
          UI.ChangeWidget(Id("NumberDumps"), :Enabled, true)
×
1620
        else
1621
          UI.ChangeWidget(Id("NumberDumps"), :Value, Builtins.tointeger("0"))
×
1622
          UI.ChangeWidget(Id("NumberDumps"), :Enabled, false)
×
1623
        end
1624
      end
1625

1626
      nil
×
1627
    end
1628

1629
    # Function stores option
1630
    # "Enable Delete Old Dump Images"
1631

1632
    def StoreEnableDeleteImages(_key, _event)
1✔
1633
      value = Convert.to_boolean(
×
1634
        UI.QueryWidget(Id("EnableDeleteImages"), :Value)
1635
      )
1636
      Ops.set(Kdump.KDUMP_SETTINGS, "KDUMP_KEEP_OLD_DUMPS", "0") if !value
×
1637

1638
      nil
×
1639
    end
1640

1641
    # Function initializes option
1642
    # "SMTP Server"
1643
    def InitSMTPServer(_key)
1✔
1644
      UI.ChangeWidget(
×
1645
        Id("SMTPServer"),
1646
        :Value,
1647
        Ops.get(Kdump.KDUMP_SETTINGS, "KDUMP_SMTP_SERVER", "")
1648
      )
1649

1650
      nil
×
1651
    end
1652

1653
    # Function stores option
1654
    # "SMTP Server"
1655
    def StoreSMTPServer(_key, _event)
1✔
1656
      Ops.set(
×
1657
        Kdump.KDUMP_SETTINGS,
1658
        "KDUMP_SMTP_SERVER",
1659
        Builtins.tostring(UI.QueryWidget(Id("SMTPServer"), :Value))
1660
      )
1661

1662
      nil
×
1663
    end
1664

1665
    # Function initializes option
1666
    # "User Name" (SMTP Settings)
1667
    def InitSMTPUser(_key)
1✔
1668
      UI.ChangeWidget(
×
1669
        Id("SMTPUser"),
1670
        :Value,
1671
        Ops.get(Kdump.KDUMP_SETTINGS, "KDUMP_SMTP_USER", "")
1672
      )
1673

1674
      nil
×
1675
    end
1676

1677
    # Function stores option
1678
    # "User Name" (SMTP Settings)
1679
    def StoreSMTPUser(_key, _event)
1✔
1680
      Ops.set(
×
1681
        Kdump.KDUMP_SETTINGS,
1682
        "KDUMP_SMTP_USER",
1683
        Builtins.tostring(UI.QueryWidget(Id("SMTPUser"), :Value))
1684
      )
1685

1686
      nil
×
1687
    end
1688

1689
    # Function initializes option
1690
    # "Password" (SMTP Settings)
1691
    def InitSMTPPassword(_key)
1✔
1692
      UI.ChangeWidget(
×
1693
        Id("SMTPPassword"),
1694
        :Value,
1695
        Ops.get(Kdump.KDUMP_SETTINGS, "KDUMP_SMTP_PASSWORD", "")
1696
      )
1697

1698
      nil
×
1699
    end
1700

1701
    # Function stores option
1702
    # "Password" (SMTP Settings)
1703
    def StoreSMTPPassword(_key, _event)
1✔
1704
      Ops.set(
×
1705
        Kdump.KDUMP_SETTINGS,
1706
        "KDUMP_SMTP_PASSWORD",
1707
        Builtins.tostring(UI.QueryWidget(Id("SMTPPassword"), :Value))
1708
      )
1709

1710
      nil
×
1711
    end
1712

1713
    # Function initializes option
1714
    # "Notification To"
1715
    def InitNotificationTo(_key)
1✔
1716
      UI.ChangeWidget(
×
1717
        Id("NotificationTo"),
1718
        :Value,
1719
        Ops.get(Kdump.KDUMP_SETTINGS, "KDUMP_NOTIFICATION_TO", "")
1720
      )
1721

1722
      nil
×
1723
    end
1724

1725
    # Function stores option
1726
    # "Notification To"
1727
    def StoreNotificationTo(_key, _event)
1✔
1728
      Ops.set(
×
1729
        Kdump.KDUMP_SETTINGS,
1730
        "KDUMP_NOTIFICATION_TO",
1731
        Builtins.tostring(UI.QueryWidget(Id("NotificationTo"), :Value))
1732
      )
1733

1734
      nil
×
1735
    end
1736

1737
    # Function initializes option
1738
    # "Notification CC"
1739
    def InitNotificationCC(_key)
1✔
1740
      UI.ChangeWidget(
×
1741
        Id("NotificationCC"),
1742
        :Value,
1743
        Ops.get(Kdump.KDUMP_SETTINGS, "KDUMP_NOTIFICATION_CC", "")
1744
      )
1745

1746
      nil
×
1747
    end
1748

1749
    # Function stores option
1750
    # "Notification CC"
1751
    def StoreNotificationCC(_key, _event)
1✔
1752
      Ops.set(
×
1753
        Kdump.KDUMP_SETTINGS,
1754
        "KDUMP_NOTIFICATION_CC",
1755
        Builtins.tostring(UI.QueryWidget(Id("NotificationCC"), :Value))
1756
      )
1757

1758
      nil
×
1759
    end
1760

1761
    # Function validates options in
1762
    # "Dump Format"
1763
    # install makedumpfile if KDUMP_DUMPFORMAT == "compressed"
1764

1765
    def ValidEmail(key, _event)
1✔
1766
      Popup.Message(key)
×
1767
      true
×
1768
    end
1769

1770
    def unsupported_kdump_confirmation
1✔
1771
      text = _(
×
1772
        "Kdump is not supported on this system.\n" \
1773
        "If you continue now, the module may not function properly.\n" \
1774
        "For example, some settings will not be correctly read\n" \
1775
        "and the resulting configuration will probably be useless.\n"
1776
      )
1777
      Popup.ContinueCancelHeadline(_("Kdump not supported"), text)
×
1778
    end
1779
  end
1780
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