<?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="htpasswd.xml.meta">
<parentdocument href="./">Programs</parentdocument>

<title>htpasswd - Manage user files for basic authentication</title>

<summary>
    <p><code>htpasswd</code> is used to create and update the flat-files used to
    store usernames and password for basic authentication of HTTP users. If
    <code>htpasswd</code> cannot access a file, such as not being able to write
    to the output file or not being able to read the file in order to update it,
    it returns an error status and makes no changes.</p>

    <p>Resources available from the Apache HTTP server can be restricted to
    just the users listed in the files created by <code>htpasswd</code>. This
    program can only manage usernames and passwords stored in a flat-file. It
    can encrypt and display password information for use in other types of data
    stores, though. To use a DBM database see <program>dbmmanage</program>.</p>

    <p><code>htpasswd</code> encrypts passwords using either a version of MD5
    modified for Apache, or the system's <code>crypt()</code> routine. Files
    managed by <code>htpasswd</code> may contain both types of passwords; some
    user records may have MD5-encrypted passwords while others in the same file
    may have passwords encrypted with <code>crypt()</code>.</p>

    <p>This manual page only lists the command line arguments. For details of
    the directives necessary to configure user authentication in
    <program>httpd</program> see the Apache manual, which is part of the
    Apache distribution or can be found at <a href="http://httpd.apache.org"
    >http://httpd.apache.org/</a>.</p>
</summary>
<seealso><program>httpd</program></seealso>
<seealso>The scripts in support/SHA1 which come with the
distribution.</seealso>

<section id="synopsis"><title>Synopsis</title>
    <p><code><strong>htpasswd</strong>
    [ -<strong>c</strong> ]
    [ -<strong>m</strong> ]
    [ -<strong>D</strong> ] <var>passwdfile</var> <var>username</var></code></p>

    <p><code><strong>htpasswd</strong> -<strong>b</strong>
    [ -<strong>c</strong> ]
    [ -<strong>m</strong> |
      -<strong>d</strong> |
      -<strong>p</strong> |
      -<strong>s</strong> ] 
    [ -<strong>D</strong> ]  <var>passwdfile</var> <var>username</var>
    <var>password</var></code></p>

    <p><code><strong>htpasswd</strong> -<strong>n</strong>
    [ -<strong>m</strong> |
      -<strong>d</strong> |
      -<strong>s</strong> |
      -<strong>p</strong> ] <var>username</var></code></p>

    <p><code><strong>htpasswd</strong> -<strong>nb</strong>
    [ -<strong>m</strong> |
      -<strong>d</strong> |
      -<strong>s</strong> |
      -<strong>p</strong> ] <var>username</var> <var>password</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.</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 file.
    This is useful for generating password records acceptable to Apache for
    inclusion in non-text data stores. 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, Netware and TPF, this is
    the default.</dd>

    <dt><code>-d</code></dt>
    <dd>Use <code>crypt()</code> encryption for passwords. The default on all
    platforms but Windows, Netware and TPF. Though possibly supported by
    <code>htpasswd</code> on all platforms, it is not supported by the
    <program>httpd</program> server on Windows, Netware and TPF.</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).</dd>

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

    <dt><code>-D</code></dt>
    <dd>Delete user. If the username exists in the specified htpasswd file, it
    will be deleted.</dd>
    
    <dt><code><var>passwdfile</var></code></dt>
    <dd>Name of the file to contain the user name and password. If
    <code>-c</code> is given, this file is created if it does not already exist,
    or rewritten and truncated 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 file. Only
    used with the <code>-b</code> flag.</dd>
    </dl>
</section>

<section id="exit"><title>Exit Status</title>
    <p><code>htpasswd</code> returns a zero status ("true") if the username and
    password have been successfully added or updated in the
    <var>passwdfile</var>. <code>htpasswd</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 password file.</p>
</section>

<section id="examples"><title>Examples</title>
    <example>
      htpasswd /usr/local/etc/apache/.htpasswd-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>htpasswd</code> will do nothing except return an error.</p>

    <example>
      htpasswd -c /home/doe/public_html/.htpasswd 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>htpasswd</code>
    will display a message and return an error status.</p>

    <example>
      htpasswd -mb /usr/web/.htpasswd-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>
</section>

<section id="security"><title>Security Considerations</title>
    <p>Web password files such as those managed by <code>htpasswd</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>
</section>

<section id="restrictions"><title>Restrictions</title>
    <p>On the Windows and MPE platforms, passwords encrypted with
    <code>htpasswd</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>htpasswd</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>
