-int LoadStaticDir(const char *DirName, HashList *DirList, const char *RelDir)
-{
- char dirname[PATH_MAX];
- char reldir[PATH_MAX];
- StrBuf *FileName = NULL;
- StrBuf *Dir = NULL;
- StrBuf *WebDir = NULL;
- StrBuf *OneWebName = NULL;
- DIR *filedir = NULL;
- struct dirent *d;
- struct dirent *filedir_entry;
- int d_type = 0;
- int d_namelen;
- int d_without_ext;
- int istoplevel;
-
- filedir = opendir (DirName);
- if (filedir == NULL) {
- return 0;
- }
-
- d = (struct dirent *)malloc(offsetof(struct dirent, d_name) + PATH_MAX + 1);
- if (d == NULL) {
- return 0;
- }
-
- Dir = NewStrBufPlain(DirName, -1);
- WebDir = NewStrBufPlain(RelDir, -1);
- istoplevel = IsEmptyStr(RelDir);
- OneWebName = NewStrBuf();
-
- while ((readdir_r(filedir, d, &filedir_entry) == 0) &&
- (filedir_entry != NULL))
- {
- char *PStart;
-#ifdef _DIRENT_HAVE_D_NAMELEN
- d_namelen = filedir_entry->d_namelen;
- d_type = filedir_entry->d_type;
-#else
-
-#ifndef DT_UNKNOWN
-#define DT_UNKNOWN 0
-#define DT_DIR 4
-#define DT_REG 8
-#define DT_LNK 10
-
-#define IFTODT(mode) (((mode) & 0170000) >> 12)
-#define DTTOIF(dirtype) ((dirtype) << 12)
-#endif
- d_namelen = strlen(filedir_entry->d_name);
- d_type = DT_UNKNOWN;
-#endif
- d_without_ext = d_namelen;
-
- if ((d_namelen > 1) && filedir_entry->d_name[d_namelen - 1] == '~')
- continue; /* Ignore backup files... */
-
- if ((d_namelen == 1) &&
- (filedir_entry->d_name[0] == '.'))
- continue;
-
- if ((d_namelen == 2) &&
- (filedir_entry->d_name[0] == '.') &&
- (filedir_entry->d_name[1] == '.'))
- continue;
-
- if (d_type == DT_UNKNOWN) {
- struct stat s;
- char path[PATH_MAX];
- snprintf(path, PATH_MAX, "%s/%s",
- DirName, filedir_entry->d_name);
- if (stat(path, &s) == 0) {
- d_type = IFTODT(s.st_mode);
- }
- }
-
- switch (d_type)
- {
- case DT_DIR:
- /* Skip directories we are not interested in... */
- if ((strcmp(filedir_entry->d_name, ".svn") == 0) ||
- (strcmp(filedir_entry->d_name, "t") == 0))
- break;
- snprintf(dirname, PATH_MAX, "%s/%s/",
- DirName, 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 */
- case DT_REG:
- PStart = filedir_entry->d_name;
- FileName = NewStrBufDup(Dir);
- if (ChrPtr(FileName) [ StrLength(FileName) - 1] != '/')
- StrBufAppendBufPlain(FileName, "/", 1, 0);
- StrBufAppendBufPlain(FileName, filedir_entry->d_name, d_namelen, 0);
-
- FlushStrBuf(OneWebName);
- StrBufAppendBuf(OneWebName, WebDir, 0);
- if ((StrLength(OneWebName) != 0) &&
- (ChrPtr(OneWebName) [ StrLength(OneWebName) - 1] != '/'))
- StrBufAppendBufPlain(OneWebName, "/", 1, 0);
- StrBufAppendBufPlain(OneWebName, filedir_entry->d_name, d_namelen, 0);
-
- Put(DirList, SKEY(OneWebName), FileName, HFreeStrBuf);
- /* lprintf(9, "[%s | %s]\n", ChrPtr(OneWebName), ChrPtr(FileName)); */
- break;
- default:
- break;
- }
-
-
- }
- free(d);
- closedir(filedir);
- FreeStrBuf(&Dir);
- FreeStrBuf(&WebDir);
- FreeStrBuf(&OneWebName);
- return 1;
-}
-
-
-void output_flat_static(void)
-{
- wcsession *WCC = WC;
- void *vFile;
- StrBuf *File;
-
- if (GetHash(StaticFilemappings[0], SKEY(WCC->Hdr->HR.Handler->Name), &vFile) &&
- (vFile != NULL))
- {
- File = (StrBuf*) vFile;
- output_static(ChrPtr(vFile));
- }
+/*
+ * robots.txt
+ */
+void robots_txt(void) {
+ output_headers(0, 0, 0, 0, 0, 0);
+
+ hprintf("Content-type: text/plain\r\n"
+ "Server: %s\r\n"
+ "Connection: close\r\n",
+ PACKAGE_STRING);
+ begin_burst();
+
+ wc_printf("User-agent: *\r\n"
+ "Disallow: /printmsg\r\n"
+ "Disallow: /msgheaders\r\n"
+ "Disallow: /groupdav\r\n"
+ "Disallow: /do_template\r\n"
+ "Disallow: /static\r\n"
+ "Disallow: /display_page\r\n"
+ "Disallow: /readnew\r\n"
+ "Disallow: /display_enter\r\n"
+ "Disallow: /skip\r\n"
+ "Disallow: /ungoto\r\n"
+ "Sitemap: %s/sitemap.xml\r\n"
+ "\r\n"
+ ,
+ ChrPtr(site_prefix)
+ );
+
+ wDumpContent(0);