source: postlfs/security/shadow.xml@ bbffefa5

10.0 10.1 11.0 11.1 11.2 11.3 12.0 12.1 7.10 7.4 7.5 7.6 7.6-blfs 7.6-systemd 7.7 7.8 7.9 8.0 8.1 8.2 8.3 8.4 9.0 9.1 basic bdubbs/svn elogind gnome kde5-13430 kde5-14269 kde5-14686 kea ken/TL2024 ken/inkscape-core-mods ken/tuningfonts krejzi/svn lazarus lxqt nosym perl-modules plabs/newcss plabs/python-mods python3.11 qt5new rahul/power-profiles-daemon renodr/vulkan-addition systemd-11177 systemd-13485 trunk upgradedb xry111/intltool xry111/llvm18 xry111/soup3 xry111/test-20220226 xry111/xf86-video-removal
Last change on this file since bbffefa5 was bbffefa5, checked in by Bruce Dubbs <bdubbs@…>, 12 years ago

Fix shadow command explanation

git-svn-id: svn://svn.linuxfromscratch.org/BLFS/trunk/BOOK@9509 af4574ff-66df-0310-9fd7-8a98e5e911e0

  • Property mode set to 100644
File size: 23.0 KB
Line 
1<?xml version="1.0" encoding="ISO-8859-1"?>
2<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
3 "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
4 <!ENTITY % general-entities SYSTEM "../../general.ent">
5 %general-entities;
6
7 <!ENTITY shadow-download-http "http://pkg-shadow.alioth.debian.org/releases/shadow-&shadow-version;.tar.bz2 ">
8 <!ENTITY shadow-download-ftp " ">
9 <!ENTITY shadow-md5sum "b8608d8294ac88974f27b20f991c0e79">
10 <!ENTITY shadow-size "1.8 MB">
11 <!ENTITY shadow-buildsize "30 MB">
12 <!ENTITY shadow-time "0.3 SBU">
13]>
14
15<sect1 id="shadow" xreflabel="Shadow-&shadow-version;">
16 <?dbhtml filename="shadow.html"?>
17
18 <sect1info>
19 <othername>$LastChangedBy$</othername>
20 <date>$Date$</date>
21 </sect1info>
22
23 <title>Shadow-&shadow-version;</title>
24
25 <indexterm zone="shadow">
26 <primary sortas="a-Shadow">Shadow</primary>
27 </indexterm>
28
29 <sect2 role="package">
30 <title>Introduction to Shadow</title>
31
32 <para><application>Shadow</application> was indeed installed in LFS and
33 there is no reason to reinstall it unless you installed
34 <application>CrackLib</application> or
35 <application>Linux-PAM</application> after your LFS system was completed.
36 If you have installed <application>CrackLib</application> after LFS, then
37 reinstalling <application>Shadow</application> will enable strong password
38 support. If you have installed <application>Linux-PAM</application>,
39 reinstalling <application>Shadow</application> will allow programs such as
40 <command>login</command> and <command>su</command> to utilize PAM.</para>
41
42 &lfs70_checked;
43
44 <bridgehead renderas="sect3">Package Information</bridgehead>
45 <itemizedlist spacing="compact">
46 <listitem>
47 <para>Download (HTTP): <ulink url="&shadow-download-http;"/></para>
48 </listitem>
49 <listitem>
50 <para>Download (FTP): <ulink url="&shadow-download-ftp;"/></para>
51 </listitem>
52 <listitem>
53 <para>Download MD5 sum: &shadow-md5sum;</para>
54 </listitem>
55 <listitem>
56 <para>Download size: &shadow-size;</para>
57 </listitem>
58 <listitem>
59 <para>Estimated disk space required: &shadow-buildsize;</para>
60 </listitem>
61 <listitem>
62 <para>Estimated build time: &shadow-time;</para>
63 </listitem>
64 </itemizedlist>
65
66 <!-- <bridgehead renderas="sect3">Additional Downloads</bridgehead>
67 <itemizedlist spacing='compact'>
68 <listitem>
69 <para>Required patch: <ulink
70 url="&patch-root;/shadow-&shadow-version;-useradd_fix-2.patch"/></para>
71 </listitem>
72 </itemizedlist> -->
73
74 <bridgehead renderas="sect3">Shadow Dependencies</bridgehead>
75
76 <bridgehead renderas="sect4">Required</bridgehead>
77 <para role="required"><xref linkend="linux-pam"/> and/or
78 <xref linkend="cracklib"/></para>
79
80 <para condition="html" role="usernotes">User Notes:
81 <ulink url="&blfs-wiki;/shadow"/></para>
82
83 </sect2>
84
85 <sect2 role="installation">
86 <title>Installation of Shadow</title>
87
88 <important>
89 <para>The installation commands shown below are for installations where
90 <application>Linux-PAM</application> has been installed (with or
91 without a <application>CrackLib</application> installation) and
92 <application>Shadow</application> is being reinstalled to support the
93 <application>Linux-PAM</application> installation.</para>
94
95 <para> If you are reinstalling <application>Shadow</application> to
96 provide strong password support using the
97 <application>CrackLib</application> library without using
98 <application>Linux-PAM</application>, ensure you add the
99 <parameter>--with-libcrack</parameter> parameter to the
100 <command>configure</command> script below and also issue the following
101 command:</para>
102
103<screen><userinput>sed -i 's@DICTPATH.*@DICTPATH\t/lib/cracklib/pw_dict@' etc/login.defs</userinput></screen>
104 </important>
105
106 <para>Reinstall <application>Shadow</application> by running the following
107 commands:</para>
108
109<screen><userinput>sed -i 's/groups$(EXEEXT) //' src/Makefile.in &amp;&amp;
110find man -name Makefile.in -exec sed -i 's/groups\.1 / /' {} \; &amp;&amp;
111sed -i -e 's/ ko//' -e 's/ zh_CN zh_TW//' man/Makefile.in &amp;&amp;
112
113sed -i -e 's@#ENCRYPT_METHOD DES@ENCRYPT_METHOD SHA512@' \
114 -e 's@/var/spool/mail@/var/mail@' etc/login.defs &amp;&amp;
115
116./configure --sysconfdir=/etc &amp;&amp;
117make</userinput></screen>
118
119 <para>This package does not come with a test suite.</para>
120
121 <para>Now, as the <systemitem class="username">root</systemitem> user:</para>
122
123<screen role="root"><userinput>make install &amp;&amp;
124mv -v /usr/bin/passwd /bin</userinput></screen>
125
126 </sect2>
127
128 <sect2 role="commands">
129 <title>Command Explanations</title>
130
131 <para><command>sed -i 's/groups$(EXEEXT) //' src/Makefile.in</command>:
132 This command is used to suppress the installation of the
133 <command>groups</command> program as the version from the
134 <application>Coreutils</application> package installed during LFS is
135 preferred.</para>
136
137 <para><command>find man -name Makefile.in -exec ... {} \;</command>: This
138 command is used to suppress the installation of the
139 <command>groups</command> man pages so the existing ones installed from
140 the <application>Coreutils</application> package are not replaced.</para>
141
142 <para><command>sed -i -e '...' -e '...' man/Makefile.in</command>: This
143 command disables the installation of Chinese and Korean manual pages, since
144 <application>Man-DB</application> cannot format them properly.</para>
145
146 <para><command>sed -i -e 's@#ENCRYPT_METHOD DES@ENCRYPT_METHOD SHA512'
147 -e 's@/var/spool/mail@/var/mail@' etc/login.defs</command>:
148 Instead of using the default 'crypt' method, this command modifies the
149 installation to use the more secure 'SHA512' method of hashing passwords,
150 which also allows passwords longer than eight characters. It also changes
151 the obsolete <filename class="directory">/var/spool/mail</filename>
152 location for user mailboxes that <application>Shadow</application> uses by
153 default to the <filename class="directory">/var/mail</filename>
154 location.</para>
155
156 <para><command>mv -v /usr/bin/passwd /bin</command>: The
157 <command>passwd</command> program may be needed during times when the
158 <filename class='directory'>/usr</filename> filesystem is not mounted so
159 it is moved into the root partition.</para>
160
161 </sect2>
162
163 <sect2 role="configuration">
164 <title>Configuring Shadow</title>
165
166 <para><application>Shadow</application>'s stock configuration for the
167 <command>useradd</command> utility may not be desirable for your
168 installation. One default parameter causes <command>useradd</command> to
169 create a mailbox file for any newly created user.
170 <command>useradd</command> will make the group ownership of this file to
171 the <systemitem class="groupname">mail</systemitem> group with 0660
172 permissions. If you would prefer that these mailbox files are not created
173 by <command>useradd</command>, issue the
174 following command as the <systemitem class="username">root</systemitem> user:</para>
175
176<screen role="root"><userinput>sed -i 's/yes/no/' /etc/default/useradd</userinput></screen>
177
178 </sect2>
179
180 <sect2 role="configuration">
181 <title>Configuring Linux-PAM to Work with Shadow</title>
182
183 <note>
184 <para>The rest of this page is devoted to configuring
185 <application>Shadow</application> to work properly with
186 <application>Linux-PAM</application>. If you do not have
187 <application>Linux-PAM</application> installed, and you reinstalled
188 <application>Shadow</application> to support strong passwords via
189 the <application>CrackLib</application> library, no further configuration
190 is required.</para>
191 </note>
192
193 <sect3 id="pam.d">
194 <title>Config Files</title>
195
196 <para><filename>/etc/pam.d/*</filename> or alternatively
197 <filename>/etc/pam.conf, /etc/login.defs, and
198 /etc/security/*</filename></para>
199
200 <indexterm zone="shadow pam.d">
201 <primary sortas="e-etc-pam.d">/etc/pam.d/*</primary>
202 </indexterm>
203
204 <indexterm zone="shadow pam.d">
205 <primary sortas="e-etc-pam.conf">/etc/pam.conf</primary>
206 </indexterm>
207
208 <indexterm zone="shadow pam.d">
209 <primary sortas="e-etc-login.defs">/etc/login.defs</primary>
210 </indexterm>
211
212 <indexterm zone="shadow pam.d">
213 <primary sortas="e-etc-security">/etc/security/*</primary>
214 </indexterm>
215
216 </sect3>
217
218 <sect3>
219 <title>Configuration Information</title>
220
221 <para>Configuring your system to use <application>Linux-PAM</application>
222 can be a complex task. The information below will provide a basic setup
223 so that <application>Shadow</application>'s login and password
224 functionality will work effectively with
225 <application>Linux-PAM</application>. Review the information and links on
226 the <xref linkend="linux-pam"/> page for further configuration
227 information. For information specific to integrating
228 <application>Shadow</application>, <application>Linux-PAM</application>
229 and <application>CrackLib</application>, you can visit the following
230 links:</para>
231
232 <itemizedlist spacing="compact">
233 <listitem>
234 <para><ulink
235 url="http://www.kernel.org/pub/linux/libs/pam/Linux-PAM-html/sag-pam_cracklib.html"/></para>
236 </listitem>
237 <listitem>
238 <para><ulink
239 url="http://www.deer-run.com/~hal/sysadmin/pam_cracklib.html"/></para>
240 </listitem>
241 </itemizedlist>
242
243 <sect4 id="pam-login-defs">
244 <title>Configuring /etc/login.defs</title>
245
246 <para>The <command>login</command> program currently performs many
247 functions which <application>Linux-PAM</application> modules should
248 now handle. The following <command>sed</command> command will comment
249 out the appropriate lines in <filename>/etc/login.defs</filename>, and
250 stop <command>login</command> from performing these functions (a backup
251 file named <filename>/etc/login.defs.orig</filename> is also created
252 to preserve the original file's contents). Issue the following commands
253 as the <systemitem class="username">root</systemitem> user:</para>
254
255 <indexterm zone="shadow pam-login-defs">
256 <primary sortas="e-etc-login.defs">/etc/login.defs</primary>
257 </indexterm>
258
259<screen role="root"><userinput>install -v -m644 /etc/login.defs /etc/login.defs.orig &amp;&amp;
260for FUNCTION in LASTLOG_ENAB MAIL_CHECK_ENAB \
261 PORTTIME_CHECKS_ENAB CONSOLE \
262 MOTD_FILE NOLOGINS_FILE PASS_MIN_LEN \
263 SU_WHEEL_ONLY MD5_CRYPT_ENAB \
264 CONSOLE_GROUPS ENVIRON_FILE \
265 ULIMIT ENV_TZ ENV_HZ ENV_SUPATH \
266 ENV_PATH QMAIL_DIR MAIL_DIR MAIL_FILE \
267 CHFN_AUTH FAILLOG_ENAB QUOTAS_ENAB FTMP_FILE \
268 OBSCURE_CHECKS_ENAB CRACKLIB_DICTPATH \
269 PASS_CHANGE_TRIES PASS_ALWAYS_WARN ISSUE_FILE
270do
271 sed -i "s/^$FUNCTION/# &amp;/" /etc/login.defs
272done</userinput></screen>
273
274 </sect4>
275
276 <sect4>
277 <title>Configuring the /etc/pam.d/ Files</title>
278
279 <para>As mentioned previously in the
280 <application>Linux-PAM</application> instructions,
281 <application>Linux-PAM</application> has two supported methods for
282 configuration. The commands below assume that you've chosen to use
283 a directory based configuration, where each program has its own
284 configuration file. You can optionally use a single
285 <filename>/etc/pam.conf</filename> configuration file by using the
286 text from the files below, and supplying the program name as an
287 additional first field for each line.</para>
288
289 <para>As the <systemitem class="username">root</systemitem> user,
290 replace the following <application>Linux-PAM</application>
291 configuration files in the
292 <filename class="directory">/etc/pam.d/</filename> directory (or
293 add the contents to the <filename>/etc/pam.conf</filename> file) using
294 the following commands:</para>
295
296 </sect4>
297
298 <sect4>
299 <title>'system-account'</title>
300
301<screen role="root"><userinput>cat &gt; /etc/pam.d/system-account &lt;&lt; "EOF"
302<literal># Begin /etc/pam.d/system-account
303
304account required pam_unix.so
305
306# End /etc/pam.d/system-account</literal>
307EOF</userinput></screen>
308
309 </sect4>
310
311 <sect4>
312 <title>'system-auth'</title>
313
314<screen role="root"><userinput>cat &gt; /etc/pam.d/system-auth &lt;&lt; "EOF"
315<literal># Begin /etc/pam.d/system-auth
316
317auth required pam_unix.so
318
319# End /etc/pam.d/system-auth</literal>
320EOF</userinput></screen>
321
322 </sect4>
323
324 <sect4>
325 <title>'system-passwd' (with cracklib)</title>
326
327<screen role="root"><userinput>cat &gt; /etc/pam.d/system-password &lt;&lt; "EOF"
328<literal># Begin /etc/pam.d/system-password
329
330# check new passwords for strength (man pam_cracklib)
331password required pam_cracklib.so type=Linux retry=3 difok=5 \
332 difignore=23 minlen=9 dcredit=1 \
333 ucredit=1 lcredit=1 ocredit=1 \
334 dictpath=/lib/cracklib/pw_dict
335# use sha512 hash for encryption, use shadow, and use the
336# authentication token (chosen password) set by pam_cracklib
337# above (or any previous modules)
338password required pam_unix.so sha512 shadow use_authtok
339
340# End /etc/pam.d/system-password</literal>
341EOF</userinput></screen>
342
343 <note><para>In its default configuration, owing to credits,
344 pam_cracklib will allow multiple case passwords as short as 6
345 characters, even with the <parameter>minlen</parameter> value
346 set to 11. You should review the pam_cracklib(8) man page and
347 determine if these default values are acceptable for the security
348 of your system.</para></note>
349
350 </sect4>
351
352 <sect4>
353 <title>'system-passwd' (without cracklib)</title>
354
355<screen role="root"><userinput>cat &gt; /etc/pam.d/system-password &lt;&lt; "EOF"
356<literal># Begin /etc/pam.d/system-password
357
358# use sha512 hash for encryption, use shadow, and try to use any perviously
359# defined authentication token (chosen password) set by any prior module
360password required pam_unix.so sha512 shadow try_first_pass
361
362# End /etc/pam.d/system-password</literal>
363EOF</userinput></screen>
364
365 </sect4>
366
367 <sect4>
368 <title>'system-session'</title>
369
370<screen role="root"><userinput>cat &gt; /etc/pam.d/system-session &lt;&lt; "EOF"
371<literal># Begin /etc/pam.d/system-session
372
373session required pam_unix.so
374
375# End /etc/pam.d/system-session</literal>
376EOF</userinput></screen>
377
378 </sect4>
379
380 <sect4>
381 <title>'login'</title>
382
383<screen role="root"><userinput>cat &gt; /etc/pam.d/login &lt;&lt; "EOF"
384<literal># Begin /etc/pam.d/login
385
386# Set failure delay before next prompt to 3 seconds
387auth optional pam_faildelay.so delay=3000000
388
389# Check to make sure that the user is allowed to login
390auth requisite pam_nologin.so
391
392# Check to make sure that root is allowed to login
393auth required pam_securetty.so
394
395# Additional group memberships - disabled by default
396#auth optional pam_group.so
397
398# include the default auth settings
399auth include system-auth
400
401# check access for the user
402account required pam_access.so
403
404# include the default account settings
405account include system-account
406
407# Set default environment variables for the user
408session required pam_env.so
409
410# Set resource limits for the user
411session required pam_limits.so
412
413# Display date of last login - Disabled by default
414#session optional pam_lastlog.so
415
416# Display the message of the day - Disabled by default
417#session optional pam_motd.so
418
419# Check user's mail - Disabled by default
420#session optional pam_mail.so standard quiet
421
422# Use xauth keys (if available)
423session optional pam_xauth.so
424
425# include the default session and password settings
426session include system-session
427password include system-password
428
429# End /etc/pam.d/login</literal>
430EOF</userinput></screen>
431
432 </sect4>
433
434 <sect4>
435 <title>'passwd'</title>
436
437<screen role="root"><userinput>cat &gt; /etc/pam.d/passwd &lt;&lt; "EOF"
438<literal># Begin /etc/pam.d/passwd
439
440password include system-password
441
442# End /etc/pam.d/passwd</literal>
443EOF</userinput></screen>
444
445 </sect4>
446
447 <sect4>
448 <title>'su'</title>
449
450<screen role="root"><userinput>cat &gt; /etc/pam.d/su &lt;&lt; "EOF"
451<literal># Begin /etc/pam.d/su
452
453# always allow root
454auth sufficient pam_rootok.so
455auth include system-auth
456
457# include the default account settings
458account include system-account
459
460# Use xauth keys (if available)
461session optional pam_xauth.so
462
463# Set default environment variables for the service user
464session required pam_env.so
465
466# include system session defaults
467session include system-session
468
469# End /etc/pam.d/su</literal>
470EOF</userinput></screen>
471
472 </sect4>
473
474 <sect4>
475 <title>'chage'</title>
476
477<screen role="root"><userinput>cat &gt; /etc/pam.d/chage &lt;&lt; "EOF"
478<literal>#Begin /etc/pam.d/chage
479
480# always allow root
481auth sufficient pam_rootok.so
482
483# include system defaults for auth account and session
484auth include system-auth
485account include system-account
486session include system-session
487
488# Always permit for authentication updates
489password required pam_permit.so
490
491# End /etc/pam.d/chage</literal>
492EOF</userinput></screen>
493
494 </sect4>
495
496 <sect4>
497 <title>'chfn', 'chgpasswd', 'chgpasswd', 'chsh', 'groupadd',
498 'groupdel', 'groupmems', 'groupmod', 'newusers', 'useradd', 'userdel'
499 and 'usermod'</title>
500
501<screen role="root"><userinput>for PROGRAM in chfn chgpasswd chpasswd chsh groupadd groupdel \
502 groupmems groupmod newusers useradd userdel usermod
503do
504 install -v -m644 /etc/pam.d/chage /etc/pam.d/$PROGRAM
505 sed -i "s/chage/$PROGRAM/" /etc/pam.d/$PROGRAM
506done</userinput></screen>
507
508 <warning>
509 <para>At this point, you should do a simple test to see if
510 <application>Shadow</application> is working as expected. Open
511 another terminal and log in as a user, then <command>su</command> to
512 <systemitem class="username">root</systemitem>. If you do not see any
513 errors, then all is well and you should proceed with the rest of the
514 configuration. If you did receive errors, stop now and double check
515 the above configuration files manually. You can also run the test
516 suite from the <application>Linux-PAM</application> package to assist
517 you in determining the problem. If you cannot find and
518 fix the error, you should recompile <application>Shadow</application>
519 adding the <option>--without-libpam</option> switch to the
520 <command>configure</command> command in the above instructions
521 (also move the <filename>/etc/login.defs.orig</filename> backup
522 file to <filename>/etc/login.defs</filename>). If you
523 fail to do this and the errors remain, you will be unable to log into
524 your system.</para>
525 </warning>
526
527 </sect4>
528
529 <sect4>
530 <title>Other</title>
531
532 <para>Currently, <filename>/etc/pam.d/other</filename> is configured
533 to allow anyone with an account on the machine to use PAM-aware
534 programs without a configuration file for that program. After testing
535 <application>Linux-PAM</application> for proper configuration, install
536 a more restrictive <filename>other</filename> file so that
537 program-specific configuration files are required:</para>
538
539<screen role="root"><userinput>cat &gt; /etc/pam.d/other &lt;&lt; "EOF"
540<literal># Begin /etc/pam.d/other
541
542auth required pam_warn.so
543auth required pam_deny.so
544account required pam_warn.so
545account required pam_deny.so
546password required pam_warn.so
547password required pam_deny.so
548session required pam_warn.so
549session required pam_deny.so
550
551# End /etc/pam.d/other</literal>
552EOF</userinput></screen>
553
554 </sect4>
555
556 <sect4 id="pam-access">
557 <title>Configuring Login Access</title>
558
559 <para>Instead of using the <filename>/etc/login.access</filename>
560 file for controlling access to the system,
561 <application>Linux-PAM</application> uses the
562 <filename class='libraryfile'>pam_access.so</filename> module along
563 with the <filename>/etc/security/access.conf</filename> file. Rename
564 the <filename>/etc/login.access</filename> file using the following
565 command:</para>
566
567 <indexterm zone="shadow pam-access">
568 <primary sortas="e-etc-security-access.conf">/etc/security/access.conf</primary>
569 </indexterm>
570
571<screen role="root"><userinput>if [ -f /etc/login.access ]; then
572 mv -v /etc/login.access /etc/login.access.NOUSE
573fi</userinput></screen>
574
575 </sect4>
576
577 <sect4 id="pam-limits">
578 <title>Configuring Resource Limits</title>
579
580 <para>Instead of using the <filename>/etc/limits</filename> file
581 for limiting usage of system resources,
582 <application>Linux-PAM</application> uses the
583 <filename class='libraryfile'>pam_limits.so</filename> module along
584 with the <filename>/etc/security/limits.conf</filename> file. Rename
585 the <filename>/etc/limits</filename> file using the following
586 command:</para>
587
588 <indexterm zone="shadow pam-limits">
589 <primary sortas="e-etc-security-limits.conf">/etc/security/limits.conf</primary>
590 </indexterm>
591
592<screen role="root"><userinput>if [ -f /etc/limits ]; then
593 mv -v /etc/limits /etc/limits.NOUSE
594fi</userinput></screen>
595
596 </sect4>
597
598 <sect4 id="pam-env">
599 <title>Configuring Default Environment</title>
600
601 <para>During previous configuration, several items were removed from
602 <filename>/etc/login.defs</filename>. Some of these items are now
603 controlled by the <filename class='libraryfile'>pam_env.so</filename>
604 module and the <filename>/etc/security/pam_env.conf</filename>
605 configuration file. In particular, the default path has been
606 changed. To recover your default path, execute the following
607 commands:</para>
608
609<screen role="root"><userinput>ENV_PATH=`grep '^ENV_PATH' /etc/login.defs.orig | \
610 awk '{ print $2 }' | sed 's/PATH=//'` &amp;&amp;
611echo 'PATH DEFAULT='`echo "${ENV_PATH}"`\
612' OVERRIDE=${PATH}' \
613 >> /etc/security/pam_env.conf &amp;&amp;
614unset ENV_PATH</userinput></screen>
615
616 <note>
617 <para>The ENV_SUPATH option used to modify root's default path
618 does not work with PAM. You have to set the path in root's login
619 scripts instead.
620 </para>
621 </note>
622
623 </sect4>
624
625 </sect3>
626
627 </sect2>
628
629 <sect2 role="content">
630 <title>Contents</title>
631
632 <para>A list of the installed files, along with their short descriptions
633 can be found at
634 <ulink url="&lfs-root;/chapter06/shadow.html#contents-shadow"/>.</para>
635
636 </sect2>
637
638</sect1>
Note: See TracBrowser for help on using the repository browser.