summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNikos Mavrogiannopoulos <nmav@gnutls.org>2018-05-05 21:59:13 +0200
committerNikos Mavrogiannopoulos <nmav@gnutls.org>2018-05-05 22:18:01 +0200
commitcb1930bafe82ce591b8bdaad6757dd6eb02e54dd (patch)
tree416a17f4416244bd27ebda00221a732b465089b8
parentc7e1f3f9c5fc00d5814a3f6ecf3850953e487a92 (diff)
downloadgnutls-cb1930bafe82ce591b8bdaad6757dd6eb02e54dd.tar.gz
gnutls-serv: all skipping DTLS cookie request
Signed-off-by: Nikos Mavrogiannopoulos <nmav@gnutls.org>
-rw-r--r--src/serv-args.def6
-rw-r--r--src/udp-serv.c71
2 files changed, 44 insertions, 33 deletions
diff --git a/src/serv-args.def b/src/serv-args.def
index b59cef9eb0..5f133ed617 100644
--- a/src/serv-args.def
+++ b/src/serv-args.def
@@ -43,6 +43,12 @@ flag = {
};
flag = {
+ name = nocookie;
+ descrip = "Don't require cookie on DTLS sessions";
+ doc = "";
+};
+
+flag = {
name = generate;
value = g;
descrip = "Generate Diffie-Hellman parameters";
diff --git a/src/udp-serv.c b/src/udp-serv.c
index 046026e00c..5442946165 100644
--- a/src/udp-serv.c
+++ b/src/udp-serv.c
@@ -36,6 +36,7 @@
#include <errno.h>
#include <common.h>
#include "udp-serv.h"
+#include "serv-args.h"
#include "list.h"
typedef struct {
@@ -89,39 +90,41 @@ void udp_server(const char *name, int port, int mtu)
(struct sockaddr *) &cli_addr,
&cli_addr_size);
if (ret > 0) {
- memset(&prestate, 0, sizeof(prestate));
- ret =
- gnutls_dtls_cookie_verify(&cookie_key,
- &cli_addr,
- cli_addr_size,
- buffer, ret,
- &prestate);
- if (ret < 0) { /* cookie not valid */
- priv_data_st s;
-
- memset(&s, 0, sizeof(s));
- s.fd = sock;
- s.cli_addr = (void *) &cli_addr;
- s.cli_addr_size = cli_addr_size;
-
- printf
- ("Sending hello verify request to %s\n",
- human_addr((struct sockaddr *)
- &cli_addr,
- cli_addr_size, buffer,
- sizeof(buffer)-1));
- gnutls_dtls_cookie_send(&cookie_key,
+ if (!HAVE_OPT(NOCOOKIE)) {
+ memset(&prestate, 0, sizeof(prestate));
+ ret =
+ gnutls_dtls_cookie_verify(&cookie_key,
+ &cli_addr,
+ cli_addr_size,
+ buffer, ret,
+ &prestate);
+ if (ret < 0) { /* cookie not valid */
+ priv_data_st s;
+
+ memset(&s, 0, sizeof(s));
+ s.fd = sock;
+ s.cli_addr = (void *) &cli_addr;
+ s.cli_addr_size = cli_addr_size;
+
+ printf
+ ("Sending hello verify request to %s\n",
+ human_addr((struct sockaddr *)
&cli_addr,
- cli_addr_size,
- &prestate,
- (gnutls_transport_ptr_t)
- &s, push_func);
-
- /* discard peeked data */
- recvfrom(sock, buffer, sizeof(buffer)-1, 0,
- (struct sockaddr *) &cli_addr,
- &cli_addr_size);
- continue;
+ cli_addr_size, buffer,
+ sizeof(buffer)-1));
+ gnutls_dtls_cookie_send(&cookie_key,
+ &cli_addr,
+ cli_addr_size,
+ &prestate,
+ (gnutls_transport_ptr_t)
+ &s, push_func);
+
+ /* discard peeked data */
+ recvfrom(sock, buffer, sizeof(buffer)-1, 0,
+ (struct sockaddr *) &cli_addr,
+ &cli_addr_size);
+ continue;
+ }
}
printf("Accepted connection from %s\n",
human_addr((struct sockaddr *)
@@ -131,7 +134,9 @@ void udp_server(const char *name, int port, int mtu)
continue;
session = initialize_session(1);
- gnutls_dtls_prestate_set(session, &prestate);
+ if (!HAVE_OPT(NOCOOKIE))
+ gnutls_dtls_prestate_set(session, &prestate);
+
if (mtu)
gnutls_dtls_set_mtu(session, mtu);