diff -rub cmake-2.8.2_orig/Utilities/cmlibarchive/CMakeLists.txt cmake-2.8.2_patched/Utilities/cmlibarchive/CMakeLists.txt
--- cmake-2.8.2_orig/Utilities/cmlibarchive/CMakeLists.txt	Mon Jun 28 17:16:06 2010
+++ cmake-2.8.2_patched/Utilities/cmlibarchive/CMakeLists.txt	Thu Sep  2 14:29:32 2010
@@ -372,6 +372,10 @@
 CHECK_FUNCTION_EXISTS_GLIBC(ftruncate HAVE_FTRUNCATE)
 CHECK_FUNCTION_EXISTS_GLIBC(futimes HAVE_FUTIMES)
 CHECK_FUNCTION_EXISTS_GLIBC(geteuid HAVE_GETEUID)
+CHECK_FUNCTION_EXISTS_GLIBC(getgrgid_r HAVE_GETGRGID_R)
+CHECK_FUNCTION_EXISTS_GLIBC(getgrnam_r HAVE_GETGRNAM_R)
+CHECK_FUNCTION_EXISTS_GLIBC(getpwnam_r HAVE_GETPWNAM_R)
+CHECK_FUNCTION_EXISTS_GLIBC(getpwuid_r HAVE_GETPWUID_R)
 CHECK_FUNCTION_EXISTS_GLIBC(getpid HAVE_GETPID)
 CHECK_FUNCTION_EXISTS_GLIBC(lchflags HAVE_LCHFLAGS)
 CHECK_FUNCTION_EXISTS_GLIBC(lchmod HAVE_LCHMOD)
diff -rub cmake-2.8.2_orig/Utilities/cmlibarchive/build/cmake/config.h.in cmake-2.8.2_patched/Utilities/cmlibarchive/build/cmake/config.h.in
--- cmake-2.8.2_orig/Utilities/cmlibarchive/build/cmake/config.h.in	Mon Jun 28 17:16:06 2010
+++ cmake-2.8.2_patched/Utilities/cmlibarchive/build/cmake/config.h.in	Fri Sep  3 07:27:48 2010
@@ -181,6 +181,18 @@
 /* Define to 1 if you have the `geteuid' function. */
 #cmakedefine HAVE_GETEUID 1
 
+/* Define to 1 if you have the `getgrgid_r' function. */
+#cmakedefine HAVE_GETGRGID_R 1
+
+/* Define to 1 if you have the `getgrnam_r' function. */
+#cmakedefine HAVE_GETGRNAM_R 1
+
+/* Define to 1 if you have the `getpwnam_r' function. */
+#cmakedefine HAVE_GETPWNAM_R 1
+
+/* Define to 1 if you have the `getpwuid_r' function. */
+#cmakedefine HAVE_GETPWUID_R 1
+
 /* Define to 1 if you have the `getpid' function. */
 #cmakedefine HAVE_GETPID 1
 
diff -rub cmake-2.8.2_orig/Utilities/cmlibarchive/libarchive/archive_read_disk_set_standard_lookup.c cmake-2.8.2_patched/Utilities/cmlibarchive/libarchive/archive_read_disk_set_standard_lookup.c
--- cmake-2.8.2_orig/Utilities/cmlibarchive/libarchive/archive_read_disk_set_standard_lookup.c	Mon Jun 28 17:16:06 2010
+++ cmake-2.8.2_patched/Utilities/cmlibarchive/libarchive/archive_read_disk_set_standard_lookup.c	Thu Sep  2 12:51:08 2010
@@ -186,6 +186,7 @@
             &lookup_uname_helper, (id_t)uid));
 }
 
+#if HAVE_GETPWUID_R
 static const char *
 lookup_uname_helper(struct name_cache *cache, id_t id)
 {
@@ -226,7 +227,21 @@
 
     return strdup(result->pw_name);
 }
