X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ian/git?p=secnet.git;a=blobdiff_plain;f=slip.c;h=de138f9fd98a4e904aeb14c4936662b67f6da696;hp=369651f459ec5cf3f0915b8eac4c96ee473d76e0;hb=ca58ee4883fc5eb309f950787d35af5deca05321;hpb=4f5e39ecfaa49376b0a5c3a4c384e91a828c1105 diff --git a/slip.c b/slip.c index 369651f..de138f9 100644 --- a/slip.c +++ b/slip.c @@ -106,7 +106,7 @@ static void slip_unstuff(struct slip *st, uint8_t *buf, uint32_t l) } static void slip_init(struct slip *st, struct cloc loc, dict_t *dict, - string_t name, netlink_deliver_fn *to_host) + cstring_t name, netlink_deliver_fn *to_host) { st->netlink_to_tunnel= netlink_init(&st->nl,st,loc,dict, @@ -124,9 +124,9 @@ struct userv { struct slip slip; int txfd; /* We transmit to userv */ int rxfd; /* We receive from userv */ - string_t userv_path; - string_t service_user; - string_t service_name; + cstring_t userv_path; + cstring_t service_user; + cstring_t service_name; pid_t pid; bool_t expecting_userv_exit; }; @@ -140,9 +140,9 @@ static int userv_beforepoll(void *sst, struct pollfd *fds, int *nfds_io, if (st->rxfd!=-1) { *nfds_io=2; fds[0].fd=st->txfd; - fds[0].events=POLLERR; /* Might want to pick up POLLOUT sometime */ + fds[0].events=0; /* Might want to pick up POLLOUT sometime */ fds[1].fd=st->rxfd; - fds[1].events=POLLIN|POLLERR|POLLHUP; + fds[1].events=POLLIN; } else { *nfds_io=0; } @@ -208,8 +208,8 @@ static void userv_userv_callback(void *sst, pid_t pid, int status) } struct userv_entry_rec { - string_t path; - char **argv; + cstring_t path; + const char **argv; int in; int out; /* XXX perhaps we should collect and log stderr? */ @@ -224,7 +224,9 @@ static void userv_entry(void *sst) /* XXX close all other fds */ setsid(); - execvp(st->path,st->argv); + /* XXX We really should strdup() all of argv[] but because we'll just + exit anyway if execvp() fails it doesn't seem worth bothering. */ + execvp(st->path,(char *const*)st->argv); perror("userv-entry: execvp()"); exit(1); }