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

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

View File

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

View File

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

View File

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

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. * 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);
} }