author | Mark Lodato <lodatom@gmail.com> | 2011-05-13 23:59:07 (UTC) |
---|---|---|
committer | Lars Hjemli <hjemli@gmail.com> | 2011-05-23 21:20:59 (UTC) |
commit | ec79265f2053e6dc20e0ec486719f5954d2be83d (patch) (unidiff) | |
tree | bae66fbd919c03d0204554cc0c109c7eba0e3b97 /cgit.c | |
parent | c8ea73caabcb16ffb74baa70d35650027ed772c4 (diff) | |
download | cgit-ec79265f2053e6dc20e0ec486719f5954d2be83d.zip cgit-ec79265f2053e6dc20e0ec486719f5954d2be83d.tar.gz cgit-ec79265f2053e6dc20e0ec486719f5954d2be83d.tar.bz2 |
fix virtual-root if script-name is ""
In d0cb841 (Avoid trailing slash in virtual-root), virtual-root was set
from script-name using trim_end(). However, if script-name was the
empty string (""), which happens when cgit is used to serve the root
path on a domain (/), trim_end() returns NULL and cgit acts like
virtual-root is not available. Now, set virtual-root to "" in this
case, which fixes this bug.
Signed-off-by: Lars Hjemli <hjemli@gmail.com>
-rw-r--r-- | cgit.c | 5 |
1 files changed, 4 insertions, 1 deletions
@@ -736,50 +736,53 @@ static int calc_ttl() | |||
736 | 736 | ||
737 | return ctx.cfg.cache_repo_ttl; | 737 | return ctx.cfg.cache_repo_ttl; |
738 | } | 738 | } |
739 | 739 | ||
740 | int main(int argc, const char **argv) | 740 | int main(int argc, const char **argv) |
741 | { | 741 | { |
742 | const char *path; | 742 | const char *path; |
743 | char *qry; | 743 | char *qry; |
744 | int err, ttl; | 744 | int err, ttl; |
745 | 745 | ||
746 | prepare_context(&ctx); | 746 | prepare_context(&ctx); |
747 | cgit_repolist.length = 0; | 747 | cgit_repolist.length = 0; |
748 | cgit_repolist.count = 0; | 748 | cgit_repolist.count = 0; |
749 | cgit_repolist.repos = NULL; | 749 | cgit_repolist.repos = NULL; |
750 | 750 | ||
751 | cgit_parse_args(argc, argv); | 751 | cgit_parse_args(argc, argv); |
752 | parse_configfile(expand_macros(ctx.env.cgit_config), config_cb); | 752 | parse_configfile(expand_macros(ctx.env.cgit_config), config_cb); |
753 | ctx.repo = NULL; | 753 | ctx.repo = NULL; |
754 | http_parse_querystring(ctx.qry.raw, querystring_cb); | 754 | http_parse_querystring(ctx.qry.raw, querystring_cb); |
755 | 755 | ||
756 | /* If virtual-root isn't specified in cgitrc, lets pretend | 756 | /* If virtual-root isn't specified in cgitrc, lets pretend |
757 | * that virtual-root equals SCRIPT_NAME, minus any possibly | 757 | * that virtual-root equals SCRIPT_NAME, minus any possibly |
758 | * trailing slashes. | 758 | * trailing slashes. |
759 | */ | 759 | */ |
760 | if (!ctx.cfg.virtual_root) | 760 | if (!ctx.cfg.virtual_root && ctx.cfg.script_name) { |
761 | ctx.cfg.virtual_root = trim_end(ctx.cfg.script_name, '/'); | 761 | ctx.cfg.virtual_root = trim_end(ctx.cfg.script_name, '/'); |
762 | if (!ctx.cfg.virtual_root) | ||
763 | ctx.cfg.virtual_root = ""; | ||
764 | } | ||
762 | 765 | ||
763 | /* If no url parameter is specified on the querystring, lets | 766 | /* If no url parameter is specified on the querystring, lets |
764 | * use PATH_INFO as url. This allows cgit to work with virtual | 767 | * use PATH_INFO as url. This allows cgit to work with virtual |
765 | * urls without the need for rewriterules in the webserver (as | 768 | * urls without the need for rewriterules in the webserver (as |
766 | * long as PATH_INFO is included in the cache lookup key). | 769 | * long as PATH_INFO is included in the cache lookup key). |
767 | */ | 770 | */ |
768 | path = ctx.env.path_info; | 771 | path = ctx.env.path_info; |
769 | if (!ctx.qry.url && path) { | 772 | if (!ctx.qry.url && path) { |
770 | if (path[0] == '/') | 773 | if (path[0] == '/') |
771 | path++; | 774 | path++; |
772 | ctx.qry.url = xstrdup(path); | 775 | ctx.qry.url = xstrdup(path); |
773 | if (ctx.qry.raw) { | 776 | if (ctx.qry.raw) { |
774 | qry = ctx.qry.raw; | 777 | qry = ctx.qry.raw; |
775 | ctx.qry.raw = xstrdup(fmt("%s?%s", path, qry)); | 778 | ctx.qry.raw = xstrdup(fmt("%s?%s", path, qry)); |
776 | free(qry); | 779 | free(qry); |
777 | } else | 780 | } else |
778 | ctx.qry.raw = xstrdup(ctx.qry.url); | 781 | ctx.qry.raw = xstrdup(ctx.qry.url); |
779 | cgit_parse_url(ctx.qry.url); | 782 | cgit_parse_url(ctx.qry.url); |
780 | } | 783 | } |
781 | 784 | ||
782 | ttl = calc_ttl(); | 785 | ttl = calc_ttl(); |
783 | ctx.page.expires += ttl*60; | 786 | ctx.page.expires += ttl*60; |
784 | if (ctx.env.request_method && !strcmp(ctx.env.request_method, "HEAD")) | 787 | if (ctx.env.request_method && !strcmp(ctx.env.request_method, "HEAD")) |
785 | ctx.cfg.nocache = 1; | 788 | ctx.cfg.nocache = 1; |