Index: accounts/forms.py
===================================================================
--- accounts/forms.py	(revision 1137)
+++ accounts/forms.py	(working copy)
@@ -1,4 +1,6 @@
+from django.conf import settings
 from django import newforms as forms
+from django.newforms import widgets
 from django.utils.translation import ugettext as _
 
 from reviewboard.reviews.models import Group
@@ -8,12 +10,21 @@
     redirect_to = forms.CharField(required=False, widget=forms.HiddenInput)
     groups = forms.MultipleChoiceField(widget=forms.CheckboxSelectMultiple,
                                        required=False)
+    syntax_highlighting = forms.BooleanField(required=False,
+        label=_("Enable syntax highlighting in the diff viewer"))
     first_name = forms.CharField(required=False)
     last_name = forms.CharField(required=False)
-    syntax_highlighting = forms.BooleanField(required=False,
-        label=_("Enable syntax highlighting in the diff viewer"))
+    email = forms.EmailField(required=settings.BUILTIN_AUTH)
+    password1 = forms.CharField(required=False, widget=widgets.PasswordInput())
+    password2 = forms.CharField(required=False, widget=widgets.PasswordInput())
 
     def __init__(self, *args, **kwargs):
         forms.Form.__init__(self, *args, **kwargs)
         self.fields['groups'].choices = \
             [(g.id, g.display_name) for g in Group.objects.all()]
+    def clean_password2(self):
+        p1 = self.cleaned_data['password1']
+        p2 = self.cleaned_data['password2']
+        if p1 != p2:
+            raise forms.ValidationError('passwords do not match')
+        return p2
Index: accounts/views.py
===================================================================
--- accounts/views.py	(revision 1137)
+++ accounts/views.py	(working copy)
@@ -1,5 +1,8 @@
+import time
+from sha import sha
 from django.conf import settings
 from django.contrib.auth import REDIRECT_FIELD_NAME
+from django.contrib.auth.models import get_hexdigest
 from django.http import HttpResponseRedirect
 from django.shortcuts import render_to_response
 from django.template.context import RequestContext
@@ -22,11 +25,19 @@
         form = PreferencesForm(request.POST)
 
         if form.is_valid():
-            request.user.group_set = form.cleaned_data['groups']
-            request.user.first_name = form.cleaned_data['first_name']
-            request.user.last_name = form.cleaned_data['last_name']
-            request.user.save()
+            if settings.BUILTIN_AUTH:
+                if form.cleaned_data['password1']:
+                    salt = sha(str(time.time())).hexdigest()[:5]
+                    hash = sha(salt + form.cleaned_data['password1'])
+                    newpassword = 'sha1$%s$%s' % (salt, hash.hexdigest())
+                    request.user.password = newpassword
 
+                request.user.group_set = form.cleaned_data['groups']
+                request.user.first_name = form.cleaned_data['first_name']
+                request.user.last_name = form.cleaned_data['last_name']
+                request.user.email = form.cleaned_data['email']
+                request.user.save()
+
             profile.first_time_setup_done = True
             profile.syntax_highlighting = \
                 form.cleaned_data['syntax_highlighting']
@@ -36,9 +47,11 @@
 
     else:
         form = PreferencesForm({
+            'settings': settings,
             'redirect_to': redirect_to,
             'first_name': request.user.first_name,
             'last_name': request.user.last_name,
+            'email': request.user.email,
             'syntax_highlighting': profile.syntax_highlighting,
             'groups': [g.id for g in request.user.group_set.all()],
         })
Index: templates/accounts/prefs.html
===================================================================
--- templates/accounts/prefs.html	(revision 1137)
+++ templates/accounts/prefs.html	(working copy)
@@ -23,6 +23,7 @@
  <h1 class="title">{% trans "User Preferences" %}</h1>
  <div class="main">
   <table>
+   {% if settings.BUILTIN_AUTH %}
    <tr>
     <td><label for="id_first_name">{% trans "First Name:" %}</label></td>
     <td>{{form.first_name}}</td>
@@ -31,6 +32,19 @@
     <td><label for="id_last_name">Last Name:</label></td>
     <td>{{form.last_name}}</td>
    </tr>
+   <tr>
+    <td><label for="id_email">Email:</label></td>
+    <td>{{form.email}} {{form.errors.email}}</td>
+   </tr>
+   <tr>
+    <td><label for="id_password">Change Password:</label></td>
+    <td>{{form.password1}}</td>
+   </tr>
+   <tr>
+    <td><label for="id_password2">Verify New Password:</label></td>
+    <td>{{form.password2}} {{form.errors.password2}}</td>
+   </tr>
+   {% endif %}
 {% if settings.DIFF_SYNTAX_HIGHLIGHTING %}
    <tr>
     <td></td>
