Index: django/contrib/admin/options.py
===================================================================
--- django/contrib/admin/options.py	(revision 9820)
+++ django/contrib/admin/options.py	(working copy)
@@ -3,8 +3,8 @@
 from django.forms.models import modelform_factory, inlineformset_factory
 from django.forms.models import BaseInlineFormSet
 from django.contrib.contenttypes.models import ContentType
-from django.contrib.admin import widgets
-from django.contrib.admin import helpers
+from django.contrib.admin import widgets, helpers
+from django.contrib.admin.context import AdminContext
 from django.contrib.admin.util import unquote, flatten_fieldsets, get_deleted_objects
 from django.core.exceptions import PermissionDenied
 from django.db import models, transaction
@@ -442,7 +442,7 @@
             "admin/%s/%s/change_form.html" % (app_label, opts.object_name.lower()),
             "admin/%s/change_form.html" % app_label,
             "admin/change_form.html"
-        ], context, context_instance=template.RequestContext(request))
+        ], context, context_instance=AdminContext(request))
     
     def response_add(self, request, obj, post_url_continue='../%s/'):
         """
@@ -688,7 +688,7 @@
             'admin/%s/%s/change_list.html' % (app_label, opts.object_name.lower()),
             'admin/%s/change_list.html' % app_label,
             'admin/change_list.html'
-        ], context, context_instance=template.RequestContext(request))
+        ], context, context_instance=AdminContext(request))
     
     def delete_view(self, request, object_id, extra_context=None):
         "The 'delete' admin view for this model."
@@ -743,7 +743,7 @@
             "admin/%s/%s/delete_confirmation.html" % (app_label, opts.object_name.lower()),
             "admin/%s/delete_confirmation.html" % app_label,
             "admin/delete_confirmation.html"
-        ], context, context_instance=template.RequestContext(request))
+        ], context, context_instance=AdminContext(request))
     
     def history_view(self, request, object_id, extra_context=None):
         "The 'history' admin view for this model."
@@ -770,7 +770,7 @@
             "admin/%s/%s/object_history.html" % (app_label, opts.object_name.lower()),
             "admin/%s/object_history.html" % app_label,
             "admin/object_history.html"
-        ], context, context_instance=template.RequestContext(request))
+        ], context, context_instance=AdminContext(request))
 
     #
     # DEPRECATED methods.
Index: django/contrib/admin/context.py
===================================================================
--- django/contrib/admin/context.py	(revision 0)
+++ django/contrib/admin/context.py	(revision 0)
@@ -0,0 +1,17 @@
+from django import template
+from django.conf import settings
+
+class AdminContext(template.RequestContext):
+    """RequestContext subclass that adds a few context variables
+    useful for admin.
+
+    The variables are 'user', 'messages' and 'perms' (internally, it
+    uses the auth context processor if it's not already in the settings).
+    """
+    
+    def __init__(self, request, dict=None, processors=None):
+        template.RequestContext.__init__(self, request, dict, processors)
+
+        if 'django.core.context_processors.auth' not in settings.TEMPLATE_CONTEXT_PROCESSORS:
+            from django.core import context_processors
+            self.update(context_processors.auth(request))
Index: django/contrib/admin/views/template.py
===================================================================
--- django/contrib/admin/views/template.py	(revision 9820)
+++ django/contrib/admin/views/template.py	(working copy)
@@ -1,4 +1,5 @@
 from django import template, forms
+from django.contrib.admin.context import AdminContext
 from django.contrib.admin.views.decorators import staff_member_required
 from django.template import loader
 from django.shortcuts import render_to_response
@@ -28,7 +29,7 @@
     return render_to_response('admin/template_validator.html', {
         'title': 'Template validator',
         'form': form,
-    }, context_instance=template.RequestContext(request))
+    }, context_instance=AdminContext(request))
 template_validator = staff_member_required(template_validator)
 
 
Index: django/contrib/admin/sites.py
===================================================================
--- django/contrib/admin/sites.py	(revision 9820)
+++ django/contrib/admin/sites.py	(working copy)
@@ -1,6 +1,7 @@
 import re
 from django import http, template
 from django.contrib.admin import ModelAdmin
+from django.contrib.admin.context import AdminContext
 from django.contrib.auth import authenticate, login
 from django.db.models.base import ModelBase
 from django.core.exceptions import ImproperlyConfigured
@@ -120,8 +121,6 @@
             raise ImproperlyConfigured("Put 'django.contrib.admin' in your INSTALLED_APPS setting in order to use the admin application.")
         if not ContentType._meta.installed:
             raise ImproperlyConfigured("Put 'django.contrib.contenttypes' in your INSTALLED_APPS setting in order to use the admin application.")
-        if 'django.core.context_processors.auth' not in settings.TEMPLATE_CONTEXT_PROCESSORS:
-            raise ImproperlyConfigured("Put 'django.core.context_processors.auth' in your TEMPLATE_CONTEXT_PROCESSORS setting in order to use the admin application.")
         
     def admin_view(self, view):
         """
@@ -331,7 +330,7 @@
         }
         context.update(extra_context or {})
         return render_to_response(self.index_template or 'admin/index.html', context,
-            context_instance=template.RequestContext(request)
+            context_instance=AdminContext(request)
         )
     index = never_cache(index)
     
@@ -345,7 +344,7 @@
         }
         context.update(extra_context or {})
         return render_to_response(self.login_template or 'admin/login.html', context,
-            context_instance=template.RequestContext(request)
+            context_instance=AdminContext(request)
         )
     
     def app_index(self, request, app_label, extra_context=None):
@@ -391,7 +390,7 @@
         }
         context.update(extra_context or {})
         return render_to_response(self.app_index_template or 'admin/app_index.html', context,
-            context_instance=template.RequestContext(request)
+            context_instance=AdminContext(request)
         )
         
     def root(self, request, url):
