<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE manualpage SYSTEM "../style/manualpage.dtd">
<?xml-stylesheet type="text/xsl" href="../style/manual.en.xsl"?>
<!-- $LastChangedRevision$ -->

<!--
 Licensed to the Apache Software Foundation (ASF) under one or more
 contributor license agreements.  See the NOTICE file distributed with
 this work for additional information regarding copyright ownership.
 The ASF licenses this file to You under the Apache License, Version 2.0
 (the "License"); you may not use this file except in compliance with
 the License.  You may obtain a copy of the License at

     http://www.apache.org/licenses/LICENSE-2.0

 Unless required by applicable law or agreed to in writing, software
 distributed under the License is distributed on an "AS IS" BASIS,
 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 See the License for the specific language governing permissions and
 limitations under the License.
-->

<manualpage metafile="htdbm.xml.meta">
<parentdocument href="./">Programs</parentdocument>

<title>htdbm - Manipulate DBM password databases</title>

<summary>
    <p><code>htdbm</code> is used to manipulate the DBM format files used to
    store usernames and password for basic authentication of HTTP users via
    <module>mod_authn_dbm</module>.  See the <program>dbmmanage</program>
    documentation for more information about these DBM files.</p>
</summary>
<seealso><program>httpd</program></seealso>
<seealso><program>dbmmanage</program></seealso>
<seealso><module>mod_authn_dbm</module></seealso>

<section id="synopsis"><title>Synopsis</title>
    <p><code><strong>htdbm</strong>
    [ -<strong>T</strong><var>DBTYPE</var> ]
    [ -<strong>i</strong> ]
    [ -<strong>c</strong> ]
    [ -<strong>m</strong> |
      -<strong>B</strong> |
      -<strong>d</strong> |
      -<strong>s</strong> |
      -<strong>p</strong> ]
    [ -<strong>C</strong> <var>cost</var> ]
    [ -<strong>t</strong> ]
    [ -<strong>v</strong> ]
    <var>filename</var> <var>username</var></code></p>

    <p><code><strong>htdbm</strong> -<strong>b</strong>
    [ -<strong>T</strong><var>DBTYPE</var> ]
    [ -<strong>c</strong> ]
    [ -<strong>m</strong> |
      -<strong>B</strong> |
      -<strong>d</strong> |
      -<strong>s</strong> |
      -<strong>p</strong> ]
    [ -<strong>C</strong> <var>cost</var> ]
    [ -<strong>t</strong> ]
    [ -<strong>v</strong> ]
    <var>filename</var> <var>username</var> <var>password</var></code></p>

    <p><code><strong>htdbm</strong> -<strong>n</strong>
    [ -<strong>i</strong> ]
    [ -<strong>c</strong> ]
    [ -<strong>m</strong> |
      -<strong>B</strong> |
      -<strong>d</strong> |
      -<strong>s</strong> |
      -<strong>p</strong> ]
    [ -<strong>C</strong> <var>cost</var> ]
    [ -<strong>t</strong> ]
    [ -<strong>v</strong> ]
    <var>username</var></code></p>

    <p><code><strong>htdbm</strong> -<strong>nb</strong>
    [ -<strong>c</strong> ]
    [ -<strong>m</strong> |
      -<strong>B</strong> |
      -<strong>d</strong> |
      -<strong>s</strong> |
      -<strong>p</strong> ]
    [ -<strong>C</strong> <var>cost</var> ]
    [ -<strong>t</strong> ]
    [ -<strong>v</strong> ]
    <var>username</var> <var>password</var></code></p>

    <p><code><strong>htdbm</strong> -<strong>v</strong>
    [ -<strong>T</strong><var>DBTYPE</var> ]
    [ -<strong>i</strong> ]
    [ -<strong>c</strong> ]
    [ -<strong>m</strong> |
      -<strong>B</strong> |
      -<strong>d</strong> |
      -<strong>s</strong> |
      -<strong>p</strong> ]
    [ -<strong>C</strong> <var>cost</var> ]
    [ -<strong>t</strong> ]
    [ -<strong>v</strong> ]
    <var>filename</var> <var>username</var></code></p>

    <p><code><strong>htdbm</strong> -<strong>vb</strong>
    [ -<strong>T</strong><var>DBTYPE</var> ]
    [ -<strong>c</strong> ]
    [ -<strong>m</strong> |
      -<strong>B</strong> |
      -<strong>d</strong> |
      -<strong>s</strong> |
      -<strong>p</strong> ]
    [ -<strong>C</strong> <var>cost</var> ]
    [ -<strong>t</strong> ]
    [ -<strong>v</strong> ]
    <var>filename</var> <var>username</var> <var>password</var></code></p>

    <p><code><strong>htdbm</strong> -<strong>x</strong>
    [ -<strong>T</strong><var>DBTYPE</var> ]
    <var>filename</var> <var>username</var></code></p>

    <p><code><strong>htdbm</strong> -<strong>l</strong>
    [ -<strong>T</strong><var>DBTYPE</var> ]
    <var>filename</var></code></p>
