Diario de mi Proyecto : PFC sobre Moodle

  Archivos
Jul 07 [2]
Jun 07 [12]
Mayo 07 [13]
Mar 07 [3]
Nov 06 [6]
Oct 06 [5]


Sindicación
Artículos
Comentarios


Enlaces
eGrupos
ZoomBlog

 
Inicio | Mi Perfil | Suscríbete al blog
 

Realizando funciones

Enlace permanente 11 de Junio, 2007, 19:06

Hola!
Durante estos días he seguido con la programación del módulo. He añadido más objetivos a esta entrega, como los siguientes:

  • Función source_route para los ficheros fuente: esta función devolverá en un parámetro las diferentes rutas de los ficheros fuente, según el lenguaje configurado en el módulo.
  • Función source_file: esta función creará el fichero fuente con la extensión adecuada al lenguaje utilizado en el módulo.
  • Actualizar el código de funciones predeterminadas del módulo: funciones como update_instance o delete_instance aparecen vacías y he de programarlas adecuadamente.
  • Botón upload: si he permitido la opción de subir un fichero, o el módulo está enfocado como examen, he de incluir un botón que suba archivos de los usuarios y los reciba el profesor adecuadamente.
  • Email al profesor: he de configurar esta opción correctamente.
También he estado trabajando con los objetivos del anterior artículo:

Ya he eliminado las rutas del estilo D:\appservmoodle... por sus equivalentes $CFG->dirroot."moodle...". También he creado la función source_route que devuelve las rutas de los ficheros fuente, según el lenguaje utilizado en el módulo, ya que tendrán distinta extensión:

function REMOTERUNNING_source_route($language,&$route) {
    global $CFG;
           
    switch ($language) {
          case 0: $route = $CFG->dirroot."modRemoteRunning\file.c";
                  break;
          case 1: $route = $CFG->dirroot."mod\RemoteRunning\file.cpp";
                          break;
          case 2: $route = $CFG->dirroot."mod\RemoteRunning\file.java";
                  break;
          case 3: $route = $CFG->dirroot."mod\RemoteRunning\file.ada";
                  break;
          case 4: $route = $CFG->dirroot."mod\RemoteRunning\file.f";
                  break;                                     
          case 5: $route = $CFG->dirroot."mod\RemoteRunning\file.c";
                  break;
              }
    }

En cuanto a las variables del formulario, ya se recogen todas correctamente para su posterior tratamiento. He tenido que modificar la tabla del módulo, quedando de la siguiente manera:

CREATE TABLE `prefix_REMOTERUNNING` (
  `id` int(10) unsigned NOT NULL auto_increment,
  `course` int(10) unsigned NOT NULL default '0',
  `name` varchar(255) NOT NULL default '',
  `description` text NOT NULL default '',
  `timedue` int(10) unsigned NOT NULL default '0',
  `timeavailable` int(10) unsigned NOT NULL default '0',
  `language` tinyint(1) unsigned NOT NULL default '0',
  `exam` tinyint(1) unsigned NOT NULL default '0',
  `grade` int(10) NOT NULL default '0',
  `timelimit` int(10) NOT NULL default '0',
  `upload` tinyint(2) unsigned NOT NULL default '0',
  `resubmit` tinyint(2) unsigned NOT NULL default '0',
  `emailteachers` tinyint(2) unsigned NOT NULL default '0',
  `maxbytes` int(10) unsigned NOT NULL default '100000',
  `timemodified` int(10) unsigned NOT NULL default '0',
  PRIMARY KEY  (`id`)
) COMMENT='Define REMOTERUNNING';

He creado la función reserve_words, que devolverá un mensaje de error en el caso de que se intente utilizar funciones del estilo exec(), system(), etc. Esta función revisará el código y suspenderá la compilación y ejecución, si se encuentran funciones potencialmente dañinas para el sistema. Esta función no está terminada, y que tengo que investigar el cógigo ADA, FORTRAN y JAVA para averiguar funciones de ejecución de programas:

function REMOTERUNNING_reserve_words($language,&$read,$text) {
       
    switch ($language) {
       
        case 0: $list = array    ("shell_exec","exec","system");
                        foreach ($list as $word) {
                            if (stristr($text,$word)!==false) {
                                $read = '<b>ERRORES:</b>';
                              $read .= '<BR>';
                  $read .= '<BR>';
                  $read .= $word;
                  $read .= ': ';
                    $read .= get_string('file_reserve_word','REMOTERUNNING');
                    return 0;
                  }
                }
                break;
        case 1: $list = array    ("shell_exec","exec","system");
                        foreach ($list as $word) {
                            if (stristr($text,$word)!==false) {
                                $read = '<b>ERRORES:</b>';
                              $read .= '<BR>';
                  $read .= '<BR>';
                  $read .= $word;
                  $read .= ': ';
                    $read .= get_string('file_reserve_word','REMOTERUNNING');
                    return 0;
                  }
                }
                        break;
        case 2: $list = array    ("exec","system");
                        foreach ($list as $word) {
                            if (stristr($text,$word)!==false) {
                                $read = '<b>ERRORES:</b>';
                              $read .= '<BR>';
                  $read .= '<BR>';
                  $read .= $word;
                  $read .= ': ';
                    $read .= get_string('file_reserve_word','REMOTERUNNING');
                    return 0;
                  }
                }
                break;
        case 3: $list = array    ("exec","system");
                        foreach ($list as $word) {
                            if (stristr($text,$word)!==false) {
                                $read = '<b>ERRORES:</b>';
                              $read .= '<BR>';
                  $read .= '<BR>';
                  $read .= $word;
                  $read .= ': ';
                    $read .= get_string('file_reserve_word','REMOTERUNNING');
                    return 0;
                  }
                }
                break;
        case 4: $list = array    ("exec","system");
                        foreach ($list as $word) {
                            if (stristr($text,$word)!==false) {
                                $read = '<b>ERRORES:</b>';
                              $read .= '<BR>';
                  $read .= '<BR>';
                  $read .= $word;
                  $read .= ': ';
                    $read .= get_string('file_reserve_word','REMOTERUNNING');
                    return 0;
                  }
                }
                break;                                     
        case 5: $list = array    ("shell_exec","exec","system");
                        foreach ($list as $word) {
                            if (stristr($text,$word)!==false) {
                                $read = '<b>ERRORES:</b>';
                              $read .= '<BR>';
                  $read .= '<BR>';
                  $read .= $word;
                  $read .= ': ';
                    $read .= get_string('file_reserve_word','REMOTERUNNING');
                    return 0;
                  }
                }
                break;
              }
        return 1;
            }

Mensajes de error. Ahora mismo estoy trabajando en este aspecto. La idea es que si se pulsa el botón de download del ejecutable o fichero fuente, y estos ficheros no existen, mostrar un error y volver a la vista del módulo. Por ahora consigo lanzar el error, pero al volver a la vista del módulo, se produce un error de seguridad que tengo que corregir.

Mañana más.

Bye
Comentarios 6 ~ Comentar | Referencias (0)



Blog alojado en ZoomBlog.com

 

 

<<   Junio 2007  >>
LMMiJVSD
        1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30  

Categorías
General [41] Sindicar categoría