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

yast / yast-security / 7348696296

28 Dec 2023 02:47PM UTC coverage: 39.237% (-0.4%) from 39.615%
7348696296

push

github

jreidinger
rubocop: enable Layout/LineLength - manual fixes

3 of 111 new or added lines in 3 files covered. (2.7%)

418 existing lines in 13 files now uncovered.

1378 of 3512 relevant lines covered (39.24%)

5.86 hits per line

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

0.0
/src/include/security/helps.rb
1
# ------------------------------------------------------------------------------
2
# Copyright (c) 2006-2012 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:        include/security/helps.ycp
21
# Module:        Security configuration
22
# Summary:        Helps definition
23
# Authors:        Michal Svec <msvec@suse.cz>
24
#
25
# $Id$
26
#
27
# This file contains all helps for the security module screens.
28
# They are in one huge map called HELPS.
UNCOV
29
module Yast
×
UNCOV
30
  module SecurityHelpsInclude
×
31
    def initialize_security_helps(_include_target)
×
32
      textdomain "security"
×
33

34
      @display_manager = Security.display_manager
×
35

36
      # All helps are here
UNCOV
37
      @HELPS = {
×
38
        # Read dialog help 1/2
39
        "read"           => _(
×
NEW
40
          "<p><b><big>Initializing Security Configuration</big></b>\n" \
×
NEW
41
          "<br>Please wait...<br></p>"
×
42
        ) +
×
43
          # Read dialog help 2/2
44
          _(
×
NEW
45
            "<p><b><big>Aborting the Initialization</big></b><br>\n" \
×
NEW
46
            "Safely abort the configuration utility by pressing <b>Abort</b> now.</p>"
×
47
          ),
×
48
        # Write dialog help 1/2
49
        "write"          => _(
×
UNCOV
50
          "<p><b><big>Saving Security Configuration</big></b>\n<br>Please wait...<br></p>"
×
51
        ) +
×
52
          # Write dialog help 2/2
53
          _(
×
NEW
54
            "<p><b><big>Aborting Saving</big></b><br>\n" \
×
NEW
55
            "Abort the save procedure by pressing <b>Abort</b>.</p>"
×
56
          ),
×
57
        # Boot dialog help 1/4
58
        "boot"           => boot_dialog_help,
×
59
        # Main dialog help 1/8
60
        "main"           => _(
×
UNCOV
61
          "<P><BIG><B>Configuring Local Security</B></BIG></P>\n" \
×
62
          "<p>Using predefined defaults, change the local security settings, which include\n" \
×
63
          "    booting, login, password, user creation, and file permissions. The default\n" \
×
64
          "    settings can be modified as needed.\n" \
×
65
          "</p>"
×
66
        ) +
×
67
          # Main dialog help 5/8
68
          _(
×
NEW
69
            "<p><b>Workstation</b>: For a computer connected\n" \
×
NEW
70
            "to any type of network including the Internet.</p>"
×
71
          ) +
×
72
          # Main dialog help 6/8
73
          _(
×
NEW
74
            "<p><b>Roaming Device</b>: For a laptop, tablet or similar device\n" \
×
NEW
75
            "that connects to different networks.</p>"
×
76
          ) +
×
77
          # Main dialog help 7/8
78
          _(
×
UNCOV
79
            "<p><b>Network Server</b>: For a computer that provides\nany type of service.</p>"
×
80
          ) +
×
81
          # Main dialog help 8/8
82
          _("<p><b>Custom Settings</b>: Create your own configuration.</p>"),
×
83
        # Login dialog help 1/4
84
        "login"          => _(
×
UNCOV
85
          "<p><big><b>Login Security</b></big></p>\n" \
×
86
          "<p>These login settings\n" \
×
87
          "are mainly stored in the /etc/login.defs file.</p>"
×
88
        ) +
×
89
          # Login dialog help 2/4
90
          _(
×
UNCOV
91
            "<p><b>Delay after Incorrect Login Attempt:</b>\n" \
×
92
            "It is advisable to wait some time after an incorrect login attempt to prevent\n" \
×
93
            "password guessing. Make the time small enough that users do not need to wait to\n" \
×
94
            "retry if a password is mistyped. A sensible value is three seconds (<tt>3</tt>).</p>"
×
95
          ) +
×
96
          # Login dialog help 3/4
97
          _(
×
UNCOV
98
            "<p><b>Record Successful Login Attempts:</b> Logging successful login\n" \
×
99
            "attempts is useful. It can warn you of unauthorized access to the\n" \
×
100
            "system (for example, a user logging in from a different location than usual).\n" \
×
101
            "</p>\n"
×
102
          ) +
×
103
          # Login dialog help 4/4
104
          _(
×
UNCOV
105
            "<p><b>Allow Remote Graphical Login:</b> Checking this allows access\n" \
×
106
            "to a graphical login screen for this machine over the network. Remote access\n" \
×
107
            "to your machine using a display manager might be a security risk.</p>"
×
108
          ),
×
109
        # Password dialog help 1/8
110
        "password"       => _(
×
UNCOV
111
          "<p>These password settings\nare mainly stored in the /etc/login.defs file.</p>"
×
112
        ) +
×
113
          # Password dialog help 2/8
114
          _(
×
UNCOV
115
            "<p><b>Check New Passwords</b>: It is wise to choose a password that\n" \
×
116
            "cannot be found in a dictionary and is not a name or other simple, common word.\n" \
×
117
            "By checking the box, enforce password checking in regard to these rules.</p>"
×
118
          ) +
×
119
          # Password dialog help
120
          _(
×
UNCOV
121
            "<p><b>Minimum Acceptable Password Length:</b>\n" \
×
122
            "The minimum acceptable size for the new password reduced by the number\n" \
×
123
            "of different character classes (other, upper, lower and digit) used in the new\n" \
×
124
            "password. See man pam_cracklib for a more detailed explanation.\n" \
×
125
            "This option can only be modified when <b>Check New Passwords</b> is set.</p>"
×
126
          ) +
×
127
          # Password dialog help 4/8
128
          _(
×
UNCOV
129
            "<p><b>Passwords to Remember</b>:\n" \
×
130
            "Enter the number of user passwords to store and prevent the user from reusing.\n" \
×
131
            "Enter 0 if passwords should not be stored.</p>"
×
132
          ) +
×
133
          # Password dialog help 5a/8
134
          _("<p><b>Password Encryption Method:</b></p>") +
×
135
          # Password dialog help 5b/8
136
          _(
×
UNCOV
137
            "<p><b>DES</b>, the Linux default method, works in all network environments,\n" \
×
138
            "but it restricts you to passwords no longer than eight characters. If you need\n" \
×
139
            "compatibility with other systems, use this method.</p>"
×
140
          ) +
×
141
          # Password dialog help 5c/8
142
          _(
×
NEW
143
            "<p><b>MD5</b> allows longer passwords and is supported by all current Linux \n" \
×
NEW
144
            "distributions, but not by other systems or old software.</p>"
×
145
          ) +
×
146
          # Password dialog help 5d/8
147
          _(
×
NEW
148
            "<p><b>SHA-512</b> is the current standard hash method, using " \
×
NEW
149
            "other algorithms is not recommended unless needed for compatibility purpose.</p>"
×
150
          ) +
×
151
          # Password dialog help 7/8
152
          _(
×
NEW
153
            "<p><b>Password Age:</b> Set the minimum and\n" \
×
NEW
154
            "maximum number of days a password may be used.</p>"
×
155
          ) +
×
156
          # Password dialog help 8/8
157
          _(
×
UNCOV
158
            "<p><b>Days before Password Expires Warning</b>: This entry sets the\n" \
×
159
            "number of days users are warned before their passwords expire. The longer the\n" \
×
160
            "time, the less likely it is that someone can guess passwords.</p>"
×
161
          ),
×
162
        # Adduser dialog help 1/2
163
        "adduser"        => _(
×
NEW
164
          "<p><big><b>User Security</b></big></P>\n" \
×
NEW
165
          "<p>In this dialog, change various settings used to create users.</p>"
×
166
        ) +
×
167
          # Adduser dialog help 2/3
168
          _(
×
UNCOV
169
            "<p><b>User ID Limitations:</b>\nSet the minimum and maximum possible user ID.</p>"
×
170
          ) +
×
171
          # Adduser dialog help 3/3
172
          _(
×
UNCOV
173
            "<p><b>Group ID Limitations</b>:\nSet the minimum and maximum possible group ID.</p>"
×
174
          ),
×
175
        # Misc dialog help 1/14
176
        "misc"           => _(
×
NEW
177
          "<p><big><b>Other Security Settings</b></big></P>\n" \
×
NEW
178
          "<p>In this dialog, change miscellaneous settings related to local security.</p>"
×
179
        ) +
×
180
          # Misc dialog help 2/14
181
          _(
×
UNCOV
182
            "<p><b>File Permissions</b>: Settings for the permissions\n" \
×
183
            "of certain system files are set according to the data in /etc/permissions.secure\n" \
×
184
            "or /etc/permissions.easy. Which file is used depends on this selection.\n" \
×
185
            "Launching SuSEconfig sets these permissions according to /etc/permissions.*.\n" \
×
186
            "This fixes files with incorrect permissions, whether this occurred accidentally\n" \
×
187
            "or by intruders.</p><p>\n" \
×
188
            "With <b>Easy</b>, most of the system files that are only readable by root\n" \
×
189
            "in Secure are modified so other users can also read these files.\n" \
×
190
            "Using <b>Secure</b>, certain system files, such as /var/log/messages, can only\n" \
×
191
            "be viewed by the user root. Some programs can only be launched by root or by\n" \
×
192
            "daemons, not by ordinary users.\n" \
×
193
            "The most secure setting is <b>Paranoid</B>. With it, you must\n" \
×
194
            "decide which users are able to run X applications and setuid programs.</p>\n"
×
195
          ) +
×
196
          # Misc dialog help 6/14
197
          _(
×
UNCOV
198
            "<p><b>User Launching updatedb</b>: The program updatedb runs \n" \
×
199
            "once a day. It scans your entire file system and creates a database (locatedb)\n" \
×
200
            "that stores the location of every file. The database can be searched by the\n" \
×
201
            "program \"locate\".  Here, set the user that runs this command: <b>nobody</b>\n" \
×
202
            "    (few files) or <b>root</b> (all files).</p>"
×
203
          ) +
×
204
          # Misc dialog help 10/14
205
          _(
×
UNCOV
206
            "<p><b>Current Directory in root's Path</b> On a DOS system,\n" \
×
207
            "the system first searches for executable files (programs) in the current\n" \
×
208
            "directory then in the current path variable. In contrast, a UNIX-like system\n" \
×
209
            "searches for them exclusively via the search path (variable PATH).</p>"
×
210
          ) +
×
211
          # Misc dialog help 11/14
212
          _(
×
UNCOV
213
            "<p><b>Current Directory in the Path of Regular Users</b><br> A DOS\n" \
×
214
            "system first searches for executable files (programs) in the current directory\n" \
×
215
            "then in the current path variable. In contrast, a UNIX-like system searches\n" \
×
216
            "for them exclusively via the search path (variable PATH).</p>"
×
217
          ) +
×
218
          # Misc dialog help 12/14
219
          _(
×
UNCOV
220
            "<p>Some systems set up a work-around by adding the dot (\".\") to the\n" \
×
221
            "search path, enabling files in the current path to be found and executed.\n" \
×
222
            "This is highly dangerous because you may accidentally launch unknown programs in\n" \
×
223
            "the current directory instead of the usual systemwide files. As a result,\n" \
×
NEW
224
            "executing <i>Trojan Horses</i>, which exploit " \
×
NEW
225
            "this weakness and invade your system,\n" \
×
226
            "is rather easy if you set this option.</p>"
×
227
          ) +
×
228
          # Misc dialog help 13/14
229
          _(
×
NEW
230
            "<p>\"yes\": the dot (\".\") is attached to the end of the search\n" \
×
NEW
231
            "path of root, making it the last to be searched.</p>"
×
232
          ) +
×
233
          # Misc dialog help 14/14
234
          _(
×
NEW
235
            "<p>\"no\": the user root always must launch programs in the\n" \
×
NEW
236
            "current directory prefixed with a \"./\". Example: \"./configure\".</p>"
×
237
          ) +
×
238
          # Misc dialog help 14/14
239
          _(
×
UNCOV
240
            "<p><b>Enable Magic SysRq Keys</b><br> If you check this option, you\n" \
×
NEW
241
            "will have some control over the system even if it crashes " \
×
NEW
242
            "(for example, during kernel\n" \
×
243
            "debugging). For details, see /usr/src/linux/Documentation/sysrq.txt</p>"
×
244
          ),
×
245
        # help text: security overview dialog 1/
246
        "overview"       => _(
×
NEW
247
          "<P><B>Security Overview</B><BR>" \
×
NEW
248
          "This overview shows the most important security settings.</P>"
×
249
        ) +
×
250
          # help text: security overview dialog 1/
251
          _(
×
UNCOV
252
            "<P>To change the current value, click the link associated to the option.</P>"
×
253
          ) +
×
254
          # help text: security overview dialog 1/
255
          _(
×
NEW
256
            "<P> A check mark in the <B>Security Status</B> column means " \
×
NEW
257
            "that the current value of the option is secure.</P>"
×
258
          ),
×
259
        # an error message (rich text)
260
        "unknown_status" => _(
×
NEW
261
          "<P><B>The current value could not be read. The service is probably " \
×
NEW
262
          "not installed or the option is missing on the system.</B></P>"
×
263
        )
×
264
      }
