nginx-0.1.32-RELEASE import

    *) Bugfix: the arguments were omitted in the redirects, issued by the
       "rewrite" directive; the bug had appeared in 0.1.29.

    *) Feature: the "if" directive supports the captures in regular
       expressions.

    *) Feature: the "set" directive supports the variables and the captures
       of regular expressions.

    *) Feature: the "X-Accel-Redirect" response header line is supported in
       proxy and FastCGI mode.
diff --git a/auto/cc/acc b/auto/cc/acc
new file mode 100644
index 0000000..f325bc5
--- /dev/null
+++ b/auto/cc/acc
@@ -0,0 +1,14 @@
+
+# Copyright (C) Igor Sysoev
+
+
+# aCC: HP ANSI C++ B3910B A.03.55.02
+
+# C89 mode
+
+CFLAGS="$CFLAGS -Ae"
+CC_TEST_FLAGS="-Ae"
+
+PCRE_OPT="$PCRE_OPT -Ae"
+ZLIB_OPT="$ZLIB_OPT -Ae"
+MD5_OPT="$MD5_OPT -Ae"
diff --git a/auto/cc/ccc b/auto/cc/ccc
new file mode 100644
index 0000000..968015f
--- /dev/null
+++ b/auto/cc/ccc
@@ -0,0 +1,41 @@
+
+# Copyright (C) Igor Sysoev
+
+
+# Compaq C V6.5-207
+
+ngx_include_opt="-I"
+
+# warnings
+
+CFLAGS="$CFLAGS -msg_enable level6 -msg_fatal level6"
+
+CFLAGS="$CFLAGS -msg_disable unnecincl"
+CFLAGS="$CFLAGS -msg_disable nestincl"
+CFLAGS="$CFLAGS -msg_disable unusedincl"
+CFLAGS="$CFLAGS -msg_disable unknownmacro"
+CFLAGS="$CFLAGS -msg_disable strctpadding"
+CFLAGS="$CFLAGS -msg_disable ansialiascast"
+CFLAGS="$CFLAGS -msg_disable inlinestoclsmod"
+CFLAGS="$CFLAGS -msg_disable cxxkeyword"
+CFLAGS="$CFLAGS -msg_disable longlongsufx"
+
+# STUB
+CFLAGS="$CFLAGS -msg_disable truncintcast"
+CFLAGS="$CFLAGS -msg_disable trunclongcast"
+CFLAGS="$CFLAGS -msg_disable truncintasn"
+CFLAGS="$CFLAGS -msg_disable trunclongint"
+CFLAGS="$CFLAGS -msg_disable intconcastsgn"
+CFLAGS="$CFLAGS -msg_disable intconstsign"
+CFLAGS="$CFLAGS -msg_disable hexoctunsign"
+CFLAGS="$CFLAGS -msg_disable switchlong"
+CFLAGS="$CFLAGS -msg_disable valuepres"
+CFLAGS="$CFLAGS -msg_disable subscrbounds2"
+CFLAGS="$CFLAGS -msg_disable ignorecallval"
+CFLAGS="$CFLAGS -msg_disable nonstandcast"
+CFLAGS="$CFLAGS -msg_disable embedcomment"
+CFLAGS="$CFLAGS -msg_disable unreachcode"
+CFLAGS="$CFLAGS -msg_disable questcompare2"
+CFLAGS="$CFLAGS -msg_disable unusedtop"
+CFLAGS="$CFLAGS -msg_disable unrefdecl"
+CFLAGS="$CFLAGS -msg_disable bitnotint"
diff --git a/auto/cc/conf b/auto/cc/conf
index f064bca..b2eabeb 100644
--- a/auto/cc/conf
+++ b/auto/cc/conf
@@ -42,30 +42,30 @@
 
     case $NGX_CC_NAME in
         gcc)
