X-Git-Url: https://git.p6c8.net/jirafeau_project.git/blobdiff_plain/0d312b3c20fc8d17a4808442c49b72a499d0dc76..86058c063871b6c9a070be3da87f4f047a655e80:/lib/functions.php diff --git a/lib/functions.php b/lib/functions.php index 01d0638..b590e2b 100644 --- a/lib/functions.php +++ b/lib/functions.php @@ -25,9 +25,16 @@ */ function s2p($s) { + $block_size = 8; $p = ''; for ($i = 0; $i < strlen($s); $i++) { - $p .= $s{$i} . '/'; + $p .= $s{$i}; + if (($i + 1) % $block_size == 0) { + $p .= '/'; + } + } + if (strlen($s) % $block_size != 0) { + $p .= '/'; } return $p; } @@ -498,16 +505,13 @@ function check_errors($cfg) exit; } - /* check if the destination dirs are writable */ - $writable = is_writable(VAR_FILES) && is_writable(VAR_LINKS); - /* Checking for errors. */ if (!is_writable(VAR_FILES)) { - add_error(t('The file directory is not writable!'), VAR_FILES); + add_error(t('FILE_DIR_W'), VAR_FILES); } if (!is_writable(VAR_LINKS)) { - add_error(t('The link directory is not writable!'), VAR_LINKS); + add_error(t('LINK_DIR_W'), VAR_LINKS); } if (!is_writable(VAR_ASYNC)) { @@ -563,16 +567,16 @@ function jirafeau_admin_list($name, $file_hash, $link_hash) echo t('LS_FILES'); } echo ''; - echo ''; + echo '
'; echo ''; - echo ''; - echo ''; - echo ''; - echo ''; - echo ''; - echo ''; - echo ''; - echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; echo ''; /* Get all links files. */ @@ -1070,19 +1074,14 @@ function jirafeau_challenge_upload_password($cfg, $password) } /** - * Test if visitor's IP is authorized to upload. + * Test if the given IP is whitelisted by the given list. * * @param $allowedIpList array of allowed IPs * @param $challengedIp IP to be challenged * @return true if IP is authorized, false otherwise. */ -function jirafeau_challenge_upload_ip($allowedIpList, $challengedIp) +function jirafeau_challenge_ip($allowedIpList, $challengedIp) { - // skip if list is empty = all IPs allowed - if (count($allowedIpList) == 0) { - return true; - } - // test given IP against each allowed IP foreach ($allowedIpList as $i) { if ($i == $challengedIp) { return true; @@ -1098,6 +1097,42 @@ function jirafeau_challenge_upload_ip($allowedIpList, $challengedIp) return false; } +/** + * Check if Jirafeau has a restriction on the IP address for uploading. + * @return true if uploading is IP restricted, false otherwise. + */ +function jirafeau_upload_has_ip_restriction($cfg) { + return count($cfg['upload_ip']) > 0; +} + +/** + * Test if visitor's IP is authorized to upload at all. + * + * @param $cfg configuration + * @param $challengedIp IP to be challenged + * @return true if IP is authorized, false otherwise. + */ +function jirafeau_challenge_upload_ip($cfg, $challengedIp) +{ + // If no IP address have been listed, allow upload from any IP + if (!jirafeau_upload_has_ip_restriction($cfg)) { + return true; + } + return jirafeau_challenge_ip($cfg['upload_ip'], $challengedIp); +} + +/** + * Test if visitor's IP is authorized to upload without a password. + * + * @param $cfg configuration + * @param $challengedIp IP to be challenged + * @return true if IP is authorized, false otherwise. + */ +function jirafeau_challenge_upload_ip_without_password($cfg, $challengedIp) +{ + return jirafeau_challenge_ip($cfg['upload_ip_nopassword'], $challengedIp); +} + /** * Test if visitor's IP is authorized or password is supplied and authorized * @param $ip IP to be challenged @@ -1106,35 +1141,9 @@ function jirafeau_challenge_upload_ip($allowedIpList, $challengedIp) */ function jirafeau_challenge_upload ($cfg, $ip, $password) { - // Allow if no ip restrictaion and no password restriction - if ((count ($cfg['upload_ip']) == 0) and (count ($cfg['upload_password']) == 0)) { - return true; - } - - // Allow if ip is in array - foreach ($cfg['upload_ip'] as $i) { - if ($i == $ip) { - return true; - } - // CIDR test for IPv4 only. - if (strpos ($i, '/') !== false) - { - list ($subnet, $mask) = explode('/', $i); - if ((ip2long ($ip) & ~((1 << (32 - $mask)) - 1) ) == ip2long ($subnet)) { - return true; - } - } - } - if (!jirafeau_has_upload_password($cfg)) { - return false; - } - - foreach ($cfg['upload_password'] as $p) { - if ($password == $p) { - return true; - } - } - return false; + return jirafeau_challenge_upload_ip_without_password($cfg, $ip) || + (!jirafeau_has_upload_password($cfg) && !jirafeau_upload_has_ip_restriction($cfg)) || + (jirafeau_challenge_upload_password($cfg, $password) && jirafeau_challenge_upload_ip($cfg, $ip)); } /** Tell if we have some HTTP headers generated by a proxy */
' . t('FILENAME') . '' . t('TYPE') . '' . t('SIZE') . '' . t('EXPIRE') . '' . t('ONETIME') . '' . t('UPLOAD_DATE') . '' . t('ORIGIN') . '' . t('ACTION') . '' . t('FILENAME') . '' . t('TYPE') . '' . t('SIZE') . '' . t('EXPIRE') . '' . t('ONETIME') . '' . t('UPLOAD_DATE') . '' . t('ORIGIN') . '' . t('ACTION') . '