summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNikos Mavrogiannopoulos <nmav@gnutls.org>2004-06-29 09:29:10 +0000
committerNikos Mavrogiannopoulos <nmav@gnutls.org>2004-06-29 09:29:10 +0000
commitd89fa090cbd25af1f0f4eca062eaf2471929f688 (patch)
tree26ee777045f6a34fef4e9ed7adb98e88fbbf255d
parent224eb02889f9e7042233fd1d3a7496567cd2acc3 (diff)
downloadgnutls-d89fa090cbd25af1f0f4eca062eaf2471929f688.tar.gz
Do not free the SRP (n/g) parameters from the callback if they are the static ones defined in extra.h
-rw-r--r--libextra/auth_srp.h7
-rw-r--r--libextra/auth_srp_passwd.c10
-rw-r--r--libextra/gnutls_srp.c3
3 files changed, 17 insertions, 3 deletions
diff --git a/libextra/auth_srp.h b/libextra/auth_srp.h
index bf4cd28c09..739de43166 100644
--- a/libextra/auth_srp.h
+++ b/libextra/auth_srp.h
@@ -37,6 +37,13 @@ typedef struct SRP_SERVER_AUTH_INFO_INT {
char username[MAX_SRP_USERNAME];
} *SRP_SERVER_AUTH_INFO;
+extern const gnutls_datum gnutls_srp_1024_group_prime;
+extern const gnutls_datum gnutls_srp_1024_group_generator;
+extern const gnutls_datum gnutls_srp_1536_group_prime;
+extern const gnutls_datum gnutls_srp_1536_group_generator;
+extern const gnutls_datum gnutls_srp_2048_group_prime;
+extern const gnutls_datum gnutls_srp_2048_group_generator;
+
#ifdef ENABLE_SRP
int _gnutls_proc_srp_server_hello(gnutls_session state,
diff --git a/libextra/auth_srp_passwd.c b/libextra/auth_srp_passwd.c
index a6586fc0fd..b18e1f26fd 100644
--- a/libextra/auth_srp_passwd.c
+++ b/libextra/auth_srp_passwd.c
@@ -394,10 +394,16 @@ unsigned char rnd;
void _gnutls_srp_entry_free( SRP_PWD_ENTRY * entry) {
_gnutls_free_datum(&entry->v);
- _gnutls_free_datum(&entry->g);
- _gnutls_free_datum(&entry->n);
_gnutls_free_datum(&entry->salt);
+ if (entry->g.data != gnutls_srp_1024_group_generator.data)
+ _gnutls_free_datum(&entry->g);
+
+ if (entry->n.data != gnutls_srp_1024_group_prime.data &&
+ entry->n.data != gnutls_srp_1536_group_prime.data &&
+ entry->n.data != gnutls_srp_2048_group_prime.data)
+ _gnutls_free_datum(&entry->n);
+
gnutls_free(entry->username);
gnutls_free(entry);
}
diff --git a/libextra/gnutls_srp.c b/libextra/gnutls_srp.c
index 2ea75ecb8b..753d1d5182 100644
--- a/libextra/gnutls_srp.c
+++ b/libextra/gnutls_srp.c
@@ -581,7 +581,8 @@ void gnutls_srp_server_set_select_function(gnutls_session session,
*
* @username contains the actual username.
* The @salt, @verifier, @generator and @prime must be filled
- * in using the gnutls_malloc().
+ * in using the gnutls_malloc(). For convenience @prime and @generator
+ * may also be one of the static parameters defined in extra.h.
*
* In case the callback returned a negative number then gnutls will
* assume that the username does not exist.