1
0
Fork 0
mirror of https://gitlab.com/niansa/simpsh-httpd.git synced 2025-03-06 20:53:36 +01:00
simpsh-httpd/cport/urlcheck.c
2020-08-04 19:44:49 +02:00

66 lines
1.6 KiB
C

void urlcheck() {
struct databuffer thisdb;
struct databuffer thisdb2;
// Block tries to read documents outside the document root
thisdb = auto_db("..");
if (db_contains(&url, &thisdb)) {
thisdb = auto_db("/");
db_set(&url, &thisdb);
db_set(&file, &FILES);
}
// Avoid a bug
if (file_isdir(db_raw(&file))) {
thisdb = auto_db("/");
if (!db_endswith(&url, &thisdb)) {
thisdb2 = auto_db("HTTP/1.0 302 Moved permanently\nLocation: ");
db_set(&status, &thisdb2);
//db_append(&status, &WEBSITE);
db_append(&status, &url);
db_append(&status, &thisdb);
thisdb = auto_db("text/html");
db_set(&contenttype, &thisdb);
httpheaders();
done = true;
}
}
// Find index.html
db_set(&thisdb, &file);
thisdb2 = auto_db("index.html");
db_append(&thisdb, &thisdb2);
if (file_isregfile(thisdb.data)) {
db_append(&url, &thisdb2);
db_append(&file, &thisdb2);
}
// Find index.php
db_set(&thisdb, &file);
thisdb2 = auto_db("index.php");
db_append(&thisdb, &thisdb2);
if (file_isregfile(thisdb.data)) {
db_append(&url, &thisdb2);
db_append(&file, &thisdb2);
}
// Respond 404 if the file doesn't exist
if (!file_exists(db_raw(&file))) {
thisdb = auto_db("HTTP/1.0 404 Not Found");
db_set(&status, &thisdb);
thisdb = auto_db("text/html");
db_set(&contenttype, &thisdb);
db_set(&file, &FILES);
db_append(&file, &ERROR404);
}
// Respond 403 if the file isn't readable
if (!file_accessible(db_raw(&file), R_OK)) {
thisdb = auto_db("HTTP/1.0 403 Forbidden");
db_set(&status, &thisdb);
thisdb = auto_db("text/html");
db_set(&contenttype, &thisdb);
db_set(&file, &FILES);
db_append(&file, &ERROR403);
}
}