ref: 5ca0f0875e0762d2c34ce0f5450ffba585e413f0
parent: 0ca1541b155d0107aea29a8bed4ef23f20365f37
parent: 87bd72ba5cbafb99c58e608c335705a98b10ce23
author: B. Atticus Grobe <[email protected]>
date: Tue Jul 5 15:16:42 EDT 2022
Merge branch 'master' of https://git.sr.ht/~moody/tlsclient
--- /dev/null
+++ b/.builds/obsd.yml
@@ -1,0 +1,13 @@
+image: openbsd/6.9
+sources:
+ - https://git.sr.ht/~moody/tlsclient
+packages:
+ - "openssl-1.1.1k"
+artifacts:
+ - tlsclient/tlsclient-obsd.tar.gz
+tasks:
+ - build: |
+ cd tlsclient
+ sed -i '/^OPENSSL/d' Make.config
+ sed -i 's/#OPENSSL/OPENSSL/g' Make.config
+ make -j $(sysctl -n hw.ncpu) obsddist
--- /dev/null
+++ b/.builds/pam.yml
@@ -1,0 +1,9 @@
+image: archlinux
+sources:
+ - https://git.sr.ht/~moody/tlsclient
+artifacts:
+ - tlsclient/tlsclient.tar.gz
+tasks:
+ - build: |
+ cd tlsclient
+ make -j $(nproc) linuxdist
--- a/Make.config
+++ b/Make.config
@@ -5,4 +5,5 @@
LDADD=
TARG=tlsclient
+
all: default
--- a/Makefile
+++ b/Makefile
@@ -62,3 +62,11 @@
.PHONY: third_party/boringssl/libssl.a
third_party/boringssl/libssl.a:
(cd third_party/boringssl; $(MAKE) libssl.a)
+
+linuxdist: tlsclient pam_p9.so 9cpu
+ tar cf tlsclient.tar tlsclient pam_p9.so 9cpu
+ gzip tlsclient.tar
+
+obsddist: tlsclient login_-dp9ik 9cpu
+ tar cf tlsclient-obsd.tar tlsclient 9cpu login_-dp9ik
+ gzip tlsclient-obsd.tar
--- a/cpu.c
+++ b/cpu.c
@@ -98,7 +98,6 @@
int pin[2];
int pout[2];
int infd, outfd;
- char *srv = nil;
int i;
pid_t execc, xferc;
@@ -118,10 +117,9 @@
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 || srv != nil)
+ if(Rflag)
port = "17019";
if(user == nil || host == nil || authserver == nil || port == nil)
@@ -139,15 +137,7 @@
sysfatal("could not init openssl");
ssl_conn = SSL_new(ssl_ctx);
-
- fd = unix_dial(host, port);
- if(fd < 0){
- sysfatal("Failed to connect to the client");
- }
-
- p9authtls(fd);
-
- if(!Rflag || srv != nil){
+ if(*argv && !Rflag){
pipe(pin);
pipe(pout);
switch((execc = fork())){
@@ -165,13 +155,16 @@
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;
- }
}
- if(Rflag) {
+ fd = unix_dial(host, port);
+ if(fd < 0){
+ sysfatal("Failed to connect to the client");
+ }
+
+ p9authtls(fd);
+
+ if(*argv && Rflag) {
for(i=0,n=0; i<argc; i++)
n += snprint(buf+n, sizeof buf - n - 1, "%s ", argv[i]);
if(n <= 0)
@@ -178,7 +171,6 @@
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));
--- a/p9any.c
+++ b/p9any.c
@@ -31,24 +31,43 @@
int
unix_dial(char *host, char *port)
{
- int fd;
- struct sockaddr_in server;
- struct hostent *he;
- struct in_addr **addr_list;
+ struct addrinfo hints, *res, *res0;
+ int error;
+ int save_errno;
+ int s;
+ const char *cause = NULL;
+ memset(&hints, 0, sizeof(hints));
+ hints.ai_family = AF_UNSPEC;
+ hints.ai_socktype = SOCK_STREAM;
- he = gethostbyname(host);
- if(he == nil){
+
+ error = getaddrinfo(host, port, &hints, &res0);
+ if(error){
printf("could not resolve %s", host);
return -1;
}
- fd = socket(AF_INET, SOCK_STREAM, 0);
- addr_list = (struct in_addr **) he->h_addr_list;
- server.sin_addr.s_addr = inet_addr(inet_ntoa(*addr_list[0]));
- server.sin_family = AF_INET;
- server.sin_port = htons(atoi(port));
- if(connect(fd, (struct sockaddr*)&server, sizeof(server)) < 0)
- return -1;
- return fd;
+ s = -1;
+ for (res = res0; res; res = res->ai_next) {
+ s = socket(res->ai_family, res->ai_socktype, res->ai_protocol);
+ if (s == -1) {
+ cause = "socket";
+ continue;
+ }
+ if (connect(s, res->ai_addr, res->ai_addrlen) == -1) {
+ cause = "connect";
+ save_errno = errno;
+ close(s);
+ errno = save_errno;
+ s = -1;
+ continue;
+ }
+
+ break; /* okay we got one */
+ }
+ if (s == -1) {
+ err(1, "%s", cause);
+ }
+ return s;
}
static int