</section>

<section id="options"><title>Options</title>
    <dl>
    <dt><code>-b</code></dt>
    <dd>Use batch mode; <em>i.e.</em>, get the password from the command line
    rather than prompting for it. This option should be used with extreme care,
    since <strong>the password is clearly visible</strong> on the command
    line. For script use see the <code>-i</code> option.</dd>

    <dt><code>-i</code></dt>
    <dd>Read the password from stdin without verification (for script usage).</dd>

    <dt><code>-c</code></dt>
    <dd>Create the <var>passwdfile</var>. If <var>passwdfile</var> already
    exists, it is rewritten and truncated. This option cannot be combined with
    the <code>-n</code> option.</dd>

    <dt><code>-n</code></dt>
    <dd>Display the results on standard output rather than updating a
    database.  This option changes the syntax of the command line, since the
    <var>passwdfile</var> argument (usually the first one) is omitted. It
    cannot be combined with the <code>-c</code> option.</dd>

    <dt><code>-m</code></dt>
    <dd>Use MD5 encryption for passwords. On Windows and Netware, this is
    the default.</dd>

    <dt><code>-B</code></dt>
    <dd>Use bcrypt encryption for passwords. This is currently considered to
    be very secure.</dd>

    <dt><code>-C</code></dt>
    <dd>This flag is only allowed in combination with <code>-B</code> (bcrypt
    encryption). It sets the computing time used for the bcrypt algorithm
    (higher is more secure but slower, default: 5, valid: 4 to 31).</dd>

    <dt><code>-d</code></dt>
    <dd>Use <code>crypt()</code> encryption for passwords. The default on all
    platforms but Windows and Netware. Though possibly supported by
    <code>htdbm</code> on all platforms, it is not supported by the
    <program>httpd</program> server on Windows and Netware.
    This algorithm is <strong>insecure</strong> by today's standards.</dd>

    <dt><code>-s</code></dt>
    <dd>Use SHA encryption for passwords. Facilitates migration from/to Netscape
    servers using the LDAP Directory Interchange Format (ldif).
    This algorithm is <strong>insecure</strong> by today's standards.</dd>

    <dt><code>-p</code></dt>
    <dd>Use plaintext passwords. Though <code>htdbm</code> will support
    creation on all platforms, the <program>httpd</program> daemon will
    only accept plain text passwords on Windows and Netware.</dd>

    <dt><code>-l</code></dt>
    <dd>Print each of the usernames and comments from the database on
    stdout.</dd>

    <dt><code>-v</code></dt>
    <dd>Verify the username and password.  The program will print a message
    indicating whether the supplied password is valid.  If the password is
    invalid, the program exits with error code 3.</dd>

    <dt><code>-x</code></dt>
    <dd>Delete user. If the username exists in the specified DBM file, it
    will be deleted.</dd>

    <dt><code>-t</code></dt>
    <dd>Interpret the final parameter as a comment.  When this option is
    specified, an additional string can be appended to the command line; this
    string will be stored in the "Comment" field of the database, associated
    with the specified username.</dd>

    <dt><code><var>filename</var></code></dt>
    <dd>The filename of the DBM format file. Usually without the extension
    <code>.db</code>, <code>.pag</code>, or <code>.dir</code>.  If
    <code>-c</code> is given, the DBM file is created if it does not already
    exist, or updated if it does exist.</dd>

    <dt><code><var>username</var></code></dt>
    <dd>The username to create or update in <var>passwdfile</var>. If
    <var>username</var> does not exist in this file, an entry is added. If it
    does exist, the password is changed.</dd>

    <dt><code><var>password</var></code></dt>
    <dd>The plaintext password to be encrypted and stored in the DBM file.
    Used only with the <code>-b</code> flag.</dd>

    <dt><code>-T<var>DBTYPE</var></code></dt>
    <dd>Type of DBM file (SDBM, GDBM, DB, or "default").</dd>
    </dl>
</section>

