]> code.citadel.org Git - citadel.git/blobdiff - webcit/webserver.c
* Mercilessly ripped out all of the gratuitously complex GNU libintl
[citadel.git] / webcit / webserver.c
index 9b111ab13a564e89f9041414bbe34e5a7411e546..04ac7c3a3872604583c42fcb6a54e6710c767fb5 100644 (file)
@@ -18,6 +18,7 @@ int vsnprintf(char *buf, size_t max, const char *fmt, va_list argp);
 int verbosity = 9;             /* Logging level */
 int msock;                     /* master listening socket */
 int is_https = 0;              /* Nonzero if I am an HTTPS service */
+int follow_xff = 0;            /* Follow X-Forwarded-For: header */
 extern void *context_loop(int);
 extern void *housekeeping_loop(void);
 extern pthread_mutex_t SessionListMutex;
@@ -286,11 +287,11 @@ int client_read(int sock, char *buf, int bytes)
 
 
 /*
- * client_gets()   ...   Get a LF-terminated line of text from the client.
+ * client_getln()   ...   Get a LF-terminated line of text from the client.
  * (This is implemented in terms of client_read() and could be
  * justifiably moved out of sysdep.c)
  */
-int client_gets(int sock, char *buf)
+int client_getln(int sock, char *buf, int bufsiz)
 {
        int i, retval;
 
@@ -298,13 +299,13 @@ int client_gets(int sock, char *buf)
         */
        for (i = 0;; i++) {
                retval = client_read(sock, &buf[i], 1);
-               if (retval != 1 || buf[i] == '\n' || i == 255)
+               if (retval != 1 || buf[i] == '\n' || i == (bufsiz-1))
                        break;
        }
 
        /* If we got a long line, discard characters until the newline.
         */
-       if (i == 255)
+       if (i == (bufsiz-1))
                while (buf[i] != '\n' && retval == 1)
                        retval = client_read(sock, &buf[i], 1);
 
@@ -381,20 +382,16 @@ int main(int argc, char **argv)
        char tracefile[PATH_MAX];
        char ip_addr[256];
        char *webcitdir = WEBCITDIR;
-       char *locale = NULL;
-
-       /* initialize the International Bright Young Thing */
 #ifdef ENABLE_NLS
-       locale = setlocale(LC_ALL, "");
-       bindtextdomain(PACKAGE, LOCALEDIR);
-       textdomain(PACKAGE);
-#endif
+       char *locale = NULL;
+       char *mo = NULL;
+#endif /* ENABLE_NLS */
 
        /* Parse command line */
 #ifdef HAVE_OPENSSL
-       while ((a = getopt(argc, argv, "h:i:p:t:x:cs")) != EOF)
+       while ((a = getopt(argc, argv, "h:i:p:t:x:cfs")) != EOF)
 #else
-       while ((a = getopt(argc, argv, "h:i:p:t:x:c")) != EOF)
+       while ((a = getopt(argc, argv, "h:i:p:t:x:cf")) != EOF)
 #endif
                switch (a) {
                case 'h':
@@ -415,6 +412,9 @@ int main(int argc, char **argv)
                case 'x':
                        verbosity = atoi(optarg);
                        break;
+               case 'f':
+                       follow_xff = 1;
+                       break;
                case 'c':
                        server_cookie = malloc(256);
                        if (server_cookie != NULL) {
@@ -436,7 +436,7 @@ int main(int argc, char **argv)
                default:
                        fprintf(stderr, "usage: webserver "
                                "[-i ip_addr] [-p http_port] "
-                               "[-t tracefile] [-c] "
+                               "[-t tracefile] [-c] [-f] "
 #ifdef HAVE_OPENSSL
                                "[-s] "
 #endif
@@ -461,6 +461,30 @@ int main(int argc, char **argv)
                perror("chdir");
        }
 
+       /* initialize the International Bright Young Thing */
+#ifdef ENABLE_NLS
+
+       initialize_locales();
+
+       locale = setlocale(LC_ALL, "");
+
+       mo = malloc(strlen(webcitdir) + 20);
+       sprintf(mo, "%s/locale", webcitdir);
+       lprintf(9, "Message catalog directory: %s\n",
+               bindtextdomain("webcit", mo)
+       );
+       free(mo);
+       lprintf(9, "Text domain: %s\n",
+               textdomain("webcit")
+       );
+       lprintf(9, "Text domain Charset: %s\n",
+                       bind_textdomain_codeset("webcit","UTF8")
+       );
+#endif
+
+       initialize_viewdefs();
+       initialize_axdefs();
+
        /*
         * Set up a place to put thread-specific data.
         * We only need a single pointer per thread - it points to the
@@ -575,9 +599,6 @@ int lprintf(int loglevel, const char *format, ...)
 {
        va_list ap;
 
-       if (ThreadSSL) {
-               fprintf(stderr, "[%d] ", ThreadSSL);
-       }
        if (loglevel <= verbosity) {
                va_start(ap, format);
                vfprintf(stderr, format, ap);