- Add strlcpy() and strlcat() for system that don't have these
authormichael <michael@82007160-df01-0410-b94d-b575c5fd34c7>
Mon, 22 Dec 2014 14:21:48 +0000 (14:21 +0000)
committermichael <michael@82007160-df01-0410-b94d-b575c5fd34c7>
Mon, 22 Dec 2014 14:21:48 +0000 (14:21 +0000)
git-svn-id: svn://svn.ircd-hybrid.org/svnroot/hopm/trunk@5064 82007160-df01-0410-b94d-b575c5fd34c7

configure
configure.ac
src/compat.c
src/compat.h
src/dnsbl.c
src/irc.c
src/setup.h.in

index 39cbc333cebaaf33751b2a2bb5ccd4a9d6c1cc79..d815b8552e6652800dc9e572c5cdd60832845ad6 100755 (executable)
--- a/configure
+++ b/configure
@@ -13112,7 +13112,7 @@ fi
 fi
 
 
-for ac_func in inet_aton inet_pton socket strdup strstr
+for ac_func in strlcpy strlcat inet_aton inet_pton socket strdup strstr
 do :
   as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
 ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
index b85b635d6dcbe2136bc81386b252d11f6519c739..9aa6a2061cf18decfe1f05298926e21acafe49fc 100644 (file)
@@ -62,7 +62,7 @@ AC_SEARCH_LIBS([socket],[socket],,[AC_MSG_ERROR([socket library not found])])
 AC_CHECK_FUNC(getaddrinfo, [], AC_SEARCH_LIBS(getaddrinfo, nsl))
 AC_CHECK_FUNC(getnameinfo, [], AC_SEARCH_LIBS(getnameinfo, nsl))
 
-AC_CHECK_FUNCS(inet_aton inet_pton socket strdup strstr)
+AC_CHECK_FUNCS(strlcpy strlcat inet_aton inet_pton socket strdup strstr)
 
 dnl Check if we can use gethostbyname2 for ipv6
 AC_CHECK_FUNCS(gethostbyname gethostbyname2)
index 2dac37302707d59cf829b1db208d782cc1d82908..3686f82ecdb4837b530661553ef19bd963adca32 100644 (file)
@@ -62,3 +62,98 @@ int bopm_inet_aton(const char *cp, struct in_addr *inp)
    return 1;
 }
 #endif
+
+/*
+ * strlcat and strlcpy were ripped from openssh 2.5.1p2
+ * They had the following Copyright info:
+ *
+ *
+ * Copyright (c) 1998 Todd C. Miller <Todd.Miller@courtesan.com>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED `AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
+ * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
+ * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL
+ * THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+ * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+ * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef HAVE_STRLCAT
+size_t
+strlcat(char *dst, const char *src, size_t siz)
+{
+  char *d = dst;
+  const char *s = src;
+  size_t n = siz, dlen;
+
+  while (n-- != 0 && *d != '\0')
+    d++;
+
+  dlen = d - dst;
+  n    = siz - dlen;
+
+  if (n == 0)
+    return dlen + strlen(s);
+
+  while (*s != '\0')
+  {
+    if (n != 1)
+    {
+      *d++ = *s;
+      n--;
+    }
+
+    s++;
+  }
+
+  *d = '\0';
+  return dlen + (s - src); /* count does not include NUL */
+}
+#endif
+
+#ifndef HAVE_STRLCPY
+size_t
+strlcpy(char *dst, const char *src, size_t siz)
+{
+  char *d = dst;
+  const char *s = src;
+  size_t n = siz;
+
+  /* Copy as many bytes as will fit */
+  if (n != 0 && --n != 0)
+  {
+    do
+    {
+      if ((*d++ = *s++) == 0)
+        break;
+    } while (--n != 0);
+  }
+
+  /* Not enough room in dst, add NUL and traverse rest of src */
+  if (n == 0)
+  {
+    if (siz != 0)
+      *d = '\0'; /* NUL-terminate dst */
+    while (*s++)
+      ;
+  }
+
+  return s - src - 1; /* count does not include NUL */
+}
+#endif
index 8ce27600898e497a61ea7944b09f667e23978f3c..781b5717e5b2fef8cef7706d3c3ff4218a83eaf6 100644 (file)
@@ -16,4 +16,12 @@ extern int bopm_inet_aton(const char *cp, struct in_addr *inp);
 #define inet_pton bopm_inet_pton
 #endif
 
+#ifndef HAVE_STRLCPY
+extern size_t strlcpy(char *, const char *, size_t);
+#endif
+
+#ifndef HAVE_STRLCAT
+extern size_t strlcat(char *, const char *, size_t);
+#endif
+
 #endif
index 2ab95d191efb4de9826fd73f43ad63a814f6cddd..8a36a0c4172a718703cba88dc04e11e2189b811b 100644 (file)
@@ -136,7 +136,7 @@ static void dnsbl_positive(struct scan_struct *ss, struct BlacklistConf *bl,
          item = p->data;
          if(item->number == type)
          {
-            strncpy(text_type, item->type, sizeof(text_type));
+            strlcpy(text_type, item->type, sizeof(text_type));
             break;
          }
       }
index 293d8c45e1a38c20b120c6ba2cf4da705521c4d2..8fcccad41fdc37ee1da1edda808c5502666c69d6 100644 (file)
--- a/src/irc.c
+++ b/src/irc.c
@@ -309,14 +309,11 @@ static void irc_init(void)
    LIST_FOREACH(node, IRCItem->channels->head)
    {
       chan = (struct ChannelConf *) node->data;
-      strncat(IRC_CHANNELS, chan->name, MSGLENMAX);
+      strlcat(IRC_CHANNELS, chan->name, sizeof(IRC_CHANNELS));
 
       if(node->next)
-         strncat(IRC_CHANNELS, ",", MSGLENMAX);
+         strlcat(IRC_CHANNELS, ",", sizeof(IRC_CHANNELS));
    }
-   IRC_CHANNELS[MSGLENMAX] = '\0';
-
-
 }
 
 
index bfb18bd22d75224e442022ec5ca3183d695e1cce..6b190f1a1f7a9fb018c9ae1442591d233a0f52f8 100644 (file)
 /* Define to 1 if you have the <string.h> header file. */
 #undef HAVE_STRING_H
 
+/* Define to 1 if you have the `strlcat' function. */
+#undef HAVE_STRLCAT
+
+/* Define to 1 if you have the `strlcpy' function. */
+#undef HAVE_STRLCPY
+
 /* Define to 1 if you have the `strstr' function. */
 #undef HAVE_STRSTR