ref: d253ae959d6c505d4a93a981ea097bf7b89442a1
parent: 3e05a1d462b44a519621901be94566e9300eca93
author: Jacob Moody <[email protected]>
date: Thu Jul 22 18:59:19 EDT 2021
enable posting to remote /srv through -s
--- a/cpu.c
+++ b/cpu.c
@@ -98,6 +98,7 @@
int pin[2];
int pout[2];
int infd, outfd;
+ char *srv = nil;
int i;
pid_t execc, xferc;
@@ -117,9 +118,10 @@
case 'a': authserver = EARGF(usage()); break;
case 'p': port = EARGF(usage()); break;
case 'R': Rflag++; break;
+ case 's': srv = EARGF(usage()); break;
} ARGEND
- if(Rflag)
+ if(Rflag || srv != nil)
port = "17019";
if(user == nil || host == nil || authserver == nil || port == nil)
@@ -137,7 +139,15 @@
sysfatal("could not init openssl");
ssl_conn = SSL_new(ssl_ctx);
- if(*argv && !Rflag){
+
+ fd = unix_dial(host, port);
+ if(fd < 0){
+ sysfatal("Failed to connect to the client");
+ }
+
+ p9authtls(fd);
+
+ if(!Rflag || srv != nil){
pipe(pin);
pipe(pout);
switch((execc = fork())){
@@ -155,16 +165,13 @@
close(pin[0]);
infd = pout[0];
outfd = pin[1];
+ if(srv != nil){
+ snprint(buf, sizeof buf - 1, "bind '#|' /n/p; <>[3]/n/p/data1 { echo 3 > /srv/%s; cat /n/p/data & cat > /n/p/data}\n", srv);
+ goto rcpu;
+ }
}
- fd = unix_dial(host, port);
- if(fd < 0){
- sysfatal("Failed to connect to the client");
- }
-
- p9authtls(fd);
-
- if(*argv && Rflag) {
+ if(Rflag) {
for(i=0,n=0; i<argc; i++)
n += snprint(buf+n, sizeof buf - n - 1, "%s ", argv[i]);
if(n <= 0)
@@ -171,6 +178,7 @@
usage();
buf[n-1] = '\n';
buf[n] = '\0';
+rcpu:
i = strlen(buf);
snprint(buf2, sizeof buf2, "%7d\n", i);
tls_send(-1, buf2, strlen(buf2));