Dug through the source a bit. It seems this is by design, from
main.c:cmd_http -> main.c:process_one_web_page

      /* To avoid mischief, make sure the repository basename contains no
      ** characters other than alphanumerics, "-", "/", and "_".
      */
      for(j=strlen(g.zRepositoryName)+1, k=0; zRepo[j] && k<i-1; j++, k++){
        if( !fossil_isalnum(zRepo[j]) && zRepo[j]!='-' && zRepo[j]!='/' ){
          zRepo[j] = '_';
        }
      }

This is reasonable, but so are periods in file names. =)

* You should return a not found error if there are illegal characters
versus silently replacing them with an underscore. I did not realize
this would be the case until I looked at the source.

$ fossil clone http://fossils.example.com/repo.1.master local.fossil
will actually fetch /dir/on/host/repo_one_master.fossil
$ fossil clone http://fossils.example.com/repo_1.master local.fossil
will fetch the same thing for no obvious reason,
even if there are two different files, repo_1.master.fossil and
repo.1.master, on the server

* The list of allowed characters should probably be longer, if only
for consistency with 'fossil server'. We can even allow periods and
check the result against file.c:file_is_canonical to avoid said
mischief?

Non of this is catastrophic, but... surprised me nonetheless.

Thanks!

-Nick


On Wed, Jan 18, 2012 at 1:45 AM, Nick Zalutskiy <pace...@gmail.com> wrote:
>
> I have setup fossil to serve repositories using inetd (xinetd in my case) as 
> per http://fossil-scm.org/index.html/doc/tip/www/server.wiki
>
> Lets say http://example.com:8585 is serving from /home/fossil/repos and there 
> are two fossil files in there:
>   repo1.fossil
>   repo.name.with.periods.fossil
>
> Then:
>
> $ fossil clone http://example.com:8585/repo1 repo1.fossil
> [OK]
> $ fossil clone http://example.com:8585/repo.name.with.periods repo2.fossil
> fossil: server says: 404 not found
> ...
>
> At the same time if, on the server, we do 'fossil server', instead of serving 
> using 'fossil http' + inetd:
>
> $ fossil server --port 8686 /home/fossil/repos/repo.name.with.periods.fossil
>
> Then the earlier clone succeeds:
>
> $ fossil clone http://example.com:8686/repo.name.with.periods repo2.fossil
> [NOW OK]
>
> Is this a bug?
>
> -Nick
_______________________________________________
fossil-users mailing list
fossil-users@lists.fossil-scm.org
http://lists.fossil-scm.org:8080/cgi-bin/mailman/listinfo/fossil-users

Reply via email to