version 1.158, 2018/05/29 20:32:45 |
version 1.160, 2018/10/02 19:41:23 |
|
|
/* $Id$ */ |
/* $Id$ */ |
/* |
/* |
* Copyright (c) 2011, 2012 Kristaps Dzonsons <kristaps@bsd.lv> |
* Copyright (c) 2011, 2012 Kristaps Dzonsons <kristaps@bsd.lv> |
* Copyright (c) 2014, 2015, 2016, 2017 Ingo Schwarze <schwarze@usta.de> |
* Copyright (c) 2014, 2015, 2016, 2017, 2018 Ingo Schwarze <schwarze@usta.de> |
* |
* |
* Permission to use, copy, modify, and distribute this software for any |
* Permission to use, copy, modify, and distribute this software for any |
* purpose with or without fee is hereby granted, provided that the above |
* purpose with or without fee is hereby granted, provided that the above |
|
|
static void html_print(const char *); |
static void html_print(const char *); |
static void html_putchar(char); |
static void html_putchar(char); |
static int http_decode(char *); |
static int http_decode(char *); |
|
static void http_encode(const char *p); |
static void parse_manpath_conf(struct req *); |
static void parse_manpath_conf(struct req *); |
static void parse_path_info(struct req *req, const char *path); |
static void parse_path_info(struct req *req, const char *path); |
static void parse_query_string(struct req *, const char *); |
static void parse_query_string(struct req *, const char *); |
Line 90 static void resp_format(const struct req *, const ch |
|
Line 91 static void resp_format(const struct req *, const ch |
|
static void resp_searchform(const struct req *, enum focus); |
static void resp_searchform(const struct req *, enum focus); |
static void resp_show(const struct req *, const char *); |
static void resp_show(const struct req *, const char *); |
static void set_query_attr(char **, char **); |
static void set_query_attr(char **, char **); |
|
static int validate_arch(const char *); |
static int validate_filename(const char *); |
static int validate_filename(const char *); |
static int validate_manpath(const struct req *, const char *); |
static int validate_manpath(const struct req *, const char *); |
static int validate_urifrag(const char *); |
static int validate_urifrag(const char *); |
Line 316 http_decode(char *p) |
|
Line 318 http_decode(char *p) |
|
} |
} |
|
|
static void |
static void |
|
http_encode(const char *p) |
|
{ |
|
for (; *p != '\0'; p++) { |
|
if (isalnum((unsigned char)*p) == 0 && |
|
strchr("-._~", *p) == NULL) |
|
printf("%%%02.2X", (unsigned char)*p); |
|
else |
|
putchar(*p); |
|
} |
|
} |
|
|
|
static void |
resp_begin_http(int code, const char *msg) |
resp_begin_http(int code, const char *msg) |
{ |
{ |
|
|
Line 490 validate_manpath(const struct req *req, const char* ma |
|
Line 504 validate_manpath(const struct req *req, const char* ma |
|
} |
} |
|
|
static int |
static int |
|
validate_arch(const char *arch) |
|
{ |
|
int i; |
|
|
|
for (i = 0; i < arch_MAX; i++) |
|
if (strcmp(arch, arch_names[i]) == 0) |
|
return 1; |
|
|
|
return 0; |
|
} |
|
|
|
static int |
validate_filename(const char *file) |
validate_filename(const char *file) |
{ |
{ |
|
|
Line 562 pg_redirect(const struct req *req, const char *name) |
|
Line 588 pg_redirect(const struct req *req, const char *name) |
|
printf("%s/", req->q.manpath); |
printf("%s/", req->q.manpath); |
if (req->q.arch != NULL) |
if (req->q.arch != NULL) |
printf("%s/", req->q.arch); |
printf("%s/", req->q.arch); |
printf("%s", name); |
http_encode(name); |
if (req->q.sec != NULL) |
if (req->q.sec != NULL) { |
printf(".%s", req->q.sec); |
putchar('.'); |
|
http_encode(req->q.sec); |
|
} |
printf("\r\nContent-Type: text/html; charset=utf-8\r\n\r\n"); |
printf("\r\nContent-Type: text/html; charset=utf-8\r\n\r\n"); |
} |
} |
|
|
Line 839 resp_format(const struct req *req, const char *file) |
|
Line 867 resp_format(const struct req *req, const char *file) |
|
memset(&conf, 0, sizeof(conf)); |
memset(&conf, 0, sizeof(conf)); |
conf.fragment = 1; |
conf.fragment = 1; |
conf.style = mandoc_strdup(CSS_DIR "/mandoc.css"); |
conf.style = mandoc_strdup(CSS_DIR "/mandoc.css"); |
|
conf.toc = 1; |
usepath = strcmp(req->q.manpath, req->p[0]); |
usepath = strcmp(req->q.manpath, req->p[0]); |
mandoc_asprintf(&conf.man, "/%s%s%s%s%%N.%%S", |
mandoc_asprintf(&conf.man, "/%s%s%s%s%%N.%%S", |
scriptname, *scriptname == '\0' ? "" : "/", |
scriptname, *scriptname == '\0' ? "" : "/", |
|
|
return EXIT_FAILURE; |
return EXIT_FAILURE; |
} |
} |
|
|
if ( ! (NULL == req.q.arch || validate_urifrag(req.q.arch))) { |
if (req.q.arch != NULL && validate_arch(req.q.arch) == 0) { |
pg_error_badrequest( |
pg_error_badrequest( |
"You specified an invalid architecture."); |
"You specified an invalid architecture."); |
return EXIT_FAILURE; |
return EXIT_FAILURE; |