diff --git a/nss/bug17079.c b/nss/bug17079.c
index 4171c7d..09d33f0 100644
--- a/nss/bug17079.c
+++ b/nss/bug17079.c
@@ -23,6 +23,8 @@
 #include <stdlib.h>
 #include <string.h>
 
+#include <support/support.h>
+
 /* Check if two passwd structs contain the same data.  */
 static bool
 equal (const struct passwd *a, const struct passwd *b)
@@ -52,13 +54,13 @@ init_test_items (void)
       if (pwd == NULL)
         break;
       struct passwd *target = test_items + test_count;
-      target->pw_name = strdup (pwd->pw_name);
-      target->pw_passwd = strdup (pwd->pw_passwd);
+      target->pw_name = xstrdup (pwd->pw_name);
+      target->pw_passwd = xstrdup (pwd->pw_passwd);
       target->pw_uid = pwd->pw_uid;
       target->pw_gid = pwd->pw_gid;
-      target->pw_gecos = strdup (pwd->pw_gecos);
-      target->pw_dir = strdup (pwd->pw_dir);
-      target->pw_shell = strdup (pwd->pw_shell);
+      target->pw_gecos = xstrdup (pwd->pw_gecos);
+      target->pw_dir = xstrdup (pwd->pw_dir);
+      target->pw_shell = xstrdup (pwd->pw_shell);
     }
   while (++test_count < MAX_TEST_ITEMS);
   endpwent ();
@@ -108,13 +110,7 @@ static void
 test_one (const struct passwd *item, size_t buffer_size,
            char pad, size_t padding_size)
 {
-  char *buffer = malloc (buffer_size + padding_size);
-  if (buffer == NULL)
-    {
-      puts ("error: malloc failure");
-      errors = true;
-      return;
-    }
+  char *buffer = xmalloc (buffer_size + padding_size);
 
   struct passwd pwd;
   struct passwd *result;
@@ -240,5 +236,4 @@ do_test (void)
     return 0;
 }
 
-#define TEST_FUNCTION do_test ()
-#include "../test-skeleton.c"
+#include <support/test-driver.c>
diff --git a/nss/test-digits-dots.c b/nss/test-digits-dots.c
index 2685161..5b898a9 100644
--- a/nss/test-digits-dots.c
+++ b/nss/test-digits-dots.c
@@ -21,6 +21,8 @@
 #include <netdb.h>
 #include <errno.h>
 
+#include <support/support.h>
+
 static int
 do_test (void)
 {
@@ -34,5 +36,4 @@ do_test (void)
   return err == ERANGE && h_err == NETDB_INTERNAL ? EXIT_SUCCESS : EXIT_FAILURE;
 }
 
-#define TEST_FUNCTION do_test ()
-#include "../test-skeleton.c"
+#include <support/test-driver.c>
diff --git a/nss/test-netdb.c b/nss/test-netdb.c
index 6b34b1a..25f6864 100644
--- a/nss/test-netdb.c
+++ b/nss/test-netdb.c
@@ -40,6 +40,8 @@
 #include <errno.h>
 #include "nss.h"
 
+#include <support/support.h>
+
 /*
   The following define is necessary for glibc 2.0.6
 */
@@ -177,7 +179,7 @@ test_hosts (void)
   while (gethostname (name, namelen) < 0 && errno == ENAMETOOLONG)
     {
       namelen += 2;		/* tiny increments to test a lot */
-      name = realloc (name, namelen);
+      name = xrealloc (name, namelen);
     }
   if (gethostname (name, namelen) == 0)
     {
@@ -336,5 +338,4 @@ do_test (void)
   return (error_count != 0);
 }
 
-#define TEST_FUNCTION do_test ()
-#include "../test-skeleton.c"
+#include <support/test-driver.c>
diff --git a/nss/tst-field.c b/nss/tst-field.c
index d80be68..8950d7c 100644
--- a/nss/tst-field.c
+++ b/nss/tst-field.c
@@ -25,6 +25,8 @@
 #include <stdlib.h>
 #include <string.h>
 
+#include <support/support.h>
+
 static bool errors;
 
 static void
@@ -97,5 +99,4 @@ do_test (void)
   return errors;
 }
 
-#define TEST_FUNCTION do_test ()
-#include "../test-skeleton.c"
+#include <support/test-driver.c>
diff --git a/nss/tst-nss-getpwent.c b/nss/tst-nss-getpwent.c
index 7bd69fc..3d4dbe5 100644
--- a/nss/tst-nss-getpwent.c
+++ b/nss/tst-nss-getpwent.c
@@ -21,6 +21,8 @@
 #include <stdlib.h>
 #include <string.h>
 
