Fossil SCM

Extra resilience on the automatic chroot mechanism.

drh 2011-01-17 23:47 trunk
Commit 13d3cad50c52037d54d9a1fbf6570e4291ba3d14
1 file changed +6 -4
+6 -4
--- src/main.c
+++ src/main.c
@@ -834,19 +834,21 @@
834834
char *zDir;
835835
836836
file_canonical_name(zRepo, &dir);
837837
zDir = blob_str(&dir);
838838
if( file_isdir(zDir)==1 ){
839
- chdir(zDir);
840
- chroot(zDir);
839
+ if( chdir(zDir) || chroot(zDir) || chdir("/") ){
840
+ fossil_fatal("unable to chroot into %s", zDir);
841
+ }
841842
zRepo = "/";
842843
}else{
843844
for(i=strlen(zDir)-1; i>0 && zDir[i]!='/'; i--){}
844845
if( zDir[i]!='/' ) fossil_panic("bad repository name: %s", zRepo);
845846
zDir[i] = 0;
846
- chdir(zDir);
847
- chroot(zDir);
847
+ if( chdir(zDir) || chroot(zDir) || chdir("/") ){
848
+ fossil_fatal("unable to chroot into %s", zDir);
849
+ }
848850
zDir[i] = '/';
849851
zRepo = &zDir[i];
850852
}
851853
if( stat(zRepo, &sStat)!=0 ){
852854
fossil_fatal("cannot stat() repository: %s", zRepo);
853855
--- src/main.c
+++ src/main.c
@@ -834,19 +834,21 @@
834 char *zDir;
835
836 file_canonical_name(zRepo, &dir);
837 zDir = blob_str(&dir);
838 if( file_isdir(zDir)==1 ){
839 chdir(zDir);
840 chroot(zDir);
 
841 zRepo = "/";
842 }else{
843 for(i=strlen(zDir)-1; i>0 && zDir[i]!='/'; i--){}
844 if( zDir[i]!='/' ) fossil_panic("bad repository name: %s", zRepo);
845 zDir[i] = 0;
846 chdir(zDir);
847 chroot(zDir);
 
848 zDir[i] = '/';
849 zRepo = &zDir[i];
850 }
851 if( stat(zRepo, &sStat)!=0 ){
852 fossil_fatal("cannot stat() repository: %s", zRepo);
853
--- src/main.c
+++ src/main.c
@@ -834,19 +834,21 @@
834 char *zDir;
835
836 file_canonical_name(zRepo, &dir);
837 zDir = blob_str(&dir);
838 if( file_isdir(zDir)==1 ){
839 if( chdir(zDir) || chroot(zDir) || chdir("/") ){
840 fossil_fatal("unable to chroot into %s", zDir);
841 }
842 zRepo = "/";
843 }else{
844 for(i=strlen(zDir)-1; i>0 && zDir[i]!='/'; i--){}
845 if( zDir[i]!='/' ) fossil_panic("bad repository name: %s", zRepo);
846 zDir[i] = 0;
847 if( chdir(zDir) || chroot(zDir) || chdir("/") ){
848 fossil_fatal("unable to chroot into %s", zDir);
849 }
850 zDir[i] = '/';
851 zRepo = &zDir[i];
852 }
853 if( stat(zRepo, &sStat)!=0 ){
854 fossil_fatal("cannot stat() repository: %s", zRepo);
855

Keyboard Shortcuts

Open search /
Next entry (timeline) j
Previous entry (timeline) k
Open focused entry Enter
Show this help ?
Toggle theme Top nav button