blob: 158529dcb5f504392d9b547ea0b5614503fa4a0f (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
|
auth_rimap: provide naive memmem implementation if missing
read_response uses memmem, which is not available on e.g. Solaris 10
Bug: https://github.com/cyrusimap/cyrus-sasl/pull/551
Signed-off-by: Fabian Groffen <grobian@gentoo.org>
--- a/saslauthd/auth_rimap.c
+++ b/saslauthd/auth_rimap.c
@@ -367,6 +367,32 @@
/* END FUNCTION: process_login_reply */
+#ifndef HAVE_MEMMEM
+static void *memmem(
+ const void *big, size_t big_len,
+ const void *little, size_t little_len)
+{
+ const char *bp = (const char *)big;
+ const char *lp = (const char *)little;
+ size_t l;
+
+ if (big_len < little_len || little_len == 0 || big_len == 0)
+ return NULL;
+
+ while (big_len > 0) {
+ for (l = 0; l < little_len; l++) {
+ if (bp[l] != lp[l])
+ break;
+ }
+ if (l == little_len)
+ return (void *)bp;
+ bp++;
+ }
+
+ return NULL;
+}
+#endif
+
static int read_response(int s, char *rbuf, int buflen, const char *tag)
{
int rc = 0;
--- a/configure.ac
+++ b/configure.ac
@@ -1292,7 +1292,7 @@
#AC_FUNC_MEMCMP
#AC_FUNC_VPRINTF
-AC_CHECK_FUNCS(gethostname getdomainname getpwnam getspnam gettimeofday inet_aton memcpy mkdir select socket strchr strdup strerror strspn strstr strtol jrand48 getpassphrase asprintf strlcat strlcpy)
+AC_CHECK_FUNCS(gethostname getdomainname getpwnam getspnam gettimeofday inet_aton memcpy memmem mkdir select socket strchr strdup strerror strspn strstr strtol jrand48 getpassphrase asprintf strlcat strlcpy)
if test $ac_cv_func_getspnam = yes; then
AC_MSG_CHECKING(if getpwnam_r/getspnam_r take 5 arguments)
|