diff options
author | Andreas Schneider <asn@samba.org> | 2013-09-19 14:52:22 +0200 |
---|---|---|
committer | Stefan Metzmacher <metze@samba.org> | 2013-10-29 15:31:45 +0100 |
commit | eec05fb70f5f3558ef5f08816c22d0edaf7fedab (patch) | |
tree | 7c823bd367714db687edd9dff1c9814877383b28 | |
parent | 30e5a5c5bfd75303449956553b47b6cc82930291 (diff) | |
download | samba-eec05fb70f5f3558ef5f08816c22d0edaf7fedab.tar.gz samba-eec05fb70f5f3558ef5f08816c22d0edaf7fedab.tar.xz samba-eec05fb70f5f3558ef5f08816c22d0edaf7fedab.zip |
libcli: Add tstream_npa_socketpair() function.
Signed-off-by: Andreas Schneider <asn@samba.org>
Reviewed-by: Stefan Metzmacher <metze@samba.org>
-rw-r--r-- | libcli/named_pipe_auth/npa_tstream.c | 57 | ||||
-rw-r--r-- | libcli/named_pipe_auth/npa_tstream.h | 10 |
2 files changed, 67 insertions, 0 deletions
diff --git a/libcli/named_pipe_auth/npa_tstream.c b/libcli/named_pipe_auth/npa_tstream.c index c2eb7bf714..2728e0478a 100644 --- a/libcli/named_pipe_auth/npa_tstream.c +++ b/libcli/named_pipe_auth/npa_tstream.c @@ -1442,3 +1442,60 @@ int _tstream_npa_accept_existing_recv(struct tevent_req *req, tevent_req_received(req); return 0; } + + +/* SOCKETPAIR for internal rpc communication */ + +/* file_type is FILE_TYPE_BYTE_MODE_PIPE or FILE_TYPE_MESSAGE_MODE_PIPE */ +int _tstream_npa_socketpair(uint16_t file_type, + TALLOC_CTX *mem_ctx1, + struct tstream_context **pstream1, + TALLOC_CTX *mem_ctx2, + struct tstream_context **pstream2, + const char *location) +{ + struct tstream_context *stream1 = NULL; + struct tstream_context *stream2 = NULL; + int fds[2]; + int fd1; + int fd2; + int rc; + + rc = socketpair(AF_UNIX, SOCK_STREAM, 0, fds); + if (rc == -1) { + return -1; + } + fd1 = fds[0]; + fd2 = fds[1]; + + rc = _tstream_npa_existing_socket(mem_ctx1, + fd1, + file_type, + &stream1, + location); + if (rc == -1) { + int sys_errno = errno; + close(fd1); + close(fd2); + errno = sys_errno; + return -1; + } + + rc = _tstream_npa_existing_socket(mem_ctx2, + fd2, + file_type, + &stream2, + location); + if (rc == -1) { + int sys_errno = errno; + talloc_free(stream1); + close(fd2); + errno = sys_errno; + return -1; + } + + *pstream1 = stream1; + *pstream2 = stream2; + + return 0; +} diff --git a/libcli/named_pipe_auth/npa_tstream.h b/libcli/named_pipe_auth/npa_tstream.h index 1d85de7d91..e7a1ac76d4 100644 --- a/libcli/named_pipe_auth/npa_tstream.h +++ b/libcli/named_pipe_auth/npa_tstream.h @@ -117,4 +117,14 @@ int _tstream_npa_accept_existing_recv(struct tevent_req *req, session_info, \ __location__) +int _tstream_npa_socketpair(uint16_t file_type, + TALLOC_CTX *mem_ctx1, + struct tstream_context **pstream1, + TALLOC_CTX *mem_ctx2, + struct tstream_context **pstream2, + const char *location); +#define tstream_npa_socketpair(ft, mem1, stream1, mem2, stream2) \ + _tstream_npa_socketpair(ft, mem1, stream1, mem2, stream2, \ + __location__) + #endif /* NPA_TSTREAM_H */ |