Introduction
Introduction Statistics Contact Development Disclaimer Help
Set GOPHERS and HTTPS in CGI, if TLS is used. - geomyidae - A small C-based gop…
git clone git://bitreich.org/geomyidae/ git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfri…
Log
Files
Refs
Tags
README
LICENSE
---
commit 89d4f0d0cf90543362a036133e88cb9fe21513d4
parent 3600ffac963bc5816c86b8e447feea77a2b34751
Author: Christoph Lohmann <[email protected]>
Date: Fri, 12 Jun 2020 20:17:01 +0200
Set GOPHERS and HTTPS in CGI, if TLS is used.
Add infrastructure, so other handlers could handle it too.
Diffstat:
M geomyidae.8 | 1 +
M handlr.c | 16 +++++++++-------
M handlr.h | 11 ++++++-----
M ind.c | 12 +++++++++++-
M ind.h | 5 +++--
M main.c | 9 +++++----
6 files changed, 35 insertions(+), 19 deletions(-)
---
diff --git a/geomyidae.8 b/geomyidae.8
@@ -372,6 +372,7 @@ Additionally to the above arguments several environment var…
.Dl SERVER_PROTOCOL = `gopher/1.0'
.Dl SERVER_SOFTWARE = `geomyidae'
.Dl X_GOPHER_SEARCH = search (See above.)
+.Dl HTTPS and GOPHERS = set, if TLS is used
.Pp
.Ed
.
diff --git a/handlr.c b/handlr.c
@@ -23,7 +23,7 @@
void
handledir(int sock, char *path, char *port, char *base, char *args,
- char *sear, char *ohost, char *chost)
+ char *sear, char *ohost, char *chost, int istls)
{
char *pa, *file, *e, *par, *b;
struct dirent **dirent;
@@ -80,7 +80,7 @@ handledir(int sock, char *path, char *port, char *base, char …
void
handlegph(int sock, char *file, char *port, char *base, char *args,
- char *sear, char *ohost, char *chost)
+ char *sear, char *ohost, char *chost, int istls)
{
Indexs *act;
int i, ret = 0;
@@ -103,7 +103,7 @@ handlegph(int sock, char *file, char *port, char *base, cha…
void
handlebin(int sock, char *file, char *port, char *base, char *args,
- char *sear, char *ohost, char *chost)
+ char *sear, char *ohost, char *chost, int istls)
{
int fd;
@@ -123,7 +123,7 @@ handlebin(int sock, char *file, char *port, char *base, cha…
void
handlecgi(int sock, char *file, char *port, char *base, char *args,
- char *sear, char *ohost, char *chost)
+ char *sear, char *ohost, char *chost, int istls)
{
char *p, *path;
@@ -158,7 +158,8 @@ handlecgi(int sock, char *file, char *port, char *base, cha…
break;
}
- setcgienviron(p, file, port, base, args, sear, ohost, chost);
+ setcgienviron(p, file, port, base, args, sear, ohost, chost,
+ istls);
if (execl(file, p, sear, args, ohost, port,
(char *)NULL) == -1) {
@@ -177,7 +178,7 @@ handlecgi(int sock, char *file, char *port, char *base, cha…
void
handledcgi(int sock, char *file, char *port, char *base, char *args,
- char *sear, char *ohost, char *chost)
+ char *sear, char *ohost, char *chost, int istls)
{
FILE *fp;
char *p, *path, *ln = NULL;
@@ -218,7 +219,8 @@ handledcgi(int sock, char *file, char *port, char *base, ch…
break;
}
- setcgienviron(p, file, port, base, args, sear, ohost, chost);
+ setcgienviron(p, file, port, base, args, sear, ohost, chost,
+ istls);
if (execl(file, p, sear, args, ohost, port,
(char *)NULL) == -1) {
diff --git a/handlr.h b/handlr.h
@@ -17,17 +17,18 @@
* sear .... search part of request (»selector\tsearch\r\n«)
* ohost ... host of geomiydae (See -h in geomyidae(8))
* chost ... IP of the client sending a request
+ * istls ... set to 1, if TLS was used for thr request
*/
void handledir(int sock, char *path, char *port, char *base, char *args,
- char *sear, char *ohost, char *chost);
+ char *sear, char *ohost, char *chost, int istls);
void handlegph(int sock, char *file, char *port, char *base, char *args,
- char *sear, char *ohost, char *chost);
+ char *sear, char *ohost, char *chost, int istls);
void handlebin(int sock, char *file, char *port, char *base, char *args,
- char *sear, char *ohost, char *chost);
+ char *sear, char *ohost, char *chost, int istls);
void handlecgi(int sock, char *file, char *port, char *base, char *args,
- char *sear, char *ohost, char *chost);
+ char *sear, char *ohost, char *chost, int istls);
void handledcgi(int sock, char *file, char *port, char *base, char *args,
- char *sear, char *ohost, char *chost);
+ char *sear, char *ohost, char *chost, int istls);
#endif
diff --git a/ind.c b/ind.c
@@ -465,7 +465,7 @@ reverselookup(char *host)
void
setcgienviron(char *file, char *path, char *port, char *base, char *args,
- char *sear, char *ohost, char *chost)
+ char *sear, char *ohost, char *chost, int istls)
{
/*
* TODO: Clean environment from possible unsafe environment variables.
@@ -485,6 +485,7 @@ setcgienviron(char *file, char *path, char *port, char *bas…
* the script. The RFC allows us to set the IP to the value.
*/
setenv("REMOTE_HOST", chost, 1);
+ /* Please do not implement identd here. */
unsetenv("REMOTE_IDENT");
unsetenv("REMOTE_USER");
/* Make PHP happy. */
@@ -501,5 +502,14 @@ setcgienviron(char *file, char *path, char *port, char *ba…
setenv("SERVER_SOFTWARE", "geomyidae", 1);
setenv("X_GOPHER_SEARCH", sear, 1);
+
+ if (istls) {
+ setenv("GOPHERS", "on", 1);
+ setenv("HTTPS", "on", 1);
+ } else {
+ unsetenv("GOPHERS");
+ unsetenv("HTTPS");
+ }
+
}
diff --git a/ind.h b/ind.h
@@ -27,7 +27,7 @@ struct filetype {
char *end;
char *type;
void (* f)(int, char *, char *, char *, char *, char *, char *,
- char *);
+ char *, int);
};
filetype *gettype(char *filename);
@@ -48,7 +48,8 @@ void freeelem(Elems *e);
char *smprintf(char *fmt, ...);
char *reverselookup(char *host);
void setcgienviron(char *file, char *path, char *port, char *base,
- char *args, char *sear, char *ohost, char *chost);
+ char *args, char *sear, char *ohost, char *chost,
+ int istls);
#endif
diff --git a/main.c b/main.c
@@ -121,7 +121,8 @@ logentry(char *host, char *port, char *qry, char *status)
void
handlerequest(int sock, char *req, int rlen, char *base, char *ohost,
- char *port, char *clienth, char *clientp, int nocgi)
+ char *port, char *clienth, char *clientp, int nocgi,
+ int istls)
{
struct stat dir;
char recvc[1025], recvb[1025], path[1025], *args = NULL, *sear, *c;
@@ -247,12 +248,12 @@ handlerequest(int sock, char *req, int rlen, char *base, …
logentry(clienth, clientp, recvc, "nocgi error…
} else {
type->f(sock, path, port, base, args, sear, ohost,
- clienth);
+ clienth, istls);
}
} else {
if (S_ISDIR(dir.st_mode)) {
handledir(sock, path, port, base, args, sear, ohost,
- clienth);
+ clienth, istls);
if (loglvl & DIRS) {
logentry(clienth, clientp, recvc,
"dir listing");
@@ -863,7 +864,7 @@ main(int argc, char *argv[])
handlerequest(sock, recvb, rlen, base,
ohost, sport, clienth,
- clientp, nocgi);
+ clientp, nocgi, istls);
if (!istls) {
waitforpendingbytes(sock);
You are viewing proxied material from bitreich.org. The copyright of proxied material belongs to its original authors. Any comments or complaints in relation to proxied material should be directed to the original authors of the content concerned. Please see the disclaimer for more details.