Browse Source

Ticket 49811 - Update man pages

Bug Description:  A recent man page scan revealed several errors and warnings.

Fix Description:  Added missing man pages, fixed syntax issues, and added
                  new man pages for config files.

                  Also added dynamic man page creation for the lib389 CLI tools
                  using python-argparse-manpages

https://pagure.io/389-ds-base/issue/49811

Reviewed by: spichugi & vashirov(Thanks!!)
Mark Reynolds 7 years ago
parent
commit
0d9886e752

+ 45 - 17
Makefile.am

@@ -939,6 +939,7 @@ include_HEADERS = src/svrcore/src/svrcore.h
 #------------------------
 dist_man_MANS = man/man1/dbscan.1 \
         man/man1/cl-dump.1 \
+        man/man1/cl-dump.pl.1 \
         man/man1/dbgen.pl.1 \
         man/man1/ds-logpipe.py.1 \
         man/man1/ds-replcheck.1 \
@@ -951,8 +952,10 @@ dist_man_MANS = man/man1/dbscan.1 \
         man/man1/mmldif.1 \
         man/man1/pwdhash.1 \
         man/man1/repl-monitor.1 \
+        man/man1/repl-monitor.pl.1 \
         man/man1/rsearch.1 \
         man/man1/readnsstate.1 \
+        man/man5/99user.ldif.5 \
         man/man8/migrate-ds.pl.8 \
         man/man8/ns-slapd.8 \
         man/man8/restart-dirsrv.8 \
@@ -960,23 +963,48 @@ dist_man_MANS = man/man1/dbscan.1 \
         man/man8/start-dirsrv.8 \
         man/man8/stop-dirsrv.8 \
         man/man8/status-dirsrv.8 \
-        man/man8/bak2db.8 man/man8/bak2db.pl.8 \
-        man/man8/db2bak.8 man/man8/db2bak.pl.8 \
-        man/man8/db2ldif.8 man/man8/db2ldif.pl.8 \
-        man/man8/db2index.8 man/man8/db2index.pl.8 \
-        man/man8/ldif2db.8 man/man8/ldif2db.pl.8 \
-        man/man8/dbverify.8 man/man8/verify-db.pl.8 \
+        man/man8/bak2db.8 \
+        man/man8/bak2db.pl.8 \
+        man/man5/certmap.conf.5 \
+        man/man8/cleanallruv.pl.8 \
+        man/man8/dbverify.8 \
+        man/man8/db2bak.8 \
+        man/man8/db2bak.pl.8 \
+        man/man8/db2ldif.8 \
+        man/man8/db2ldif.pl.8 \
+        man/man8/db2index.8 \
+        man/man8/db2index.pl.8 \
+        man/man8/dsconf.8 \
+        man/man8/dsctl.8 \
+        man/man8/dsidm.8 \
+        man/man8/dscreate.8 \
+        man/man8/fixup-linkedattrs.pl.8 \
+        man/man8/fixup-memberof.pl.8 \
+        man/man8/ldif2db.8 \
+        man/man8/ldif2db.pl.8 \
         man/man8/dbmon.sh.8 \
-        man/man8/dn2rdn.8 man/man8/ldif2ldap.8 \
-        man/man8/restoreconfig.8 man/man8/saveconfig.8 \
-        man/man8/suffix2instance.8 man/man8/monitor.8 \
-        man/man8/upgradednformat.8 man/man8/vlvindex.8 \
-        man/man8/cleanallruv.pl.8 man/man8/schema-reload.pl.8 \
-        man/man8/fixup-linkedattrs.pl.8 man/man8/fixup-memberof.pl.8 \
-        man/man8/syntax-validate.pl.8 man/man8/usn-tombstone-cleanup.pl.8 \
-        man/man8/ns-accountstatus.pl.8 man/man8/ns-newpwpolicy.pl.8 \
-        man/man8/ns-activate.pl.8 man/man8/ns-inactivate.pl.8 \
-        man/man8/upgradedb.8 man/man8/remove-ds.pl.8
+        man/man5/dirsrv.5 \
+        man/man5/dirsrv.systemd.5 \
+        man/man8/dn2rdn.8 \
+        man/man8/ldif2ldap.8 \
+        man/man8/monitor.8 \
+        man/man8/ns-accountstatus.pl.8 \
+        man/man8/ns-newpwpolicy.pl.8 \
+        man/man8/ns-activate.pl.8 \
+        man/man8/ns-inactivate.pl.8 \
+        man/man8/remove-ds.pl.8 \
+        man/man8/restoreconfig.8 \
+        man/man8/saveconfig.8 \
+        man/man8/schema-reload.pl.8 \
+        man/man5/slapd-collations.conf.5 \
+        man/man8/suffix2instance.8 \
+        man/man8/syntax-validate.pl.8 \
+        man/man5/template-initconfig.5 \
+        man/man8/upgradednformat.8 \
+        man/man8/upgradedb.8 \
+        man/man8/usn-tombstone-cleanup.pl.8 \
+        man/man8/vlvindex.8 \
+        man/man8/verify-db.pl.8
 
 #------------------------
 # updates
@@ -2352,7 +2380,7 @@ git-archive:
 # How will we update this to python 3?
 
 lib389: src/lib389/setup.py
-	cd $(srcdir)/src/lib389; $(PYTHON) setup.py build
+	cd $(srcdir)/src/lib389; $(PYTHON) setup.py build ; $(PYTHON) setup.py build_manpages
 
 lib389-install: lib389
 	cd $(srcdir)/src/lib389; $(PYTHON) setup.py install --skip-build --force

+ 1 - 1
ldap/admin/src/template-initconfig.in

@@ -1,5 +1,5 @@
 # This file is sourced by @package_name@ upon startup to set
-# the default environment for a single specific  directory
+# the default environment for a single specific directory
 # server instances.  To set defaults for all instances, edit
 # the file in the same directory called @package_name@.
 

+ 1 - 1
ldap/schema/slapd-collations.conf

@@ -1,7 +1,7 @@
 #
 # BEGIN COPYRIGHT BLOCK
 # Copyright (C) 2001 Sun Microsystems, Inc. Used by permission.
-# Copyright (C) 2005 Red Hat, Inc.
+# Copyright (C) 2018 Red Hat, Inc.
 # All rights reserved.
 #
 # License: GPL (version 3 or any later version).

+ 1 - 1
lib/ldaputil/certmap.conf

@@ -1,7 +1,7 @@
 #
 # BEGIN COPYRIGHT BLOCK
 # Copyright (C) 2001 Sun Microsystems, Inc. Used by permission.
-# Copyright (C) 2005 Red Hat, Inc.
+# Copyright (C) 2018 Red Hat, Inc.
 # All rights reserved.
 #
 # License: GPL (version 3 or any later version).

+ 96 - 0
man/man1/cl-dump.pl.1

