summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xbin/indexer.php2
-rw-r--r--conf/dokuwiki.php5
-rw-r--r--inc/init.php2
-rw-r--r--inc/io.php22
-rw-r--r--lib/exe/indexer.php2
-rw-r--r--lib/exe/media.php2
-rw-r--r--lib/plugins/config/lang/en/lang.php7
-rw-r--r--lib/plugins/config/settings/config.metadata.php3
8 files changed, 30 insertions, 15 deletions
diff --git a/bin/indexer.php b/bin/indexer.php
index f84e1abf2..0eb1fbe48 100755
--- a/bin/indexer.php
+++ b/bin/indexer.php
@@ -79,6 +79,7 @@ function _index($id){
_lock();
echo "$id... ";
idx_addPage($id);
+ umask($conf['umask']);
io_saveFile(metaFN($id,'.indexed'),' ');
echo "done.\n";
_unlock();
@@ -124,6 +125,7 @@ function _clearindex(){
global $conf;
_lock();
echo "Clearing index... ";
+ umask($conf['umask']);
io_saveFile($conf['cachedir'].'/word.idx','');
io_saveFile($conf['cachedir'].'/page.idx','');
io_saveFile($conf['cachedir'].'/index.idx','');
diff --git a/conf/dokuwiki.php b/conf/dokuwiki.php
index 04b0abe0b..bf81d8bc4 100644
--- a/conf/dokuwiki.php
+++ b/conf/dokuwiki.php
@@ -8,9 +8,10 @@
/* Datastorage and Permissions */
+$conf['umask'] = 0022; //set the global umask
+$conf['fmode'] = 0666; //set file creation mode
+$conf['dmode'] = 0777; //set direction creation mode
-$conf['umask'] = 0111; //set the umask for new files
-$conf['dmask'] = 0000; //directory mask accordingly
$conf['lang'] = 'en'; //your language
$conf['basedir'] = ''; //absolute dir from serveroot - blank for autodetection
$conf['baseurl'] = ''; //URL to server including protocol - blank for autodetect
diff --git a/inc/init.php b/inc/init.php
index 65c64515c..a81ca2d10 100644
--- a/inc/init.php
+++ b/inc/init.php
@@ -118,10 +118,12 @@ function init_files(){
$conf['cachedir'].'/page.idx',
$conf['cachedir'].'/index.idx', );
+ umask($conf['umask']);
foreach($files as $file){
if(!@file_exists($file)){
$fh = fopen($file,'a');
fclose($fh);
+ chmod($conf['fmode'], $file);
}
}
}
diff --git a/inc/io.php b/inc/io.php
index 72b963520..3e13124de 100644
--- a/inc/io.php
+++ b/inc/io.php
@@ -64,8 +64,10 @@ function io_readFile($file,$clean=true){
* @return bool true on success
*/
function io_saveFile($file,$content,$append=false){
+ global $conf;
$mode = ($append) ? 'ab' : 'wb';
+ $fileexists = file_exists($file);
io_makeFileDir($file);
io_lock($file);
if(substr($file,-3) == '.gz'){
@@ -85,6 +87,8 @@ function io_saveFile($file,$content,$append=false){
fwrite($fh, $content);
fclose($fh);
}
+
+ if(!$fileexists && $conf['fmode'] != 0666) { chmod($file, $conf['fmode']); }
io_unlock($file);
return true;
}
@@ -170,7 +174,6 @@ function io_lock($file){
$lockDir = $conf['lockdir'].'/'.md5($file);
@ignore_user_abort(1);
-
$timeStart = time();
do {
//waited longer than 3 seconds? -> stale lock
@@ -203,11 +206,10 @@ function io_makeFileDir($file){
global $conf;
$dir = dirname($file);
- umask($conf['dmask']);
+ umask($conf['umask']);
if(!is_dir($dir)){
io_mkdir_p($dir) || msg("Creating directory $dir failed",-1);
}
- umask($conf['umask']);
}
/**
@@ -227,7 +229,7 @@ function io_mkdir_p($target){
$dir = preg_replace('/^'.preg_quote(realpath($conf['ftp']['root']),'/').'/','', $target);
return io_mkdir_ftp($dir);
}else{
- return @mkdir($target,0777); // crawl back up & create dir tree
+ return @mkdir($target,$conf['dmode']); // crawl back up & create dir tree
}
}
return 0;
@@ -261,8 +263,8 @@ function io_mkdir_ftp($dir){
//create directory
$ok = @ftp_mkdir($conn, $dir);
- //set permissions (using the directory umask)
- @ftp_site($conn,sprintf("CHMOD %04o %s",(0777 - $conf['dmask']),$dir));
+ //set permissions (using the directory umask and dmode)
+ @ftp_site($conn,sprintf("CHMOD %04o %s",($conf['dmode'] & ~$conf['umask']),$dir));
@ftp_close($conn);
return $ok;
@@ -283,6 +285,7 @@ function io_mkdir_ftp($dir){
* @author Chris Smith <chris@jalakai.co.uk>
*/
function io_download($url,$file,$useAttachment=false,$defaultName=''){
+ global $conf;
$http = new DokuHTTPClient();
$http->max_bodysize = 2*1024*1024; //max. 2MB
$http->timeout = 25; //max. 25 sec
@@ -311,23 +314,28 @@ function io_download($url,$file,$useAttachment=false,$defaultName=''){
$file = $file.$name;
}
+ $fileexists = file_exists($file);
+ umask($conf['umask']);
$fp = @fopen($file,"w");
if(!$fp) return false;
fwrite($fp,$data);
fclose($fp);
+ if(!$fileexists && $conf['fmode'] != 0666) { chmod($file, $conf['fmode']); }
if ($useAttachment) return $name;
return true;
}
/**
- * Windows copatible rename
+ * Windows compatible rename
*
* rename() can not overwrite existing files on Windows
* this function will use copy/unlink instead
*/
function io_rename($from,$to){
+ global $conf;
if(!@rename($from,$to)){
if(@copy($from,$to)){
+ if($conf['fmode'] != 0666) { chmod($file, $conf['fmode']); }
@unlink($from);
return true;
}
diff --git a/lib/exe/indexer.php b/lib/exe/indexer.php
index 49b532507..19eea767f 100644
--- a/lib/exe/indexer.php
+++ b/lib/exe/indexer.php
@@ -49,7 +49,7 @@ function runIndexer(){
// try to aquire a lock
$lock = $conf['lockdir'].'/_indexer.lock';
- while(!@mkdir($lock,0777)){
+ while(!@mkdir($lock,$conf['dmode'])){
usleep(50);
if(time()-@filemtime($lock) > 60*5){
// looks like a stale lock - remove it
diff --git a/lib/exe/media.php b/lib/exe/media.php
index cddf258db..47af3c4d3 100644
--- a/lib/exe/media.php
+++ b/lib/exe/media.php
@@ -129,7 +129,7 @@ function media_upload($NS,$AUTH){
io_makeFileDir($fn);
if(move_uploaded_file($file['tmp_name'], $fn)) {
// set the correct permission here
- chmod($fn, 0777 - $conf['umask']);
+ chmod($fn, $conf['fmode'] & ~$conf['umask']);
msg($lang['uploadsucc'],1);
return true;
}else{
diff --git a/lib/plugins/config/lang/en/lang.php b/lib/plugins/config/lang/en/lang.php
index c79c09381..d404277bc 100644
--- a/lib/plugins/config/lang/en/lang.php
+++ b/lib/plugins/config/lang/en/lang.php
@@ -18,9 +18,10 @@ $lang['locked'] = 'The settings file can not be updated, if this is unintent
ensure the local settings file name and permissions are correct.';
// settings prompts
-$lang['umask'] = 'new file permission mask'; //set the umask for new files
-$lang['dmask'] = 'new folder permission mask'; //directory mask accordingly
-$lang['lang'] = 'language'; //your language
+$lang['umask'] = 'global permission mask'; //set the umask for new files
+$lang['fmode'] = 'file creation mode'; //directory mask accordingly
+$lang['dmode'] = 'directory creation mode'; //directory mask accordingly
+$lang['lang'] = 'language'; //your language
$lang['basedir'] = 'base directory'; //absolute dir from serveroot - blank for autodetection
$lang['baseurl'] = 'base url'; //URL to server including protocol - blank for autodetect
$lang['savedir'] = 'save directory'; //where to store all the files
diff --git a/lib/plugins/config/settings/config.metadata.php b/lib/plugins/config/settings/config.metadata.php
index 70333c28c..010b2d6ae 100644
--- a/lib/plugins/config/settings/config.metadata.php
+++ b/lib/plugins/config/settings/config.metadata.php
@@ -73,7 +73,8 @@ $meta['lang'] = array('dirchoice','_dir' => DOKU_INC.'inc/lang/');
$meta['template'] = array('dirchoice','_dir' => DOKU_INC.'lib/tpl/');
$meta['umask'] = array('numeric','_pattern' => '/0[0-7]{3}/'); // only accept octal representation
-$meta['dmask'] = array('numeric','_pattern' => '/0[0-7]{3}/'); // only accept octal representation
+$meta['dmode'] = array('numeric','_pattern' => '/0[0-7]{3}/'); // only accept octal representation
+$meta['fmode'] = array('numeric','_pattern' => '/0[0-7]{3}/'); // only accept octal representation
$meta['basedir'] = array('');
$meta['baseurl'] = array('');