SMOLNET PORTAL home about changes
iFirst implementation of two-way TLS for scripts. - geomyidae - A small C-based gopherd.	Err	bitreich.org	70
hgit clone git://bitreich.org/geomyidae/ git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfrinws65d7roiv6bfj7d652fid.onion/geomyidae/	URL:git://bitreich.org/geomyidae/ git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfrinws65d7roiv6bfj7d652fid.onion/geomyidae/	bitreich.org	70
1Log	/scm/geomyidae/log.gph	bitreich.org	70
1Files	/scm/geomyidae/files.gph	bitreich.org	70
1Refs	/scm/geomyidae/refs.gph	bitreich.org	70
1Tags	/scm/geomyidae/tag	bitreich.org	70
1README	/scm/geomyidae/file/README.gph	bitreich.org	70
1LICENSE	/scm/geomyidae/file/LICENSE.gph	bitreich.org	70
i---	Err	bitreich.org	70
1commit f66a8a67b9471909016d6f24ce93f39584130a67	/scm/geomyidae/commit/f66a8a67b9471909016d6f24ce93f39584130a67.gph	bitreich.org	70
1parent 3a9cbc78b4777d2dab54bca974f65c708ffc61a5	/scm/geomyidae/commit/3a9cbc78b4777d2dab54bca974f65c708ffc61a5.gph	bitreich.org	70
hAuthor: Christoph Lohmann <20h@r-36.net>	URL:mailto:20h@r-36.net	bitreich.org	70
iDate:   Fri, 26 May 2023 06:45:48 +0200	Err	bitreich.org	70
i	Err	bitreich.org	70
iFirst implementation of two-way TLS for scripts.	Err	bitreich.org	70
i	Err	bitreich.org	70
iDiffstat:	Err	bitreich.org	70
i  M main.c                              |      58 ++++++++++++++++++++++++-------	Err	bitreich.org	70
i	Err	bitreich.org	70
i1 file changed, 45 insertions(+), 13 deletions(-)	Err	bitreich.org	70
i---	Err	bitreich.org	70
1diff --git a/main.c b/main.c	/scm/geomyidae/file/main.c.gph	bitreich.org	70
i@@ -552,7 +552,7 @@ main(int argc, char *argv[])	Err	bitreich.org	70
i             dotls = 0, dohaproxy = 0, tcpver = -1, haret = 0,	Err	bitreich.org	70
i #ifdef ENABLE_TLS	Err	bitreich.org	70
i             tlssocks[2], shufbuf[1025],	Err	bitreich.org	70
i-            shuflen, wlen, shufpos,	Err	bitreich.org	70
i+            shuflen, wlen, shufpos, tlsclientreader,	Err	bitreich.org	70
i #endif /* ENABLE_TLS */	Err	bitreich.org	70
i             maxrecv, retl,	Err	bitreich.org	70
i             rlen = 0;	Err	bitreich.org	70
i@@ -1049,27 +1049,59 @@ read_selector_again:	Err	bitreich.org	70
i                                         perror("fork");	Err	bitreich.org	70
i                                         return 1;	Err	bitreich.org	70
i                                 default:	Err	bitreich.org	70
i-                                        close(tlssocks[1]);	Err	bitreich.org	70
i+                                        tlsclientreader = 1;	Err	bitreich.org	70
i+                                        switch(fork()) {	Err	bitreich.org	70
i+                                        case 0:	Err	bitreich.org	70
i+                                                break;	Err	bitreich.org	70
i+                                        case -1:	Err	bitreich.org	70
i+                                                perror("fork");	Err	bitreich.org	70
i+                                                return 1;	Err	bitreich.org	70
i+                                        default:	Err	bitreich.org	70
i+                                                tlsclientreader = 0;	Err	bitreich.org	70
i+                                        }	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+                                        close(tlssocks[tlsclientreader? 1 : 0]);	Err	bitreich.org	70
i                                         do {	Err	bitreich.org	70
i-                                                shuflen = read(tlssocks[0], shufbuf, sizeof(shufbuf)-1);	Err	bitreich.org	70
i+                                                if (tlsclientreader) {	Err	bitreich.org	70
i+                                                        shuflen = read(tlssocks[0], shufbuf, sizeof(shufbuf)-1);	Err	bitreich.org	70
i+                                                } else {	Err	bitreich.org	70
i+                                                        shuflen = tls_read(tlsclientctx, shufbuf, sizeof(shufbuf)-1);	Err	bitreich.org	70
i+                                                }	Err	bitreich.org	70
i                                                 if (shuflen == -1 && errno == EINTR)	Err	bitreich.org	70
i                                                         continue;	Err	bitreich.org	70
i                                                 for (shufpos = 0; shufpos < shuflen; shufpos += wlen) {	Err	bitreich.org	70
i-                                                        wlen = tls_write(tlsclientctx, shufbuf+shufpos, shuflen-shufpos);	Err	bitreich.org	70
i-                                                        if (wlen < 0) {	Err	bitreich.org	70
i-                                                                fprintf(stderr, "tls_write failed: %s\n", tls_error(tlsclientctx));	Err	bitreich.org	70
i-                                                                return 1;	Err	bitreich.org	70
i+                                                        if (tlsclientreader) {	Err	bitreich.org	70
i+                                                                wlen = tls_write(tlsclientctx, shufbuf+shufpos, shuflen-shufpos);	Err	bitreich.org	70
i+                                                                if (wlen < 0) {	Err	bitreich.org	70
i+                                                                        fprintf(stderr, "tls_write failed: %s\n", tls_error(tlsclientctx));	Err	bitreich.org	70
i+                                                                        return 1;	Err	bitreich.org	70
i+                                                                }	Err	bitreich.org	70
i+                                                        } else {	Err	bitreich.org	70
i+                                                                wlen = write(tlssocks[1], shufbuf+shufpos, shuflen-shufpos);	Err	bitreich.org	70
i+                                                                if (wlen < 0) {	Err	bitreich.org	70
i+                                                                        perror("write");	Err	bitreich.org	70
i+                                                                        return 1;	Err	bitreich.org	70
i+                                                                }	Err	bitreich.org	70
i                                                         }	Err	bitreich.org	70
i                                                 }	Err	bitreich.org	70
i                                         } while (shuflen > 0);	Err	bitreich.org	70
i 	Err	bitreich.org	70
i-                                        tls_close(tlsclientctx);	Err	bitreich.org	70
i-                                        tls_free(tlsclientctx);	Err	bitreich.org	70
i-                                        close(tlssocks[0]);	Err	bitreich.org	70
i+                                        if (tlsclientreader) {	Err	bitreich.org	70
i+                                                tls_close(tlsclientctx);	Err	bitreich.org	70
i+                                                tls_free(tlsclientctx);	Err	bitreich.org	70
i+                                        }	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+                                        close(tlssocks[tlsclientreader? 0 : 1]);	Err	bitreich.org	70
i 	Err	bitreich.org	70
i-                                        waitforpendingbytes(sock);	Err	bitreich.org	70
i-                                        shutdown(sock, SHUT_RDWR);	Err	bitreich.org	70
i-                                        close(sock);	Err	bitreich.org	70
i+                                        if (tlsclientreader) {	Err	bitreich.org	70
i+                                                /*	Err	bitreich.org	70
i+                                                 * Only one process needs	Err	bitreich.org	70
i+                                                 * to do this.	Err	bitreich.org	70
i+                                                 */	Err	bitreich.org	70
i+                                                waitforpendingbytes(sock);	Err	bitreich.org	70
i+                                                shutdown(sock, SHUT_RDWR);	Err	bitreich.org	70
i+                                                close(sock);	Err	bitreich.org	70
i+                                        }	Err	bitreich.org	70
i                                         return 0;	Err	bitreich.org	70
i                                 }	Err	bitreich.org	70
i                         }	Err	bitreich.org	70
.
Response: text/plain
Original URLgopher://bitreich.org/0/scm/geomyidae/commit/f66a8a67b947...
Content-Typetext/plain; charset=utf-8