ntlm_wb: use pipe instead of socketpair when possible

Closes #12149
This commit is contained in:
Daniel Stenberg 2023-10-18 09:10:30 +02:00
Родитель 913eacf773
Коммит d4314cdf65
Не найден ключ, соответствующий данной подписи
Идентификатор ключа GPG: 5CC908FDB71E12C2
1 изменённых файлов: 8 добавлений и 6 удалений

Просмотреть файл

@ -68,7 +68,9 @@
/* Portable 'sclose_nolog' used only in child process instead of 'sclose' /* Portable 'sclose_nolog' used only in child process instead of 'sclose'
to avoid fooling the socket leak detector */ to avoid fooling the socket leak detector */
#if defined(HAVE_CLOSESOCKET) #ifdef HAVE_PIPE
# define sclose_nolog(x) close((x))
#eliif defined(HAVE_CLOSESOCKET)
# define sclose_nolog(x) closesocket((x)) # define sclose_nolog(x) closesocket((x))
#elif defined(HAVE_CLOSESOCKET_CAMEL) #elif defined(HAVE_CLOSESOCKET_CAMEL)
# define sclose_nolog(x) CloseSocket((x)) # define sclose_nolog(x) CloseSocket((x))
@ -189,7 +191,7 @@ static CURLcode ntlm_wb_init(struct Curl_easy *data, struct ntlmdata *ntlm,
goto done; goto done;
} }
if(Curl_socketpair(AF_UNIX, SOCK_STREAM, 0, sockfds)) { if(wakeup_create(sockfds)) {
failf(data, "Could not open socket pair. errno %d: %s", failf(data, "Could not open socket pair. errno %d: %s",
errno, Curl_strerror(errno, buffer, sizeof(buffer))); errno, Curl_strerror(errno, buffer, sizeof(buffer)));
goto done; goto done;
@ -197,8 +199,8 @@ static CURLcode ntlm_wb_init(struct Curl_easy *data, struct ntlmdata *ntlm,
child_pid = fork(); child_pid = fork();
if(child_pid == -1) { if(child_pid == -1) {
sclose(sockfds[0]); wakeup_close(sockfds[0]);
sclose(sockfds[1]); wakeup_close(sockfds[1]);
failf(data, "Could not fork. errno %d: %s", failf(data, "Could not fork. errno %d: %s",
errno, Curl_strerror(errno, buffer, sizeof(buffer))); errno, Curl_strerror(errno, buffer, sizeof(buffer)));
goto done; goto done;
@ -268,7 +270,7 @@ static CURLcode ntlm_wb_response(struct Curl_easy *data, struct ntlmdata *ntlm,
Curl_dyn_init(&b, MAX_NTLM_WB_RESPONSE); Curl_dyn_init(&b, MAX_NTLM_WB_RESPONSE);
while(len_in > 0) { while(len_in > 0) {
ssize_t written = swrite(ntlm->ntlm_auth_hlpr_socket, input, len_in); ssize_t written = wakeup_write(ntlm->ntlm_auth_hlpr_socket, input, len_in);
if(written == -1) { if(written == -1) {
/* Interrupted by a signal, retry it */ /* Interrupted by a signal, retry it */
if(errno == EINTR) if(errno == EINTR)
@ -282,7 +284,7 @@ static CURLcode ntlm_wb_response(struct Curl_easy *data, struct ntlmdata *ntlm,
/* Read one line */ /* Read one line */
while(1) { while(1) {
ssize_t size = ssize_t size =
sread(ntlm->ntlm_auth_hlpr_socket, buf, data->set.buffer_size); wakeup_read(ntlm->ntlm_auth_hlpr_socket, buf, data->set.buffer_size);
if(size == -1) { if(size == -1) {
if(errno == EINTR) if(errno == EINTR)
continue; continue;