Remove 1024 byte limit.Remove 1024 byte limit.
[kopensolaris-gnu/glibc.git] / nis / nis_subr.c
index 780c27f..3283e4c 100644 (file)
@@ -20,7 +20,6 @@
 #include <errno.h>
 #include <string.h>
 #include <rpcsvc/nis.h>
-#include <rpcsvc/nislib.h>
 
 nis_name
 nis_leaf_of (const_nis_name name)
@@ -116,8 +115,7 @@ nis_getnames (const_nis_name name)
   nis_name *getnames = NULL;
   char local_domain[NIS_MAXNAMELEN + 1];
   char *path, *cp;
-  int count, pos;
-
+  int count, pos, have_point;
 
   strncpy (local_domain, nis_local_directory (), NIS_MAXNAMELEN);
   local_domain[NIS_MAXNAMELEN] = '\0';
@@ -146,6 +144,8 @@ nis_getnames (const_nis_name name)
   else
     path = strdupa (path);
 
+  have_point = (strchr (name, '.') != NULL);
+
   pos = 0;
 
   cp = strtok (path, ":");
@@ -156,7 +156,7 @@ nis_getnames (const_nis_name name)
          char *cptr = local_domain;
          char *tmp;
 
-         while (count_dots (cptr) >= 2)
+         while ((have_point && *cptr != '\0') || (count_dots (cptr) >= 2))
            {
              if (pos >= count)
                {
@@ -171,13 +171,18 @@ nis_getnames (const_nis_name name)
              getnames[pos] = tmp;
              tmp = stpcpy (tmp, name);
              *tmp++ = '.';
-             stpcpy (tmp, cptr);
+             if (cptr[1] != '\0')
+               stpcpy (tmp, cptr);
+             else
+               ++cptr;
 
              ++pos;
 
-             while (*cptr != '.')
+             while (*cptr != '.' && *cptr != '\0')
+               ++cptr;
+             if (cptr[0] != '\0' && cptr[1] != '\0')
+               /* If we have only ".", don't remove the "." */
                ++cptr;
-             ++cptr;
            }
        }
       else
@@ -186,31 +191,35 @@ nis_getnames (const_nis_name name)
 
          if (cp[strlen (cp) - 1] == '$')
            {
+             char *p;
+
              tmp = malloc (strlen (cp) + strlen (local_domain) +
                            strlen (name) + 2);
              if (tmp == NULL)
                return NULL;
 
-             tmp = stpcpy (tmp, name);
-             *tmp++ = '.';
-             tmp = stpcpy (tmp, cp);
-             --tmp;
-             if (tmp[-1] != '.')
-               *tmp++ = '.';
-             stpcpy (tmp, local_domain);
+             p = stpcpy (tmp, name);
+             *p++ = '.';
+             p = stpcpy (p, cp);
+             --p;
+             if (p[-1] != '.')
+               *p++ = '.';
+             stpcpy (p, local_domain);
            }
          else
            {
+             char *p;
+
              tmp = malloc (strlen (cp) + strlen (name) + 2);
              if (tmp == NULL)
                return NULL;
 
-             tmp = stpcpy (tmp, name);
-             *tmp++ = '.';
-             stpcpy (tmp, cp);
+             p = stpcpy (tmp, name);
+             *p++ = '.';
+             stpcpy (p, cp);
            }
 
-         if (pos > count)
+         if (pos >= count)
            {
              count += 5;
              getnames = realloc (getnames, (count + 1) * sizeof (char *));