es Hoax..
miren:
/Sources/QueryString.php:180
$topic = (int) $_REQUEST['topic'];
/Sources/LockTopic.php
$request = db_query("
SELECT ID_MEMBER_STARTED, locked
FROM {$db_prefix}topics
WHERE ID_TOPIC = $topic
LIMIT 1", __FILE__, __LINE__);
list ($starter, $locked) = mysql_fetch_row($request);
despues veamos..
$user_lock = !allowedTo('lock_any');
if ($user_lock && $starter == $ID_MEMBER)
isAllowedTo('lock_own');
else
isAllowedTo('lock_any');
$userlock sera verdadero si NO tenemos permiso de bloquear cualquier mensaje.. y falso si tenemos permiso de bloquearlos.
de otra forma de ver este codigo:
if ($starter == $ID_MEMBER)
isAllowedTo('lock_own');
else if(allowedTo('lock_any'))
isAllowedTo('lock_any');
la diferencia entre allowedTo y isAllowedTo es que el primero regresa verdadero o falso, y el segundo, muestra el mensaje de error si no tienes permiso (Sources/Security.php).
despues, justo antes de bloquear el tema..
// Locking with high privileges.
if ($locked == '0' && !$user_lock)
$locked = '1';
// Locking with low privileges.
elseif ($locked == '0')
$locked = '2';
// Unlocking - make sure you don't unlock what you can't.
elseif ($locked == '2' || ($locked == '1' && !$user_lock))
$locked = '0';
// You cannot unlock this!
else
fatal_lang_error('smf31');
explico:
if ($locked == '0' && !$user_lock)
$locked = '1';
si ya esta desbloqueado y tienes poder de bloquear cualquiera.. entonces bloquealo.
sino, bloquealo en "nivel 2"..
PERO..
recuerda que para llegar aqui debimos pasar:
$user_lock = !allowedTo('lock_any');
if ($user_lock && $starter == $ID_MEMBER)
isAllowedTo('lock_own');
else
isAllowedTo('lock_any');
es decir, si eres el creador del topic, y tienes permiso de bloquearlo.. pasas..
si no eres el creador del topic, pero tienes permiso de bloquear cualquiera pasas..
de lo contrario:
Sources/Security.php:631
$_GET['action'] = '';
es decir.. se borra la accion..
y..
fatal_lang_error('cannot_' . $error_permission, false);
fatal_lang_error => fatal_error => obExit => (Sources/Subs.php:1314) exit;
solo te saltas exit si:
WIRELESS no esta definido Y "from_index" es verdadero.
sinembargo, al mandar el mensaje de error:
obExit(null, true);
como no se manda el tercer argumento, se convierte en falso, y.. si hace EXIT.
Saludos!!