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 354aa29a42a7abe203e0224afbd90ca89fdbdde1..ce1e200a66960a2664435cebebb7f2d2490808ba 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 f956e3064d95d553407c2fd8408f9b8a6c56cc75..cf8e33c3f6413b10105a45c987f6142ca0922fbd 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);