-            # gcc 2.7.2.3, 2.8.1, 2.95.4,
-            #     3.0.4, 3.1.1, 3.2.3, 3.3.2, 3.3.3, 3.3.4, 3.4
+            # gcc 2.7.2.3, 2.8.1, 2.95.4, egcs-1.1.2
+            #     3.0.4, 3.1.1, 3.2.3, 3.3.2, 3.3.3, 3.3.4, 3.4.0, 3.4.2
+            #     4.0.0
 
             . auto/cc/gcc
         ;;
 
         icc)
-            # Intel C++ compiler 7.1, 8.0
+            # Intel C++ compiler 7.1, 8.0, 8.1
 
             . auto/cc/icc
         ;;
 
         ccc)
-#            # Compaq C V6.5-207
-#
-#            . auto/cc/ccc
-             ngx_include_opt="-I"
+            # Compaq C V6.5-207
+
+            . auto/cc/ccc
         ;;
 
-#        acc)
-#            # aCC: HP ANSI C++ B3910B A.03.55.02
-#
-#            . auto/cc/acc
-#        ;;
+        acc)
+            # aCC: HP ANSI C++ B3910B A.03.55.02
+
+            . auto/cc/acc
+        ;;
 
         msvc*)
             # MSVC++ 6.0 SP2, MSVC++ Toolkit 2003
@@ -87,7 +87,7 @@
 
     esac
 
-    CC_TEST_FLAGS=$NGX_CC_OPT
+    CC_TEST_FLAGS="$CC_TEST_FLAGS $NGX_CC_OPT"
 
 fi
 
@@ -124,16 +124,20 @@
     . auto/feature
 
 
-    ngx_feature="C99 variadic macros"
-    ngx_feature_name="NGX_HAVE_C99_VARIADIC_MACROS"
-    ngx_feature_run=yes
-    ngx_feature_incs="#include <stdio.h>
-#define var(dummy, ...) sprintf(__VA_ARGS__)"
-    ngx_feature_libs=
-    ngx_feature_test="char  buf[30]; buf[0] = '0';
-                      var(0, buf, \"%d\", 1);
-                      if (buf[0] != '1') return 1"
-    . auto/feature
+    if [ $NGX_CC_NAME = 'ccc' ]; then
+        echo "checking for C99 variadic macros ... disabled"
+    else
+        ngx_feature="C99 variadic macros"
+        ngx_feature_name="NGX_HAVE_C99_VARIADIC_MACROS"
+        ngx_feature_run=yes
+        ngx_feature_incs="#include <stdio.h>
+#define var(dummy, ...)  sprintf(__VA_ARGS__)"
+        ngx_feature_libs=
+        ngx_feature_test="char  buf[30]; buf[0] = '0';
+                          var(0, buf, \"%d\", 1);
+                          if (buf[0] != '1') return 1"
+        . auto/feature
+     fi
 
 
 #    ngx_feature="inline"
diff --git a/auto/configure b/auto/configure
index d046b59..f54ef24 100755
--- a/auto/configure
+++ b/auto/configure
@@ -27,6 +27,7 @@
 . auto/os/conf
 
 if [ "$NGX_PLATFORM" != win32 ]; then
+    . auto/os/features
     . auto/threads
 fi
 
diff --git a/auto/os/conf b/auto/os/conf
index f2a49ce..226f8dd 100644
--- a/auto/os/conf
+++ b/auto/os/conf
@@ -23,15 +23,6 @@
         . auto/os/freebsd
     ;;
 
-    Darwin:*)
-        have=NGX_DARWIN . auto/have_headers
-        have=NGX_HAVE_INHERITED_NONBLOCK . auto/have
-        CORE_INCS="$UNIX_INCS"
-        CORE_DEPS="$UNIX_DEPS $POSIX_DEPS"
-        CORE_SRCS="$UNIX_SRCS"
-        CRYPT_LIB=
-    ;;
-
     Linux:*)
         . auto/os/linux
     ;;
@@ -44,11 +35,35 @@
         . auto/os/win32
     ;;
 
