static int send_command_private(mailpop3 * f, char * command, int can_be_published) { ssize_t r; mailstream_set_privacy(f->pop3_stream, can_be_published); r = mailstream_write(f->pop3_stream, command, strlen(command)); if (r == -1) return -1; r = mailstream_flush(f->pop3_stream); if (r == -1) return -1; return 0; }
LIBETPAN_EXPORT int mailimap_oauth2_authenticate(mailimap * session, const char *auth_user, const char * access_token) { struct mailimap_response * response; int r; int error_code; size_t indx; struct mailimap_continue_req * cont_req; if (session->imap_state != MAILIMAP_STATE_NON_AUTHENTICATED) return MAILIMAP_ERROR_BAD_STATE; mailstream_set_privacy(session->imap_stream, 0); r = mailimap_send_current_tag(session); if (r != MAILIMAP_NO_ERROR) { mailstream_set_privacy(session->imap_stream, 1); return r; } r = mailimap_oauth2_authenticate_send(session, auth_user, access_token); if (r != MAILIMAP_NO_ERROR) { mailstream_set_privacy(session->imap_stream, 1); return r; } r = mailimap_crlf_send(session->imap_stream); if (r != MAILIMAP_NO_ERROR) { mailstream_set_privacy(session->imap_stream, 1); return r; } if (mailstream_flush(session->imap_stream) == -1) { mailstream_set_privacy(session->imap_stream, 1); return MAILIMAP_ERROR_STREAM; } mailstream_set_privacy(session->imap_stream, 1); if (mailimap_read_line(session) == NULL) return MAILIMAP_ERROR_STREAM; indx = 0; r = mailimap_continue_req_parse(session->imap_stream, session->imap_stream_buffer, &indx, &cont_req, session->imap_progr_rate, session->imap_progr_fun); if (r == MAILIMAP_NO_ERROR) { mailimap_continue_req_free(cont_req); /* There's probably an error, send an empty line as acknowledgement. */ r = mailimap_crlf_send(session->imap_stream); if (r != MAILIMAP_NO_ERROR) { return r; } if (mailstream_flush(session->imap_stream) == -1) { return MAILIMAP_ERROR_STREAM; } } else if (r == MAILIMAP_ERROR_PARSE) { r = MAILIMAP_NO_ERROR; } if (r != MAILIMAP_NO_ERROR) { return r; } r = mailimap_parse_response(session, &response); if (r != MAILIMAP_NO_ERROR) return r; error_code = response->rsp_resp_done->rsp_data.rsp_tagged->rsp_cond_state->rsp_type; mailimap_response_free(response); switch (error_code) { case MAILIMAP_RESP_COND_STATE_OK: session->imap_state = MAILIMAP_STATE_AUTHENTICATED; return MAILIMAP_NO_ERROR; default: return MAILIMAP_ERROR_LOGIN; } }