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/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
