Add -u socket_path option

main
cel 7 years ago
parent f1d756582e
commit f60b29a13e

@ -16,7 +16,7 @@ sudo make install
## Usage ## Usage
```sh ```sh
sbotc [-j] [-T] [-n] [-c <cap>] [-s <host>] [-p <port>] [-k <key>] [-K <keypair_seed>] sbotc [-j] [-T] [-n] [-c <cap>] [-s <host>] [-p <port>] [-u <socket_path>] [-k <key>] [-K <keypair_seed>]
[-t <type>] <method> [<argument>...] [-t <type>] <method> [<argument>...]
``` ```

@ -13,6 +13,7 @@
.Op Fl c Ar cap .Op Fl c Ar cap
.Op Fl s Ar host .Op Fl s Ar host
.Op Fl p Ar port .Op Fl p Ar port
.Op Fl u Ar socket_path
.Op Fl k Ar key .Op Fl k Ar key
.Op Fl K Ar keypair_seed .Op Fl K Ar keypair_seed
.Op Fl t Ar type .Op Fl t Ar type
@ -44,6 +45,11 @@ Capability key for secret-handshake. Default is SSB's capability key,
The hostname to connect to. Default is localhost. The hostname to connect to. Default is localhost.
.It Fl p Ar port .It Fl p Ar port
The port to connect to. Default is 8008. The port to connect to. Default is 8008.
.It Fl u Ar socket_path
Unix socket path to connect to, instead of TCP socket. Conflicts with
.Fl p
and
.Fl s .
.It Fl k Ar key .It Fl k Ar key
The key to connect to. Default is your public key, as read from your The key to connect to. Default is your public key, as read from your
private key file. private key file.

@ -24,6 +24,7 @@
#include <sys/select.h> #include <sys/select.h>
#include <sys/socket.h> #include <sys/socket.h>
#include <sys/stat.h> #include <sys/stat.h>
#include <sys/un.h>
#include <unistd.h> #include <unistd.h>
#include <sodium.h> #include <sodium.h>
@ -96,7 +97,7 @@ static const unsigned char ssb_cap[] = {
}; };
static void usage() { static void usage() {
fputs("usage: sbotc [-j] [-T] [-n] [-c <cap>] [-s <host>] [-p <port>] [-k <key>] [-K <keypair_seed>] \n" fputs("usage: sbotc [-j] [-T] [-n] [-c <cap>] [-s <host>] [-p <port>] [-u <socket_path>] [-k <key>] [-K <keypair_seed>]\n"
" [-t <type>] <method> [<argument>...]\n", stderr); " [-t <type>] <method> [<argument>...]\n", stderr);
exit(EXIT_FAILURE); exit(EXIT_FAILURE);
} }
@ -818,6 +819,7 @@ int main(int argc, char *argv[]) {
const char *port = "8008"; const char *port = "8008";
const char *typestr = NULL, *methodstr; const char *typestr = NULL, *methodstr;
const char *shs_cap_key_str = NULL; const char *shs_cap_key_str = NULL;
const char *socket_path = NULL;
size_t argument_len; size_t argument_len;
unsigned char private_key[64]; unsigned char private_key[64];
unsigned char public_key[32]; unsigned char public_key[32];
@ -830,6 +832,8 @@ int main(int argc, char *argv[]) {
ssize_t len; ssize_t len;
bool test = false; bool test = false;
bool noauth = false; bool noauth = false;
bool host_arg = false;
bool port_arg = false;
bool shs_cap_key_str_arg = false; bool shs_cap_key_str_arg = false;
get_app_dir(app_dir, sizeof(app_dir)); get_app_dir(app_dir, sizeof(app_dir));
@ -854,10 +858,11 @@ int main(int argc, char *argv[]) {
case 'c': shs_cap_key_str = argv[++i]; shs_cap_key_str_arg = true; break; case 'c': shs_cap_key_str = argv[++i]; shs_cap_key_str_arg = true; break;
case 'j': ptype = pkt_type_json; break; case 'j': ptype = pkt_type_json; break;
case 'T': test = true; break; case 'T': test = true; break;
case 's': host = argv[++i]; break; case 's': host = argv[++i]; host_arg = true; break;
case 'k': key = argv[++i]; break; case 'k': key = argv[++i]; break;
case 'K': keypair_seed_str = argv[++i]; break; case 'K': keypair_seed_str = argv[++i]; break;
case 'p': port = argv[++i]; break; case 'p': port = argv[++i]; port_arg = true; break;
case 'u': socket_path = argv[++i]; break;
case 't': typestr = argv[++i]; break; case 't': typestr = argv[++i]; break;
case 'n': noauth = true; break; case 'n': noauth = true; break;
default: usage(); default: usage();
@ -928,6 +933,21 @@ int main(int argc, char *argv[]) {
infd = STDIN_FILENO; infd = STDIN_FILENO;
outfd = STDOUT_FILENO; outfd = STDOUT_FILENO;
s = -1; s = -1;
} else if (socket_path) {
if (port_arg) errx(1, "-p port conflicts with -u socket_path");
if (host_arg) errx(1, "-s host conflicts with -u socket_path");
struct sockaddr_un name;
size_t path_len = strlen(socket_path);
if (path_len >= sizeof(name.sun_path)-1) errx(1, "socket path too long");
s = socket(AF_UNIX, SOCK_STREAM, 0);
if (s < 0) err(1, "socket");
memset(&name, 0, sizeof(struct sockaddr_un));
name.sun_family = AF_UNIX;
strncpy(name.sun_path, socket_path, sizeof(name.sun_path) - 1);
rc = connect(s, (const struct sockaddr *)&name, sizeof name);
if (rc < 0) err(1, "connect");
} else { } else {
s = tcp_connect(host, port); s = tcp_connect(host, port);
if (s < 0) err(1, "tcp_connect"); if (s < 0) err(1, "tcp_connect");

Loading…
Cancel
Save