This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "GNU gsasl".
http://git.savannah.gnu.org/cgit/gsasl.git/commit/?id=f9894d7e290b5dfbc8d6e4cce547ac4b86a2deac The branch, master has been updated via f9894d7e290b5dfbc8d6e4cce547ac4b86a2deac (commit) via 47ddc5e81828409159005132133de7d3367611c7 (commit) via d2bb55317f8dc3b92d2ab5422074347eed44021a (commit) via e326fe155218ed34a1db01064c7ff9eab2ed6016 (commit) via 981875ef81fd49382d2656bf5f23dcbeaf9858a5 (commit) from 9dd66728280d38a478c4d2c5e015b435b9297145 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit f9894d7e290b5dfbc8d6e4cce547ac4b86a2deac Author: Simon Josefsson <[email protected]> Date: Thu Mar 18 10:56:41 2010 +0100 Also need gperf. commit 47ddc5e81828409159005132133de7d3367611c7 Author: Simon Josefsson <[email protected]> Date: Wed Mar 17 15:32:11 2010 +0100 Fix self test to handle modified DIGEST-MD5 behaviour. commit d2bb55317f8dc3b92d2ab5422074347eed44021a Author: Simon Josefsson <[email protected]> Date: Wed Mar 17 14:58:56 2010 +0100 Also test server goes first. commit e326fe155218ed34a1db01064c7ff9eab2ed6016 Author: Simon Josefsson <[email protected]> Date: Wed Mar 17 14:50:25 2010 +0100 Also test client-goes-first. commit 981875ef81fd49382d2656bf5f23dcbeaf9858a5 Author: Simon Josefsson <[email protected]> Date: Wed Mar 17 14:49:34 2010 +0100 DIGEST-MD5: The server code now returns GSASL_OK after the final token. ----------------------------------------------------------------------- Summary of changes: README-alpha | 4 +- lib/NEWS | 2 + lib/digest-md5/server.c | 8 +-- tests/digest-md5.c | 157 ++++++++++++++++++++++++++++++++++++++++------ tests/old-digest-md5.c | 22 +------ tests/scram.c | 31 ++++++++- 6 files changed, 171 insertions(+), 53 deletions(-) diff --git a/README-alpha b/README-alpha index d2aac81..ab2f717 100644 --- a/README-alpha +++ b/README-alpha @@ -1,5 +1,5 @@ GNU SASL README-alpha -- Information for developers. -*- outline -*- -Copyright (C) 2009 Simon Josefsson +Copyright (C) 2009, 2010 Simon Josefsson See the end for copying conditions. This file contains instructions for developers and advanced users that @@ -34,7 +34,7 @@ gNewSense/Debian/Ubuntu: sudo apt-get install git-core autoconf automake libtool gettext cvs sudo apt-get install texinfo texlive texlive-generic-recommended texlive-extra-utils sudo apt-get install help2man gtk-doc-tools valgrind -sudo apt-get install dia libgnutls-dev gengetopt +sudo apt-get install dia libgnutls-dev gengetopt gperf To download the version controlled sources: diff --git a/lib/NEWS b/lib/NEWS index 34b6fad..b9cfbcb 100644 --- a/lib/NEWS +++ b/lib/NEWS @@ -15,6 +15,8 @@ they are compatible in modern releases. ** SCRAM: Encode and decode username/authzid properly. Before any username/authzid that contained '=' or ',' would not work. +** DIGEST-MD5: The server code now returns GSASL_OK after the final token. + ** API and ABI modifications. No changes since last version. diff --git a/lib/digest-md5/server.c b/lib/digest-md5/server.c index 901f32f..ea5ce38 100644 --- a/lib/digest-md5/server.c +++ b/lib/digest-md5/server.c @@ -1,5 +1,5 @@ /* server.c --- DIGEST-MD5 mechanism from RFC 2831, server side. - * Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 Simon Josefsson + * Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Simon Josefsson * * This file is part of GNU SASL Library. * @@ -321,12 +321,6 @@ _gsasl_digest_md5_server_step (Gsasl_session * sctx, *output_len = strlen (*output); state->step++; - res = GSASL_NEEDS_MORE; - break; - - case 2: - *output_len = 0; - state->step++; res = GSASL_OK; break; diff --git a/tests/digest-md5.c b/tests/digest-md5.c index 7f59c34..4616d47 100644 --- a/tests/digest-md5.c +++ b/tests/digest-md5.c @@ -202,9 +202,9 @@ doit (void) return; } - /* Server begins... */ + /* Client sends empty token... */ - res = gsasl_step (server, NULL, 0, &s1, &s1len); + res = gsasl_step (client, NULL, 0, &s1, &s1len); if (res != GSASL_NEEDS_MORE) { fail ("gsasl_step(1) failed (%d):\n%s\n", res, @@ -213,11 +213,11 @@ doit (void) } if (debug) - printf ("S: %.*s\n", s1len, s1); + printf ("C: %.*s [%c]\n", s1len, s1, res == GSASL_OK ? 'O' : 'N'); - /* Client respond... */ + /* Server starts... */ - res = gsasl_step (client, s1, s1len, &s2, &s2len); + res = gsasl_step (server, s1, s1len, &s2, &s2len); gsasl_free (s1); if (res != GSASL_NEEDS_MORE) { @@ -227,11 +227,11 @@ doit (void) } if (debug) - printf ("C: %.*s\n", s2len, s2); + printf ("S: %.*s [%c]\n", s2len, s2, res == GSASL_OK ? 'O' : 'N'); - /* Server finishes... */ + /* Client responds... */ - res = gsasl_step (server, s2, s2len, &s1, &s1len); + res = gsasl_step (client, s2, s2len, &s1, &s1len); gsasl_free (s2); if (res != GSASL_NEEDS_MORE) { @@ -241,11 +241,11 @@ doit (void) } if (debug) - printf ("S: %.*s\n", s1len, s1); + printf ("C: %.*s [%c]\n", s1len, s1, res == GSASL_OK ? 'O' : 'N'); - /* Client finishes... */ + /* Server finishes... */ - res = gsasl_step (client, s1, s1len, &s2, &s2len); + res = gsasl_step (server, s1, s1len, &s2, &s2len); gsasl_free (s1); if (res != GSASL_OK) { @@ -255,18 +255,11 @@ doit (void) } if (debug) - { - /* Solaris x86 crashes here if s2 is NULL, even when s2len - is 0. */ - if (s2len) - printf ("C: %.*s\n", s2len, s2); - else - printf ("C: \n"); - } + printf ("S: %.*s [%c]\n", s2len, s2, res == GSASL_OK ? 'O' : 'N'); - /* Server is done. */ + /* Client finishes. */ - res = gsasl_step (server, s2, s2len, &s1, &s1len); + res = gsasl_step (client, s2, s2len, &s1, &s1len); gsasl_free (s2); if (res != GSASL_OK) { @@ -282,7 +275,129 @@ doit (void) return; } + if (debug) + printf ("C: %.*s [%c]\n", s1len, s1, res == GSASL_OK ? 'O' : 'N'); + + /* Server is done. */ + + res = gsasl_step (server, s1, s1len, &s2, &s2len); + if (res != GSASL_MECHANISM_CALLED_TOO_MANY_TIMES) + { + fail ("gsasl_step(6) failed (%d):\n%s\n", res, + gsasl_strerror (res)); + return; + } + + /* Client is done. */ + + res = gsasl_step (client, s1, s1len, &s2, &s2len); + if (res != GSASL_MECHANISM_CALLED_TOO_MANY_TIMES) + { + fail ("gsasl_step(7) failed (%d):\n%s\n", res, + gsasl_strerror (res)); + return; + } + + gsasl_free (s1); + + if (debug) + printf ("\n"); + + gsasl_finish (client); + gsasl_finish (server); + } + + for (i = 0; i < 5; i++) + { + res = gsasl_server_start (ctx, "DIGEST-MD5", &server); + if (res != GSASL_OK) + { + fail ("gsasl_init() failed (%d):\n%s\n", res, gsasl_strerror (res)); + return; + } + res = gsasl_client_start (ctx, "DIGEST-MD5", &client); + if (res != GSASL_OK) + { + fail ("gsasl_init() failed (%d):\n%s\n", res, gsasl_strerror (res)); + return; + } + + /* Server begins... */ + + res = gsasl_step (server, NULL, 0, &s1, &s1len); + if (res != GSASL_NEEDS_MORE) + { + fail ("gsasl_step(8) failed (%d):\n%s\n", res, + gsasl_strerror (res)); + return; + } + + if (debug) + printf ("S: %.*s [%c]\n", s1len, s1, res == GSASL_OK ? 'O' : 'N'); + + /* Client respond... */ + + res = gsasl_step (client, s1, s1len, &s2, &s2len); + gsasl_free (s1); + if (res != GSASL_NEEDS_MORE) + { + fail ("gsasl_step(9) failed (%d):\n%s\n", res, + gsasl_strerror (res)); + return; + } + + if (debug) + printf ("C: %.*s [%c]\n", s2len, s2, res == GSASL_OK ? 'O' : 'N'); + + /* Server finishes... */ + + res = gsasl_step (server, s2, s2len, &s1, &s1len); + gsasl_free (s2); + if (res != GSASL_OK) + { + fail ("gsasl_step(10) failed (%d):\n%s\n", res, + gsasl_strerror (res)); + return; + } + + if (debug) + printf ("S: %.*s [%c]\n", s1len, s1, res == GSASL_OK ? 'O' : 'N'); + + /* Client finishes... */ + + res = gsasl_step (client, s1, s1len, &s2, &s2len); gsasl_free (s1); + if (res != GSASL_OK) + { + fail ("gsasl_step(11) failed (%d):\n%s\n", res, + gsasl_strerror (res)); + return; + } + + if (debug) + printf ("C: %.*s [%c]\n", s2len, s2, res == GSASL_OK ? 'O' : 'N'); + + /* Server is done. */ + + res = gsasl_step (server, s2, s2len, &s1, &s1len); + if (res != GSASL_MECHANISM_CALLED_TOO_MANY_TIMES) + { + fail ("gsasl_step(12) failed (%d):\n%s\n", res, + gsasl_strerror (res)); + return; + } + + /* Client is done. */ + + res = gsasl_step (client, s2, s2len, &s1, &s1len); + if (res != GSASL_MECHANISM_CALLED_TOO_MANY_TIMES) + { + fail ("gsasl_step(13) failed (%d):\n%s\n", res, + gsasl_strerror (res)); + return; + } + + gsasl_free (s2); /* Encode data in client. */ diff --git a/tests/old-digest-md5.c b/tests/old-digest-md5.c index d70359a..092eb6f 100644 --- a/tests/old-digest-md5.c +++ b/tests/old-digest-md5.c @@ -1,5 +1,5 @@ /* digest-md5.c --- Test the DIGEST-MD5 mechanism. - * Copyright (C) 2002, 2003, 2004, 2005, 2007, 2009 Simon Josefsson + * Copyright (C) 2002, 2003, 2004, 2005, 2007, 2009, 2010 Simon Josefsson * * This file is part of GNU SASL. * @@ -200,7 +200,7 @@ doit (void) res = gsasl_step (server, s2, s2len, &s1, &s1len); free (s2); - if (res != GSASL_NEEDS_MORE) + if (res != GSASL_OK) { fail ("gsasl_step(3) failed (%d):\n%s\n", res, gsasl_strerror (res)); @@ -231,25 +231,7 @@ doit (void) printf ("C: \n"); } - /* Server is done. */ - - res = gsasl_step (server, s2, s2len, &s1, &s1len); free (s2); - if (res != GSASL_OK) - { - fail ("gsasl_step(5) failed (%d):\n%s\n", res, - gsasl_strerror (res)); - return; - } - - if (s1len != 0) - { - fail ("gsasl_step() failed, additional length=%d:\n", s1len); - fail ("%s\n", s1); - return; - } - - free (s1); if (debug) printf ("\n"); diff --git a/tests/scram.c b/tests/scram.c index b4f4ae6..0a826b6 100644 --- a/tests/scram.c +++ b/tests/scram.c @@ -26,6 +26,7 @@ #include <stdarg.h> #include <stdlib.h> #include <string.h> +#include <stdbool.h> #include "utils.h" @@ -142,6 +143,8 @@ doit (void) for (i = 0; i <= 15; i++) { + bool server_first = (i % 2) == 0; + if (debug) printf ("Iteration %d ...\n", i); @@ -158,9 +161,31 @@ doit (void) return; } + if (server_first) + { + res = gsasl_step (server, NULL, 0, &s1, &s1len); + if (res != GSASL_NEEDS_MORE) + { + fail ("gsasl_step[%d](0) failed (%d):\n%s\n", i, res, + gsasl_strerror (res)); + return; + } + + if (s1len != 0) + fail ("dummy initial server step produced output?!\n"); + + if (debug) + printf ("S: %.*s [%c]\n", s1len, s1, res == GSASL_OK ? 'O' : 'N'); + } + else + { + s1 = NULL; + s1len = 0; + } + /* Client first... */ - res = gsasl_step (client, NULL, 0, &s1, &s1len); + res = gsasl_step (client, s1, s1len, &s1, &s1len); if (res != GSASL_NEEDS_MORE) { fail ("gsasl_step[%d](1) failed (%d):\n%s\n", i, res, @@ -224,8 +249,8 @@ doit (void) return; } - if (debug) - printf ("C: %.*s\n", s1len, s1); + if (s1len != 0) + fail ("dummy final client step produced output?!\n"); { const char *p = gsasl_property_fast (server, GSASL_AUTHID); hooks/post-receive -- GNU gsasl _______________________________________________ Gsasl-commit mailing list [email protected] http://lists.gnu.org/mailman/listinfo/gsasl-commit