@@ -0,0 +1,96 @@
+.\"                                      Hey, EMACS: -*- nroff -*-
+.\" First parameter, NAME, should be all caps
+.\" Second parameter, SECTION, should be 1-8, maybe w/ subsection
+.\" other parameters are allowed: see man(7), man(1)
+.TH CL-DUMP.PL 1 "March 31, 2017"
+.\" Please adjust this date whenever revising the manpage.
+.\"
+.\" Some roff macros, for reference:
+.\" .nh        disable hyphenation
+.\" .hy        enable hyphenation
+.\" .ad l      left justify
+.\" .ad b      justify to both left and right margins
+.\" .nf        disable filling
+.\" .fi        enable filling
+.\" .br        insert line break
+.\" .sp <n>    insert n+1 empty lines
+.\" for manpage-specific macros, see man(7)
+.SH NAME
+cl-dump \- Dump and decode Directory Server replication change log
+.SH SYNOPSIS
+.B cl\-dump.pl
+[\fI\-h host\fR] [\fI\-p port\fR] [\fI\-D bind\(hydn\fR] \-w bind\(hypassword | \-P bind\(hycert
+       [\fI\-r replica\(hyroots\fR] [\fI\-o output\(hyfile\fR] [\fI\-c\fR] [\fI\-v\fR]
+
+.PP
+.B cl\-dump.pl
+\-i changelog\(hyldif\(hyfile\(hywith\(hybase64encoding [\fI\-o output\(hyfile\fR] [\fI\-c\fR]
+.PP
+.SH DESCRIPTION
+Dump and decode Directory Server replication change log
+.PP
+.\" TeX users may be more comfortable with the \fB<whatever>\fP and
+.\" \fI<whatever>\fP escape sequences to invode bold face and italics, 
+.\" respectively.
+.SH OPTIONS
+A summary of options is included below.
+.TP
+.B \-c 
+Dump and interpret CSN only. This option can be used with or
+without \-i option.
+.TP
+.B \-D bind\-dn
+Directory server's bind DN. Default to "cn=Directory Manager" if
+the option is omitted.
+.TP
+.B \-h host
+Directory server's host. Default to the server where the script
+is running.
+.TP
+.B \-i changelog\(hyldif\(hyfile\(hywith\(hybase64encoding
+If you already have a ldif-like changelog, but the changes
+in that file are encoded, you may use this option to
+decode that ldif-like changelog.
+.TP
+.B \-o output\(hyfile
+Path name for the final result. Default to STDOUT if omitted.
+.TP
+.B \-p port
+Directory server's port. Default to 389.
+.TP
+.B \-P bind\(hycert
+Pathname of binding certificate DB
+.TP
+.B \-r replica\(hyroots
+Specify replica roots whose changelog you want to dump. The replica
+roots may be separated by comma. All the replica roots would be
+dumped if the option is omitted.
+.TP
+.B \-v 
+Print the version of this script.
+.TP
+.B \-w bind\(hypassword
+Password for the bind DN
+.SH RESTRICTIONS
+If you are not using \-i option, the script should be run when the server
+is running, and from where the server's changelog directory is accessible.
+.br
+.SH SEE ALSO
+.BR repl-monitor (1)
+.br
+.SH AUTHOR
+cl-dump.pl was written by the 389 Project.
+.SH "REPORTING BUGS"
+Report bugs to https://pagure.io/389-ds-base/new_issue
+.SH COPYRIGHT
+Copyright \(co 2001 Sun Microsystems, Inc. Used by permission.
+.br
+Copyright \(co 2018 Red Hat, Inc.
+.br
+This manual page was written by Michele Baldessari <[email protected]>,
+for the Debian project (but may be used by others).
+.br
+This is free software.  You may redistribute copies of it under the terms of
+the Directory Server license found in the LICENSE file of this
+software distribution.  This license is essentially the GNU General Public
+License version 2 with an exception for plug-in distribution.

+ 2 - 2
man/man1/ds-logpipe.py.1

@@ -83,7 +83,7 @@ The directory server will usually need to be configured to log to the named pipe
 
 NOTE: Before doing this, you should save your current configuration so you can restore it later.
  ldapsearch ... \-s base \-b "cn=config" nsslapd-accesslog-maxlogsperdir nsslapd-accesslog-logexpirationtime \
-  nsslapd-accesslog-logrotationtime nsslapd-accesslog nsslapd-accesslog > savedaccesslog.ldif
+  nsslapd-accesslog-logrotationtime nsslapd-accesslog > savedaccesslog.ldif
 
 The error log and audit log have similarly named configuration attributes e.g. nsslapd-errorlog, nsslapd-auditlog.  Note that the audit log is disabled by default - use nsslapd-auditlog-logging-enabled: on to enable it.
 .br
@@ -92,7 +92,7 @@ ds-logpipe.py was written by the 389 Project.
 .SH "REPORTING BUGS"
 Report bugs to https://pagure.io/389-ds-base/new_issue
 .SH COPYRIGHT
-Copyright \(co 2017 Red Hat, Inc.
+Copyright \(co 2018 Red Hat, Inc.
 .br
 This is free software.  You may redistribute copies of it under the terms of
 the Directory Server license found in the LICENSE file of this

+ 1 - 1
man/man1/ds-replcheck.1

@@ -49,7 +49,7 @@ Prompt for the Directory Manager password (online mode)
 The LDAP Url for the first replica (online mode)
 .TP
 .B \fB\-r\fR \fILDAP URL\fR
-The LDAP Url for the the second replica (online mode)
+The LDAP Url for the second replica (online mode)
 .TP
 .B \fB\-b\fR \fISUFFIX\fR
 The replication suffix.  (online & offline)

+ 2 - 2
man/man1/ldclt.1

@@ -125,7 +125,7 @@ Execution parameters:
 .br
 \fBappend\fR entries to the genldif file.
 .br
-\fBascii\fR ascii 7\-bits strings.
+\fBascii\fR use ascii 7\-bits strings.
 .br
 \fBattreplace=name:mask\fR replace attribute of existing entry.
 .br
@@ -224,7 +224,7 @@ Report bugs to https://pagure.io/389-ds-base/new_issue
 .SH COPYRIGHT
 Copyright \(co 2001 Sun Microsystems, Inc. Used by permission.
 .br
-Copyright \(co 2017 Red Hat, Inc.
+Copyright \(co 2018 Red Hat, Inc.
 .br
 This manual page was written by Michele Baldessari <[email protected]>,
 for the Debian project (but may be used by others).

+ 138 - 0
man/man1/repl-monitor.pl.1

@@ -0,0 +1,138 @@
+.\"                                      Hey, EMACS: -*- nroff -*-
+.\" First parameter, NAME, should be all caps
+.\" Second parameter, SECTION, should be 1-8, maybe w/ subsection
+.\" other parameters are allowed: see man(7), man(1)
+.TH REPL-MONITOR.PL 1 "March 31, 2017"
+.\" Please adjust this date whenever revising the manpage.
+.\"
+.\" Some roff macros, for reference:
+.\" .nh        disable hyphenation
+.\" .hy        enable hyphenation
+.\" .ad l      left justify
+.\" .ad b      justify to both left and right margins
+.\" .nf        disable filling
+.\" .fi        enable filling
+.\" .br        insert line break
+.\" .sp <n>    insert n+1 empty lines
+.\" for manpage-specific macros, see man(7)
+.SH NAME
+repl-monitor.pl \- Directory Server replication monitor
+.SH SYNOPSIS
+.B repl\(hymonitor.pl
+\ [\-f configuration\(hyfile] [\fI\(hyh host\fR] [\fI\-p port\fR] [\fI\-r\fR]
+[\fI\-c connection\fR] [\fI\-a alias\fR] [\fI\-k color\fR] [\fI\-u refresh\(hyurl\fR]
+[\fI\-s\fR] [\fI\-t refresh\(hyinterval\fR] [\fI\-v\fR]
+
+.SH DESCRIPTION
+Outputs the status of all of the configured Directory Servers
+participating in replication. The servers to query for status
+are specified in the configuration file.
+.PP
+.\" TeX users may be more comfortable with the \fB<whatever>\fP and
+.\" \fI<whatever>\fP escape sequences to invode bold face and italics, 
+.\" respectively.
+.SH OPTIONS
+A summary of options is included below:
+.TP
+.B \-h, \-\-host\fR host
+Hostname of DS server
+.TP
+.B \-p, \-\-port\fR port
+TCP port
+.TP
+.B \-f, \-\-configfile\fR configuration-file
+Configuration file 
+.TP
+.B \-c, \-\-conn\fR connection
+Uses the same format as the configfile directive
+.TP
+.B \-a, \-\-alias\fR alias
+Uses the same format as the configfile directive
+.TP
+.B \-k, --color\fR color
+Uses the same format as the configfile directive
+.TP
+.B \-r, --skip-header\fR
+Removes extra HTML tags
+.TP
+.B \-u, \-\-refreshurl\fR refresh url
+Refresh url
+.TP
+.B \-t, \-\-interval\fR refresh interval
+Refresh interval
+.TP
+.B \-W, \-\-prompt
+Prompt for passwords
+.TP
+.B \-s, \-\-text
+Print plain text report
+
+.br
+.SH CONFIGURATION FILE
+This section describes the various directives that can be used in the configuration file.
+.TP
+.B [connection]
+The connection details about a replica
+.br
+
+host:port:binddn:bindpwd:cert_file
+.br
+
+or,
+.br
+
+host:port=shadowport:binddn:bindpwd:cert_file
+.TP
+.B [alias]
+Define an alias for a server, this alias is used in the report in place of the
+hostname/port
+
+.br
+alias = host:port
+.TP
+.B [color]
+Set a color based on the replicaton lag time lowmark (in minutes)
+.br
+
+.R lowmark = color
+.SH EXAMPLE
+Example of a configuration file:
+
+[connection]
+.br
+localhost.localdomain:3891:cn=directory manager:password:*
+.br
+localhost2.localdomain:3892:cn=directory manager:password:*
+
+[alias]
+.br
+MY_SYSTEM1 = localhost.localdomain:3891
+.br
+MY_SYSTEM2 = localhost2.localdomain:3892
+
+[color]
+.br
+0 = #CCFFCC
+.br
+5 = #FFFFCC
+.br
+60 = #FFCCCC
+
+.SH AUTHOR
+repl-monitor.pl was written by the 389 Project.
+.SH "REPORTING BUGS"
+Report bugs to https://pagure.io/389-ds-base/new_issue
+.SH COPYRIGHT
+Copyright \(co 2001 Sun Microsystems, Inc. Used by permission.
+.br
+Copyright \(co 2018 Red Hat, Inc.
+.br
+This manual page was written by Michele Baldessari <[email protected]>,
+for the Debian project (but may be used by others).
+.br
+Manual page updated by Mark Reynolds <[email protected]> 3/31/2017
+.br
+This is free software.  You may redistribute copies of it under the terms of
+the Directory Server license found in the LICENSE file of this
+software distribution.  This license is essentially the GNU General Public
+License version 3 with an exception for plug\(hyin distribution.

+ 54 - 0
man/man5/99user.ldif.5

@@ -0,0 +1,54 @@
+.\"                                      Hey, EMACS: -*- nroff -*-
+.\" First parameter, NAME, should be all caps
+.\" Second parameter, SECTION, should be 1-8, maybe w/ subsection
+.\" other parameters are allowed: see man(7), man(1)
+.TH 99USER.LDIF 5 "Jun 26, 2018"
+.\" Please adjust this date whenever revising the manpage.
+.\"
+.\" Some roff macros, for reference:
+.\" .nh        disable hyphenation
+.\" .hy        enable hyphenation
+.\" .ad l      left justify
+.\" .ad b      justify to both left and right margins
+.\" .nf        disable filling
+.\" .fi        enable filling
+.\" .br        insert line break
+.\" .sp <n>    insert n+1 empty lines
+.\" for manpage-specific macros, see man(7)
+.SH NAME 
+/etc/dirsrv/schema/99user.ldif - LDIF file containing custom LDAP Schema for 389 Directory Server.
+
+.SH SYNOPSIS
+/etc/dirsrv/schema/99user.ldif
+
+.SH DESCRIPTION
+99user.ldif
+
+This file contains user defined, or custom, LDAP schema definitions (attributes 
+and objectclasses) used by the Directory Server.
+
+.SH SYNTAX
+
+attributeTypes: VALUE
+.br 
+objectClasses: VALUE
+.br
+
+.SH EXAMPLE
+
+dn: cn=schema
+.br
+attributeTypes: ( 1.1.1.1.1.1.1 NAME 'myNewAttribute' DESC 'Custom defined
+attribute type' SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 SINGLE-VALUE X-ORIGIN
+'user-defined' )
+.br
+objectClasses: ( 1.1.1.1.1.1.1.2 NAME 'myNewObjectcass' DESC 'Custom defined 
+objectclass' SUP top MUST ( myNewAttrbiute ) MAY ( uid $ cn ) X-ORIGIN 'user-defined' )
+
+.SH AUTHOR
+99user.ldif was written by the 389 Project.
+.SH "REPORTING BUGS"
+Report bugs to https://pagure.io/389-ds-base/new_issue
+.SH COPYRIGHT
+Copyright \(co 2018 Red Hat, Inc.
+

+ 133 - 0
man/man5/certmap.conf.5

@@ -0,0 +1,133 @@
+.\"                                      Hey, EMACS: -*- nroff -*-
+.\" First parameter, NAME, should be all caps
+.\" Second parameter, SECTION, should be 1-8, maybe w/ subsection
+.\" other parameters are allowed: see man(7), man(1)
+.TH CERTMAP.CONF 5 "Jun 26, 2018"
+.\" Please adjust this date whenever revising the manpage.
+.\"
+.\" Some roff macros, for reference:
+.\" .nh        disable hyphenation
+.\" .hy        enable hyphenation
+.\" .ad l      left justify
+.\" .ad b      justify to both left and right margins
+.\" .nf        disable filling
+.\" .fi        enable filling
+.\" .br        insert line break
+.\" .sp <n>    insert n+1 empty lines
+.\" for manpage-specific macros, see man(7)
+.SH NAME 
+/etc/dirsrv/config/certmap.conf - Configuration file for TLS client authentication in 389 Directory Server.
+
+.SH SYNOPSIS
+/etc/dirsrv/config/certmap.conf
+
+.SH DESCRIPTION
+certmap.conf
+
+This file configures how a certificate is mapped to an LDAP entry.  See the
+documentation for more information on this file: https://access.redhat.com/documentation/en-us/red_hat_directory_server/10/html/configuration_command_and_file_reference/configuration_file_reference#certmap_conf
+
+.SH SYNTAX
+The format of this file is as follows:
+.br
+	certmap <name> <issuerDN>
+.br
+	<name>:<prop1> [<val1>]
+.br
+	<name>:<prop2> [<val2>]
+.br
+
+Notes:
+
+ 1.  Mapping can be defined per issuer of a certificate.  If mapping doesn't
+     exists for a particular 'issuerDN' then the server uses the default
+     mapping. 
+
+ 2.  There must be an entry for <name>=default and issuerDN "default".
+     This mapping is the default mapping.
+
+ 3.  '#' can be used to comment out a line.
+
+ 4.  DNComps & FilterComps are used to form the base DN and filter responsible for 
+     performing an LDAP search while mapping the certificate to a user entry.
+
+.SH OPTIONS
+.IP DNComps
+The DNComps parameter determines how Directory Server generates the base DN 
+used to search for a user in the directory.  This setting accepts a comma 
+separated list of attributes to form a DN.  However, the order of the 
+attributes in the DNComps parameter must match the order in the subject of the
+certificate.  For example, if your certificate's subject is 
+"[email protected],cn=user_name,o=Example Inc.,c=US", and you want 
+Directory Server to use "cn=user_name,o=Example Inc.,c=US" as the base DN when 
+searching for the user, set the DNComps parameter to "cn, o, c". 
+  
+Comment out or do not set this parameter, if either the subject field of the 
+certificate matches exactly the DN of the user in Directory Server or if you 
+want to use the setting from the CmapLdapAttr parameter. 
+
+If the value is empty, it will search the entire LDAP tree by using the 
+FilterComps parameter.
+ 
+.IP FilterComps
+This parameter sets which attributes from the subject field of the certificate
+Directory Server uses to generate the search filter to locate the user.
+
+Set this parameter to a comma-separated list of attributes used in the 
+certificate's subject. Directory Server will use these attributes in an AND 
+operation in the filter.
+
+Note - Certificate Subjects use the e attribute for the email address, which 
+does not exist in the default Directory Server schema. For this reason, 
+Directory Server automatically maps this attribute to the mail attribute. This
+means, if you use the mail attribute in the FilterComps parameter, Directory 
+Server reads the value of the e attribute from the subject of the certificate.
+
+For example, if the subject of a certificate is 
+"[email protected],cn=user_name,dc=example,dc=com,o=Example Inc.,c=US" 
+and you want to dynamically generate the 
+"(&(mail=username@domain)(cn=user_name))" filter, set the FilterComps parameter 
+to "mail, cn". 
+ 
+If the parameter is commented out or set to an empty value, the (objectclass=*) filter will be used.
+
+.IP verifycert
+Directory Server always verifies if the certificate has been issued by a 
+trusted Certificate Authority (CA). However, if you additionally set the 
+verifycert parameter to on, Directory Server additionally verifies that the 
+certificate matches the Distinguished Encoding Rules (DER)-formatted 
+certificate stored in the userCertificate binary attribute of the user.
+
+If you do not set this parameter, verifycert is disabled
+
+.IP CmapLdapAttr
+If your user entries contain an attribute that stores the subject DN of the 
+user certificate, set the CmapLdapAttr to this attribute name. Directory Server
+will use this attribute and the subject DN to locate the user. In this case the
+no filter is generated based on the attributes in the FilterComps parameter.
+ 
+
+.SH EXAMPLES
+certmap default         default
+.br
+default:DNComps         cn, o, c
+.br
+#default:FilterComps    e, uid
+.br
+#default:verifycert     on
+.br
+#default:CmapLdapAttr   certSubjectDN
+.br
+.sp 1
+certmap example         o=Example Inc.,c=US
+.br
+example:DNComps
+.br
+
+.SH AUTHOR
+certmap.conf was written by the 389 Project.
+.SH "REPORTING BUGS"
+Report bugs to https://pagure.io/389-ds-base/new_issue
+.SH COPYRIGHT
+Copyright \(co 2018 Red Hat, Inc.
+

+ 46 - 0
man/man5/dirsrv.5

@@ -0,0 +1,46 @@
+.\"                                      Hey, EMACS: -*- nroff -*-
+.\" First parameter, NAME, should be all caps
+.\" Second parameter, SECTION, should be 1-8, maybe w/ subsection
+.\" other parameters are allowed: see man(7), man(1)
+.TH DIRSRV 5 "Jun 26, 2018"
+.\" Please adjust this date whenever revising the manpage.
+.\"
+.\" Some roff macros, for reference:
+.\" .nh        disable hyphenation
+.\" .hy        enable hyphenation
+.\" .ad l      left justify
+.\" .ad b      justify to both left and right margins
+.\" .nf        disable filling
+.\" .fi        enable filling
+.\" .br        insert line break
+.\" .sp <n>    insert n+1 empty lines
+.\" for manpage-specific macros, see man(7)
+.SH NAME 
+/etc/sysconfig/dirsrv - Systemd EnvironmentFile that affects all Directory Server instances.
+
+.SH SYNOPSIS
+/etc/sysconfig/dirsrv
+
+.SH DESCRIPTION
+dirsrv
+
+This file is sourced by dirsrv upon startup to set
+the default environment for all directory server instances.
+To set instance specific defaults, use the file in the same
+directory called dirsrv-instance where "instance"
+is the name of your directory server instance e.g.
+dirsrv-localhost for the slapd-localhost instance.
+
+This file is in systemd EnvironmentFile format - see man systemd.exec
+
+.SH EXAMPLE
+LD_PRELOAD=/usr/lib64/dirsrv/lib/libjemalloc.so
+
+
+.SH AUTHOR
+dirsrv was written by the 389 Project.
+.SH "REPORTING BUGS"
+Report bugs to https://pagure.io/389-ds-base/new_issue
+.SH COPYRIGHT
+Copyright \(co 2018 Red Hat, Inc.
+

+ 39 - 0
man/man5/dirsrv.systemd.5

@@ -0,0 +1,39 @@
+.\"                                      Hey, EMACS: -*- nroff -*-
+.\" First parameter, NAME, should be all caps
+.\" Second parameter, SECTION, should be 1-8, maybe w/ subsection
+.\" other parameters are allowed: see man(7), man(1)
+.TH DIRSRV.SYSTEMD 5 "Jun 26, 2018"
+.\" Please adjust this date whenever revising the manpage.
+.\"
+.\" Some roff macros, for reference:
+.\" .nh        disable hyphenation
+.\" .hy        enable hyphenation
+.\" .ad l      left justify
+.\" .ad b      justify to both left and right margins
+.\" .nf        disable filling
+.\" .fi        enable filling
+.\" .br        insert line break
+.\" .sp <n>    insert n+1 empty lines
+.\" for manpage-specific macros, see man(7)
+.SH NAME 
+/etc/sysconfig/dirsrv.systemd - Systemd EnvironmentFile for Directory Server.
+
+.SH SYNOPSIS
+/etc/sysconfig/dirsrv.systemd
+
+.SH DESCRIPTION
+dirsrv.systemd
+
+This controls the resources to the direct child of systemd, in
+this case ns-slapd. Because we are type notify we recieve these
+limits correctly.
+
+For more inforation see man systemd.exec and man systemd.resource-control
+
+.SH AUTHOR
+dirsrv.systemd was written by the 389 Project.
+.SH "REPORTING BUGS"
+Report bugs to https://pagure.io/389-ds-base/new_issue
+.SH COPYRIGHT
+Copyright \(co 2018 Red Hat, Inc.
+

+ 51 - 0
man/man5/slapd-collations.conf.5

@@ -0,0 +1,51 @@
+.\"                                      Hey, EMACS: -*- nroff -*-
+.\" First parameter, NAME, should be all caps
+.\" Second parameter, SECTION, should be 1-8, maybe w/ subsection
+.\" other parameters are allowed: see man(7), man(1)
+.TH SLAPD-COLLATIONS.CONF 5 "Jun 26, 2018"
+.\" Please adjust this date whenever revising the manpage.
+.\"
+.\" Some roff macros, for reference:
+.\" .nh        disable hyphenation
+.\" .hy        enable hyphenation
+.\" .ad l      left justify
+.\" .ad b      justify to both left and right margins
+.\" .nf        disable filling
+.\" .fi        enable filling
+.\" .br        insert line break
+.\" .sp <n>    insert n+1 empty lines
+.\" for manpage-specific macros, see man(7)
+.SH NAME 
+/etc/dirsrv/config/slapd-collations.conf -  Contains the language tags and OID's used in 389 Directory Server.
+
+.SH SYNOPSIS
+/etc/dirsrv/config/slapd-collations.conf
+
+.SH DESCRIPTION
+slapd-collations.conf
+
+This file contains all the collation rules (tags and OID's) that are used by the Directory Server.
+
+.SH SYNTAX
+
+.IP collation
+This parameter is laid out as following: language, country, variant, strength, decomposition, oid, oid ...
+
+.SH EXAMPLE
+collation "" "" "" 1 3  2.16.840.1.113730.3.3.2.0.1 default
+.br
+collation ar "" "" 1 3  2.16.840.1.113730.3.3.2.1.1 ar
+.br
+collation be "" "" 1 3  2.16.840.1.113730.3.3.2.2.1 be  be-BY
+.br
+\&.\&.\&.
+.br
+\&.\&.\&.
+
+.SH AUTHOR
+slapd-collations.conf was written by the 389 Project.
+.SH "REPORTING BUGS"
+Report bugs to https://pagure.io/389-ds-base/new_issue
+.SH COPYRIGHT
+Copyright \(co 2018 Red Hat, Inc.
+

+ 62 - 0
man/man5/template-initconfig.5

@@ -0,0 +1,62 @@
+.\"                                      Hey, EMACS: -*- nroff -*-
+.\" First parameter, NAME, should be all caps
+.\" Second parameter, SECTION, should be 1-8, maybe w/ subsection
+.\" other parameters are allowed: see man(7), man(1)
+.TH TEMPLATE-INITCONFIG 5 "Jun 26, 2018"
+.\" Please adjust this date whenever revising the manpage.
+.\"
+.\" Some roff macros, for reference:
+.\" .nh        disable hyphenation
+.\" .hy        enable hyphenation
+.\" .ad l      left justify
+.\" .ad b      justify to both left and right margins
+.\" .nf        disable filling
+.\" .fi        enable filling
+.\" .br        insert line break
+.\" .sp <n>    insert n+1 empty lines
+.\" for manpage-specific macros, see man(7)
+.SH NAME 
+/etc/dirsrv/config/template-initconfig - Systemd configuration file used when starting a Directory Server instance.
+
+.SH SYNOPSIS
+/etc/dirsrv/config/template-initconfig
+
+.SH DESCRIPTION
+template-initconfig
+
+This file is sourced by dirsrv upon startup to set
+the default environment for a single specific directory
+server instances.  To set defaults for all instances, edit
+the file in the same directory named dirsrv.
+
+These settings are used by the start-dirsrv and
+start-slapd scripts (as well as their associates stop
+and restart scripts).  Do not edit them unless you know
+what you are doing.
+
+This file is in systemd EnvironmentFile format - see man systemd.exec
+
+.SH SYNTAX
+SERVER_DIR={{SERVER-DIR}}
+.br
+SERVERBIN_DIR={{SERVERBIN-DIR}}
+.br
+CONFIG_DIR={{CONFIG-DIR}}
+.br
+INST_DIR={{INST-DIR}}
+.br
+RUN_DIR={{RUN-DIR}}
+.br
+DS_ROOT={{DS-ROOT}}
+.br
+PRODUCT_NAME={{PRODUCT-NAME}}
+.br
+
+
+.SH AUTHOR
+template-initconfig was written by the 389 Project.
+.SH "REPORTING BUGS"
+Report bugs to https://pagure.io/389-ds-base/new_issue
+.SH COPYRIGHT
+Copyright \(co 2018 Red Hat, Inc.
+

+ 1 - 2
man/man8/dn2rdn.8

@@ -43,7 +43,6 @@ Display the version of the Directory Server.
 .br
 Display the usage.
 .SH EXAMPLE
-dn2rdn
 
 dn2rdn \-Z instance3 \-f
 .SH DIAGNOSTICS
@@ -55,4 +54,4 @@ dn2rdn was written by the 389 Project.
 .SH "REPORTING BUGS"
 Report bugs to https://pagure.io/389-ds-base/new_issue
 .SH COPYRIGHT
-Copyright \(co 2017 Red Hat, Inc.
+Copyright \(co 2018 Red Hat, Inc.

+ 1 - 3
man/man8/restoreconfig.8

@@ -33,8 +33,6 @@ one instance on the system, this option can be skipped.
 Display the usage.
 .SH EXAMPLE
 .TP
-restoreconfig
-.TP
 restoreconfig \-Z instance2
 .SH DIAGNOSTICS
 Exit status is zero if no errors occur.  Errors result in a 
@@ -45,4 +43,4 @@ restoreconfig was written by the 389 Project.
 .SH "REPORTING BUGS"
 Report bugs to https://pagure.io/389-ds-base/new_issue
 .SH COPYRIGHT
-Copyright \(co 2017 Red Hat, Inc.
+Copyright \(co 2018 Red Hat, Inc.

+ 1 - 3
man/man8/saveconfig.8

@@ -33,8 +33,6 @@ one instance on the system, this option can be skipped.
 Display the usage.
 .SH EXAMPLE
 .TP
-saveconfig
-.TP
 saveconfig \-Z instance3
 .SH DIAGNOSTICS
 Exit status is zero if no errors occur.  Errors result in a 
@@ -45,4 +43,4 @@ saveconfig was written by the 389 Project.
 .SH "REPORTING BUGS"
 Report bugs to https://pagure.io/389-ds-base/new_issue
 .SH COPYRIGHT
-Copyright \(co 2017 Red Hat, Inc.
+Copyright \(co 2018 Red Hat, Inc.

+ 31 - 7
rpm/389-ds-base.spec.in

@@ -61,7 +61,6 @@ Group:            System Environment/Daemons
 BuildRoot:        %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
 Obsoletes:        %{name}-selinux
 Conflicts:        selinux-policy-base < 3.9.8
-# upgrade path from monolithic %{name} (including -libs & -devel) to %{name} + %{name}-snmp
 Obsoletes:        %{name} <= 1.4.0.9
 Provides:         ldif2ldbm
 
@@ -96,7 +95,6 @@ BuildRequires:    net-snmp-devel
 BuildRequires:    bzip2-devel
 BuildRequires:    zlib-devel
 BuildRequires:    openssl-devel
-BuildRequires:    tcp_wrappers
 # the following is for the pam passthru auth plug-in
 BuildRequires:    pam-devel
 BuildRequires:    systemd-units
@@ -121,6 +119,13 @@ BuildRequires:    libevent-devel
 BuildRequires:    python%{python3_pkgversion}
 BuildRequires:    python%{python3_pkgversion}-devel
 BuildRequires:    python%{python3_pkgversion}-setuptools
+BuildRequires:    python%{python3_pkgversion}-ldap
+BuildRequires:    python%{python3_pkgversion}-six
+BuildRequires:    python%{python3_pkgversion}-pyasn1
+BuildRequires:    python%{python3_pkgversion}-pyasn1-modules
+BuildRequires:    python%{python3_pkgversion}-dateutil
+BuildRequires:    python%{python3_pkgversion}-argcomplete
+BuildRequires:    python%{python3_pkgversion}-argparse-manpage
 
 # For cockpit
 BuildRequires:    rsync
@@ -134,9 +139,9 @@ Requires:         python%{python3_pkgversion}-lib389 = %{version}-%{release}
 %endif
 
 # this is needed for using semanage from our setup scripts
-Requires:         policycoreutils-python
+Requires:         policycoreutils-python-utils
 # This is needed for our future move to python selinux interaction.
-Requires:         libsemanage-python
+Requires:         libsemanage-python%{python3_pkgversion}
 # the following are needed for some of our scripts
 Requires:         openldap-clients
 # this is needed to setup SSL if you are not using the
@@ -263,7 +268,6 @@ Development Libraries and headers for the 389 Directory Server base package.
 Summary:          SNMP Agent for 389 Directory Server
 Group:            System Environment/Daemons
 Requires:         %{name} = %{version}-%{release}
-# upgrade path from monolithic %{name} (including -libs & -devel) to %{name} + %{name}-snmp
 Obsoletes:        %{name} <= 1.3.5.4
 
 %description      snmp
@@ -281,7 +285,7 @@ Requires: openssl-perl
 Requires: iproute
 Requires: python%{python3_pkgversion}
 Requires: python%{python3_pkgversion}-pytest
-Requires: python%{python3_pkgversion}-pyldap
+Requires: python%{python3_pkgversion}-ldap
 Requires: python%{python3_pkgversion}-six
 Requires: python%{python3_pkgversion}-pyasn1
 Requires: python%{python3_pkgversion}-pyasn1-modules
@@ -387,6 +391,12 @@ make setup.py
 pushd ./src/lib389
 %py3_build
 popd
+# argparse-manpage dynamic man pages have hardcoded man v1 in header,
+# need to change it to v8
+sed -i  "1s/\"1\"/\"8\"/" %{_builddir}/%{name}-%{version}%{?prerel}/man/man8/dsconf.8
+sed -i  "1s/\"1\"/\"8\"/" %{_builddir}/%{name}-%{version}%{?prerel}/man/man8/dsctl.8
+sed -i  "1s/\"1\"/\"8\"/" %{_builddir}/%{name}-%{version}%{?prerel}/man/man8/dsidm.8
+sed -i  "1s/\"1\"/\"8\"/" %{_builddir}/%{name}-%{version}%{?prerel}/man/man8/dscreate.8
 
 # tests
 %py3_build
@@ -468,6 +478,7 @@ else
     output=/dev/null
     output2=/dev/null
 fi
+
 # reload to pick up any changes to systemd files
 /bin/systemctl daemon-reload >$output 2>&1 || :
 # reload to pick up any shared lib changes
@@ -623,9 +634,13 @@ exit 0
 %{_mandir}/man8/ns-slapd.8.gz
 %if 0%{?rhel} > 7 || 0%{?fedora}
 %{_sbindir}/dsconf
+%{_mandir}/man8/dsconf.8.gz
 %{_sbindir}/dscreate
+%{_mandir}/man8/dscreate.8.gz
 %{_sbindir}/dsctl
+%{_mandir}/man8/dsctl.8.gz
 %{_sbindir}/dsidm
+%{_mandir}/man8/dsidm.8.gz
 %endif
 %{_libexecdir}/%{pkgname}/ds_selinux_enabled
 %{_libexecdir}/%{pkgname}/ds_selinux_port_query
@@ -654,10 +669,17 @@ exit 0
 %{_mandir}/man8/upgradedb.8.gz
 %{_sbindir}/vlvindex
 %{_mandir}/man8/vlvindex.8.gz
+%{_mandir}/man5/99user.ldif.5.gz
+%{_mandir}/man5/certmap.conf.5.gz
+%{_mandir}/man5/template-initconfig.5.gz
+%{_mandir}/man5/slapd-collations.conf.5.gz
+%{_mandir}/man5/dirsrv.5.gz
+%{_mandir}/man5/dirsrv.systemd.5.gz
+
 %{_libdir}/%{pkgname}/python
 %dir %{_libdir}/%{pkgname}/plugins
 %{_libdir}/%{pkgname}/plugins/*.so
-# THis has to be hardcoded to /lib - $libdir changes between lib/lib64, but
+# This has to be hardcoded to /lib - $libdir changes between lib/lib64, but
 # sysctl.d is always in /lib.
 %{_prefix}/lib/sysctl.d/*
 %dir %{_localstatedir}/lib/%{pkgname}
@@ -743,9 +765,11 @@ exit 0
 %{_bindir}/repl-monitor
 %{_mandir}/man1/repl-monitor.1.gz
 %{_bindir}/repl-monitor.pl
+%{_mandir}/man1/repl-monitor.pl.1.gz
 %{_bindir}/cl-dump
 %{_mandir}/man1/cl-dump.1.gz
 %{_bindir}/cl-dump.pl
+%{_mandir}/man1/cl-dump.pl.1.gz
 %{_bindir}/dbgen.pl
 %{_mandir}/man8/bak2db.pl.8.gz
 %{_sbindir}/bak2db.pl

+ 42 - 46
src/lib389/cli/dsconf

@@ -39,56 +39,52 @@ from lib389.cli_base.dsrc import dsrc_to_ldap, dsrc_arg_concat
 
 from lib389.cli_base import reset_get_logger
 
+parser = argparse.ArgumentParser(allow_abbrev=True)
+parser.add_argument('instance',
+        help="The instance name OR the LDAP url to connect to, IE localhost, ldap://mai.example.com:389",
+    )
+parser.add_argument('-v', '--verbose',
+        help="Display verbose operation tracing during command execution",
+        action='store_true', default=False
+    )
+parser.add_argument('-D', '--binddn',
+        help="The account to bind as for executing operations",
+        default=None
+    )
+parser.add_argument('-b', '--basedn',
+        help="Basedn (root naming context) of the instance to manage",
+        default=None
+    )
+parser.add_argument('-Z', '--starttls',
+        help="Connect with StartTLS",
+        default=False, action='store_true'
+    )
+parser.add_argument('-j', '--json',
+        help="Return result in JSON object",
+        default=False, action='store_true'
+    )
+
+subparsers = parser.add_subparsers(help="resources to act upon")
+
+cli_config.create_parser(subparsers)
+cli_backend.create_parser(subparsers)
+cli_directory_manager.create_parsers(subparsers)
+cli_schema.create_parser(subparsers)
+cli_health.create_parser(subparsers)
+cli_plugin.create_parser(subparsers)
+cli_memberof.create_parser(subparsers)
+cli_usn.create_parser(subparsers)
+cli_rootdn_ac.create_parser(subparsers)
+cli_whoami.create_parser(subparsers)
+cli_referint.create_parser(subparsers)
+cli_automember.create_parser(subparsers)
+argcomplete.autocomplete(parser)
+
+
 if __name__ == '__main__':
 
     defbase = ldap.get_option(ldap.OPT_DEFBASE)
-
-    parser = argparse.ArgumentParser(allow_abbrev=True)
-    # Build the base ldap options, this keeps in unified.
-
-    # Can we get default options for these from .rc file?
-
-    parser.add_argument('instance',
-            help="The instance name OR the LDAP url to connect to, IE localhost, ldap://mai.example.com:389",
-        )
-    parser.add_argument('-v', '--verbose',
-            help="Display verbose operation tracing during command execution",
-            action='store_true', default=False
-        )
-    parser.add_argument('-D', '--binddn',
-            help="The account to bind as for executing operations",
-            default=None
-        )
-    parser.add_argument('-b', '--basedn',
-            help="Basedn (root naming context) of the instance to manage",
-            default=None
-        )
-    parser.add_argument('-Z', '--starttls',
-            help="Connect with StartTLS",
-            default=False, action='store_true'
-        )
-    parser.add_argument('-j', '--json',
-            help="Return result in JSON object",
-            default=False, action='store_true'
-        )
-
-    subparsers = parser.add_subparsers(help="resources to act upon")
-
-    cli_config.create_parser(subparsers)
-    cli_backend.create_parser(subparsers)
-    cli_directory_manager.create_parsers(subparsers)
-    cli_schema.create_parser(subparsers)
-    cli_health.create_parser(subparsers)
-    cli_plugin.create_parser(subparsers)
-    cli_memberof.create_parser(subparsers)
-    cli_usn.create_parser(subparsers)
-    cli_rootdn_ac.create_parser(subparsers)
-    cli_whoami.create_parser(subparsers)
-    cli_referint.create_parser(subparsers)
-    cli_automember.create_parser(subparsers)
-    argcomplete.autocomplete(parser)
     args = parser.parse_args()
-
     log = reset_get_logger('dsconf', args.verbose)
 
     log.debug("The 389 Directory Server Configuration Tool")

+ 21 - 25
src/lib389/cli/dscreate

@@ -18,35 +18,31 @@ from lib389 import DirSrv
 from lib389.cli_ctl import instance as cli_instance
 from lib389.cli_base import reset_get_logger
 
-if __name__ == '__main__':
-
-    parser = argparse.ArgumentParser()
-
-    parser.add_argument('-v', '--verbose',
-            help="Display verbose operation tracing during command execution",
-            action='store_true', default=False, dest='verbose'
-        )
-
-    subparsers = parser.add_subparsers(help="action")
-
-    install_parser = subparsers.add_parser('install', help="Create an instance of Directory Server from an inf answer file")
-    install_parser.add_argument('file', help="Inf file to use with prepared answers. You can generate an example of this with 'dscreate create-template'")
-    install_parser.add_argument('-n', '--dryrun', help="Validate system and configurations only. Do not alter the system.",
-                                 action='store_true', default=False)
-    install_parser.add_argument('--IsolemnlyswearthatIamuptonogood', dest="ack",
-                                 help="""You are here likely here by mistake! You want setup-ds.pl!
+parser = argparse.ArgumentParser()
+parser.add_argument('-v', '--verbose',
+        help="Display verbose operation tracing during command execution",
+        action='store_true', default=False, dest='verbose'
+    )
+subparsers = parser.add_subparsers(help="action")
+install_parser = subparsers.add_parser('install', help="Create an instance of Directory Server from an inf answer file")
+install_parser.add_argument('file', help="Inf file to use with prepared answers. You can generate an example of this with 'dscreate create-template'")
+install_parser.add_argument('-n', '--dryrun', help="Validate system and configurations only. Do not alter the system.",
+                             action='store_true', default=False)
+install_parser.add_argument('--IsolemnlyswearthatIamuptonogood', dest="ack",
+                             help="""You are here likely here by mistake! You want setup-ds.pl!
 By setting this value you acknowledge and take responsibility for the fact this command is UNTESTED and NOT READY. You are ON YOUR OWN!
 """,
-                                 action='store_true', default=False)
-    install_parser.add_argument('-c', '--containerised', help="Indicate to the installer that this is running in a container. Used to disable systemd native components, even if they are installed.",
-                                 action='store_true', default=False)
-    install_parser.set_defaults(func=cli_instance.instance_create)
+                             action='store_true', default=False)
+install_parser.add_argument('-c', '--containerised', help="Indicate to the installer that this is running in a container. Used to disable systemd native components, even if they are installed.",
+                             action='store_true', default=False)
+install_parser.set_defaults(func=cli_instance.instance_create)
+template_parser = subparsers.add_parser('create-template', help="Display an example inf answer file, or provide a file name to write it to disk.")
+template_parser.add_argument('template_file', nargs="?", default=None, help="Write example template to this file")
+template_parser.set_defaults(func=cli_instance.instance_example)
+argcomplete.autocomplete(parser)
 
-    template_parser = subparsers.add_parser('create-template', help="Display an example inf answer file, or provide a file name to write it to disk.")
-    template_parser.add_argument('template_file', nargs="?", default=None, help="Write example template to this file")
-    template_parser.set_defaults(func=cli_instance.instance_example)
 
-    argcomplete.autocomplete(parser)
+if __name__ == '__main__':
     args = parser.parse_args()
 
     log = reset_get_logger("dscreate", args.verbose)

+ 18 - 23
src/lib389/cli/dsctl

@@ -23,31 +23,26 @@ from lib389.cli_ctl import instance as cli_instance
 from lib389.cli_ctl import dbtasks as cli_dbtasks
 from lib389.cli_base import disconnect_instance, reset_get_logger
 
-if __name__ == '__main__':
-
-    parser = argparse.ArgumentParser()
-
-    parser.add_argument('-v', '--verbose',
-            help="Display verbose operation tracing during command execution",
-            action='store_true', default=False
-        )
-    parser.add_argument('instance',
-            help="The name of the instance to act upon",
-        )
-    parser.add_argument('-j', '--json',
-            help="Return result in JSON object",
-            default=False, action='store_true'
-        )
-    subparsers = parser.add_subparsers(help="action")
-    argcomplete.autocomplete(parser)
+parser = argparse.ArgumentParser()
+parser.add_argument('-v', '--verbose',
+        help="Display verbose operation tracing during command execution",
+        action='store_true', default=False
+    )
+parser.add_argument('instance',
+        help="The name of the instance to act upon",
+    )
+parser.add_argument('-j', '--json',
+        help="Return result in JSON object",
+        default=False, action='store_true'
+    )
+subparsers = parser.add_subparsers(help="action")
+argcomplete.autocomplete(parser)
+# We stack our needed options in via submodules.
+cli_instance.create_parser(subparsers)
+cli_dbtasks.create_parser(subparsers)
 
-    # We stack our needed options in via submodules.
-
-    cli_instance.create_parser(subparsers)
-    cli_dbtasks.create_parser(subparsers)
-
-    # Then we tell it to execute.
 
+if __name__ == '__main__':
     args = parser.parse_args()
 
     log = reset_get_logger('dsctl', args.verbose)

+ 37 - 38
src/lib389/cli/dsidm

@@ -30,48 +30,47 @@ from lib389.cli_base import connect_instance, disconnect_instance, reset_get_log
 
 from lib389.cli_base.dsrc import dsrc_to_ldap, dsrc_arg_concat
 
+parser = argparse.ArgumentParser(allow_abbrev=True)
+# First, add the LDAP options
+parser.add_argument('instance',
+        help="The instance name OR the LDAP url to connect to, IE localhost, ldap://mai.example.com:389",
+    )
+parser.add_argument('-b', '--basedn',
+        help="Basedn (root naming context) of the instance to manage",
+        default=None
+    )
+parser.add_argument('-v', '--verbose',
+        help="Display verbose operation tracing during command execution",
+        action='store_true', default=False
+    )
+parser.add_argument('-D', '--binddn',
+        help="The account to bind as for executing operations",
+        default=None
+    )
+parser.add_argument('-Z', '--starttls',
+        help="Connect with StartTLS",
+        default=False, action='store_true'
+    )
+parser.add_argument('-j', '--json',
+        help="Return result in JSON object",
+        default=False, action='store_true'
+    )
+subparsers = parser.add_subparsers(help="resources to act upon")
+# Call all the other cli modules to register their bits
+cli_account.create_parser(subparsers)
+cli_group.create_parser(subparsers)
+cli_init.create_parser(subparsers)
+cli_ou.create_parser(subparsers)
+cli_posixgroup.create_parser(subparsers)
+cli_user.create_parser(subparsers)
+argcomplete.autocomplete(parser)
+
+
 if __name__ == '__main__':
 
     defbase = ldap.get_option(ldap.OPT_DEFBASE)
 
-    parser = argparse.ArgumentParser(allow_abbrev=True)
-    # First, add the LDAP options
-
-    parser.add_argument('instance',
-            help="The instance name OR the LDAP url to connect to, IE localhost, ldap://mai.example.com:389",
-        )
-    parser.add_argument('-b', '--basedn',
-            help="Basedn (root naming context) of the instance to manage",
-            default=None
-        )
-    parser.add_argument('-v', '--verbose',
-            help="Display verbose operation tracing during command execution",
-            action='store_true', default=False
-        )
-    parser.add_argument('-D', '--binddn',
-            help="The account to bind as for executing operations",
-            default=None
-        )
-    parser.add_argument('-Z', '--starttls',
-            help="Connect with StartTLS",
-            default=False, action='store_true'
-        )
-    parser.add_argument('-j', '--json',
-            help="Return result in JSON object",
-            default=False, action='store_true'
-        )
-
-    subparsers = parser.add_subparsers(help="resources to act upon")
-
-    # Call all the other cli modules to register their bits
-
-    cli_account.create_parser(subparsers)
-    cli_group.create_parser(subparsers)
-    cli_init.create_parser(subparsers)
-    cli_ou.create_parser(subparsers)
-    cli_posixgroup.create_parser(subparsers)
-    cli_user.create_parser(subparsers)
-    argcomplete.autocomplete(parser)
+
 
     args = parser.parse_args()
 

+ 6 - 6
src/lib389/python-lib389.spec

@@ -12,7 +12,7 @@ Source0: http://www.port389.org/binaries/%{name}-%{tarver}.tar.bz2
 License: GPLv3+
 Group: Development/Libraries
 BuildArch: noarch
-Url: http://port389.org/docs/389ds/FAQ/upstream-test-framework.html
+Url: http://www.port389.org/
 %if 0%{?rhel} >= 8 || 0%{?fedora}
 BuildRequires: python2-devel
 BuildRequires: python2-setuptools
@@ -23,7 +23,7 @@ BuildRequires: python-devel
 BuildRequires: python-setuptools
 %endif
 %description
-This module contains tools and libraries for accessing, testing, 
+This module contains tools and libraries for accessing, testing,
 and configuring the 389 Directory Server.
 
 
@@ -53,10 +53,10 @@ Requires: python-dateutil
 %endif
 %{?python_provide:%python_provide python2-%{srcname}}
 %description -n python2-%{srcname}
-This module contains tools and libraries for accessing, testing, 
+This module contains tools and libraries for accessing, testing,
 and configuring the 389 Directory Server.
 
-# Can't build on EL7! Python3 tooling is too broken :( 
+# Can't build on EL7! Python3 tooling is too broken :(
 # We have to use >= 8, because <= 7 doesn't work ....
 %if 0%{?rhel} >= 8 || 0%{?fedora}
 %package -n python%{python3_pkgversion}-%{srcname}
@@ -74,7 +74,7 @@ Requires: python%{python3_pkgversion}-pyasn1-modules
 Requires: python%{python3_pkgversion}-dateutil
 %{?python_provide:%python_provide python%{python3_pkgversion}-%{srcname}}
 %description -n python%{python3_pkgversion}-%{srcname}
-This module contains tools and libraries for accessing, testing, 
+This module contains tools and libraries for accessing, testing,
 and configuring the 389 Directory Server.
 %endif
 
@@ -230,7 +230,7 @@ and configuring the 389 Directory Server.
 * Mon Dec 7 2015 Mark Reynolds <[email protected]> - 1.0.1-1
 - Removed downloaded dependencies, and added python_provide macro
 - Fixed Source0 URL in spec file
- 
+
 * Fri Dec 4 2015 Mark Reynolds <[email protected]> - 1.0.1-1
 - Renamed package to python-lib389, and simplified the spec file
 

+ 3 - 3
src/lib389/requirements.txt

@@ -3,6 +3,6 @@ pyasn1-modules
 pytest
 python-dateutil
 six
-enum34;python_version=="2.7"
-python-ldap;python_version=="2.7"
-pyldap;python_version>="3.4"
+argcomplete
+argparse-manpage
+python3-ldap

+ 7 - 0
src/lib389/setup.cfg

@@ -0,0 +1,7 @@
+[build_manpages]
+manpages =
+    ../../man/man8/dsconf.8:object=parser:pyfile=cli/dsconf
+    ../../man/man8/dsctl.8:object=parser:pyfile=cli/dsctl
+    ../../man/man8/dsidm.8:object=parser:pyfile=cli/dsidm
+    ../../man/man8/dscreate.8:object=parser:pyfile=cli/dscreate
+

+ 16 - 7
src/lib389/setup.py

@@ -1,7 +1,7 @@
-#!/usr/bin/env python
+#!/usr/bin/python3
 
 # --- BEGIN COPYRIGHT BLOCK ---
-# Copyright (C) 2015 Red Hat, Inc.
+# Copyright (C) 2018 Red Hat, Inc.
 # All rights reserved.
 #
 # License: GPL (version 3 or any later version).
@@ -14,6 +14,9 @@
 
 from setuptools import setup, find_packages
 from os import path
+from build_manpages import build_manpages
+from setuptools.command.build_py import build_py
+from setuptools.command.install import install
 
 here = path.abspath(path.dirname(__file__))
 
@@ -33,7 +36,7 @@ setup(
     description='A library for accessing and configuring the 389 Directory ' +
                 'Server',
     long_description=long_description,
-    url='http://port389.org/wiki/Upstream_test_framework',
+    url='http://www.port389.org/docs/389ds/FAQ/upstream-test-framework.html',
 
     author='Red Hat Inc.',
     author_email='[email protected]',
@@ -58,7 +61,6 @@ setup(
     # find lib389/clitools -name ds\* -exec echo \''{}'\', \;
     data_files=[
         ('/usr/sbin/', [
-            # 'lib389/clitools/ds_setup',
             'cli/dsctl',
             'cli/dsconf',
             'cli/dscreate',
@@ -72,8 +74,15 @@ setup(
         'pytest',
         'python-dateutil',
         'six',
-        'enum34;python_version=="2.7"',
-        'python-ldap;python_version=="2.7"',
-        'pyldap;python_version>="3.4"',
+        'argcomplete',
+        'argparse-manpage',
+        'python3-ldap',
         ],
+
+    cmdclass={
+        # Dynamically build man pages for cli tools
+        'build_manpages': build_manpages.build_manpages,
+        'build_py': build_manpages.get_build_py_cmd(build_py),
+    }
+
 )