diff -ruN squid-2.6.STABLE17/ChangeLog squid-2.6.STABLE18/ChangeLog
--- squid-2.6.STABLE17/ChangeLog 2007-11-26 14:36:10.000000000 +0100
+++ squid-2.6.STABLE18/ChangeLog 2008-01-10 13:30:57.000000000 +0100
@@ -1,3 +1,13 @@
+Changes to squid-2.6.STABLE18 (10 Jan 2008)
+
+ - Fix 2 assertion failures related to the fix for SQUID-2007:2
+ - GPL license cleanup to GPLv2 or later. One file in edir_digest_auth
+ was GPLv2 only, now replaced with a GPLv2 or later licensed vesion.
+ - Minor cleanups to make certain 64-bit platforms happier
+ - Several Digest authentication bugs fixed wich was causing random
+ authenitcation popups or failures.
+ - --with-valgrind-debug updated for valgrind-3.3.0.
+
Changes to squid-2.6.STABLE17 (26 Nov 2007)
- Fix compile error with old GCC 2.x or other ANSI-C compilers before
diff -ruN squid-2.6.STABLE17/configure squid-2.6.STABLE18/configure
--- squid-2.6.STABLE17/configure 2007-11-26 14:39:31.000000000 +0100
+++ squid-2.6.STABLE18/configure 2008-01-10 13:34:23.000000000 +0100
@@ -1,7 +1,7 @@
#! /bin/sh
-# From configure.in Revision: 1.416.2.22 .
+# From configure.in Revision: 1.416.2.24 .
# Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.61 for Squid Web Proxy 2.6.STABLE17.
+# Generated by GNU Autoconf 2.61 for Squid Web Proxy 2.6.STABLE18.
#
# Report bugs to .
#
@@ -575,8 +575,8 @@
# Identity of this package.
PACKAGE_NAME='Squid Web Proxy'
PACKAGE_TARNAME='squid'
-PACKAGE_VERSION='2.6.STABLE17'
-PACKAGE_STRING='Squid Web Proxy 2.6.STABLE17'
+PACKAGE_VERSION='2.6.STABLE18'
+PACKAGE_STRING='Squid Web Proxy 2.6.STABLE18'
PACKAGE_BUGREPORT='http://www.squid-cache.org/bugs/'
ac_default_prefix=/usr/local/squid
@@ -1314,7 +1314,7 @@
# Omit some internal or obsolete options to make the list less imposing.
# This message is too long to be a string in the A/UX 3.1 sh.
cat <<_ACEOF
-\`configure' configures Squid Web Proxy 2.6.STABLE17 to adapt to many kinds of systems.
+\`configure' configures Squid Web Proxy 2.6.STABLE18 to adapt to many kinds of systems.
Usage: $0 [OPTION]... [VAR=VALUE]...
@@ -1384,7 +1384,7 @@
if test -n "$ac_init_help"; then
case $ac_init_help in
- short | recursive ) echo "Configuration of Squid Web Proxy 2.6.STABLE17:";;
+ short | recursive ) echo "Configuration of Squid Web Proxy 2.6.STABLE18:";;
esac
cat <<\_ACEOF
@@ -1662,7 +1662,7 @@
test -n "$ac_init_help" && exit $ac_status
if $ac_init_version; then
cat <<\_ACEOF
-Squid Web Proxy configure 2.6.STABLE17
+Squid Web Proxy configure 2.6.STABLE18
generated by GNU Autoconf 2.61
Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
@@ -1676,7 +1676,7 @@
This file contains any messages produced by compilers while
running configure, to aid debugging if configure makes a mistake.
-It was created by Squid Web Proxy $as_me 2.6.STABLE17, which was
+It was created by Squid Web Proxy $as_me 2.6.STABLE18, which was
generated by GNU Autoconf 2.61. Invocation command line was
$ $0 $@
@@ -2349,7 +2349,7 @@
# Define the identity of the package.
PACKAGE='squid'
- VERSION='2.6.STABLE17'
+ VERSION='2.6.STABLE18'
cat >>confdefs.h <<_ACEOF
@@ -27276,7 +27276,7 @@
# report actual input values of CONFIG_FILES etc. instead of their
# values after options handling.
ac_log="
-This file was extended by Squid Web Proxy $as_me 2.6.STABLE17, which was
+This file was extended by Squid Web Proxy $as_me 2.6.STABLE18, which was
generated by GNU Autoconf 2.61. Invocation command line was
CONFIG_FILES = $CONFIG_FILES
@@ -27329,7 +27329,7 @@
_ACEOF
cat >>$CONFIG_STATUS <<_ACEOF
ac_cs_version="\\
-Squid Web Proxy config.status 2.6.STABLE17
+Squid Web Proxy config.status 2.6.STABLE18
configured by $0, generated by GNU Autoconf 2.61,
with options \\"`echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`\\"
diff -ruN squid-2.6.STABLE17/configure.in squid-2.6.STABLE18/configure.in
--- squid-2.6.STABLE17/configure.in 2007-11-26 14:39:31.000000000 +0100
+++ squid-2.6.STABLE18/configure.in 2008-01-10 13:34:23.000000000 +0100
@@ -1,16 +1,16 @@
dnl
dnl Configuration input file for Squid
dnl
-dnl $Id: configure.in,v 1.416.2.22 2007/11/26 13:34:35 hno Exp $
+dnl $Id: configure.in,v 1.416.2.24 2008/01/10 12:30:57 hno Exp $
dnl
dnl
dnl
-AC_INIT(Squid Web Proxy, 2.6.STABLE17, http://www.squid-cache.org/bugs/, squid)
+AC_INIT(Squid Web Proxy, 2.6.STABLE18, http://www.squid-cache.org/bugs/, squid)
AC_PREREQ(2.52)
AM_CONFIG_HEADER(include/autoconf.h)
AC_CONFIG_AUX_DIR(cfgaux)
AM_INIT_AUTOMAKE
-AC_REVISION($Revision: 1.416.2.22 $)dnl
+AC_REVISION($Revision: 1.416.2.24 $)dnl
AC_PREFIX_DEFAULT(/usr/local/squid)
AM_MAINTAINER_MODE
diff -ruN squid-2.6.STABLE17/COPYRIGHT squid-2.6.STABLE18/COPYRIGHT
--- squid-2.6.STABLE17/COPYRIGHT 2001-01-12 01:37:09.000000000 +0100
+++ squid-2.6.STABLE18/COPYRIGHT 2008-01-02 17:20:20.000000000 +0100
@@ -22,4 +22,4 @@
Suite 330
Boston, MA 02111, USA
-Or contact info@ircache.net
+Or contact info@squid-cache.org
diff -ruN squid-2.6.STABLE17/helpers/digest_auth/eDirectory/edir_ldapext.c squid-2.6.STABLE18/helpers/digest_auth/eDirectory/edir_ldapext.c
--- squid-2.6.STABLE17/helpers/digest_auth/eDirectory/edir_ldapext.c 2007-08-31 16:16:18.000000000 +0200
+++ squid-2.6.STABLE18/helpers/digest_auth/eDirectory/edir_ldapext.c 2008-01-02 17:29:22.000000000 +0100
@@ -1,27 +1,31 @@
/*
- * Copyright (C) 2002-2004 Novell, Inc.
+ * NDS LDAP helper functions
+ * Copied From Samba-3.0.24 pdb_nds.c and trimmed down to the
+ * limited functionality needed to access the plain text password only
*
- * edir_ldapext.c LDAP extension for reading eDirectory universal password
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as published
- * by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- * You should have received a copy of the GNU General Public License along with
- * this program; if not, contact Novell, Inc.
+ * Original copyright & license follows:
*
- * To contact Novell about this file by physical or electronic mail, you may
- * find current contact information at www.novell.com.
- */
+ * Copyright (C) Vince Brimhall 2004-2005
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ *
+*/
#include "digest_common.h"
-#ifdef _SQUID_MSWIN_ /* Native Windows port and MinGW */
+#ifdef _SQUID_MSWIN_ /* Native Windows port and MinGW */
#define snprintf _snprintf
#include
@@ -43,63 +47,45 @@
#include
#endif
+#include
#include "edir_ldapext.h"
-/* NMAS error codes */
-#define NMAS_E_BASE (-1600)
+#define NMASLDAP_GET_LOGIN_CONFIG_REQUEST "2.16.840.1.113719.1.39.42.100.3"
+#define NMASLDAP_GET_LOGIN_CONFIG_RESPONSE "2.16.840.1.113719.1.39.42.100.4"
+#define NMASLDAP_SET_PASSWORD_REQUEST "2.16.840.1.113719.1.39.42.100.11"
+#define NMASLDAP_SET_PASSWORD_RESPONSE "2.16.840.1.113719.1.39.42.100.12"
+#define NMASLDAP_GET_PASSWORD_REQUEST "2.16.840.1.113719.1.39.42.100.13"
+#define NMASLDAP_GET_PASSWORD_RESPONSE "2.16.840.1.113719.1.39.42.100.14"
+
+#define NMAS_LDAP_EXT_VERSION 1
+
+#define SMB_MALLOC_ARRAY(type, nelem) calloc(sizeof(type), nelem)
+#define DEBUG(level, args)
+
+/**********************************************************************
+ Take the request BER value and input data items and BER encodes the
+ data into the BER value
+**********************************************************************/
-#define NMAS_SUCCESS 0
-#define NMAS_E_SUCCESS NMAS_SUCCESS /* Alias */
-#define NMAS_OK NMAS_SUCCESS /* Alias */
-
-#define NMAS_E_FRAG_FAILURE (NMAS_E_BASE-31) /* -1631 0xFFFFF9A1 */
-#define NMAS_E_BUFFER_OVERFLOW (NMAS_E_BASE-33) /* -1633 0xFFFFF99F */
-#define NMAS_E_SYSTEM_RESOURCES (NMAS_E_BASE-34) /* -1634 0xFFFFF99E */
-#define NMAS_E_INSUFFICIENT_MEMORY (NMAS_E_BASE-35) /* -1635 0xFFFFF99D */
-#define NMAS_E_NOT_SUPPORTED (NMAS_E_BASE-36) /* -1636 0xFFFFF99C */
-#define NMAS_E_INVALID_PARAMETER (NMAS_E_BASE-43) /* -1643 0xFFFFF995 */
-#define NMAS_E_INVALID_VERSION (NMAS_E_BASE-52) /* -1652 0xFFFFF98C */
-
-/* OID of LDAP extenstion calls to read Universal Password */
-#define NMASLDAP_GET_PASSWORD_REQUEST "2.16.840.1.113719.1.39.42.100.13"
-#define NMASLDAP_GET_PASSWORD_RESPONSE "2.16.840.1.113719.1.39.42.100.14"
-
-#define NMAS_LDAP_EXT_VERSION 1
-
-
-
-/* ------------------------------------------------------------------------
- * berEncodePasswordData
- * ==============================
- * RequestBer contents:
- * clientVersion INTEGER
- * targetObjectDN OCTET STRING
- * password1 OCTET STRING
- * password2 OCTET STRING
- *
- * Description:
- * This function takes the request BER value and input data items
- * and BER encodes the data into the BER value
- *
- * ------------------------------------------------------------------------ */
-int berEncodePasswordData(
+static int berEncodePasswordData(
struct berval **requestBV,
- char *objectDN,
- char *password,
- char *password2)
+ const char *objectDN,
+ const char *password,
+ const char *password2)
{
int err = 0, rc=0;
BerElement *requestBer = NULL;
- char * utf8ObjPtr = NULL;
+ const char * utf8ObjPtr = NULL;
int utf8ObjSize = 0;
- char * utf8PwdPtr = NULL;
+ const char * utf8PwdPtr = NULL;
int utf8PwdSize = 0;
- char * utf8Pwd2Ptr = NULL;
+ const char * utf8Pwd2Ptr = NULL;
int utf8Pwd2Size = 0;
+ /* Convert objectDN and tag strings from Unicode to UTF-8 */
utf8ObjSize = strlen(objectDN)+1;
utf8ObjPtr = objectDN;
@@ -115,10 +101,10 @@
utf8Pwd2Ptr = password2;
}
- /* Allocate a BerElement for the request parameters.*/
+ /* Allocate a BerElement for the request parameters. */
if((requestBer = ber_alloc()) == NULL)
{
- err = NMAS_E_FRAG_FAILURE;
+ err = LDAP_ENCODING_ERROR;
goto Cleanup;
}
@@ -140,7 +126,7 @@
if (rc < 0)
{
- err = NMAS_E_FRAG_FAILURE;
+ err = LDAP_ENCODING_ERROR;
goto Cleanup;
}
else
@@ -148,12 +134,10 @@
err = 0;
}
- /*
- * Convert the BER we just built to a berval that we'll send with the extended request.
- */
+ /* Convert the BER we just built to a berval that we'll send with the extended request. */
if(ber_flatten(requestBer, requestBV) == LBER_ERROR)
{
- err = NMAS_E_FRAG_FAILURE;
+ err = LDAP_ENCODING_ERROR;
goto Cleanup;
}
@@ -165,50 +149,133 @@
}
return err;
-} /* End of berEncodePasswordData */
+}
-/* ------------------------------------------------------------------------
- * berDecodeLoginData()
- * ==============================
- * ResponseBer contents:
- * serverVersion INTEGER
- * error INTEGER
- * data OCTET STRING
- *
- * Description:
- * This function takes the reply BER Value and decodes the
- * NMAS server version and return code and if a non null retData
- * buffer was supplied, tries to decode the the return data and length
- *
- * ------------------------------------------------------------------------ */
-int berDecodeLoginData(
+/**********************************************************************
+ Take the request BER value and input data items and BER encodes the
+ data into the BER value
+**********************************************************************/
+
+static int berEncodeLoginData(
+ struct berval **requestBV,
+ char *objectDN,
+ unsigned int methodIDLen,
+ unsigned int *methodID,
+ char *tag,
+ size_t putDataLen,
+ void *putData)
+{
+ int err = 0;
+ BerElement *requestBer = NULL;
+
+ unsigned int i;
+ unsigned int elemCnt = methodIDLen / sizeof(unsigned int);
+
+ char *utf8ObjPtr=NULL;
+ int utf8ObjSize = 0;
+
+ char *utf8TagPtr = NULL;
+ int utf8TagSize = 0;
+
+ utf8ObjPtr = objectDN;
+ utf8ObjSize = strlen(utf8ObjPtr)+1;
+
+ utf8TagPtr = tag;
+ utf8TagSize = strlen(utf8TagPtr)+1;
+
+ /* Allocate a BerElement for the request parameters. */
+ if((requestBer = ber_alloc()) == NULL)
+ {
+ err = LDAP_ENCODING_ERROR;
+ goto Cleanup;
+ }
+
+ /* BER encode the NMAS Version and the objectDN */
+ err = (ber_printf(requestBer, "{io", NMAS_LDAP_EXT_VERSION, utf8ObjPtr, utf8ObjSize) < 0) ? LDAP_ENCODING_ERROR : 0;
+
+ /* BER encode the MethodID Length and value */
+ if (!err)
+ {
+ err = (ber_printf(requestBer, "{i{", methodIDLen) < 0) ? LDAP_ENCODING_ERROR : 0;
+ }
+
+ for (i = 0; !err && i < elemCnt; i++)
+ {
+ err = (ber_printf(requestBer, "i", methodID[i]) < 0) ? LDAP_ENCODING_ERROR : 0;
+ }
+
+ if (!err)
+ {
+ err = (ber_printf(requestBer, "}}", 0) < 0) ? LDAP_ENCODING_ERROR : 0;
+ }
+
+ if(putData)
+ {
+ /* BER Encode the the tag and data */
+ err = (ber_printf(requestBer, "oio}", utf8TagPtr, utf8TagSize, putDataLen, putData, putDataLen) < 0) ? LDAP_ENCODING_ERROR : 0;
+ }
+ else
+ {
+ /* BER Encode the the tag */
+ err = (ber_printf(requestBer, "o}", utf8TagPtr, utf8TagSize) < 0) ? LDAP_ENCODING_ERROR : 0;
+ }
+
+ if (err)
+ {
+ goto Cleanup;
+ }
+
+ /* Convert the BER we just built to a berval that we'll send with the extended request. */
+ if(ber_flatten(requestBer, requestBV) == LBER_ERROR)
+ {
+ err = LDAP_ENCODING_ERROR;
+ goto Cleanup;
+ }
+
+Cleanup:
+
+ if(requestBer)
+ {
+ ber_free(requestBer, 1);
+ }
+
+ return err;
+}
+
+/**********************************************************************
+ Takes the reply BER Value and decodes the NMAS server version and
+ return code and if a non null retData buffer was supplied, tries to
+ decode the the return data and length
+**********************************************************************/
+
+static int berDecodeLoginData(
struct berval *replyBV,
int *serverVersion,
size_t *retDataLen,
void *retData )
{
- int rc=0, err = 0;
+ int err = 0;
BerElement *replyBer = NULL;
char *retOctStr = NULL;
size_t retOctStrLen = 0;
if((replyBer = ber_init(replyBV)) == NULL)
{
- err = NMAS_E_SYSTEM_RESOURCES;
+ err = LDAP_OPERATIONS_ERROR;
goto Cleanup;
}
if(retData)
{
retOctStrLen = *retDataLen + 1;
- retOctStr = (char *)malloc(retOctStrLen);
+ retOctStr = SMB_MALLOC_ARRAY(char, retOctStrLen);
if(!retOctStr)
{
- err = NMAS_E_SYSTEM_RESOURCES;
+ err = LDAP_OPERATIONS_ERROR;
goto Cleanup;
}
-
- if( (rc = ber_scanf(replyBer, "{iis}", serverVersion, &err, retOctStr, &retOctStrLen)) != -1)
+
+ if(ber_scanf(replyBer, "{iis}", serverVersion, &err, retOctStr, &retOctStrLen) != -1)
{
if (*retDataLen >= retOctStrLen)
{
@@ -216,23 +283,23 @@
}
else if (!err)
{
- err = NMAS_E_BUFFER_OVERFLOW;
+ err = LDAP_NO_MEMORY;
}
*retDataLen = retOctStrLen;
}
else if (!err)
{
- err = NMAS_E_FRAG_FAILURE;
+ err = LDAP_DECODING_ERROR;
}
}
else
{
- if( (rc = ber_scanf(replyBer, "{ii}", serverVersion, &err)) == -1)
+ if(ber_scanf(replyBer, "{ii}", serverVersion, &err) == -1)
{
if (!err)
{
- err = NMAS_E_FRAG_FAILURE;
+ err = LDAP_DECODING_ERROR;
}
}
}
@@ -251,23 +318,180 @@
}
return err;
-} /* End of berDecodeLoginData */
+}
-/* -----------------------------------------------------------------------
- * nmasldap_get_password()
- * ==============================
- *
- * Description:
- * This API attempts to get the universal password
- *
- * ------------------------------------------------------------------------ */
-int nmasldap_get_password(
+/**********************************************************************
+ Retrieves data in the login configuration of the specified object
+ that is tagged with the specified methodID and tag.
+**********************************************************************/
+
+static int getLoginConfig(
LDAP *ld,
char *objectDN,
- size_t *pwdSize, // in bytes
+ unsigned int methodIDLen,
+ unsigned int *methodID,
+ char *tag,
+ size_t *dataLen,
+ void *data )
+{
+ int err = 0;
+ struct berval *requestBV = NULL;
+ char *replyOID = NULL;
+ struct berval *replyBV = NULL;
+ int serverVersion = 0;
+
+ /* Validate unicode parameters. */
+ if((strlen(objectDN) == 0) || ld == NULL)
+ {
+ return LDAP_NO_SUCH_ATTRIBUTE;
+ }
+
+ err = berEncodeLoginData(&requestBV, objectDN, methodIDLen, methodID, tag, 0, NULL);
+ if(err)
+ {
+ goto Cleanup;
+ }
+
+ /* Call the ldap_extended_operation (synchronously) */
+ if((err = ldap_extended_operation_s(ld, NMASLDAP_GET_LOGIN_CONFIG_REQUEST,
+ requestBV, NULL, NULL, &replyOID, &replyBV)))
+ {
+ goto Cleanup;
+ }
+
+ /* Make sure there is a return OID */
+ if(!replyOID)
+ {
+ err = LDAP_NOT_SUPPORTED;
+ goto Cleanup;
+ }
+
+ /* Is this what we were expecting to get back. */
+ if(strcmp(replyOID, NMASLDAP_GET_LOGIN_CONFIG_RESPONSE))
+ {
+ err = LDAP_NOT_SUPPORTED;
+ goto Cleanup;
+ }
+
+ /* Do we have a good returned berval? */
+ if(!replyBV)
+ {
+ /* No; returned berval means we experienced a rather drastic error. */
+ /* Return operations error. */
+ err = LDAP_OPERATIONS_ERROR;
+ goto Cleanup;
+ }
+
+ err = berDecodeLoginData(replyBV, &serverVersion, dataLen, data);
+
+ if(serverVersion != NMAS_LDAP_EXT_VERSION)
+ {
+ err = LDAP_OPERATIONS_ERROR;
+ goto Cleanup;
+ }
+
+Cleanup:
+
+ if(replyBV)
+ {
+ ber_bvfree(replyBV);
+ }
+
+ /* Free the return OID string if one was returned. */
+ if(replyOID)
+ {
+ ldap_memfree(replyOID);
+ }
+
+ /* Free memory allocated while building the request ber and berval. */
+ if(requestBV)
+ {
+ ber_bvfree(requestBV);
+ }
+
+ /* Return the appropriate error/success code. */
+ return err;
+}
+
+/**********************************************************************
+ Attempts to get the Simple Password
+**********************************************************************/
+
+static int nmasldap_get_simple_pwd(
+ LDAP *ld,
+ char *objectDN,
+ size_t pwdLen,
char *pwd )
{
int err = 0;
+ unsigned int methodID = 0;
+ unsigned int methodIDLen = sizeof(methodID);
+ char tag[] = {'P','A','S','S','W','O','R','D',' ','H','A','S','H',0};
+ char *pwdBuf=NULL;
+ size_t pwdBufLen, bufferLen;
+
+ bufferLen = pwdBufLen = pwdLen+2;
+ pwdBuf = SMB_MALLOC_ARRAY(char, pwdBufLen); /* digest and null */
+ if(pwdBuf == NULL)
+ {
+ return LDAP_NO_MEMORY;
+ }
+
+ err = getLoginConfig(ld, objectDN, methodIDLen, &methodID, tag, &pwdBufLen, pwdBuf);
+ if (err == 0)
+ {
+ if (pwdBufLen !=0)
+ {
+ pwdBuf[pwdBufLen] = 0; /* null terminate */
+
+ switch (pwdBuf[0])
+ {
+ case 1: /* cleartext password */
+ break;
+ case 2: /* SHA1 HASH */
+ case 3: /* MD5_ID */
+ case 4: /* UNIXCrypt_ID */
+ case 8: /* SSHA_ID */
+ default: /* Unknown digest */
+ err = LDAP_INAPPROPRIATE_AUTH; /* only return clear text */
+ break;
+ }
+
+ if (!err)
+ {
+ if (pwdLen >= pwdBufLen-1)
+ {
+ memcpy(pwd, &pwdBuf[1], pwdBufLen-1); /* skip digest tag and include null */
+ }
+ else
+ {
+ err = LDAP_NO_MEMORY;
+ }
+ }
+ }
+ }
+
+ if (pwdBuf != NULL)
+ {
+ memset(pwdBuf, 0, bufferLen);
+ free(pwdBuf);
+ }
+
+ return err;
+}
+
+
+/**********************************************************************
+ Attempts to get the Universal Password
+**********************************************************************/
+
+static int nmasldap_get_password(
+ LDAP *ld,
+ char *objectDN,
+ size_t *pwdSize, /* in bytes */
+ unsigned char *pwd )
+{
+ int err = 0;
struct berval *requestBV = NULL;
char *replyOID = NULL;
@@ -276,27 +500,19 @@
char *pwdBuf;
size_t pwdBufLen, bufferLen;
-#ifdef NOT_N_PLAT_NLM
- int currentThreadGroupID;
-#endif
-
- /* Validate char parameters. */
+ /* Validate char parameters. */
if(objectDN == NULL || (strlen(objectDN) == 0) || pwdSize == NULL || ld == NULL)
{
- return NMAS_E_INVALID_PARAMETER;
+ return LDAP_NO_SUCH_ATTRIBUTE;
}
bufferLen = pwdBufLen = *pwdSize;
- pwdBuf = (char *)malloc(pwdBufLen+2);
+ pwdBuf = SMB_MALLOC_ARRAY(char, pwdBufLen+2);
if(pwdBuf == NULL)
{
- return NMAS_E_INSUFFICIENT_MEMORY;
+ return LDAP_NO_MEMORY;
}
-#ifdef NOT_N_PLAT_NLM
- currentThreadGroupID = SetThreadGroupID(nmasLDAPThreadGroupID);
-#endif
-
err = berEncodePasswordData(&requestBV, objectDN, NULL, NULL);
if(err)
{
@@ -312,25 +528,23 @@
/* Make sure there is a return OID */
if(!replyOID)
{
- err = NMAS_E_NOT_SUPPORTED;
+ err = LDAP_NOT_SUPPORTED;
goto Cleanup;
}
/* Is this what we were expecting to get back. */
if(strcmp(replyOID, NMASLDAP_GET_PASSWORD_RESPONSE))
{
- err = NMAS_E_NOT_SUPPORTED;
+ err = LDAP_NOT_SUPPORTED;
goto Cleanup;
}
/* Do we have a good returned berval? */
if(!replyBV)
{
- /*
- * No; returned berval means we experienced a rather drastic error.
- * Return operations error.
- */
- err = NMAS_E_SYSTEM_RESOURCES;
+ /* No; returned berval means we experienced a rather drastic error. */
+ /* Return operations error. */
+ err = LDAP_OPERATIONS_ERROR;
goto Cleanup;
}
@@ -338,7 +552,7 @@
if(serverVersion != NMAS_LDAP_EXT_VERSION)
{
- err = NMAS_E_INVALID_VERSION;
+ err = LDAP_OPERATIONS_ERROR;
goto Cleanup;
}
@@ -377,10 +591,47 @@
free(pwdBuf);
}
-#ifdef NOT_N_PLAT_NLM
- SetThreadGroupID(currentThreadGroupID);
-#endif
-
/* Return the appropriate error/success code. */
return err;
-} /* end of nmasldap_get_password */
+}
+
+/**********************************************************************
+ Get the user's password from NDS.
+ *********************************************************************/
+
+int nds_get_password(
+ LDAP *ld,
+ char *object_dn,
+ size_t *pwd_len,
+ char *pwd )
+{
+ int rc = -1;
+
+ rc = nmasldap_get_password(ld, object_dn, pwd_len, (unsigned char *)pwd);
+ if (rc == LDAP_SUCCESS) {
+#ifdef DEBUG_PASSWORD
+ DEBUG(100,("nmasldap_get_password returned %s for %s\n", pwd, object_dn));
+#endif
+ DEBUG(5, ("NDS Universal Password retrieved for %s\n", object_dn));
+ } else {
+ DEBUG(3, ("NDS Universal Password NOT retrieved for %s\n", object_dn));
+ }
+
+ if (rc != LDAP_SUCCESS) {
+ rc = nmasldap_get_simple_pwd(ld, object_dn, *pwd_len, pwd);
+ if (rc == LDAP_SUCCESS) {
+#ifdef DEBUG_PASSWORD
+ DEBUG(100,("nmasldap_get_simple_pwd returned %s for %s\n", pwd, object_dn));
+#endif
+ DEBUG(5, ("NDS Simple Password retrieved for %s\n", object_dn));
+ } else {
+ /* We couldn't get the password */
+ DEBUG(3, ("NDS Simple Password NOT retrieved for %s\n", object_dn));
+ return LDAP_INVALID_CREDENTIALS;
+ }
+ }
+
+ /* We got the password */
+ return LDAP_SUCCESS;
+}
+
diff -ruN squid-2.6.STABLE17/helpers/digest_auth/eDirectory/edir_ldapext.h squid-2.6.STABLE18/helpers/digest_auth/eDirectory/edir_ldapext.h
--- squid-2.6.STABLE17/helpers/digest_auth/eDirectory/edir_ldapext.h 2007-08-31 16:16:18.000000000 +0200
+++ squid-2.6.STABLE18/helpers/digest_auth/eDirectory/edir_ldapext.h 2008-01-02 17:29:22.000000000 +0100
@@ -1,14 +1 @@
-/*
- * edir_ldapext.h
- *
- * AUTHOR: Guy Antony Halse
- *
- * stubs for FreeRadius's edir_ldapext.h
- *
- */
-#define UNIVERSAL_PASS_LEN 256
-#define NMAS_SUCCESS 0
-
-extern int berEncodePasswordData(struct berval **requestBV, char *objectDN, char *password, char *password2);
-extern int berDecodeLoginData(struct berval *replyBV, int *serverVersion, size_t *retDataLen, void *retData);
-extern int nmasldap_get_password(LDAP *ld, char *objectDN, size_t *pwdSize, char *pwd);
+int nds_get_password(LDAP *ld, char *object_dn, size_t * pwd_len, char *pwd);
diff -ruN squid-2.6.STABLE17/helpers/digest_auth/eDirectory/ldap_backend.c squid-2.6.STABLE18/helpers/digest_auth/eDirectory/ldap_backend.c
--- squid-2.6.STABLE17/helpers/digest_auth/eDirectory/ldap_backend.c 2007-08-31 16:16:18.000000000 +0200
+++ squid-2.6.STABLE18/helpers/digest_auth/eDirectory/ldap_backend.c 2008-01-02 17:29:22.000000000 +0100
@@ -49,14 +49,14 @@
/* Globals */
static LDAP *ld = NULL;
-static char *passattr = NULL;
+static const char *passattr = NULL;
static char *ldapServer = NULL;
-static char *userbasedn = NULL;
-static char *userdnattr = NULL;
-static char *usersearchfilter = NULL;
-static char *binddn = NULL;
-static char *bindpasswd = NULL;
-static char *delimiter = ":";
+static const char *userbasedn = NULL;
+static const char *userdnattr = NULL;
+static const char *usersearchfilter = NULL;
+static const char *binddn = NULL;
+static const char *bindpasswd = NULL;
+static const char *delimiter = ":";
static int encrpass = 0;
static int searchscope = LDAP_SCOPE_SUBTREE;
static int persistent = 0;
@@ -80,7 +80,7 @@
#endif
static void ldapconnect(void);
-static int readSecret(char *filename);
+static int readSecret(const char *filename);
/* Yuck.. we need to glue to different versions of the API */
@@ -198,7 +198,7 @@
char filter[8192];
char searchbase[8192];
char *universal_password = NULL;
- size_t universal_password_len = UNIVERSAL_PASS_LEN;
+ size_t universal_password_len = 256;
int nmas_res = 0;
int rc = -1;
if (ld) {
@@ -252,28 +252,28 @@
if (rc == LDAP_SUCCESS) {
entry = ldap_first_entry(ld, res);
if (entry) {
- if (debug)
- printf("ldap dn: %s\n", ldap_get_dn(ld, entry));
- if (edir_universal_passwd) {
-
- /* allocate some memory for the universal password returned by NMAS */
- universal_password = malloc(universal_password_len);
- memset(universal_password, 0, universal_password_len);
- values = malloc(sizeof(char *));
-
- /* actually talk to NMAS to get a password */
- nmas_res = nmasldap_get_password(ld, ldap_get_dn(ld, entry), &universal_password_len, universal_password);
- if (nmas_res == NMAS_SUCCESS && universal_password) {
- if (debug)
- printf("NMAS returned value %s\n", universal_password);
- values[0] = universal_password;
- } else {
- if (debug)
- printf("Error reading Universal Password: %d = %s\n", nmas_res, ldap_err2string(nmas_res));
- }
- } else {
- values = ldap_get_values(ld, entry, passattr);
- }
+ if (debug)
+ printf("ldap dn: %s\n", ldap_get_dn(ld, entry));
+ if (edir_universal_passwd) {
+
+ /* allocate some memory for the universal password returned by NMAS */
+ universal_password = malloc(universal_password_len);
+ memset(universal_password, 0, universal_password_len);
+ values = malloc(sizeof(char *));
+
+ /* actually talk to NMAS to get a password */
+ nmas_res = nds_get_password(ld, ldap_get_dn(ld, entry), &universal_password_len, universal_password);
+ if (nmas_res == LDAP_SUCCESS && universal_password) {
+ if (debug)
+ printf("NMAS returned value %s\n", universal_password);
+ values[0] = universal_password;
+ } else {
+ if (debug)
+ printf("Error reading Universal Password: %d = %s\n", nmas_res, ldap_err2string(nmas_res));
+ }
+ } else {
+ values = ldap_get_values(ld, entry, passattr);
+ }
} else {
ldap_msgfree(res);
return NULL;
@@ -281,8 +281,8 @@
if (!values) {
if (debug)
printf("No attribute value found\n");
- if (edir_universal_passwd)
- free(universal_password);
+ if (edir_universal_passwd)
+ free(universal_password);
ldap_msgfree(res);
return NULL;
}
@@ -303,12 +303,12 @@
printf("password: %s\n", password);
if (password)
password = strdup(password);
- if (edir_universal_passwd) {
- free(values);
- free(universal_password);
- } else {
- ldap_value_free(values);
- }
+ if (edir_universal_passwd) {
+ free(values);
+ free(universal_password);
+ } else {
+ ldap_value_free(values);
+ }
ldap_msgfree(res);
return password;
} else {
@@ -427,7 +427,7 @@
setbuf(stdout, NULL);
while (argc > 1 && argv[1][0] == '-') {
- char *value = "";
+ const char *value = "";
char option = argv[1][1];
switch (option) {
case 'P':
@@ -437,8 +437,8 @@
case 'g':
case 'e':
case 'S':
- case 'n':
- case 'd':
+ case 'n':
+ case 'd':
break;
default:
if (strlen(argv[1]) > 2) {
@@ -604,7 +604,7 @@
}
if (!ldapServer)
- ldapServer = "localhost";
+ ldapServer = (char *) "localhost";
if (!userbasedn || !((passattr != NULL) || (edir_universal_passwd && usersearchfilter && version == LDAP_VERSION3 && use_tls))) {
fprintf(stderr, "Usage: " PROGRAM_NAME " -b basedn -f filter [options] ldap_server_name\n\n");
@@ -644,7 +644,7 @@
return 0;
}
static int
-readSecret(char *filename)
+readSecret(const char *filename)
{
char buf[BUFSIZ];
char *e = 0;
@@ -665,13 +665,10 @@
if ((e = strrchr(buf, '\r')))
*e = 0;
- bindpasswd = (char *) calloc(sizeof(char), strlen(buf) + 1);
- if (bindpasswd) {
- strcpy(bindpasswd, buf);
- } else {
+ bindpasswd = strdup(buf);
+ if (!bindpasswd) {
fprintf(stderr, PROGRAM_NAME " ERROR: can not allocate memory\n");
}
-
fclose(f);
return 0;
@@ -680,7 +677,7 @@
void
LDAPHHA1(RequestData * requestData)
{
- char *password = "";
+ char *password;
ldapconnect();
password = getpassword(requestData->user, requestData->realm);
if (password != NULL) {
diff -ruN squid-2.6.STABLE17/helpers/negotiate_auth/squid_kerb_auth/spnegohelp/spnegohelp.c squid-2.6.STABLE18/helpers/negotiate_auth/squid_kerb_auth/spnegohelp/spnegohelp.c
--- squid-2.6.STABLE17/helpers/negotiate_auth/squid_kerb_auth/spnegohelp/spnegohelp.c 2007-06-25 00:29:14.000000000 +0200
+++ squid-2.6.STABLE18/helpers/negotiate_auth/squid_kerb_auth/spnegohelp/spnegohelp.c 2008-01-02 17:15:47.000000000 +0100
@@ -1,263 +1,263 @@
-/* -----------------------------------------------------------------------------
- * spnegohelp.c defines RFC 2478 SPNEGO GSS-API mechanism APIs.
- *
- * Author: Frank Balluffi
- *
- * Copyright (C) 2002-2003 All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
- *
- * -----------------------------------------------------------------------------
- */
-
-#include "spnegohelp.h"
-#include "spnego.h"
-
-#include
-
-int makeNegTokenTarg (const unsigned char * kerberosToken,
- size_t kerberosTokenLength,
- const unsigned char ** negTokenTarg,
- size_t * negTokenTargLength)
-{
- SPNEGO_TOKEN_HANDLE hSpnegoToken = NULL;
- int rc1 = 1;
- int rc2 = SPNEGO_E_SUCCESS;
-
- /* Check arguments. */
-
- if (!kerberosToken ||
- !negTokenTarg ||
- !negTokenTargLength)
- return 10;
-
- /* Does IIS reply with 1.2.840.48018.1.2.2 or 1.2.840.113554.1.2.2? */
-
- /* Does IIS always reply with accept_completed? */
-
- /* IIS does not include a MIC. */
-
- rc2 = spnegoCreateNegTokenTarg (spnego_mech_oid_Kerberos_V5_Legacy,
- spnego_negresult_success,
- (unsigned char *) kerberosToken,
- kerberosTokenLength,
- NULL,
- 0,
- &hSpnegoToken);
-
- if (rc2 != SPNEGO_E_SUCCESS)
- {
- rc1 = abs(rc2)+100;
- goto cleanup;
- }
-
- /* Get NegTokenTarg length. */
-
- rc2 = spnegoTokenGetBinary (hSpnegoToken,
- NULL,
- (unsigned long*) negTokenTargLength);
-
- if (rc2 != SPNEGO_E_BUFFER_TOO_SMALL)
- {
- rc1 = abs(rc2)+200;
- goto cleanup;
- }
-
- *negTokenTarg = malloc (*negTokenTargLength);
-
- if (!*negTokenTarg)
- {
- rc1 = abs(rc2)+300;
- goto cleanup;
- }
-
- /* Get NegTokenTarg data. */
-
- rc2 = spnegoTokenGetBinary (hSpnegoToken,
- (unsigned char *) *negTokenTarg,
- (unsigned long*) negTokenTargLength);
-
-
- if (rc2 != SPNEGO_E_SUCCESS)
- {
- rc1 = abs(rc2)+400;
- goto error;
- }
-
- rc1 = 0;
-
- goto cleanup;
-
-error:
-
- if (*negTokenTarg)
- {
- free ((unsigned char *) *negTokenTarg);
- *negTokenTarg = NULL;
- *negTokenTargLength = 0;
- }
-
-cleanup:
-
- if (hSpnegoToken)
- spnegoFreeData (hSpnegoToken);
-
- LOG(("makeNegTokenTarg returned %d\n",rc1));
- return rc1;
-}
-
-int parseNegTokenInit (const unsigned char * negTokenInit,
- size_t negTokenInitLength,
- const unsigned char ** kerberosToken,
- size_t * kerberosTokenLength)
-{
- SPNEGO_TOKEN_HANDLE hSpnegoToken = NULL;
- int pindex = -1;
- int rc1 = 1;
- int rc2 = SPNEGO_E_SUCCESS;
- unsigned char reqFlags = 0;
- int tokenType = 0;
-
- /* Check arguments. */
-
- if (!negTokenInit ||
- !kerberosToken ||
- !kerberosTokenLength)
- return 10;
-
- /* Decode SPNEGO token. */
-
- rc2 = spnegoInitFromBinary ((unsigned char *) negTokenInit,
- negTokenInitLength,
- &hSpnegoToken);
-
- if (rc2 != SPNEGO_E_SUCCESS)
- {
- rc1 = abs(rc2)+100;
- goto cleanup;
- }
-
- /* Check for negTokenInit choice. */
-
- rc2 = spnegoGetTokenType (hSpnegoToken,
- &tokenType);
-
- if (rc2 != SPNEGO_E_SUCCESS)
- {
- rc1 = abs(rc2)+200;
- goto cleanup;
- }
-
- if (tokenType != SPNEGO_TOKEN_INIT)
- {
- rc1 = abs(rc2)+300;
- goto cleanup;
- }
-
- /*
- Check that first mechType is 1.2.840.113554.1.2.2 or 1.2.840.48018.1.2.2.
- */
-
- /*
- IE seems to reply with 1.2.840.48018.1.2.2 and then 1.2.840.113554.1.2.2.
- */
-
- rc2 = spnegoIsMechTypeAvailable (hSpnegoToken,
- spnego_mech_oid_Kerberos_V5_Legacy,
- &pindex);
-
- if (rc2 != SPNEGO_E_SUCCESS ||
- pindex != 0)
- {
- rc2 = spnegoIsMechTypeAvailable (hSpnegoToken,
- spnego_mech_oid_Kerberos_V5,
- &pindex);
-
- if (rc2 != SPNEGO_E_SUCCESS ||
- pindex != 0)
- {
- rc1 = abs(rc2)+400;
- goto cleanup;
- }
- }
-
- /* Check for no reqFlags. */
-
- /* Does IE ever send reqFlags? */
-
- rc2 = spnegoGetContextFlags (hSpnegoToken,
- &reqFlags);
-
- if (rc2 == SPNEGO_E_SUCCESS)
- {
- rc1 = abs(rc2)+500;
- goto cleanup;
- }
-
- /* Get mechanism token length. */
-
- rc2 = spnegoGetMechToken (hSpnegoToken,
- NULL,
- (unsigned long*) kerberosTokenLength);
-
- if (rc2 != SPNEGO_E_BUFFER_TOO_SMALL)
- {
- rc1 = abs(rc2)+600;
- goto cleanup;
- }
-
- *kerberosToken = malloc (*kerberosTokenLength);
-
- if (!*kerberosToken)
- {
- rc1 = abs(rc2)+700;
- goto cleanup;
- }
-
- /* Get mechanism token data. */
-
- rc2 = spnegoGetMechToken (hSpnegoToken,
- (unsigned char *) *kerberosToken,
- (unsigned long*) kerberosTokenLength);
-
- if (rc2 != SPNEGO_E_SUCCESS)
- {
- rc1 = abs(rc2)+800;
- goto error;
- }
-
- /* According to Microsoft, IE does not send a MIC. */
-
- rc1 = 0;
-
- goto cleanup;
-
-error:
-
- if (*kerberosToken)
- {
- free ((unsigned char *) *kerberosToken);
- *kerberosToken = NULL;
- *kerberosTokenLength = 0;
- }
-
-cleanup:
-
- if (hSpnegoToken)
- spnegoFreeData (hSpnegoToken);
-
- LOG(("parseNegTokenInit returned %d\n",rc1));
- return rc1;
-}
+/* -----------------------------------------------------------------------------
+ * spnegohelp.c defines RFC 2478 SPNEGO GSS-API mechanism APIs.
+ *
+ * Author: Frank Balluffi
+ *
+ * Copyright (C) 2002-2003 All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
+ *
+ * -----------------------------------------------------------------------------
+ */
+
+#include "spnegohelp.h"
+#include "spnego.h"
+
+#include
+
+int makeNegTokenTarg (const unsigned char * kerberosToken,
+ size_t kerberosTokenLength,
+ const unsigned char ** negTokenTarg,
+ size_t * negTokenTargLength)
+{
+ SPNEGO_TOKEN_HANDLE hSpnegoToken = NULL;
+ int rc1 = 1;
+ int rc2 = SPNEGO_E_SUCCESS;
+
+ /* Check arguments. */
+
+ if (!kerberosToken ||
+ !negTokenTarg ||
+ !negTokenTargLength)
+ return 10;
+
+ /* Does IIS reply with 1.2.840.48018.1.2.2 or 1.2.840.113554.1.2.2? */
+
+ /* Does IIS always reply with accept_completed? */
+
+ /* IIS does not include a MIC. */
+
+ rc2 = spnegoCreateNegTokenTarg (spnego_mech_oid_Kerberos_V5_Legacy,
+ spnego_negresult_success,
+ (unsigned char *) kerberosToken,
+ kerberosTokenLength,
+ NULL,
+ 0,
+ &hSpnegoToken);
+
+ if (rc2 != SPNEGO_E_SUCCESS)
+ {
+ rc1 = abs(rc2)+100;
+ goto cleanup;
+ }
+
+ /* Get NegTokenTarg length. */
+
+ rc2 = spnegoTokenGetBinary (hSpnegoToken,
+ NULL,
+ (unsigned long*) negTokenTargLength);
+
+ if (rc2 != SPNEGO_E_BUFFER_TOO_SMALL)
+ {
+ rc1 = abs(rc2)+200;
+ goto cleanup;
+ }
+
+ *negTokenTarg = malloc (*negTokenTargLength);
+
+ if (!*negTokenTarg)
+ {
+ rc1 = abs(rc2)+300;
+ goto cleanup;
+ }
+
+ /* Get NegTokenTarg data. */
+
+ rc2 = spnegoTokenGetBinary (hSpnegoToken,
+ (unsigned char *) *negTokenTarg,
+ (unsigned long*) negTokenTargLength);
+
+
+ if (rc2 != SPNEGO_E_SUCCESS)
+ {
+ rc1 = abs(rc2)+400;
+ goto error;
+ }
+
+ rc1 = 0;
+
+ goto cleanup;
+
+error:
+
+ if (*negTokenTarg)
+ {
+ free ((unsigned char *) *negTokenTarg);
+ *negTokenTarg = NULL;
+ *negTokenTargLength = 0;
+ }
+
+cleanup:
+
+ if (hSpnegoToken)
+ spnegoFreeData (hSpnegoToken);
+
+ LOG(("makeNegTokenTarg returned %d\n",rc1));
+ return rc1;
+}
+
+int parseNegTokenInit (const unsigned char * negTokenInit,
+ size_t negTokenInitLength,
+ const unsigned char ** kerberosToken,
+ size_t * kerberosTokenLength)
+{
+ SPNEGO_TOKEN_HANDLE hSpnegoToken = NULL;
+ int pindex = -1;
+ int rc1 = 1;
+ int rc2 = SPNEGO_E_SUCCESS;
+ unsigned char reqFlags = 0;
+ int tokenType = 0;
+
+ /* Check arguments. */
+
+ if (!negTokenInit ||
+ !kerberosToken ||
+ !kerberosTokenLength)
+ return 10;
+
+ /* Decode SPNEGO token. */
+
+ rc2 = spnegoInitFromBinary ((unsigned char *) negTokenInit,
+ negTokenInitLength,
+ &hSpnegoToken);
+
+ if (rc2 != SPNEGO_E_SUCCESS)
+ {
+ rc1 = abs(rc2)+100;
+ goto cleanup;
+ }
+
+ /* Check for negTokenInit choice. */
+
+ rc2 = spnegoGetTokenType (hSpnegoToken,
+ &tokenType);
+
+ if (rc2 != SPNEGO_E_SUCCESS)
+ {
+ rc1 = abs(rc2)+200;
+ goto cleanup;
+ }
+
+ if (tokenType != SPNEGO_TOKEN_INIT)
+ {
+ rc1 = abs(rc2)+300;
+ goto cleanup;
+ }
+
+ /*
+ Check that first mechType is 1.2.840.113554.1.2.2 or 1.2.840.48018.1.2.2.
+ */
+
+ /*
+ IE seems to reply with 1.2.840.48018.1.2.2 and then 1.2.840.113554.1.2.2.
+ */
+
+ rc2 = spnegoIsMechTypeAvailable (hSpnegoToken,
+ spnego_mech_oid_Kerberos_V5_Legacy,
+ &pindex);
+
+ if (rc2 != SPNEGO_E_SUCCESS ||
+ pindex != 0)
+ {
+ rc2 = spnegoIsMechTypeAvailable (hSpnegoToken,
+ spnego_mech_oid_Kerberos_V5,
+ &pindex);
+
+ if (rc2 != SPNEGO_E_SUCCESS ||
+ pindex != 0)
+ {
+ rc1 = abs(rc2)+400;
+ goto cleanup;
+ }
+ }
+
+ /* Check for no reqFlags. */
+
+ /* Does IE ever send reqFlags? */
+
+ rc2 = spnegoGetContextFlags (hSpnegoToken,
+ &reqFlags);
+
+ if (rc2 == SPNEGO_E_SUCCESS)
+ {
+ rc1 = abs(rc2)+500;
+ goto cleanup;
+ }
+
+ /* Get mechanism token length. */
+
+ rc2 = spnegoGetMechToken (hSpnegoToken,
+ NULL,
+ (unsigned long*) kerberosTokenLength);
+
+ if (rc2 != SPNEGO_E_BUFFER_TOO_SMALL)
+ {
+ rc1 = abs(rc2)+600;
+ goto cleanup;
+ }
+
+ *kerberosToken = malloc (*kerberosTokenLength);
+
+ if (!*kerberosToken)
+ {
+ rc1 = abs(rc2)+700;
+ goto cleanup;
+ }
+
+ /* Get mechanism token data. */
+
+ rc2 = spnegoGetMechToken (hSpnegoToken,
+ (unsigned char *) *kerberosToken,
+ (unsigned long*) kerberosTokenLength);
+
+ if (rc2 != SPNEGO_E_SUCCESS)
+ {
+ rc1 = abs(rc2)+800;
+ goto error;
+ }
+
+ /* According to Microsoft, IE does not send a MIC. */
+
+ rc1 = 0;
+
+ goto cleanup;
+
+error:
+
+ if (*kerberosToken)
+ {
+ free ((unsigned char *) *kerberosToken);
+ *kerberosToken = NULL;
+ *kerberosTokenLength = 0;
+ }
+
+cleanup:
+
+ if (hSpnegoToken)
+ spnegoFreeData (hSpnegoToken);
+
+ LOG(("parseNegTokenInit returned %d\n",rc1));
+ return rc1;
+}
diff -ruN squid-2.6.STABLE17/helpers/negotiate_auth/squid_kerb_auth/spnegohelp/spnegohelp.h squid-2.6.STABLE18/helpers/negotiate_auth/squid_kerb_auth/spnegohelp/spnegohelp.h
--- squid-2.6.STABLE17/helpers/negotiate_auth/squid_kerb_auth/spnegohelp/spnegohelp.h 2007-06-03 02:47:39.000000000 +0200
+++ squid-2.6.STABLE18/helpers/negotiate_auth/squid_kerb_auth/spnegohelp/spnegohelp.h 2008-01-02 17:15:47.000000000 +0100
@@ -1,58 +1,58 @@
-/* -----------------------------------------------------------------------------
- * spnegohelp.c declares RFC 2478 SPNEGO GSS-API mechanism APIs.
- *
- * Author: Frank Balluffi
- *
- * Copyright (C) 2002-2003. All rights reserved.
- * -----------------------------------------------------------------------------
- */
-
-#ifndef SPNEGOHELP_H
-#define SPNEGOHELP_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#include
-
-/* -----------------------------------------------------------------------------
- * makeNegTokenTarg makes an RFC 2478 SPNEGO NegTokenTarg (token) from an
- * RFC 1964 Kerberos GSS-API token.
- *
- * If makeNegTokenTarg is successful, call free (*negTokenTarg) to free the
- * memory allocated by parseNegTokenInit.
- *
- * Returns 0 if successful, 1 otherwise.
- * -----------------------------------------------------------------------------
- */
-
-int makeNegTokenTarg (const unsigned char * kerberosToken,
- size_t kerberosTokenLength,
- const unsigned char ** negTokenTarg,
- size_t * negTokenTargLength);
-
-/* -----------------------------------------------------------------------------
- * parseNegTokenInit parses an RFC 2478 SPNEGO NegTokenInit (token) to extract
- * an RFC 1964 Kerberos GSS-API token.
- *
- * If the NegTokenInit does cotain a Kerberos GSS-API token, parseNegTokenInit
- * returns an error.
- *
- * If parseNegTokenInit is successful, call free (*kerberosToken) to
- * free the memory allocated by parseNegTokenInit.
- *
- * Returns 0 if successful, 1 otherwise.
- * -----------------------------------------------------------------------------
- */
-
-int parseNegTokenInit (const unsigned char * negTokenInit,
- size_t negTokenInitLength,
- const unsigned char ** kerberosToken,
- size_t * kerberosTokenLength);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* SPNEGOHELP_H */
+/* -----------------------------------------------------------------------------
+ * spnegohelp.c declares RFC 2478 SPNEGO GSS-API mechanism APIs.
+ *
+ * Author: Frank Balluffi
+ *
+ * Copyright (C) 2002-2003. All rights reserved.
+ * -----------------------------------------------------------------------------
+ */
+
+#ifndef SPNEGOHELP_H
+#define SPNEGOHELP_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include
+
+/* -----------------------------------------------------------------------------
+ * makeNegTokenTarg makes an RFC 2478 SPNEGO NegTokenTarg (token) from an
+ * RFC 1964 Kerberos GSS-API token.
+ *
+ * If makeNegTokenTarg is successful, call free (*negTokenTarg) to free the
+ * memory allocated by parseNegTokenInit.
+ *
+ * Returns 0 if successful, 1 otherwise.
+ * -----------------------------------------------------------------------------
+ */
+
+int makeNegTokenTarg (const unsigned char * kerberosToken,
+ size_t kerberosTokenLength,
+ const unsigned char ** negTokenTarg,
+ size_t * negTokenTargLength);
+
+/* -----------------------------------------------------------------------------
+ * parseNegTokenInit parses an RFC 2478 SPNEGO NegTokenInit (token) to extract
+ * an RFC 1964 Kerberos GSS-API token.
+ *
+ * If the NegTokenInit does cotain a Kerberos GSS-API token, parseNegTokenInit
+ * returns an error.
+ *
+ * If parseNegTokenInit is successful, call free (*kerberosToken) to
+ * free the memory allocated by parseNegTokenInit.
+ *
+ * Returns 0 if successful, 1 otherwise.
+ * -----------------------------------------------------------------------------
+ */
+
+int parseNegTokenInit (const unsigned char * negTokenInit,
+ size_t negTokenInitLength,
+ const unsigned char ** kerberosToken,
+ size_t * kerberosTokenLength);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* SPNEGOHELP_H */
diff -ruN squid-2.6.STABLE17/include/version.h squid-2.6.STABLE18/include/version.h
--- squid-2.6.STABLE17/include/version.h 2007-11-26 14:39:31.000000000 +0100
+++ squid-2.6.STABLE18/include/version.h 2008-01-10 13:34:23.000000000 +0100
@@ -9,5 +9,5 @@
*/
#ifndef SQUID_RELEASE_TIME
-#define SQUID_RELEASE_TIME 1196084366
+#define SQUID_RELEASE_TIME 1199968458
#endif
diff -ruN squid-2.6.STABLE17/lib/Array.c squid-2.6.STABLE18/lib/Array.c
--- squid-2.6.STABLE17/lib/Array.c 2007-11-26 12:06:12.000000000 +0100
+++ squid-2.6.STABLE18/lib/Array.c 2008-01-09 14:02:07.000000000 +0100
@@ -1,5 +1,5 @@
/*
- * $Id: Array.c,v 1.8.2.1 2007/11/26 11:06:12 adrian Exp $
+ * $Id: Array.c,v 1.8.2.2 2008/01/09 13:02:07 adrian Exp $
*
* AUTHOR: Alex Rousskov
*
@@ -142,7 +142,7 @@
void
arrayShrink(Array *a, int new_count)
{
- assert(new_count < a->capacity);
+ assert(new_count <= a->capacity);
assert(new_count >= 0);
a->count = new_count;
}
diff -ruN squid-2.6.STABLE17/lib/rfc2617.c squid-2.6.STABLE18/lib/rfc2617.c
--- squid-2.6.STABLE17/lib/rfc2617.c 2007-01-13 17:06:42.000000000 +0100
+++ squid-2.6.STABLE18/lib/rfc2617.c 2008-01-02 18:07:26.000000000 +0100
@@ -13,7 +13,7 @@
/*
- * $Id: rfc2617.c,v 1.8 2007/01/13 16:06:42 hno Exp $
+ * $Id: rfc2617.c,v 1.8.2.1 2008/01/02 17:07:26 hno Exp $
*
* DEBUG:
* AUTHOR: RFC 2617 & Robert Collins
@@ -94,7 +94,7 @@
else
Bin[i / 2] |= n;
}
- for (; i <= HASHHEXLEN; i++) {
+ for (i = i / 2; i < HASHLEN; i++) {
Bin[i] = '\0';
}
}
diff -ruN squid-2.6.STABLE17/RELEASENOTES.html squid-2.6.STABLE18/RELEASENOTES.html
--- squid-2.6.STABLE17/RELEASENOTES.html 2007-11-26 14:40:06.000000000 +0100
+++ squid-2.6.STABLE18/RELEASENOTES.html 2008-01-10 13:34:58.000000000 +0100
@@ -2,12 +2,12 @@
- Squid 2.6.STABLE17 release notes
+ Squid 2.6.STABLE18 release notes
-Squid 2.6.STABLE17 release notes
+Squid 2.6.STABLE18 release notes
-Squid Developers
$Id: release-2.6.html,v 1.44.2.15 2007/11/26 13:34:35 hno Exp $
+Squid Developers
$Id: release-2.6.html,v 1.44.2.16 2008/01/09 14:20:09 hno Exp $
This document contains the release notes for version 2.6 of Squid.
Squid is a WWW Cache application developed by the Web Caching community.
@@ -78,6 +78,9 @@
+
+
+
@@ -762,5 +765,19 @@
+
+
+
+
+- 2 assertion failures related to the fix for SQUID-2007:2
+- Digest authentication bugfixes, fixing random auth popups and failures when using digest authentication (auth_param digest ..)
+- License cleanup of edir_digest_auth
+- Code cleanups and portability fixes
+- See also the list of
+squid-2.6.STABLE16 changes and the
+ChangeLog file for details.
+
+
+
diff -ruN squid-2.6.STABLE17/src/auth/digest/auth_digest.c squid-2.6.STABLE18/src/auth/digest/auth_digest.c
--- squid-2.6.STABLE17/src/auth/digest/auth_digest.c 2007-08-31 16:08:53.000000000 +0200
+++ squid-2.6.STABLE18/src/auth/digest/auth_digest.c 2008-01-02 18:07:26.000000000 +0100
@@ -1,6 +1,6 @@
/*
- * $Id: auth_digest.c,v 1.21.2.1 2007/08/31 14:08:53 hno Exp $
+ * $Id: auth_digest.c,v 1.21.2.2 2008/01/02 17:07:26 hno Exp $
*
* DEBUG: section 29 Authenticator
* AUTHOR: Robert Collins
@@ -741,6 +741,7 @@
}
} else {
digest_request->flags.credentials_ok = 3;
+ digest_request->flags.invalid_password = 1;
safe_free(auth_user_request->message);
auth_user_request->message = xstrdup("Incorrect password");
return;
@@ -750,7 +751,6 @@
if (!authDigestNonceIsValid(digest_request->nonce, digest_request->nc)) {
debug(29, 3) ("authenticateDigestAuthenticateuser: user '%s' validated OK but nonce stale\n",
digest_user->username);
- digest_request->flags.nonce_stale = 1;
digest_request->flags.credentials_ok = 3;
safe_free(auth_user_request->message);
auth_user_request->message = xstrdup("Stale nonce");
@@ -781,11 +781,8 @@
return 0;
case 2: /* partway through checking. */
return -1;
- case 3: /* authentication process failed. */
- if (digest_request->flags.nonce_stale)
- /* nonce is stale, send new challenge */
- return 1;
- return -2;
+ case 3: /* authentication process failed. Challenge. */
+ return 1;
}
return -2;
}
@@ -855,7 +852,7 @@
digest_nonce_h *nonce = authenticateDigestNonceNew();
if (auth_user_request && auth_user_request->scheme_data) {
digest_request = auth_user_request->scheme_data;
- stale = digest_request->flags.nonce_stale;
+ stale = !digest_request->flags.invalid_password;
}
if (digestConfig->authenticate) {
debug(29, 9) ("authenticateFixHeader: Sending type:%d header: 'Digest realm=\"%s\", nonce=\"%s\", qop=\"%s\", stale=%s\n", type, digestConfig->digestAuthRealm, authenticateDigestNonceNonceb64(nonce), QOP_AUTH, stale ? "true" : "false");
@@ -911,6 +908,7 @@
digest_user = auth_user_request->auth_user->scheme_data;
if (reply && (strncasecmp(reply, "ERR", 3) == 0)) {
digest_request->flags.credentials_ok = 3;
+ digest_request->flags.invalid_password = 1;
safe_free(auth_user_request->message);
if (t && *t)
auth_user_request->message = xstrdup(t);
@@ -1273,10 +1271,7 @@
/* we couldn't find a matching nonce! */
debug(29, 4) ("authenticateDigestDecode: Unexpected or invalid nonce received\n");
authDigestLogUsername(auth_user_request, username);
-
- /* we don't need the scheme specific data anymore */
- authDigestRequestDelete(digest_request);
- auth_user_request->scheme_data = NULL;
+ auth_user_request->scheme_data = digest_request;
return;
}
digest_request->nonce = nonce;
@@ -1284,7 +1279,7 @@
/* check the qop is what we expected. Note that for compatability with
* RFC 2069 we should support a missing qop. Tough. */
- if (!digest_request->qop || strcmp(digest_request->qop, QOP_AUTH)) {
+ if (digest_request->qop && strcmp(digest_request->qop, QOP_AUTH) != 0) {
/* we received a qop option we didn't send */
debug(29, 4) ("authenticateDigestDecode: Invalid qop option received\n");
authDigestLogUsername(auth_user_request, username);
diff -ruN squid-2.6.STABLE17/src/auth/digest/auth_digest.h squid-2.6.STABLE18/src/auth/digest/auth_digest.h
--- squid-2.6.STABLE17/src/auth/digest/auth_digest.h 2006-07-08 15:26:26.000000000 +0200
+++ squid-2.6.STABLE18/src/auth/digest/auth_digest.h 2008-01-02 18:07:26.000000000 +0100
@@ -43,7 +43,7 @@
struct {
unsigned int authinfo_sent:1;
unsigned int credentials_ok:2; /*0=unchecked,1=ok,2=helper,3=failed */
- unsigned int nonce_stale:1;
+ unsigned int invalid_password:1;
unsigned int helper_queried:1;
} flags;
digest_nonce_h *nonce;
diff -ruN squid-2.6.STABLE17/src/cbdata.c squid-2.6.STABLE18/src/cbdata.c
--- squid-2.6.STABLE17/src/cbdata.c 2006-05-13 00:04:59.000000000 +0200
+++ squid-2.6.STABLE18/src/cbdata.c 2008-01-02 18:06:50.000000000 +0100
@@ -1,6 +1,6 @@
/*
- * $Id: cbdata.c,v 1.46 2006/05/12 22:04:59 hno Exp $
+ * $Id: cbdata.c,v 1.46.2.1 2008/01/02 17:06:50 hno Exp $
*
* DEBUG: section 45 Callback Data Registry
* ORIGINAL AUTHOR: Duane Wessels
@@ -122,7 +122,7 @@
}
#else
-#define OFFSET_OF(type, member) ((int)(char *)&((type *)0L)->member)
+#define OFFSET_OF(type, member) ((size_t)(char *)&((type *)0L)->member)
#endif
void
diff -ruN squid-2.6.STABLE17/src/HttpHeader.c squid-2.6.STABLE18/src/HttpHeader.c
--- squid-2.6.STABLE17/src/HttpHeader.c 2007-11-26 12:06:13.000000000 +0100
+++ squid-2.6.STABLE18/src/HttpHeader.c 2007-12-21 10:56:53.000000000 +0100
@@ -1,6 +1,6 @@
/*
- * $Id: HttpHeader.c,v 1.91.2.3 2007/11/26 11:06:13 adrian Exp $
+ * $Id: HttpHeader.c,v 1.91.2.4 2007/12/21 09:56:53 adrian Exp $
*
* DEBUG: section 55 HTTP Header
* AUTHOR: Alex Rousskov
@@ -391,7 +391,8 @@
pos = 0;
while (dp < hdr->entries.count) {
for (; dp < hdr->entries.count && hdr->entries.items[dp] == NULL; dp++);
- assert(dp < hdr->entries.count);
+ if (dp >= hdr->entries.count)
+ break;
hdr->entries.items[pos] = hdr->entries.items[dp];
if (dp != pos)
hdr->entries.items[dp] = NULL;
diff -ruN squid-2.6.STABLE17/src/MemPool.c squid-2.6.STABLE18/src/MemPool.c
--- squid-2.6.STABLE17/src/MemPool.c 2006-09-19 00:54:39.000000000 +0200
+++ squid-2.6.STABLE18/src/MemPool.c 2008-01-09 14:58:12.000000000 +0100
@@ -1,6 +1,6 @@
/*
- * $Id: MemPool.c,v 1.39 2006/09/18 22:54:39 hno Exp $
+ * $Id: MemPool.c,v 1.39.2.1 2008/01/09 13:58:12 hno Exp $
*
* DEBUG: section 63 Low Level Memory Pool Management
* AUTHOR: Alex Rousskov
@@ -266,16 +266,16 @@
gb_inc(&TheMeter.saved, pool->obj_size);
obj = stackPop(&pool->pstack);
#if DEBUG_MEMPOOL
- (void) VALGRIND_MAKE_READABLE(obj, pool->real_obj_size + sizeof(struct mempool_cookie));
+ (void) VALGRIND_MAKE_MEM_DEFINED(obj, pool->real_obj_size + sizeof(struct mempool_cookie));
#else
- (void) VALGRIND_MAKE_READABLE(obj, pool->obj_size);
+ (void) VALGRIND_MAKE_MEM_DEFINED(obj, pool->obj_size);
#endif
#if DEBUG_MEMPOOL
{
struct mempool_cookie *cookie = (void *) (((unsigned char *) obj) + pool->real_obj_size);
assert(cookie->cookie == MEMPOOL_COOKIE(obj));
assert(cookie->pool == pool);
- (void) VALGRIND_MAKE_NOACCESS(cookie, sizeof(cookie));
+ (void) VALGRIND_MAKE_MEM_NOACCESS(cookie, sizeof(cookie));
}
#endif
} else {
@@ -289,7 +289,7 @@
cookie = (struct mempool_cookie *) (((unsigned char *) obj) + pool->real_obj_size);
cookie->cookie = MEMPOOL_COOKIE(obj);
cookie->pool = pool;
- (void) VALGRIND_MAKE_NOACCESS(cookie, sizeof(cookie));
+ (void) VALGRIND_MAKE_MEM_NOACCESS(cookie, sizeof(cookie));
}
#else
obj = xcalloc(1, pool->obj_size);
@@ -305,11 +305,11 @@
memMeterDec(pool->meter.inuse);
memMeterDel(TheMeter.inuse, pool->obj_size);
mem_pool_free_calls++;
- (void) VALGRIND_CHECK_WRITABLE(obj, pool->obj_size);
+ (void) VALGRIND_CHECK_MEM_IS_ADDRESSABLE(obj, pool->obj_size);
#if DEBUG_MEMPOOL
{
struct mempool_cookie *cookie = (void *) (((unsigned char *) obj) + pool->real_obj_size);
- (void) VALGRIND_MAKE_READABLE(cookie, sizeof(cookie));
+ (void) VALGRIND_MAKE_MEM_DEFINED(cookie, sizeof(cookie));
assert(cookie->cookie == MEMPOOL_COOKIE(obj));
assert(cookie->pool == pool);
}
@@ -319,9 +319,9 @@
memMeterAdd(TheMeter.idle, pool->obj_size);
memset(obj, 0, pool->obj_size);
#if DEBUG_MEMPOOL
- (void) VALGRIND_MAKE_NOACCESS(obj, pool->real_obj_size + sizeof(struct mempool_cookie));
+ (void) VALGRIND_MAKE_MEM_NOACCESS(obj, pool->real_obj_size + sizeof(struct mempool_cookie));
#else
- (void) VALGRIND_MAKE_NOACCESS(obj, pool->obj_size);
+ (void) VALGRIND_MAKE_MEM_NOACCESS(obj, pool->obj_size);
#endif
stackPush(&pool->pstack, obj);
} else {
diff -ruN squid-2.6.STABLE17/src/pinger.c squid-2.6.STABLE18/src/pinger.c
--- squid-2.6.STABLE17/src/pinger.c 2006-05-22 21:20:30.000000000 +0200
+++ squid-2.6.STABLE18/src/pinger.c 2008-01-02 18:06:50.000000000 +0100
@@ -1,6 +1,6 @@
/*
- * $Id: pinger.c,v 1.50 2006/05/22 19:20:30 serassio Exp $
+ * $Id: pinger.c,v 1.50.2.1 2008/01/02 17:06:50 hno Exp $
*
* DEBUG: section 42 ICMP Pinger program
* AUTHOR: Duane Wessels
@@ -307,7 +307,7 @@
icmp->icmp_seq = (u_short) icmp_pkts_sent++;
echo = (icmpEchoData *) (icmp + 1);
echo->opcode = (unsigned char) opcode;
- echo->tv = current_time;
+ memcpy(&echo->tv, ¤t_time, sizeof(current_time));
icmp_pktsize += sizeof(struct timeval) + sizeof(char);
if (payload) {
if (len > MAX_PAYLOAD)
@@ -345,6 +345,7 @@
struct timeval now;
icmpEchoData *echo;
static pingerReplyData preply;
+ struct timeval tv;
if (pkt == NULL)
pkt = xmalloc(MAX_PKT_SZ);
@@ -380,7 +381,8 @@
preply.from = from.sin_addr;
preply.opcode = echo->opcode;
preply.hops = ipHops(ip->ip_ttl);
- preply.rtt = tvSubMsec(echo->tv, now);
+ memcpy(&tv, &echo->tv, sizeof(tv));
+ preply.rtt = tvSubMsec(tv, now);
preply.psize = n - iphdrlen - (sizeof(icmpEchoData) - MAX_PKT_SZ);
pingerSendtoSquid(&preply);
pingerLog(icmp, from.sin_addr, preply.rtt, preply.hops);
diff -ruN squid-2.6.STABLE17/src/squid.h squid-2.6.STABLE18/src/squid.h
--- squid-2.6.STABLE17/src/squid.h 2006-09-08 21:41:24.000000000 +0200
+++ squid-2.6.STABLE18/src/squid.h 2008-01-09 14:58:12.000000000 +0100
@@ -1,6 +1,6 @@
/*
- * $Id: squid.h,v 1.244 2006/09/08 19:41:24 serassio Exp $
+ * $Id: squid.h,v 1.244.2.1 2008/01/09 13:58:12 hno Exp $
*
* AUTHOR: Duane Wessels
*
@@ -529,12 +529,19 @@
*/
#if WITH_VALGRIND
#include
+#ifndef VALGRIND_MAKE_MEM_NOACCESS
+/* A little glue for older valgrind version prior to 3.2.0 */
+#define VALGRIND_MAKE_MEM_NOACCESS VALGRIND_MAKE_NOACCESS
+#define VALGRIND_MAME_MEM_UNDEFINED VALGRIND_MAME_WRITABLE
+#define VALGRIND_MAKE_MEM_DEFINED VALGRIND_MAKE_READABLE
+#define VALGRIND_CHECK_MEM_IS_ADDRESSABLE VALGRIND_CHECK_WRITABLE
+#endif
#else
-#define VALGRIND_MAKE_NOACCESS(a,b) (0)
-#define VALGRIND_MAKE_WRITABLE(a,b) (0)
-#define VALGRIND_MAKE_READABLE(a,b) (0)
-#define VALGRIND_CHECK_WRITABLE(a,b) (0)
-#define VALGRIND_CHECK_READABLE(a,b) (0)
+#define VALGRIND_MAKE_MEM_NOACCESS(a,b) (0)
+#define VALGRIND_MAKE_MEM_UNDEFINED(a,b) (0)
+#define VALGRIND_MAKE_MEM_DEFINED(a,b) (0)
+#define VALGRIND_CHECK_MEM_IS_ADDRESSABLE(a,b) (0)
+#define VALGRIND_CHECK_MEM_IS_DEFINED(a,b) (0)
#define VALGRIND_MALLOCLIKE_BLOCK(a,b,c,d)
#define VALGRIND_FREELIKE_BLOCK(a,b)
#define RUNNING_ON_VALGRIND 0
diff -ruN squid-2.6.STABLE17/src/tools.c squid-2.6.STABLE18/src/tools.c
--- squid-2.6.STABLE17/src/tools.c 2007-09-01 22:09:50.000000000 +0200
+++ squid-2.6.STABLE18/src/tools.c 2008-01-02 18:06:50.000000000 +0100
@@ -1,6 +1,6 @@
/*
- * $Id: tools.c,v 1.250.2.3 2007/09/01 20:09:50 hno Exp $
+ * $Id: tools.c,v 1.250.2.4 2008/01/02 17:06:50 hno Exp $
*
* DEBUG: section 21 Misc Functions
* AUTHOR: Harvest Derived
@@ -976,7 +976,7 @@
* 2 until it becomes positive again.
*/
kb_t x;
- x.kb = 1 << 31;
+ x.kb = 1L << 31;
while (x.kb && ((k->kb + x.kb) < 0)) {
x.kb <<= 1;
}
@@ -1295,7 +1295,7 @@
void
setUmask(mode_t mask)
{
- static mode_t orig_umask = ~0;
+ static mode_t orig_umask = (mode_t) ~ 0;
if (orig_umask == (mode_t) ~ 0) {
/* Unfortunately, there is no way to get the current
* umask value without setting it.