summaryrefslogtreecommitdiff
path: root/inc/subscription.php
diff options
context:
space:
mode:
Diffstat (limited to 'inc/subscription.php')
-rw-r--r--inc/subscription.php34
1 files changed, 28 insertions, 6 deletions
diff --git a/inc/subscription.php b/inc/subscription.php
index 52091bafe..8e3a99a8f 100644
--- a/inc/subscription.php
+++ b/inc/subscription.php
@@ -44,9 +44,27 @@ function subscription_filename($id) {
*
* @author Adrian Lang <lang@cosmocode.de>
*/
+function subscription_lock_filename ($id){
+ global $conf;
+ return $conf['lockdir'].'/_subscr_' . md5($id) . '.lock';
+}
+
function subscription_lock($id) {
- $lockf = subscription_filename($id) . '.lock';
- return !file_exists($lockf) && touch($lockf);
+ global $conf;
+ $lock = subscription_lock_filename($id);
+
+ if (is_dir($lock) && time()-@filemtime($lock) > 60*5) {
+ // looks like a stale lock - remove it
+ @rmdir($lock);
+ }
+
+ // try creating the lock directory
+ if (!@mkdir($lock,$conf['dmode'])) {
+ return false;
+ }
+
+ if($conf['dperm']) chmod($lock, $conf['dperm']);
+ return true;
}
/**
@@ -58,8 +76,8 @@ function subscription_lock($id) {
* @author Adrian Lang <lang@cosmocode.de>
*/
function subscription_unlock($id) {
- $lockf = subscription_filename($id) . '.lock';
- return file_exists($lockf) && unlink($lockf);
+ $lockf = subscription_lock_filename($id);
+ return @rmdir($lockf);
}
/**
@@ -98,7 +116,7 @@ function subscription_set($user, $page, $style, $data = null,
// io_deleteFromFile does not return false if no line matched.
return io_deleteFromFile($file,
- subscription_regex(array('user' => $user)),
+ subscription_regex(array('user' => auth_nameencode($user))),
true);
}
@@ -158,6 +176,10 @@ function subscription_find($page, $pre) {
// This is an old subscription file.
$subscription = trim($subscription) . " every\n";
}
+
+ list($user, $rest) = explode(' ', $subscription, 2);
+ $subscription = rawurldecode($user) . " " . $rest;
+
if (preg_match(subscription_regex($pre), $subscription,
$line_matches) === 0) {
continue;
@@ -251,7 +273,7 @@ function subscription_addresslist(&$data){
$self = $data['self'];
$addresslist = $data['addresslist'];
- if (!$conf['subscribers']) {
+ if (!$conf['subscribers'] || $auth === null) {
return '';
}
$pres = array('style' => 'every', 'escaped' => true);