--- /dev/null
+// Main entry point for the program.
+//
+// Copyright (c) 1996-2022 by the citadel.org team
+//
+// This program is open source software. Use, duplication, or
+// disclosure are subject to the GNU General Public License v3.
+
+#include "webcit.h" // All other headers are included from this header.
+
+char *ctdl_dir = CTDL_DIR;
+
+// Main entry point for the web server.
+int main(int argc, char **argv) {
+ int webserver_port = WEBSERVER_PORT;
+ char *webserver_interface = WEBSERVER_INTERFACE;
+ int running_as_daemon = 0;
+ int webserver_protocol = WEBSERVER_HTTP;
+ int a;
+ char *pid_file = NULL;
+
+ // Parse command line
+ while ((a = getopt(argc, argv, "u:h:i:p:t:T:B:x:g:dD:G:cfsS:Z:v:")) != EOF)
+ switch (a) {
+ case 'u':
+ setuid(atoi(optarg));
+ break;
+ case 'h':
+ ctdl_dir = strdup(optarg);
+ break;
+ case 'd':
+ running_as_daemon = 1;
+ break;
+ case 'D':
+ running_as_daemon = 1;
+ pid_file = strdup(optarg);
+ break;
+ case 'g':
+ // FIXME set up the default landing page
+ break;
+ case 'B':
+ case 't':
+ case 'x':
+ case 'T':
+ case 'v':
+ // The above options are no longer used, but ignored so old scripts don't break
+ break;
+ case 'i':
+ webserver_interface = optarg;
+ break;
+ case 'p':
+ webserver_port = atoi(optarg);
+ break;
+ case 'Z':
+ // FIXME when gzip is added, disable it if this flag is set
+ break;
+ case 'f':
+ //follow_xff = 1;
+ break;
+ case 'c':
+ break;
+ case 's':
+ is_https = 1;
+ webserver_protocol = WEBSERVER_HTTPS;
+ break;
+ case 'S':
+ is_https = 1;
+ webserver_protocol = WEBSERVER_HTTPS;
+ //ssl_cipher_list = strdup(optarg);
+ break;
+ case 'G':
+ //DumpTemplateI18NStrings = 1;
+ //I18nDump = NewStrBufPlain(HKEY("int templatestrings(void)\n{\n"));
+ //I18nDumpFile = optarg;
+ break;
+ default:
+ fprintf(stderr, "usage:\nwebcit "
+ "[-i ip_addr] [-p http_port] "
+ "[-c] [-f] "
+ "[-d] [-Z] [-G i18ndumpfile] "
+ "[-u uid] [-h homedirectory] "
+ "[-D daemonizepid] [-v] "
+ "[-g defaultlandingpage] [-B basesize] "
+ "[-s] [-S cipher_suites]"
+ "[-h citadel_server_directory]\n"
+ );
+ return 1;
+ }
+
+ while (optind < argc) {
+ ctdl_dir = strdup(argv[optind++]);
+ }
+
+ // Start the logger
+ openlog("webcit", (running_as_daemon ? (LOG_PID) : (LOG_PID | LOG_PERROR)), LOG_DAEMON);
+
+ // Tell 'em who's in da house
+ syslog(LOG_NOTICE, "MAKE WEBCIT GREAT AGAIN!");
+ syslog(LOG_NOTICE, "Copyright (C) 1996-2022 by the citadel.org team");
+ syslog(LOG_NOTICE, " ");
+ syslog(LOG_NOTICE, "This program is open source software: you can redistribute it and/or");
+ syslog(LOG_NOTICE, "modify it under the terms of the GNU General Public License, version 3.");
+ syslog(LOG_NOTICE, " ");
+ syslog(LOG_NOTICE, "This program is distributed in the hope that it will be useful,");
+ syslog(LOG_NOTICE, "but WITHOUT ANY WARRANTY; without even the implied warranty of");
+ syslog(LOG_NOTICE, "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the");
+ syslog(LOG_NOTICE, "GNU General Public License for more details.");
+ syslog(LOG_NOTICE, " ");
+
+ // Ensure that we are linked to the correct version of libcitadel
+ if (libcitadel_version_number() < LIBCITADEL_VERSION_NUMBER) {
+ syslog(LOG_INFO, " You are running libcitadel version %d", libcitadel_version_number());
+ syslog(LOG_INFO, "WebCit was compiled against version %d", LIBCITADEL_VERSION_NUMBER);
+ return (1);
+ }
+
+ // Go into the background if we were asked to run as a daemon
+ if (running_as_daemon) {
+ daemon(1, 0);
+ if (pid_file != NULL) {
+ FILE *pfp = fopen(pid_file, "w");
+ if (pfp) {
+ fprintf(pfp, "%d\n", getpid());
+ fclose(pfp);
+ }
+ }
+ }
+
+ return webserver(webserver_interface, webserver_port, webserver_protocol);
+}