aboutsummaryrefslogtreecommitdiff
path: root/server-fn.c
diff options
context:
space:
mode:
Diffstat (limited to 'server-fn.c')
-rw-r--r--server-fn.c24
1 files changed, 11 insertions, 13 deletions
diff --git a/server-fn.c b/server-fn.c
index 86e2054e..4fc4eb5c 100644
--- a/server-fn.c
+++ b/server-fn.c
@@ -56,8 +56,8 @@ server_write_ready(struct client *c)
}
int
-server_write_client(
- struct client *c, enum msgtype type, const void *buf, size_t len)
+server_write_client(struct client *c, enum msgtype type, const void *buf,
+ size_t len)
{
struct imsgbuf *ibuf = &c->ibuf;
int error;
@@ -73,8 +73,8 @@ server_write_client(
}
void
-server_write_session(
- struct session *s, enum msgtype type, const void *buf, size_t len)
+server_write_session(struct session *s, enum msgtype type, const void *buf,
+ size_t len)
{
struct client *c;
u_int i;
@@ -235,9 +235,7 @@ server_lock_session(struct session *s)
void
server_lock_client(struct client *c)
{
- const char *cmd;
- size_t cmdlen;
- struct msg_lock_data lockdata;
+ const char *cmd;
if (c->flags & CLIENT_CONTROL)
return;
@@ -246,8 +244,7 @@ server_lock_client(struct client *c)
return;
cmd = options_get_string(&c->session->options, "lock-command");
- cmdlen = strlcpy(lockdata.cmd, cmd, sizeof lockdata.cmd);
- if (cmdlen >= sizeof lockdata.cmd)
+ if (strlen(cmd) + 1 > MAX_IMSGSIZE - IMSG_HEADER_SIZE)
return;
tty_stop_tty(&c->tty);
@@ -256,7 +253,7 @@ server_lock_client(struct client *c)
tty_raw(&c->tty, tty_term_string(c->tty.term, TTYC_E3));
c->flags |= CLIENT_SUSPENDED;
- server_write_client(c, MSG_LOCK, &lockdata, sizeof lockdata);
+ server_write_client(c, MSG_LOCK, cmd, strlen(cmd) + 1);
}
void
@@ -398,14 +395,15 @@ void
server_destroy_session_group(struct session *s)
{
struct session_group *sg;
+ struct session *s1;
if ((sg = session_group_find(s)) == NULL)
server_destroy_session(s);
else {
- TAILQ_FOREACH(s, &sg->sessions, gentry)
+ TAILQ_FOREACH_SAFE(s, &sg->sessions, gentry, s1) {
server_destroy_session(s);
- TAILQ_REMOVE(&session_groups, sg, entry);
- free(sg);
+ session_destroy(s);
+ }
}
}