Index: trunk/src/sh_unix.c
===================================================================
--- trunk/src/sh_unix.c	(revision 460)
+++ trunk/src/sh_unix.c	(revision 462)
@@ -1012,4 +1012,5 @@
   struct group     grp;
   char           * buffer;
+  static size_t    gbufsize = SH_GRBUF_SIZE;       
 #endif
 
@@ -1035,10 +1036,24 @@
 
 #if defined(HAVE_PTHREAD) && defined (_POSIX_THREAD_SAFE_FUNCTIONS) && defined(HAVE_GETPWNAM_R)
-      buffer = SH_ALLOC(SH_GRBUF_SIZE);
-      status = sh_getgrnam_r(g, &grp, buffer, SH_GRBUF_SIZE, &w);
+
+      buffer = SH_ALLOC(gbufsize);
+      status = sh_getgrnam_r(g, &grp, buffer, gbufsize, &w);
+
+      if ((status == ERANGE) && (w == NULL)) 
+	{
+	  if (SL_TRUE ==  sl_ok_adds( gbufsize, SH_GRBUF_SIZE ))
+	    {
+	      SH_FREE(buffer);
+	      gbufsize += SH_GRBUF_SIZE;
+	      goto is_a_name;
+	    }
+	}
+
 #else
+
       errno = 0;
       w = sh_getgrnam(g);
       status = errno;
+
 #endif
 