×
265

266
      @help_mapping = {
×
UNCOV
267
        "DISPLAYMANAGER_REMOTE_ACCESS"              => _(
×
268
          "<P>A display manager provides a graphical login screen and can be accessed\n" \
×
269
          "across the network by an X server running on another system if so\n" \
×
270
          "configured.</P><P>The windows that are being displayed would then transmit\n" \
×
271
          "their data across the network. If that network is not fully trusted, then the\n" \
×
272
          "network traffic can be eavesdropped by an attacker, gaining access not only to\n" \
×
273
          "the graphical content of the display, but also to usernames and passwords that\n" \
×
274
          "are being used.</P><P>If you do not need <EM>XDMCP</EM> for remote graphical\n" \
×
275
          "logins, then disable this option.</P>"
×
276
        ),
×
277
        "SYSLOG_ON_NO_ERROR"                        => _(
×
NEW
278
          "<P>Malfunctions in a system are usually detected by anomalies in " \
×
NEW
279
          "its behaviour. Syslog messages about events that reoccur on a regular " \
×
NEW
280
          "basis are important to find causes of problems. And the absence " \
×
NEW
281
          "of a single record can tell more than the absence of all log records.</P>" \
×
NEW
282
          "<P>Therefore, syslog messages of system events are only useful if they are present.</P>"
×
283
        ),
×
284
        "DHCPD_RUN_CHROOTED"                        => _(
×
NEW
285
          "<P>Chroot execution environments restrict a process to only access " \
×
NEW
286
          "files that it needs by placing them in a separate subdirectory and " \
×
NEW
287
          "running the process with a changed root (chroot) set to that directory.</P>"
×
288
        ),
×
289
        "DHCPD_RUN_AS"                              => _(
×
NEW
290
          "<P>The DHCP client daemon should run as the user <EM>dhcpd</EM> " \
×
NEW
291
          "to minimize a possible threat if the service is found vulnerable " \
×
NEW
292
          "to a weakness in its program code.</P><P>Note that dhcpd must " \
×
NEW
293
          "never run as <EM>root</EM> or with the <EM>CAP_SYS_CHROOT</EM> " \
×
NEW
294
          "capability for the chroot execution confinement to be effective.</P>"
×
295
        ),
×
296
        "DISPLAYMANAGER_ROOT_LOGIN_REMOTE"          => _(
×
NEW
297
          "<P>Administrators should never log on as <EM>root</EM> into " \
×
NEW
298
          "an X Window session to minimize the usage of the root privileges.</P>" \
×
NEW
299
          "<P>This option does not help against careless administrators, but " \
×
NEW
300
          "shall prevent attackers to be able to log on as <EM>root</EM> via " \
×
NEW
301
          "the display manager if they guess or otherwise acquire the password.</P>"
×
302
        ),
×
303
        "DISPLAYMANAGER_XSERVER_TCP_PORT_6000_OPEN" => _(
×
304
          "<P>X Window clients, e.g. programs that open a window on your display, connect\n" \
×
305
          "to the X server that runs on the physical machine. Programs can also run on a\n" \
×
306
          "different system and display their content on the X server through network\n" \
×
307
          "connections.</P><P>When enabled, the X server listens on a port 6000 plus the\n" \
×
308
          "display number. Since network traffic is transferred unencrypted and therefore\n" \
×
309
          "subject to network sniffing, and since the port held open by the X server\n" \
×
310
          "offers attack options, the secure setting is to disable it.</P><P>To display X\n" \
×
NEW
311
          "Window clients across a network, we recommend the use of secure " \
×
NEW
312
          "shell (<EM>ssh</EM>), which allows the X Window clients to connect " \
×
NEW
313
          "to the X server through the encrypted ssh connection.</P>"
×
314
        ),
×
315
        "SMTPD_LISTEN_REMOTE"                       => _(
×
NEW
316
          "<P>The email delivery subsystem is always started. However, it does not expose\n" \
×
NEW
317
          "itself outside the system by default, since it does not listen " \
×
NEW
318
          "on the SMTP network port 25.</P><P>If you do not deliver emails " \
×
NEW
319
          "to your system through the SMTP protocol, then disable this option.</P>"
×
320
        ),
×
321
        "DISABLE_RESTART_ON_UPDATE"                 => _(
×
322
          "<P>If a package containing a service that is currently running is being\n" \
×
323
          "updated, the service is restarted after the files in the package have been\n" \
×
324
          "installed.</P><P>This makes sense in most cases, and it is safe to do,\n" \
×
325
          "considering that many services either need their binaries or configuration\n" \
×
326
          "files accessible in the file system. Otherwise these services would continue\n" \
×
327
          "to run until the services are stopped, e.g. running daemons are\n" \
×
328
          "killed.</P><P>This setting should only be changed if there is a specific\n" \
×
329
          "reason to do so.</P>"
×
330
        ),
×
331
        "DISABLE_STOP_ON_REMOVAL"                   => _(
×
332
          "<P>If a package containing a service that is currently running is being\n" \
×
333
          "uninstalled, the service is stopped before the files of the package are\n" \
×
334
          "removed.</P><P>This makes sense in most cases, and it is safe to do,\n" \
×
335
          "considering that many services either need their binaries or configuration\n" \
×
336
          "files accessible in the file system. Otherwise these services would continue\n" \
×
337
          "to run until they are stopped, e.g. running daemons are\n" \
×
338
          "killed.</P><P>This setting should only be changed if there is a specific\n" \
×
339
          "reason to do so.</P>"
×
340
        ),
×
341
        "net.ipv4.tcp_syncookies"                   => _(
×
NEW
342
          "<P>A system can be overwhelmed with numerous connection attempts " \
×
NEW
343
          "so that the system runs out of memory, leading to a Denial of " \
×
NEW
344
          "Service (DoS) vulnerability.</P><P>The use of syncookies is " \
×
NEW
345
          "a method that can help in such situations. But in configurations " \
×
NEW
346
          "with a very large number of legitimate connection attempts from " \
×
NEW
347
          "one source, the <EM>Enabled</EM> setting can cause problems with " \
×
NEW
348
          "denied TCP connections under high load.</P><P>Still, for most " \
×
NEW
349
          "environments, syncookies are the first line of defense against " \
×
NEW
350
          "SYN flood DoS attacks, so the secure setting is <EM>Enabled</EM>.</P>"
×
351
        ),
×
352
        "net.ipv4.ip_forward"                       => _(
×
NEW
353
          "<P>IP forwarding means to pass on network packets that have been " \
×
NEW
354
          "received, but that are not destined for one of the system's " \
×
NEW
355
          "configured network interfaces, e.g. network interface addresses.</P>" \
×
NEW
356
          "<P>If a system forwards network traffic on ISO/OSI layer 3, it is " \
×
NEW
357
          "called a router. If you do not need that routing functionality, " \
×
NEW
358
          "then disable this option.</P>"
×
359
        ) +
×
360
          _("<P>This setting applies to <EM>IPv4</EM> only.</P>"),
×
361
        "net.ipv6.conf.all.forwarding"              => _(
×
NEW
362
          "<P>IP forwarding means to pass on network packets that have been " \
×
NEW
363
          "received, but that are not destined for one of the system's " \
×
NEW
364
          "configured network interfaces, e.g. network interface addresses.</P>" \
×
NEW
365
          "<P>If a system forwards network traffic on ISO/OSI layer 3, it is " \
×
NEW
366
          "called a router. If you do not need that routing functionality, " \
×
NEW
367
          "then disable this option.</P>"
×
368
        ) +
×
369
          _("<P>This setting applies to <EM>IPv6</EM> only.</P>"),
×
370
        "kernel.sysrq"                              => _(
×
NEW
371
          "<P>Magic SysRq Keys enable some control over the system even if " \
×
NEW
372
          "it crashes (e.g. during kernel debugging) or if the system does " \
×
NEW
373
          "not respond.</P>"
×
374
        ),
×
375
        "PERMISSION_SECURITY"                       => _(
×
NEW
376
          "<P>There are predefined file permissions in /etc/permissions.* " \
×
NEW
377
          "files. The most restrictive file permissions are defined " \
×
NEW
378
          "'secure' or 'paranoid' file.</P>"
×
379
        ),
×
380
        "MANDATORY_SERVICES"                        => _(
×
NEW
381
          "<P>Basic system services must be enabled to provide system " \
×
NEW
382
          "consistency and to run the security-related services.</P>"
×
383
        ),
×
384
        "EXTRA_SERVICES"                            => _(
×
NEW
385
          "<P>Every running service is a potential target of a security attack. " \
×
NEW
386
          "Therefore it is recommended to turn off all services which are not " \
×
NEW
387
          "used by the system.</P>"
×
388
        )
×
389
      }
