mirror of
https://gitlab.com/openconnect/ocserv.git
synced 2026-02-10 00:37: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;
|
||||
syslog(LOG_ERR, "%s:%u: recvmsg: %s", __FILE__, __LINE__,
|
||||
strerror(e));
|
||||
return -1;
|
||||
return ERR_BAD_COMMAND;
|
||||
}
|
||||
|
||||
if (ret == 0) {
|
||||
syslog(LOG_ERR, "%s:%u: recvmsg returned zero", __FILE__,
|
||||
__LINE__);
|
||||
return -1;
|
||||
return ERR_PEER_TERMINATED;
|
||||
}
|
||||
|
||||
*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;
|
||||
syslog(LOG_ERR, "%s:%u: recvmsg: %s", __FILE__, __LINE__,
|
||||
strerror(e));
|
||||
return -1;
|
||||
return ERR_BAD_COMMAND;
|
||||
}
|
||||
|
||||
if (ret == 0) {
|
||||
syslog(LOG_ERR, "%s:%u: recvmsg returned zero", __FILE__,
|
||||
__LINE__);
|
||||
return -1;
|
||||
return ERR_PEER_TERMINATED;
|
||||
}
|
||||
|
||||
/* 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) {
|
||||
syslog(LOG_ERR, "%s:%u: recv_msg_data: received more data than expected", __FILE__,
|
||||
__LINE__);
|
||||
ret = -1;
|
||||
ret = ERR_BAD_COMMAND;
|
||||
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;
|
||||
syslog(LOG_ERR, "%s:%u: recvmsg: %s", __FILE__,
|
||||
__LINE__, strerror(e));
|
||||
ret = -1;
|
||||
ret = ERR_BAD_COMMAND;
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
@@ -618,7 +618,7 @@ int recv_socket_msg(void *pool, int fd, uint8_t cmd,
|
||||
}
|
||||
|
||||
if (ret == 0) {
|
||||
syslog(LOG_ERR, "%s:%u: recvmsg returned zero", __FILE__,
|
||||
syslog(LOG_DEBUG, "%s:%u: recvmsg returned zero", __FILE__,
|
||||
__LINE__);
|
||||
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
|
||||
* 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)
|
||||
{
|
||||
main_server_st *s = ev_userdata(loop);
|
||||
int ret, e;
|
||||
int ret;
|
||||
size_t length;
|
||||
uint8_t cmd;
|
||||
uint8_t buffer[256];
|
||||
@@ -760,10 +760,9 @@ static void ctl_cmd_wacher_cb(EV_P_ ev_io *w, int revents)
|
||||
|
||||
/* read request */
|
||||
ret = recv_msg_data(wst->fd, &cmd, buffer, sizeof(buffer), NULL);
|
||||
if (ret == -1) {
|
||||
e = errno;
|
||||
mslog(s, NULL, LOG_ERR, "error receiving ctl data: %s",
|
||||
strerror(e));
|
||||
if (ret < 0) {
|
||||
mslog(s, NULL, LOG_ERR, "error receiving ctl data");
|
||||
goto fail;
|
||||
}
|
||||
|
||||
length = ret;
|
||||
|
||||
@@ -244,12 +244,10 @@ int handle_worker_commands(main_server_st * s, struct proc_st *proc)
|
||||
PROTOBUF_ALLOCATOR(pa, proc);
|
||||
|
||||
ret = recv_msg_headers(proc->fd, &cmd, MAX_WAIT_SECS);
|
||||
if (ret == -1) {
|
||||
e = errno;
|
||||
mslog(s, proc, LOG_ERR,
|
||||
"cannot obtain metadata from command socket: %s",
|
||||
strerror(e));
|
||||
return ERR_BAD_COMMAND;
|
||||
if (ret < 0) {
|
||||
mslog(s, proc, LOG_INFO,
|
||||
"cannot obtain metadata from command socket");
|
||||
return ret;
|
||||
}
|
||||
|
||||
length = ret;
|
||||
|
||||
@@ -110,7 +110,7 @@ int send_cmd(struct unix_ctx *ctx, unsigned cmd, const void *data,
|
||||
|
||||
if (rep != NULL) {
|
||||
ret = recv_msg_headers(ctx->fd, &rcmd, DEFAULT_TIMEOUT);
|
||||
if (ret == -1) {
|
||||
if (ret < 0) {
|
||||
/*e = errno;
|
||||
fprintf(stderr, "read: %s\n", strerror(e));*/
|
||||
ret = -1;
|
||||
|
||||
@@ -543,11 +543,8 @@ int serve_request_main(sec_mod_st *sec, int fd, uint8_t *buffer, unsigned buffer
|
||||
|
||||
/* read request */
|
||||
ret = recv_msg_headers(fd, &cmd, MAIN_SEC_MOD_TIMEOUT);
|
||||
if (ret == -1) {
|
||||
e = errno;
|
||||
seclog(sec, LOG_ERR, "error receiving msg head: %s",
|
||||
strerror(e));
|
||||
ret = ERR_BAD_COMMAND;
|
||||
if (ret < 0) {
|
||||
seclog(sec, LOG_ERR, "error receiving msg head from main");
|
||||
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 */
|
||||
ret = recv_msg_headers(cfd, &cmd, MAX_WAIT_SECS);
|
||||
if (ret == -1) {
|
||||
e = errno;
|
||||
seclog(sec, LOG_ERR, "error receiving msg head: %s",
|
||||
strerror(e));
|
||||
ret = ERR_BAD_COMMAND;
|
||||
if (ret < 0) {
|
||||
seclog(sec, LOG_DEBUG, "error receiving msg head from worker");
|
||||
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.
|
||||
*
|
||||
@@ -82,7 +83,6 @@ int handle_commands_from_main(struct worker_st *ws)
|
||||
uint8_t cmd;
|
||||
size_t length;
|
||||
uint8_t cmd_data[1536];
|
||||
int e;
|
||||
UdpFdMsg *tmsg = NULL;
|
||||
int ret;
|
||||
int fd = -1;
|
||||
@@ -91,9 +91,8 @@ int handle_commands_from_main(struct worker_st *ws)
|
||||
memset(&cmd_data, 0, sizeof(cmd_data));
|
||||
|
||||
ret = recv_msg_data(ws->cmd_fd, &cmd, cmd_data, sizeof(cmd_data), &fd);
|
||||
if (ret == -1) {
|
||||
e = errno;
|
||||
oclog(ws, LOG_ERR, "cannot obtain data from command socket: %s", strerror(e));
|
||||
if (ret < 0) {
|
||||
oclog(ws, LOG_DEBUG, "cannot obtain data from command socket");
|
||||
exit_worker(ws);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user