+    Darwin:*)
+        have=NGX_DARWIN . auto/have_headers
+        have=NGX_HAVE_INHERITED_NONBLOCK . auto/have
+        CORE_INCS="$UNIX_INCS"
+        CORE_DEPS="$UNIX_DEPS $POSIX_DEPS"
+        CORE_SRCS="$UNIX_SRCS"
+    ;;
+
+    HP-UX:*)
+        # HP/UX
+        have=NGX_HPUX . auto/have_headers
+        CORE_INCS="$UNIX_INCS"
+        CORE_DEPS="$UNIX_DEPS $POSIX_DEPS"
+        CORE_SRCS="$UNIX_SRCS"
+        CC_AUX_FLAGS="$CC_AUX_FLAGS -D_XOPEN_SOURCE -D_XOPEN_SOURCE_EXTENDED=1"
+    ;;
+
+    OSF1:*)
+        # HP Tru64
+        have=NGX_TRU64 . auto/have_headers
+        CORE_INCS="$UNIX_INCS"
+        CORE_DEPS="$UNIX_DEPS $POSIX_DEPS"
+        CORE_SRCS="$UNIX_SRCS"
+    ;;
+
     *)
         CORE_INCS="$UNIX_INCS"
         CORE_DEPS="$UNIX_DEPS $POSIX_DEPS"
         CORE_SRCS="$UNIX_SRCS"
-        CRYPT_LIB="-lcrypt"
     ;;
 
 esac
@@ -56,119 +71,8 @@
 
 case "$NGX_MACHINE" in
 
-    i386|i686|i86pc|amd64)
+    i386 | i686 | i86pc | amd64)
         have=NGX_HAVE_NONALIGNED . auto/have
     ;;
 
 esac
