mirror of
https://gitlab.com/openconnect/ocserv.git
synced 2026-02-10 16:57:00 +08:00
Improved error message propagation due to new combined APIs
This amends 8892eb1934
This commit is contained in:
@@ -479,13 +479,13 @@ int recv_msg_headers(int fd, uint8_t *cmd, unsigned timeout)
|
|||||||
int e = errno;
|
int e = errno;
|
||||||
syslog(LOG_ERR, "%s:%u: recvmsg: %s", __FILE__, __LINE__,
|
syslog(LOG_ERR, "%s:%u: recvmsg: %s", __FILE__, __LINE__,
|
||||||
strerror(e));
|
strerror(e));
|
||||||
return -1;
|
return ERR_BAD_COMMAND;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ret == 0) {
|
if (ret == 0) {
|
||||||
syslog(LOG_ERR, "%s:%u: recvmsg returned zero", __FILE__,
|
syslog(LOG_ERR, "%s:%u: recvmsg returned zero", __FILE__,
|
||||||
__LINE__);
|
__LINE__);
|
||||||
return -1;
|
return ERR_PEER_TERMINATED;
|
||||||
}
|
}
|
||||||
|
|
||||||
*cmd = buffer[0];
|
*cmd = buffer[0];
|
||||||
@@ -525,13 +525,13 @@ int recv_msg_data(int fd, uint8_t *cmd, uint8_t *data, size_t data_size,
|
|||||||
int e = errno;
|
int e = errno;
|
||||||
syslog(LOG_ERR, "%s:%u: recvmsg: %s", __FILE__, __LINE__,
|
syslog(LOG_ERR, "%s:%u: recvmsg: %s", __FILE__, __LINE__,
|
||||||
strerror(e));
|
strerror(e));
|
||||||
return -1;
|
return ERR_BAD_COMMAND;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ret == 0) {
|
if (ret == 0) {
|
||||||
syslog(LOG_ERR, "%s:%u: recvmsg returned zero", __FILE__,
|
syslog(LOG_ERR, "%s:%u: recvmsg returned zero", __FILE__,
|
||||||
__LINE__);
|
__LINE__);
|
||||||
return -1;
|
return ERR_PEER_TERMINATED;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* try to receive socket (if any) */
|
/* try to receive socket (if any) */
|
||||||
@@ -556,7 +556,7 @@ int recv_msg_data(int fd, uint8_t *cmd, uint8_t *data, size_t data_size,
|
|||||||
if (l32 > data_size) {
|
if (l32 > data_size) {
|
||||||
syslog(LOG_ERR, "%s:%u: recv_msg_data: received more data than expected", __FILE__,
|
syslog(LOG_ERR, "%s:%u: recv_msg_data: received more data than expected", __FILE__,
|
||||||
__LINE__);
|
__LINE__);
|
||||||
ret = -1;
|
ret = ERR_BAD_COMMAND;
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -565,7 +565,7 @@ int recv_msg_data(int fd, uint8_t *cmd, uint8_t *data, size_t data_size,
|
|||||||
int e = errno;
|
int e = errno;
|
||||||
syslog(LOG_ERR, "%s:%u: recvmsg: %s", __FILE__,
|
syslog(LOG_ERR, "%s:%u: recvmsg: %s", __FILE__,
|
||||||
__LINE__, strerror(e));
|
__LINE__, strerror(e));
|
||||||
ret = -1;
|
ret = ERR_BAD_COMMAND;
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -618,7 +618,7 @@ int recv_socket_msg(void *pool, int fd, uint8_t cmd,
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (ret == 0) {
|
if (ret == 0) {
|
||||||
syslog(LOG_ERR, "%s:%u: recvmsg returned zero", __FILE__,
|
syslog(LOG_DEBUG, "%s:%u: recvmsg returned zero", __FILE__,
|
||||||
__LINE__);
|
__LINE__);
|
||||||
return ERR_PEER_TERMINATED;
|
return ERR_PEER_TERMINATED;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (C) 2014 Red Hat
|
* Copyright (C) 2014-2016 Red Hat
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or modify
|
* This program is free software; you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
@@ -744,7 +744,7 @@ struct ctl_watcher_st {
|
|||||||
static void ctl_cmd_wacher_cb(EV_P_ ev_io *w, int revents)
|
static void ctl_cmd_wacher_cb(EV_P_ ev_io *w, int revents)
|
||||||
{
|
{
|
||||||
main_server_st *s = ev_userdata(loop);
|
main_server_st *s = ev_userdata(loop);
|
||||||
int ret, e;
|
int ret;
|
||||||
size_t length;
|
size_t length;
|
||||||
uint8_t cmd;
|
uint8_t cmd;
|
||||||
uint8_t buffer[256];
|
uint8_t buffer[256];
|
||||||
@@ -760,10 +760,9 @@ static void ctl_cmd_wacher_cb(EV_P_ ev_io *w, int revents)
|
|||||||
|
|
||||||
/* read request */
|
/* read request */
|
||||||
ret = recv_msg_data(wst->fd, &cmd, buffer, sizeof(buffer), NULL);
|
ret = recv_msg_data(wst->fd, &cmd, buffer, sizeof(buffer), NULL);
|
||||||
if (ret == -1) {
|
if (ret < 0) {
|
||||||
e = errno;
|
mslog(s, NULL, LOG_ERR, "error receiving ctl data");
|
||||||
mslog(s, NULL, LOG_ERR, "error receiving ctl data: %s",
|
goto fail;
|
||||||
strerror(e));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
length = ret;
|
length = ret;
|
||||||
|
|||||||
@@ -244,12 +244,10 @@ int handle_worker_commands(main_server_st * s, struct proc_st *proc)
|
|||||||
PROTOBUF_ALLOCATOR(pa, proc);
|
PROTOBUF_ALLOCATOR(pa, proc);
|
||||||
|
|
||||||
ret = recv_msg_headers(proc->fd, &cmd, MAX_WAIT_SECS);
|
ret = recv_msg_headers(proc->fd, &cmd, MAX_WAIT_SECS);
|
||||||
if (ret == -1) {
|
if (ret < 0) {
|
||||||
e = errno;
|
mslog(s, proc, LOG_INFO,
|
||||||
mslog(s, proc, LOG_ERR,
|
"cannot obtain metadata from command socket");
|
||||||
"cannot obtain metadata from command socket: %s",
|
return ret;
|
||||||
strerror(e));
|
|
||||||
return ERR_BAD_COMMAND;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
length = ret;
|
length = ret;
|
||||||
|
|||||||
@@ -110,7 +110,7 @@ int send_cmd(struct unix_ctx *ctx, unsigned cmd, const void *data,
|
|||||||
|
|
||||||
if (rep != NULL) {
|
if (rep != NULL) {
|
||||||
ret = recv_msg_headers(ctx->fd, &rcmd, DEFAULT_TIMEOUT);
|
ret = recv_msg_headers(ctx->fd, &rcmd, DEFAULT_TIMEOUT);
|
||||||
if (ret == -1) {
|
if (ret < 0) {
|
||||||
/*e = errno;
|
/*e = errno;
|
||||||
fprintf(stderr, "read: %s\n", strerror(e));*/
|
fprintf(stderr, "read: %s\n", strerror(e));*/
|
||||||
ret = -1;
|
ret = -1;
|
||||||
|
|||||||
@@ -543,11 +543,8 @@ int serve_request_main(sec_mod_st *sec, int fd, uint8_t *buffer, unsigned buffer
|
|||||||
|
|
||||||
/* read request */
|
/* read request */
|
||||||
ret = recv_msg_headers(fd, &cmd, MAIN_SEC_MOD_TIMEOUT);
|
ret = recv_msg_headers(fd, &cmd, MAIN_SEC_MOD_TIMEOUT);
|
||||||
if (ret == -1) {
|
if (ret < 0) {
|
||||||
e = errno;
|
seclog(sec, LOG_ERR, "error receiving msg head from main");
|
||||||
seclog(sec, LOG_ERR, "error receiving msg head: %s",
|
|
||||||
strerror(e));
|
|
||||||
ret = ERR_BAD_COMMAND;
|
|
||||||
goto leave;
|
goto leave;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -595,11 +592,8 @@ int serve_request_worker(sec_mod_st *sec, int cfd, pid_t pid, uint8_t *buffer, u
|
|||||||
|
|
||||||
/* read request */
|
/* read request */
|
||||||
ret = recv_msg_headers(cfd, &cmd, MAX_WAIT_SECS);
|
ret = recv_msg_headers(cfd, &cmd, MAX_WAIT_SECS);
|
||||||
if (ret == -1) {
|
if (ret < 0) {
|
||||||
e = errno;
|
seclog(sec, LOG_DEBUG, "error receiving msg head from worker");
|
||||||
seclog(sec, LOG_ERR, "error receiving msg head: %s",
|
|
||||||
strerror(e));
|
|
||||||
ret = ERR_BAD_COMMAND;
|
|
||||||
goto leave;
|
goto leave;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (C) 2013, 2014 Nikos Mavrogiannopoulos
|
* Copyright (C) 2013-2016 Nikos Mavrogiannopoulos
|
||||||
|
* Copyright (C) 2015-2016 Red Hat, Inc.
|
||||||
*
|
*
|
||||||
* This file is part of ocserv.
|
* This file is part of ocserv.
|
||||||
*
|
*
|
||||||
@@ -82,7 +83,6 @@ int handle_commands_from_main(struct worker_st *ws)
|
|||||||
uint8_t cmd;
|
uint8_t cmd;
|
||||||
size_t length;
|
size_t length;
|
||||||
uint8_t cmd_data[1536];
|
uint8_t cmd_data[1536];
|
||||||
int e;
|
|
||||||
UdpFdMsg *tmsg = NULL;
|
UdpFdMsg *tmsg = NULL;
|
||||||
int ret;
|
int ret;
|
||||||
int fd = -1;
|
int fd = -1;
|
||||||
@@ -91,9 +91,8 @@ int handle_commands_from_main(struct worker_st *ws)
|
|||||||
memset(&cmd_data, 0, sizeof(cmd_data));
|
memset(&cmd_data, 0, sizeof(cmd_data));
|
||||||
|
|
||||||
ret = recv_msg_data(ws->cmd_fd, &cmd, cmd_data, sizeof(cmd_data), &fd);
|
ret = recv_msg_data(ws->cmd_fd, &cmd, cmd_data, sizeof(cmd_data), &fd);
|
||||||
if (ret == -1) {
|
if (ret < 0) {
|
||||||
e = errno;
|
oclog(ws, LOG_DEBUG, "cannot obtain data from command socket");
|
||||||
oclog(ws, LOG_ERR, "cannot obtain data from command socket: %s", strerror(e));
|
|
||||||
exit_worker(ws);
|
exit_worker(ws);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user