Return -1/EINVAL when the buffer is too small.
authorBruno Haible <bruno@clisp.org>
Thu, 25 Sep 2003 10:48:39 +0000 (10:48 +0000)
committerBruno Haible <bruno@clisp.org>
Thu, 25 Sep 2003 10:48:39 +0000 (10:48 +0000)
lib/getdomainname.c
lib/getdomainname.h

index 354aa29..ce1e200 100644 (file)
@@ -25,6 +25,7 @@
 #include "getdomainname.h"
 
 #include <string.h>
+#include <errno.h>
 
 /* Return the NIS domain name of the machine.
    WARNING! The NIS domain name is unrelated to the fully qualified host name
 
    Put up to LEN bytes of the NIS domain name into NAME.
    Null terminate it if the name is shorter than LEN.
+   If the NIS domain name is longer than LEN, set errno = EINVAL and return -1.
    Return 0 if successful, otherwise set errno and return -1.  */
 int
 getdomainname (char *name, size_t len)
 {
-  strncpy (name, "", len);     /* Hardcode your domain name if you want.  */
+  const char *result = "";     /* Hardcode your domain name if you want.  */
+  size_t result_len = strlen (result);
+
+  if (result_len > len)
+    {
+      errno = EINVAL;
+      return -1;
+    }
+  memcpy (name, result, result_len);
+  if (result_len < len)
+    name[result_len] = '\0';
   return 0;
 }
index f956e30..cf8e33c 100644 (file)
@@ -34,6 +34,7 @@
 
    Put up to LEN bytes of the NIS domain name into NAME.
    Null terminate it if the name is shorter than LEN.
+   If the NIS domain name is longer than LEN, set errno = EINVAL and return -1.
    Return 0 if successful, otherwise set errno and return -1.  */
 extern int getdomainname(char *name, size_t len);