832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
|
struct stat sStat;
Blob dir;
char *zDir;
file_canonical_name(zRepo, &dir);
zDir = blob_str(&dir);
if( file_isdir(zDir)==1 ){
chdir(zDir);
chroot(zDir);
zRepo = "/";
}else{
for(i=strlen(zDir)-1; i>0 && zDir[i]!='/'; i--){}
if( zDir[i]!='/' ) fossil_panic("bad repository name: %s", zRepo);
zDir[i] = 0;
chdir(zDir);
chroot(zDir);
zDir[i] = '/';
zRepo = &zDir[i];
}
if( stat(zRepo, &sStat)!=0 ){
fossil_fatal("cannot stat() repository: %s", zRepo);
}
setgid(sStat.st_gid);
|
|
|
>
|
|
>
|
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
|
struct stat sStat;
Blob dir;
char *zDir;
file_canonical_name(zRepo, &dir);
zDir = blob_str(&dir);
if( file_isdir(zDir)==1 ){
if( chdir(zDir) || chroot(zDir) || chdir("/") ){
fossil_fatal("unable to chroot into %s", zDir);
}
zRepo = "/";
}else{
for(i=strlen(zDir)-1; i>0 && zDir[i]!='/'; i--){}
if( zDir[i]!='/' ) fossil_panic("bad repository name: %s", zRepo);
zDir[i] = 0;
if( chdir(zDir) || chroot(zDir) || chdir("/") ){
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);
}
setgid(sStat.st_gid);
|