<section id="bugs"><title>Bugs</title>
    <p>One should be aware that there are a number of different DBM file
    formats in existence, and with all likelihood, libraries for more than
    one format may exist on your system. The three primary examples are
    SDBM, NDBM, GNU GDBM, and Berkeley/Sleepycat DB 2/3/4. Unfortunately,
    all these libraries use different file formats, and you must make sure
    that the file format used by <var>filename</var> is the same format that
    <code>htdbm</code> expects to see. <code>htdbm</code> currently has
    no way of determining what type of DBM file it is looking at. If used
    against the wrong format, will simply return nothing, or may create a
    different DBM file with a different name, or at worst, it may corrupt
    the DBM file if you were attempting to write to it.</p>

    <p>One can usually use the <code>file</code> program supplied with most
    Unix systems to see what format a DBM file is in.</p>
</section>

<section id="exit"><title>Exit Status</title>
    <p><code>htdbm</code> returns a zero status ("true") if the username and
    password have been successfully added or updated in the DBM File.
    <code>htdbm</code> returns <code>1</code> if it encounters some problem
    accessing files, <code>2</code> if there was a syntax problem with the
    command line, <code>3</code> if the password was entered interactively and
    the verification entry didn't match, <code>4</code> if its operation was
    interrupted, <code>5</code> if a value is too long (username, filename,
    password, or final computed record), <code>6</code> if the username
    contains illegal characters (see the <a href="#restrictions">Restrictions
    section</a>), and <code>7</code> if the file is not a valid DBM password
    file.</p>
</section>

<section id="examples"><title>Examples</title>
    <example>
      htdbm /usr/local/etc/apache/.htdbm-users jsmith
    </example>

    <p>Adds or modifies the password for user <code>jsmith</code>. The user
    is prompted for the password. If executed on a Windows system, the password
    will be encrypted using the  modified Apache MD5 algorithm; otherwise, the
    system's <code>crypt()</code> routine will be used. If the file does not
    exist, <code>htdbm</code> will do nothing except return an error.</p>

    <example>
      htdbm -c /home/doe/public_html/.htdbm jane
    </example>

    <p>Creates a new file and stores a record in it for user <code>jane</code>.
    The user is prompted for the password. If the file exists and cannot be
    read, or cannot be written, it is not altered and <code>htdbm</code>
    will display a message and return an error status.</p>

    <example>
      htdbm -mb /usr/web/.htdbm-all jones Pwd4Steve
    </example>

    <p>Encrypts the password from the command line (<code>Pwd4Steve</code>)
    using the MD5 algorithm, and stores it in the specified file.</p>

    <p>To convert an existing text file <code>htpasswd</code>-generated
    password file to a <code>dbm</code> file, use <code>awk</code> to
    feed each line of that file into <code>htdbm</code>:</p>

    <example>
      htdbm -cbp passwords.dbm bogus bogus
      awk ‘BEGIN { FS=”:” }; {system (“htdbm -bp passwords.dbm ” $1 ” ” $2)}’ passwords
      htdbm -x bogus
    </example>

    <p>The first line creates a new password database with a temporary
    placeholder entry, and the thrid line removes that placeholder.</p>

</section>

<section id="security"><title>Security Considerations</title>
    <p>Web password files such as those managed by <code>htdbm</code> should
    <em>not</em> be within the Web server's URI space -- that is, they should
    not be fetchable with a browser.</p>

    <p>The use of the <code>-b</code> option is discouraged, since when it is
    used the unencrypted password appears on the command line.</p>

    <p>When using the <code>crypt()</code> algorithm, note that only the first
    8 characters of the password are used  to form the password. If the supplied
    password is longer, the extra characters will be silently discarded.</p>

    <p>The SHA encryption format does not use salting: for a given password,
    there is only one encrypted representation. The <code>crypt()</code> and
    MD5 formats permute the representation by prepending a random salt string,
    to make dictionary attacks against the passwords more difficult.</p>

    <p>The SHA and <code>crypt()</code> formats are insecure by today's
    standards.</p>
</section>

<section id="restrictions"><title>Restrictions</title>
    <p>On the Windows platform, passwords encrypted with
    <code>htdbm</code> are limited to no more than <code>255</code>
    characters in length. Longer passwords will be truncated to 255
    characters.</p>

    <p>The MD5 algorithm used by <code>htdbm</code> is specific to the Apache
    software; passwords encrypted using it will not be usable with other Web
    servers.</p>

    <p>Usernames are limited to <code>255</code> bytes and may not include the
    character <code>:</code>.</p>
</section>

</manualpage>