×
390
    end
×
391

392
    def boot_dialog_help
×
UNCOV
393
      help = _(
×
NEW
394
        "<p><b><big>Boot Security</big></b></p>\n<p>In this dialog, change " \
×
NEW
395
        "various boot settings related to security.</p>"
×
396
      )
×
397

398
      details = if ::Security::CtrlAltDelConfig.default == "reboot"
×
399
        # TRANSLATORS: part of help text - default action (the default is
400
        # reboot)
UNCOV
401
        _(
×
UNCOV
402
          "Usually the system reboots. Sometimes it is desirable\n" \
×
403
          "to ignore this event, for example, when the system serves as both\n" \
×
404
          "workstation and server."
×
405
        )
×
406
      else
×
407
        # TRANSLATORS: part of help text - default action (the default is halt)
408
        _(
×
UNCOV
409
          "By default the system halts but sometimes it is desirable\n" \
×
410
          "to ignore this event, for example, when the system serves as both\n" \
×
411
          "workstation and server."
×
412
        )
×
413
      end
×
414

415
      # Boot dialog help 2/4
416
      # TRANSLATORS: %s is help text - default action
UNCOV
417
      help += _(
×
UNCOV
418
        "<p><b>Interpretation of Ctrl + Alt + Del</b>:\n" \
×
419
        "Configure what the system should do in response to\n" \
×
420
        "someone at the console pressing the CTRL + ALT + DEL key\n" \
×
421
        "combination. %s</p>"
×
422
      ) % details
×
423

424
      if @display_manager
×
425
        # Boot dialog help 3/4
426
        help += (_(
×
NEW
427
            "<p><b>Shutdown Behaviour of Login Manager</b>:\nSet who is " \
×
NEW
428
            "allowed to shut down the machine from %s.</p>\n"
×
429
          ) % @display_manager.name.upcase) +
×
430
          # Boot dialog help 4/4
431
          _(
×
UNCOV
432
            "<p><b>Hibernate System</b>:\n" \
×
NEW
433
            "Set the conditions for allowing users to hibernate the system. " \
×
NEW
434
            "By default, user on active console has such right.\n" \
×
NEW
435
            "Other options are allowing the action to any user or requiring " \
×
NEW
436
            "authentication in all cases.</p>\n"
×
437
          )
×
438
      end
×
439

440
      help
×
441
      # EOF
442
    end
×
UNCOV
443
  end
×
444
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