static int process_msg_binary_info(struct msg_buf_t *msg)
{
- int err;
+ int err = -1;
uint32_t allocated_acks, i, bincount;
enum ErrorCode error_code = ERR_NO;
pack_int32(p, error_code);
pack_int32(p, bincount);
- for (i = 0; i != bincount; ++i) {
+ for (i = 0; i != bincount; ++i)
p += binary_ack_pack(p, acks[i]);
- binary_ack_free(acks[i]);
- }
printBuf((char *)msg_reply, msg_reply->len + sizeof(*msg_reply));
err = send_reply(msg_reply);
free(msg_reply);
- return err;
-
exit_fail_free_ack:
for (i = 0; i < allocated_acks; i++)
binary_ack_free(acks[i]);
free(acks);
+
exit_fail:
- return -1;
+ return err;
}
static int process_msg_get_probe_map()
int change_user(const char *username)
{
struct passwd *pw;
- int uid, gid;
+ struct passwd pw_entry;
+ char buf[1024];
+ int uid, gid, err;
-
- pw = getpwnam(username);
- if (!pw) {
+ err = getpwnam_r(username, &pw_entry, buf, sizeof(buf), &pw);
+ if (err || !pw) {
LOGE("user %s is unknown\n", username);
return -1;
}