+#include <support/support.h>
+
 int
 do_test (void)
 {
@@ -37,22 +39,12 @@ do_test (void)
     {
       if (first_name == NULL)
 	{
-	  first_name = strdup (pw->pw_name);
-	  if (first_name == NULL)
-	    {
-	      printf ("strdup: %m\n");
-	      return 1;
-	    }
+	  first_name = xstrdup (pw->pw_name);
 	  first_uid = pw->pw_uid;
 	}
 
       free (last_name);
-      last_name = strdup (pw->pw_name);
-      if (last_name == NULL)
-	{
-	  printf ("strdup: %m\n");
-	  return 1;
-	}
+      last_name = xstrdup (pw->pw_name);
       last_uid = pw->pw_uid;
       ++count;
     }
@@ -115,5 +107,4 @@ do_test (void)
 }
 
 #define TIMEOUT 300
-#define TEST_FUNCTION do_test ()
-#include "../test-skeleton.c"
+#include <support/test-driver.c>
diff --git a/nss/tst-nss-static.c b/nss/tst-nss-static.c
index 98cf073..f101263 100644
--- a/nss/tst-nss-static.c
+++ b/nss/tst-nss-static.c
@@ -1,7 +1,8 @@
 /* glibc test for static NSS.  */
 #include <stdio.h>
 
-#define TEST_FUNCTION do_test ()
+#include <support/support.h>
+
 static int
 do_test (void)
 {
@@ -12,4 +13,5 @@ do_test (void)
 }
 
 
-#include "../test-skeleton.c"
+#include <support/test-driver.c>
+
diff --git a/nss/tst-nss-test1.c b/nss/tst-nss-test1.c
index ff13272..3b4f085 100644
--- a/nss/tst-nss-test1.c
+++ b/nss/tst-nss-test1.c
@@ -22,6 +22,8 @@
 #include <stdlib.h>
 #include <string.h>
 
+#include <support/support.h>
+
 #include "nss_test.h"
 
 static int hook_called = 0;
@@ -120,5 +122,4 @@ do_test (void)
   return retval;
 }
 
-#define TEST_FUNCTION do_test ()
-#include "../test-skeleton.c"
+#include <support/test-driver.c>
diff --git a/nss/tst-nss-test2.c b/nss/tst-nss-test2.c
index 11c2edf..ac45d58 100644
--- a/nss/tst-nss-test2.c
+++ b/nss/tst-nss-test2.c
@@ -22,6 +22,8 @@
 #include <stdlib.h>
 #include <string.h>
 
+#include <support/support.h>
+
 #include "nss_test.h"
 
 /* The data in these tables is arbitrary, but the merged data based on
@@ -132,5 +134,4 @@ do_test (void)
   return retval;
 }
 
-#define TEST_FUNCTION do_test ()
-#include "../test-skeleton.c"
+#include <support/test-driver.c>
diff --git a/nss/tst-nss-test3.c b/nss/tst-nss-test3.c
index 308708f..5098aae 100644
--- a/nss/tst-nss-test3.c
+++ b/nss/tst-nss-test3.c
@@ -20,7 +20,8 @@
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
-#include <sys/signal.h>
+
+#include <support/support.h>
 
 #include "nss_test.h"
 
@@ -146,5 +147,4 @@ do_test (void)
     }
 }
 
-#define TEST_FUNCTION do_test ()
-#include "../test-skeleton.c"
+#include <support/test-driver.c>
diff --git a/nss/tst-nss-test4.c b/nss/tst-nss-test4.c
index 731e0ed..6e0ac84 100644
--- a/nss/tst-nss-test4.c
+++ b/nss/tst-nss-test4.c
@@ -20,7 +20,8 @@
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
-#include <sys/signal.h>
+
+#include <support/support.h>
 
 #include "nss_test.h"
 
@@ -133,5 +134,4 @@ do_test (void)
     }
 }
 
-#define TEST_FUNCTION do_test ()
-#include "../test-skeleton.c"
+#include <support/test-driver.c>
diff --git a/nss/tst-nss-test5.c b/nss/tst-nss-test5.c
index fef41f0..8f02cb7 100644
--- a/nss/tst-nss-test5.c
+++ b/nss/tst-nss-test5.c
@@ -22,6 +22,8 @@
 #include <stdlib.h>
 #include <string.h>
 
+#include <support/support.h>
+
 #include "nss_test.h"
 
 /* The specific values and names used here are arbitrary, other than
@@ -104,5 +106,4 @@ do_test (void)
     }
 }
 
-#define TEST_FUNCTION do_test ()
-#include "../test-skeleton.c"
+#include <support/test-driver.c>
