Sat, 06 Oct 2012 16:24:01 +0200
Update to new vendor software version and adjust patch code accordingly.
Unfortunately the vendor has apparently failed to properly test this
release which depends on missing object symbols in libsasl2.a(common.o):
undefined reference to `sasl_randcreate'
undefined reference to `sasl_mkchal'
undefined reference to `sasl_utf8verify'
undefined reference to `sasl_rand'
undefined reference to `sasl_churn'
undefined reference to `sasl_encode64'
undefined reference to `sasl_decode64'
undefined reference to `sasl_erasebuffer'
undefined reference to `sasl_randfree'
undefined reference to `sasl_strlower'
undefined reference to `get_fqhostname'
...yet to be patched.
michael@144 | 1 | Index: configure |
michael@144 | 2 | --- configure.orig 2006-05-18 21:30:13 +0200 |
michael@144 | 3 | +++ configure 2008-12-25 18:48:51 +0100 |
michael@727 | 4 | @@ -5015,9 +5015,6 @@ |
michael@144 | 5 | |
michael@144 | 6 | fi |
michael@144 | 7 | |
michael@144 | 8 | -if test "$ac_cv_c_compiler_gnu" = yes; then |
michael@144 | 9 | - CFLAGS="-Wall -W ${CFLAGS}" |
michael@144 | 10 | -fi |
michael@144 | 11 | |
michael@144 | 12 | |
michael@727 | 13 | # Check whether --with-purecov was given. |
michael@727 | 14 | @@ -6422,7 +6419,7 @@ |
michael@144 | 15 | fi |
michael@144 | 16 | |
michael@144 | 17 | saved_LIBS=$LIBS |
michael@727 | 18 | - for dbname in ${with_bdb} db-4.7 db4.7 db47 db-4.6 db4.6 db46 db-4.5 db4.5 db45 db-4.4 db4.4 db44 db-4.3 db4.3 db43 db-4.2 db4.2 db42 db-4.1 db4.1 db41 db-4.0 db4.0 db-4 db40 db4 db-3.3 db3.3 db33 db-3.2 db3.2 db32 db-3.1 db3.1 db31 db-3 db30 db3 db |
michael@144 | 19 | + for dbname in db |
michael@144 | 20 | do |
michael@144 | 21 | LIBS="$saved_LIBS -l$dbname" |
michael@144 | 22 | cat >conftest.$ac_ext <<_ACEOF |
michael@727 | 23 | @@ -6526,6 +6523,54 @@ |
michael@727 | 24 | rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ |
michael@727 | 25 | conftest$ac_exeext conftest.$ac_ext |
michael@144 | 26 | fi |
michael@144 | 27 | + if test "$dblib" = "no"; then |
michael@144 | 28 | + cat >conftest.$ac_ext <<_ACEOF |
michael@144 | 29 | +/* confdefs.h. */ |
michael@144 | 30 | +_ACEOF |
michael@144 | 31 | +cat confdefs.h >>conftest.$ac_ext |
michael@144 | 32 | +cat >>conftest.$ac_ext <<_ACEOF |
michael@144 | 33 | +/* end confdefs.h. */ |
michael@144 | 34 | +#include <db.h> |
michael@144 | 35 | +int |
michael@144 | 36 | +main () |
michael@144 | 37 | +{ |
michael@144 | 38 | +dbm_open(NULL, 0, 0, 0, NULL, NULL, NULL); |
michael@144 | 39 | + ; |
michael@144 | 40 | + return 0; |
michael@144 | 41 | +} |
michael@144 | 42 | +_ACEOF |
michael@144 | 43 | +rm -f conftest.$ac_objext conftest$ac_exeext |
michael@144 | 44 | +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 |
michael@144 | 45 | + (eval $ac_link) 2>conftest.er1 |
michael@144 | 46 | + ac_status=$? |
michael@144 | 47 | + grep -v '^ *+' conftest.er1 >conftest.err |
michael@144 | 48 | + rm -f conftest.er1 |
michael@144 | 49 | + cat conftest.err >&5 |
michael@144 | 50 | + echo "$as_me:$LINENO: \$? = $ac_status" >&5 |
michael@144 | 51 | + (exit $ac_status); } && |
michael@144 | 52 | + { ac_try='test -z "$ac_c_werror_flag" |
michael@144 | 53 | + || test ! -s conftest.err' |
michael@144 | 54 | + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 |
michael@144 | 55 | + (eval $ac_try) 2>&5 |
michael@144 | 56 | + ac_status=$? |
michael@144 | 57 | + echo "$as_me:$LINENO: \$? = $ac_status" >&5 |
michael@144 | 58 | + (exit $ac_status); }; } && |
michael@144 | 59 | + { ac_try='test -s conftest$ac_exeext' |
michael@144 | 60 | + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 |
michael@144 | 61 | + (eval $ac_try) 2>&5 |
michael@144 | 62 | + ac_status=$? |
michael@144 | 63 | + echo "$as_me:$LINENO: \$? = $ac_status" >&5 |
michael@144 | 64 | + (exit $ac_status); }; }; then |
michael@144 | 65 | + BDB_LIBADD="$BDB_LIBADD -ldb"; dblib="berkeley"; dbname=db |
michael@144 | 66 | +else |
michael@144 | 67 | + echo "$as_me: failed program was:" >&5 |
michael@144 | 68 | +sed 's/^/| /' conftest.$ac_ext >&5 |
michael@144 | 69 | + |
michael@144 | 70 | +dblib="no" |
michael@144 | 71 | +fi |
michael@144 | 72 | +rm -f conftest.err conftest.$ac_objext \ |
michael@144 | 73 | + conftest$ac_exeext conftest.$ac_ext |
michael@144 | 74 | + fi |
michael@144 | 75 | LIBS=$saved_LIBS |
michael@144 | 76 | |
michael@144 | 77 | LDFLAGS=$BDB_SAVE_LDFLAGS |
michael@727 | 78 | @@ -7232,7 +7277,7 @@ |
michael@144 | 79 | fi |
michael@144 | 80 | |
michael@144 | 81 | saved_LIBS=$LIBS |
michael@727 | 82 | - for dbname in ${with_bdb} db-4.7 db4.7 db47 db-4.6 db4.6 db46 db-4.5 db4.5 db45 db-4.4 db4.4 db44 db-4.3 db4.3 db43 db-4.2 db4.2 db42 db-4.1 db4.1 db41 db-4.0 db4.0 db-4 db40 db4 db-3.3 db3.3 db33 db-3.2 db3.2 db32 db-3.1 db3.1 db31 db-3 db30 db3 db |
michael@144 | 83 | + for dbname in db |
michael@144 | 84 | do |
michael@144 | 85 | LIBS="$saved_LIBS -l$dbname" |
michael@144 | 86 | cat >conftest.$ac_ext <<_ACEOF |
michael@727 | 87 | @@ -7336,6 +7381,54 @@ |
michael@727 | 88 | rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ |
michael@727 | 89 | conftest$ac_exeext conftest.$ac_ext |
michael@144 | 90 | fi |
michael@144 | 91 | + if test "$dblib" = "no"; then |
michael@144 | 92 | + cat >conftest.$ac_ext <<_ACEOF |
michael@144 | 93 | +/* confdefs.h. */ |
michael@144 | 94 | +_ACEOF |
michael@144 | 95 | +cat confdefs.h >>conftest.$ac_ext |
michael@144 | 96 | +cat >>conftest.$ac_ext <<_ACEOF |
michael@144 | 97 | +/* end confdefs.h. */ |
michael@144 | 98 | +#include <db.h> |
michael@144 | 99 | +int |
michael@144 | 100 | +main () |
michael@144 | 101 | +{ |
michael@144 | 102 | +dbm_open(NULL, 0, 0, 0, NULL, NULL, NULL); |
michael@144 | 103 | + ; |
michael@144 | 104 | + return 0; |
michael@144 | 105 | +} |
michael@144 | 106 | +_ACEOF |
michael@144 | 107 | +rm -f conftest.$ac_objext conftest$ac_exeext |
michael@144 | 108 | +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 |
michael@144 | 109 | + (eval $ac_link) 2>conftest.er1 |
michael@144 | 110 | + ac_status=$? |
michael@144 | 111 | + grep -v '^ *+' conftest.er1 >conftest.err |
michael@144 | 112 | + rm -f conftest.er1 |
michael@144 | 113 | + cat conftest.err >&5 |
michael@144 | 114 | + echo "$as_me:$LINENO: \$? = $ac_status" >&5 |
michael@144 | 115 | + (exit $ac_status); } && |
michael@144 | 116 | + { ac_try='test -z "$ac_c_werror_flag" |
michael@144 | 117 | + || test ! -s conftest.err' |
michael@144 | 118 | + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 |
michael@144 | 119 | + (eval $ac_try) 2>&5 |
michael@144 | 120 | + ac_status=$? |
michael@144 | 121 | + echo "$as_me:$LINENO: \$? = $ac_status" >&5 |
michael@144 | 122 | + (exit $ac_status); }; } && |
michael@144 | 123 | + { ac_try='test -s conftest$ac_exeext' |
michael@144 | 124 | + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 |
michael@144 | 125 | + (eval $ac_try) 2>&5 |
michael@144 | 126 | + ac_status=$? |
michael@144 | 127 | + echo "$as_me:$LINENO: \$? = $ac_status" >&5 |
michael@144 | 128 | + (exit $ac_status); }; }; then |
michael@144 | 129 | + BDB_LIBADD="$BDB_LIBADD -ldb"; dblib="berkeley"; dbname=db |
michael@144 | 130 | +else |
michael@144 | 131 | + echo "$as_me: failed program was:" >&5 |
michael@144 | 132 | +sed 's/^/| /' conftest.$ac_ext >&5 |
michael@144 | 133 | + |
michael@144 | 134 | +dblib="no" |
michael@144 | 135 | +fi |
michael@144 | 136 | +rm -f conftest.err conftest.$ac_objext \ |
michael@144 | 137 | + conftest$ac_exeext conftest.$ac_ext |
michael@144 | 138 | + fi |
michael@144 | 139 | LIBS=$saved_LIBS |
michael@144 | 140 | |
michael@144 | 141 | LDFLAGS=$BDB_SAVE_LDFLAGS |
michael@727 | 142 | @@ -14476,20 +14569,20 @@ |
michael@144 | 143 | fi |
michael@144 | 144 | |
michael@144 | 145 | LIB_SQLITE_DIR=$LIB_SQLITE |
michael@144 | 146 | - LIB_SQLITE="$LIB_SQLITE -lsqlite" |
michael@144 | 147 | + LIB_SQLITE="$LIB_SQLITE -lsqlite3" |
michael@144 | 148 | |
michael@144 | 149 | if test -d ${with_sqlite}/include; then |
michael@144 | 150 | CPPFLAGS="${CPPFLAGS} -I${with_sqlite}/include" |
michael@144 | 151 | else |
michael@144 | 152 | CPPFLAGS="${CPPFLAGS} -I${with_sqlite}" |
michael@144 | 153 | fi |
michael@727 | 154 | - { $as_echo "$as_me:$LINENO: checking for sqlite_open in -lsqlite" >&5 |
michael@727 | 155 | -$as_echo_n "checking for sqlite_open in -lsqlite... " >&6; } |
michael@144 | 156 | + echo "$as_me:$LINENO: checking for sqlite3_open in -lsqlite3" >&5 |
michael@144 | 157 | +echo $ECHO_N "checking for sqlite3_open in -lsqlite3... $ECHO_C" >&6 |
michael@144 | 158 | if test "${ac_cv_lib_sqlite_sqlite_open+set}" = set; then |
michael@727 | 159 | $as_echo_n "(cached) " >&6 |
michael@144 | 160 | else |
michael@144 | 161 | ac_check_lib_save_LIBS=$LIBS |
michael@144 | 162 | -LIBS="-lsqlite $LIB_SQLITE_DIR $LIBS" |
michael@144 | 163 | +LIBS="-lsqlite3 $LIB_SQLITE_DIR $LIBS" |
michael@144 | 164 | cat >conftest.$ac_ext <<_ACEOF |
michael@144 | 165 | /* confdefs.h. */ |
michael@727 | 166 | _ACEOF |
michael@727 | 167 | @@ -14503,11 +14596,11 @@ |
michael@727 | 168 | #ifdef __cplusplus |
michael@727 | 169 | extern "C" |
michael@144 | 170 | #endif |
michael@144 | 171 | -char sqlite_open (); |
michael@144 | 172 | +char sqlite3_open (); |
michael@144 | 173 | int |
michael@144 | 174 | main () |
michael@144 | 175 | { |
michael@727 | 176 | -return sqlite_open (); |
michael@727 | 177 | +return sqlite3_open (); |
michael@144 | 178 | ; |
michael@144 | 179 | return 0; |
michael@144 | 180 | } |
michael@144 | 181 | Index: lib/saslint.h |
michael@144 | 182 | --- lib/saslint.h.orig 2006-04-18 22:25:45 +0200 |
michael@144 | 183 | +++ lib/saslint.h 2008-12-25 18:48:51 +0100 |
michael@727 | 184 | @@ -118,8 +118,6 @@ |
michael@144 | 185 | const char *appname; |
michael@144 | 186 | } sasl_global_callbacks_t; |
michael@144 | 187 | |
michael@144 | 188 | -extern sasl_global_callbacks_t global_callbacks; |
michael@144 | 189 | - |
michael@144 | 190 | typedef struct _sasl_external_properties |
michael@144 | 191 | { |
michael@144 | 192 | sasl_ssf_t ssf; |
michael@144 | 193 | Index: lib/server.c |
michael@144 | 194 | --- lib/server.c.orig 2006-05-17 18:46:13 +0200 |
michael@144 | 195 | +++ lib/server.c 2008-12-25 18:48:51 +0100 |
michael@727 | 196 | @@ -90,7 +90,7 @@ |
michael@144 | 197 | |
michael@144 | 198 | static mech_list_t *mechlist = NULL; /* global var which holds the list */ |
michael@144 | 199 | |
michael@144 | 200 | -sasl_global_callbacks_t global_callbacks; |
michael@144 | 201 | +static sasl_global_callbacks_t global_callbacks; |
michael@144 | 202 | |
michael@144 | 203 | /* set the password for a user |
michael@144 | 204 | * conn -- SASL connection |
michael@727 | 205 | @@ -606,16 +606,8 @@ |
michael@144 | 206 | return SASL_CONTINUE; |
michael@144 | 207 | } |
michael@144 | 208 | |
michael@144 | 209 | - /* get the path to the config file */ |
michael@144 | 210 | - getconfpath_cb = _sasl_find_getconfpath_callback( global_callbacks.callbacks ); |
michael@144 | 211 | - if (getconfpath_cb == NULL) return SASL_BADPARAM; |
michael@144 | 212 | - |
michael@144 | 213 | - /* getconfpath_cb->proc MUST be a sasl_getconfpath_t; if only C had a type |
michael@144 | 214 | - system */ |
michael@144 | 215 | - result = ((sasl_getconfpath_t *)(getconfpath_cb->proc))(getconfpath_cb->context, |
michael@727 | 216 | - (char **) &path_to_config); |
michael@144 | 217 | - if (result != SASL_OK) goto done; |
michael@144 | 218 | - if (path_to_config == NULL) path_to_config = ""; |
michael@144 | 219 | + result = SASL_OK; |
michael@144 | 220 | + path_to_config = "@l_sysconfdir@"; |
michael@144 | 221 | |
michael@144 | 222 | next = path_to_config; |
michael@144 | 223 | |
michael@144 | 224 | Index: plugins/sql.c |
michael@144 | 225 | --- plugins/sql.c.orig 2006-04-07 15:42:16 +0200 |
michael@144 | 226 | +++ plugins/sql.c 2008-12-25 21:57:47 +0100 |
michael@144 | 227 | @@ -150,9 +150,15 @@ |
michael@144 | 228 | return -1; |
michael@144 | 229 | } |
michael@144 | 230 | if (value) { |
michael@144 | 231 | - strncpy(value, row[0], size-2); |
michael@144 | 232 | - value[size-1] = '\0'; |
michael@144 | 233 | - if (value_len) *value_len = strlen(value); |
michael@144 | 234 | + unsigned long *col_lens; |
michael@144 | 235 | + size_t col_len; |
michael@144 | 236 | + col_lens = mysql_fetch_lengths(result); |
michael@144 | 237 | + col_len = (size_t)col_lens[0]; |
michael@144 | 238 | + if (col_len > size - 1); |
michael@144 | 239 | + col_len = size - 1; |
michael@144 | 240 | + memcpy(value, row[0], col_len); |
michael@144 | 241 | + value[col_len] = '\0'; |
michael@144 | 242 | + if (value_len) *value_len = col_len; |
michael@144 | 243 | } |
michael@144 | 244 | |
michael@144 | 245 | /* free result */ |
michael@144 | 246 | @@ -277,7 +283,7 @@ |
michael@144 | 247 | ExecStatusType status; |
michael@144 | 248 | |
michael@144 | 249 | /* run the query */ |
michael@144 | 250 | - result = PQexec(conn, cmd); |
michael@144 | 251 | + result = PQexecParams(conn, cmd, 0, NULL, NULL, NULL, NULL, 1); |
michael@144 | 252 | |
michael@144 | 253 | /* check the status */ |
michael@144 | 254 | status = PQresultStatus(result); |
michael@144 | 255 | @@ -298,6 +304,7 @@ |
michael@144 | 256 | row_count = PQntuples(result); |
michael@144 | 257 | if (!row_count) { |
michael@144 | 258 | /* umm nothing found */ |
michael@144 | 259 | + utils->log(NULL, SASL_LOG_DEBUG, "sql plugin: no result found for query %s", cmd); |
michael@144 | 260 | utils->log(NULL, SASL_LOG_NOTE, "sql plugin: no result found"); |
michael@144 | 261 | PQclear(result); |
michael@144 | 262 | return -1; |
michael@144 | 263 | @@ -310,9 +317,26 @@ |
michael@144 | 264 | /* now get the result set value and value_len */ |
michael@144 | 265 | /* we only fetch one because we don't care about the rest */ |
michael@144 | 266 | if (value) { |
michael@144 | 267 | - strncpy(value, PQgetvalue(result,0,0), size-2); |
michael@144 | 268 | - value[size-1] = '\0'; |
michael@144 | 269 | - if (value_len) *value_len = strlen(value); |
michael@144 | 270 | + if (PQgetisnull(result, 0, 0)) { |
michael@144 | 271 | + size_t col_len; |
michael@144 | 272 | + col_len = strlen(SQL_NULL_VALUE); |
michael@144 | 273 | + if (col_len > size - 1) |
michael@144 | 274 | + col_len = size - 1; |
michael@144 | 275 | + memcpy(value, SQL_NULL_VALUE, col_len); |
michael@144 | 276 | + value[col_len] = '\0'; |
michael@144 | 277 | + if (value_len) |
michael@144 | 278 | + *value_len = col_len; |
michael@144 | 279 | + } |
michael@144 | 280 | + else { |
michael@144 | 281 | + size_t col_len; |
michael@144 | 282 | + col_len = (size_t)PQgetlength(result, 0, 0); |
michael@144 | 283 | + if (col_len > size - 1); |
michael@144 | 284 | + col_len = size - 1; |
michael@144 | 285 | + memcpy(value, PQgetvalue(result, 0, 0), col_len); |
michael@144 | 286 | + value[col_len] = '\0'; |
michael@144 | 287 | + if (value_len) |
michael@144 | 288 | + *value_len = col_len; |
michael@144 | 289 | + } |
michael@144 | 290 | } |
michael@144 | 291 | |
michael@144 | 292 | /* free result */ |
michael@144 | 293 | @@ -342,7 +366,7 @@ |
michael@144 | 294 | #endif /* HAVE_PGSQL */ |
michael@144 | 295 | |
michael@144 | 296 | #ifdef HAVE_SQLITE |
michael@144 | 297 | -#include <sqlite.h> |
michael@144 | 298 | +#include <sqlite3.h> |
michael@144 | 299 | |
michael@144 | 300 | static void *_sqlite_open(char *host __attribute__((unused)), |
michael@144 | 301 | char *port __attribute__((unused)), |
michael@144 | 302 | @@ -352,21 +376,23 @@ |
michael@144 | 303 | const char *database, const sasl_utils_t *utils) |
michael@144 | 304 | { |
michael@144 | 305 | int rc; |
michael@144 | 306 | - sqlite *db; |
michael@144 | 307 | + sqlite3 *db; |
michael@144 | 308 | char *zErrMsg = NULL; |
michael@144 | 309 | |
michael@144 | 310 | - db = sqlite_open(database, 0, &zErrMsg); |
michael@144 | 311 | - if (db == NULL) { |
michael@144 | 312 | + rc = sqlite3_open(database, &db); |
michael@144 | 313 | + if (rc != SQLITE_OK) { |
michael@144 | 314 | + zErrMsg = (char *)sqlite3_errmsg(db); |
michael@144 | 315 | utils->log(NULL, SASL_LOG_ERR, "sql plugin: %s", zErrMsg); |
michael@144 | 316 | - sqlite_freemem (zErrMsg); |
michael@144 | 317 | + sqlite3_free (zErrMsg); |
michael@144 | 318 | + sqlite3_close (db); |
michael@144 | 319 | return NULL; |
michael@144 | 320 | } |
michael@144 | 321 | |
michael@144 | 322 | - rc = sqlite_exec(db, "PRAGMA empty_result_callbacks = ON", NULL, NULL, &zErrMsg); |
michael@144 | 323 | + rc = sqlite3_exec(db, "PRAGMA empty_result_callbacks = ON", NULL, NULL, &zErrMsg); |
michael@144 | 324 | if (rc != SQLITE_OK) { |
michael@144 | 325 | utils->log(NULL, SASL_LOG_ERR, "sql plugin: %s", zErrMsg); |
michael@144 | 326 | - sqlite_freemem (zErrMsg); |
michael@144 | 327 | - sqlite_close(db); |
michael@144 | 328 | + sqlite3_free (zErrMsg); |
michael@144 | 329 | + sqlite3_close(db); |
michael@144 | 330 | return NULL; |
michael@144 | 331 | } |
michael@144 | 332 | |
michael@144 | 333 | @@ -388,62 +414,67 @@ |
michael@144 | 334 | return 0; |
michael@144 | 335 | } |
michael@144 | 336 | |
michael@144 | 337 | -static int sqlite_my_callback(void *pArg, int argc __attribute__((unused)), |
michael@144 | 338 | - char **argv, |
michael@144 | 339 | - char **columnNames __attribute__((unused))) |
michael@144 | 340 | -{ |
michael@144 | 341 | - char **result = (char**)pArg; |
michael@144 | 342 | - |
michael@144 | 343 | - if (argv == NULL) { |
michael@144 | 344 | - *result = NULL; /* no record */ |
michael@144 | 345 | - } else if (argv[0] == NULL) { |
michael@144 | 346 | - *result = strdup(SQL_NULL_VALUE); /* NULL IS SQL_NULL_VALUE */ |
michael@144 | 347 | - } else { |
michael@144 | 348 | - *result = strdup(argv[0]); |
michael@144 | 349 | - } |
michael@144 | 350 | - |
michael@144 | 351 | - return /*ABORT*/1; |
michael@144 | 352 | -} |
michael@144 | 353 | - |
michael@144 | 354 | static int _sqlite_exec(void *db, const char *cmd, char *value, size_t size, |
michael@144 | 355 | size_t *value_len, const sasl_utils_t *utils) |
michael@144 | 356 | { |
michael@144 | 357 | int rc; |
michael@144 | 358 | - char *result = NULL; |
michael@144 | 359 | - char *zErrMsg = NULL; |
michael@144 | 360 | + sqlite3_stmt *stmt; |
michael@144 | 361 | + const char *todo; |
michael@144 | 362 | + size_t len; |
michael@144 | 363 | |
michael@144 | 364 | - rc = sqlite_exec((sqlite*)db, cmd, sqlite_my_callback, (void*)&result, &zErrMsg); |
michael@144 | 365 | - if (rc != SQLITE_OK && rc != SQLITE_ABORT) { |
michael@144 | 366 | - utils->log(NULL, SASL_LOG_DEBUG, "sql plugin: %s ", zErrMsg); |
michael@144 | 367 | - sqlite_freemem (zErrMsg); |
michael@144 | 368 | + rc = sqlite3_prepare((sqlite3*)db, cmd, (int)strlen(cmd), &stmt, &todo); |
michael@144 | 369 | + if (rc != SQLITE_OK) { |
michael@144 | 370 | + utils->log(NULL, SASL_LOG_DEBUG, "sql plugin error: %s", sqlite3_errmsg((sqlite3*)db)); |
michael@144 | 371 | return -1; |
michael@144 | 372 | } |
michael@144 | 373 | - |
michael@144 | 374 | - if (rc == SQLITE_OK) { |
michael@144 | 375 | + rc = sqlite3_step(stmt); |
michael@144 | 376 | + if (rc != SQLITE_ROW && rc != SQLITE_DONE) { |
michael@144 | 377 | + utils->log(NULL, SASL_LOG_DEBUG, "sql plugin error: %s", sqlite3_errmsg((sqlite3*)db)); |
michael@144 | 378 | + sqlite3_finalize(stmt); |
michael@144 | 379 | + return -1; |
michael@144 | 380 | + } |
michael@144 | 381 | + if (sqlite3_column_count(stmt) == 0) { |
michael@144 | 382 | /* no results (BEGIN, COMMIT, DELETE, INSERT, UPDATE) */ |
michael@144 | 383 | + sqlite3_finalize(stmt); |
michael@144 | 384 | return 0; |
michael@144 | 385 | } |
michael@144 | 386 | - |
michael@144 | 387 | - if (result == NULL) { |
michael@144 | 388 | + if (rc == SQLITE_DONE) { |
michael@144 | 389 | /* umm nothing found */ |
michael@144 | 390 | + utils->log(NULL, SASL_LOG_DEBUG, "sql plugin: no result found for query %s", cmd); |
michael@144 | 391 | utils->log(NULL, SASL_LOG_NOTE, "sql plugin: no result found"); |
michael@144 | 392 | + sqlite3_finalize(stmt); |
michael@144 | 393 | return -1; |
michael@144 | 394 | } |
michael@144 | 395 | - |
michael@144 | 396 | - /* XXX: Duplication cannot be found by this method. */ |
michael@144 | 397 | - |
michael@144 | 398 | - /* now get the result set value and value_len */ |
michael@144 | 399 | - /* we only fetch one because we don't care about the rest */ |
michael@144 | 400 | - if (value) { |
michael@144 | 401 | - strncpy(value, result, size - 2); |
michael@144 | 402 | - value[size - 1] = '\0'; |
michael@144 | 403 | - if (value_len) { |
michael@144 | 404 | - *value_len = strlen(value); |
michael@144 | 405 | - } |
michael@144 | 406 | + rc = sqlite3_column_type(stmt, 0); |
michael@144 | 407 | + switch (rc) { |
michael@144 | 408 | + case SQLITE_NULL: { |
michael@144 | 409 | + len = strlen(SQL_NULL_VALUE); |
michael@144 | 410 | + if (len > size - 1) |
michael@144 | 411 | + len = size - 1; |
michael@144 | 412 | + memcpy(value, SQL_NULL_VALUE, len); |
michael@144 | 413 | + value[len] = '\0'; |
michael@144 | 414 | + if (value_len) |
michael@144 | 415 | + *value_len = len; |
michael@144 | 416 | + break; |
michael@144 | 417 | + } |
michael@144 | 418 | + default: { |
michael@144 | 419 | + const void *blob = sqlite3_column_blob(stmt, 0); |
michael@144 | 420 | + len = (size_t)sqlite3_column_bytes(stmt, 0); |
michael@144 | 421 | + if (len > size - 1) |
michael@144 | 422 | + len = size - 1; |
michael@144 | 423 | + memcpy(value, blob, len); |
michael@144 | 424 | + value[len] = '\0'; |
michael@144 | 425 | + if (value_len) |
michael@144 | 426 | + *value_len = len; |
michael@144 | 427 | + break; |
michael@144 | 428 | + } |
michael@144 | 429 | } |
michael@144 | 430 | - |
michael@144 | 431 | - /* free result */ |
michael@144 | 432 | - free(result); |
michael@144 | 433 | + rc = sqlite3_step(stmt); |
michael@144 | 434 | + if (rc != SQLITE_DONE) { |
michael@144 | 435 | + utils->log(NULL, SASL_LOG_WARN, |
michael@144 | 436 | + "sql plugin: found duplicate row for query %s", cmd); |
michael@144 | 437 | + } |
michael@144 | 438 | + sqlite3_finalize(stmt); |
michael@144 | 439 | return 0; |
michael@144 | 440 | } |
michael@144 | 441 | |
michael@144 | 442 | @@ -464,7 +495,7 @@ |
michael@144 | 443 | |
michael@144 | 444 | static void _sqlite_close(void *db) |
michael@144 | 445 | { |
michael@144 | 446 | - sqlite_close((sqlite*)db); |
michael@144 | 447 | + sqlite3_close((sqlite3 *)db); |
michael@144 | 448 | } |
michael@144 | 449 | #endif /* HAVE_SQLITE */ |
michael@144 | 450 | |
michael@727 | 451 | @@ -918,7 +949,7 @@ |
michael@144 | 452 | settings = (sql_settings_t *) glob_context; |
michael@144 | 453 | |
michael@144 | 454 | sparams->utils->log(NULL, SASL_LOG_DEBUG, |
michael@144 | 455 | - "sql plugin Parse the username %s\n", user); |
michael@144 | 456 | + "sql plugin parse the username %s\n", user); |
michael@144 | 457 | |
michael@144 | 458 | user_buf = sparams->utils->malloc(ulen + 1); |
michael@727 | 459 | if (!user_buf) { |
michael@727 | 460 | @@ -1022,7 +1053,7 @@ |
michael@144 | 461 | } |
michael@144 | 462 | |
michael@144 | 463 | sparams->utils->log(NULL, SASL_LOG_DEBUG, |
michael@144 | 464 | - "sql plugin create statement from %s %s %s\n", |
michael@144 | 465 | + "sql plugin create statement from name=%s user=%s realm=%s\n", |
michael@144 | 466 | realname, escap_userid, escap_realm); |
michael@144 | 467 | |
michael@144 | 468 | /* create a statement that we will use */ |
michael@727 | 469 | @@ -1043,12 +1074,18 @@ |
michael@144 | 470 | /* run the query */ |
michael@144 | 471 | if (!settings->sql_engine->sql_exec(conn, query, value, sizeof(value), |
michael@144 | 472 | &value_len, sparams->utils)) { |
michael@144 | 473 | + sparams->utils->log(NULL, SASL_LOG_DEBUG, |
michael@144 | 474 | + "sql plugin query successful\n"); |
michael@727 | 475 | sparams->utils->prop_set(sparams->propctx, |
michael@727 | 476 | cur->name, |
michael@727 | 477 | value, |
michael@727 | 478 | (int)value_len); |
michael@727 | 479 | ret = SASL_OK; |
michael@144 | 480 | } |
michael@144 | 481 | + else { |
michael@144 | 482 | + sparams->utils->log(NULL, SASL_LOG_DEBUG, |
michael@144 | 483 | + "sql plugin query failed\n"); |
michael@144 | 484 | + } |
michael@144 | 485 | |
michael@144 | 486 | sparams->utils->free(query); |
michael@144 | 487 | } |
michael@144 | 488 | Index: sample/client.c |
michael@144 | 489 | --- sample/client.c.orig 2004-03-09 18:35:32 +0100 |
michael@144 | 490 | +++ sample/client.c 2008-12-25 18:48:51 +0100 |
michael@727 | 491 | @@ -137,13 +137,11 @@ |
michael@144 | 492 | return SASL_OK; |
michael@144 | 493 | } |
michael@144 | 494 | |
michael@144 | 495 | -#ifndef HAVE_GETPASSPHRASE |
michael@144 | 496 | static char * |
michael@144 | 497 | -getpassphrase(const char *prompt) |
michael@144 | 498 | +my_getpassphrase(const char *prompt) |
michael@144 | 499 | { |
michael@144 | 500 | return getpass(prompt); |
michael@144 | 501 | } |
michael@144 | 502 | -#endif /* ! HAVE_GETPASSPHRASE */ |
michael@144 | 503 | |
michael@144 | 504 | static int |
michael@144 | 505 | getsecret(sasl_conn_t *conn, |
michael@727 | 506 | @@ -159,7 +157,7 @@ |
michael@144 | 507 | if (! conn || ! psecret || id != SASL_CB_PASS) |
michael@144 | 508 | return SASL_BADPARAM; |
michael@144 | 509 | |
michael@144 | 510 | - password = getpassphrase("Password: "); |
michael@144 | 511 | + password = my_getpassphrase("Password: "); |
michael@144 | 512 | if (! password) |
michael@144 | 513 | return SASL_FAIL; |
michael@144 | 514 | |
michael@144 | 515 | Index: sample/sample-client.c |
michael@144 | 516 | --- sample/sample-client.c.orig 2004-10-26 13:14:33 +0200 |
michael@144 | 517 | +++ sample/sample-client.c 2008-12-25 18:48:51 +0100 |
michael@727 | 518 | @@ -245,13 +245,11 @@ |
michael@144 | 519 | return SASL_OK; |
michael@144 | 520 | } |
michael@144 | 521 | |
michael@144 | 522 | -#ifndef HAVE_GETPASSPHRASE |
michael@144 | 523 | static char * |
michael@144 | 524 | -getpassphrase(const char *prompt) |
michael@144 | 525 | +my_getpassphrase(const char *prompt) |
michael@144 | 526 | { |
michael@144 | 527 | return getpass(prompt); |
michael@144 | 528 | } |
michael@144 | 529 | -#endif /* ! HAVE_GETPASSPHRASE */ |
michael@144 | 530 | |
michael@144 | 531 | static int |
michael@144 | 532 | getsecret(sasl_conn_t *conn, |
michael@727 | 533 | @@ -265,7 +263,7 @@ |
michael@144 | 534 | if (! conn || ! psecret || id != SASL_CB_PASS) |
michael@144 | 535 | return SASL_BADPARAM; |
michael@144 | 536 | |
michael@144 | 537 | - password = getpassphrase("Password: "); |
michael@144 | 538 | + password = my_getpassphrase("Password: "); |
michael@144 | 539 | if (! password) |
michael@144 | 540 | return SASL_FAIL; |
michael@144 | 541 | |
michael@727 | 542 | @@ -308,7 +306,7 @@ |
michael@144 | 543 | fflush(stdout); |
michael@144 | 544 | |
michael@144 | 545 | if (id == SASL_CB_ECHOPROMPT) { |
michael@144 | 546 | - char *original = getpassphrase(""); |
michael@144 | 547 | + char *original = my_getpassphrase(""); |
michael@144 | 548 | if (! original) |
michael@144 | 549 | return SASL_FAIL; |
michael@144 | 550 | if (*original) |
michael@144 | 551 | Index: saslauthd/Makefile.am |
michael@144 | 552 | --- saslauthd/Makefile.am.orig 2006-05-17 18:46:17 +0200 |
michael@144 | 553 | +++ saslauthd/Makefile.am 2008-12-25 18:48:51 +0100 |
michael@144 | 554 | @@ -36,4 +36,4 @@ |
michael@144 | 555 | |
michael@144 | 556 | install-data-local: saslauthd.8 |
michael@144 | 557 | $(mkinstalldirs) $(DESTDIR)$(mandir)/man8 |
michael@144 | 558 | - $(INSTALL_DATA) $(srcdir)/saslauthd.8 $(DESTDIR)$(mandir)/man8/saslauthd.8 |
michael@144 | 559 | + $(INSTALL_DATA) $(srcdir)/saslauthd.mdoc $(DESTDIR)$(mandir)/man8/saslauthd.8 |
michael@144 | 560 | Index: saslauthd/Makefile.in |
michael@144 | 561 | --- saslauthd/Makefile.in.orig 2008-12-25 18:48:51 +0100 |
michael@144 | 562 | +++ saslauthd/Makefile.in 2008-12-25 18:48:51 +0100 |
michael@727 | 563 | @@ -722,7 +722,7 @@ |
michael@144 | 564 | |
michael@144 | 565 | install-data-local: saslauthd.8 |
michael@144 | 566 | $(mkinstalldirs) $(DESTDIR)$(mandir)/man8 |
michael@144 | 567 | - $(INSTALL_DATA) $(srcdir)/saslauthd.8 $(DESTDIR)$(mandir)/man8/saslauthd.8 |
michael@144 | 568 | + $(INSTALL_DATA) $(srcdir)/saslauthd.mdoc $(DESTDIR)$(mandir)/man8/saslauthd.8 |
michael@727 | 569 | |
michael@144 | 570 | # Tell versions [3.59,3.63) of GNU make to not export all variables. |
michael@144 | 571 | # Otherwise a system limit (for SysV at least) may be exceeded. |
michael@144 | 572 | Index: saslauthd/lak.c |
michael@144 | 573 | --- saslauthd/lak.c.orig 2005-05-15 07:49:51 +0200 |
michael@144 | 574 | +++ saslauthd/lak.c 2008-12-25 18:48:51 +0100 |
michael@144 | 575 | @@ -47,6 +47,7 @@ |
michael@144 | 576 | #include <crypt.h> |
michael@144 | 577 | #endif |
michael@144 | 578 | |
michael@144 | 579 | +#include "saslauthd.h" /* get strlcpy macro for non-BSD; get HAVE_OPENSSL from config.h */ |
michael@144 | 580 | #ifdef HAVE_OPENSSL |
michael@144 | 581 | #ifndef OPENSSL_DISABLE_OLD_DES_SUPPORT |
michael@144 | 582 | #define OPENSSL_DISABLE_OLD_DES_SUPPORT |
michael@727 | 583 | @@ -58,7 +59,7 @@ |
michael@727 | 584 | #define LDAP_DEPRECATED 1 |
michael@144 | 585 | #include <ldap.h> |
michael@144 | 586 | #include <lber.h> |
michael@144 | 587 | -#include <sasl.h> |
michael@144 | 588 | +#include "sasl.h" |
michael@144 | 589 | #include "lak.h" |
michael@144 | 590 | |
michael@144 | 591 | typedef struct lak_auth_method { |