* fix static output for subdirectories & tinymce
authorWilfried Göesgens <willi@citadel.org>
Tue, 26 May 2009 22:05:23 +0000 (22:05 +0000)
committerWilfried Göesgens <willi@citadel.org>
Tue, 26 May 2009 22:05:23 +0000 (22:05 +0000)
* strip directories...

webcit/serv_func.c
webcit/static.c
webcit/tcp_sockets.c
webcit/webserver.c

index ed53165aed3263169c25fa9cf700af9d9d1b4ab6..8ad3b6dfc9bf85a789da2f9cbd5bb5dd98c3a9cb 100644 (file)
@@ -49,7 +49,7 @@ ServInfo *get_serv_info(StrBuf *browser_host, StrBuf *user_agent)
        StrBuf_ServGetln(Buf);
 
        /** Tell the server what kind of richtext we prefer */
-       serv_puts("MSGP text/calendar|text/vnote|text/html|text/plain");
+       serv_puts("MSGP text/calendar|text/vnote|text/html|text/plain");//// TODO: register me...
        StrBuf_ServGetln(Buf);
 
        /*
index ea308fc22a0d12caa6c3fa5e895317c305c2682a..b500ade1380d8069828665a11e4d61b5ab90086a 100644 (file)
@@ -100,6 +100,7 @@ int LoadStaticDir(const char *DirName, HashList *DirList, const char *RelDir)
        struct dirent *filedir_entry;
        int d_namelen;
        int d_without_ext;
+       int istoplevel;
                
        filedir = opendir (DirName);
        if (filedir == NULL) {
@@ -108,6 +109,7 @@ int LoadStaticDir(const char *DirName, HashList *DirList, const char *RelDir)
 
        Dir = NewStrBufPlain(DirName, -1);
        WebDir = NewStrBufPlain(RelDir, -1);
+       istoplevel = IsEmptyStr(RelDir);
        OneWebName = NewStrBuf();
 
                while ((readdir_r(filedir, &d, &filedir_entry) == 0) &&
@@ -140,10 +142,16 @@ int LoadStaticDir(const char *DirName, HashList *DirList, const char *RelDir)
                        if ((strcmp(filedir_entry->d_name, ".svn") == 0) ||
                            (strcmp(filedir_entry->d_name, "t") == 0))
                                break;
-                       snprintf(dirname, PATH_MAX, "%s/%s", 
+                       snprintf(dirname, PATH_MAX, "%s/%s/", 
                                 DirName, filedir_entry->d_name);
-                       snprintf(reldir, PATH_MAX, "%s/%s", 
-                                RelDir, filedir_entry->d_name);
+                       if (istoplevel)
+                               snprintf(reldir, PATH_MAX, "%s/", 
+                                        filedir_entry->d_name);
+                       else
+                               snprintf(reldir, PATH_MAX, "%s/%s/", 
+                                        RelDir, filedir_entry->d_name);
+                       StripSlashes(dirname, 1);
+                       StripSlashes(reldir, 1);
                        LoadStaticDir(dirname, DirList, reldir);                                 
                        break;
                case DT_LNK: /* TODO: check whether its a file or a directory */
@@ -157,7 +165,7 @@ int LoadStaticDir(const char *DirName, HashList *DirList, const char *RelDir)
                        FlushStrBuf(OneWebName);
                        StrBufAppendBuf(OneWebName, WebDir, 0);
                        if ((StrLength(OneWebName) != 0) && 
-                           (ChrPtr(OneWebName) [ StrLength(OneWebName)] != '/'))
+                           (ChrPtr(OneWebName) [ StrLength(OneWebName) - 1] != '/'))
                                StrBufAppendBufPlain(OneWebName, "/", 1, 0);
                        StrBufAppendBufPlain(OneWebName, filedir_entry->d_name, d_namelen, 0);
 
@@ -192,7 +200,7 @@ void output_flat_static(void)
        }
 }
 
-
+extern void do_404(void);
 
 void output_static_safe(HashList *DirList)
 {
@@ -207,7 +215,10 @@ void output_static_safe(HashList *DirList)
                output_static(ChrPtr(vFile));
        }
        else {
+               lprintf(1, "output_static_safe() file %s not found. \n", 
+                       ChrPtr(WCC->Hdr->HR.ReqLine));
 ///TODO: detect image & output blank image
+               do_404();
        }
 }
 void output_static_0(void)
@@ -261,4 +272,5 @@ InitModule_STATIC
        WebcitAddUrlHandler(HKEY("static"), output_static_0, ANONYMOUS|COOKIEUNNEEDED|ISSTATIC);
        WebcitAddUrlHandler(HKEY("static.local"), output_static_1, ANONYMOUS|COOKIEUNNEEDED|ISSTATIC);
        WebcitAddUrlHandler(HKEY("tinymce"), output_static_2, ANONYMOUS|COOKIEUNNEEDED|ISSTATIC);
+       WebcitAddUrlHandler(HKEY("tiny_mce"), output_static_2, ANONYMOUS|COOKIEUNNEEDED|ISSTATIC);
 }
index 058f7c821f1588299c94a73d1e6e6641800a8c8e..03180817a941ed98e962e12607f850b1491ff082 100644 (file)
@@ -236,18 +236,22 @@ int StrBuf_ServGetBLOB(StrBuf *buf, long BlobSize)
  */
 void serv_write(const char *buf, int nbytes)
 {
+       wcsession *WCC = WC;
        int bytes_written = 0;
        int retval;
+
+       FlushStrBuf(WCC->ReadBuf);
+       WCC->ReadPos = NULL;
        while (bytes_written < nbytes) {
-               retval = write(WC->serv_sock, &buf[bytes_written],
+               retval = write(WCC->serv_sock, &buf[bytes_written],
                               nbytes - bytes_written);
                if (retval < 1) {
                        lprintf(1, "Server connection broken: %s\n",
                                strerror(errno));
-                       close(WC->serv_sock);
-                       WC->serv_sock = (-1);
-                       WC->connected = 0;
-                       WC->logged_in = 0;
+                       close(WCC->serv_sock);
+                       WCC->serv_sock = (-1);
+                       WCC->connected = 0;
+                       WCC->logged_in = 0;
                        return;
                }
                bytes_written = bytes_written + retval;
index 31025cf2b347d881843a35e2696ff356f0c5a8fd..4479c0a5a428ee90257f0f90a7cf7f99e2ba6c92 100644 (file)
@@ -262,6 +262,7 @@ extern int LoadTemplates;
 extern HashList *HandlerHash;
 
 
+
 void
 webcit_calc_dirs_n_files(int relh, const char *basedir, int home, char *webcitdir, char *relhome)
 {
@@ -286,6 +287,9 @@ webcit_calc_dirs_n_files(int relh, const char *basedir, int home, char *webcitdi
        COMPUTE_DIRECTORY(static_icon_dir);
        basedir=WWWDIR "/static.local";
        COMPUTE_DIRECTORY(static_local_dir);
+       StripSlashes(static_dir, 1);
+       StripSlashes(static_icon_dir, 1);
+       StripSlashes(static_local_dir, 1);
 
        snprintf(file_crpt_file_key,
                 sizeof file_crpt_file_key,