summaryrefslogtreecommitdiff
path: root/inc/subscription.php
diff options
context:
space:
mode:
Diffstat (limited to 'inc/subscription.php')
-rw-r--r--inc/subscription.php33
1 files changed, 27 insertions, 6 deletions
diff --git a/inc/subscription.php b/inc/subscription.php
index 52091bafe..08d4cb241 100644
--- a/inc/subscription.php
+++ b/inc/subscription.php
@@ -44,9 +44,26 @@ function subscription_filename($id) {
*
* @author Adrian Lang <lang@cosmocode.de>
*/
+function subscription_lock_filename ($id){
+ global $conf;
+ return $conf['lockdir'].'/_subscr_' . $id . '.lock';
+}
+
function subscription_lock($id) {
- $lockf = subscription_filename($id) . '.lock';
- return !file_exists($lockf) && touch($lockf);
+ // FIXME merge this with the indexer lock generation, abstract out
+ global $conf;
+ $lock = subscription_lock_filename($id);
+ while(!@mkdir($lock,$conf['dmode'])){
+ usleep(50);
+ if(time()-@filemtime($lock) > 60*5){
+ // looks like a stale lock - remove it
+ @rmdir($lock);
+ }else{
+ return false;
+ }
+ }
+ if($conf['dperm']) chmod($lock, $conf['dperm']);
+ return true;
}
/**
@@ -58,8 +75,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 +115,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 +175,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 +272,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);