-
-
-if [ "$NGX_PLATFORM" != win32 ]; then
-
-    NGX_USER=${NGX_USER:-nobody}
-
-    if [ -z "$NGX_GROUP" -a $NGX_USER = nobody ] ; then
-       if grep nobody /etc/group 2>&1 >/dev/null; then
-           echo "checking for nobody group ... found"
-           NGX_GROUP=nobody
-       else
-           echo "checking for nobody group ... not found"
-
-           if grep nogroup /etc/group 2>&1 >/dev/null; then
-               echo "checking for nogroup group ... found"
-               NGX_GROUP=nogroup
-           else 
-               echo "checking for nogroup group ... not found"
-               NGX_GROUP=nobody
-           fi
-       fi
-
-    else
-        NGX_GROUP=$NGX_USER
-    fi
-
-
-    ngx_feature="poll()"
-    ngx_feature_name=
-    ngx_feature_run=no
-    ngx_feature_incs="#include <poll.h>"
-    ngx_feature_libs=
-    ngx_feature_test="int  n, dp; struct pollfd  pl;
-                      dp = 0;
-                      pl.fd = 0;
-                      pl.events = 0;
-                      pl.revents = 0;
-                      n = poll(&pl, 1, 0)"
-    . auto/feature
-
-    if [ $ngx_found = no ]; then
-        EVENT_POLL=NONE
-    fi
-
-
-    ngx_feature="/dev/poll"
-    ngx_feature_name="NGX_HAVE_DEVPOLL"
-    ngx_feature_run=no
-    ngx_feature_incs="#include <sys/devpoll.h>"
-    ngx_feature_libs=
-    ngx_feature_test="int  n, dp; struct dvpoll  dvp;
-                      dp = 0;
-                      dvp.dp_fds = NULL;
-                      dvp.dp_nfds = 0;
-                      dvp.dp_timeout = 0;
-                      n = ioctl(dp, DP_POLL, &dvp)"
-    . auto/feature
-
-    if [ $ngx_found = yes ]; then
-        CORE_SRCS="$CORE_SRCS $DEVPOLL_SRCS"
-        EVENT_MODULES="$EVENT_MODULES $DEVPOLL_MODULE"
-        EVENT_FOUND=YES
-    fi
-
-
-    if test -z "$NGX_KQUEUE_CHECKED"; then
-        ngx_feature="kqueue"
-        ngx_feature_name="NGX_HAVE_KQUEUE"
-        ngx_feature_run=no
-        ngx_feature_incs="#include <sys/event.h>"
-        ngx_feature_libs=
-        ngx_feature_test="int kq; kq = kqueue()"
-        . auto/feature
-
-        if [ $ngx_found = yes ]; then
-
-            have=NGX_HAVE_CLEAR_EVENT . auto/have
-            EVENT_MODULES="$EVENT_MODULES $KQUEUE_MODULE"
-            CORE_SRCS="$CORE_SRCS $KQUEUE_SRCS"
-            EVENT_FOUND=YES
-
-            ngx_feature="kqueue's NOTE_LOWAT"
-            ngx_feature_name="NGX_HAVE_LOWAT_EVENT"
-            ngx_feature_run=no
-            ngx_feature_incs="#include <sys/event.h>"
-            ngx_feature_libs=
-            ngx_feature_test="struct kevent  kev;
-                              kev.fflags = NOTE_LOWAT;"
-            . auto/feature
-        fi
-    fi
-
-    if [ "$NGX_SYSTEM" = "NetBSD" ]; then
-
-        # NetBSD 2.0 incompatibly defines kevent.udata as "intptr_t"
-
-        cat << END >> $NGX_AUTO_CONFIG_H
-
-#define NGX_KQUEUE_UDATA_T
-
-END
-
-    else
-        cat << END >> $NGX_AUTO_CONFIG_H
-
-#define NGX_KQUEUE_UDATA_T  (void *)
-
-END
-
-    fi
-fi
diff --git a/auto/os/features b/auto/os/features
new file mode 100644
index 0000000..44c33cd
--- /dev/null
+++ b/auto/os/features
@@ -0,0 +1,131 @@
+
+# Copyright (C) Igor Sysoev
+
+
+NGX_USER=${NGX_USER:-nobody}
+
+if [ -z "$NGX_GROUP" -a $NGX_USER = nobody ] ; then
+    if grep nobody /etc/group 2>&1 >/dev/null; then
+        echo "checking for nobody group ... found"
+        NGX_GROUP=nobody
+    else
+        echo "checking for nobody group ... not found"
+
+        if grep nogroup /etc/group 2>&1 >/dev/null; then
+            echo "checking for nogroup group ... found"
+            NGX_GROUP=nogroup
+        else 
+            echo "checking for nogroup group ... not found"
+            NGX_GROUP=nobody
+        fi
+    fi
+
+else
+    NGX_GROUP=$NGX_USER
+fi
+    
+
+ngx_feature="poll()"
+ngx_feature_name=
+ngx_feature_run=no
+ngx_feature_incs="#include <poll.h>"
+ngx_feature_libs=
+ngx_feature_test="int  n, dp; struct pollfd  pl;
+                  dp = 0; 
+                  pl.fd = 0;
+                  pl.events = 0;
+                  pl.revents = 0;
+                  n = poll(&pl, 1, 0)"
+. auto/feature
+    
+if [ $ngx_found = no ]; then
+    EVENT_POLL=NONE
+fi
+    
+
+ngx_feature="/dev/poll"
+ngx_feature_name="NGX_HAVE_DEVPOLL"
+ngx_feature_run=no
+ngx_feature_incs="#include <sys/devpoll.h>"
+ngx_feature_libs=
+ngx_feature_test="int  n, dp; struct dvpoll  dvp;
+                  dp = 0;
+                  dvp.dp_fds = NULL;
+                  dvp.dp_nfds = 0;
+                  dvp.dp_timeout = 0;
+                  n = ioctl(dp, DP_POLL, &dvp)"
+. auto/feature
+
+if [ $ngx_found = yes ]; then
+    CORE_SRCS="$CORE_SRCS $DEVPOLL_SRCS"
+    EVENT_MODULES="$EVENT_MODULES $DEVPOLL_MODULE"
+    EVENT_FOUND=YES
+fi
+
+
+if test -z "$NGX_KQUEUE_CHECKED"; then
+    ngx_feature="kqueue"
+    ngx_feature_name="NGX_HAVE_KQUEUE"
+    ngx_feature_run=no
+    ngx_feature_incs="#include <sys/event.h>"
+    ngx_feature_libs=
+    ngx_feature_test="int kq; kq = kqueue()"
+    . auto/feature
+
+    if [ $ngx_found = yes ]; then
+
+        have=NGX_HAVE_CLEAR_EVENT . auto/have
+        EVENT_MODULES="$EVENT_MODULES $KQUEUE_MODULE"
+        CORE_SRCS="$CORE_SRCS $KQUEUE_SRCS"
+        EVENT_FOUND=YES
+
+        ngx_feature="kqueue's NOTE_LOWAT"
+        ngx_feature_name="NGX_HAVE_LOWAT_EVENT"
+        ngx_feature_run=no
+        ngx_feature_incs="#include <sys/event.h>"
+        ngx_feature_libs=
+        ngx_feature_test="struct kevent  kev;
+                          kev.fflags = NOTE_LOWAT;"
+        . auto/feature
+    fi
+fi
+
+if [ "$NGX_SYSTEM" = "NetBSD" ]; then
+
+    # NetBSD 2.0 incompatibly defines kevent.udata as "intptr_t"
+
+    cat << END >> $NGX_AUTO_CONFIG_H
+
+#define NGX_KQUEUE_UDATA_T
+
+END
+
+else
+    cat << END >> $NGX_AUTO_CONFIG_H
+
+#define NGX_KQUEUE_UDATA_T  (void *)
+
+END
+
+fi
+
+
+ngx_feature="crypt()"
+ngx_feature_name=
+ngx_feature_run=no
+ngx_feature_incs=
+ngx_feature_libs=
+ngx_feature_test="crypt(\"test\", \"salt\");"
+. auto/feature
+
+
+if [ $ngx_found = no ]; then
+
+    ngx_feature="crypt() in libcrypt"
+    ngx_feature_libs=-lcrypt
+    . auto/feature
+
+    if [ $ngx_found = yes ]; then
+        CRYPT_LIB="-lcrypt"
+    fi
+fi
diff --git a/auto/os/freebsd b/auto/os/freebsd
index f916860..e545122 100644
--- a/auto/os/freebsd
+++ b/auto/os/freebsd
@@ -7,7 +7,6 @@
 CORE_INCS="$UNIX_INCS"
 CORE_DEPS="$UNIX_DEPS $FREEBSD_DEPS"
 CORE_SRCS="$UNIX_SRCS $FREEBSD_SRCS"
-CRYPT_LIB="-lcrypt"
 
 ngx_spacer='
 '
diff --git a/auto/os/linux b/auto/os/linux
index 5926211..32ef4cb 100644
--- a/auto/os/linux
+++ b/auto/os/linux
@@ -7,7 +7,6 @@
 CORE_INCS="$UNIX_INCS"
 CORE_DEPS="$UNIX_DEPS $LINUX_DEPS"
 CORE_SRCS="$UNIX_SRCS $LINUX_SRCS"
-CRYPT_LIB="-lcrypt"
 
 ngx_spacer='
 '
diff --git a/auto/unix b/auto/unix
index e9e0c7a..6295ec2 100755
--- a/auto/unix
+++ b/auto/unix
@@ -32,7 +32,7 @@
 . auto/types/sizeof
 ngx_param=NGX_SIG_ATOMIC_T_SIZE; ngx_value=$ngx_size; . auto/types/value
 
-ngx_type="socklen_t"; ngx_types="uint32_t"; . auto/types/typedef
+ngx_type="socklen_t"; ngx_types="int"; . auto/types/typedef
 
 ngx_type="in_addr_t"; ngx_types="uint32_t"; . auto/types/typedef