1
0
mirror of https://github.com/gophernicus/gophernicus.git synced 2024-09-15 04:28:08 -04:00

It compiles and runs!!

This commit is contained in:
fosslinux 2019-10-19 18:28:37 +11:00
parent 861a32142d
commit 5bba12cd85
6 changed files with 42 additions and 2 deletions

View File

@ -54,7 +54,7 @@ IPCRM = /usr/bin/ipcrm
# Platform support, compatible with both BSD and GNU make
#
all:
@case `uname` in \
case `uname` in \
Darwin) $(MAKE) ROOT="$(OSXROOT)" DESTDIR="$(OSXDEST)" $(BINARY); ;; \
Haiku) $(MAKE) EXTRA_LIBS="-lnetwork" $(BINARY); ;; \
*) if [ -f "/usr/include/tcpd.h" ]; then $(MAKE) withwrap; else $(MAKE) $(BINARY); fi; ;; \

BIN
bin2c.exe Normal file

Binary file not shown.

14
file.c
View File

@ -238,7 +238,11 @@ void server_status(state *st, shm_state *shm, int shmid)
/*
* Handle /caps.txt
*/
#ifdef HAVE_SHMEM
void caps_txt(state *st, shm_state *shm)
#else
void caps_txt(state *st)
#endif
{
/* Log the request */
#ifdef HAVE_SYSLOG
@ -425,7 +429,12 @@ void gopher_file(state *st)
snprintf(buf, sizeof(buf), "%s/%s", st->filter_dir, c + 1);
/* Filter file through the script */
/* Skip this second check on Windows */
#ifdef _WIN32
if (stat(buf, &file) == OK)
#else
if (stat(buf, &file) == OK && (file.st_mode & S_IXOTH))
#endif
run_cgi(st, buf, st->req_realpath);
}
@ -434,7 +443,12 @@ void gopher_file(state *st)
snprintf(buf, sizeof(buf), "%s/%c", st->filter_dir, st->req_filetype);
/* Filter file through the script */
/* Skip this second check on Windows */
#ifdef _WIN32
if (stat(buf, &file) == OK)
#else
if (stat(buf, &file) == OK && (file.st_mode & S_IXOTH))
#endif
run_cgi(st, buf, st->req_realpath);
}

View File

@ -315,6 +315,7 @@ void selector_to_path(state *st)
*/
char *get_local_address(void)
{
#ifndef _WIN32
#ifdef HAVE_IPv4
struct sockaddr_in addr;
socklen_t addrsize = sizeof(addr);
@ -344,6 +345,7 @@ char *get_local_address(void)
else return address;
}
}
#endif
#endif
/* Nothing works... I'm out of ideas */
@ -356,6 +358,7 @@ char *get_local_address(void)
*/
char *get_peer_address(void)
{
#ifndef _WIN32
#ifdef HAVE_IPv4
struct sockaddr_in addr;
socklen_t addrsize = sizeof(addr);
@ -389,6 +392,7 @@ char *get_peer_address(void)
else return address;
}
}
#endif
#endif
/* Nothing works... I'm out of ideas */
@ -429,8 +433,10 @@ void init_state(state *st)
if ((c = getenv("HOSTNAME")))
sstrlcpy(st->server_host, c);
#ifndef _WIN32
else if ((gethostname(buf, sizeof(buf))) != ERROR)
sstrlcpy(st->server_host, buf);
#endif
st->server_port = DEFAULT_PORT;
st->server_tls_port = DEFAULT_TLS_PORT;
@ -528,7 +534,12 @@ int main(int argc, char *argv[])
setlocale(LC_TIME, DATE_LOCALE);
#endif
init_state(&st);
#ifdef _WIN32
/* Windows dosen't have getppid() */
srand(time(NULL) / getpid());
#else
srand(time(NULL) / (getpid() + getppid()));
#endif
/* Handle command line arguments */
parse_args(&st, argc, argv);
@ -838,10 +849,13 @@ get_selector:
st.req_filesize = file.st_size;
/* Everyone must have read access but no write access */
/* Skip this check on Windows */
#ifndef _WIN32
if ((file.st_mode & S_IROTH) == 0)
die(&st, ERR_ACCESS, "File or directory not world-readable");
if ((file.st_mode & S_IWOTH) != 0)
die(&st, ERR_ACCESS, "File or directory world-writeable");
#endif
/* If stat said it was a dir then it's a menu */
if ((file.st_mode & S_IFMT) == S_IFDIR) st.req_filetype = TYPE_MENU;

BIN
gophernicus.exe Normal file

Binary file not shown.

14
menu.c
View File

@ -171,8 +171,11 @@ void vhostlist(state *st)
if (!strchr(dir[i].name, '.')) continue;
/* We only want world-readable directories */
/* Skip check on Windows */
#ifndef _WIN32
if ((dir[i].mode & S_IROTH) == 0) continue;
if ((dir[i].mode & S_IFMT) != S_IFDIR) continue;
#endif
/* Generate display string for vhost */
snprintf(buf, sizeof(buf), VHOST_FORMAT, dir[i].name);
@ -288,6 +291,8 @@ int gophermap(state *st, char *mapfile, int depth)
if (depth > 4) return OK;
/* Try to figure out whether the map is executable */
/* Executable gophermaps not yet supported on Windows */
#ifndef _WIN32
if (stat(mapfile, &file) == OK) {
if ((file.st_mode & S_IXOTH)) {
#ifdef HAVE_POPEN
@ -307,6 +312,9 @@ int gophermap(state *st, char *mapfile, int depth)
#endif
exe = TRUE;
}
#else
exe = FALSE;
#endif
/* Debug output */
#ifdef HAVE_SYSLOG
@ -558,9 +566,13 @@ void gopher_menu(state *st)
snprintf(pathname, sizeof(pathname), "%s/%s",
st->req_realpath, dir[i].name);
/* Skip dotfiles and non world-readables */
/* Skip dotfiles */
if (dir[i].name[0] == '.') continue;
/* Skip non world-readables */
/* Skip check on Windows */
#ifndef _WIN32
if ((dir[i].mode & S_IROTH) == 0) continue;
#endif
/* Skip gophermaps and tags (but not dirs) */
if ((dir[i].mode & S_IFMT) != S_IFDIR) {