Falla en el mod Seo4SMF para SMF

Iniciado por WHK, 9 Enero 2009, 09:47 AM

0 Miembros y 1 Visitante están viendo este tema.

WHK

#20
Acá una función que hize para verificar el acceso a la visualización de títulos de temas o boards (==)
Código (php) [Seleccionar]
function seo_verifica_permisos($id, $tipo){
global $user_info, $db_prefix;
if(!$id = (int)$id){
return false;
}
if($user_info['is_admin'] == '1'){
return true; // Si es administrador entonces tiene permisos por defecto.
}
if($tipo == 'board'){ // Procesa Board
if($request = @db_query("
SELECT memberGroups
FROM {$db_prefix}boards
WHERE ID_BOARD = {$id}
LIMIT 1", __FILE__, __LINE__)){
if($row = @mysql_fetch_assoc($request)){
mysql_free_result($request);
}
}
if(!$permisos = @explode(',', $row['memberGroups'])){
if(!$permisos = (int)$row['memberGroups']){ // Hay permiso solo para un tipo de usuario
return false; // No hay permisos preestablecidos
}
}
foreach($permisos as $valor){
if($valor == $user_info['groups'][0]){
return true; // Tiene permisos
}
}
return false; // No tiene permisos
}elseif($tipo == 'topic'){
if($request = @db_query("
SELECT ID_BOARD
FROM {$db_prefix}topics
WHERE ID_TOPIC = {$id} LIMIT 1", __FILE__, __LINE__)){
if($row = @mysql_fetch_assoc($request)){
mysql_free_result($request);
}
}
if(seo_verifica_permisos((int)$row['ID_BOARD'], 'board')){
return true; // Tiene permisos
}else{
return false; // No tiene permisos
}
}else{
return false; // No hay tipos para procesar
}
}


Entre muchisimos cambios para evitar una multitud de fallas que no habia contemplado pero por el camino fuí viendo y parchando al mismo tiempo, en algunos casos algunas funciones retornan y otros no ya que en algunos casos es necesario mostrar retornos válidos y en otros casos no, no hize un texto para describir todos los cambios o hubiese quedado mas grande que el mismo script.

Este parche parcha todas las fallas antes mencionadas y mas.
Si alguien utiliza este mod modificado por mano propia tendrá que volver a crear esos cambios.
Este parche consta de 3 archivos solamente:
  • Themes/{$THEME}/Seo4SMFAdmin.template.php
  • Sources/Seo4SMFAdmin.php
  • seo4smf-redirect.php

    Los archivos a reemplazar están acá, en la primera linea de cada archivo está la localización.

    Dudas, sugerencias, propuesas, reclamos, demandas?¿?¿?
    Si quieres ver específicamente los cambios puedes utilizar el comando diff en linux o busquen el programa windiff de windows.

aristides_03

hey felicidades  y que bueno que compartas el parche ya que el seo es una gran utilidad en los foros de smf y esperamos que salga tambien para la versión 2..smf  en que falta mucho seria un agrado

y bueno si necesitan ayuda  estoy dispuesto en ayudar y asi aprendemos todo que ese es el objetivo de la vida ;D

sirdarckcat

WHK, si sabes que se puede hacer todo ese codigo de permisos en una query a SQL? consumes menos recursos.. ve el parche que puse en el foro de lo de privado-privado

Saludos!!

Nakp

Cita de: sirdarckcat en 16 Enero 2009, 22:02 PM
WHK, si sabes que se puede hacer todo ese codigo de permisos en una query a SQL? consumes menos recursos.. ve el parche que puse en el foro de lo de privado-privado

Saludos!!

eso me dijo cuando lo descubrió xD

"sdc hace modificando un par de lineas lo que yo haría creando una funcion para verificar permisos..."

@sdc: y los parches aplicados anteriormente? están el foro privado-privado? sería bueno que los incluyan todos :P
Ojo por ojo, y el mundo acabará ciego.

WHK

CitarWHK, si sabes que se puede hacer todo ese codigo de permisos en una query a SQL? consumes menos recursos.. ve el parche que puse en el foro de lo de privado-privado

Si me acordé y eso fue lo primero que hize en el parche pero después me arrepentí porque el tuyo solo indica si el foro es público entonces se muestra y si es privado no se muestra pero.. que pasa si yo tengo permisos para ver foros privados y accedo? se verá privado/privado y la idea en esa función que hice fue que cada usuario pueda ver los temas que le permiten ver, si tu puedes ver solo 2 foros privados de 3 en total solo podrás ver esos dos, esa es la idea.. ajustarse un poco a las reglas de smf ahora que alex lo quiera así para evitar el copy paste de links es otra cosa  :P

дٳŦ٭



Con sangre andaluza :)


sirdarckcat

mmmm fuera de que eso tambien se hace en una sola linea, no estoy de acuerdo en que se muestren topics no-publicos... independientemente de su tienes permiso o no de ver el foro, solo se deberian de redirigir temas que son publicos, por el simple motivo de que si no se hace asi, que tal que alguien con privilegios, manda un MP con un enlace a un tema privado... seo4smf va a cambiar la URL por la del tema en privado..

mer77

Hola, muchisimas gracias por compartir el patch y pido disculpas por revivir este tema.

Mi pregunta es muy sencilla, en algunos foros smf luego de aplicar el patch se encuentran errores como estos:

CitarNotice: Undefined index: t in /home/exkanka/public_html/seo4smf-redirect.php on line 7

Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: Access denied for user 'exkanka'@'localhost' (using password: NO) in /home/exkanka/public_html/seo4smf-redirect.php on line 7

Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: A link to the server could not be established in /home/exkanka/public_html/seo4smf-redirect.php on line 7

Notice: Undefined index: b in /home/exkanka/public_html/seo4smf-redirect.php on line 8

Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: Access denied for user 'exkanka'@'localhost' (using password: NO) in /home/exkanka/public_html/seo4smf-redirect.php on line 8

Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: A link to the server could not be established in /home/exkanka/public_html/seo4smf-redirect.php on line 8

Notice: Undefined index: o in /home/exkanka/public_html/seo4smf-redirect.php on line 9

Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: Access denied for user 'exkanka'@'localhost' (using password: NO) in /home/exkanka/public_html/seo4smf-redirect.php on line 9

Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: A link to the server could not be established in /home/exkanka/public_html/seo4smf-redirect.php on line 9

Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: Access denied for user 'exkanka'@'localhost' (using password: NO) in /home/exkanka/public_html/seo4smf-redirect.php on line 10

Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: A link to the server could not be established in /home/exkanka/public_html/seo4smf-redirect.php on line 10

Notice: Undefined index: p in /home/exkanka/public_html/seo4smf-redirect.php on line 11

Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: Access denied for user 'exkanka'@'localhost' (using password: NO) in /home/exkanka/public_html/seo4smf-redirect.php on line 11

Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: A link to the server could not be established in /home/exkanka/public_html/seo4smf-redirect.php on line 11

Notice: Undefined index: a in /home/exkanka/public_html/seo4smf-redirect.php on line 12

Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: Access denied for user 'exkanka'@'localhost' (using password: NO) in /home/exkanka/public_html/seo4smf-redirect.php on line 12

Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: A link to the server could not be established in /home/exkanka/public_html/seo4smf-redirect.php on line 12

Notice: Undefined index: param in /home/exkanka/public_html/seo4smf-redirect.php on line 13

Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: Access denied for user 'exkanka'@'localhost' (using password: NO) in /home/exkanka/public_html/seo4smf-redirect.php on line 13

Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: A link to the server could not be established in /home/exkanka/public_html/seo4smf-redirect.php on line 13

Justamente las lineas de la 7 a la 13 corresponden a estas lineas de codigo:

Citar$topic = mysql_real_escape_string($_GET['t']);
        $board = mysql_real_escape_string($_GET['b']);
        $other = mysql_real_escape_string($_GET['o']);
        $user =  mysql_real_escape_string($_GET['u']);
        $tpage = mysql_real_escape_string($_GET['p']);
        $action = mysql_real_escape_string($_GET['a']);
        $param = mysql_real_escape_string($_GET['param']);

Dichos errores quedan registrados en el error_log del smf tambien.

Que significa ese problema, tiene alguna solucion? representa algun peligro?

saludos y gracias mer77.

AlbertoBSD

Pues es muy raro que te salga, este toma los datos de conexión desde el SMF, no deberia te dener problemas para conectarse a la base de datos.

Saludos
Donaciones
1Coffee1jV4gB5gaXfHgSHDz9xx9QSECVW

WHK

CitarAccess denied for user 'exkanka'@'localhost'
Ese error es porque la conexión hacia la base de datos no ha sido realizada, revisa tu servidor o tus datos de conexión.