version 1.106, 2013/10/10 12:12:54 |
version 1.107, 2013/10/10 12:13:29 |
|
|
void |
void |
server_client_check_exit(struct client *c) |
server_client_check_exit(struct client *c) |
{ |
{ |
struct msg_exit_data exitdata; |
|
|
|
if (!(c->flags & CLIENT_EXIT)) |
if (!(c->flags & CLIENT_EXIT)) |
return; |
return; |
|
|
|
|
if (EVBUFFER_LENGTH(c->stderr_data) != 0) |
if (EVBUFFER_LENGTH(c->stderr_data) != 0) |
return; |
return; |
|
|
exitdata.retcode = c->retval; |
server_write_client(c, MSG_EXIT, &c->retval, sizeof c->retval); |
server_write_client(c, MSG_EXIT, &exitdata, sizeof exitdata); |
|
|
|
c->flags &= ~CLIENT_EXIT; |
c->flags &= ~CLIENT_EXIT; |
} |
} |
|
|
|
|
void |
void |
server_client_msg_shell(struct client *c) |
server_client_msg_shell(struct client *c) |
{ |
{ |
struct msg_shell_data data; |
const char *shell; |
const char *shell; |
|
|
|
shell = options_get_string(&global_s_options, "default-shell"); |
shell = options_get_string(&global_s_options, "default-shell"); |
|
|
if (*shell == '\0' || areshell(shell)) |
if (*shell == '\0' || areshell(shell)) |
shell = _PATH_BSHELL; |
shell = _PATH_BSHELL; |
if (strlcpy(data.shell, shell, sizeof data.shell) >= sizeof data.shell) |
server_write_client(c, MSG_SHELL, shell, strlen(shell) + 1); |
strlcpy(data.shell, _PATH_BSHELL, sizeof data.shell); |
|
|
|
server_write_client(c, MSG_SHELL, &data, sizeof data); |
|
c->flags |= CLIENT_BAD; /* it will die after exec */ |
c->flags |= CLIENT_BAD; /* it will die after exec */ |
} |
} |