Stephan:

I changed main.c to look as follows. I wasn't sure which code block you
meant by first and second so I tried both instances. With the code as
shown, I get no sqlite_warning, but I also get a big "Not Found" message
(if I view page source, <h1>Not Found</h1> is the only thing there).

When I comment out close in the top instance and comment out open in the
bottom instance, I get the same not found message, but with the
sqlite_warning above it. So maybe the instance shown below represents some
kind of progress?


static char *enter_chroot_jail(char *zRepo){
#if !defined(_WIN32)
  if( getuid()==0 ){
    int i;
    struct stat sStat;
    Blob dir;
    char *zDir;

    if( g.db!=0 ){
      db_close(1);
//    db_open_repository(zRepo);
    }
    file_canonical_name(zRepo, &dir, 0);
    zDir = blob_str(&dir);
    if( file_isdir(zDir)==1 ){
      if( file_chdir(zDir, 1) ){
        fossil_fatal("unable to chroot into %s", zDir);
      }
      zRepo = "/";
    }else{
      for(i=strlen(zDir)-1; i>0 && zDir[i]!='/'; i--){}
      if( zDir[i]!='/' ) fossil_fatal("bad repository name: %s", zRepo);
      if( i>0 ){
        zDir[i] = 0;
        if( file_chdir(zDir, 1) ){
          fossil_fatal("unable to chroot into %s", zDir);
        }
        zDir[i] = '/';
      }
      zRepo = &zDir[i];
    }
    if( stat(zRepo, &sStat)!=0 ){
      fossil_fatal("cannot stat() repository: %s", zRepo);
    }
    i = setgid(sStat.st_gid);
    i = i || setuid(sStat.st_uid);
    if(i){
      fossil_fatal("setgid/uid() failed with errno %d", errno);
    }
    if( g.db!=0 ){
  //    db_close(1);
      db_open_repository(zRepo);
    }
  }



On Wed, Sep 25, 2013 at 1:54 PM, Stephan Beal <sgb...@googlemail.com> wrote:

> On Wed, Sep 25, 2013 at 8:49 PM, Ron Wilson <ronw.m...@gmail.com> wrote:
>
>> Why would the database be opened before doing the chroot?
>>
>
> i believe the reason is that because the bit which does the db-open does
> not know that a chroot may (depending on the UID) be pending. The chroot
> only happens when UID==0 (root user). The chroot never happens for non-root
> cases, so it's only "wrong" for that particular case.
>
> --
> ----- stephan beal
> http://wanderinghorse.net/home/stephan/
> http://gplus.to/sgbeal
>
> _______________________________________________
> fossil-users mailing list
> fossil-users@lists.fossil-scm.org
> http://lists.fossil-scm.org:8080/cgi-bin/mailman/listinfo/fossil-users
>
>
_______________________________________________
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