Improved error message propagation due to new combined APIs

This amends 8892eb1934
This commit is contained in:
Nikos Mavrogiannopoulos
2016-03-07 13:51:26 +01:00
parent c213a8b8fc
commit da4e4fcf2a
6 changed files with 25 additions and 35 deletions

View File

@@ -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;
}

View File

@@ -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;

View File

@@ -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;

View File

@@ -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;

View File

@@ -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;
}

View File

@@ -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);
}