Fix line-endings (CRLF -> LF).
Don't use dangerous defaults for security parameters.

Any hidden defaults for security-related parameters are dangerous. For
example, user many have AUTH_CROWD_STAFF_GROUP not specified and think
it means that feature is not used. Whereas if Crowd is randomly having
random group whose name matches "default", the app will have security
hole.

Also, having defaults for parameters which are expected to be site-local
is false courtesy to the user: if not set, then instead of getting clear
exceptions of non-set config settings, user will get much more confusing
errors from network stack/crowd.
Support syncing user groups from Crowd (AUTH_CROWD_ALWAYS_UPDATE_GROUPS).

If AUTH_CROWD_ALWAYS_UPDATE_GROUPS is true, create Django groups based
on Crowd groups, and make sure that user is assigned to same group set
as Crowd.
Query nested groups from Crowd, not just top-level.

This might use config setting, but actually there's perfect sense
to just use nested groups, period. Consider for example that you make
group for site editors. Now your entire department is added to that
group. You expect that you can edit site in this case, right?
Not only set, but also reset staff/superuser flags. Also, don't mix them.
Get rid of CrowdSettings aux class.

It's a chore to maintain it separately when config options change/
new added. Instead, use Django settings module directly.