if message exceeds buffer size, disconnect instead of running lua
This commit is contained in:
@@ -192,6 +192,12 @@ struct peer_entry* find_peer(pid_t pid) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
void hangup_peer(int socket, struct sockaddr_un * peer_addr,
|
||||
size_t peer_addr_len,
|
||||
uint32_t retval) {
|
||||
sendto(socket, (void *) &retval, 4, 0, (struct sockaddr *) peer_addr, peer_addr_len);
|
||||
}
|
||||
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
int status;
|
||||
@@ -256,7 +262,7 @@ int main(int argc, char **argv)
|
||||
if(pollfds[0].revents) {
|
||||
if(find_peer(0)) {
|
||||
int len = recvmsg(socket, &msg , 0);
|
||||
if(len<=0) continue;
|
||||
if(len <= 0) continue;
|
||||
|
||||
int peer_fds[3];
|
||||
if(fds_from_msg(&msg, peer_fds)) {
|
||||
@@ -266,9 +272,12 @@ int main(int argc, char **argv)
|
||||
}
|
||||
memmove(argline, buf, len);
|
||||
|
||||
pid_t child_pid = fork_lua(L, argline, len, peer_fds);
|
||||
register_peer(child_pid, &peer_addr, msg.msg_namelen);
|
||||
|
||||
if(msg.msg_flags & (MSG_TRUNC | MSG_CTRUNC)) {
|
||||
hangup_peer(socket, &peer_addr, msg.msg_namelen, 0xffff);
|
||||
} else {
|
||||
pid_t child_pid = fork_lua(L, argline, len, peer_fds);
|
||||
register_peer(child_pid, &peer_addr, msg.msg_namelen);
|
||||
}
|
||||
/* close peer fds in parent */
|
||||
close(peer_fds[0]);
|
||||
close(peer_fds[1]);
|
||||
@@ -293,9 +302,7 @@ int main(int argc, char **argv)
|
||||
} else if(WIFSIGNALED(wstatus)) {
|
||||
ret = htonl(128 + WTERMSIG(wstatus));
|
||||
}
|
||||
sendto(socket, (void *) &ret, 4, 0,
|
||||
(const struct sockaddr *) &(peer->addr),
|
||||
peer->addrlen);
|
||||
hangup_peer(socket, &(peer->addr), peer->addrlen, ret);
|
||||
peer->pid = 0;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user