From 82527f2bc146e0081ff7339ab9f45bb46fc47101 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Wilfried=20G=C3=B6esgens?= Date: Tue, 26 May 2009 22:05:23 +0000 Subject: [PATCH] * fix static output for subdirectories & tinymce * strip directories... --- webcit/serv_func.c | 2 +- webcit/static.c | 22 +++++++++++++++++----- webcit/tcp_sockets.c | 14 +++++++++----- webcit/webserver.c | 4 ++++ 4 files changed, 31 insertions(+), 11 deletions(-) diff --git a/webcit/serv_func.c b/webcit/serv_func.c index ed53165ae..8ad3b6dfc 100644 --- a/webcit/serv_func.c +++ b/webcit/serv_func.c @@ -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); /* diff --git a/webcit/static.c b/webcit/static.c index ea308fc22..b500ade13 100644 --- a/webcit/static.c +++ b/webcit/static.c @@ -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); } diff --git a/webcit/tcp_sockets.c b/webcit/tcp_sockets.c index 058f7c821..03180817a 100644 --- a/webcit/tcp_sockets.c +++ b/webcit/tcp_sockets.c @@ -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; diff --git a/webcit/webserver.c b/webcit/webserver.c index 31025cf2b..4479c0a5a 100644 --- a/webcit/webserver.c +++ b/webcit/webserver.c @@ -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, -- 2.30.2