diff options
author | Werner Koch <[email protected]> | 2007-10-02 08:44:21 +0000 |
---|---|---|
committer | Werner Koch <[email protected]> | 2007-10-02 08:44:21 +0000 |
commit | 28f7b6e0413097e91d9f28da028064d1ba9071eb (patch) | |
tree | 0bb5bd56293ab5f3a7548cece238c35696d47513 /src/assuan-socket-server.c | |
parent | Add socket wrapper API. (diff) | |
download | libassuan-28f7b6e0413097e91d9f28da028064d1ba9071eb.tar.gz libassuan-28f7b6e0413097e91d9f28da028064d1ba9071eb.zip |
Add new API assuan_set_sock_nonce.
Fixed a blocking problem on Windows.
Diffstat (limited to 'src/assuan-socket-server.c')
-rw-r--r-- | src/assuan-socket-server.c | 19 |
1 files changed, 18 insertions, 1 deletions
diff --git a/src/assuan-socket-server.c b/src/assuan-socket-server.c index d346f66..b754b81 100644 --- a/src/assuan-socket-server.c +++ b/src/assuan-socket-server.c @@ -1,5 +1,5 @@ /* assuan-socket-server.c - Assuan socket based server - * Copyright (C) 2002 Free Software Foundation, Inc. + * Copyright (C) 2002, 2007 Free Software Foundation, Inc. * * This file is part of Assuan. * @@ -98,6 +98,12 @@ accept_connection (assuan_context_t ctx) ctx->os_errno = errno; return _assuan_error (ASSUAN_Accept_Failed); } + if (_assuan_sock_check_nonce (fd, &ctx->listen_nonce)) + { + _assuan_close (fd); + ctx->os_errno = EACCES; + return _assuan_error (ASSUAN_Accept_Failed); + } ctx->connected_fd = fd; return accept_connection_bottom (ctx); @@ -190,3 +196,14 @@ assuan_init_socket_server_ext (assuan_context_t *r_ctx, assuan_fd_t fd, *r_ctx = ctx; return rc; } + + +/* Save a copy of NONCE in context CTX. This should be used to + register the server's nonce with an context established by + assuan_init_socket_server. */ +void +assuan_set_sock_nonce (assuan_context_t ctx, assuan_sock_nonce_t *nonce) +{ + if (ctx && nonce) + ctx->listen_nonce = *nonce; +} |