+#else
+static const char *
+lookup_uname_helper(struct name_cache *cache, id_t id)
+{
+    struct passwd   *result;
 
+    result = getpwuid((uid_t)id);
+
+    if (result == NULL)
+        return (NULL);
+
+    return strdup(result->pw_name);
+}
+#endif
+
 static const char *
 lookup_gname(void *data, gid_t gid)
 {
@@ -235,6 +250,7 @@
             &lookup_gname_helper, (id_t)gid));
 }
 
+#if HAVE_GETGRGID_R
 static const char *
 lookup_gname_helper(struct name_cache *cache, id_t id)
 {
@@ -273,4 +289,19 @@
 
     return strdup(result->gr_name);
 }
+#else
+static const char *
+lookup_gname_helper(struct name_cache *cache, id_t id)
+{
+    struct group    *result;
+
+    result = getgrgid((gid_t)id);
+
+    if (result == NULL)
+        return (NULL);
+
+    return strdup(result->gr_name);
+}
+#endif
+
 #endif /* ! (_WIN32 && !__CYGWIN__) */
diff -rub cmake-2.8.2_orig/Utilities/cmlibarchive/libarchive/archive_write_disk_set_standard_lookup.c cmake-2.8.2_patched/Utilities/cmlibarchive/libarchive/archive_write_disk_set_standard_lookup.c
--- cmake-2.8.2_orig/Utilities/cmlibarchive/libarchive/archive_write_disk_set_standard_lookup.c	Mon Jun 28 17:16:06 2010
+++ cmake-2.8.2_patched/Utilities/cmlibarchive/libarchive/archive_write_disk_set_standard_lookup.c	Thu Sep  2 14:38:47 2010
@@ -121,6 +121,7 @@
     /* Note: If strdup fails, that's okay; we just won't cache. */
     b->hash = h;
 #if HAVE_GRP_H
+#  if HAVE_GETGRNAM_R
     {
         char _buffer[128];
         size_t bufsize = 128;
@@ -129,7 +130,7 @@
         int r;
 
         for (;;) {
-            result = &grent; /* Old getgrnam_r ignores last argument.  */
+            result = &grent; /* Old getgrnam_r ignores last arg. */
             r = getgrnam_r(gname, &grent, buffer, bufsize, &result);
             if (r == 0)
                 break;
@@ -147,6 +148,15 @@
         if (buffer != _buffer)
             free(buffer);
     }
+#  else /* HAVE_GETGRNAM_R */
+    {
+        struct group *result;
+
+        result = getgrnam(gname);
+        if (result != NULL)
+            gid = result->gr_gid;
+    }
+#  endif /* HAVE_GETGRNAM_R */
 #elif defined(_WIN32) && !defined(__CYGWIN__)
     /* TODO: do a gname->gid lookup for Windows. */
 #else
@@ -181,6 +191,7 @@
     /* Note: If strdup fails, that's okay; we just won't cache. */
     b->hash = h;
 #if HAVE_PWD_H
+#  if HAVE_GETPWNAM_R
     {
         char _buffer[128];
         size_t bufsize = 128;
@@ -189,7 +200,7 @@
         int r;
 
         for (;;) {
-            result = &pwent; /* Old getpwnam_r ignores last argument.  */
+            result = &pwent; /* Old getpwnam_r ignores last arg. */
             r = getpwnam_r(uname, &pwent, buffer, bufsize, &result);
             if (r == 0)
                 break;
@@ -207,6 +218,15 @@
         if (buffer != _buffer)
             free(buffer);
     }
+#  else /* HAVE_GETPWNAM_R */
+    {
+        struct passwd *result;
+
+        result = getpwnam(uname);
+        if (result != NULL)
+            uid = result->pw_uid;
+    }
+#endif  /* HAVE_GETPWNAM_R */
 #elif defined(_WIN32) && !defined(__CYGWIN__)
     /* TODO: do a uname->uid lookup for Windows. */
 #else
