privops: return from PRV functions with helper response code

In receive_reponse() don't interpret return codes in helper responses as
a non-zero value may not necessarily mean an error. Just copy errno if
it's not zero and let PRV_* functions deal with the return code.
This commit is contained in:
Miroslav Lichvar 2015-12-09 17:41:48 +01:00
parent e9487b1a1a
commit cd472e6aaf

View file

@ -279,7 +279,7 @@ helper_main(int fd)
/* DAEMON - receive helper response */ /* DAEMON - receive helper response */
static int static void
receive_response(PrvResponse *res) receive_response(PrvResponse *res)
{ {
int resp_len; int resp_len;
@ -296,12 +296,8 @@ receive_response(PrvResponse *res)
DEBUG_LOG(LOGF_PrivOps, "Received response rc=%d", res->rc); DEBUG_LOG(LOGF_PrivOps, "Received response rc=%d", res->rc);
/* if operation failed in the helper, set errno so daemon can print log message */ /* if operation failed in the helper, set errno so daemon can print log message */
if (res->rc) { if (res->res_errno)
errno = res->res_errno; errno = res->res_errno;
return 0;
}
return 1;
} }
/* ======================================================================= */ /* ======================================================================= */
@ -358,11 +354,11 @@ send_request(PrvRequest *req)
/* DAEMON - send daemon request and wait for response */ /* DAEMON - send daemon request and wait for response */
static int static void
submit_request(PrvRequest *req, PrvResponse *res) submit_request(PrvRequest *req, PrvResponse *res)
{ {
send_request(req); send_request(req);
return receive_response(res); receive_response(res);
} }
/* ======================================================================= */ /* ======================================================================= */
@ -404,13 +400,12 @@ PRV_AdjustTime(const struct timeval *delta, struct timeval *olddelta)
req.op = OP_ADJUSTTIME; req.op = OP_ADJUSTTIME;
req.data.adjust_time.tv = *delta; req.data.adjust_time.tv = *delta;
if (!submit_request(&req, &res)) submit_request(&req, &res);
return -1;
if (olddelta) if (olddelta)
*olddelta = res.data.adjust_time.tv; *olddelta = res.data.adjust_time.tv;
return 0; return res.rc;
} }
#endif #endif
@ -436,10 +431,9 @@ PRV_SetTime(const struct timeval *tp, const struct timezone *tzp)
req.op = OP_SETTIME; req.op = OP_SETTIME;
req.data.set_time.tv = *tp; req.data.set_time.tv = *tp;
if (!submit_request(&req, &res)) submit_request(&req, &res);
return -1;
return 0; return res.rc;
} }
#endif #endif
@ -468,10 +462,9 @@ PRV_BindSocket(int sock, struct sockaddr *address, socklen_t address_len)
req.data.bind_socket.sa_len = address_len; req.data.bind_socket.sa_len = address_len;
memcpy(&req.data.bind_socket.sa.u, address, address_len); memcpy(&req.data.bind_socket.sa.u, address, address_len);
if (!submit_request(&req, &res)) submit_request(&req, &res);
return -1;
return 0; return res.rc;
} }
#endif #endif