<!--

Licensed 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.

-->
<form action="" method="post">
  <h2>Login</h2>
  <fieldset>
    <p class="help">
      Login to CouchDB with your name and password.
    </p>
    <table summary=""><tbody><tr>
      <th><label>Username:</label></th>
      <td><input type="text" name="name" size="24"></td>
    </tr><tr>
      <th><label>Password:</label></th>
      <td><input type="password" name="password" size="24"></td>
    </tr>
    </tbody></table>
  </fieldset>
  <div class="buttons">
    <button type="submit">Login</button>
    <button type="button" class="cancel">Cancel</button>
  </div>
</form>
