Changeset 161 in Main for trunk/Server


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

adding chroot

Location:
trunk/Server
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/Server/config.c

    r156 r161  
    103103        config.defined[0] = NULL;
    104104        gethostname(config.hostname, 1024);
     105#ifdef HAS_CHROOT
     106        tw_add_define("HAS_CHROOT");
     107#endif
    105108}
    106109
     
    274277                                                }
    275278#endif
     279#ifdef HAS_CHROOT
     280                                        } else if(cm_strcaseequ(r[0], "ChrootDirectory")) {
     281                                                if(r[1] == NULL) {
     282                                                        cm_log("Config", "Missing path at line %d", ln);
     283                                                        stop = 1;
     284                                                } else {
     285                                                        if(current->chroot_path != NULL) free(current->chroot_path);
     286                                                        current->chroot_path = cm_strdup(r[1]);
     287                                                }
     288#endif
    276289                                        } else if(cm_strcaseequ(r[0], "ForceLog")) {
    277290                                                if(r[1] == NULL) {
     
    346359                                                        if(current->root != NULL) free(current->root);
    347360                                                        current->root = cm_strdup(strcmp(r[1], "/") == 0 ? "" : r[1]);
    348                                                 }
    349                                         } else if(cm_strcaseequ(r[0], "ServerRoot")) {
    350                                                 if(r[1] == NULL) {
    351                                                         cm_log("Config", "Missing path at line %d", ln);
    352                                                         stop = 1;
    353                                                 } else {
    354                                                         if(config.server_root != NULL) free(config.server_root);
    355                                                         config.server_root = cm_strdup(r[1]);
    356361                                                }
    357362                                        } else if(cm_strcaseequ(r[0], "MIMEType")) {
  • trunk/Server/server.c

    r141 r161  
    280280        } else if(code == 404) {
    281281                return "404 Not Found";
     282        } else if(code == 500) {
     283                return "500 Internal Server Error";
    282284        } else {
    283285                return "400 Bad Request";
     
    508510                        }
    509511                }
     512                bool rej = false;
    510513                cm_log("Server", "Host is %s", vhost);
    511514                int port = s == NULL ? 80 : 443;
     
    521524                cm_log("Server", "Hostname is `%s', port is `%d'", host, port);
    522525                struct tw_config_entry* vhost_entry = tw_vhost_match(host, port);
     526#ifdef HAS_CHROOT
     527                char* chrootpath = vhost_entry->chroot_path != NULL ? vhost_entry->chroot_path : config.root.chroot_path;
     528                if(chrootpath != NULL) {
     529                        if(chdir(chrootpath) == 0) {
     530                                if(chroot(".") == 0) {
     531                                        cm_log("Server", "Chroot successful");
     532                                }
     533                        } else {
     534                                cm_log("Server", "chdir() failed, cannot chroot");
     535                                tw_http_error(s, sock, 500, name, port, vhost_entry);
     536                                rej = true;
     537                        }
     538                }
     539#endif
    523540                for(i = 0; i < config.module_count; i++) {
    524541                        tw_mod_request_t mod_req = (tw_mod_request_t)tw_module_symbol(config.modules[i], "mod_request");
     
    545562                        char* path = cm_strcat(vhost_entry->root == NULL ? "" : vhost_entry->root, req.path);
    546563                        cm_log("Server", "Filesystem path is %s", path);
    547                         bool rej = false;
    548564#ifdef __MINGW32__
    549565                        char* rpath = cm_strdup(path);
     
    777793                                }
    778794                        } else {
    779                                 tw_http_error(s, sock, 404, name, port, vhost_entry);
     795                                if(!rej) {
     796                                        tw_http_error(s, sock, 404, name, port, vhost_entry);
     797                                }
    780798                        }
    781799                        free(path);
  • trunk/Server/tw_version.h

    r159 r161  
    88#endif
    99
    10 #define TW_VERSION "1.07A\0"
     10#define TW_VERSION "1.08\0"
    1111
    1212const char* tw_get_version(void);
Note: See TracChangeset for help on using the changeset viewer.