summaryrefslogtreecommitdiff
path: root/usr.bin/tmux
diff options
context:
space:
mode:
authorNicholas Marriott <nicm@cvs.openbsd.org>2015-10-18 20:42:44 +0000
committerNicholas Marriott <nicm@cvs.openbsd.org>2015-10-18 20:42:44 +0000
commit71cf5f38045e905b0a0f35b4f814bc5ba08d688c (patch)
tree31e3164e56821cd420dffa9b79f04357952cf6db /usr.bin/tmux
parent3f50bafdda1b819493eaa4c7643b9f2376af67aa (diff)
Pass current directory as a string rather than a file descriptor because
pledge doesn't let us pass directory file descriptors.
Diffstat (limited to 'usr.bin/tmux')
-rw-r--r--usr.bin/tmux/client.c20
-rw-r--r--usr.bin/tmux/server-client.c9
-rw-r--r--usr.bin/tmux/tmux.h5
3 files changed, 18 insertions, 16 deletions
diff --git a/usr.bin/tmux/client.c b/usr.bin/tmux/client.c
index dca2cedbb16..eef918d3ba3 100644
--- a/usr.bin/tmux/client.c
+++ b/usr.bin/tmux/client.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: client.c,v 1.97 2015/10/17 18:30:43 nicm Exp $ */
+/* $OpenBSD: client.c,v 1.98 2015/10/18 20:42:42 nicm Exp $ */
/*
* Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net>
@@ -55,7 +55,7 @@ int client_attached;
__dead void client_exec(const char *);
int client_get_lock(char *);
int client_connect(struct event_base *, char *, int);
-void client_send_identify(const char *, int);
+void client_send_identify(const char *, const char *);
int client_write_one(enum msgtype, int, const void *, size_t);
int client_write_server(enum msgtype, const void *, size_t);
void client_update_event(void);
@@ -214,11 +214,11 @@ client_main(struct event_base *base, int argc, char **argv, int flags)
struct cmd *cmd;
struct cmd_list *cmdlist;
struct msg_command_data *data;
- int cmdflags, fd, i, cwd;
- const char* ttynam;
+ int cmdflags, fd, i;
+ const char *ttynam, *cwd;
pid_t ppid;
enum msgtype msg;
- char *cause;
+ char *cause, path[PATH_MAX];
struct termios tio, saved_tio;
size_t size;
@@ -275,8 +275,8 @@ client_main(struct event_base *base, int argc, char **argv, int flags)
}
/* Save these before pledge(). */
- if ((cwd = open(".", O_RDONLY)) == -1)
- cwd = open("/", O_RDONLY);
+ if ((cwd = getcwd(path, sizeof path)) == NULL)
+ cwd = "/";
if ((ttynam = ttyname(STDIN_FILENO)) == NULL)
ttynam = "";
@@ -325,7 +325,7 @@ client_main(struct event_base *base, int argc, char **argv, int flags)
}
/* Send identify messages. */
- client_send_identify(ttynam, cwd); /* closes cwd */
+ client_send_identify(ttynam, cwd);
/* Send first command. */
if (msg == MSG_COMMAND) {
@@ -380,7 +380,7 @@ client_main(struct event_base *base, int argc, char **argv, int flags)
/* Send identify messages to server. */
void
-client_send_identify(const char *ttynam, int cwd)
+client_send_identify(const char *ttynam, const char *cwd)
{
const char *s;
char **ss;
@@ -395,7 +395,7 @@ client_send_identify(const char *ttynam, int cwd)
client_write_one(MSG_IDENTIFY_TERM, -1, s, strlen(s) + 1);
client_write_one(MSG_IDENTIFY_TTYNAME, -1, ttynam, strlen(ttynam) + 1);
- client_write_one(MSG_IDENTIFY_CWD, cwd, NULL, 0);
+ client_write_one(MSG_IDENTIFY_CWD, -1, cwd, strlen(cwd) + 1);
if ((fd = dup(STDIN_FILENO)) == -1)
fatal("dup failed");
diff --git a/usr.bin/tmux/server-client.c b/usr.bin/tmux/server-client.c
index 332071d2b1c..fdf0d378776 100644
--- a/usr.bin/tmux/server-client.c
+++ b/usr.bin/tmux/server-client.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: server-client.c,v 1.154 2015/09/16 22:24:54 nicm Exp $ */
+/* $OpenBSD: server-client.c,v 1.155 2015/10/18 20:42:43 nicm Exp $ */
/*
* Copyright (c) 2009 Nicholas Marriott <nicm@users.sourceforge.net>
@@ -1166,9 +1166,10 @@ server_client_msg_identify(struct client *c, struct imsg *imsg)
c->ttyname = xstrdup(data);
break;
case MSG_IDENTIFY_CWD:
- if (datalen != 0)
- fatalx("bad MSG_IDENTIFY_CWD size");
- c->cwd = imsg->fd;
+ if (datalen == 0 || data[datalen - 1] != '\0')
+ fatalx("bad MSG_IDENTIFY_CWD string");
+ if ((c->cwd = open(data, O_RDONLY)) == -1)
+ c->cwd = open("/", O_RDONLY);
break;
case MSG_IDENTIFY_STDIN:
if (datalen != 0)
diff --git a/usr.bin/tmux/tmux.h b/usr.bin/tmux/tmux.h
index 0b670771ea9..61ce3820da8 100644
--- a/usr.bin/tmux/tmux.h
+++ b/usr.bin/tmux/tmux.h
@@ -1,4 +1,4 @@
-/* $OpenBSD: tmux.h,v 1.562 2015/09/25 15:53:07 nicm Exp $ */
+/* $OpenBSD: tmux.h,v 1.563 2015/10/18 20:42:42 nicm Exp $ */
/*
* Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net>
@@ -395,11 +395,12 @@ enum msgtype {
MSG_IDENTIFY_FLAGS = 100,
MSG_IDENTIFY_TERM,
MSG_IDENTIFY_TTYNAME,
- MSG_IDENTIFY_CWD,
+ MSG_IDENTIFY_OLDCWD, /* unused */
MSG_IDENTIFY_STDIN,
MSG_IDENTIFY_ENVIRON,
MSG_IDENTIFY_DONE,
MSG_IDENTIFY_CLIENTPID,
+ MSG_IDENTIFY_CWD,
MSG_COMMAND = 200,
MSG_DETACH,