Changeset 156 in Main


Ignore:
Timestamp:
Sep 25, 2024, 9:28:10 PM (7 weeks ago)
Author:
Nishi
Message:

release 1.07

Files:
2 deleted
14 edited
8 copied

Legend:

Unmodified
Added
Removed
  • tags/1.07/Makefile

    r152 r156  
    99FLAGS = PWD=$(PWD) PLATFORM=$(PLATFORM) PREFIX=$(PREFIX)
    1010
    11 .PHONY: all format clean ./Server ./Common ./Module ./Manpage get-version
     11.PHONY: all format clean ./Server ./Common ./Module get-version
    1212
    1313all: ./Server ./Module ./Manpage ./Tool/genconf ./Tool/itworks
     
    3131        $(MAKE) -C $@ $(FLAGS)
    3232
    33 ./Manpage::
    34         $(MAKE) -C $@ $(FLAGS)
    35 
    36 ./README: ./README.tmpl
     33./README: ./README.tmpl ./Server/tw_version.h
    3734        sed "s/@VERSION@/`grep "define TW_VERSION" Server/tw_version.h | grep -Eo '"[^\]+' | sed -E 's/^"//g'`/g" ./README.tmpl > $@
    3835
     
    4441        cp ./Server/tewi $(PREFIX)/bin/
    4542        cp ./Module/*.so $(PREFIX)/lib/tewi/
    46         cp ./Manpage/tewi.8 $(PREFIX)/share/man/man8/
    4743
    4844format:
     
    5652        $(MAKE) -C ./Module $(FLAGS) clean
    5753        $(MAKE) -C ./Common $(FLAGS) clean
    58         $(MAKE) -C ./Manpage $(FLAGS) clean
    5954        rm -f ./Tool/option ./Tool/genconf
  • tags/1.07/README

    r155 r156  
    11
    2 Tewi HTTPd version 1.06C
     2Tewi HTTPd version 1.07
    33
    44Original by Nishi <nishi@nishi.boats>
  • tags/1.07/Server/config.c

    r138 r156  
    7373        }
    7474        for(i = 0; i < MAX_VHOSTS; i++) {
     75#ifndef NO_SSL
    7576                config.vhosts[i].sslkey = NULL;
    7677                config.vhosts[i].sslcert = NULL;
     78#endif
    7779                config.vhosts[i].root = NULL;
    78         }
     80#ifdef HAS_CHROOT
     81                config.vhosts[i].chroot_path = NULL;
     82#endif
     83        }
     84#ifndef NO_SSL
    7985        config.root.sslkey = NULL;
    8086        config.root.sslcert = NULL;
     87#endif
    8188        config.root.root = NULL;
    8289        config.root.mime_count = 0;
     
    8693        config.root.readme_count = 0;
    8794        config.root.hideport = 0;
     95#ifdef HAS_CHROOT
     96        config.root.chroot_path = NULL;
     97#endif
    8898        config.vhost_count = 0;
    8999        config.module_count = 0;
     
    91101        config.server_root = cm_strdup(PREFIX);
    92102        config.server_admin = cm_strdup(SERVER_ADMIN);
     103        config.defined[0] = NULL;
    93104        gethostname(config.hostname, 1024);
    94105}
     
    99110        cbuf[1] = 0;
    100111        int ln = 0;
     112        int ifbr = 0;
     113        int ignore = -1;
    101114        FILE* f = fopen(path, "r");
    102115        if(f != NULL) {
     
    115128                                        char** r = cm_split(l, " \t");
    116129                                        int i;
    117                                         if(cm_strcaseequ(r[0], "Include") || cm_strcaseequ(r[0], "IncludeOptional")) {
     130                                        if(ignore != -1 && ifbr >= ignore) {
     131                                                if(cm_strcaseequ(r[0], "EndIf")) ifbr--;
     132                                                if(ifbr == 0) {
     133                                                        ignore = -1;
     134                                                }
     135                                        } else if(cm_strcaseequ(r[0], "Include") || cm_strcaseequ(r[0], "IncludeOptional")) {
    118136                                                for(i = 1; r[i] != NULL; i++) {
    119137                                                        if(tw_config_read(r[i]) != 0 && cm_strcaseequ(r[0], "Include")) {
     
    121139                                                                break;
    122140                                                        }
     141                                                }
     142                                        } else if(cm_strcaseequ(r[0], "Define")) {
     143                                                if(r[1] == NULL) {
     144                                                        cm_log("Config", "Missing name at line %d", ln);
     145                                                        stop = 1;
     146                                                } else {
     147                                                        tw_add_define(r[1]);
     148                                                }
     149                                        } else if(cm_strcaseequ(r[0], "Undefine")) {
     150                                                if(r[1] == NULL) {
     151                                                        cm_log("Config", "Missing name at line %d", ln);
     152                                                        stop = 1;
     153                                                } else {
     154                                                        tw_delete_define(r[1]);
    123155                                                }
    124156                                        } else if(cm_strcaseequ(r[0], "BeginDirectory")) {
     
    224256                                        } else if(cm_strcaseequ(r[0], "ShowPort")) {
    225257                                                current->hideport = 0;
     258#ifndef NO_SSL
    226259                                        } else if(cm_strcaseequ(r[0], "SSLKey")) {
    227260                                                if(r[1] == NULL) {
     
    239272                                                        if(current->sslcert != NULL) free(current->sslcert);
    240273                                                        current->sslcert = cm_strdup(r[1]);
     274                                                }
     275#endif
     276                                        } else if(cm_strcaseequ(r[0], "ForceLog")) {
     277                                                if(r[1] == NULL) {
     278                                                        cm_log("Config", "Missing log at line %d", ln);
     279                                                        stop = 1;
     280                                                } else {
     281                                                        cm_force_log(r[1]);
     282                                                }
     283                                        } else if(cm_strcaseequ(r[0], "EndIf")) {
     284                                                if(ifbr == 0) {
     285                                                        cm_log("Config", "Missing BeginIf at line %d", ln);
     286                                                        stop = 1;
     287                                                }
     288                                                ifbr--;
     289                                        } else if(cm_strcaseequ(r[0], "BeginIf") || cm_strcaseequ(r[0], "BeginIfNot")) {
     290                                                if(r[1] == NULL) {
     291                                                        cm_log("Config", "Missing condition type at line %d", ln);
     292                                                } else {
     293                                                        ifbr++;
     294                                                        bool ign = false;
     295                                                        if(cm_strcaseequ(r[1], "False")) {
     296                                                                ign = true;
     297                                                        } else if(cm_strcaseequ(r[1], "True")) {
     298                                                        } else if(cm_strcaseequ(r[1], "Defined")) {
     299                                                                if(r[2] == NULL) {
     300                                                                        cm_log("Config", "Missing name at line %d", ln);
     301                                                                        stop = 1;
     302                                                                } else {
     303                                                                        int i;
     304                                                                        bool fndit = false;
     305                                                                        for(i = 0; config.defined[i] != NULL; i++) {
     306                                                                                if(strcmp(config.defined[i], r[2]) == 0) {
     307                                                                                        fndit = true;
     308                                                                                        break;
     309                                                                                }
     310                                                                        }
     311                                                                        if(!fndit) {
     312                                                                                ign = true;
     313                                                                        }
     314                                                                }
     315                                                        } else {
     316                                                                cm_log("Config", "Unknown condition type at line %d", ln);
     317                                                                stop = 1;
     318                                                        }
     319                                                        if(cm_strcaseequ(r[0], "BeginIfNot")) ign = !ign;
     320                                                        if(ign) {
     321                                                                ignore = ifbr - 1;
     322                                                        }
    241323                                                }
    242324                                        } else if(cm_strcaseequ(r[0], "ServerRoot")) {
  • tags/1.07/Server/module.c

    r25 r156  
    1010#include <cm_log.h>
    1111
     12#include <string.h>
    1213#include <unistd.h>
    1314#include <stdlib.h>
     
    5657}
    5758
     59void tw_add_define(const char* string) {
     60        int i;
     61        for(i = 0; config.defined[i] != NULL; i++)
     62                ;
     63        config.defined[i] = cm_strdup(string);
     64        config.defined[i + 1] = NULL;
     65}
     66
     67void tw_delete_define(const char* string) {
     68        int i;
     69        for(i = 0; config.defined[i] != NULL; i++) {
     70                if(strcmp(config.defined[i], string) == 0) {
     71                        free(config.defined[i]);
     72                        for(; config.defined[i] != NULL; i++) {
     73                                config.defined[i] = config.defined[i + 1];
     74                        }
     75                }
     76        }
     77}
     78
    5879void tw_init_tools(struct tw_tool* tools) {
    5980        tools->log = cm_log;
    6081        tools->add_version = tw_add_version;
     82        tools->add_define = tw_add_define;
    6183}
    6284
  • tags/1.07/Server/tw_config.h

    r140 r156  
    77extern "C" {
    88#endif
     9
     10#include "../config.h"
    911
    1012#include "tw_http.h"
     
    6264        char* name;
    6365        int port;
     66#ifndef NO_SSL
    6467        char* sslkey;
    6568        char* sslcert;
     69#endif
    6670        char* root;
    6771        int hideport;
     
    7680        char* readmes[MAX_README];
    7781        int readme_count;
     82#ifdef HAS_CHROOT
     83        char* chroot_path;
     84#endif
    7885};
    7986
     
    8188        uint64_t ports[MAX_PORTS + 1]; /* If port & (1 << 32) is non-zero, it is SSL */
    8289        char hostname[1025];
     90        char* defined[1025];
    8391        struct tw_config_entry root;
    8492        struct tw_config_entry vhosts[MAX_VHOSTS];
  • tags/1.07/Server/tw_module.h

    r141 r156  
    1414        void (*log)(const char* name, const char* log, ...);
    1515        void (*add_version)(const char* string);
     16        void (*add_define)(const char* string);
     17        void (*delete_define)(const char* string);
    1618};
    1719
     
    4547void tw_init_tools(struct tw_tool* tools);
    4648int tw_module_init(void* mod);
     49
     50void tw_add_version(const char* string);
     51void tw_add_define(const char* string);
     52void tw_delete_define(const char* string);
    4753#endif
    4854
  • tags/1.07/Server/tw_version.h

    r151 r156  
    88#endif
    99
    10 #define TW_VERSION "1.06C\0"
     10#define TW_VERSION "1.07\0"
    1111
    1212const char* tw_get_version(void);
  • tags/1.07/config.h.tmpl

    r128 r156  
    88#undef NO_SSL
    99#define USE_POLL
     10#define HAS_CHROOT
    1011
    1112/* DO NOT EDIT BELOW THIS LINE */
     
    2021#endif
    2122
     23#if defined(__MINGW32__) && defined(HAS_CHROOT)
     24#undef HAS_CHROOT
     25/* Windows should not have chroot */
     26#endif
     27
    2228#endif
    2329
  • tags/1.07/example.conf

    r150 r156  
    55
    66#LoadModule Module/mod_cgi.so
    7 LoadModule Module/mod_proxy.so
     7#LoadModule Module/mod_proxy.so
    88
    99Listen 80
     
    3030DocumentRoot /var/www
    3131
    32 #ProxyPass
     32Define test
     33Undefine test
     34
     35BeginIf Defined test
     36        ForceLog "defined"
     37EndIf
     38BeginIfNot Defined test
     39        ForceLog "not defined"
     40EndIf
  • trunk/Makefile

    r152 r156  
    99FLAGS = PWD=$(PWD) PLATFORM=$(PLATFORM) PREFIX=$(PREFIX)
    1010
    11 .PHONY: all format clean ./Server ./Common ./Module ./Manpage get-version
     11.PHONY: all format clean ./Server ./Common ./Module get-version
    1212
    1313all: ./Server ./Module ./Manpage ./Tool/genconf ./Tool/itworks
     
    3131        $(MAKE) -C $@ $(FLAGS)
    3232
    33 ./Manpage::
    34         $(MAKE) -C $@ $(FLAGS)
    35 
    36 ./README: ./README.tmpl
     33./README: ./README.tmpl ./Server/tw_version.h
    3734        sed "s/@VERSION@/`grep "define TW_VERSION" Server/tw_version.h | grep -Eo '"[^\]+' | sed -E 's/^"//g'`/g" ./README.tmpl > $@
    3835
     
    4441        cp ./Server/tewi $(PREFIX)/bin/
    4542        cp ./Module/*.so $(PREFIX)/lib/tewi/
    46         cp ./Manpage/tewi.8 $(PREFIX)/share/man/man8/
    4743
    4844format:
     
    5652        $(MAKE) -C ./Module $(FLAGS) clean
    5753        $(MAKE) -C ./Common $(FLAGS) clean
    58         $(MAKE) -C ./Manpage $(FLAGS) clean
    5954        rm -f ./Tool/option ./Tool/genconf
  • trunk/README

    r155 r156  
    11
    2 Tewi HTTPd version 1.06C
     2Tewi HTTPd version 1.07
    33
    44Original by Nishi <nishi@nishi.boats>
  • trunk/Server/config.c

    r138 r156  
    7373        }
    7474        for(i = 0; i < MAX_VHOSTS; i++) {
     75#ifndef NO_SSL
    7576                config.vhosts[i].sslkey = NULL;
    7677                config.vhosts[i].sslcert = NULL;
     78#endif
    7779                config.vhosts[i].root = NULL;
    78         }
     80#ifdef HAS_CHROOT
     81                config.vhosts[i].chroot_path = NULL;
     82#endif
     83        }
     84#ifndef NO_SSL
    7985        config.root.sslkey = NULL;
    8086        config.root.sslcert = NULL;
     87#endif
    8188        config.root.root = NULL;
    8289        config.root.mime_count = 0;
     
    8693        config.root.readme_count = 0;
    8794        config.root.hideport = 0;
     95#ifdef HAS_CHROOT
     96        config.root.chroot_path = NULL;
     97#endif
    8898        config.vhost_count = 0;
    8999        config.module_count = 0;
     
    91101        config.server_root = cm_strdup(PREFIX);
    92102        config.server_admin = cm_strdup(SERVER_ADMIN);
     103        config.defined[0] = NULL;
    93104        gethostname(config.hostname, 1024);
    94105}
     
    99110        cbuf[1] = 0;
    100111        int ln = 0;
     112        int ifbr = 0;
     113        int ignore = -1;
    101114        FILE* f = fopen(path, "r");
    102115        if(f != NULL) {
     
    115128                                        char** r = cm_split(l, " \t");
    116129                                        int i;
    117                                         if(cm_strcaseequ(r[0], "Include") || cm_strcaseequ(r[0], "IncludeOptional")) {
     130                                        if(ignore != -1 && ifbr >= ignore) {
     131                                                if(cm_strcaseequ(r[0], "EndIf")) ifbr--;
     132                                                if(ifbr == 0) {
     133                                                        ignore = -1;
     134                                                }
     135                                        } else if(cm_strcaseequ(r[0], "Include") || cm_strcaseequ(r[0], "IncludeOptional")) {
    118136                                                for(i = 1; r[i] != NULL; i++) {
    119137                                                        if(tw_config_read(r[i]) != 0 && cm_strcaseequ(r[0], "Include")) {
     
    121139                                                                break;
    122140                                                        }
     141                                                }
     142                                        } else if(cm_strcaseequ(r[0], "Define")) {
     143                                                if(r[1] == NULL) {
     144                                                        cm_log("Config", "Missing name at line %d", ln);
     145                                                        stop = 1;
     146                                                } else {
     147                                                        tw_add_define(r[1]);
     148                                                }
     149                                        } else if(cm_strcaseequ(r[0], "Undefine")) {
     150                                                if(r[1] == NULL) {
     151                                                        cm_log("Config", "Missing name at line %d", ln);
     152                                                        stop = 1;
     153                                                } else {
     154                                                        tw_delete_define(r[1]);
    123155                                                }
    124156                                        } else if(cm_strcaseequ(r[0], "BeginDirectory")) {
     
    224256                                        } else if(cm_strcaseequ(r[0], "ShowPort")) {
    225257                                                current->hideport = 0;
     258#ifndef NO_SSL
    226259                                        } else if(cm_strcaseequ(r[0], "SSLKey")) {
    227260                                                if(r[1] == NULL) {
     
    239272                                                        if(current->sslcert != NULL) free(current->sslcert);
    240273                                                        current->sslcert = cm_strdup(r[1]);
     274                                                }
     275#endif
     276                                        } else if(cm_strcaseequ(r[0], "ForceLog")) {
     277                                                if(r[1] == NULL) {
     278                                                        cm_log("Config", "Missing log at line %d", ln);
     279                                                        stop = 1;
     280                                                } else {
     281                                                        cm_force_log(r[1]);
     282                                                }
     283                                        } else if(cm_strcaseequ(r[0], "EndIf")) {
     284                                                if(ifbr == 0) {
     285                                                        cm_log("Config", "Missing BeginIf at line %d", ln);
     286                                                        stop = 1;
     287                                                }
     288                                                ifbr--;
     289                                        } else if(cm_strcaseequ(r[0], "BeginIf") || cm_strcaseequ(r[0], "BeginIfNot")) {
     290                                                if(r[1] == NULL) {
     291                                                        cm_log("Config", "Missing condition type at line %d", ln);
     292                                                } else {
     293                                                        ifbr++;
     294                                                        bool ign = false;
     295                                                        if(cm_strcaseequ(r[1], "False")) {
     296                                                                ign = true;
     297                                                        } else if(cm_strcaseequ(r[1], "True")) {
     298                                                        } else if(cm_strcaseequ(r[1], "Defined")) {
     299                                                                if(r[2] == NULL) {
     300                                                                        cm_log("Config", "Missing name at line %d", ln);
     301                                                                        stop = 1;
     302                                                                } else {
     303                                                                        int i;
     304                                                                        bool fndit = false;
     305                                                                        for(i = 0; config.defined[i] != NULL; i++) {
     306                                                                                if(strcmp(config.defined[i], r[2]) == 0) {
     307                                                                                        fndit = true;
     308                                                                                        break;
     309                                                                                }
     310                                                                        }
     311                                                                        if(!fndit) {
     312                                                                                ign = true;
     313                                                                        }
     314                                                                }
     315                                                        } else {
     316                                                                cm_log("Config", "Unknown condition type at line %d", ln);
     317                                                                stop = 1;
     318                                                        }
     319                                                        if(cm_strcaseequ(r[0], "BeginIfNot")) ign = !ign;
     320                                                        if(ign) {
     321                                                                ignore = ifbr - 1;
     322                                                        }
    241323                                                }
    242324                                        } else if(cm_strcaseequ(r[0], "ServerRoot")) {
  • trunk/Server/module.c

    r25 r156  
    1010#include <cm_log.h>
    1111
     12#include <string.h>
    1213#include <unistd.h>
    1314#include <stdlib.h>
     
    5657}
    5758
     59void tw_add_define(const char* string) {
     60        int i;
     61        for(i = 0; config.defined[i] != NULL; i++)
     62                ;
     63        config.defined[i] = cm_strdup(string);
     64        config.defined[i + 1] = NULL;
     65}
     66
     67void tw_delete_define(const char* string) {
     68        int i;
     69        for(i = 0; config.defined[i] != NULL; i++) {
     70                if(strcmp(config.defined[i], string) == 0) {
     71                        free(config.defined[i]);
     72                        for(; config.defined[i] != NULL; i++) {
     73                                config.defined[i] = config.defined[i + 1];
     74                        }
     75                }
     76        }
     77}
     78
    5879void tw_init_tools(struct tw_tool* tools) {
    5980        tools->log = cm_log;
    6081        tools->add_version = tw_add_version;
     82        tools->add_define = tw_add_define;
    6183}
    6284
  • trunk/Server/tw_config.h

    r140 r156  
    77extern "C" {
    88#endif
     9
     10#include "../config.h"
    911
    1012#include "tw_http.h"
     
    6264        char* name;
    6365        int port;
     66#ifndef NO_SSL
    6467        char* sslkey;
    6568        char* sslcert;
     69#endif
    6670        char* root;
    6771        int hideport;
     
    7680        char* readmes[MAX_README];
    7781        int readme_count;
     82#ifdef HAS_CHROOT
     83        char* chroot_path;
     84#endif
    7885};
    7986
     
    8188        uint64_t ports[MAX_PORTS + 1]; /* If port & (1 << 32) is non-zero, it is SSL */
    8289        char hostname[1025];
     90        char* defined[1025];
    8391        struct tw_config_entry root;
    8492        struct tw_config_entry vhosts[MAX_VHOSTS];
  • trunk/Server/tw_module.h

    r141 r156  
    1414        void (*log)(const char* name, const char* log, ...);
    1515        void (*add_version)(const char* string);
     16        void (*add_define)(const char* string);
     17        void (*delete_define)(const char* string);
    1618};
    1719
     
    4547void tw_init_tools(struct tw_tool* tools);
    4648int tw_module_init(void* mod);
     49
     50void tw_add_version(const char* string);
     51void tw_add_define(const char* string);
     52void tw_delete_define(const char* string);
    4753#endif
    4854
  • trunk/Server/tw_version.h

    r151 r156  
    88#endif
    99
    10 #define TW_VERSION "1.06C\0"
     10#define TW_VERSION "1.07\0"
    1111
    1212const char* tw_get_version(void);
  • trunk/config.h.tmpl

    r128 r156  
    88#undef NO_SSL
    99#define USE_POLL
     10#define HAS_CHROOT
    1011
    1112/* DO NOT EDIT BELOW THIS LINE */
     
    2021#endif
    2122
     23#if defined(__MINGW32__) && defined(HAS_CHROOT)
     24#undef HAS_CHROOT
     25/* Windows should not have chroot */
     26#endif
     27
    2228#endif
    2329
  • trunk/example.conf

    r150 r156  
    55
    66#LoadModule Module/mod_cgi.so
    7 LoadModule Module/mod_proxy.so
     7#LoadModule Module/mod_proxy.so
    88
    99Listen 80
     
    3030DocumentRoot /var/www
    3131
    32 #ProxyPass
     32Define test
     33Undefine test
     34
     35BeginIf Defined test
     36        ForceLog "defined"
     37EndIf
     38BeginIfNot Defined test
     39        ForceLog "not defined"
     40EndIf
Note: See TracChangeset for help on using the changeset viewer.