diff --git a/.gitignore b/.gitignore index 1fa4a58..b04a3e8 100644 --- a/.gitignore +++ b/.gitignore @@ -6,20 +6,18 @@ files.h functions.h README.options bin2c -in.gophernicus +gophernicus # # Release files # *.gz -ChangeLog # # Debian packaging leftovers # build-stamp debian/files -debian/changelog debian/gophernicus.debhelper.log debian/gophernicus.postrm.debhelper debian/gophernicus.substvars diff --git a/INSTALL.md b/INSTALL.md index 5c5f158..a4c4fff 100644 --- a/INSTALL.md +++ b/INSTALL.md @@ -90,7 +90,7 @@ just run 'make withwrap'. For configuring IP access lists with TCP wrappers, take a look at the files `/etc/hosts.allow` and `/etc/hosts.deny` (because the -manual pages suck). Use the daemon name 'in.gophernicus' to +manual pages suck). Use the daemon name 'gophernicus' to make your access lists. @@ -101,7 +101,7 @@ below line should be added to your `/etc/inetd.conf` and the inetd process restarted. ``` -gopher stream tcp nowait nobody /usr/sbin/in.gophernicus in.gophernicus -h +gopher stream tcp nowait nobody /usr/sbin/gophernicus gophernicus -h ``` The Makefile will automatically do this for you and remove it when @@ -142,7 +142,7 @@ Gophernicus uses SYSV shared memory for session tracking and statistics. It creates the shared memory block using mode 600 and a predefined key which means that a shared memory block created with one user cannot be used by another user. Simply -said, running in.gophernicus under various different user +said, running gophernicus under various different user accounts may create a situation where the memory block is locked to the wrong user. diff --git a/Makefile b/Makefile index de2d7c5..c7c32cb 100644 --- a/Makefile +++ b/Makefile @@ -7,10 +7,10 @@ # NAME = gophernicus PACKAGE = $(NAME) -BINARY = in.$(NAME) -VERSION = `./version` +BINARY = $(NAME) +VERSION = 3.0 CODENAME = Dungeon Edition -AUTHOR = Kim Holviala and others +AUTHOR = h9bnks and fosslinux EMAIL = gophernicus@gophernicus.org STARTED = 2009 @@ -18,7 +18,7 @@ SOURCES = $(NAME).c file.c menu.c string.c platform.c session.c options.c HEADERS = functions.h files.h OBJECTS = $(SOURCES:.c=.o) README = README.md -DOCS = LICENSE README.md INSTALL.md TODO ChangeLog README.Gophermap gophertag +DOCS = LICENSE README.md INSTALL.md TODO changelog README.Gophermap gophertag INSTALL = PATH=$$PATH:/usr/sbin ./install-sh -o 0 -g 0 DESTDIR = /usr @@ -71,19 +71,8 @@ withwrap: # Special targets # deb: - printf "$(PACKAGE) ($(VERSION)) unstable; urgency=low\n\n * Automatically generated changelog\n\n" > debian/changelog - printf " -- $(AUTHOR) <$(EMAIL)> %s\n" "`LC_ALL=POSIX date "+%a, %d %b %Y %H:%M:%S %z"`" >> debian/changelog dpkg-buildpackage -rfakeroot -uc -us -ChangeLog: - if [ -d .git ]; then \ - (./git2changelog > ChangeLog; \ - cat changelog.old >> ChangeLog); \ - else true; fi - -.PHONY: ChangeLog - - # # Building # @@ -142,7 +131,7 @@ clean-shm: # # Install targets # -install: ChangeLog clean-shm +install: clean-shm @case `uname` in \ Darwin) $(MAKE) ROOT="$(OSXROOT)" DESTDIR="$(OSXDEST)" install-files install-docs install-root install-osx install-done; ;; \ Haiku) $(MAKE) SBINDIR=/boot/common/bin DOCDIR=/boot/common/share/doc/$(PACKAGE) \ diff --git a/README.md b/README.md index 8ce968f..9caa1d7 100644 --- a/README.md +++ b/README.md @@ -1,10 +1,23 @@ # Gophernicus +Version 3.0 + *Copyright (c) 2009-2019 Kim Holviala and others* Gophernicus is a modern full-featured (and hopefully) secure gopher daemon. It is licensed under the BSD license. +## Support/Contact + +Developers can be reached at . + +Our IRC channel is on irc.freenode.net #gophernicus. + +You most likely want to subscribe to the gophernicus mailing list at +https://lists.tildeverse.org/postorius/lists/gophernicus.lists.tildeverse.org/, +especially if you maintain a server. This is where all important announcements +are made. + ## Command line options -h hostname Change server hostname (FQDN) [$HOSTNAME] @@ -72,7 +85,6 @@ on the root menu don't work make sure you are using the `-h HOSTNAME` parameter in your configuration (with a valid resolveable hostname instead of `HOSTNAME` - see INSTALL). - ## Security Gophernicus has been written with high security in mind. There should @@ -89,7 +101,6 @@ The `-nx` option prevents execution of any script or external file, and the `-nu` option suppresses scanning for and serving of `~user` directories (which are normally at `~/public_html/` for each user). - ## Gophermaps By default all gopher menus are automatically generated from the @@ -98,7 +109,6 @@ informational text along with the files, or if you want to completely replace the generated menu with your own you need to take a look at gophermaps. See the [README.gophermap](./README.gophermap) for more information. - ## Gophertags A gophertag file can be used to virtually rename a directory. Let's @@ -109,7 +119,6 @@ will show "bar" but the links will still point to "foo". This is useful for creating descriptive names for directories without littering the file system with spaces and weird characters. - ## Personal gopherspaces Gophernicus supports users personal gopherspaces. If a user has @@ -121,30 +130,31 @@ This is suppressed if the `-nu` option is given. In this case, any `~` entry which otherwise initiates listing of user directories will be displayed literally. - ## Virtual hosting Gophernicus supports virtual hosting, or serving more than one logical domain using the same IP address. Since gopher (RFC1436) doesn't -support virtual hosting this requires some clever (but mostly invisble) -hacks. +support virtual hosting this requires some hacks. To enable virtual hosting create one or more directories under your gopher root which are named after your domain names. The primary vhost directory (set with the `-h HOSTNAME` option) must exist or virtual hosting will be disabled. Then simply add content to the hostname -directories and you're up and running. +directories and you're (kind of) up and running. -Almost. +There is a serious issue with virtual hosting. -To make gopher clients work properly with virtual hosting, create a -root gophermap for each of your domains and include the "%" type -character to create a list of all available virtual hosts (see -README.gophermap). The generated virtual host links will be created so -that standard gopher clients will find the correct domain even when -they don't specifically tell the server which host they're trying to -reach. +As stated previously, RFC1436 dosen't support virtual hosting. Clients won't +like it. +How the virtual hosting works, is that it loops through the vhosts looking for +the selector. As you might think, the root gophermap exists on all of the +vhosts, meaning it might not use the correct vhost. There is currently no easy +way to fix this. + +It is recommended to add '%' on a line by itself to the bottom of your root +gophermaps. This will add "special" links of the format example.com/;example.com +which forces the correct vhost. ## CGI support @@ -189,7 +199,6 @@ the PHP command line interpreter. In other words, PHP starts working. And don't use the CGI version of PHP as it outputs HTTP headers the gopher protocol doesn't have. - ## Charset support and conversions Gophernicus supports three charsets: US-ASCII, ISO-8859-1 and UTF-8. @@ -208,7 +217,6 @@ than pure US-ASCII. If you want to disable the conversion use the something else than US-ASCII just use for example the `-o ISO-8859-1` option. - ## Selector rewriting Selector rewriting lets you rewrite parts of the selector on the fly. @@ -243,7 +251,6 @@ monitoring systems. To ease up such integrations, Gophernicus supports HTTP requests of the server-status page using an URL like `http://HOSTNAME:70/server-status?auto` . - ## TLS/SSL and proxy support As of version 2.3 Gophernicus supports the HAproxy proxy protocol @@ -285,11 +292,10 @@ Example: ; Enable TCP wrappers libwrap = yes - service = in.gophernicus-tls + service = gophernicus-tls ; Gopher over TLS service [gophernicus] accept = :::7070 connect = 127.0.0.1:70 protocol = proxy - diff --git a/VERSIONING.md b/VERSIONING.md new file mode 100644 index 0000000..027a647 --- /dev/null +++ b/VERSIONING.md @@ -0,0 +1,55 @@ +# Versioning + +## Latest version + +3.0 + +## Changelog + + +### 3.0 (from 101): +**N.B. this version has two important changes that may make it backwards-incompatible:** + * binary changed from in.gophernicus to gophernicus + * virtual hosting NEVER WORKED and does not work in the way previously + described + +Other changes: + * prevent leak of executable gophermap contents + * make sure {x,}inetd works when systemd is on the system + * allow -j flag to work + * add h9bnks (yargo) and fosslinux into developer roles + * add -nx flag, blocks executable gophermaps + * add -nu flag, disable ~/public_gopher + * modify various documentation to markdown + * fix various formattings and typos + * allow inetd targets to work without update-inetd + * correct handling of inetd.conf + * remove list of supported platforms + * remove example gophermaps + * add dependencies for various distros to INSTALL.md + * fix query urls + * add travis ci + * add documentation about CI + +Upgrade guide: + +If you are running gophernicus on a **production** system, **do not** upgrade +to 3.0. Wait for 3.1. + +As a general guide: + +If you are running 101 and haven't upgraded to newer versions **because** of +instability worries, **wait for 3.1**. + +If you were running other rolling-release versions, **upgrade now**. + +## History + +Gophernicus has had a rough versioning history. + +Versions progressed through to 2.6. Then it changed to a rolling-release scheme. +This dosen't work very well, hence the decision was made to revert to a numbered +versioning scheme. In some places, it was referred to 101 (the git commit +number) or 2.99.101 (2.99.gitcommitnumber). + +These days (June 2019), the vast majority of gophernicus servers are on 101. diff --git a/changelog b/changelog new file mode 100644 index 0000000..2a75397 --- /dev/null +++ b/changelog @@ -0,0 +1,38 @@ +3.0 (from 101) +============== + +N.B. this version has two important changes that may make it +backwards-incompatible: + * binary changed from in.gophernicus to gophernicus + * virtual hosting NEVER WORKED and does not work in the way previously + described + +Other changes: + * prevent leak of executable gophermap contents + * make sure {x,}inetd works when systemd is on the system + * allow -j flag to work + * add h9bnks (yargo) and fosslinux into developer roles + * add -nx flag, blocks executable gophermaps + * add -nu flag, disable ~/public_gopher + * modify various documentation to markdown + * fix various formattings and typos + * allow inetd targets to work without update-inetd + * correct handling of inetd.conf + * remove list of supported platforms + * remove example gophermaps + * add dependencies for various distros to INSTALL.md + * fix query urls + * add travis ci + * add documentation about CI + +Upgrade guide: + +If you are running gophernicus on a **production** system, **do not** upgrade +to 3.0. Wait for 3.1. + +As a general guide, + +If you are running 101 and haven't upgraded to newer versions **because** of +instability worries, **wait for 3.1**. + +If you were running other rolling-release versions, **upgrade now**. diff --git a/changelog.old b/changelog.old index a867a05..a9be324 100644 --- a/changelog.old +++ b/changelog.old @@ -1,3 +1,6 @@ +This contains changelog up to 1.4. There are no changelogs from 1.4 +until 3.0. + 2012-12-02 Kim Holviala * Released version 1.4 diff --git a/debian/changelog b/debian/changelog new file mode 100644 index 0000000..50a25c0 --- /dev/null +++ b/debian/changelog @@ -0,0 +1,33 @@ +gophernicus (3.0-1.1) unstable; urgency=medium + + * N.B. this version has two important changes that may make it + backwards-incompatible: + * binary changed from in.gophernicus to gophernicus + * virtual hosting NEVER WORKED and does not work in the way previously + described + * Other changes: + * prevent leak of executable gophermap contents + * make sure {x,}inetd works when systemd is on the system + * allow -j flag to work + * add h9bnks (yargo) and fosslinux into developer roles + * add -nx flag, blocks executable gophermaps + * add -nu flag, disable ~/public_gopher + * modify various documentation to markdown + * fix various formattings and typos + * allow inetd targets to work without update-inetd + * correct handling of inetd.conf + * remove list of supported platforms + * remove example gophermaps + * add dependencies for various distros to INSTALL.md + * fix query urls + * add travis ci + * add documentation about CI + * Upgrade guide: + * If you are running gophernicus on a **production** system, **do not** upgrade + to 3.0. Wait for 3.1. + * As a general guide, + * If you are running 101 and haven't upgraded to newer versions **because** of + instability worries, **wait for 3.1**. + * If you were running other rolling-release versions, **upgrade now**. + + -- gophernicus developers Sun, 16 Jun 2019 17:49:46 +0000 diff --git a/debian/control b/debian/control index 4eca63d..cf593b0 100644 --- a/debian/control +++ b/debian/control @@ -1,10 +1,10 @@ Source: gophernicus Section: net Priority: extra -Maintainer: Kim Holviala +Maintainer: gophernicus developers Build-Depends: debhelper (>= 5), libwrap0-dev Standards-Version: 3.7.3 -Homepage: gopher://gophernicus.org/1/software/gophernicus/server/ +Homepage: https://github.com/gophernicus/gophernicus Package: gophernicus Architecture: any diff --git a/debian/copyright b/debian/copyright index ae18689..096df79 100644 --- a/debian/copyright +++ b/debian/copyright @@ -1,4 +1,5 @@ Gophernicus - Copyright (c) 2009-2018 Kim Holviala + 2019 gophernicus developers All rights reserved. Redistribution and use in source and binary forms, with or without diff --git a/debian/docs b/debian/docs index 994fb1d..f9ae1f7 100644 --- a/debian/docs +++ b/debian/docs @@ -1,5 +1,7 @@ -README +README.md README.Gophermap TODO INSTALL.md +VERSONING.md +changelog gophertag diff --git a/debian/gophernicus.default b/debian/gophernicus.default index af26579..c06f426 100644 --- a/debian/gophernicus.default +++ b/debian/gophernicus.default @@ -3,7 +3,7 @@ # If you are using Gophernicus with inetd this configuration file # is ignored and the real configuration is in /etc/inetd.conf # -# See README or run "in.gophernicus -?" to see a full list of +# See README or run "gophernicus -?" to see a full list of # configuration options. # # Example: diff --git a/debian/gophernicus.logcheck.ignore.server b/debian/gophernicus.logcheck.ignore.server index 5279b6f..5675585 100644 --- a/debian/gophernicus.logcheck.ignore.server +++ b/debian/gophernicus.logcheck.ignore.server @@ -1,4 +1,4 @@ -^\w{3} [ :0-9]{11} [._[:alnum:]-]+ in.gophernicus\[[0-9]+\]: request for "[^"]*" from [._[:alnum:]:-]+$ -^\w{3} [ :0-9]{11} [._[:alnum:]-]+ in.gophernicus\[[0-9]+\]: error "No such file or directory" for request "[^"]*" from [._[:alnum:]:-]+$ -^\w{3} [ :0-9]{11} [._[:alnum:]-]+ in.gophernicus\[[0-9]+\]: error "User not found" for request "/~[^"]*" from [._[:alnum:]:-]+$ +^\w{3} [ :0-9]{11} [._[:alnum:]-]+ gophernicus\[[0-9]+\]: request for "[^"]*" from [._[:alnum:]:-]+$ +^\w{3} [ :0-9]{11} [._[:alnum:]-]+ gophernicus\[[0-9]+\]: error "No such file or directory" for request "[^"]*" from [._[:alnum:]:-]+$ +^\w{3} [ :0-9]{11} [._[:alnum:]-]+ gophernicus\[[0-9]+\]: error "User not found" for request "/~[^"]*" from [._[:alnum:]:-]+$ ^\w{3} [ :0-9]{11} [._[:alnum:]-]+ systemd\[1\]: Start(ing|ed) Gophernicus gopher server \([^[:space:]]+\)\.+$ diff --git a/debian/postinst b/debian/postinst index 383e49d..f7e05db 100644 --- a/debian/postinst +++ b/debian/postinst @@ -11,7 +11,7 @@ ROOT=/var/gopher PACKAGE=gophernicus LOGDIR=/var/log/$PACKAGE LIBDIR=/usr/lib/$PACKAGE -BINARY=in.gophernicus +BINARY=gophernicus DEFAULT=/etc/default/$PACKAGE USER=nobody diff --git a/debian/rules b/debian/rules index cd85559..4db56c0 100755 --- a/debian/rules +++ b/debian/rules @@ -20,7 +20,6 @@ build-stamp: dh_testdir $(MAKE) - $(MAKE) ChangeLog touch $@ @@ -55,7 +54,7 @@ binary-indep: build install binary-arch: build install dh_testdir dh_testroot - dh_installchangelogs ChangeLog + dh_installchangelogs changelog dh_installdocs # dh_install # dh_installmenu diff --git a/git2changelog b/git2changelog deleted file mode 100755 index a7f8817..0000000 --- a/git2changelog +++ /dev/null @@ -1,29 +0,0 @@ -#!/bin/sh - -## -## Generate ChangeLog from git log -## - -VERSION=`git log | grep -c "^commit"` -FIRSTVER=93 -PREVIOUS= -IFS=\; - -echo "[ Automatically generated from git log ]" - -git log --pretty=tformat:"%ad %an <%ae>;%s" --date=short | \ -while read -r AUTHOR COMMENT; do - [ "$AUTHOR" != "$PREVIOUS" ] && printf "\n$AUTHOR\n\n" - - if [ $VERSION -ge $FIRSTVER ]; then - printf "\t* (v%d) %s\n" $VERSION "$COMMENT" - else - printf "\t* %s\n" "$COMMENT" - fi - - PREVIOUS="$AUTHOR" - VERSION=$(( VERSION - 1 )) -done - -echo -echo diff --git a/gophernicus.env b/gophernicus.env index fdc9d2f..13556df 100644 --- a/gophernicus.env +++ b/gophernicus.env @@ -1,6 +1,6 @@ # Options for Gophernicus # -# See README or run "in.gophernicus -?" to see a full list of +# See README or run "gophernicus -?" to see a full list of # configuration options. # # Example: diff --git a/gophernicus.xinetd b/gophernicus.xinetd index f6c429c..2ae9dc2 100644 --- a/gophernicus.xinetd +++ b/gophernicus.xinetd @@ -5,7 +5,7 @@ service gopher socket_type = stream wait = no user = nobody - server = /usr/sbin/in.gophernicus + server = /usr/sbin/gophernicus server_args = -r/var/gopher -h@HOSTNAME@ disable = no } diff --git a/gophernicus@.service b/gophernicus@.service index 47bd46c..dacb19b 100644 --- a/gophernicus@.service +++ b/gophernicus@.service @@ -4,7 +4,7 @@ Description=Gophernicus gopher server [Service] EnvironmentFile=-/etc/default/gophernicus EnvironmentFile=-/etc/sysconfig/gophernicus -ExecStart=/usr/sbin/in.gophernicus -h %H $OPTIONS +ExecStart=/usr/sbin/gophernicus -h %H $OPTIONS SuccessExitStatus=1 StandardInput=socket User=nobody diff --git a/org.gophernicus.server.plist b/org.gophernicus.server.plist index f2ed949..e6bb571 100644 --- a/org.gophernicus.server.plist +++ b/org.gophernicus.server.plist @@ -6,7 +6,7 @@ org.gophernicus.server ProgramArguments - /usr/local/sbin/in.gophernicus + /usr/local/sbin/gophernicus -h@HOSTNAME@ -r/Library/GopherServer diff --git a/version b/version deleted file mode 100755 index de6a73e..0000000 --- a/version +++ /dev/null @@ -1,14 +0,0 @@ -#!/bin/sh - -## -## Generate Gophernicus version/build number -## - -DEFAULT="120+" - -if which git >/dev/null && test -d .git; then - git log | grep -c "^commit" -else - echo $DEFAULT -fi -