rx: rcpu service support
This commit is contained in:
parent
fde5906b30
commit
373723d4f6
1 changed files with 51 additions and 9 deletions
|
@ -1,6 +1,7 @@
|
||||||
#include <u.h>
|
#include <u.h>
|
||||||
#include <libc.h>
|
#include <libc.h>
|
||||||
#include <auth.h>
|
#include <auth.h>
|
||||||
|
#include <libsec.h>
|
||||||
|
|
||||||
int eof; /* send an eof if true */
|
int eof; /* send an eof if true */
|
||||||
int crtonl; /* convert all received \r to \n */
|
int crtonl; /* convert all received \r to \n */
|
||||||
|
@ -9,7 +10,8 @@ char *note = "die: yankee dog";
|
||||||
char *ruser; /* for BSD authentication */
|
char *ruser; /* for BSD authentication */
|
||||||
char *key;
|
char *key;
|
||||||
|
|
||||||
void rex(int, char*, char*);
|
void rex(int, char*);
|
||||||
|
void rcpu(int, char*);
|
||||||
void tcpexec(int, char*, char*);
|
void tcpexec(int, char*, char*);
|
||||||
int call(char *, char*, char*, char**);
|
int call(char *, char*, char*, char**);
|
||||||
char *buildargs(char*[]);
|
char *buildargs(char*[]);
|
||||||
|
@ -30,6 +32,8 @@ main(int argc, char *argv[])
|
||||||
char *host, *addr, *args;
|
char *host, *addr, *args;
|
||||||
int fd;
|
int fd;
|
||||||
|
|
||||||
|
quotefmtinstall();
|
||||||
|
|
||||||
key = "";
|
key = "";
|
||||||
eof = 1;
|
eof = 1;
|
||||||
crtonl = 0;
|
crtonl = 0;
|
||||||
|
@ -59,9 +63,12 @@ main(int argc, char *argv[])
|
||||||
host = argv[0];
|
host = argv[0];
|
||||||
args = buildargs(&argv[1]);
|
args = buildargs(&argv[1]);
|
||||||
|
|
||||||
|
fd = call(0, host, "rcpu", &addr);
|
||||||
|
if(fd >= 0)
|
||||||
|
rcpu(fd, args);
|
||||||
fd = call(0, host, "rexexec", &addr);
|
fd = call(0, host, "rexexec", &addr);
|
||||||
if(fd >= 0)
|
if(fd >= 0)
|
||||||
rex(fd, args, "p9any");
|
rex(fd, args);
|
||||||
close(fd);
|
close(fd);
|
||||||
|
|
||||||
/* if there's an ssh port, try that */
|
/* if there's an ssh port, try that */
|
||||||
|
@ -89,18 +96,53 @@ call(char *net, char *host, char *service, char **na)
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
rex(int fd, char *cmd, char *proto)
|
rcpu(int fd, char *cmd)
|
||||||
|
{
|
||||||
|
char buf[4096];
|
||||||
|
int kid, n;
|
||||||
|
TLSconn *conn;
|
||||||
|
AuthInfo *ai;
|
||||||
|
|
||||||
|
ai = auth_proxy(fd, auth_getkey, "proto=p9any role=client %s", key);
|
||||||
|
if(ai == nil)
|
||||||
|
error("auth_proxy", nil);
|
||||||
|
|
||||||
|
conn = (TLSconn*)mallocz(sizeof *conn, 1);
|
||||||
|
conn->pskID = "p9secret";
|
||||||
|
conn->psk = ai->secret;
|
||||||
|
conn->psklen = ai->nsecret;
|
||||||
|
fd = tlsClient(fd, conn);
|
||||||
|
if(fd < 0)
|
||||||
|
error("tlsClient", nil);
|
||||||
|
|
||||||
|
auth_freeAI(ai);
|
||||||
|
|
||||||
|
cmd = smprint("service=rx exec rc -lc %q\n", cmd);
|
||||||
|
if(fprint(fd, "%7ld\n%s", strlen(cmd), cmd) < 0)
|
||||||
|
error("write", nil);
|
||||||
|
free(cmd);
|
||||||
|
|
||||||
|
kid = send(fd);
|
||||||
|
while((n=read(fd, buf, sizeof buf))>0)
|
||||||
|
if(write(1, buf, n)!=n)
|
||||||
|
error("write error", 0);
|
||||||
|
sleep(250);
|
||||||
|
postnote(PNPROC, kid, note);/**/
|
||||||
|
exits(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
rex(int fd, char *cmd)
|
||||||
{
|
{
|
||||||
char buf[4096];
|
char buf[4096];
|
||||||
int kid, n;
|
int kid, n;
|
||||||
AuthInfo *ai;
|
AuthInfo *ai;
|
||||||
|
|
||||||
ai = auth_proxy(fd, auth_getkey, "proto=%s role=client %s", proto, key);
|
ai = auth_proxy(fd, auth_getkey, "proto=p9any role=client %s", key);
|
||||||
if(ai == nil){
|
if(ai == nil)
|
||||||
if(strcmp(proto, "p9any") == 0)
|
|
||||||
return;
|
|
||||||
error("auth_proxy", nil);
|
error("auth_proxy", nil);
|
||||||
}
|
auth_freeAI(ai);
|
||||||
|
|
||||||
write(fd, cmd, strlen(cmd)+1);
|
write(fd, cmd, strlen(cmd)+1);
|
||||||
|
|
||||||
kid = send(fd);
|
kid = send(fd);
|
||||||
|
@ -222,7 +264,7 @@ send(int fd)
|
||||||
void
|
void
|
||||||
error(char *s, char *z)
|
error(char *s, char *z)
|
||||||
{
|
{
|
||||||
if(z == 0)
|
if(z == nil)
|
||||||
fprint(2, "%s: %s: %r\n", argv0, s);
|
fprint(2, "%s: %s: %r\n", argv0, s);
|
||||||
else
|
else
|
||||||
fprint(2, "%s: %s %s: %r\n", argv0, s, z);
|
fprint(2, "%s: %s %s: %r\n", argv0, s, z);
|
||||||
|
|
Loading…
Reference in a new issue