Index: trunk/src/sh_entropy.c
===================================================================
--- trunk/src/sh_entropy.c	(revision 318)
+++ trunk/src/sh_entropy.c	(revision 319)
@@ -520,5 +520,20 @@
   char   arg1[80];
 
+#if defined(HAVE_PTHREAD) && defined (_POSIX_THREAD_SAFE_FUNCTIONS) && defined(HAVE_GETPWNAM_R)
+  struct passwd    pwd;
+  char           * buffer;
+  struct passwd *  tempres;
+#else
+  struct passwd * tempres;
+#endif
+
   SL_ENTER(_("sh_popen"));
+
+#if defined(HAVE_PTHREAD) && defined (_POSIX_THREAD_SAFE_FUNCTIONS) && defined(HAVE_GETPWNAM_R)
+  buffer = SH_ALLOC(SH_PWBUF_SIZE);
+  sh_getpwnam_r(DEFAULT_IDENT, &pwd, buffer, SH_PWBUF_SIZE, &tempres);
+#else
+  tempres = sh_getpwnam(DEFAULT_IDENT);
+#endif
 
   strncpy (arg0, _("/bin/sh"), sizeof(arg0));
@@ -596,12 +611,4 @@
       if (0 == geteuid()) 
 	{
-#if defined(HAVE_PTHREAD) && defined (_POSIX_THREAD_SAFE_FUNCTIONS) && defined(HAVE_GETPWNAM_R)
-	  struct passwd    pwd;
-	  char           * buffer = SH_ALLOC(SH_PWBUF_SIZE);
-	  struct passwd *  tempres;
-	  sh_getpwnam_r(DEFAULT_IDENT, &pwd, buffer, SH_PWBUF_SIZE, &tempres);
-#else
-	  struct passwd * tempres = sh_getpwnam(DEFAULT_IDENT);
-#endif
   
 	  if (NULL != tempres) {
@@ -619,7 +626,4 @@
 	    i = -1;
 	  }
-#if defined(HAVE_PTHREAD) && defined (_POSIX_THREAD_SAFE_FUNCTIONS) && defined(HAVE_GETPWNAM_R)
-	  SH_FREE(buffer);
-#endif
 	}
       
@@ -644,24 +648,28 @@
     }
 
-    /* parent
-     */
-    if (envp[0] != NULL) 
-      free(envp[0]);
-
-    sl_close_fd (FIL__, __LINE__, pipedes[STDOUT_FILENO]);
-    retry_fcntl (FIL__, __LINE__, pipedes[STDIN_FILENO], F_SETFD, FD_CLOEXEC);
-
-    outf = fdopen (pipedes[STDIN_FILENO], "r");
-
-    if (outf == NULL) 
-      {
-        aud_kill (FIL__, __LINE__, source->pid, SIGKILL);
-	sl_close_fd (FIL__, __LINE__, pipedes[STDOUT_FILENO]);
-        waitpid (source->pid, NULL, 0);
-        source->pid = 0;
-	SL_RETURN(NULL, _("sh_popen"));
-      }
-
-    SL_RETURN(outf, _("sh_popen"));
+  /* parent
+   */
+#if defined(HAVE_PTHREAD) && defined (_POSIX_THREAD_SAFE_FUNCTIONS) && defined(HAVE_GETPWNAM_R)
+  SH_FREE(buffer);
+#endif
+
+  if (envp[0] != NULL) 
+    free(envp[0]);
+  
+  sl_close_fd (FIL__, __LINE__, pipedes[STDOUT_FILENO]);
+  retry_fcntl (FIL__, __LINE__, pipedes[STDIN_FILENO], F_SETFD, FD_CLOEXEC);
+  
+  outf = fdopen (pipedes[STDIN_FILENO], "r");
+  
+  if (outf == NULL) 
+    {
+      aud_kill (FIL__, __LINE__, source->pid, SIGKILL);
+      sl_close_fd (FIL__, __LINE__, pipedes[STDOUT_FILENO]);
+      waitpid (source->pid, NULL, 0);
+      source->pid = 0;
+      SL_RETURN(NULL, _("sh_popen"));
+    }
+  
+  SL_RETURN(outf, _("sh_popen"));
 }
 
