UNIVERSIDAD DE GUAYAQUIL Facultad de Ciencias Matemáticas y Físicas Carrera de Ingeniería en Sistemas Computacionales “Webmail Corporativo” TESIS DE GRADO Previo a la Obtención del Título de: INGENIERO EN SISTEMAS COMPUTACIONALES Autores: Erazo Córdova Luis Eduardo Jaramillo Ordóñez Raúl Andrés Miranda Castro Zaida Yadira GUAYAQUIL-ECUADOR Año: 2008 AGRADECIMIENTO Quedaremos eternamente agradecidos primeramente a Dios por la sabiduría que nos dio. Agradecemos a nuestros padres por su apoyo incondicional y a todas las personas que nos brindaron su respaldo durante la elaboración de nuestro proyecto y creyeron en nuestra objetivos. capacidad de lograr nuestros DEDICATORIA El desarrollo de este proyecto así como la sustentación del mismo lo dedicamos primeramente a Dios que nos dio la sabiduría para poder afrontar todos lo problemas que se nos presentaron. También lo dedicamos a nuestros padres que por su apoyo incondicional hemos podido realizar la culminación de nuestro proyecto de tesis. TRIBUNAL DE GRADUACIÓN Presidente del Tribunal Primer Vocal Segundo Vocal Secretario DECLARACIÓN EXPRESA “La autoría de la tesis de grado corresponde exclusivamente al suscrito(s), perteneciendo a la Universidad de Guayaquil los derechos que generen la aplicación de la misma”. (Reglamento de Graduación de la Carrera de Ingeniería en sistemas Computacionales, Art. 26) ______________________ _________________________ Erazo Córdova Luis Eduardo Jaramillo Ordóñez Raúl Andrés C.I. 0920317161 C.I. 0923068852 _______________________ Miranda Castro Zaida Yadira C.I. 0922663729 RESUMEN El wizard que permite administrar el Web mail Horde (Syscomsa) fue elaborado con la finalidad de reducir costos de operatividad a la persona u organización que la adquiera. La herramienta utilizada de Webmail Corporativo llamada “Horde” fue desarrollada para administrar mensajes desde cualquier ordenador sin que los mensajes se descargan por lo que no consume espacio en nuestro ordenador. Además este sistema radica en que no es necesario realizar ninguna configuración en ningún cliente de correo. Puede accederse al correo desde cualquier emplazamiento solo se necesita que exista una máquina con acceso a un navegador. La aplicación que hemos desarrollado es para poder administrar esta herramienta de una forma mas amigable al usuario accediendo al servidor desde cualquier ordenador con acceso a Internet y desde ahí poder efectuar las configuraciones del mismo para la administración de cuentas de correo y sus parámetros. INDICE GENERAL AGRADECIMIENTO II DEDICATORIA III TRIBUNAL DE GRADUACIÓN IV DECLARACIÓN EXPRESA V RESUMEN VI INDICE GENERAL VII CAPITULO 1 1. INTRODUCCIÓN 1 1.1. Resumen 1 1.2. Misión del proyecto 2 1.3. Visión Del Proyecto 2 1.4. Ventajas del Webmail Corporativo 3 1.5. Objetivos del Proyecto Webmail Corporativo 6 1.6. Alcances del Proyecto 1.7. Requerimientos Tecnológicos 8 12 1.7.1. Requerimientos Hardware 12 1.7.2. Requerimientos Software 13 1.8. Requerimientos Humanos 13 1.9. Metodología 14 Investigación 14 Análisis 15 Diseño 15 1.10. Modelo De Desarrollo 16 Determinar o Fijar Objetivos 16 Análisis de Riesgos 17 Desarrollar Verificar y Validar (Probar) 17 Planificar 18 1.11. Cronograma 19 1.12. Funcionalidad General Del Proyecto 19 1.13. Análisis FODA 19 1.13.1. Fortaleza 19 1.13.2. Oportunidad 20 1.13.3. Debilidades 20 1.14.4. Amenazas 21 CAPITULO 2 22 2. ANÁLISIS DEL PROYECTO 22 2.1. Análisis Funcionamiento Del Webmail 22 Configuraciones Administrador 24 Nombre De Usuario 24 Nombre De Dominio 24 Nombre De La Persona Que Utiliza La Cuenta 24 Logotipo De La Empresa 25 Asignación De Usuario Y Contraseña 25 Determinar El Umbral Del Uso Del Buzón 25 Permisos Para Cada Usuario 25 2.1.1. Esquema Básico Del Funcionamiento Del Webmail 26 2.2. Análisis Orientado A Objetos 27 2.2.1. Análisis De La Estructura De Objetos (AEO) 27 2.2.2. Diagrama De Casos De Uso 28 2.2.3. Diagrama De Tipos De Objetos 28 2.2.4. Diagrama De Relación Entre Objetos 30 2.2.5. Análisis Del Comportamiento De Objetos (ACO) 30 2.2.6. Diagrama De Eventos 31 2.2.7. Diagrama De Flujo De Objetos 31 CAPITULO 3 33 3. DISEÑO DEL PROYECTO 33 3.1. Diseño de la Estructura y Comportamiento de objetos (DEO) 33 3.2. Diseño Orientado a Objetos 34 3.2.1. Diagrama de Clases 34 3.2.2. Diagrama de Objetos 34 3.2.3. Diagrama de Actividades 35 CAPITULO 4 37 4. DESARROLLO Y PRUEBAS DEL SISTEMA 37 4.1. Desarrollo del sistema 37 4.2. Creación de los Componentes 38 4.3. Seguridades 38 4.3.1. Sistema Operativo 39 4.3.2. Base de Datos 40 4.3.3. Humano 41 4.4. Pruebas del sistema 42 4.4.1. Verificación y validación 42 4.4.2. Prueba envió y recepción 43 4.4.3. Prueba de creación y modificación 44 4.4.4. Pruebas de respaldo 44 4.4.5. Pruebas de seguridad 45 4.5. Calidad del sistema 46 4.6. Modelo de datos 46 4.6.1. Modelo de datos orientado a objetos 47 CAPITULO 5 49 5. RECOMENDACIONES Y CONCLUSIONES DEL PROYECTO 49 5.1. Recomendaciones 49 5.1.1. Hardware 50 5.1.2. Software 51 5.1.3. Puesta en marcha 52 5.1.4. Seguridades 53 GLOSARIO DE TERMINOS 57 ANEXOS 61 ABREVIATURA DER.Diagrama de Diagrama de Entidad de Relación. Diagrama de Flujo de Datos. Flujo de Información.D FD.Internet Hard Disk. ProtocolHD.DFI.ICMP.-IP.LAN.OO.RAM.SQL.TCP.UDP.- Internet Control Message Protocol Local Area Network. Orientado a objetos Random Access Memory. Language Query Sentences. Transfer Control Protocol. User Datagrama Protocol CAPITULO 1 1. INTRODUCCION 1.1. Resumen El servicio de webmail es un sistema de correo electrónico para empresas pensado para portales, colegios, agrupaciones, etc., en definitiva para grandes organizaciones. Los webmails como su nombre lo indica son aplicaciones basados en una plataforma web, que te permite verificar tus mensajes de correo electrónico, utilizando tu navegador de Internet. Estas herramientas te permiten acceder a tu cuenta de correo alojado en un servidor gratuito, de pago o empresarial. 2 Estos utilizan los protocolos de comunicación IMAP o POP3. Mediante la utilización de los webmails, no es necesario instalar algún cliente de correo, ni descargar tus mensajes a tu ordenador, solo basta con tener una conexión a Internet. Los webmails son vinculados a un servidor de correo. Los webmail facilitan a los usuarios hacer uso de su correo electrónico de una forma fácil, utilizando un diseño amigable al usuario, brindándole la posibilidad de no depender de un único ordenador. 1.2. Misión del proyecto Implementar un sistema de correo electrónico con una interfaz amigable para el usuario, el cual permita al mismo crear y administrar las cuentas de correo, así como también permisos y umbrales necesarios de los usuarios finales, utilizando parámetros definidos en la aplicación. 1.3. Visión del proyecto La principal meta de nuestro producto webmail esta dirigido a convertirse en una herramienta líder en el mercado nacional e internacional, la cual permita a los usuarios que trabajen con ella, administrar sus cuentas de correo electrónico de una manera fácil desde cualquier lugar del mundo mediante un 3 ordenador que tenga acceso al Internet usando un username y un password. El administrador tendrá opciones adicionales el cual le permita regular las cuentas que se creen con dicha herramienta. 1.4. Ventajas del Webmail Corporativo a) Permite administrar mensajes desde cualquier ordenador que tenga un navegador y pertenezca a la red interna de la organización. En caso de expandir a otras localidades solo necesita que exista una maquina con acceso a Internet. b) Los mensajes no se descargan, por este motivo es que no consume espacio de nuestro ordenador, es decir los mensajes pueden permanecer en el buzón de nuestra cuenta y no es necesidad de guardarlo en la computadora que estamos utilizando. c) Este sistema radica en que no es necesario realizar ninguna configuración en ningún cliente de correo. Es decir los clientes no podrán realizarle cambios tan radicales a la visualización de su correo. d) Facilitan a los usuarios hacer uso de su correo electrónico de una forma fácil, utilizando un diseño amigable al usuario. 4 e) Nuestra herramienta facilita al usuario cliente que sus mensajes enviados a cualquier destinatario, será respaldado automáticamente en la bandeja de elementos enviados. f) Se permitirá realizar un perfil determinado del buzón de correo por cada usuario o grupo de usuarios, de esta manera se podrá asignar a cada usuario su respectivo tamaño de buzón, dependiendo de las necesidades de los usuarios y de la organización en general. g) Otra gran ventaja es que el usuario administrador es que tendrá facultades de regular el tipo de información que descarguen los usuarios clientes en su buzón de correo, optando por esta política evitaremos el congestionamiento del buzón y optimizaremos el uso del Internet el cual este acorde a las necesidades de la organización que lo utilice. h) La interfaz Horde permite realizar varias actividades como: redactar, listar, ver, eliminar mensajes, así como administrar nuestros contactos, crear filtros en los mensajes, crear carpetas., etc. Las cuales se las detallara a continuación: . Puede guardar todos sus contactos en una amplia libreta de direcciones. . Organiza todas sus actividades en el calendario web. 5 . Guarda sus notas preferidas para recordatorios importantes. . Organiza, clasifica por estado (pendiente o terminada) y hace seguimiento de sus tareas. . Puede cambiar su contraseña de usuario en forma privada cuantas veces quiera. . Se puede crear una lista de correo no deseado, ganando tiempo con lecturas útiles. . Puede reenviar una copia del correo que le llega a una o varias cuentas. . Puede redactar a gusto sus correos en formato de texto puro o html, adjunte cuantos archivos quiera. . Puede organizar sus correos en carpetas personales dentro de su buzón principal, con la función de “filtros”. . Esta herramienta le permite traer a su buzón el correo de otra cuenta para así evitarse entrar y revisar otros buzones. . Puede cerrar correctamente sus sesiones para evitar accesos no autorizados. 1.5. Objetivos del Proyecto Webmail Corporativo 6 a) Acceso a través de un frontal web alojado en un servidor, mediante el uso del protocolo HTTP, el cual es uno de los protocolos mas amigables y confiables que permitirá un acceso libre y directo hacia sus cuentas de correos. b) Cuentas de correo bajo dominio propio como por ejemplo usuario@nombredomino.ec, esto facilitará a las organizaciones tener cuentas de correo para sus usuarios o abonados con el nombre del dominio que mas les convengan a medidas de sus necesidades. c) Número de buzones de correo limitado por el administrador, debido que los recursos que se posee son limitados, por tanto debe de existir una opción que permitirá regular el número de usuarios que cada organización requiera o necesite, según sus funciones laborales, es decir a medida de que la organización lo demande este número de buzones se puede expandir siempre y cuando también sus recursos técnicos lo permitan. d) Buzones de correo de limitado dependiendo de un análisis del administrador del webmail, que nos especifique que usuario en especial deba de tener mayor capacidad de buzón de correo. 7 e) La interfaz será personalizada para el cliente, segura y amigable, el encargado de establecer dichas interfaces será el administrador, según los requerimientos de la organización, es decir el tendrá la responsabilidad de asignarle o modificarle la interfaz que los usuarios podrán observar. f) Se efectuarán copias de seguridad de los buzones de cada usuario cada cierto tiempo para evitar calamidades o inconvenientes en el servidor Webmail y así tener un respaldo de todos los correos de los usuarios de la organización. 1.6. Alcances del Proyecto a) Instalación y configuraciones de la plataforma Linux (Sistema Operativo), cuya distribución es Centos 5. b) Nuestro proyecto estará enfocado a las pequeñas y medianas empresas (PYME) las cuales nuestro proyecto les de flexibilidad de manejo de la comunicación entre sus colaboradores. c) Configuración de una conexión básica de red que permitirá realizar las pruebas necesarias para cada uno de los servicios que se instalarán y configurarán. 8 d) Instalación y configuración de un servidor de base de datos (Mysql), para decirle al Webmail Horde que utilice dicha base de datos como preferencia de los usuarios de dicho Webmail. e) Instalación y configuración del Apache que es un servidor de páginas web. f) Webmail Horde es un Software libre, escrito en PHP, para el desarrollo de aplicaciones corporativas basadas en Web. El Horde se compone de unas librerías que proporcionan funcionalidades básicas (autenticación, gestión de preferencias, interfaz gráfica, etc.) y que funciona como nexo de unión entre distintas aplicaciones de usuario, que son gestionadas como sub-proyectos independientes. g) Configuraciones de los servicios que van a ser prerrequisitos para la utilización del webmail. Los servicios son los siguientes: Mysql Mailscanner Httpd Named Network 9 Sendmail h) Desarrollar una aplicación con una interfaz grafica que permita una mejor administración de las cuentas de correo para que sea esta amigable al usuario final. i) La aplicación será desarrollada en un lenguaje de programación web con código Php utilizando scripts shell de Linux. PHP que es un lenguaje interpretado de páginas web dinámicas incrustado en el HTML. En esta instalación están ligados íntimamente ya que la compilación e instalación que haremos de PHP será de forma estática y no de forma dinámica. j) Nuestro producto presentará un menú de opciones según el usuario que acceda, en caso que ingrese como el administrador tendrá opciones privilegiadas como crear cuentas de usuario, cambiar perfiles, asignar espacios, dar permisos, etc. k) Para la asignación de una cuenta de correo a un determinado usuario se escogerán las siguientes opciones como parámetros del webmail corporativo: 10 Lenguaje o idioma. Umbral del buzón de correo. Colores del fondo de la ventana de navegación. Permisos que tendrá para el acceso al correo. Logotipo o titulo que lo identificará como propietario de esa cuenta. l) Implementar políticas de seguridad usando protocolos de red seguros, los cuales nos permitirán tener un mejor manejo a la seguridad de las cuentas de correo, las cuales podemos detallar las siguientes: 1. Para que un usuario acceda a su cuenta, deberá ingresar un username y password. 2. Establecer estándares en la asignación de username a los usuarios (ej: zmiranda) y en caso de existir coincidencias se lo distinguirá mediante la inicial de su segundo apellido al final de cada username (ej: zmiranda, zmirandac). 3. Recomendar reglas y políticas de navegación que pueden ser usadas de manera que se combinen las características de horarios de copias de seguridad y mantenimiento, bloqueo de dominios no autorizados. 11 m) Se instalará en el servidor un antivirus y antispam Mail Scanner, el cual podrá filtrar el correo no deseado. 1.7. Requerimientos Tecnológicos Para la elaboración, desarrollo e implementación de nuestro proyecto webmail se necesitarán algunos requerimientos tecnológicos básicos tanto en hardware como en software para que funcione correctamente, a continuación serán descritos con mayor amplitud. 1.7.1. Requerimientos Hardware 1 PC como Servidor de correo Linux o Pentium III de 800 Mhz o 256 Mb. de memória RAM o Disco Duro de 60 GB. o Tarjeta de Red de 10/100 Mbps o Dvd Room 2 Pc con Windows XP con Service Pack 2 o Pentium 4 de 2.8 Ghz o 512 de Memoria Ram DDR 12 o Disco Duro de 60 GB. o Tarjeta de Red de 10/100 Mbps o Internet Explorer 6.0 o superior, o en su defecto el Mozilla Firefox 1.5. o superior 1.7.2. Requerimientos Software 1.8. Linux Centos 5.0 Windows XP con Service Pack 2 Internet Explorer 6.0 o Superior Aplicativo de correo Horde 2.2 Base de Datos MySQL MailScanner Antivirus Clamav Requerimientos Humanos Para el análisis, diseño, desarrollo y pruebas del proyecto en cuanto a los requerimientos humanos estará conformado por los integrantes del grupo # 7 del tópico Linux del seminario de Graduación y los cuales forman parte del grupo de desarrollo del proyecto y se los detallara a continuación: 13 Raúl Andrés Jaramillo Ordóñez Zaida Yadira Miranda Castro Luís Eduardo Erazo Córdova Existe también el grupo de usuarios finales que estará conformado por los usuarios que manejaran la aplicación que serán alumnos, profesores de la carrera o cualquier empresa que se interesen por utilizar el servicio de webmail corporativo por medio de la Internet. 1.9. Metodología La metodología utilizada para el desarrollo de nuestro proyecto webmail corporativo es el Orientado a Objetos, el cual lo realizaremos de la siguiente forma: Investigación En esta etapa realizaremos la recolección de toda la información investigada para con ella empezar a recopilar conocimientos que nos ayudara a un mejor entendimiento de lo que se quiere alcanzar en el proyecto. 14 Análisis Luego de haber adquirido conocimiento del tema, procedimos a analizar cada uno de nuestros objetivos para así realizar los diagramas de los cuales vamos a hacer uso: Análisis de los estados que tienen los objetos. Análisis del comportamiento de los objetos. Análisis de las Interfaces. Análisis de los requerimientos de usuario. Diseño A base de nuestro análisis efectuado anteriormente procederemos al diseño de lo que será nuestro proyecto Diagrama básico del Webmail Corporativo. Diagrama de casos de uso. Diseño de las interfaces. Relación de los objetos. Diagrama de clases. Diagrama de Secuencia. 15 1.10. Modelo de Desarrollo Para la elaboración de nuestro proyecto seleccionamos el modelo de desarrollo del software “Espiral” ya que una de las propiedades esenciales de este modelo es su flexibilidad la cual permite realizar modificaciones en cualquier etapa del proyecto en que nos encontremos, también permite la creación de prototipos a medida que avanzamos en las diferentes fases del desarrollo de nuestro proyecto. Este modelo se caracteriza por ser evolutivo ya que se desarrolla en una serie de versiones incrementales Durante las primeras interacciones, esto puede ser un prototipo. El modelo en espiral nos permite realizar las siguientes actividades: Determinar o fijar objetivos Fijar los requerimientos definidos a obtener, especificación, manual de usuario. Fijar las restricciones. Identificación de riesgos del proyecto y estrategias alternativas para evitarlos. 16 Hay una cosa que solo se hace una vez: planificación inicial o previa. Análisis del riesgo El análisis del riesgo se hace de forma explícita. Debido a que cada proyecto es único, no existe un Modelo que se aplique al 100 %, pero en nuestro caso en particular el modelo que mas se adapta a nuestros requerimientos es el modelo Espiral. Desarrollar, verificar y validar (probar) Tareas de la actividad propia y se prueba. Análisis de alternativas e identificaron de resoluciones de riesgos. Planificar 17 Revisamos todo lo hecho, evaluándolo, y con ello decidimos si continuamos con las fases siguientes y planificamos la próxima actividad. En la figura 1.1 se muestra el modelo espiral donde se observa las fases que se dieron a lo largo del proyecto. Figura 1.1 Modelo en Espiral 1.11. Cronograma 18 Anexo 1.1 1.12. Funcionalidad General del Proyecto En el Anexo 1.2 encontrará la descripción de la información que requiere el sistema antes de la ejecución de los procesos. 1.13. Análisis F.O.D.A. Según el análisis de nuestro proyecto podemos resaltar las fortalezas, oportunidades, debilidades y amenazas las cuales las detallaremos a continuación: 1.13.1. Fortaleza Con el uso de nuestro producto lograremos reducir costos ya que no necesitamos adquirir varios equipos para que los usuarios puedan revisar sus correos. 19 No necesitamos estar físicamente dentro de un lugar específico para poder acceder a nuestra herramienta, la movilidad en la actualidad es muy vital y necesaria en todas las organizaciones por que también nos ahorra espacio y tiempo en todo momento. 1.13.2. Oportunidad Con esta herramienta podremos abrir mercados a nivel internacional una vez que nos podamos consolidar en el ámbito local. Nuestro producto puede evolucionar dando más servicios, que van de la mano con los requerimientos nuevos que nuestros usuarios deseen que se les implemente. 1.13.3. Debilidades Un manejo indebido por parte del administrador, para esto se deben definir parámetros y normas específicas para que el administrador cumpla con sus funciones de manera correcta y adecuada. El incumplimiento de las normas de seguridad que se deberán implementar en nuestro producto, para evitar futuros inconvenientes por partes de los usuarios. 20 1.13.4. Amenazas Probablemente podemos ser victimas de ataque por algún intruso, para esto se deberá regular normas de seguridad adecuadas, así como también reglas de firewall en el servidor de correo y también en la red de la organización. Nuestro producto puede ser atacado por virus, debido a que los usuarios tengan el acceso a diferentes sitios no seguros en la red de la Internet, por lo tanto en las maquinas del servidor de correo así como también de las demás maquinas se deberá implementar un buen programa de antispam como de antivirus. CAPITULO 2 21 2. ANALISIS DEL PROYECTO 2.1. Análisis Funcionamiento del Webmail Webmail es un cliente de correo que permite leer el correo sin tener que instalar ningún cliente y se puede acceder a el desde cualquier ordenador con conexión a Internet Para conectarse hemos de tener dos elementos indispensables: . El nombre de usuario. . La contraseña. Se puede acceder desde el navegador de la siguiente forma: http:\\nombre_usuario@dominio.com En el nombre de usuario se pondrá la inicial del primer nombre y luego el apellido, después va el arroba y el nombre del dominio. El servidor webmail será manejado por un administrador que designará una cuenta de correo a cada usuario nuevo, dependiendo de este le dará 22 permisos, también determinará el uso del buzón y demás parámetros según tipo de usuario. El usuario final podrá acceder a su cuenta de correo por medio de su username y contraseña establecida y podrá realizar las siguientes acciones según permisos adquiridos: . Enviar correos a cuentas de otros dominios . Recibir correos a otras cuentas de correo . Guardar todos sus contactos en una libreta de direcciones . Reenviar una copia de correo que le llegue . Cambiar su contraseña privada cuantas veces quiera . Configurar sus preferencias a gusto . Organizar sus correos es carpetas personales . Cerrar la sesión Configuraciones del Administrador 23 Para que el administrador configure una nueva cuenta de correo necesitara de ciertos parámetros u/o datos: Nombre de usuario Es el nombre que se le asignará para activar la cuenta de correo. Nombre de dominio Este nombre dependerá de la empresa que vaya a brindar dicho servicio. Nombre de la persona que utilizara la cuenta Es el nombre completo junto con apellidos de la persona que utilizara la cuenta asignada. Logotipo de la empresa Para este caso será un logotipo que se diseñará para una empresa. Asignación de un usuario y contraseña 24 Se le asignará un nombre de usuario y la respectiva contraseña para que este pueda acceder. Determinar el umbral del uso del buzón Dependiendo de los requerimientos del usuario para dicha cuenta se le determinara un límite para su buzón. Permisos para cada usuario Son los que se le permitirá al usuario realizar en su cuenta de correo, será manejado por el administrador según lo necesite. 2.1.1 Esquema Básico del Funcionamiento del Webmail En la figura 2.1 se mostrara una breve descripción Básica de cómo es el funcionamiento del Webmail, donde el usuario se conecta a través del Internet mediante un username y password y entra en el servidor 25 de correo principal en los cuales también estará las copias de seguridad y los filtros de correo no deseado e infectado. Figura 2.1 Esquema Básico del Webmail 2.2. Análisis Orientado a Objetos Con el análisis orientado a objetos la forma de modelar la realidad difiere del análisis convencional. Modelando el mundo en términos de tipos de objetos y lo que ocurre a estos. Los modelos O.O. que construimos en el análisis reflejan la realidad de modo más natural que las del análisis tradicional de sistemas. Después de todo, la realidad consta de objetos y eventos que cambian el estado de dichos 26 objetos. Mediante las técnicas O.O. construimos software que modela más fielmente el mundo real. Cuando el mundo real cambia, nuestro software es mas fácil de cambiar, lo que es una ventaja real. Quisiéramos capturar el punto de vista de los usuarios con respecto al mundo y traducirlo en software de la manera mas automática cuando cambien las necesidades de los usuarios, el software cambia con ellas. 2.2.1. Análisis de la estructura de objetos (AEO) En esta parte definiremos las categorías de los objetos que percibimos y las formas en que los asociamos. Nuestro sistema de webmail lo presentaremos dentro de los siguientes diagramas que definen su estructura: 2.2.2. Diagrama de casos de uso En el Anexo 2.1 se encuentra el diagrama modela el sistema desde el punto de vista del usuario final, modelando una descripción clara y sin ambigüedades de como él interactúa con el sistema. 27 En el Anexo 2.2 observaremos de una manera general como el administrador y el usuario interactúan con el servidor para la administración del webmail. 2.2.3. Diagrama de Tipos de Objetos Los tipos de objetos son importantes puesto que nos ayudaran a cesar los bloques conceptuales que nos ayudara a la construcción del diseño para poder realizar las respectivas configuraciones y desarrollo del sistema webmail que será manejado por el administrador. Los esquemas de objetos nos ayudaran en la definición de clases y estructuras de datos. También es importante modelar la forma como los objetos se asocian entre si. En este análisis es útil nombrara la cantidad de objetos de determinado tipo que se debe asociar con los objetos de otro tipo, para aumentar la comprensión de las asociaciones. En el Anexo 2.3 se detalla el Diagrama de Tipos de Objetos (Administrador), en la cual dicho grafico nos permite visualizar de una 28 manera mas detallada las diferentes opciones que el administrador del webmail tendría al usar nuestro producto. En el Anexo 2.4 se detalla el Diagrama de Tipos de Objetos (Usuario Final) en el cual en este grafico podemos observar todas las actividades que los usuarios tendrán al utilizar nuestra herramienta que estamos desarrollando. 2.2.4. Diagrama de relación entre los objetos Se encuentra la relación que existe entre tipos de objetos con otros tipos de objetos. En el Anexo 2.5 se puede apreciar el Diagrama de relación entre los objetos para el Administrador, en el cual nos describe las diferentes relaciones que tiene el administrador con las diferentes actividades de nuestra herramienta. En el anexo 2.6 se describirá el Diagrama de relación entre los objetos para el Usuario, la grafica nos detalla que información requiere nuestra herramienta necesita del usuario para realizar los procesos que se le tenga autorizado al usuario. 29 2.2.5. Análisis del Comportamiento de Objetos (ACO) En esta parte del análisis mostraremos los eventos, las expresiones en que estos ocurren y como los eventos cambian el estado de los objetos. Así los esquemas de eventos se deben expresar en términos de esquemas de objetos puesto que los eventos cambian el estado de determinados tipos de objetos En el análisis del comportamiento de objetos de nuestro sistema identificaremos los siguientes diagramas y esquemas: 2.2.6. Diagrama de eventos Un evento es un cambio en el estado de un objeto. Es necesario saber de los cambios de estado, notar que ocurren, para ello los eventos sirven como indicadores de los instantes en que ocurren los cambios. El analista no necesita conocer cada evento que ocurra, tan solo los tipos de eventos y de las instancias de tipos de eventos. Anexo 2.7 30 2.2.7. Diagrama de Flujo de Objetos En este diagrama mostraremos como se forman los objetos y la relación entre ellos a medida que se presentan cambios en el desarrollo del proyecto. Muestra la secuencia que va a seguir hasta llegar a concluir con el objetivo final requerido. En el Anexo 2.8 se detalla el diagrama el cual nos indica paso a paso la administración de las opciones y accesos que nuestro usuario tendrá al usar nuestra herramienta, todas estas opciones y permisos será proporcionada por el administrador. En el Anexo 2.9 en esta ocasión detallaremos gráficamente las opciones que tendrá el usuario final al momento de trabajar con nuestro producto. 31 CAPITULO 3 3. DISEÑO DEL PROYECTO 3.1. Diseño de la Estructura y Comportamiento de Objetos (DEO) Las clases.- Los tipos de objetos en el AEO serán la guía en esta decisión. Las estructuras de datos.- Se puede hacer un diagrama para representar la estructura de datos. Las operaciones y los métodos de cada clase.- Se enumeran las operaciones y se especifiquen sus métodos en determinado momento. 3.2. Diseño Orientado a Objetos 32 3.2.1. Diagrama de clases Los diagramas de clases se utilizan para modelar la vista de diseño estática de un sistema. Estos diagramas son los más importantes del diseño orientado a objetos, son la piedra angular de nuestro diseño. Contienen toda la información de todas las clases y sus relaciones con otras clases. En el momento de hacer el primer diagrama de clases ya se tiene una lista de clases con algunos de sus atributos y operaciones. 3.2.2. Diagrama de Objetos Muestra un conjunto de objetos y sus relaciones, los diagramas de objetos representan instancias de los elementos encontrados en los diagramas de clases. 33 Estos diagramas cubren la vista de diseño estática o la vista de procesos estática de un sistema como lo hacen los diagramas de clases, pero desde la perspectiva de casos reales o prototipos Muestran una especie de fotograma de un instante en tiempo de ejecución. Anexo 3.1 3.2.3. Diagrama de actividades Los diagramas de actividades muestran el flujo de actividades, una actividad produce finalmente una acción. Un diagrama de actividad contiene: Estados de actividad Transiciones Objetos Restricciones Los diagramas que muestra los Anexos 3.2 y Anexo 3.3 describen lo siguiente: 34 De una manera general las actividades que van a ser realizadas por el administrador. También muestra las actividades a realizar del usuario que va a utilizar la cuenta de correo creada primeramente por el administrador. CAPÍTULO 4 4. DESARROLLO Y PRUEBAS DEL SISTEMA 4.1. Desarrollo del sistema 35 En primera instancia se procedió con la creación de la Base de Datos dicha Base de Datos esta creada en Mysql. La selección de esta base de datos se debió a que el uso de la misma es de tipo Open Source, como todo el resto del proyecto. Pero se deja la puerta abierta para que el posibilidad de uso de cualquier otra Base de Datos que se desee. 4.2. Creación de los componentes Una vez culminada la etapa de levantamiento de datos y del análisis de factibilidad del proyecto se procedió a la creación de los componentes para la cual se utilizó la metodología de módulos, tomando como referencia el modelo de desarrollo en espiral, ya que al culminar un módulo se inicia otro, o en el caso que se requiera también se los puede trabajar en paralelo. El orden de desarrollo se detalla a continuación: Análisis de datos. Desarrollo Implementación 36 Pruebas 4.3. Seguridades En lo que concierne a las seguridades del sistema están enmarcadas en políticas de uso, ya que se trata de un programa tipo invasivo, el cual si es reprogramado con diferentes objetivos para los que fue creado, puede llegar a causar mucho daño en mi entorno de red. Por lo tanto, se debe tener presente el mantener la integridad y seguridad de la información, la cual es una de las partes más sensibles y delicadas que tiene toda organización. Los aspectos de seguridad están marcados bajo los siguientes parámetros: Sistema operativo Base de Datos Ejecución de políticas. Respaldos de la información. Humano 37 4.3.1. Sistema operativo Uno de los graves problemas que se detecto es que corremos el riesgo en que nuestra herramienta pueda ser manipulado por personal no autorizado y empiece a causar daño. Por lo que su operación inicialmente esta limitada a sistemas operativos Linux CentOS 5, solo personas con amplio conocimiento de dicho sistema operativo y de diversas distribuciones de sistemas operativos Unix, tendrán la capacidad de modificar el código original para que pueda trabajar en diversos ambientes. Además, cada sistema operativo maneja sus niveles de seguridad, y si no se cumplen las condiciones para que el programa pueda trabajar, el ataque será infructuoso. Todos los equipos como medida imperativa de seguridad, deberán tener restringido el acceso a carpetas y archivos críticos del sistema. Ya que el programa podría ser usado para extraer algo mas que los archivos de los passwords. Hay que tener mucha precaución con esto, de esta manera podemos prevenir ataques dirigidos hacia la información de nuestra organización. 38 4.3.2. Base de Datos Los registros del análisis, especialmente las claves descifradas, se guardarán en la base de datos, a la cual solo tendrá acceso el encargado de manejar o administrar esta herramienta, la misma puede ser acezada físicamente por medio de un usuario y clave, definidos en la creación de la misma. 4.3.3. Humano Uno de los aspectos mas importantes es el Humano, es seguramente el mas difícil de controlar. Uno de los riesgos que mas se les debe tener presente durante la elaboración de un sistema es que el programa caiga en posesión de personas no autorizadas o que la contraseña del mismo sea divulgada, con esto todo las políticas de seguridad no cumplirán el objetivo para las cuales fueron creadas. Se tendrá especial cuidado con los puntos arriba mencionados, ya que la herramienta puede ser modificado fácilmente por personal que tengan los conocimientos suficientes, para alterar 39 el objetivo de la misma y causar perjuicios a la organización que adquiera esta producto. 4.4. Pruebas del sistema Las pruebas del sistema es un mecanismo que nos servirá verificar el optimo funcionamiento de nuestro producto, en este sistema se procedio ha realizar múltiples tipos de pruebas entre las que podemos resaltar encontramos las siguientes: Verificación y validación Pruebas de envío y recepción. Pruebas de creación y modificación. Pruebas de respaldos. Pruebas de seguridad. Calidad del sistema. 40 4.4.1. Verificación y validación Estos dos puntos van ligados, ya que el tipo de prueba y analiza que no existan errores en la implementación, y la validación analiza que lo que se define en las especificaciones iniciales guarde relación con lo desarrollado. Se realizaron este tipo de pruebas, en especial con los datos que ingresan al sistema, y se comprobó todos los posibles errores de ingreso que se pudieran dar, corrigiendo con codificación extra en todos los casos. Se verificó que el sistema realice las operaciones de auditoria para las cuales fue diseñado. El código original entregado solo realiza este tipo de operación, y no va mas allá de lo que se propuso inicialmente, por motivos de seguridad, se anularon líneas “peligrosas” en los scripts de auditoria, las cuales podían causar grandes problemas si el programa cae en manos de personas ajenas al entorno de la empresa. 41 4.4.2. Pruebas de envío y recepción En este tipo de pruebas, se evalúa el desempeño de cada módulo de manera independiente, y forma parte del tipo de pruebas de la caja blanca, es decir analizan procesos de cada modulo, para probar coherencias. Al momento de realizar esta prueba se la efectuó enviando correos hacia varios usuarios, también se le solicito una notificación de la entrega del correo, de esta manera observamos que un objetivo muy importante estaba funcionando de manera optima. 4.4.3. Pruebas de creación y modificación En lo que concierne a la creación y modificación de usuarios o grupos llama la atención la facilidad y eficiencia de esta herramienta al realizar esta labor. Se comprobó que el administrador de correo antes de crear un usuario tendrá que crear un grupo al que este usuario este ligado caso contrario no podrá efectuar la creación de usuario. 42 4.4.4. Pruebas de respaldos En nuestra herramienta que desarrollamos permite al usuario administrador de correo realizar respaldos de todas las cuentas de correo cada cierto espacio de tiempo, esto depende directamente de las políticas de seguridad y de la capacidad del hardware que la empresa disponga para este trabajo. 4.4.5. Pruebas de Seguridad Una de las pruebas mas importantes fue la de seguridad, ya que se verificó que con facilidad, modificando los scripts del sistema, y añadiendo archivos maliciosos, se puede lograr mucho más que solo extraer los archivos de los passwords de forma remota. Por lo que se vuelve imperativo adiestrar a los usuarios con consejos de seguridad. Revisar periódicamente los logs que genera el sistema operativo, para comprobar que no se ha hecho algo aparte de extraer archivos con el fin de auditarlos, ver si no se ha realizado algún tipo de ataque adicional a lo que realiza el programa. 43 Otra forma de prevenir ataques de terceras personas es controlar el acceso a los recursos y carpetas del sistema, bloquear accesos, verificar el acceso a puertos, mantener reglas de firewall actualizadas, es un buen comienzo para mantener un nivel de seguridad aceptable. Concienciar a los usuarios sobre el uso y manejo del programa, ya que siendo de uso limitado a personas de nivel superior, no está demás aplicar normas de moral y ética con respecto a los administradores del sistema, para que ellos no incurran en algún momento en un mal uso del mismo. 4.5. Calidad del Sistema La calidad puede ser medida en varios aspectos, se puede decir con certeza que es de óptima calidad, cumple con todos los requerimientos establecidos por los usuarios, pero nos vemos un poco limitados en poner solo lo necesario y restringir algún código malicioso, con el fin de no dar un mal uso de la herramienta. 4.6. Modelo de datos 44 En el proceso de abstracción que conduce a la creación de una base de datos desempeña una función prioritaria el modelo de datos. El modelo de datos como abstracción del universo de discurso, es el enfoque utilizado para la representación de las entidades y sus características dentro de la base de datos. Los objetivos del modelo de datos son dos: Formalización: definir formalmente las estructuras permitidas y las restricciones a fin de representar los datos de un SI. Diseño: el modelo resultante es un elemento básico para el desarrollo de la metodología de diseño de la base de datos. Los diferentes modelos de datos comparten aunque con diferentes nombres y notaciones unos elementos comunes, componentes básicos de la representación de la realidad que realizan. Estos componentes se identifican gracias a la clasificación y pueden identificarse conceptos estáticos y conceptos dinámicos. 4.6.1. Modelo de Datos Orientado a Objetos 45 La importancia de la orientación a objeto recorta el tiempo que toma a obtener resultados temporales. La orientación a objetos permite la forma más simple en el manejo de los datos tanto para el diseño relacional como la elaboración de interfaz entre los diversos lenguajes orientados a objetos de base de datos. 46 CAPITULO 5 RECOMENDACIONES Y CONCLUSIONES DEL PROYECTO 5.1. Recomendaciones Luego de que la herramienta que desarrollo nuestro grupo sea sometida a estrictos controles de calidad se llego a la conclusión que el margen de error es bajo y las probabilidades que nuestra herramienta tenga algún tipo de inconveniente en los objetivos y alcances para el que fue creado es aceptable. 47 Lo que se recomienda hacer en principio es leer detenidamente los manuales de usuario, y para conocimientos avanzados, el manual técnico suministrado en este proyecto. Haremos entonces una revisión rápida de lo mínimo que necesitamos para que nuestro software funcione de manera óptima. 5.1.1. Hardware Los datos suministrados aquí son los requerimientos de hardware mínimos que necesita el sistema para su funcionamiento. Se detallan a continuación: 1 PC como Servidor de correo Linux o Pentium III de 800 Mhz o 256 Mb. de memória RAM o Disco Duro de 60 GB. o Tarjeta de Red de 10/100 Mbps o Dvd Room 2 Pc con Windows XP con Service Pack 2 o Pentium 4 de 2.8 Ghz o 512 de Memoria Ram DDR 48 o Disco Duro de 60 GB. o Tarjeta de Red de 10/100 Mbps o Internet Explorer 6.0 o superior, o en su defecto el Mozilla Firefox 1.5. o superior 5.1.2. Software Se usará el siguiente software para el desarrollo y operación del proyecto: Linux Centos 5.0 Windows XP con Service Pack 2 Internet Explorer 6.0 o Superior Aplicativo de correo Horde 2.2 Base de Datos MySQL MailScanner Antivirus Clamav 49 5.1.3. Puesta en marcha Nuestro producto fue desarrollado con la finalidad de facilitar la administración de correo en las empresas pequeñas y medianas (PYMES), una vez que nuestro producto se implemente en la empresa que lo requiera se podrá observar la flexibilidad del mismo, debido a que con esta herramienta permite realizar un control eficiente de los recursos de la organización. En el desarrollo de nuestra herramienta también se pudo constatar que el usuario final al usar nuestro producto le permite facilidad de acceso lo cual la empresa que lo adquiera experimentara un ahorro considerable sobre todo al personal que necesitaba que constantemente este en movimiento y normalmente tenía que adquirir equipos sofisticados y costosos para que de esta manera tener la movilidad que nuestro producto proporciona pero con la diferencia que nuestro producto tiene un bajo costo de operatividad. También se llego a la conclusión que nuestro producto tiene características muy importantes que debe tener toda herramienta y esta es la estabilidad operativa la cual llena las expectativas de todo aquel usuario que uso nuestro producto ya en el campo laboral. 50 Otro aspecto importante que cabe señalar en este breve resumen es el comportamiento de nuestra herramienta a medida de que el número de usuarios aumentaba y se comprobó que su comportamiento continuaba estable y no se observaba algún decaimiento en su rendimiento. Todas las pruebas a las que fue sometido nuestro aplicativo los paso de una manera apropiada lo cual garantiza a la persona o empresa que adquiera nuestro producto la confiabilidad necesaria para ponerlo en producción lo más pronto posible. 5.1.4. Seguridades Las diferentes funcionalidades de las cuales se caracteriza nuestro proyecto hacen que nuestro producto sea realmente una herramienta muy útil proporcionando estabilidad y confiabilidad a sus usuarios finales como al usuario que ingrese como administrador al observar detalladamente los perfiles tanto del usuario final como del administrador brinda una interfaz amigable fácil de aprender y manipular. 51 La confidencialidad de la información es otra de las propiedades importantes que podemos señalar de nuestro producto debido a que se detecto de esta necesidad en el estudio que se realizo previamente a la sección de mercado a la que está dirigido esta herramienta, la portabilidad y disponibilidad de la información son aspectos que toda empresa o usuario final desea ya que le permite acceder desde cualquier sitio geográfico y con recursos mínimos como es un ordenador que tenga acceso a internet, esta portabilidad de la información va de la mano con la seguridad de la misma debido a que los usuarios finales pueden acceder a la bandeja de entrada la cual recepta toda la información que intercambia con sus contactos los cuales pueden ser de la misma organización o contactos externos y la información que reposa en la bandeja de entrada está segura ya que el usuario final tiene la potestad debido a la necesidad que este tenga en descargar o no en el computador en el que esté utilizando en ese momento la información que tenga almacenada en su buzón de correo. La seguridad es otro punto importante que vale la pena mencionar ya que nuestro producto desde su inicio se considero la seguridad un aspecto primordial para brindar a nuestros clientes la confianza 52 necesaria para que este a su vez adquiera nuestra herramienta y la ponga en operatividad. Para lograr este objetivo se establecieron ciertas políticas de seguridad como los que vamos a mencionar a continuación: 1. Respaldar el buzón de correo en un periodo de tiempo en que el administrador de correo o la necesidad de la organización lo crea conveniente en función de sus actividades regulares. 2. Cambio de contraseña en la cual el aplicativo le indicara al usuario que cambie de clave según la frecuencia la cual está definida por el administrador de correo. 3. Para evitar el envío de archivos los cuales pueden contener algún tipo de contenido peligroso o no permitido por la organización que lo adquiera, el administrador tendrá la potestad de indicar que tipo de archivos se descargue en el buzón de correo. 4. La implementación de un antivirus el cual realizara una inspección del contenido de la información o los datos que estén dirigidos a los usuarios finales. 53 GLOSARIO DE TÉRMINOS 54 Esta sección del documento ofrece un breve resumen de los significados de ciertos términos técnicos en orden alfabético. A Ataque.- Agresión al sistema por parte de un pirata informático con algún propósito específico. Auditoria.- Proceso de revisión del sistema para comprobar la seguridad de las claves. Abuso de privilegio.- Persona que tiene privilegios de acceso hace mal uso de los mismos generando un ataque al sistema. Autenticación.- Verificación de que el cliente sea quien dice ser para lograr acceso al sistema. B Base de Datos.- Guarda los datos del sistema. Backup.- Respaldo de información del sistema. C Cracker.- Pirata informático que busca acceder al sistema para causar daño. Código Fuente.- Lenguaje mediante el cual fue programado el sistema. Conexión.- Comunicación entre varias maquinas. 55 E Eth0.- Interfaz de red en Linux F Firewall.- Conjunto de políticas de seguridad de acceso a computadoras. Freeware.- Software gratuito. G GUI.- Interfaces gráficas de usuario. H Hackers.- Pirata informático que busca acceder a sistemas por diversión sin causar perjuicio. Hardware.- Parte física de una PC. Hub.- Elemento físico de conexión en red. I ICMP.- ( Internet Control Message Protocol ) protocolo de control de mensajes de internet IP.- Identificador único que distingue una computadora de otra. Interfaz.- Medio grafico de comunicación entre la PC y el usuario. 56 L LAN.- Red de área local. Logs.- Archivos temporales, respaldo. M Maquina Virtual.- Software que permite la simulación de un computador. MYSQL.- Software para crear una base de dato. Multiplataforma.- Se puede trabajar sobre diferentes sistemas operativos sin que afecte su desempeño. O Open Source. - Tecnología libre de distribución por la cual no se necesita licencia. P Passwords.- Contraseña de acceso al sistema. Paquetes.- Segmento de datos que se transmite de un lugar a otro. Parámetros.- Datos que se envía a una función para que cumpla con su propósito. Periféricos.- Medios físicos del computador. Políticas de Seguridad.- Conjunto de normas y reglas para mantener seguro un sistema. 57 Protocolos. – Implementación de la lógica de una capa del modelo OSI. R Red.- Conjunto de maquinas que se comunican entre si. Root.- Directorio raíz. S Servidor.- Equipo de computo, el cual esta recibiendo constante peticiones de clientes para proveerle de algún servicio. Software.- Programas en ejecución. Sniffers.- Programa espía que lee todos los paquetes que viajan por la red. Scripts. - Conjunto de líneas de códigos que permiten la ejecución de una tarea en particular. Switch.- Dispositivo de interconexión de redes de computadoras que opera en la capa 2 del modelo OSI, este interconecta dos o más segmentos de red. T Telnet.- Servicio que permite abrir una interfaz de comunicación. ANEXOS Anexo 1.1 Cronograma de actividades Anexo 1.2 Funcionalidad general del proyecto Anexo 2.1 Casos de uso del usuario final Anexo 2.2 Casos de uso del usuario administrador Anexo 2.3 Casos de uso del usuario administrador Sas Anexo 2.4 Casos de uso del usuario final Anexo 2.5 Diagrama de relación entre los objetos para el Administrador Anexo 2.6 Diagrama de relación entre los objetos para el Usuario Anexo 2.7 Diagrama de Flujo de Objetos del Administrador Anexo 2.8 Diagrama de Flujo de Objetos del Usuario Anexo 3.1 Diagrama de Objetos Anexo 3.2 Diagrama de Actividades del Administrador Anexo 3.3 Diagrama de Actividades del Usuario UNIVERSIDAD DE GUAYAQUIL Facultad de Ciencias Matemáticas y Físicas Carrera de Ingeniería en Sistemas Computacionales “Webmail Corporativo” TESIS DE GRADO Previo a la Obtención del Título de: INGENIERO EN SISTEMAS COMPUTACIONALES Autores: Erazo Córdova Luis Eduardo Jaramillo Ordóñez Raúl Andrés Miranda Castro Zaida Yadira GUAYAQUIL-ECUADOR Año: 2008 AGRADECIMIENTO Quedaremos eternamente agradecidos primeramente a Dios por la sabiduría que nos dio. Agradecemos a nuestros padres por su apoyo incondicional y a todas las personas que nos brindaron su respaldo durante la elaboración de nuestro proyecto y creyeron en nuestra capacidad de lograr nuestros objetivos. DEDICATORIA El desarrollo de este proyecto así como la sustentación del mismo lo dedicamos primeramente a Dios que nos dio la sabiduría para poder afrontar todos lo problemas que se nos presentaron. También lo dedicamos a nuestros padres que por su apoyo incondicional hemos podido realizar la culminación de nuestro proyecto de tesis. TRIBUNAL DE GRADUACIÓN Presidente del Tribunal Segundo Vocal Primer Vocal Secretario DECLARACIÓN EXPRESA “La autoría de la tesis de grado corresponde exclusivamente al suscrito(s), perteneciendo a la Universidad de Guayaquil los derechos que generen la aplicación de la misma”. (Reglamento de Graduación de la Carrera de Ingeniería en sistemas Computacionales, Art. 26) ______________________ Erazo Córdova Luis Eduardo C.I. 0920317161 _______________________ Miranda Castro Zaida Yadira C.I. 0922663729 _________________________ Jaramillo Ordóñez Raúl Andrés C.I. 0923068852 RESUMEN El wizard que permite administrar el Web mail Horde (Syscomsa) fue elaborado con la finalidad de reducir costos de operatividad a la persona u organización que la adquiera. La herramienta utilizada de Webmail Corporativo llamada “Horde” fue desarrollada para administrar mensajes desde cualquier ordenador sin que los mensajes se descargan por lo que no consume espacio en nuestro ordenador. Además este sistema radica en que no es necesario realizar ninguna configuración en ningún cliente de correo. Puede accederse al correo desde cualquier emplazamiento solo se necesita que exista una máquina con acceso a un navegador. La aplicación que hemos desarrollado es para poder administrar esta herramienta de una forma mas amigable al usuario accediendo al servidor desde cualquier ordenador con acceso a Internet y desde ahí poder efectuar las configuraciones del mismo para la administración de cuentas de correo y sus parámetros. INDICE GENERAL AGRADECIMIENTO DEDICATORIA TRIBUNAL DE GRADUACIÓN DECLARACIÓN EXPRESA V RESUMEN INDICE GENERAL II III IV VI VII CAPITULO 1 1.1. Introduccion. 1.2. Requerimientos. 1.2.1. Requerimientos Software. 1.2.2. Requerimientos Hardware. 1.3. Panel Web Dominio. 1.3.1. Configuraciones del Servidor. 1 2 2 2 3 3 1.3.1.1. Configuración De La Interfaz De Red. Configuración De Dominio. 1.4. Panel Web Administración. 1.4.1. Administración De Usuarios. 1.4.2. Administración De Cuentas. 1.4.3. Administración De Interfaz. Copias De Seguridad. 1.5. Mensajes De Error. 1.6. Sesión Del Webmail Horde. 3 8 9 10 18 23 28 30 33 CAPITULO 2 Introducción. Funcionamiento. Servicios que deben de estar activos. Configuraciones. Configuraciones del dominio. Configuraciones de parámetros de cuentas. Direcciones. Codificación del proyecto. Scripts del proyecto. 37 38 39 40 40 48 52 54 54 Sección administración interfaz. 54 Sección administración cuenta. 60 2.3.1.3. Sección administración de usuarios. 2.3.1.4. Sección administración de correos. 2.3.1.5. Sección administración de seguridades. 2.4. Código PHP del proyecto. 2.4.1. Sección administración de interfaz. 2.4.2. Sección administración de cuenta. 2.4.3. Sección administración de usuarios. 2.4.4. Sección administración de seguridades. 2.4.5. Sección administración de correos. 63 65 72 74 74 92 110 145 156 CAPITULO 1 MANUAL DE USUARIO Introducción Webmail es un sistema de correo basada en una plataforma web el cual permitirá verificar los mensajes de correo electrónico utilizando un navegador a su elección. La aplicación desarrollada ofrece excelentes opciones para administrar un sistema de correo. Dentro de los servicios que podemos administrar con esta herramienta son los DNS que es la de dominio, podemos crear un dominio propio de nuestra empresa. Para esto la aplicación consta de dos paneles, el primero es un wizard para crear un dominio inicial. Dicho dominio va a ser el que utilice de ahí en adelante la empresa para la asignación de cuotas a los usuarios. El segundo es para la creación de las cuentas de correo y la administración de las mismas tales como modificación de contraseñas, copias de seguridad, umbral de buzones de correo, capacidad de archivos adjuntos. Para poder crear cuentas de correo a los usuarios se debe en primera instancia configurar el dominio que va a utilizar la organización para la asignación de cuotas para que los usuarios puedan enviar y recibir correo a nivel organizacional. 1.2. Requerimientos Requerimiento Software La principal herramienta de software que necesitará la computadora en donde se vaya a administrar la aplicación es un navegador web a su elección. Requerimiento Hardware En lo que a hardware se refiere lo que necesitamos es una PC con características básicas, y con una tarjeta de red que les permitirá navegar y acceder al servidor de correo. 1.3. Panel Web Dominio Para conectarse hemos de tener dos elementos indispensables: El nombre de usuario. La contraseña. 1.3.1. Configuraciones Del Servidor 2 1.3.1.1. Configuración De La Interfaz De Red Para poder ingresar y poder configurar el propio dominio de su empresa, realice los siguientes pasos: Incorpore la dirección en su browser. La dirección debe estar en la siguiente forma ᄉ https://www.syscomsa.com/sw_syscomsa/ᄉ Este es el dominio creado inicialmente por nuestra empresa, pero al utilizar la herramienta usted podrá configurar un nuevo dominio de la empresa en la que labore. Aquí se realizarán las configuraciones necesarias para la creación del dominio de su organización. Luego le aparecerá un cuadro donde debe incorporar su nombre y contraseña del usuario en los campos correspondientes. Se muestra en la figura 1.1 El usuario y la contraseña le serán asignados por el diseñador del proyecto. Haga clic en "Aceptar" y enseguida la aplicación le dará la bienvenida mediante la siguiente pantalla: Figura 1.1 Luego haga clic en la opción “Administración de Servidor de Correo” le aparecerá una nueva opción que dice “Configuraciones de Red”, seleccionar esa opción y da clic sobre la misma, como se lo muestra a continuación: Clic Figura Figura 1.2 1.3 3 Luego usted accederá al wizard que le ayudará en las configuraciones de la red. Esta es la ventana que se mostrará en donde se debe ingresar los datos solicitados que son la IP que se le asignará al servidor y la mascara por defecto. Se muestra en la Figura 1.4 IP del Servidor ( Aquí debemos ingresar la IP que le será asignada al servidor de correo, esta debe ser una de la red que maneja la empresa y que no está asignada a ninguna estación. Ej. Si la red de su empresa es 192.168.2.0, debe asignar una IP de dicha red a su servidor (192.168.2.1). Mascara de la Red (Figura La mascara 1.4 recomendada para su red debe ser de Clase C, es la por defecto 255.255.255.0. Luego damos click en la opcion siguiente e ingresamos los datos que le piden: Hasta ahora hemos ingresado los datos necesarios para la configuracion de la interfaz de red que es aquella que nos permitirá el acceso al servidor de correo por medio de la red interna. Figura 1.5 4 Para pasar a la siguiente ventana del navegador hay que dar clic en “Siguiente”. Configuración De Dominio Las siguientes son las direcciones que le van a permitir tener a servidores de dominios externos. Figura 1.5. Una vez ingresado los datos solicitados damos clic en Siguiente para ir a la pantalla de la configuracion del dominio la que se muestra en la figura 1.6. Nombre de Dominio ( Debe escribir el nombre del dominio de la empresa, como medida de seguridad no debe contener números, debe ser un nombre corto sin espacios. Nombre del Equipo ( Tenemos que ingresar aquí el nombre que le va a asignar al Figura servidor de correo, este1.6 también debe ser un nombre corto sin espacios. Permite actualizaciones ( Aquí se va a definir si desea que se actualice en una determinada red, ej. 192.168.2.0, o en todas las redes, en el ultimo caso se escribiría la palabra none. Luego damos clic en “Finalizar” de esta manera sistema guardará los datos que ingresemos y realizará las configuraciones. Al final si todo esta correcto saldrá un mensaje que la red ha sido configurada satisfactoriamente. 1.4. Panel Web Administración Para poder ingresar a este segmento de la aplicación debe realizar los siguientes pasos: Incorpore la dirección en su navegador. La dirección debe estar de la siguiente forma: ᄉ https://www.syscomsa.com/ᄉ sw_syscomsa Luego le aparecerá un cuadro donde debe incorporar su nombre y contraseña del usuario en los campos correspondientes, este usuario y clave es diferente a la configuración de dominio y red. Figura 1.7 5 Haga clic en "Enviar" y enseguida la aplicación le dará la bienvenida. 1.4.1. Administración de Usuarios En esta sección encontrará varias opciones para la administración de los usuarios y sus cuentas de correo. La ventana a continuación es la que se presentará en el navegador una vez que haya ingresado su usuario y clave, aquí encontrará las opciones que permiten administrar los usuarios. Es un mensaje de bienvenida como se muestra en la figura 1.8. Para acceder a este grupo de opciones debe de dar clic en la opción que dice “Usuarios” que se encuentra en la parte de arriba de la ventana. Se presentarán las siguientes opciones presentadas en la figura 1.9. Figura 1.8 Creación de Usuarios En la opción de “Creación de Usuarios” se le presentará la pantalla que se muestra en la figura 1.10, en la cual se debe de ingresar los datos que están descritos. Figura 1.9 6 Recuerde que no puede dejar campos vacíos ni tampoco ingresar caracteres especiales, solo en la caja de texto del password puede ingresar números, letras y caracteres especiales. Una vez que haya ingresado todos los campos hay que dar clic en el botón “Crear”. Si el usuario fue creado saldrá un mensaje que el usuario fue creado exitosamente, caso contrario saldrá un mensaje de error dependiendo de cual fue la falla que existió. Tome en consideración que al crear un usuario debe de darle acceso en la opción de Control de acceso que se redacta mas adelante. Creación de Grupos En la opción de “Creación de Grupos” ingrese el nombre del nuevo departamento que desee crear. Luego hay que dar un clic en el botón “Crear”. Si el departamento fue creado saldrá un mensaje que la operación fue exitosa. A continuación se muestra la pantalla en la figura 1.11. Figura 1.10 Figura 1.11 7 Creación de Usuarios por Lista En la opción de “Creación de Usuarios por Lista” se debe ingresar la ruta completa de la ubicación del archivo (Ej. C:\archivo\datos) donde se encuentran los datos de los usuarios a crear. El archivo creado debe seguir el ejemplo que se muestra en la siguiente pantalla. Una vez que se haya ingresado la ubicación seleccionar botón “Enviar” y automáticamente se generara el archivo y se crearan los usuarios exitosamente. En caso de error en la creación saldrá un mensaje del error que se produjo. En la opción “Modificación de Usuarios” se tiene que seleccionar el usuario al que queremos modificar sus datos, selecciónandolo de la lista que se muestra. Damos clic en el botón “Buscar” y luego saldrá una pantalla igual a la de creación de usuario pero con los datos actuales para que lo podamos modificar. A continuación se muestra la pantalla. Figura 1.12 En la opción de “Modificación de Grupos” lo primero que tenemos que hacer es seleccionar en nombre del departamento que deseamos modificar y dar clic al botón de “Buscar” entonces Figura 1.13 buscará el departamento seleccionado. Una vez encontrado mostrará una pantalla para que podamos cambiar el nombre del departamento. Todo esto se muestra en las siguientes pantallas. Figura 1.14 8 En la opción de “Cambio de Claves” también seleccionamos de la lista el usuario al cual le deseamos modificar su clave. Una vez que seleccionado damos clic en el botón “Buscar” y mostrará otra pantalla donde debemos de ingresar la nueva Figura 1.15 al usuario seleccionado. A continuación se muestra las pantallas contraseña asignada que se presentaran al momento en que necesitemos modificar la clave. Administración de Cuentas Para acceder a este grupo de opciones debemos dar clic en la opción “Cuentas” que se encuentra en la parte de arriba de la ventana. Se te presentarán las siguientes opciones: Figura 1.16 En la opción “Parámetros de Cuentas” se define cuales son los parámetros que se le asigne a todas las cuentas de los usuarios que seFigura creó. 1.17 Dentro de las opciones múltiples tenemos las siguientes que se detallan una a una. Figura 1.18 9 En la opción “Definición de Cuotas Usuario” asignaremos las cuotas a los usuarios. Elegimos primero el nombre del usuario y luego le asignamos una cuota de gracia que es el tamaño antes de llegar al máximo que todavía no sobrepasa lo absoluto de la cuota y la cuota absoluta es el tamaño máximo que puede llegar ya que una vez que se llene ya no podrá almacenar mas correo. En la opción “Definición de Cuotas Grupo” asignaremos las cuotas a los grupos de usuarios. Elegimos primero el nombre del grupo y luego le asignamos una cuota de gracia que es el tamaño antes de llegar al máximo que todavía no sobrepasa lo absoluto de la cuota y la cuota absoluta es el tamaño máximo que puede llegar ya que una vez que se llene ya no podrá almacenar mas correo. Figura 1.19 En la opción “Control de Acceso de Usuarios”, aquí se le dará acceso al nuevo usuario que se creó, sino le da este acceso el usuario no podrá enviar correos a sus destinatarios y solo podrá recibir correo. Se debe elegir nombre del usuario que ya esta creado previamente, luego se deberá Figurael1.20 elegir las opciones del combo “Acción” que pueden ser ACEPTA que es para que el usuario pueda enviar correo a diferentes dominios o DENIEGA que deniega todo envío y recepción de correo. 10 . En la opción “Control de Acceso de Dominio e IP Red”, aquí se le dará acceso a dominios o IPs que se encuentren dentro de la red de la organización. Si la opción que seleccionemos es IP o red entonces debemos ingresar una dirección de IP Figura de la red que necesitemos bloquear. 1.21 Si la opción seleccionada es dominio de red entonces en la descripción tenemos que ingresar el nombre del dominio que deamos que no ingrese a los correos de los usuarios creados. En la selección de Acción tenemos que definir si queremos bloquear, permitir o denegar el acceso de lo que eijamos en “Opción”. Se debe elegir el nombre del usuario que ya esta creado previamente, luego tenemos que elegir las opciones del combo “Acción” que pueden ser ACEPTA que es para que el usuario pueda enviar correo a diferentes dominios o DENIEGA que deniega todo envío y recepción de correo. Administración de Interfaz Para acceder a este grupo de opciones tenemos que dar clic en la opción que dice “Interfaz” que se encuentra en la parte de arriba de la ventana. Se te presentarán las siguientes opciones. Figura 1.22 Figura 1.23 11 En la opción de “Idioma y Hora” podemos seleccionar el idioma el cual queramos que manejen todas las cuentas de correo. También podemos elegir la zona horaria en la que se encuentre la empresa para que automáticamente se presente la hora actual. EL formato de la hora y fecha lo podemos elegir en las opciones que creamos conveniente. Una vez que hemos seleccionado todos los campos requeridos damos clic en el botón “Grabar” para que se efectúen los cambios solicitados. A continuación se presenta la pantalla de muestra. En la opción de “Opciones de Visualización” encontraremos algunas opciones que tenemos que seleccionar. Recuerda que no puedemos dejar campos vacíos. La opción de aplicación Inicial es para determinar que es lo que inicialmente queremos que se aparezca al iniciar sesión los usuarios. Podemos seleccionar si deseamos que se muestre la hora de la última sesión que tuvo el usuario. Figura 1.24 También podemos seleccionar en que tiempo se actualiza la visualización de los buzones en la opción de “actualizar vista del portal”. Existen también colores que podemos seleccionar de una lista para que lo tengan las cuentas de correo. Al escoger SI decidimos que el menú de la interfaz del Horde se visualice a la izquierda caso contrario NO se visualizará. Para determinar el ancho del menú que se muestra en la interfaz del Horde que es la de las cuentas de correo. En el formato del menú seleccionamos que tipo de formato deseamos que aparezca a todos los usuarios al iniciar sesión. En la ruta de la imagen ingresa la ubicación donde se encuentra la imagen que desemos que se cargue en el momento de que el usuario se encuentre en el login. 12 En la opción de “Tareas de Inicio de Sesión en Correo (Parte I)” también tenemos que seleccionar varias opciones que se muestran en la pantalla. En la vista o buzón mostrados al iniciar sesión podemos seleccionar que es lo que deseamos que el usuario visualice cuando ingrese a su sesión. Podemos elegir la Bandeja de Entrada, Elementos Enviados, Borradores, Papelera o Spam. Para eliminar los correos enviados tenemos que elegir entre dos opciones que se presentan y el servidor automáticamente elimina los mensajes antiguos siempre y Figura 1.25 cuando seleccionemos con que frecuencia necesitamos que se eliminen ya sea anualmente, mensualmente, semanalmente, diariamente o cada inicio de sesión. También podemos eliminar los adjuntos vinculados cada inicio de mes y definir cuantos meses deseas guardar los adjuntos vinculados. En el mantenimiento de inicio de sesión si necesitamos realizar operaciones de mantenimiento y si antes de hacerlo se solicita la confirmación del mismo. Una vez que completemos la selección damos clic en el botón “Grabar” y si no existen campos vacíos o no se presenta algún error se efectuaran los cambios exitosamente. En la opción de tareas de inicio de sesión de correo del Horde Parte II encontraremos que podemos eliminar los mensajes de la papelera y con que frecuencia la quieres realizar. También eliminar la carpeta Spam y con que frecuencia. Figura 1.26 Figura 1.27 13 1.4.4. Copias de Seguridad En esta sección podremos administrar las copias de seguridad de los buzones. En la opción de “Copias Horarios Simples” podemos crear copias de seguridad en determinados horarios de los correos que tienen los usuarios existentes. Seleccionamos el usuario al cual se le va a realizar copias de seguridad seleccionamos hora y la fecha en que se va a crear la copia. En la opción de “Copias Horarios Múltiples” se puede realizar copias de seguridad de una forma más compleja ingresando los minutos, horas, día del mes, mes y el día de la semana. Figura 1.28 En la opción de “Restauración de Copias de Seguridad” se podrá restaurar las carpetas del correo de un usuario especifico o sino también de todos los usuarios que previamente se les realizo el respectivo respaldo en los realizados en los pasos anteriores. Figura 1.29 Figura 1.30 14 1.5. Mensajes de error Existen algunos mensajes de error que le aparecerán a medida que usted utilice esta herramienta. Si los datos de IP que ingreso no son los correctos, le saldrá un mensaje error que Delede clic en Aceptar se muestra a continuación: y vuelva a ingresar los datos. Si se ingresa una letra mayúscula en campos que solo sean de ingresar caracteres minúsculas entones aparecerá el mensaje de error de la figura siguiente. Figura 1.31 Si digitamos una letra mayúscula en campos que solo sean de ingresar caracteres minúsculas entones aparecerá el mensaje de error de la figura siguiente. Figura 1.32 Si ingresamos la mascara de red erróneamente aparecerá un mensaje de error avisándo que la mascara que ingresada es invalida. Figura 1.33 Figura 1.34 15 1.6. Sesión del Webmail Horde Para iniciar sesión en el Horde se tiene que ingresar en el URL la siguiente dirección: ᄉ http://www.syscomsa.com/horde ᄉ A continuación de eso te saldrá la siguiente pantalla en el navegador: Luego digitar el usuario y contraseña asignada por el administrador y seleccionar “Iniciar sesión”. Inmediatamente ingresamos al correo como lo muestra la siguiente pantalla: Figura 1.35 Podemos realizar varias actividades como revisar la bandeja de entrada dando clic en el icono que se presenta en la siguiente figura. Figura 1.36 Permite redactar correo para enviar a los usuarios que tengan también una cuenta de correo. Figura 1.37 Figura 1.38 16 En el icono de carpetas nos permite navegar en todos los buzones de correo ya sean estos buzones de entrada, elementos enviado, borradores, papelera y Spam. En el icono de buscar permite realizar una búsqueda de los mensajes de correo que se necesite encontrar. Figura 1.39 En caso de que necesitemos ayuda podemos dar clic en el icono que se presenta en la siguiente figura. Figura 1.40 En el caso que necesitemos salir de la sesión del usuario que se ingreso entonces seleccionamos en el icono de la figura a continuación. Figura 1.41 Figura 1.42 CAPITULO 2 17 2. MANUAL TECNICO Introducción El objeto de este manual es describir las funciones y configuración de la aplicación desarrollada para administrar el webmail Horde y la creación de un dominio propio de la organización. Esta aplicación es una cómoda herramienta mediante la cual vamos a poder configurar todo aquello que podríamos configurar con un programa hecho para estos menesteres, pero ayudados de nuestro navegador favorito y a golpe de ratón igual que estuviéramos navegando, con la seguridad de que solo nosotros vamos a poder usarlo y de que todos los cambios que hagamos en el sistema mediante él van a ser tan válidos como si se hubieran hecho con otra herramienta. Funcionamiento Los puertos que configura esta herramienta son el IMAP el cual va a permitir a los usuarios visualizar sus correos sin que estos ocupen espacio en el disco, y la configuración del SMTP que permite enviar mail a diferentes direcciones de correo. Todo este funcionamiento lo podemos observar en el siguiente diagrama. IMAP IMAP Para acceder a esta herramienta a la parte de administración se requiere de un 2.1 username Figura y un pasword, para la parte de configuración inicial se necesita otro usuario y contraseña de acceso, esto es porque la herramienta esta dividida en dos 18 secciones, la primera es para configurar el dominio y direcciones de red del servidor, esta se la realizará una única vez, la segunda sección es para administrar los usuarios, las cuentas de correo, interfaz y las copias de seguridad. El usuario y clave de acceso se tiene que ingresar en la siguiente ventana. Figura 2.2 2.2.1. que deben activos Servicios estar Para que esta herramienta funcione correctamente debemos tener instalado en el servidor Linux los siguientes servicios: Mysql Mailscanner Httpd Named Network Sendmail Ya que estos servicios están activos en el servidor para el correcto funcionamiento de la aplicación podemos estar seguros que realizaremos las debidas configuraciones. 2.2.2. Configuraciones 2.2.2.1. Configuraciones del dominio Para la configuración del dominio y la interfaz, ingresamos a la primera sección la cual la utilizaremos solo por una vez, introducimos siguiente dirección en nuestro navegador favorito. ᄉ http://www.syscomsa.com/sw_syscomsa ᄉ 19 Observe que es https y no http, ya que al ser encriptada la comunicación habrá que utilizar este protocolo. La primera vez que accedamos a esta dirección nos saldrá un mensaje advirtiéndonos de que se puede verificar el certificado de seguridad y preguntando si deseamos aceptarlo. Dicho certificado es el que se configuró para el dominio syscomsa. Los archivos que configuramos en el servidor para la creación de dominio se encuentran en algunos archivos dentro de directorios del servidor Linux y son los que se presentan en la siguiente figura. Luego de ello detallamos los archivos. Archivo sendmail.mc: El archivo Sendmail Parametros: Localice la siguiente línea: DAEMON_OPTIONS(`Port=smtp,Addr=127.0.0.1, Name=MTA')dnl Elimine de dicho parámetro el valor Addr=127.0.0.1 y la coma (,) que le antecede, del siguiente modo DAEMON_OPTIONS(`Port=smtp, Name=MTA')dnl localice Figura 2.3 la siguiente línea: comentar esta configuración precediendo un dnl, del siguiente modo: dnl FEATURE(`accept_unresolvable_domains')dnl Habilitar las siguientes lineas y adaptar valores para definir la DAEMON_OPTIONS máscara que utilizará el servidor: MASQUERADE_AS(`dominio.com')dnl De modo predefinido Sendmail escucha peticiones a través de la interfaz de retorno del sistema a través de IPv4 (127.0.0.1) y no a través de otros dispositivos de red. Solo se necesita eliminar la restricción de la interfaz de retorno para poder recibir correo desde Internet o la LAN. FEATURE(`accept_unresolvable_domains') De modo predefinido, como una forma de permitir el correo del propio sistema en una computadora de escritorio o una computadora portátil, está se utiliza el parámetro FEATURE(`accept_unresolvable_domains'). 20 Sin embargo se recomienda desactivar esta función a fin de impedir aceptar correo de dominios inexistentes (generalmente utilizado para el envío de correo masivo no solicitado o Spam) El archivo dovecot Se encuentran los archivos para elegir los protocolos que permiten recibir correo. DOVECOT DNS Ruta /etc/dovecot.conf Se modifica el parámetro: Figura 2.4dominio # Protocols webind want to be serving: Los archivos del Paquetes utilizados: # imap imaps pop3 pop3s bind-libs bind-chroot bind-utils caching-nameserver Figura Ruta(2.5 /var/named/chroot/var/named (archivos de zona) /var/named/chroot/etc (archivo named.conf) Aquí se encuentran todos los archivos de zona del dominio creado. Recuerdemos que tambien debe de existir una zona inversa para el dominio. Archivo named.conf: options { directory "/var/named"; dump-file "/var/named/data/cache_dump.db"; stadistics-file "/var/named/data/named_stats.txt" forwarders { Figura 2.6 200.93.192.148; Configuración De Apache 200.93.192.161; }; Están las configuraciones necesarias para que el servidor pueda efectuar las }; operaciones por medio de un navegador. Paquetes utilizados: httpd Ruta( /var/www/html/mail/ Configure PHP Primero Figura 2.7configurar php en la ruta /etc/php.ini. Estas lineas deben ser configuradas: Los archivos adjuntos se los configura en Php en la ruta mencionada en la figura /etc/php.ini anterior. file_uploads = On // short_open_tag is not needed in newer versions of 21 Configurar el maximo tamaño adjunto en PHP(is is the value for POST and GET methods in PHP): /etc/httpd/conf.d/php.conf <Files *.php> Configurar el VirtualHost SetOutputFilter PHP Editar el archive de configuracion del apache y añadir los Figura 2.8 SetInputFilter PHP VirtualHost : # max attachment size: 512 kbytes LimitRequestBody 524288 /etc/httpd/conf/httpd.conf </Files> # make .htpasswd work Se le agrego: <Directory /var/www/html/mail/horde> Options FollowSymLinks AllowOverride All </Directory> Figura 2.9 Creamos directorios en donde se almacena toda la información del webmail horde. # One NameVirtualHost per IP address NameVirtualHost 192.168.3.1:80 # NameVirtualHost 192.168.3.2:80 Creación de directorios Crear todos los directorios <VirtualHost Figura 2.10 192.168.3.1:80> necesarios: ServerAdmin mail@syscomsa.com # mkdir Para reiniciar los servicios que-pguardan las configuraciones se utiliza los comandos DocumentRoot /var/www/html/mail/horde/imp citados en la figura. /var/www/html/mail/horde/imp/ ServerName mail. syscomsa.com Test Apache resetear apache para que surtan efecto los cambios: Figura service httpd configtest Creación de los archivos#de la2.11 figura para realizar las pruebas necesarias. Creación de un archivo temporal: # touch Figura 2.12 /var/www/html/mail/horde/imp/test La Ip del servidor es la dirección de cuatro octetos separados cada uno por un punto, esta dirección debe estar entre .html los rangos de una Clase C que comprende del número 192 a 223 del primer octeto de izquierda a derecha. La Ip ingresada debe pertenecer a la misma red de la empresa. Para una mejor ilustración de las clases de dirección a continuación se muestra los intervalos de la misma. 22 CLASE A ( Intervalo de primer octeto es de 0 a 127*. CLASE B ( Intervalo de primer octeto es de 128 a 191. CLASE C ( Intervalo de primer octeto es de 192 a 223. CLASE D ( Intervalo de primer octeto es de 224 a 239. Además de indicar que el intervalo de direcciones 127.x.x.x está reservado como dirección de loopback, con propósitos de prueba y diagnostico. La mascara de red para una red de clase C es por defecto 255.255.255.0 es decir que es el único valor que podemos ingresar en ese campo. Las cajas de texto donde se ingresará la información se encuentra con una validación para que solo acepte los valores requeridos especificados, no puede existir un campo vacío, no es permitido los caracteres especiales ni valores que sobresalgan a los intervalos detallados anteriormente. 2.2.2.2. Configuraciones de parámetros de las cuentas Nombre( Nombre de la cuentaTipo( Tipo de la cuenta (Combo List)Direccion Ip( Ip de la cuenta Tabla 2.1 Debido a la naturaleza del correo electrónico, es posible para un atacante inundar fácilmente el servidor y desencadenar en una denegación de servicio. Fenómenos como el denominado correo masivo no solicitado o Spam no hacen las cosas más fáciles y la administración de un servidor de correo puede tornarse una pesadilla. Añadir opciones avanzadas de seguridad se convierte en algo indispensable. Máximo número Destinatario por correo Este parámetro sirve para establecer un número máximo de destinatarios para un mensaje de correo electrónico. De modo predefinido Sendmail establece un máximo de 256 destinatarios. Tiempo letargo destinatario excedido Este parámetro sirve para establecer el tiempo de letargo que se utilizará por cada destinatario que sobrepase el límite establecido por el Máximo número Destinatario por correo. De modo predefinido Sendmail no establece tiempo de letargo. Habilitación de banderas/seguridad Este parámetro sirve para deshabilitar varios mandatos SMTP como EXPN y VRFY, los cuales pudieran ser utilizados para revelar los nombres de usuarios locales a un spammer. También deshabilita las notificaciones de entrega, el cual es un mecanismo comunmente utilizado por quienes envían correo masivo no solicitado para verificar/confirmar la existencia de una cuenta activa, y hace que el sistema solicite obligatoriamente HELO o EHLO antes de utilizar el mandato MAIL. Muchos 23 programas de utilizados para enviar correo masivo no solicitado ni siquiera se molestan en utilizar HELO o EHLO. Tamaño Maximo cabecera (kb) Esté parámetro se utiliza para definir el tamaño máximo permitido para la cabecera de un mensaje en bytes. Algunos programas utilizados para enviar spam tratan de impedir que los MTA puedan registrar transacciones generando cabeceras muy grandes Limitar el tamaño de las cabeceras hace más difícil la ejecución de guión que explote vulnerabilidades recientes (desbordamientos de búfer) en UW IMAP, Outlook y Outlook Express. La mayor parte de los mensajes de correo electrónico tendrán cabeceras de menos de 2 Kb (2048 bytes). Un mensaje de correo electrónico ordinario, por muy exagerado que resulte el tamaño de la cabecera, rara vez utilizará una cabecera que sobrepase los 5 Kb o 6 Kb, es decir, de 5120 o 6144 bytes Tamaño Máxima mensajes (MB) Este parámetro sirve para especificar el tamaño máximo permitido para un mensaje de correo electrónico en bytes. Puede especificarse lo que el administrador considera apropiado. Conexiones simultaneas permitidos Este parámetro sirve para especificar cuantos procesos hijos se permitirán simultáneamente en el servidor de correo. De modo predefinido sendmail no establece límites para este parámetro. Si se sobre pasa el límite de conexiones simultáneas, el resto serán demoradas hasta que se terminen las conexiones existentes y dejen lugar para nuevas conexiones. Conexiones máximas por segundo Este parámetro sirve para establecer el número de conexiones máximas por segundo. De modo predefinido sendmail no establece límites para este parámetro. 2.2.3. Direcciones Las direcciones donde están las configuraciones, son las siguientes: /var/www/html/sw_syscomsa/ En esta ruta se encuentra todo el código html del diseño de la página web de la aplicación además del código php. /var/www/html/sw_syscomsa/webpages/ ( se encuentran las subcarpetas que contienen los códigos php para cada una de las configuraciones, los subdirectorios son los siguientes: 24 /var/www/html/sw_syscomsa/webpages/administracio_interfaz ( los archivos que contienen los códigos correspondientes a las configuraciones de la administración de la interfaz del webmail que utilizamos que es el “Horde” en el servidor Linux. /var/www/html/sw_syscomsa/webpages/administración_cuenta ( Los archivos que contienen las configuraciones que realizan la administración de la cuenta de los usuarios, aquí están los códigos que nos ayudara a elegir los parámetros de las cuotas de usuario. /var/www/html/sw_syscomsa/webpages/administración_usuario ( /var/www/html/sw_syscomsa/webpages/admin._servi_correo ( /var/www/html/sw_syscomsa/webpages/seguridades ( Servicios activados Mysql Mailscanner Httpd Named Network Sendmail Herramientas y protocolos utilizados Webmail horde Antivirus Clamav Protocolo ssl (certificacado de seguridad) Protocolo Imap Configuraciones del dominio Interfaz de red ( como asignación de Ip al servidor, Gateway o puerta de enlace, DNS primario y DNS secundario que lo da el proveedor de Internet nombre del dominio de la empresa, nombre de equipo. Codificaciones del proyecto. 2.3.1. Scripts del proyecto. 2.3.1.1. Sección administración interfaz. Esta sección se encuentra ubicada en la ruta: /var/www/html/sw_syscomsa/webpages/administracio_interfaz/scripts en el cual se encuentran los siguientes archivos. 25 Archivo: idiomahora_cmd.sh #!/bin/bash #\ ruta1="/var/www/html/horde/config/prefs.php" #*********************LO ACTUAL DEL ARCHIVO*************** lenguaje1=`sed -n 265p $ruta1` timezone1a=`sed -n 275p $ruta1 | sed "s/[/][/]*/:/g" | cut -f1 -d:` timezone1b=`sed -n 275p $ruta1 | sed "s/[/][/]*/:/g" | cut -f2 -d:` timezone1=$timezone1a"\\/"$timezone1b timeformat1=`sed -n 284p $ruta1` dateformat1=`sed -n 293p $ruta1` firstweekday1=`sed -n 326p $ruta1` echo "lo que tiene el prefs.php" echo $lenguaje1 echo $timezone1a echo $timezone1b echo $timezone1 echo $timeformat1 echo $dateformat1 echo $firstweekday1 #*********************LO NUEVO Q SE ACTUALIZA*************** lenguaje2="array('value'=>'$1'," timezone2="array('value'=>'$2'," timeformat2="'value'=>$3," dateformat2="array('value'=>'$4'," firstweekday2="array('value'=>'$5'," echo "" echo "lo nuevo a actualizar" echo $lenguaje2 echo $timezone2 echo $timeformat2 echo $dateformat2 #*********************CAMBIO DE DATOS*************** lenguaje="s/$lenguaje1/$lenguaje2/g" timezone="s/$timezone1/$timezone2/g" timeformat="s/$timeformat1/$timeformat2/g" dateformat="s/$dateformat1/$dateformat2/g" firstweekday="s/$firstweekday1/$firstweekday2/g" 26 echo "" echo "Cambio de datos" echo $lenguaje for i in $ruta1 do sed $lenguaje $i > $i.n done mv $i.n $i echo $timezone for i in $ruta1 do sed $timezone $i > $i.n done mv $i.n $i #echo $timeformat for i in $ruta1 do sed $timeformat $i > $i.n done mv $i.n $i #echo $dateformat for i in $ruta1 do sed $dateformat $i > $i.n done mv $i.n $i #echo $firstweekday for i in $ruta1 do sed $firstweekday $i > $i.n done mv $i.n $i chown apache $ruta1 chgrp apache $ruta1 27 Archivo: opciovisualiza_cmd.sh #!/bin/bash #\ ruta1="/var/www/html/horde/config/prefs.php" rutaimg="/var/www/html/horde/themes/graphics/horde-power1.png" #*********************LO ACTUAL DEL ARCHIVO*************** initialapl1=`sed -n 468p $ruta1` showlastlo1=`sed -n 512p $ruta1` summaryrefresh1=`sed -n 366p $ruta1` uithemes1=`sed -n 337p $ruta1` showsidebar1=`sed -n 380p $ruta1` sidebarwidth1=`sed -n 388p $ruta1` menuview1=`sed -n 406p $ruta1` menurefresh1=`sed -n 417p $ruta1` echo "lo que tiene el prefs.php" echo $initialapl1 echo $showlastlo1 echo $summaryrefresh1 echo $uithemes1 echo $showsidebar1 echo $sidebarwidth1 echo $menuview1 echo $menurefresh1 #*********************LO NUEVO Q SE ACTUALIZA*************** initialapl2="array('value'=>'$1'," showlastlo2="=array('value'=>$2," summaryrefresh2="array('value'=>$3," uithemes2="array('value'=>'$4'," showsidebar2="array('value'=>$5," sidebarwidth2="('value'=>$6," menuview2="array('value'=>'$7'," menurefresh2="=array('value'=>$8," echo "" echo "lo nuevo a actualizar" echo $initialapl2 echo $showlastlo2 echo $summaryrefresh2 28 echo $uithemes2 echo $showsidebar2 echo $sidebarwidth2 echo $menuview2 echo $menurefresh2 #********************CAMBIO DE DATOS*************** initialapl="s/$initialapl1/$initialapl2/g" showlastlo="s/$showlastlo1/$showlastlo2/g" summaryrefresh="s/$summaryrefresh1/$summaryrefresh2/g" uithemes="s/$uithemes1/$uithemes2/g" showsidebar="s/$showsidebar1/$showsidebar2/g" sidebarwidth="s/$sidebarwidth1/$sidebarwidth2/g" menuview="s/$menuview1/$menuview2/g" menurefresh="s/$menurefresh1/$menurefresh2/g" echo "" echo "Cambio de datos" echo $initialapl for i in $ruta1 do sed $initialapl $i > $i.n done mv $i.n $i echo $showlastlo for i in $ruta1 do sed $showlastlo $i > $i.n done mv $i.n $i echo $summaryrefresh for i in $ruta1 do sed $summaryrefresh $i > $i.n done mv $i.n $i echo $uithemes for i in $ruta1 do sed $uithemes $i > $i.n 29 done mv $i.n $i echo $showsidebar for i in $ruta1 do sed $showsidebar $i > $i.n done mv $i.n $i echo $sidebarwidth for i in $ruta1 do sed $sidebarwidth $i > $i.n done mv $i.n $i echo $menuview for i in $ruta1 do sed $menuview $i > $i.n done mv $i.n $i echo $menurefresh for i in $ruta1 do sed $menurefresh $i > $i.n done mv $i.n $i mv -f $rutaimg $rutaimg".orig" cp -f $9 $rutaimg chown apache $ruta1 chgrp apache $ruta1 Archivo: opc_redaccion_cmd.sh #!/bin/bash #\ ruta1="/var/www/html/horde/imp/config/prefs.php" #*********************LO ACTUAL DEL ARCHIVO*************** composepopup1=`sed -n 479p $ruta1` 30 composecursor1=`sed -n 573p $ruta1` composecc1=`sed -n 585p $ruta1` composebcc1=`sed -n 594p $ruta1` composespellcheck1=`sed -n 614p $ruta1` #dispositionrequestread1=`sed -n 753p $ruta1` echo "lo que tiene el prefs.php" echo $composepopup1 echo $composecursor1 echo $composecc1 echo $composebcc1 echo $composespellcheck1 #echo $dispositionrequestread1 #*********************LO NUEVO Q SE ACTUALIZA*************** composepopup2="=array('value'=>$1," composecursor2="array('value'=>'$2'," composecc2="array('value'=>$3,'locked'=>false," composebcc2="array('value'=>$4,'locked'=>false,'shared'=>false," composespellcheck2="=array('value'=>$5,'locked'=>false,'shared'=>false," #dispositionrequestread2="array('value'=>'$6'," echo "" echo "lo nuevo a actualizar" echo $composepopup2 echo $composecursor2 echo $composecc2 echo $composebcc2 echo $composespellcheck2 #echo $dispositionrequestread2 #********************CAMBIO DE DATOS*************** composepopup="s/$composepopup1/$composepopup2/g" composecursor="s/$composecursor1/$composecursor2/g" composecc="s/$composecc1/$composecc2/g" composebcc="s/$composebcc1/$composebcc2/g" composespellcheck="s/$composespellcheck1/$composespellcheck2/g" #dispositionrequestread="s/$dispositionrequestread1/$dispositionrequestread2/g" echo "" echo "Cambio de datos" echo $composepopup for i in $ruta1 31 do sed $composepopup $i > $i.n done mv $i.n $i echo $composecursor for i in $ruta1 do sed $composecursor $i > $i.n done mv $i.n $i echo $composecc for i in $ruta1 do sed $composecc $i > $i.n done mv $i.n $i echo $composebcc for i in $ruta1 do sed $composebcc $i > $i.n done mv $i.n $i echo $composespellcheck for i in $ruta1 do sed $composespellcheck $i > $i.n done mv $i.n $i #echo $dispositionrequestread #for i in $ruta1 #do #sed $dispositionrequestread $i > $i.n #done #mv $i.n $i chown apache $ruta1 chgrp apache $ruta1 Archivo: opc_visuali_cmd.sh #!/bin/bash 32 #\ ruta1="/var/www/html/horde/imp/config/prefs.php" #*********************LO ACTUAL DEL ARCHIVO*************** purgetrash1=`sed -n 431p $ruta1` purgetrashinterval1=`sed -n 441p $ruta1` #purgetrashkeep1=`sed -n 450p $ruta1` purgespam1=`sed -n 403p $ruta1` purgespaminterval1=`sed -n 413p $ruta1` echo "lo que tiene el prefs.php" echo $purgetrash1 echo $purgetrashinterval1 #echo $purgetrashkeep1 echo $purgespam1 echo $purgespaminterval1 #*********************LO NUEVO Q SE ACTUALIZA*************** purgetrash2="['purge_trash']=array('value'=>$1," purgetrashinterval2="=array('value'=>'$2'," #purgetrashkeep2="'value'=>$3," purgespam2="=array('value'=>$3," purgespaminterval2="]=array('value'=>'$4'," echo "" echo "lo nuevo a actualizar" echo $purgetrash2 echo $purgetrashinterval2 #echo $purgetrashkeep2 echo $purgespam2 echo $purgespaminterval2 #********************CAMBIO DE DATOS*************** purgetrash="s/$purgetrash1/$purgetrash2/g" purgetrashinterval="s/$purgetrashinterval1/$purgetrashinterval2/g" #purgetrashkeep="s/$purgetrashkeep1/$purgetrashkeep2/g" purgespam="s/$purgespam1/$purgespam2/g" purgespaminterval="s/$purgespaminterval1/$purgespaminterval2/g" echo "" echo "Cambio de datos" echo $purgetrash 33 for i in $ruta1 do sed $purgetrash $i > $i.n done mv $i.n $i echo $purgetrashinterval for i in $ruta1 do sed $purgetrashinterval $i > $i.n done mv $i.n $i #echo $purgetrashkeep #for i in $ruta1 #do #sed $purgetrashkeep $i > $i.n #done #mv $i.n $i echo $purgespam for i in $ruta1 do sed $purgespam $i > $i.n done mv $i.n $i echo $purgespaminterval for i in $ruta1 do sed $purgespaminterval $i > $i.n done mv $i.n $i chown apache $ruta1 chgrp apache $ruta1 Archivo: tareainicioses_cmd.sh #!/bin/bash #\ ruta1="/var/www/html/horde/imp/config/prefs.php" ruta2="/var/www/html/horde/config/prefs.php" 34 #*********************LO ACTUAL DEL ARCHIVO*************** initialapl1=`sed -n 323p $ruta1` purgesentmail1=`sed -n 357p $ruta1` purgesentmailinterval1=`sed -n 367p $ruta1` deleattachmon1=`sed -n 385p $ruta1` deleattachmonkeep1=`sed -n 394p $ruta1` echo "lo que tiene el prefs.php" echo $initialapl1 echo $purgesentmail1 echo $purgesentmailinterval1 echo $deleattachmon1 echo $deleattachmonkeep1 #*********************LO NUEVO Q SE ACTUALIZA*************** initialapl2="array('value'=>'$1'," purgesentmail2="array('value'=>$2," purgesentmailinterval2="array('value'=>'$3'," deleattachmon2="('value'=>$4," deleattachmonkeep2="]=array('value'=>$5," echo "" echo "lo nuevo a actualizar" echo $initialapl2 echo $purgesentmail2 echo $purgesentmailinterval2 echo $deleattachmon2 echo $deleattachmonkeep2 #********************CAMBIO DE DATOS*************** initialapl="s/$initialapl1/$initialapl2/g" purgesentmail="s/$purgesentmail1/$purgesentmail2/g" purgesentmailinterval="s/$purgesentmailinterval1/$purgesentmailinterval2/g" deleattachmon="s/$deleattachmon1/$deleattachmon2/g" deleattachmonkeep="s/$deleattachmonkeep1/$deleattachmonkeep2/g" echo "" echo "Cambio de datos" echo $initialapl for i in $ruta1 do sed $initialapl $i > $i.n done mv $i.n $i 35 echo $purgesentmail for i in $ruta1 do sed $purgesentmail $i > $i.n done mv $i.n $i echo $purgesentmailinterval for i in $ruta1 do sed $purgesentmailinterval $i > $i.n done mv $i.n $i echo $deleattachmon for i in $ruta1 do sed $deleattachmon $i > $i.n done mv $i.n $i echo $deleattachmonkeep for i in $ruta1 do sed $deleattachmonkeep $i > $i.n done mv $i.n $i chown apache $ruta1 chgrp apache $ruta1 Archivo: tareainicioses2_cmd.sh #!/bin/bash #\ ruta1="/var/www/html/horde/imp/config/prefs.php" #*********************LO ACTUAL DEL ARCHIVO*************** purgetrash1=`sed -n 431p $ruta1` purgetrashinterval1=`sed -n 441p $ruta1` purgespam1=`sed -n 403p $ruta1` purgespaminterval1=`sed -n 413p $ruta1` 36 echo "lo que tiene el prefs.php" echo $purgetrash1 echo $purgetrashinterval1 echo $purgespam1 echo $purgespaminterval1 #*********************LO NUEVO Q SE ACTUALIZA*************** purgetrash2="['purge_trash']=array('value'=>$1," purgetrashinterval2="=array('value'=>'$2'," purgespam2="=array('value'=>$3," purgespaminterval2="]=array('value'=>'$4'," echo "" echo "lo nuevo a actualizar" echo $purgetrash2 echo $purgetrashinterval2 echo $purgespam2 echo $purgespaminterval2 #********************CAMBIO DE DATOS*************** purgetrash="s/$purgetrash1/$purgetrash2/g" purgetrashinterval="s/$purgetrashinterval1/$purgetrashinterval2/g" purgespam="s/$purgespam1/$purgespam2/g" purgespaminterval="s/$purgespaminterval1/$purgespaminterval2/g" echo "" echo "Cambio de datos" echo $purgetrash for i in $ruta1 do sed $purgetrash $i > $i.n done mv $i.n $i echo $purgetrashinterval for i in $ruta1 do sed $purgetrashinterval $i > $i.n done mv $i.n $i echo $purgespam 37 for i in $ruta1 do sed $purgespam $i > $i.n done mv $i.n $i echo $purgespaminterval for i in $ruta1 do sed $purgespaminterval $i > $i.n done mv $i.n $i chown apache $ruta1 chgrp apache $ruta1 Sección administración cuenta. Esta sección se encuentra ubicada en la ruta: /var/www/html/sw_syscomsa/webpages/administracion_cuenta/scripts, en el cual se encuentran los siguientes archivos. Archivo: controlaccess_cmd.sh #!/bin/bash #\ ruta1="/etc/mail/access" ruta2="/etc/passwd" ruta3='/etc/resolv.conf' cuenta=$1 #if test $1 = "CU" #then # nombreusuario=`gawk -F: '$4>=500'\ '{print $1,$2,$3,$4}' $ruta2 | grep "$cuenta" | sed "s/[ ][ ]*/:/g" | cut -f1 -d:` #echo $nombreusuario # if test -z $nombreusuario # then # echo "La Cuenta de Usuario no Existe" # else cuentausuario=`gawk -F: '{print $1,$2}' $ruta1 | grep "$cuenta" | sed "s/[ ][ ]*/:/g" | cut -f1 -d:` #cuentausuario=`gawk -F: '{print $1,$2}' $ruta1 | grep "$cuenta" | sed "s/[ ][ ]*/:/g" | cut -f1 -d: | sed "s/[@][@]*/:/g" | cut -f1 -d:` 38 if test -z $cuentausuario then echo "La Cuenta en el access no Existe" # dominio1=`sed -n 1p $ruta3 | cut -c8-100` echo $1" "$2 >> $ruta1 #echo $nombreusuario"@"$dominio1" "$3 >> $ruta1 /etc/rc.d/init.d/sendmail restart echo "Realizado Exitosamente el permiso para la cuenta de usuario" else cuentausu="s/$cuentausuario/#./g" #echo $cuentausu for i in $ruta1 do sed $cuentausu $i > $i.n done mv $i.n $i # dominio1=`sed -n 1p $ruta3 | cut -c8-100` # echo $nombreusuario"@"$dominio1" "$3 >> $ruta1 echo $1" "$2 >> $ruta1 /etc/rc.d/init.d/sendmail restart echo "Realizado Exitosamente el permiso para la cuenta de usuario" fi # fi #else # echo $2" "$3 >> $ruta1 # /etc/rc.d/init.d/sendmail restart # echo "Realizado Exitosamente el permiso para el Dominio o la Direccion Ip" #fi Archivo: changequota_cmd.sh #!/bin/bash #\ ruta1="/etc/passwd" ruta2="/etc/group" usergroup=$1 letra=$2 39 us=`gawk -F: '$4>=500'\ '{print $1,$2,$3,$4,$5}' $ruta1 | grep "$usergroup"` gr=`gawk -F: '$3>=500'\ '{print $1,$2,$3,$4,$5}' $ruta2 | grep "$usergroup"` grupo=`gawk -F: '$3>=500'\ '{print $1,$2,$3,$4}' $ruta2 | grep "$usergroup" | sed "s/[ ][ ]*/:/g" | cut -f3 -d:` user=`gawk -F: '$4>=500'\ '{print $1,$2,$3,$4,$5}' $ruta1 | grep "$usergroup" | sed "s/[ ][ ]*/:/g" | cut -f4 -d:` nombreusuario=`gawk -F: '$4>=500'\ '{print $1,$2,$3,$4,$5}' $ruta1 | grep "$usergroup" | sed "s/[ ][ ]*/:/g" | cut -f1 -d:` nameusers=`gawk -F: '$4>=500'\ '{print $1,$2,$4}' $ruta1 | grep "$grupo" | sed "s/[ ] [ ]*/:/g" | cut -f1 -d:` i=0 nombusua=`gawk -F: '$4>=500'\ '{print $1,$4}' $ruta1 | grep "$grupo" | sed "s/[ ][ ] */:/g" | cut -f1 -d:` echo $nombusua > /var/www/html/sw_syscomsa/webpages/administracion_cuenta/scripts/cuotasusuario. txt if test $letra = "u" then if test -z $user then echo "No Existe el usuario" # break else setquota -$letra $nombreusuario $3 $4 0 0 -a echo "El nombre del usuario" echo $us echo $user echo "Definicion de cuotas realizado Exitosamente" fi else if test -z $grupo then echo "No Existe el grupo" # break else setquota -$letra $grupo $3 $4 0 0 -a echo "El nombre del grupo" echo $gr 40 echo $grupo echo "" echo "Los usuarios q pertenecen al grupo son: "$nameusers echo "" while [ $i -ne 100 ] do i=$[$i+1] usuario=`gawk -F: \ '{print $1}' /var/www/html/sw_syscomsa/webpages/administracion_cuenta/scripts/cuotasusuario. txt | sed "s/[ ][ ]*/:/g" | cut -f$i -d:` if test -z $usuario then echo "Definicion de cuotas realizado Exitosamente" break else echo "Definicion de cuotas realizado Exitosamente" setquota -u $usuario $3 $4 0 0 -a fi done fi fi Archivo: controlaccusuario_cmd.sh #!/bin/bash #\ ruta1="/etc/mail/access" ruta2="/etc/passwd" ruta3='/etc/resolv.conf' cuenta=$1 #if test $1 = "CU" #then nombreusuario=`gawk -F: '$4>=500'\ '{print $1,$2,$3,$4}' $ruta2 | grep "$cuenta" | sed "s/[ ][ ]*/:/g" | cut -f1 -d:` #echo $nombreusuario if test -z $nombreusuario then echo "La Cuenta de Usuario no Existe" else 41 cuentausuario=`gawk -F: '{print $1,$2}' $ruta1 | grep "$cuenta" | sed "s/[ ][ ]*/:/g" | cut -f1 -d: | sed "s/[@][@]*/:/g" | cut -f1 -d:` if test -z $cuentausuario then echo "La Cuenta en el access no Existe" dominio1=`sed -n 1p $ruta3 | cut -c8-100` echo $nombreusuario"@"$dominio1" "$2 >> $ruta1 /etc/rc.d/init.d/sendmail restart echo "Realizado Exitosamente el permiso para la cuenta de usuario" else cuentausu="s/$cuentausuario/#./g" #echo $cuentausu for i in $ruta1 do sed $cuentausu $i > $i.n done mv $i.n $i dominio1=`sed -n 1p $ruta3 | cut -c8-100` echo $nombreusuario"@"$dominio1" "$2 >> $ruta1 /etc/rc.d/init.d/sendmail restart echo "Realizado Exitosamente el permiso para la cuenta de usuario" fi fi Archivo: parametroscuenta_cmd.sh #!/bin/bash #\ ruta1="/var/www/html/horde/imp/config/conf.php" ruta2="/var/www/html/horde/config/prefs.php" ruta3="/var/www/html/horde/imp/config/prefs.php" attachsizelimit1=`sed -n 46p $ruta1` attachcountlimit1=`sed -n 48p $ruta1` replylimit1=`sed -n 50p $ruta1` dispositionrequestread1=`sed -n 751p $ruta3` domantenaince1=`sed -n 437p $ruta2` confirmantenaince1=`sed -n 456p $ruta2` echo "lo que tiene el sendmail" echo $attachsizelimit1 echo $attachcountlimit1 42 echo $replylimit1 echo $dispositionrequestread1 echo $domantenaince1 echo $confirmantenaince1 attachsizelimit2="]=$1;" attachcountlimit2="=$2;" replylimit2="['compose']['reply_limit']=$3;" dispositionrequestread2="array('value'=>'$4'," domantenaince2="['do_maintenance']=array('value'=>$5," confirmantenaince2="]=array('value'=>$6," echo "" echo "lo nuevo a actualizar" echo $attachsizelimit2 echo $attachcountlimit2 echo $replylimit2 echo $dispositionrequestread2 echo $domantenaince2 echo $confirmantenaince2 attachsizelimit="s/$attachsizelimit1/$attachsizelimit2/g" attachcountlimit="s/$attachcountlimit1/$attachcountlimit2/g" replylimit="s/$replylimit1/$replylimit2/g" dispositionrequestread="s/$dispositionrequestread1/$dispositionrequestread2/g" domantenaince="s/$domantenaince1/$domantenaince2/g" confirmantenaince="s/$confirmantenaince1/$confirmantenaince2/g" echo "" echo "Cambio de datos" echo $attachsizelimit for i in $ruta1 do sed $attachsizelimit $i > $i.n done mv $i.n $i echo $attachcountlimit for i in $ruta1 do sed $attachcountlimit $i > $i.n done mv $i.n $i 43 echo $replylimit for i in $ruta1 do sed $replylimit $i > $i.n done mv $i.n $i echo $dispositionrequestread for i in $ruta3 do sed $dispositionrequestread $i > $i.n done mv $i.n $i echo $domantenaince for i in $ruta2 do sed $domantenaince $i > $i.n done mv $i.n $i echo $confirmantenaince for i in $ruta2 do sed $confirmantenaince $i > $i.n done mv $i.n $i chown apache $ruta1 chgrp apache $ruta1 chown apache $ruta2 chgrp apache $ruta2 chown apache $ruta3 chgrp apache $ruta3 Sección administración usuarios. Esta sección se encuentra ubicada en la ruta: /var/www/html/sw_syscomsa/webpages/administracion_usuarios/scripts, en el cual se encuentran los siguientes archivos. Archivo: changegroup_cmd.sh #!/bin/bash groupname=$1 groupnamenew=$2 44 ruta1='/etc/group' ruta2='/etc/gshadow' changgroup="s/$groupname/$groupnamenew/g" echo $changgroup for i in $ruta1 do sed $changgroup $i > $i.n done mv $i.n $i echo $changgroup for i in $ruta2 do sed $changgroup $i > $i.n done mv $i.n $i Archivo: changeuser_cmd.sh #!/bin/bash username=$1 usernamenew=$2 nombreusua=$3 apellidousua=$4 apellidousua2=$5 departamento=$6 fecha=$7 if test $1 = $2 then userdel $1 useradd -g $6 -e $7 $1 -c $3' '$4' '$5 chown -R $1 /home/$1 chgrp -R $6 /home/$1 chown -R $1 /var/spool/mail/$1 chgrp -R mail /var/spool/mail/$1 else useradd -g $6 -e $7 $2 -c $3' '$4' '$5 userdel $1 cp -rp /home/$1/* /home/$2 rm -fr /home/$1 cp -rp /var/spool/mail/$1 /var/spool/mail/$2 45 rm -fr /var/spool/mail/$1 chown -R $2 /var/spool/mail/$2 chgrp -R mail /var/spool/mail/$2 chown -R $2 /home/$2 chgrp -R $6 /home/$2 fi Archivo: chpasswd.sh #!/bin/sh #\ exec expect -f "$0" ${1+"$@"} set password [lindex $argv 1] set user [lindex $argv 0] spawn passwd [lindex $argv 0] sleep 1 expect "assword:" send "$password\r" expect "assword:" send "$password\r" expect eof Archivo: groupadd_cmd.sh #!/bin/bash groupadd $1 Archivo: useradd_cmd.sh #!/bin/bash #\ useradd -g $2 -e $3 $1 -c $4' '$5' '$6 mkdir /home/$1/mail chmod go-rwx /home/$1/mail/ touch /home/$1/mail/Enviados touch /home/$1/mail/Papelera touch /home/$1/mail/Spam touch /home/$1/mail/Borrador touch /home/$1/mail/inbox touch /var/spool/mail/$1 chown -R $1 /home/$1 chgrp -R $2 /home/$1 chown -R $1 /var/spool/mail/$1 chgrp -R mail /var/spool/mail/$1 46 chmod go-r /home/$1/mail/Enviados chmod go-r /home/$1/mail/Papelera chmod go-r /home/$1/mail/Spam chmod go-r /home/$1/mail/Borrador chmod go-r /home/$1/mail/inbox chmod go-r /var/spool/mail/$1 Sección administración de servidor de correos. Esta sección se encuentra ubicada en la ruta: /var/www/html/sw_syscomsa/webpages/admin_servi_correo /scripts, en el cual se encuentran los siguientes archivos. Archivo: configdns_cmd.sh #!/bin/sh gatew=$1 dns1=$2 dns2=$3 ruta1="/var/www/html/sw_syscomsa/webpages/admin_servi_correo/scripts/datosconf ig.txt" touch /var/www/html/sw_syscomsa/webpages/admin_servi_correo/scripts/datosconfig.txt echo "GATEWAY="$1 >> $ruta1 echo "DNS1="$2";" >> $ruta1 echo "DNS2="$3";" >> $ruta1 more /var/www/html/sw_syscomsa/webpages/admin_servi_correo/scripts/datosconfig.txt #a=`sed -n 10p /var/www/html/sw_syscomsa/webpages/admin_servi_correo/scripts/ifcfg-eth0 | cut -c9-25` #echo $a Archivo: configdominio_cmd.sh #!/bin/sh dominio=$1 hostname=$2 47 actualiz=$3 touch /var/www/html/sw_syscomsa/webpages/admin_servi_correo/scripts/datosconfig.txt echo "DOMINIO="$1 >> /var/www/html/sw_syscomsa/webpages/admin_servi_correo/scripts/datosconfig.txt echo "HOSTNAME="$2 >> /var/www/html/sw_syscomsa/webpages/admin_servi_correo/scripts/datosconfig.txt echo "ACTUALIZA="$3 >> /var/www/html/sw_syscomsa/webpages/admin_servi_correo/scripts/datosconfig.txt more /var/www/html/sw_syscomsa/webpages/admin_servi_correo/scripts/datosconfig.txt #a=`sed -n 10p /var/www/html/sw_syscomsa/webpages/admin_servi_correo/scripts/ifcfg-eth0 | cut -c9-25` #echo $a Archivo: configred_cmd.sh #!/bin/sh ipser=$1 mask=$2 touch /var/www/html/sw_syscomsa/webpages/admin_servi_correo/scripts/datosconfig.txt echo "IPADDR="$1 > /var/www/html/sw_syscomsa/webpages/admin_servi_correo/scripts/datosconfig.txt echo "NETMASK="$2 >> /var/www/html/sw_syscomsa/webpages/admin_servi_correo/scripts/datosconfig.txt more /var/www/html/sw_syscomsa/webpages/admin_servi_correo/scripts/datosconfig.txt #a=`sed -n 10p /var/www/html/sw_syscomsa/webpages/admin_servi_correo/scripts/ifcfg-eth0 | cut -c9-25` #echo $a Archivo: changeallconfig_cmd.sh #!/bin/sh 48 # rutas de los archivos a configurar ruta1='/etc/sysconfig/network-scripts/ifcfg-eth0' ruta2='/var/www/html/sw_syscomsa/webpages/admin_servi_correo/scripts/datosconfi g.txt' ruta3='/etc/resolv.conf' ruta4='/etc/sysconfig/network' ruta5='/var/named/chroot/etc/named.conf' ruta8='/etc/hosts' ruta9='/etc/mail/access' ruta10='/etc/mail/local-host-names' ruta11='/etc/aliases' ruta12='/etc/mail/relay-domains' ruta13='/etc/mail/sendmail.mc' ruta14='/var/www/html/horde/imp/config/servers.php' ruta15='/etc/httpd/conf/httpd.conf' ruta16='/etc/httpd/conf.d/ssl.conf' ruta17='/etc/dhcpd.conf' # captura de datos de lo que actualmente tiene la tarjeta de red netmask1=`sed -n 10p $ruta1` ipaddr1=`sed -n 11p $ruta1` gateway1=`sed -n 12p $ruta1` ips1=`sed -n 11p $ruta1 | cut -c8-100 ` gate1=`sed -n 12p $ruta1 | cut -c9-100 ` # captura de datos de lo que actualmente el resolv.conf dominio1=`sed -n 1p $ruta3 | cut -c8-100` # captura de datos de lo que actualmente el /etc/sysconfig/network hostname1=`sed -n 3p $ruta4` hosts1=`sed -n 3p $ruta4 | cut -c10-100` # captura de datos de lo que actualmente el /var/named/chroot/etc/named.conf dnsextpri1=`sed -n 10p $ruta5 | cut -c17-100` dnsextsec1=`sed -n 11p $ruta5 | cut -c17-100` # visualizacion de los datos de lo que tiene la tarjeta de red actualmente echo "lo q tiene la tarjeta" echo $netmask1 echo $ipaddr1 echo $gateway1 echo $gate1 echo $ips1 # visualizacion de los datos de lo que tiene actualmente el resolv.conf 49 echo $dominio1 # visualizacion de los datos de lo que tiene actualmente el /etc/sysconfig/network echo $hostname1 echo $hosts1 #visualizacion de los datos de lo que tiene actualmente /var/named/chroot/etc/named.conf echo $dnsextpri1 echo $dnsextsec1 # captura de datos del archivo de configuracion datosconfig.txt netmask2=`sed -n 2p $ruta2` ipaddr2=`sed -n 1p $ruta2` gateway2=`sed -n 3p $ruta2` dominio2=`sed -n 6p $ruta2 | cut -c9-100` hostname2=`sed -n 7p $ruta2` hosts2=`sed -n 7p $ruta2 | cut -c10-100` ips2=`sed -n 1p $ruta2 | cut -c8-100` gate2=`sed -n 3p $ruta2 | cut -c9-100` dnsextpri2=`sed -n 4p $ruta2 | cut -c6-100` dnsextsec2=`sed -n 5p $ruta2 | cut -c6-100` # visualizacion de los datos del archivo de configuracion datosconfig.txt echo " " echo "lo nuevo a actualizar" echo $netmask2 echo $ipaddr2 echo $gateway2 echo $gate2 echo $dominio2 echo $hostname2 echo $hosts2 echo $ips2 echo $dnsextpri2 echo $dnsextsec2 #asignacion de variables para el reemplazo de datos posteriormente netmask="s/$netmask1/$netmask2/g" ipaddr="s/$ipaddr1/$ipaddr2/g" gateway="s/$gateway1/$gateway2/g" gate="s/$gate1/$gate2/g" dominio="s/$dominio1/$dominio2/g" hostname="s/$hostname1/$hostname2/g" 50 hosts="s/$hosts1/$hosts2/g" ips="s/$ips1/$ips2/g" dnsextpri="s/$dnsextpri1/$dnsextpri2/g" dnsextsec="s/$dnsextsec1/$dnsextsec2/g" #busqueda y reemplazo del dato netmask en el archivo /etc/sysconfig/networkscripts/ifcfg-eth0 echo " " echo "archivo /etc/sysconfig/network-scripts/ifcfg-eth0" echo $netmask for i in $ruta1 do sed $netmask $i > $i.n done mv $i.n $i #busqueda y reemplazo del dato gateway en el archivo /etc/sysconfig/networkscripts/ifcfg-eth0 echo " " echo $gateway for i in $ruta1 do sed $gateway $i > $i.n done mv $i.n $i #busqueda y reemplazo del dato ipaddr en el archivo /etc/sysconfig/networkscripts/ifcfg-eth0 echo " " echo $ipaddr for i in $ruta1 do sed $ipaddr $i > $i.n done mv $i.n $i #busqueda y reemplazo del dato dominio en el archivo /etc/resolv.conf echo " " echo "archivo /etc/resolv.conf" echo $dominio for i in $ruta3 do sed $dominio $i > $i.n 51 done mv $i.n $i #busqueda y reemplazo del dato hostname en el archivo /etc/resolv.conf echo " " echo $ips for i in $ruta3 do sed $ips $i > $i.n done mv $i.n $i #busqueda y reemplazo del dato hostname en el archivo /etc/sysconfig/network echo " " echo "archivo /etc/sysconfig/network" echo $hostname for i in $ruta4 do sed $hostname $i > $i.n done mv $i.n $i #busqueda y reemplazo del dato dominio en el archivo /etc/hosts echo "archivo /etc/hosts" echo $dominio for i in $ruta8 do sed $dominio $i > $i.n done mv $i.n $i #busqueda y reemplazo del dato hostname en el archivo /etc/hosts echo $hosts for i in $ruta8 do sed $hosts $i > $i.n done mv $i.n $i #busqueda y reemplazo del dato ipaddress en el archivo /etc/hosts echo $ips for i in $ruta8 do sed $ips $i > $i.n 52 done mv $i.n $i #busqueda y reemplazo del dato dominio en el archivo /etc/mail/access echo "archivo /etc/mail/access" echo $dominio for i in $ruta9 do sed $dominio $i > $i.n done mv $i.n $i #busqueda y reemplazo del dato hostname en el archivo /etc/mail/access echo $hosts for i in $ruta9 do sed $hosts $i > $i.n done mv $i.n $i #busqueda y reemplazo del dato ipaddress en el archivo /etc/mail/access echo $ips for i in $ruta9 do sed $ips $i > $i.n done mv $i.n $i #busqueda y reemplazo del dato dominio en el archivo /etc/mail/local-host-names echo "archivo /etc/mail/local-host-names" echo $dominio for i in $ruta10 do sed $dominio $i > $i.n done mv $i.n $i #busqueda y reemplazo del dato hostname en el archivo /etc/mail/local-host-names echo $hosts for i in $ruta10 do sed $hosts $i > $i.n done mv $i.n $i 53 #busqueda y reemplazo del dato hostname en el archivo /etc/aliases echo "archivo /etc/aliases" echo $hosts for i in $ruta11 do sed $hosts $i > $i.n done mv $i.n $i #busqueda y reemplazo del dato dominio en el archivo /etc/mail/relay-domains echo "archivo /etc/mail/relay-domains" echo $dominio for i in $ruta12 do sed $dominio $i > $i.n done mv $i.n $i #busqueda y reemplazo del dato hostname en el archivo /etc/mail/relay-domains echo $hosts for i in $ruta12 do sed $hosts $i > $i.n done mv $i.n $i #busqueda y reemplazo del dato dominio en el archivo /etc/mail/sendmail.mc echo "archivo /etc/mail/sendmail.mc" echo $dominio for i in $ruta13 do sed $dominio $i > $i.n done mv $i.n $i #copia de lineas del named.conf l1=`sed -n 35p $ruta5` l2=`sed -n 36p $ruta5` l3=`sed -n 37p $ruta5` l4=`sed -n 38p $ruta5` l5=`sed -n 39p $ruta5` 54 #busqueda y reemplazo del dato dominio en el archivo /var/named/chroot/etc/named.conf echo "archivo /var/named/chroot/etc/named.conf" echo $dominio for i in $ruta5 do sed $dominio $i > $i.n done mv $i.n $i chmod go+rx $i #busqueda y reemplazo del dato dns externo primario en el archivo /var/named/chroot/etc/named.conf echo $dnsextpri for i in $ruta5 do sed $dnsextpri $i > $i.n done mv $i.n $i chmod go+rx $i #busqueda y reemplazo del dato dns externo secundario en el archivo /var/named/chroot/etc/named.conf echo $dnsextsec for i in $ruta5 do sed $dnsextsec $i > $i.n done mv $i.n $i chmod go+rx $i echo $l1 >> /var/named/chroot/etc/named.conf echo $l2 >> /var/named/chroot/etc/named.conf echo $l3 >> /var/named/chroot/etc/named.conf echo $l4 >> /var/named/chroot/etc/named.conf echo $l5 >> /var/named/chroot/etc/named.conf echo "archivo /var/named/chroot/var/named/*.zone" #copia del archivo de zona y creacion del nuevo archivo de zona con el nombre del dominio nuevo cp /var/named/chroot/var/named/$dominio1.zone /var/named/chroot/var/named/ $dominio2.zone ruta6='/var/named/chroot/var/named/'$dominio2'.zone' 55 ruta6a='/var/named/chroot/var/named/'$dominio1'.zone' #busqueda y reemplazo del dato dominio en el archivo de zona de reenvio en la ruta /var/named/chroot/var/named/ echo $dominio for i in $ruta6 do sed $dominio $i > $i.n done mv $i.n $i chmod go+rx $i #busqueda y reemplazo del dato hostname en el archivo de zona de reenvio en la ruta /var/named/chroot/var/named/ echo $hosts for i in $ruta6 do sed $hosts $i > $i.n done mv $i.n $i chmod go+rx $i #busqueda y reemplazo del dato ipaddress en el archivo de zona de reenvio en la ruta /var/named/chroot/var/named/ echo $ips for i in $ruta6 do sed $ips $i > $i.n done mv $i.n $i chmod go+rx $i #busqueda y reemplazo del dato ipaddress en el archivo de zona de reenvio actual en la ruta /var/named/chroot/var/named/ echo $ips for i in $ruta6a do sed $ips $i > $i.n done mv $i.n $i chmod go+rx $i # captura de datos de lo que actualmente tiene la tarjeta de red 56 ips1=`sed -n 11p $ruta1 | cut -c8-100 ` echo "lo q tiene la tarjeta" echo $ips1 ipocteto1a=`sed -n 11p $ruta1 | cut -c8-100 | sed "s/[.][.]*/:/g" | cut -f1 -d:` ipocteto1b=`sed -n 11p $ruta1 | cut -c8-100 | sed "s/[.][.]*/:/g" | cut -f2 -d:` ipocteto1c=`sed -n 11p $ruta1 | cut -c8-100 | sed "s/[.][.]*/:/g" | cut -f3 -d:` ipocteto1d=`sed -n 11p $ruta1 | cut -c8-100 | sed "s/[.][.]*/:/g" | cut -f4 -d:` ipinversa1=$ipocteto1c"."$ipocteto1b"."$ipocteto1a ipnormal1=$ipocteto1a"."$ipocteto1b"."$ipocteto1c echo $ipocteto1a echo $ipocteto1b echo $ipocteto1c echo $ipinversa1 echo $ipnormal1 # visualizacion de los datos del archivo de configuracion datosconfig.txt echo "lo nuevo a actualizar" ips2=`sed -n 1p $ruta2 | cut -c8-100 ` echo $ips2 ipocteto2a=`sed -n 1p $ruta2 | cut -c8-100 | sed "s/[.][.]*/:/g" | cut -f1 -d:` ipocteto2b=`sed -n 1p $ruta2 | cut -c8-100 | sed "s/[.][.]*/:/g" | cut -f2 -d:` ipocteto2c=`sed -n 1p $ruta2 | cut -c8-100 | sed "s/[.][.]*/:/g" | cut -f3 -d:` ipocteto2d=`sed -n 1p $ruta2 | cut -c8-100 | sed "s/[.][.]*/:/g" | cut -f4 -d:` ipinversa2=$ipocteto2c"."$ipocteto2b"."$ipocteto2a ipnormal2=$ipocteto2a"."$ipocteto2b"."$ipocteto2c echo $ipocteto2a echo $ipocteto2b echo $ipocteto2c echo $ipinversa2 echo $ipnormal2 #asignacion de variables para el reemplazo de datos posteriormente ipinversa="s/$ipinversa1/$ipinversa2/g" #ipnormal="s/$ipnormal1/$ipnormal2/g" ipoctetod="s/$ipocteto1d/$ipocteto2d/g" #copia y creacion del archivo de zona inversa en /var/named/chroot/var/named #cp -pfr /var/named/chroot/var/named/$ipinversa1.in-addr.arpa.zone /var/named/chroot/var/named/$ipinversa2.in-addr.arpa.zone 57 #ruta7='/var/named/chroot/var/named/'$ipinversa2'.in-addr.arpa.zone' ruta7a='/var/named/chroot/var/named/'$ipinversa1'.in-addr.arpa.zone' #busqueda y reemplazo del dato dominio en el archivo de zona inversa en la ruta /var/named/chroot/var/named/ echo $dominio #for i in $ruta7 #do #sed $dominio $i > $i.n #done #mv $i.n $i #chmod go+rx $i #busqueda y reemplazo del dato hostname en el archivo de zona inversa en la ruta /var/named/chroot/var/named/ echo $hosts #for i in $ruta7 #do #sed $hosts $i > $i.n #done #mv $i.n $i #chmod go+rx $i #busqueda y reemplazo del 4to octeto en el archivo de zona inversa en la ruta /var/named/chroot/var/named echo $ipoctetod #for i in $ruta7 #do #sed $ipoctetod $i > $i.n #done #mv $i.n $i #chmod go+rx $i #busqueda y reemplazo del 4to octeto en el archivo de zona inversa en la ruta /var/named/chroot/var/named echo $ipoctetod for i in $ruta7a do sed $ipoctetod $i > $i.n done mv $i.n $i chmod go+rx $i 58 #busqueda y reemplazo del dato dominio en el archivo del servers.php en el hordeen la ruta var/www/html/horde/imp/config/ echo $dominio for i in $ruta14 do sed $dominio $i > $i.n done mv $i.n $i chmod go-x $i chgrp apache $i chown apache $i #busqueda y reemplazo del dato dominio en el archivo del servers.php en el hordeen la ruta /var/www/html/horde/imp/config/ echo $ips for i in $ruta14 do sed $ips $i > $i.n done mv $i.n $i chmod go-x $i chgrp apache $i chown apache $i #busqueda y reemplazo del dato dominio en el archivo del servers.php en el hordeen la ruta /var/www/html/horde/imp/config/ #echo $hosts #for i in $ruta14 #do #sed $hosts $i > $i.n #done #mv $i.n $i #chmod go-x $i #chgrp apache $i #chown apache $i #busqueda y reemplazo del dato dominio en el archivo del httpd.conf en el httpd en la ruta /etc/httpd/conf/ echo $dominio for i in $ruta15 do sed $dominio $i > $i.n done mv $i.n $i 59 chmod go-x $i #busqueda y reemplazo del dato dominio en el archivo del httpd.conf en el httpd en la ruta /etc/httpd/conf/ echo $ips for i in $ruta15 do sed $ips $i > $i.n done mv $i.n $i chmod go-x $i mkdir /etc/ssl/$dominio2/ cp -r -p /etc/ssl/$dominio1/* /etc/ssl/$dominio2/ chmod go-wrx /etc/ssl/$dominio2/ #rm -fr /etc/ssl/$dominio1/ #busqueda y reemplazo del dato dominio en el archivo del ssl.conf en el httpd (ls certificados) en la ruta /etc/httpd/conf.d/ echo $dominio for i in $ruta16 do sed $dominio $i > $i.n done mv $i.n $i chmod go-x $i #busqueda y reemplazo del dato dominio en el archivo /etc/dhcpd.conf echo "archivo /etc/dhcpd.conf" echo $dominio for i in $ruta17 do sed $dominio $i > $i.n done mv $i.n $i #busqueda y reemplazo del dato ips en el archivo /etc/dhcpd.conf echo $ips for i in $ruta17 do sed $ips $i > $i.n done mv $i.n $i 60 #busqueda y reemplazo del dato gateway en el archivo /etc/dhcpd.conf echo $gate for i in $ruta17 do sed $gate $i > $i.n done mv $i.n $i ipoct3a=`sed -n 7p $ruta17 | cut -c8-20 | sed "s/[.][.]*/:/g" | cut -f1 -d:` ipoct3b=`sed -n 7p $ruta17 | cut -c8-20 | sed "s/[.][.]*/:/g" | cut -f2 -d:` ipoct3c=`sed -n 7p $ruta17 | cut -c8-20 | sed "s/[.][.]*/:/g" | cut -f3 -d:` ipoct3d=`sed -n 7p $ruta17 | cut -c8-20 | sed "s/[.][.]*/:/g" | cut -f4 -d:` ipinv3=$ipoct3c"."$ipoct3b"."$ipoct3a ipnor3=$ipoct3a"."$ipoct3b"."$ipoct3c echo $ipoct3a echo $ipoct3b echo $ipoct3c echo $ipinv3 echo $ipnor3 ipnormal="s/$ipnor3/$ipnormal2/g" #busqueda y reemplazo del dato subnet en el archivo /etc/dhcpd.conf echo $ipnormal for i in $ruta17 do sed $ipnormal $i > $i.n done mv $i.n $i Archivo: restartservices_cmd.sh !/bin/sh # rutas de los archivos a configurar /etc/rc.d/init.d/network restart echo "Servicio NETWORK reiniciado" /etc/rc.d/init.d/sendmail restart echo " " echo "Servicio SENDMAIL reiniciado" #/etc/rc.d/init.d/MailScanner restart #echo " " #echo "Servicio MAILSCANNER reiniciado" 61 /etc/rc.d/init.d/named restart echo " " echo "Servicio NAMED reiniciado" /etc/rc.d/init.d/dhcpd restart echo " " echo "Servicio DHCPD reiniciado" /etc/rc.d/init.d/httpd reload echo " " echo "Servicio HTTPD reiniciado" echo " " echo "Reinicio de servicios exitosos" Sección administración de seguridades. Esta sección se encuentra ubicada en la ruta: /var/www/html/sw_syscomsa/webpages/seguridades/scripts, en el cual se encuentran los siguientes archivos. Archivo: copiaseguridadmultiple_cmd.sh #!/bin/bash #\ ruta1="/var/www/html/sw_syscomsa/webpages/seguridades/scripts/copiasmultiples.t xt" copiaar="/var/www/html/sw_syscomsa/webpages/seguridades/scripts/usuarioscopiad os.txt" ruta2="/home" ruta3="/var/spool/mail" ruta4="/etc/passwd" ruta5="/etc/crontab" touch /var/www/html/sw_syscomsa/webpages/seguridades/scripts/copiasmultiples.txt touch /var/www/html/sw_syscomsa/webpages/seguridades/scripts/usuarioscopiados.txt if test $1 = "x" then todosusuarios=`gawk -F: '$4>=500'\ '{print $1,$2,$3,$4}' $ruta4 | sed "s/[ ][ ]*/:/g" | cut -f1 -d:` echo $todosusuarios > $ruta1 echo $todosusuarios >> $copiaar 62 echo $2 >> $ruta1 echo $3 >> $ruta1 echo $4 >> $ruta1 echo $5 >> $ruta1 echo $6 >> $ruta1 minuto=$2 hora=$3 dias=$4 mes=$5 diasem=$6 minuto=`sed -n 2p $ruta1 | sed "s/[ ][ ]*/-/g" | cut -f1 -d-` hora=`sed -n 3p $ruta1 | sed "s/[ ][ ]*/-/g" | cut -f2 -d-` dias=`sed -n 4p $ruta1 | sed "s/[ ][ ]*/-/g" | cut -f1 -d-` mes=`sed -n 5p $ruta1 | sed "s/[ ][ ]*/-/g" | cut -f2 -d-` diasem=`sed -n 6p $ruta1 | sed "s/[ ][ ]*/-/g" | cut -f3 -d-` i=0 while [ $i -ne 1000 ] i=$[$i+1] xusu=`sed -n 1p $ruta1 | sed "s/[ ][ ]*/-/g" | cut -f$i -d-` if test -z $xusu then echo "Definicion de Copias de Seguridad realizado Exitosamente" break else echo "Definicion de Copias de Seguridad realizado Exitosamente" tar="tar -zcvf /backupmails/$xusu""backupmail.tar.gz $ruta2/$xusu $ruta3/$xusu" tar -zcvf /backupmails/$xusu""backupmail.tar.gz $ruta2/$xusu $ruta3/$xusu echo $minuto" "$hora" "$dias" "$mes" "$diasem" root "$tar >> $ruta5 fi done #/etc/rc.d/init.d/crond restart else nombreusuario=`gawk -F: '$4>=500'\ '{print $1,$2,$3,$4}' $ruta4 | grep "$1" | sed "s/[ ][ ]*/:/g" | cut -f1 -d:` if test -z $nombreusuario then echo "La Cuenta de Usuario no Existe" else 63 echo $1 > $ruta1 echo $1 >> $copiaar echo $2 >> $ruta1 echo $3 >> $ruta1 echo $4 >> $ruta1 echo $5 >> $ruta1 echo $6 >> $ruta1 minuto=$2 hora=$3 dias=$4 mes=$5 diasem=$6 minuto=`sed -n 2p $ruta1 | sed "s/[ ][ ]*/-/g" | cut -f1 -d-` hora=`sed -n 2p $ruta1 | sed "s/[ ][ ]*/-/g" | cut -f2 -d-` dias=`sed -n 3p $ruta1 | sed "s/[ ][ ]*/-/g" | cut -f1 -d-` mes=`sed -n 3p $ruta1 | sed "s/[ ][ ]*/-/g" | cut -f2 -d-` diasem=`sed -n 3p $ruta1 | sed "s/[ ][ ]*/-/g" | cut -f3 -d-` tar="tar -zcvf /backupmails/$1backupmail.tar.gz $ruta2/$1 $ruta3/$1" tar -zcvf /backupmails/$1""backupmail.tar.gz $ruta2/$1 $ruta3/$1 echo "Realizado Exitosamente la copia de seguridad" echo $minuto" "$hora" "$dias" "$mes" "$diasem" root "$tar >> $ruta5 # /etc/rc.d/init.d/crond restart fi fi Archivo: copiaseguridadsimple_cmd.sh #!/bin/bash #\ ruta1="/var/www/html/sw_syscomsa/webpages/seguridades/scripts/copiassimples.txt " copiaar="/var/www/html/sw_syscomsa/webpages/seguridades/scripts/usuarioscopiad os.txt" ruta2="/home" ruta3="/var/spool/mail" ruta4="/etc/passwd" ruta5="/etc/crontab" touch /var/www/html/sw_syscomsa/webpages/seguridades/scripts/copiassimples.txt 64 touch /var/www/html/sw_syscomsa/webpages/seguridades/scripts/usuarioscopiados.txt if test $1 = "x" then todosusuarios=`gawk -F: '$4>=500'\ '{print $1,$2,$3,$4}' $ruta4 | sed "s/[ ][ ]*/:/g" | cut -f1 -d:` echo $todosusuarios > $ruta1 echo $todosusuarios >> $copiaar # echo $2 >> $ruta1 # echo $3 >> $ruta1 # # # # # minuto=`sed -n 2p $ruta1 | sed "s/[ ][ ]*/-/g" | cut -f1 -d-` hora=`sed -n 2p $ruta1 | sed "s/[ ][ ]*/-/g" | cut -f2 -d-` dias=`sed -n 3p $ruta1 | sed "s/[ ][ ]*/-/g" | cut -f1 -d-` mes=`sed -n 3p $ruta1 | sed "s/[ ][ ]*/-/g" | cut -f2 -d-` diasem=`sed -n 3p $ruta1 | sed "s/[ ][ ]*/-/g" | cut -f3 -d-` i=0 while [ $i -ne 1000 ] do i=$[$i+1] xusu=`sed -n 1p $ruta1 | sed "s/[ ][ ]*/-/g" | cut -f$i -d-` if test -z $xusu then echo "Definicion de Copias de Seguridad realizado Exitosamente" break else echo "Definicion de Copias de Seguridad realizado Exitosamente" tar="tar -zcvf /backupmails/$xusu""backupmail.tar.gz $ruta2/$xusu $ruta3/$xusu" tar -zcvf /backupmails/$xusu""backupmail.tar.gz $ruta2/$xusu $ruta3/$xusu # echo $minuto" "$hora" "$dias" "$mes" "$diasem" root "$tar >> $ruta5 fi done #/etc/rc.d/init.d/crond restart else nombreusuario=`gawk -F: '$4>=500'\ '{print $1,$2,$3,$4}' $ruta4 | grep "$1" | sed "s/[ ][ ]*/:/g" | cut -f1 -d:` if test -z $nombreusuario then echo "La Cuenta de Usuario no Existe" else echo $1 > $ruta1 65 echo $1 >> $copiaar # echo $2 >> $ruta1 # echo $3 >> $ruta1 # # # # # minuto=`sed -n 2p $ruta1 | sed "s/[ ][ ]*/-/g" | cut -f1 -d-` hora=`sed -n 2p $ruta1 | sed "s/[ ][ ]*/-/g" | cut -f2 -d-` dias=`sed -n 3p $ruta1 | sed "s/[ ][ ]*/-/g" | cut -f1 -d-` mes=`sed -n 3p $ruta1 | sed "s/[ ][ ]*/-/g" | cut -f2 -d-` diasem=`sed -n 3p $ruta1 | sed "s/[ ][ ]*/-/g" | cut -f3 -d-` tar="tar -zcvf /backupmails/$1backupmail.tar.gz $ruta2/$1 $ruta3/$1" tar -zcvf /backupmails/$1""backupmail.tar.gz $ruta2/$1 $ruta3/$1 echo "Realizado Exitosamente la copia de seguridad" # echo $minuto" "$hora" "$dias" "$mes" "$diasem" root "$tar >> $ruta5 #/etc/rc.d/init.d/crond restart fi fi Archivo: restaurarmail_cmd.sh #!/bin/bash #\ ruta1="/var/www/html/sw_syscomsa/webpages/seguridades/scripts/restaurar.txt" ruta2="/home" ruta3="/var/spool/mail" ruta4="/etc/passwd" touch /var/www/html/sw_syscomsa/webpages/seguridades/scripts/restaurar.txt nombreusuario=`gawk -F: '$4>=500'\ '{print $1,$2,$3,$4}' $ruta4 | grep "$1" | sed "s/ [ ][ ]*/:/g" | cut -f1 -d:` if test -z $nombreusuario then echo "La Cuenta de Usuario no Existe" else cd /backupmails/; tar -xzf /backupmails/$1""backupmail.tar.gz if test $2 = "ALL" then echo "Se va a proceder a la restauracion" # cd /backupmails/; tar -xvzf /backupmails/$1""backupmail.tar.gz cp -frp /backupmails/home/$1/ /home/ cp -frp /backupmails/var/spool/mail/$1 /var/spool/mail/ echo "Se va a proceder a la restauracion" echo "Realizado Exitosamente la restauracion TOTAL de seguridad" else 66 if test $2 = "INB" then cp -frp /backupmails/home/$1/mail/inbox $ruta2/$1/mail/inbox cp -frp /backupmails/var/spool/mail/$1 $ruta3/ echo "Realizado Exitosamente la restauracion de la carpeta INBOX" else if test $2 = "ENV" then cp -frp /backupmails/home/$1/mail/Enviados $ruta2/$1/mail/Enviados cp -frp /backupmails/var/spool/mail/$1 $ruta3/ echo "Realizado Exitosamente la restauracion de la carpeta Enviados" else if test $2 = "BOR" then cp -frp /backupmails/home/$1/mail/Borrador $ruta2/$1/mail/Borrador cp -frp /backupmails/var/spool/mail/$1 $ruta3/ echo "Realizado Exitosamente la restauracion de la carpeta Borrador" else if test $2 = "PAP" then cp -frp /backupmails/home/$1/mail/Papelera $ruta2/$1/mail/Papelera cp -frp /backupmails/var/spool/mail/$1 $ruta3/ echo "Realizado Exitosamente la restauracion de la carpeta Papelera" else if test $2 = "SPA" then cp -frp /backupmails/home/$1/mail/Spam $ruta2/$1/mail/Spam cp -frp /backupmails/var/spool/mail/$1 $ruta3/ echo "Realizado Exitosamente la restauracion de la carpeta Spam" fi fi fi fi fi fi fi 2.4. Codigo Php del proyecto. Sección administración interfaz. Esta sección se encuentra ubicada en la ruta: /var/www/html/sw_syscomsa/webpages/administracio_interfaz/ en el cual se encuentran los siguientes archivos. Archivo: pw_inicio_sesion_correo.php <html> <head> <title>Tareas de Inicio de Sesion en Correo Parte I</title> <script> //FUNCION PARA VALIDAR NUMEROS function isNum(q) 67 { for ( i = 0; i < q.length; i++ ) { //con el for y la sentencia if( q.charAt(i) = " " ){... ..ya me queda lista para validar los espacios en blanco, de lo contrario: valor = parseInt(q.charAt(i)); // me permite convertir letra por letra en numero y si no es un numero entonces no regresa nada if (isNaN(valor)) { return false } } return true } //FUNCION QUE LLAMA A LA DE VALIDAR NUMEROS, TRABAJA CON LA FUNCION isNum function validarNumeroEntero(F) { if (isNum(F) == false) { alert("ES NECESARIO QUE EL VALOR INICIAL SEA UN NUMERO ENTERO "+F); return false; }else { return true } } //busca caracteres que no sean espacio en blanco en una cadena function vacio(p) { if (p == "") {alert("ERROR: No puede dejar este campo vacio") return false } return true } //valida que el campo no este vacio y no tenga solo espacios en blanco function validavacio(h) { if( vacio(h) == false ) 68 { //alert("Introduzca un cadena de texto correctamente.") return false } else { //alert("OK") return true } } //VALIDA TODOS LOS CAMPOS DEL FORMULARIO function validarFormulario() { if (validarNumeroEntero(document.myform.deleteatttachamentsmonthlykeep.value) == false) { return false; } if (validavacio(document.myform.initialpage.value) == false) {return false; } if (validavacio(document.myform.purgesentmailinterval.value) == false) { return false; } return true; } </script> <style type="text/css"> body { background-color: #FFFFFF; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 18px; font-style: italic; line-height: 24px; color: #99FF99 #003300 #003300 #99FF99; margin-bottom: 0px; border-color: #0000CC; } td, th { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 18px; color: #3333FF; } 69 a {font-size: 12px; color: #336600; } form { background-color: #FFFFFF; background-image: url(../imagenes/Fondos/a16.jpg); } .title { font-family: "Comic Sans MS", Courier; font-size: 18px; line-height: 20px; background-color: #FFFFCC; color: #0000FF;} .subtitle { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 16px; line-height: 30px; color: #003300;} .header { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 20px; background-color: #CCFFFF; color: #FFFF33; } .nav { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 14px; font-weight: normal; background-color: #CCFF99; } .navLink { font-family: Arial, Helvetica, sans-serif; font-size: 14px; font-weight: bold; background-color: #DEDECA; } .sidebar { font-family: "Comic Sans MS", Courier; font-size: 14px; 70 line-height: normal; padding: 3px; background-color: #33CCFF; color: #0000CC; } .sidebarHeader { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 14px; line-height: 18px; color: #003300; background-color: #FFFF66; } .sidebarFooter { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 18px; background-color: #FFFF99; font-style: italic; } .legal { font-family: Arial, Helvetica, sans-serif; font-size: 9px; color: #333333; } .box1 { border-width: thin; border-color: #99FF99 #003300 #003300 #99FF99; border-style: double; } .promo { font-family: "Verdana", Times, serif; color: #0000FF; font-size: 14px; font-weight: italic; } .footer { font-family: Arial, Helvetica, sans-serif; font-size: 24px; font-weight: bold; 71 line-height: normal; color: #F3F2F9; background-color: #3B4D61; } .dingbat { font-family: Arial, Helvetica, sans-serif; background-color: #FFFFFF; color: #660000; font-weight: bolder; font-size: 20px; } .titlebar { font-family: "Times New Roman", Times, serif; font-size: 9px; color: #FFFFFF; background-color: #336699; } input.big { width: 100px; } input.small { width: 50px; } .warning { color: #ff0000; } .required { color: #0000ff; } .fieldLabel { text-align: right; color: BLUE; } </style> </head> <body> <?php require_once('/var/www/html/sw_syscomsa/FormBuilder.php'); $form = new FormBuilder(); 72 $iniapli = array ('INBOX'=>'Entrada', 'Borrador'=>'Borrador', 'Enviados'=>'Enviados', 'Papelera'=>'Papelera', 'Spam'=>'Spam'); $delfrec = array ('1'=>'Anualmente', '2'=>'Mensualmente', '3'=>'Semanalmente', '4'=>'Diariamente', '5'=>'Cada inicio de sesión'); $sino = array ('1' => 'SI', '0' => 'NO'); $sino2 = array ('true' => 'SI', 'false' => 'NO'); $form->addField(new LabelFieldtitulo('Tareas de Inicio de Sesión de Correo del Horde PARTE I', 'inicisesion')); $form->addField(new PopupField('Vista o buzon mostrados al iniciar Sesion: ', 'initialpage' , true, $iniapli)); $form->addField(new RadioButtonField('¿Eliminar de los correos enviados los mensajes antiguos?', 'purgesentmail',true, $sino)); $form->addField(new PopupField('Frecuencia de eliminacion del correo enviado: ', 'purgesentmailinterval' , true, $delfrec)); $form->addField(new RadioButtonField('¿Eliminar adjuntos vinculados antiguos al inicio del mes?', 'deleteatttachamentsmonthly',true, $sino)); $form->addField(new TextField('Meses para guardar los adjuntos vinculados antiguos', 'deleteatttachamentsmonthlykeep', 3,1,3)); $form->addField(new SubmitFieldGroup(array('save' => 'Grabar', 'cancel' => 'Cancel'))); if ($form->isSubmitted('save')) { if($form->validate()) { $cmd = "sudo /var/www/html/sw_syscomsa/webpages/administracio_interfaz/scripts/tareainicioses_ cmd.sh ".$form->getValue('initialpage')." ".$form->getValue('purgesentmail')." ". $form->getValue('purgesentmailinterval')." ".$form>getValue('deleteatttachamentsmonthly')." ".$form>getValue('deleteatttachamentsmonthlykeep')." ".$form->getValue('mantenimiento')." ".$form->getValue('confmanteni'); $tmp = exec($cmd,$output,$status); if ($status == 0) { echo "Definicion de cuotas realizado Exitosamente<br/>"; $form->setValue('initialpage',""); $form->setValue('purgesentmail',""); 73 $form->setValue('purgesentmailinterval',""); $form->setValue('deleteatttachamentsmonthly',""); $form->setValue('deleteatttachamentsmonthlykeep',""); $form->setValue('mantenimiento',""); $form->setValue('confmanteni',""); } else { echo "Definicion de cuotas NO realizado<br/>"; foreach ($output as $line) { echo $line."<br/>";} } $form->display(); }else { echo "Ingrese los campos correctamente<br/>"; $form->display(); } } else if ($form->isSubmitted('cancel')) { header("Location: /sw_syscomsa/contenido.php"); } else { $form->display(); } ?> </body> </html> Archivo: pw_inicio_sesion_correo2.php <html> <head> <title>Tareas de Inicio de Sesion en Correo Parte II</title> <script> //FUNCION PARA VALIDAR NUMEROS function isNum(q) { for ( i = 0; i < q.length; i++ ) { //con el for y la sentencia if( q.charAt(i) = " " ){... ..ya me queda lista para validar los espacios en blanco, de lo contrario: valor = parseInt(q.charAt(i)); // me permite convertir letra por letra en numero y si no es un numero entonces no regresa nada if (isNaN(valor)) { return false 74 } } return true } //FUNCION QUE LLAMA A LA DE VALIDAR NUMEROS, TRABAJA CON LA FUNCION isNum function validarNumeroEntero(F) { if (isNum(F) == false) { alert("ES NECESARIO QUE EL VALOR INICIAL SEA UN NUMERO ENTERO "+F); return false; }else { return true } } //busca caracteres que no sean espacio en blanco en una cadena function vacio(p) { if (p == "") { alert("ERROR: No puede dejar este campo vacio") return false } return true } //valida que el campo no este vacio y no tenga solo espacios en blanco function validavacio(h) { if( vacio(h) == false ) { return false } else { return true } } 75 //VALIDA TODOS LOS CAMPOS DEL FORMULARIO function validarFormulario() { if (validavacio(document.myform.initialpage.value) == false) { return false; } if (validavacio(document.myform.purgesentmailinterval.value) == false) { return false; } return true; } </script> <style type="text/css"> body { background-color: #FFFFFF; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 18px; font-style: italic; line-height: 24px; color: #99FF99 #003300 #003300 #99FF99; margin-bottom: 0px; border-color: #0000CC; } td, th { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 18px; color: #3333FF; } a{ font-size: 12px; color: #336600; } form { background-color: #FFFFFF; background-image: url(../imagenes/Fondos/a16.jpg); 76 } .title { font-family: "Comic Sans MS", Courier; font-size: 18px; line-height: 20px; background-color: #FFFFCC; color: #0000FF;} .subtitle { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 16px; line-height: 30px; color: #003300;} .header { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 20px; background-color: #CCFFFF; color: #FFFF33; } .nav { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 14px; font-weight: normal; background-color: #CCFF99; } .navLink { font-family: Arial, Helvetica, sans-serif; font-size: 14px; font-weight: bold; background-color: #DEDECA; } .sidebar { font-family: "Comic Sans MS", Courier; font-size: 14px; line-height: normal; padding: 3px; background-color: #33CCFF; color: #0000CC; } 77 .sidebarHeader { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 14px; line-height: 18px; color: #003300; background-color: #FFFF66; } .sidebarFooter { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 18px; background-color: #FFFF99; font-style: italic; } .legal { font-family: Arial, Helvetica, sans-serif; font-size: 9px; color: #333333; } .box1 { border-width: thin; border-color: #99FF99 #003300 #003300 #99FF99; border-style: double; } .promo { font-family: "Verdana", Times, serif; color: #0000FF; font-size: 14px; font-weight: italic; } .footer { font-family: Arial, Helvetica, sans-serif; font-size: 24px; font-weight: bold; line-height: normal; color: #F3F2F9; background-color: #3B4D61; } 78 .dingbat { font-family: Arial, Helvetica, sans-serif; background-color: #FFFFFF; color: #660000; font-weight: bolder; font-size: 20px; } .titlebar { font-family: "Times New Roman", Times, serif; font-size: 9px; color: #FFFFFF; background-color: #336699; } input.big { width: 100px; } input.small { width: 50px; } .warning { color: #ff0000; } .required { color: #0000ff; } .fieldLabel { text-align: right; color: BLUE; } </style> </head> <body> <?php require_once('/var/www/html/sw_syscomsa/FormBuilder.php'); $form = new FormBuilder(); $delfrec = array ('1'=>'Anualmente', '2'=>'Mensualmente', '3'=>'Semanalmente', 79 '4'=>'Diariamente', '5'=>'Cada inicio de sesión'); $sino = array ('1' => 'SI', '0' => 'NO'); $form->addField(new LabelFieldtitulo('Tareas de Inicio de Sesión de Correo del Horde PARTE II', 'inicisesion')); $form->addField(new RadioButtonField('¿Eliminar de la papelera los mensajes antiguos?', 'purgetrash',true, $sino)); $form->addField(new PopupField('Frecuencia de eliminacion de la papelera: ', 'purgetrashinterval' , true, $delfrec)); $form->addField(new RadioButtonField('¿Eliminar de la carpeta Spam los mensajes antiguos?', 'purgespam',true, $sino)); $form->addField(new PopupField('Frecuencia de eliminacion de la carpeta Spam: ', 'purgespaminterval' , true, $delfrec)); $form->addField(new SubmitFieldGroup(array('save' => 'Grabar', 'cancel' => 'Cancel'))); if ($form->isSubmitted('save')) { if($form->validate()) { $cmd = "sudo /var/www/html/sw_syscomsa/webpages/administracio_interfaz/scripts/tareainicioses2 _cmd.sh ".$form->getValue('purgetrash')." ".$form->getValue('purgetrashinterval')." ".$form->getValue('purgespam')." ".$form->getValue('purgespaminterval'); #echo $cmd; $tmp = exec($cmd,$output,$status); #echo "<br/>".$tmp."<br/>"; if ($status == 0) { #echo "<br/>".$tmp."<br/>"; echo "Definicion de cuotas realizado Exitosamente<br/>"; $form->setValue('purgetrash',false); $form->setValue('purgetrashinterval',""); //$form->setValue('purgetrashkeep',""); $form->setValue('purgespam',false); $form->setValue('purgespaminterval',""); //$form->setValue('purgespamkeep',""); } else { echo "Definicion de cuotas NO realizado<br/>"; foreach ($output as $line) { 80 echo $line."<br/>";} } $form->display(); }else { echo "Ingrese los campos correctamente<br/>"; $form->display(); } } else if ($form->isSubmitted('cancel')) { header("Location: /sw_syscomsa/contenido.php"); } else { $form->display(); } ?> </form> </body> </html> Archivo: pw_sele_idiomahora.php <html> <head> <title>Definicion del Idioma y de la Hora</title> <script> //busca caracteres que no sean espacio en blanco en una cadena function vacio(o) { if (o == "") { alert("ERROR: No puede dejar este campo vacio") return false } return true } //valida que el campo no este vacio y no tenga solo espacios en blanco function validatexto(F) { if( vacio(F) == false ) { //alert("Introduzca un cadena de texto correctamente.") return false } else 81 { //alert("OK") return true } } //VALIDA TODOS LOS CAMPOS DEL FORMULARIO function validarFormulario() { if (validatexto(document.myform.idioma.value) == false) { return false; } if (validatexto(document.myform.zonahoraria.value) == false) { return false; } if (validatexto(document.myform.fecha.value) == false) { return false; } if (validatexto(document.myform.diaweek.value) == false) { return false; } return true; } </script> <style type="text/css"> body { background-color: #FFFFFF; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 18px; font-style: italic; line-height: 24px; color: #99FF99 #003300 #003300 #99FF99; margin-bottom: 0px; border-color: #0000CC; } td, th { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 18px; 82 color: #3333FF; } a{ font-size: 12px; color: #336600; } form { background-color: #FFFFFF; background-image: url(../imagenes/Fondos/a16.jpg); } .title { font-family: "Comic Sans MS", Courier; font-size: 18px; line-height: 20px; background-color: #FFFFCC; color: #0000FF;} .subtitle { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 16px; line-height: 30px; color: #003300;} .header { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 20px; background-color: #CCFFFF; color: #FFFF33; } .nav { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 14px; font-weight: normal; background-color: #CCFF99; } .navLink { font-family: Arial, Helvetica, sans-serif; font-size: 14px; font-weight: bold; background-color: #DEDECA; 83 } .sidebar { font-family: "Comic Sans MS", Courier; font-size: 14px; line-height: normal; padding: 3px; background-color: #33CCFF; color: #0000CC; } .sidebarHeader { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 14px; line-height: 18px; color: #003300; background-color: #FFFF66; } .sidebarFooter { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 18px; background-color: #FFFF99; font-style: italic; } .legal { font-family: Arial, Helvetica, sans-serif; font-size: 9px; color: #333333; } .box1 { border-width: thin; border-color: #99FF99 #003300 #003300 #99FF99; border-style: double; } .promo { font-family: "Verdana", Times, serif; color: #0000FF; font-size: 14px; font-weight: italic; 84 } .footer { font-family: Arial, Helvetica, sans-serif; font-size: 24px; font-weight: bold; line-height: normal; color: #F3F2F9; background-color: #3B4D61; } .dingbat { font-family: Arial, Helvetica, sans-serif; background-color: #FFFFFF; color: #660000; font-weight: bolder; font-size: 20px; } .titlebar { font-family: "Times New Roman", Times, serif; font-size: 9px; color: #FFFFFF; background-color: #336699; } input.big { width: 100px; } input.small { width: 50px; } .warning { color: #ff0000; } .required { color: #0000ff; } .fieldLabel { text-align: right; color: BLUE; } </style> </head> 85 <body> <?php require_once('/var/www/html/sw_syscomsa/FormBuilder.php'); $form = new FormBuilder(); $diase = array ('0'=>'Domingo','1'=>'Lunes'); $idio = array ('ar_OM' => '&#x202d;Arabic (Oman) &#x202e; (&#x0627;&#x0644;&#x0639;&#x0631;&#x0628;&#x064a;&#x0629;)', 'ar_SY' => '&#x202d;Arabic (Syria) &#x202e; (&#x0627;&#x0644;&#x0639;&#x0631;&#x0628;&#x064a;&#x0629;)', 'id_ID' => 'Bahasa Indonesia','bs_BA' => 'Bosanski','bg_BG' => '&#x202d;Bulgarian (&#x0411;&#x044a;&#x043b;&#x0433;&#x0430;&#x0440;&#x0441;&#x043a;&#x 0438;)', 'ca_ES' => 'Catal&#xe0;', 'zh_CN' => '&#x202d;Chinese (Simplified) (&#x7b80;&#x4f53;&#x4e2d;&#x6587;)', 'zh_TW' => '&#x202d;Chinese (Traditional) (&#x6b63;&#x9ad4;&#x4e2d;&#x6587;)', 'cs_CZ' => '&#x202d;Czech (&#x010c;esky)', 'da_DK' => 'Dansk', 'de_DE' => 'Deutsch', 'en_US' => '&#x202d;English (American)', 'en_GB' => '&#x202d;English (British)', 'en_CA' => '&#x202d;English (Canadian)', 'es_ES' => 'Espa&#xf1;ol', 'et_EE' => 'Eesti', 'fr_FR' => 'Fran&#xe7;ais', 'gl_ES' => 'Galego', 'el_GR' => '&#x202d;Greek (&#x0395;&#x03bb;&#x03bb;&#x03b7;&#x03bd;&#x03b9;&#x03ba;&#x03ac;)', 'he_IL' => '&#x202d;Hebrew &#x202e; (&#x05E2;&#x05D1;&#x05E8;&#x05D9;&#x05EA;)', 'is_IS' => '&#xcd;slenska', 'it_IT' => 'Italiano', 'ja_JP' => '&#x202d;Japanese (&#x65e5;&#x672c;&#x8a9e;)', 'km_KH' => '&#x202d;Khmer (&#x1781;&#x17d2;&#x1798;&#x17c2;&#x179a;)', 'ko_KR' => '&#x202d;Korean (&#xd55c;&#xad6d;&#xc5b4;)', 'lv_LV' => 'Latvie&#x0161;u', 'lt_LT' => 'Lietuvi&#x0173;', 'mk_MK' => '&#x202d;Macedonian (&#x041c;&#x0430;&#x043a;&#x0435;&#x0434;&#x043e;&#x043d;&#x0441;&#x 043a;&#x0438;)', 'hu_HU' => 'Magyar', 'nl_NL' => 'Nederlands', 'nb_NO' => 'Norsk bokm&#xe5;l', 'nn_NO' => 'Norsk nynorsk', 'fa_IR' => '&#x202d;Persian &#x202e; (&#x0641;&#x0627;&#x0631;&#x0633;&#x0649;)', 'pl_PL' => 'Polski', 'pt_PT' => 'Portugu&#xea;s', 'pt_BR' => 'Portugu&#xea;s Brasileiro', 86 'ro_RO' => 'Rom&#xe2;n&#xe4;', 'ru_RU' => '&#x202d;Russian (&#x0420;&#x0443;&#x0441;&#x0441;&#x043a;&#x0438;&#x0439;)', 'sk_SK' => '&#x202d;Slovak (Sloven&#x010d;ina)', 'sl_SI' => '&#x202d;Slovenian (Sloven&#x0161;&#x010d;ina)', 'fi_FI' => 'Suomi', 'sv_SE' => 'Svenska', 'th_TH' => '&#x202d;Thai (&#x0e44;&#x0e17;&#x0e22;)', 'tr_TR' => 'T&#xfc;rk&#xe7;e', 'uk_UA' => '&#x202d;Ukrainian (&#x0423;&#x043a;&#x0440;&#x0430;&#x0457;&#x043d;&#x0441;&#x044c;&#x 043a;&#x0430;)', ); $zona = array ( 'Africa'."\\"."\\".'/Abidjan' =>'Africa/Abidjan', 'Africa."\\"."\\"./Accra' => 'Africa/Accra', 'Africa."\\"."\\"./Algiers' => 'Africa/Algiers', 'Africa."\\"."\\"./Asmera' => 'Africa/Asmera', 'Africa."\\"."\\"./Bamako' => 'Africa/Bamako', 'Africa."\\"."\\"./Bangui' => 'Africa/Bangui', 'Africa."\\"."\\"./Banjul' => 'Africa/Banjul', 'Africa."\\"."\\"./Bissau' => 'Africa/Bissau', 'Africa."\\"."\\"./Blantyre' => 'Africa/Blantyre', 'Africa."\\"."\\"./Brazzaville' => 'Africa/Brazzaville', 'Africa."\\"."\\"./Bujumbura' => 'Africa/Bujumbura', 'Africa."\\"."\\"./Cairo' => 'Africa/Cairo', 'Africa."\\"."\\"./Casablanca' => 'Africa/Casablanca', 'America."\\"."\\"./Adak' => 'America/Adak', 'America."\\"."\\"./Aruba' => 'America/Aruba', 'America."\\"."\\"./Asuncion' => 'America/Asuncion', 'America.pw_opciones_visualizacion.php"\\"."\\"./Barbados' => 'America/Barbados', 'America."\\"."\\"./Belem' => 'America/Belem', 'America."\\"."\\"./Belize' => 'America/Belize', 'America."\\"."\\"./Bogota' => 'America/Bogota', 'America."\\"."\\"./Cancun' => 'America/Cancun', 'America."\\"."\\"./Caracas' => 'America/Caracas', 'America."\\"."\\"./Catamarca' => 'America/Catamarca', 'America."\\"."\\"./Cayman' => 'America/Cayman', 'America."\\"."\\"./Chicago' => 'America/Chicago', 'America."\\"."\\"./Chihuahua' => 'America/Chihuahua', 'America."\\"."\\"./Cordoba' => 'America/Cordoba', 'America."\\"."\\"./Guayaquil' => 'America/Guayaquil', 'America."\\"."\\"./Lima' => 'America/Lima', 'America."\\"."\\"./Managua' => 'America/Managua', 'America."\\"."\\"./Monterrey' => 'America/Monterrey', 'America."\\"."\\"./Panama' => 'America/Panama', 'America."\\"."\\"./Santiago' => 'America/Santiago', 87 'Asia."\\"."\\"./Bangkok' => 'Asia/Bangkok', 'Asia."\\"."\\"./Bahrain' => 'Asia/Bahrain', 'Asia."\\"."\\"./Dubai' => 'Asia/Dubai', 'Asia."\\"."\\"./Gaza' => 'Asia/Gaza', 'Asia."\\"."\\"./Jerusalem' => 'Asia/Jerusalem', 'Asia."\\"."\\"./Kabul' => 'Asia/Kabul', 'Asia."\\"."\\"./Kuwait' => 'Asia/Kuwait', 'Asia."\\"."\\"./Seoul' => 'Asia/Seoul', 'Asia."\\"."\\"./Shanghai' => 'Asia/Shanghai', 'Asia."\\"."\\"./Singapore' => 'Asia/Singapore', 'Asia."\\"."\\"./Tehran' => 'Asia/Tehran', 'Australia."\\"."\\"./Adelaide' => 'Australia/Adelaide', 'Australia."\\"."\\"./Brisbane' => 'Australia/Brisbane', 'Australia."\\"."\\"./Melbourne' => 'Australia/Melbourne', 'Australia."\\"."\\"./Sydney' => 'Australia/Sydney', 'Europe."\\"."\\"./Amsterdam' => 'Europe/Amsterdam', 'Europe."\\"."\\"./Athens' => 'Europe/Athens', 'Europe."\\"."\\"./Belgrade' => 'Europe/Belgrade', 'Europe."\\"."\\"./Berlin' => 'Europe/Berlin', 'Europe."\\"."\\"./Brussels' => 'Europe/Brussels', 'Europe."\\"."\\"./Budapest' => 'Europe/Budapest', 'Europe."\\"."\\"./Copenhagen' => 'Europe/Copenhagen', 'Europe."\\"."\\"./Dublin' => 'Europe/Dublin', 'Europe."\\"."\\"./Helsinki' => 'Europe/Helsinki', 'Europe."\\"."\\"./London' => 'Europe/London', 'Europe."\\"."\\"./Luxembourg' => 'Europe/Luxembourg', 'Europe."\\"."\\"./Madrid' => 'Europe/Madrid', 'Europe."\\"."\\"./Monaco' => 'Europe/Monaco', 'Europe."\\"."\\"./Moscow' => 'Europe/Moscow', 'Europe."\\"."\\"./Oslo' => 'Europe/Oslo', 'Europe."\\"."\\"./Paris' => 'Europe/Paris'); $fecha = array( '%x' => strftime('%x'), '%Y-%m-%d' => strftime('%Y-%m-%d'), '%d-%m-%Y' => strftime('%d-%m-%Y'), '%A-%B-%d,%Y' => strftime('%A-%B-%d,%Y'), '%A,%d-%B,%Y' => strftime('%A,%d-%B,%Y'), '%a,%b-%e,%Y' => strftime('%a,%b-%e,%Y'), '%a,%b-%e,%y' => strftime('%a,%b-%e,%y'), '%a,%b-%e' => strftime('%a,%b-%e'), '%a,%e-%b-%Y' => strftime('%a,-%e-%b-%Y'), '%a,%e-%b-%y' => strftime('%a,%e-%b%y'), '%a-%d-%b-%Y' => strftime ('%a-%d-%b-%Y'), '%a-%x' => strftime ('%a-%x'), 88 '%a-%Y-%m-%d' => strftime ('%a-%Y-%m-%d'), '%e-%b-%Y' => strftime('%e-%b-%Y'), '%e.%b-%Y' => strftime('%e.%b-%Y'), '%e.%m-%Y' => strftime('%e.%m-%Y'), '%e.%m.' => strftime('%e.%m.'), '%e.%B' => strftime('%e.%B'), '%e.%B-%Y' => strftime('%e.%B-%Y'), '%e.%B-%y' => strftime('%e.%B-%y'), '%B-%e,%Y' => strftime('%B-%e,%Y')); $sino = array ('true' => 'SI', 'false' => 'NO'); $form->addField(new LabelFieldtitulo('Definición del Idioma y de la Hora', 'defidihora')); $form->addField(new PopupField('Seleccione el Idioma Preferido:', 'idioma',true, $idio)); $form->addField(new PopupField('Zona Horaria actual:', 'zonahoraria',true, $zona)); $form->addField(new RadioButtonField('¿Mostrar en formato de 24 Horas?', 'timeformat',true, $sino)); $form->addField(new PopupField('Elija como mostrar la fecha', 'fecha',true, $fecha)); $form->addField(new PopupField('Primer dia de la Semana: ', 'diaweek' ,true, $diase)); $form->addField(new SubmitFieldGroup(array('save' => 'Grabar', 'cancel' => 'Cancel'))); if ($form->isSubmitted('save')) { //$form->validate(); if($form->validate()) /*if(($form->getValue('idioma') == true) and ($form>getValue('timeformat') == true) and ($form->getValue('zonahoraria') == true)and ($form->getValue('fecha') == true)and ($form->getValue('diaweek') == true))*/ { /*$var= $form->getValue('rutaimagen'); echo $var;*/ $cmd = "sudo /var/www/html/sw_syscomsa/webpages/administracio_interfaz/scripts/idiomahora_c md.sh ".$form->getValue('idioma')." ".$form->getValue('zonahoraria')." ".$form>getValue('timeformat')." ".$form->getValue('fecha')." ".$form->getValue('diaweek'); 89 #echo $cmd; $tmp = exec($cmd,$output,$status); #echo "<br/>".$tmp."<br/>"; if ($status == 0) { #echo "<br/>".$tmp."<br/>"; echo "Definicion de las opciones de Idioma y hora realizado Exitosamente<br/>"; $form->setValue('idioma',""); $form->setValue('timeformat',false); $form->setValue('zonahoraria',""); $form->setValue('fecha',""); $form->setValue('diaweek',""); } else { echo "Definicion de cuotas NO realizado<br/>"; foreach ($output as $line) { echo $line."<br/>";} } $form->display(); }else { echo "Ingrese los campos correctamente<br/>"; $form->display(); } } else if ($form->isSubmitted('cancel')) { header("Location: /sw_syscomsa/contenido.php"); } else { $form->display(); } ?> </body> </html> Archivo: pw_opciones_visualizacion.php <html> <head> <title>Opciones de Visualizacion del HORDE</title> 90 <script> //FUNCION PARA VALIDAR NUMEROS function isNum(q) { for ( i = 0; i < q.length; i++ ) { //con el for y la sentencia if( q.charAt(i) = " " ){... ..ya me queda lista para validar los espacios en blanco, de lo contrario: valor = parseInt(q.charAt(i)); // me permite convertir letra por letra en numero y si no es un numero entonces no regresa nada if (isNaN(valor)) { return false } } return true } //FUNCION QUE LLAMA A LA DE VALIDAR NUMEROS, TRABAJA CON LA FUNCION isNum function validarNumeroEntero(F) { if (isNum(F) == false) { alert("ES NECESARIO QUE EL VALOR INICIAL SEA UN NUMERO ENTERO "+F); return false; }else { return true } } //busca caracteres que no sean espacio en blanco en una cadena function vacio(p) { if (p == "") { alert("ERROR: No puede dejar este campo vacio") return false } return true 91 } //valida que el campo no este vacio y no tenga solo espacios en blanco function validavacio(h) { if( vacio(h) == false ) { //alert("Introduzca un cadena de texto correctamente.") return false } else { //alert("OK") return true } } //busca caracteres que no sean espacio en blanco en una cadena function vacio3(a) { var caract_extra=" " var ubicacion var enter = " " var caracteres = " ÑñáéíóúÁÉÍÓÚàèìòùÀÈÌÒÙºª!|@·#$~ %½¬&{([)]=}?'¡~¿+]*`[^'·;,}çÇ" + String.fromCharCode(13) + enter + caract_extra var contador = 0 for (var i=0; i < a.length; i++) { if ( a.charAt(i) != "" ) { ubicacion = a.substring(i, i + 1) if (caracteres.indexOf(ubicacion) == -1) { contador++ } else { alert("ERROR: No se acepta el caracter '" + ubicacion + "'.") return false } } } return true } //valida que el campo no este vacio y no tenga solo espacios en blanco 92 function validatexto(F) { if( vacio3(F) == false ) { //alert("Introduzca un cadena de texto correctamente.") return false } else { //alert("OK") return true } } //VALIDA TODOS LOS CAMPOS DEL FORMULARIO function validarFormulario() { if (validarNumeroEntero(document.myform.anchomenu.value) == false) { return false; } if (validavacio(document.myform.aplicacion.value) == false) { return false; } if (validavacio(document.myform.themes.value) == false) { return false; } if (validavacio(document.myform.vistapor.value) == false) { return false; } if (validavacio(document.myform.formmenu.value) == false) { return false; } if (validavacio(document.myform.actdinmenu.value) == false) { return false; } if (validatexto(document.myform.rutaimagen.value) == false) { return false; } 93 return true; } </script> <style type="text/css"> body { background-color: #FFFFFF; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 18px; font-style: italic; line-height: 24px; color: #99FF99 #003300 #003300 #99FF99; margin-bottom: 0px; border-color: #0000CC; } td, th { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 18px; color: #3333FF; } a{ font-size: 12px; color: #336600; } form { background-color: #FFFFFF; background-image: url(../imagenes/Fondos/a16.jpg); } .title { font-family: "Comic Sans MS", Courier; font-size: 18px; line-height: 20px; background-color: #FFFFCC; color: #0000FF;} .subtitle { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 16px; line-height: 30px; color: #003300;} 94 .header { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 20px; background-color: #CCFFFF; color: #FFFF33; } .nav { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 14px; font-weight: normal; background-color: #CCFF99; } .navLink { font-family: Arial, Helvetica, sans-serif; font-size: 14px; font-weight: bold; background-color: #DEDECA; } .sidebar { font-family: "Comic Sans MS", Courier; font-size: 14px; line-height: normal; padding: 3px; background-color: #33CCFF; color: #0000CC; } .sidebarHeader { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 14px; line-height: 18px; color: #003300; background-color: #FFFF66; } .sidebarFooter { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 18px; background-color: #FFFF99; 95 font-style: italic; } .legal { font-family: Arial, Helvetica, sans-serif; font-size: 9px; color: #333333; } .box1 { border-width: thin; border-color: #99FF99 #003300 #003300 #99FF99; border-style: double; } .promo { font-family: "Verdana", Times, serif; color: #0000FF; font-size: 14px; font-weight: italic; } .footer { font-family: Arial, Helvetica, sans-serif; font-size: 24px; font-weight: bold; line-height: normal; color: #F3F2F9; background-color: #3B4D61; } .dingbat { font-family: Arial, Helvetica, sans-serif; background-color: #FFFFFF; color: #660000; font-weight: bolder; font-size: 20px; } .titlebar { font-family: "Times New Roman", Times, serif; font-size: 9px; color: #FFFFFF; background-color: #336699; } 96 input.big { width: 100px; } input.small { width: 50px; } .warning { color: #ff0000; } .required { color: #0000ff; } .fieldLabel { text-align: right; color: BLUE; } </style> </head> <body> <?php require_once('/var/www/html/sw_syscomsa/FormBuilder.php'); $form = new FormBuilder(); $apli = array ('kronolith'=>'Agenda', 'imp'=>'Correo', 'turba'=>'Direcciones', 'ingo'=>'Filtros', 'horde'=>'Horde', 'mnemo'=>'Notas', 'nag'=>'Tareas'); $them = array ('hi-contrast'=>'Alto contraste', 'lucblue'=>'Azul Cielo', 'tango-blue'=>'Azul Tango', 'azur'=>'Azul celeste', 'lightblue'=>'Azul claro', 'bluewhite'=>'Azul y blanco', 'cornflower'=>'Azulina', 97 'barbie'=>'Barbie', 'camouflage'=>'Camuflaje', 'grey'=>'Gris', 'purple'=>'Horde Púrpura', 'ideas'=>'Ideas', 'kolab'=>'Kolab', 'luc'=>'Cielo', 'lavander'=>'Lavanda', 'bluemoon'=>'Luna azul', 'brown'=>'Moreno', 'mozilla'=>'Mozilla', 'burntorange'=>'Naranja tostado', 'NeXTgrey'=>'NeXT', 'silver'=>'Silver Surfer', 'postnuke'=>'Postnuke', 'simplex'=>'Simplex', 'gennevilliers'=>'Teal', 'green'=>'Verde', 'fadetogreen'=>'Verde degradado'); $vista = array ('0'=>'Nunca', '30'=>'Cada 30 segundos', '60'=>'Cada minuto', '300'=>'Cada 5 minutos', '900'=>'Cada 15 minutos', '1800'=>'Cada media hora'); $forme = array ('text'=>'Sólo texto', 'icon'=>'Sólo iconos', 'both'=>'Iconos con texto'); $actuadin = array ('0'=>'Nunca', '30'=>'Cada 30 segundos', '60'=>'Cada minuto', '120'=>'Cada 2 minutos', '300'=>'Cada 5 minutos'); $sino = array ('true' => 'SI', 'false' => 'NO'); $form->addField(new LabelFieldtitulo('Opciones de Visualización del Horde', 'opcvisua')); $form->addField(new PopupField('Aplicacion Inicial: ', 'aplicacion' , true, $apli)); 98 $form->addField(new RadioButtonField('¿Mostrar hora de la ultima sesion al Iniciar?', 'mostrarhora',true, $sino)); $form->addField(new PopupField('Seleccionar su Combinacion de Colores:', 'themes',true, $them)); $form->addField(new PopupField('Actualizar vista del portal', 'vistapor',true, $vista)); $form->addField(new RadioButtonField('¿Mostrar el menu HORDE a la izquierda?', 'menuizq',true, $sino)); $form->addField(new TextField('Anchura del Menu Horde a la izquierda', 'anchomenu', 3,1,3)); $form->addField(new PopupField('Formato del Menu', 'formmenu', true, $forme)); $form->addField(new PopupField('Actualizar elementos de menu dinamicos', 'actdinmenu', true, $actuadin)); // $form->addField(new RadioButtonField('Definir claves de Accesos para los Vinculos', 'claacce',true, $sino)); $form->addField(new LabelFieldsubtitulo('Carga de imagen del menu principal', 'cargaimag')); $form->addField(new TextField('Ruta de la imagen:', 'rutaimagen', 25,1,30000)); //$form->addField(new UploadField2('Ruta de la imagen:','rutaimagen',false,28, 30000,'/var/www/html/sw_syscomsa/webpages/administracio_interfaz/scripts/')); ///var/www/html/sw_syscomsa/webpages/administracio_interfaz/scripts/fotozaida1.jp g //'/var/www/html/sw_syscomsa/webpages/administracio_interfaz/scripts/' $form->addField(new SubmitFieldGroup(array('save' => 'Grabar', 'cancel' => 'Cancel'))); if ($form->isSubmitted('save')) { if($form->validate()) { $cmd = "sudo /var/www/html/sw_syscomsa/webpages/administracio_interfaz/scripts/opciovisualiza _cmd.sh ".$form->getValue('aplicacion')." ".$form->getValue('mostrarhora')." ". $form->getValue('vistapor')." ".$form->getValue('themes')." ".$form>getValue('menuizq')." ".$form->getValue('anchomenu')." ".$form>getValue('formmenu')." ".$form->getValue('actdinmenu')." ".$form>getValue('rutaimagen'); # # echo $cmd; $tmp = exec($cmd,$output,$status); echo "<br/>".$tmp."<br/>"; 99 if ($status == 0) { #echo "<br/>".$tmp."<br/>"; echo "Definicion de cuotas realizado Exitosamente<br/>"; $form->setValue('aplicacion',""); $form->setValue('mostrarhora',false); $form->setValue('themes',""); $form->setValue('vistapor',""); $form->setValue('menuizq',""); $form->setValue('anchomenu',""); $form->setValue('formmenu',""); $form->setValue('actdinmenu',""); //$form->setValue('claacce',""); $form->setValue('rutaimagen',""); } else { echo "Definicion de cuotas NO realizado<br/>"; foreach ($output as $line) { echo $line."<br/>";} } $form->display(); }else { echo "Ingrese los campos correctamente<br/>"; $form->display(); } } else if ($form->isSubmitted('cancel')) { header("Location: /sw_syscomsa/contenido.php"); } else { $form->display(); } ?> </form> </body> </html> Archivo: pw_opc_redaccion.php <html> 100 <head> <title>Opciones de Redacción de Mensajes</title> <script> //FUNCION PARA VALIDAR NUMEROS function isNum(q) { for ( i = 0; i < q.length; i++ ) { //con el for y la sentencia if( q.charAt(i) = " " ){... ..ya me queda lista para validar los espacios en blanco, de lo contrario: valor = parseInt(q.charAt(i)); // me permite convertir letra por letra en numero y si no es un numero entonces no regresa nada if (isNaN(valor)) { return false } } return true } //FUNCION QUE LLAMA A LA DE VALIDAR NUMEROS, TRABAJA CON LA FUNCION isNum function validarNumeroEntero(F) { if (isNum(F) == false) { alert("ES NECESARIO QUE EL VALOR INICIAL SEA UN NUMERO ENTERO "+F); return false; }else { return true } } //busca caracteres que no sean espacio en blanco en una cadena function vacio(p) { if (p == "") { alert("ERROR: No puede dejar este campo vacio") return false } 101 return true } //valida que el campo no este vacio y no tenga solo espacios en blanco function validavacio(h) { if( vacio(h) == false ) { //alert("Introduzca un cadena de texto correctamente.") return false } else { //alert("OK") return true } } //VALIDA TODOS LOS CAMPOS DEL FORMULARIO function validarFormulario() { // if (validarNumeroEntero(document.myform.purgesentmailkeep.value) == false) // { // return false; // } // if (validarNumeroEntero(document.myform.deleteatttachamentsmonthlykeep.value) == false) // { // return false; // } if (validavacio(document.myform.initialpage.value) == false) { return false; } if (validavacio(document.myform.purgesentmailinterval.value) == false) { return false; } return true; } </script> 102 <style type="text/css"> body { background-color: #FFFFFF; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 18px; font-style: italic; line-height: 24px; color: #99FF99 #003300 #003300 #99FF99; margin-bottom: 0px; border-color: #0000CC; } td, th { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 18px; color: #3333FF; } a{ font-size: 12px; color: #336600; } form { background-color: #FFFFFF; background-image: url(../imagenes/Fondos/a16.jpg); } .title { font-family: "Comic Sans MS", Courier; font-size: 18px; line-height: 20px; background-color: #FFFFCC; color: #0000FF;} .subtitle { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 16px; line-height: 30px; color: #003300;} .header { font-family: Verdana, Arial, Helvetica, sans-serif; 103 font-size: 20px; background-color: #CCFFFF; color: #FFFF33; } .nav { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 14px; font-weight: normal; background-color: #CCFF99; } .navLink { font-family: Arial, Helvetica, sans-serif; font-size: 14px; font-weight: bold; background-color: #DEDECA; } .sidebar { font-family: "Comic Sans MS", Courier; font-size: 14px; line-height: normal; padding: 3px; background-color: #33CCFF; color: #0000CC; } .sidebarHeader { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 14px; line-height: 18px; color: #003300; background-color: #FFFF66; } .sidebarFooter { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 18px; background-color: #FFFF99; font-style: italic; } 104 .legal { font-family: Arial, Helvetica, sans-serif; font-size: 9px; color: #333333; } .box1 { border-width: thin; border-color: #99FF99 #003300 #003300 #99FF99; border-style: double; } .promo { font-family: "Verdana", Times, serif; color: #0000FF; font-size: 14px; font-weight: italic; } .footer { font-family: Arial, Helvetica, sans-serif; font-size: 24px; font-weight: bold; line-height: normal; color: #F3F2F9; background-color: #3B4D61; } .dingbat { font-family: Arial, Helvetica, sans-serif; background-color: #FFFFFF; color: #660000; font-weight: bolder; font-size: 20px; } .titlebar { font-family: "Times New Roman", Times, serif; font-size: 9px; color: #FFFFFF; background-color: #336699; } input.big { width: 100px; } 105 input.small { width: 50px; } .warning { color: #ff0000; } .required { color: #0000ff; } .fieldLabel { text-align: right; color: BLUE; } </style> </head> <body> <?php require_once('/var/www/html/sw_syscomsa/FormBuilder.php'); $form = new FormBuilder(); $redac = array ('top'=>'Arriba', 'bottom'=>'Abajo', 'sig'=>'Antes de la Firma'); $sino = array ('1' => 'SI', '0' => 'NO'); $form->addField(new LabelFieldtitulo('Opciones de Redacción de mensajes', 'redamensa')); $form->addField(new RadioButtonField('¿Redactar mensajes en una ventana separada? ', 'composepopup',true, $sino)); $form->addField(new PopupField('Ubicación por omisión del cursor en el área de texto de redacción', 'composecursor' , true, $redac)); $form->addField(new RadioButtonField('¿Mostrar el campo de cabecera Cc: al redactar mensajes?', 'composecc',true, $sino)); $form->addField(new RadioButtonField('¿Mostrar el campo de cabecera Bcc: al redactar mensajes?', 'composebcc',true, $sino)); $form->addField(new RadioButtonField('¿Comprobar ortografía antes de enviar un mensaje? ', 'composespellcheck',true, $sino)); 106 // $form->addField(new PopupField('¿Solicitar acuses de recibo?', 'dispositionrequestread' , true, $acuse)); $form->addField(new SubmitFieldGroup(array('save' => 'Grabar', 'cancel' => 'Cancel'))); if ($form->isSubmitted('save')) { if($form->validate()) { $cmd = "sudo /var/www/html/sw_syscomsa/webpages/administracio_interfaz/scripts/opc_redaccion _cmd.sh ".$form->getValue('composepopup')." ".$form->getValue('composecursor')." ".$form->getValue('composecc')." ".$form->getValue('composebcc')." ".$form>getValue('composespellcheck'); #echo $cmd; $tmp = exec($cmd,$output,$status); #echo "<br/>".$tmp."<br/>"; if ($status == 0) { #echo "<br/>".$tmp."<br/>"; echo "Definicion de cuotas realizado Exitosamente<br/>"; $form->setValue('composepopup',""); $form->setValue('composecursor',false); $form->setValue('composecc',""); $form->setValue('composbcc',""); $form->setValue('composespellcheck',""); //$form->setValue('dispositionrequestread',false); } else { echo "Definicion de cuotas NO realizado<br/>"; foreach ($output as $line) { echo $line."<br/>";} } $form->display(); }else { echo "Ingrese los campos correctamente<br/>"; $form->display(); } } 107 else if ($form->isSubmitted('cancel')) { header("Location: /sw_syscomsa/contenido.php"); } else { $form->display(); } ?> </form> </body> </html> Sección administración cuenta. Esta sección se encuentra ubicada en la ruta: /var/www/html/sw_syscomsa/webpages/administracion_cuenta/ en el cual se encuentran los siguientes archivos. Archivo: pw_parametros_cuenta.php <html> <head> <title>Definicion de los Parametros de Cuentas</title> <script> //FUNCION PARA VALIDAR NUMEROS function isNum(q) { for ( i = 0; i < q.length; i++ ) { //con el for y la sentencia if( q.charAt(i) = " " ){... ..ya me queda lista para validar los espacios en blanco, de lo contrario: valor = parseInt(q.charAt(i)); // me permite convertir letra por letra en numero y si no es un numero entonces no regresa nada if (isNaN(valor)) { return false } } return true } //FUNCION QUE LLAMA A LA DE VALIDAR NUMEROS, TRABAJA CON LA FUNCION isNum function validarNumeroEntero(F) { 108 if (isNum(F) == false) { alert("ES NECESARIO QUE EL VALOR INICIAL SEA UN NUMERO ENTERO "+F); return false; }else { return true } } //busca caracteres que no sean espacio en blanco en una cadena function vacio(p) { if (p == "") { alert("ERROR: No puede dejar este campo vacio") return false } return true } //valida que el campo no este vacio y no tenga solo espacios en blanco function validavacio(h) { if( vacio(h) == false ) { //alert("Introduzca un cadena de texto correctamente.") return false } else { //alert("OK") return true } } //VALIDA TODOS LOS CAMPOS DEL FORMULARIO function validarFormulario() { if (validavacio(document.myform.maxmens.value) == false) { return false; } 109 if (validavacio(document.myform.replylimit.value) == false) { return false; } if (validavacio(document.myform.attachcountlimit.value) == false) { return false; } if (validavacio(document.myform.allowreceipts.value) == false) { return false; } return true; } </script> <style type="text/css"> body { background-color: #FFFFFF; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 18px; font-style: italic; line-height: 24px; color: #99FF99 #003300 #003300 #99FF99; margin-bottom: 0px; border-color: #0000CC; } td, th { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 18px; color: #3333FF; } a{ font-size: 12px; color: #336600; } form { background-color: #FFFFFF; background-image: url(../imagenes/Fondos/a16.jpg); } 110 .title { font-family: "Comic Sans MS", Courier; font-size: 18px; line-height: 20px; background-color: #FFFFCC; color: #0000FF;} .subtitle { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 16px; line-height: 30px; color: #003300;} .header { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 20px; background-color: #CCFFFF; color: #FFFF33; } .nav { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 14px; font-weight: normal; background-color: #CCFF99; } .navLink { font-family: Arial, Helvetica, sans-serif; font-size: 14px; font-weight: bold; background-color: #DEDECA; } .sidebar { font-family: "Comic Sans MS", Courier; font-size: 12px; line-height: normal; padding: 3px; background-color: #33CCFF; color: #0000CC; } .sidebarHeader { 111 font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 14px; line-height: 18px; color: #003300; background-color: #FFFF66; } .sidebarFooter { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 18px; background-color: #FFFF99; font-style: italic; } .legal { font-family: Arial, Helvetica, sans-serif; font-size: 9px; color: #333333; } .box1 { border-width: thin; border-color: #99FF99 #003300 #003300 #99FF99; border-style: double; } .promo { font-family: "Verdana", Times, serif; color: #0000FF; font-size: 14px; font-weight: italic; } .footer { font-family: Arial, Helvetica, sans-serif; font-size: 24px; font-weight: bold; line-height: normal; color: #F3F2F9; background-color: #3B4D61; } .dingbat { 112 font-family: Arial, Helvetica, sans-serif; background-color: #FFFFFF; color: #660000; font-weight: bolder; font-size: 20px; } .titlebar { font-family: "Times New Roman", Times, serif; font-size: 9px; color: #FFFFFF; background-color: #336699; } input.big { width: 100px; } input.small { width: 50px; } .warning { color: #ff0000; } .required { color: #0000ff; } .fieldLabel { text-align: right; color: BLUE; } </style> </head> <body> <?php require_once('/var/www/html/sw_syscomsa/FormBuilder.php'); $opc1 = array ('500' => '5', '1000' => '10','1500' => '15','2000' => '20','2500' => '25','3000' => '30'); $opc2 = array ('2' => '2','3' => '3','4' => '4','5' => '5','10' => '10','15' => '15','20' => '20','25' => '25','30' => '30','40' => '40','50' => '50','60' => '60'); 113 $opc3 = array ('never' => 'Nunca', 'ask' => 'Consultar', 'always' => 'Siempre'); $opc4 = array ('16' => '16','17' => '17','18' => '18','19' => '19','20' => '20','25' => '25','30' => '30','35' => '35','40' => '40','45' => '45','50' => '50'); $opc5 = array ('1' => '1','2' => '2','4' => '4','6' => '6','8' => '8','10' => '10'); $opc6 = array ('2' => '2','4' => '4','6' => '6','8' => '8','10' => '10','20' => '20','25' => '25','50' => '50','100' => '100'); $opc7 = array ('2' => '2','3' => '3','4' => '4','5' => '5','25' => '25','30' => '30','40' => '40','50' => '50','60' => '60'); $sino = array ('1' => 'SI', '0' => 'NO'); $sino2 = array ('true' => 'SI', 'false' => 'NO'); $form = new FormBuilder(); $form->addField(new LabelFieldtitulo('Definición de los Parametros de las Cuentas', 'defparacta')); $form->addField(new LabelFieldsubtitulo('Opciones de los Parametros de Cuentas', 'defparacta')); $form->addField(new PopupField('Tamaño Maximo mensajes (MB):', 'maxmens', true, $opc1)); $form->addField(new LabelFieldmensaje('Define el tamaño maximo de mensaje de correo electrónico', 'msn5')); $form->addField(new PopupField('Máximo numero de archivos adjuntos por mensaje:', 'attachcountlimit',true, $opc5)); $form->addField(new LabelFieldmensaje('Define el numero maximo de datos adjuntos por mensajes', 'msn5')); $form->addField(new PopupField('Máximo Tamaño de mensajes reenviados o contestados:', 'replylimit',true, $opc1)); $form->addField(new LabelFieldmensaje('Define el tamaño maximo de mensajes que son respondidos o reenviados', 'msn6')); $form->addField(new PopupField('Solicitar el Acuse de Recibo: ', 'allowreceipts',true, $opc3)); $form->addField(new LabelFieldmensaje('Solicitar el informe del mensaje entrega al(los) destinatario(s)', 'msn2')); $form->addField(new LabelFieldsubtitulo('Mantenimiento de las cuentas al iniciar Sesión', 'inicisesion')); $form->addField(new RadioButtonField('¿Realizar operaciones de mantenimiento al iniciar sesión?', 'mantenimiento',true, $sino)); $form->addField(new RadioButtonField('¿Solicitar confirmación antes de realizar operaciones de mantenimiento?', 'confmanteni',true, $sino2)); 114 $form->addField(new SubmitFieldGroup(array('save' => 'Grabar', 'cancel'=> 'Cancel'))); if ($form->isSubmitted('save')) { if($form->validate()) { $cmd = "sudo /var/www/html/sw_syscomsa/webpages/administracion_cuenta/scripts/parametroscue nta_cmd.sh ".$form->getValue('maxmens')." ".$form->getValue('attachcountlimit')." ".$form->getValue('replylimit')." ".$form->getValue('allowreceipts')." ".$form>getValue('mantenimiento')." ".$form->getValue('confmanteni'); #echo $cmd; $tmp = exec($cmd,$output,$status); #echo "<br/>".$tmp."<br/>"; if ($status == 0) { echo "Proceso grabado exitosamente<br/>"; $form->setValue('maxmens',''); $form->setValue('attachcountlimit',''); $form->setValue('replylimit',''); $form->setValue('allowreceipts',false); $form->setValue('mantenimiento',false); $form->setValue('confmanteni',false); } else { echo "Proceso NO grabado exitosamente<br/>"; foreach ($output as $line) { echo $line."<br/>";} } $form->display(); }else { echo "Ingrese los campos correctamente<br/>"; $form->display(); } } else if ($form->isSubmitted('cancel')) { header("Location: /sw_syscomsa/contenido.php"); } else { $form->display(); } ?> 115 </body> </html> Archivo: pw_definicionn_cuotas_usuario.php <html> <head> <title>Definicion de Cuotas de Usuario</title> <script> //FUNCION PARA VALIDAR NUMEROS function isNum(q) { for ( i = 0; i < q.length; i++ ) { //con el for y la sentencia if( q.charAt(i) = " " ){... ..ya me queda lista para validar los espacios en blanco, de lo contrario: valor = parseInt(q.charAt(i)); // me permite convertir letra por letra en numero y si no es un numero entonces no regresa nada if (isNaN(valor)) { return false } } return true } //FUNCION QUE LLAMA A LA DE VALIDAR NUMEROS, TRABAJA CON LA FUNCION isNum function validarNumeroEntero(F) { if (isNum(F) == false) { alert("ES NECESARIO QUE EL VALOR INICIAL SEA UN NUMERO ENTERO "+F); return false; }else { return true } } // FUNCION PARA VALIDAR IP function validar(ip) { 116 partes=ip.split('.'); if (partes.length!=4) { alert("ip no valida"); return false; } for (i=0;i<4;i++) { num=partes[i]; if (num>255 || num<0 || num.length==0 || isNaN(num)) { alert("ip no valida"); return false; } } return true; } //busca caracteres que no sean espacio en blanco en una cadena function vacio(o) { if (o == "") { alert("ERROR: No puede dejar este campo vacio") return false } var caract_extra=" " var ubicacion var enter = " " var caracteres = "1234567890 ABCDEFGHIJKLMNOPQRSTUVWXYZÑáéíóúÁÉÍÓÚàèìòùÀÈÌÒÙºª\!|@·#$~ %½¬&/{/([)]=}?\'¡~¿+]*`[^'_-·;,}çÇ" + String.fromCharCode(13) + enter + caract_extra var contador = 0 for (var i=0; i < o.length; i++) { if ( o.charAt(i) != "" ) { ubicacion = o.substring(i, i + 1) if (caracteres.indexOf(ubicacion) == -1) { contador++ } else 117 { alert("ERROR: No se acepta el caracter '" + ubicacion + "'.") return false } } } return true } //valida que el campo no este vacio y no tenga solo espacios en blanco function validatexto(F) { if( vacio(F) == false ) { //alert("Introduzca un cadena de texto correctamente.") return false } else { //alert("OK") return true } } //VALIDA TODOS LOS CAMPOS DEL FORMULARIO function validarFormulario() { if (validarNumeroEntero(document.myform.cuotagrac.value) == false) { return false; } if (validarNumeroEntero(document.myform.cuotaabso.value) == false) { return false; } if (validatexto(document.myform.nomusugru.value) == false) { return false; } return true; } </script> <style type="text/css"> 118 body { background-color: #FFFFFF; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 18px; font-style: italic; line-height: 24px; color: #99FF99 #003300 #003300 #99FF99; margin-bottom: 0px; border-color: #0000CC; } td, th { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 18px; color: #3333FF; } a{ font-size: 12px; color: #336600; } form { background-color: #FFFFFF; background-image: url(../imagenes/Fondos/a16.jpg); } .title { font-family: "Comic Sans MS", Courier; font-size: 18px; line-height: 20px; background-color: #FFFFCC; color: #0000FF;} .subtitle { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 16px; line-height: 30px; color: #003300;} .header { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 20px; background-color: #CCFFFF; 119 color: #FFFF33; } .nav { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 14px; font-weight: normal; background-color: #CCFF99; } .navLink { font-family: Arial, Helvetica, sans-serif; font-size: 14px; font-weight: bold; background-color: #DEDECA; } .sidebar { font-family: "Comic Sans MS", Courier; font-size: 12px; line-height: normal; padding: 3px; background-color: #33CCFF; color: #0000CC; } .sidebarHeader { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 14px; line-height: 18px; color: #003300; background-color: #FFFF66; } .sidebarFooter { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 18px; background-color: #FFFF99; font-style: italic; } .legal { font-family: Arial, Helvetica, sans-serif; 120 font-size: 9px; color: #333333; } .box1 { border-width: thin; border-color: #99FF99 #003300 #003300 #99FF99; border-style: double; } .promo { font-family: "Verdana", Times, serif; color: #0000FF; font-size: 14px; font-weight: italic; } .footer { font-family: Arial, Helvetica, sans-serif; font-size: 24px; font-weight: bold; line-height: normal; color: #F3F2F9; background-color: #3B4D61; } .dingbat { font-family: Arial, Helvetica, sans-serif; background-color: #FFFFFF; color: #660000; font-weight: bolder; font-size: 20px; } .titlebar { font-family: "Times New Roman", Times, serif; font-size: 9px; color: #FFFFFF; background-color: #336699; } input.big { width: 100px; } 121 input.small { width: 50px; } .warning { color: #ff0000; } .required { color: #0000ff; } .fieldLabel { text-align: right; color: BLUE; } </style> </head> <body> <?php require_once('/var/www/html/sw_syscomsa/FormBuilder.php'); // $eleccion = array ('u' => 'Usuario', 'g' => 'Grupo'); $datos = array ('2048' => '2', '4096' => '4', '6144' => '6', '8192' => '8', '10240' => '10', '12288' => '12', '14336' => '14', '16384' => '16', '18432' => '18'); $datos2 = array ('2048' => '2', '4096' => '4', '6144' => '6', '8192' => '8', '10240' => '10', '12288' => '12', '14336' => '14', '16384' => '16', '18432' => '18', '20480' => '20'); $form = new FormBuilder(); $form->addField(new LabelFieldtitulo('Definición de Cuotas Usuarios', 'defcuota')); $form->addField(new LabelFieldsubtitulo('Descripción de las Cuotas', 'defcuota')); //$form->addField(new TextField('Nombre Usuario/Grupo:', 'nomusugru', 25,2,30)); $file_user = file ("/etc/passwd"); foreach ($file_user as $lin_user => $user) { $arr_user = explode (":",$user); if ($arr_user[2]>=500 and $arr_user[2] <= 10000) 122 { $mapeo_user[$arr_user[0]]= $arr_user[0]; } } $form->addField(new PopupField('Nombre de Usuario:', 'nomusugru', true, $mapeo_user)); //$form->addField(new RadioButtonField('Usuario/Grupo:', 'usugrup',true, $eleccion)); //$form->addField(new PopupField('Usuario/Grupo:', 'usugrup', false, $eleccion,'[Usuario/Grupo]')); $form->addField(new PopupField('Cuota de Gracia(MB) :', 'cuotagrac', false, $datos)); $form->addField(new PopupField('Cuota de Absoluta(MB):', 'cuotaabso', false, $datos2)); // $form->addField(new TextField('Cuota de Gracia:', 'cuotagrac', 25,1,20)); // $form->addField(new TextField('Cuota Absoluta', 'cuotaabso', 25,1,20)); $form->addField(new SubmitFieldGroup(array('submit' => 'Crear', 'cancel' => 'Cancel'))); if ($form->isSubmitted('submit')) { if($form->validate() and ($form->getValue('nomusugru', " ") )) { $cuota1=$form->getValue('cuotagrac'); $cuota2=$form->getValue('cuotaabso'); if ($cuota1 >=$cuota2) { echo "La cuota de gracia debe ser mayor a la absoluta"; } else{ // # #echo $form->getValue('usugrup')."<br/>"; $letra= $form->getValue('usugrup'); echo $letra; // $cmd = "sudo /var/www/html/sw_syscomsa/webpages/administracion_cuenta/scripts/changequotau 123 ser_cmd.sh ".$form->getValue('nomusugru')." ".$form->getValue('usugrup')." ". $form->getValue('cuotagrac')." ".$form->getValue('cuotaabso'); $cmd = "sudo /var/www/html/sw_syscomsa/webpages/administracion_cuenta/scripts/changequotau ser_cmd.sh ".$form->getValue('nomusugru')." ".$form->getValue('cuotagrac')." ". $form->getValue('cuotaabso'); #echo $cmd; $tmp = exec($cmd,$output,$status); #echo "<br/>".$tmp."<br/>"; if ($status == 0) { echo "<br/>".$tmp."<br/>"; //echo "entro al shell"; #echo "Definicion de cuotas realizado Exitosamente<br/>"; $form->setValue('nomusugru',""); //$form->setValue('usugrup',false); $form->setValue('cuotagrac',""); $form->setValue('cuotaabso',""); } else { echo "no entro"; echo "Definicion de cuotas NO realizado<br/>"; foreach ($output as $line) { echo $line."<br/>";} } }$form->display(); }else { echo "Ingrese los campos correctamente<br/>"; $form->display(); } } else if ($form->isSubmitted('cancel')) { header("Location: /sw_syscomsa/contenido.php"); } else { $form->display(); } 124 ?> </form> </body> </html> Archivo: pw_definicion_cuotas_grupo.php <html> <head> <title>Definicion de Cuotas de Grupo</title> <script> //FUNCION PARA VALIDAR NUMEROS function isNum(q) { for ( i = 0; i < q.length; i++ ) { //con el for y la sentencia if( q.charAt(i) = " " ){... ..ya me queda lista para validar los espacios en blanco, de lo contrario: valor = parseInt(q.charAt(i)); // me permite convertir letra por letra en numero y si no es un numero entonces no regresa nada if (isNaN(valor)) { return false } } return true } //FUNCION QUE LLAMA A LA DE VALIDAR NUMEROS, TRABAJA CON LA FUNCION isNum function validarNumeroEntero(F) { if (isNum(F) == false) { alert("ES NECESARIO QUE EL VALOR INICIAL SEA UN NUMERO ENTERO "+F); return false; }else { return true } } // FUNCION PARA VALIDAR IP 125 function validar(ip) { partes=ip.split('.'); if (partes.length!=4) { alert("ip no valida"); return false; } for (i=0;i<4;i++) { num=partes[i]; if (num>255 || num<0 || num.length==0 || isNaN(num)) { alert("ip no valida"); return false; } } return true; } //busca caracteres que no sean espacio en blanco en una cadena function vacio(o) { if (o == "") { alert("ERROR: No puede dejar este campo vacio") return false } var caract_extra=" " var ubicacion var enter = " " var caracteres = "1234567890 ABCDEFGHIJKLMNOPQRSTUVWXYZÑáéíóúÁÉÍÓÚàèìòùÀÈÌÒÙºª\!|@·#$~ %½¬&/{/([)]=}?\'¡~¿+]*`[^'_-·;,}çÇ" + String.fromCharCode(13) + enter + caract_extra var contador = 0 for (var i=0; i < o.length; i++) { if ( o.charAt(i) != "" ) { ubicacion = o.substring(i, i + 1) if (caracteres.indexOf(ubicacion) == -1) { 126 contador++ } else { alert("ERROR: No se acepta el caracter '" + ubicacion + "'.") return false } } } return true } //valida que el campo no este vacio y no tenga solo espacios en blanco function validatexto(F) { if( vacio(F) == false ) { //alert("Introduzca un cadena de texto correctamente.") return false } else { //alert("OK") return true } } //VALIDA TODOS LOS CAMPOS DEL FORMULARIO function validarFormulario() { if (validarNumeroEntero(document.myform.cuotagrac.value) == false) { return false; } if (validarNumeroEntero(document.myform.cuotaabso.value) == false) { return false; } if (validatexto(document.myform.nomusugru.value) == false) { return false; } return true; } 127 </script> <style type="text/css"> body { background-color: #FFFFFF; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 18px; font-style: italic; line-height: 24px; color: #99FF99 #003300 #003300 #99FF99; margin-bottom: 0px; border-color: #0000CC; } td, th { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 18px; color: #3333FF; } a{ font-size: 12px; color: #336600; } form { background-color: #FFFFFF; background-image: url(../imagenes/Fondos/a16.jpg); } .title { font-family: "Comic Sans MS", Courier; font-size: 18px; line-height: 20px; background-color: #FFFFCC; color: #0000FF;} .subtitle { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 16px; line-height: 30px; color: #003300;} .header { 128 font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 20px; background-color: #CCFFFF; color: #FFFF33; } .nav { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 14px; font-weight: normal; background-color: #CCFF99; } .navLink { font-family: Arial, Helvetica, sans-serif; font-size: 14px; font-weight: bold; background-color: #DEDECA; } .sidebar { font-family: "Comic Sans MS", Courier; font-size: 12px; line-height: normal; padding: 3px; background-color: #33CCFF; color: #0000CC; } .sidebarHeader { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 14px; line-height: 18px; color: #003300; background-color: #FFFF66; } .sidebarFooter { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 18px; background-color: #FFFF99; font-style: italic; } 129 .legal { font-family: Arial, Helvetica, sans-serif; font-size: 9px; color: #333333; } .box1 { border-width: thin; border-color: #99FF99 #003300 #003300 #99FF99; border-style: double; } .promo { font-family: "Verdana", Times, serif; color: #0000FF; font-size: 14px; font-weight: italic; } .footer { font-family: Arial, Helvetica, sans-serif; font-size: 24px; font-weight: bold; line-height: normal; color: #F3F2F9; background-color: #3B4D61; } .dingbat { font-family: Arial, Helvetica, sans-serif; background-color: #FFFFFF; color: #660000; font-weight: bolder; font-size: 20px; } .titlebar { font-family: "Times New Roman", Times, serif; font-size: 9px; color: #FFFFFF; background-color: #336699; } input.big { width: 100px; 130 } input.small { width: 50px; } .warning { color: #ff0000; } .required { color: #0000ff; } .fieldLabel { text-align: right; color: BLUE; } </style> </head> <body> <?php require_once('/var/www/html/sw_syscomsa/FormBuilder.php'); // $eleccion = array ('u' => 'Usuario', 'g' => 'Grupo'); $datos = array ('2048' => '2', '4096' => '4', '6144' => '6', '8192' => '8', '10240' => '10', '12288' => '12', '14336' => '14', '16384' => '16', '18432' => '18'); $datos2 = array ('2048' => '2', '4096' => '4', '6144' => '6', '8192' => '8', '10240' => '10', '12288' => '12', '14336' => '14', '16384' => '16', '18432' => '18', '20480' => '20'); $form = new FormBuilder(); $form->addField(new LabelFieldtitulo('Definición de Cuotas Grupo', 'defcuota')); $form->addField(new LabelFieldsubtitulo('Descripción de las Cuotas', 'defcuota')); //$form->addField(new TextField('Nombre Usuario/Grupo:', 'nomusugru', 25,2,30)); $file_group = file ("/etc/group"); 131 foreach ($file_group as $lin_group => $group) { $arr_group = explode (":",$group); if ($arr_group[2]>=500 and $arr_group[2] <= 10000) { $mapeo_group[$arr_group[0]]= $arr_group[0]; } } $form->addField(new PopupField('Nombre del Grupo:', 'nomusugru', true, $mapeo_group)); //$form->addField(new RadioButtonField('Usuario/Grupo:', 'usugrup',true, $eleccion)); //$form->addField(new PopupField('Usuario/Grupo:', 'usugrup', false, $eleccion,'[Usuario/Grupo]')); $form->addField(new PopupField('Cuota de Gracia(MB) :', 'cuotagrac', false, $datos)); $form->addField(new PopupField('Cuota de Absoluta(MB):', 'cuotaabso', false, $datos2)); // $form->addField(new TextField('Cuota de Gracia:', 'cuotagrac', 25,1,20)); // $form->addField(new TextField('Cuota Absoluta', 'cuotaabso', 25,1,20)); $form->addField(new SubmitFieldGroup(array('submit' => 'Crear', 'cancel' => 'Cancel'))); if ($form->isSubmitted('submit')) { if($form->validate() and ($form->getValue('nomusugru', " ") )) { $cuota1=$form->getValue('cuotagrac'); $cuota2=$form->getValue('cuotaabso'); if ($cuota1 >=$cuota2) { echo "La cuota de gracia debe ser mayor a la absoluta"; } else{ #echo $form->getValue('usugrup')."<br/>"; 132 // # $letra= $form->getValue('usugrup'); echo $letra; // $cmd = "sudo /var/www/html/sw_syscomsa/webpages/administracion_cuenta/scripts/changequotau ser_cmd.sh ".$form->getValue('nomusugru')." ".$form->getValue('usugrup')." ". $form->getValue('cuotagrac')." ".$form->getValue('cuotaabso'); $cmd = "sudo /var/www/html/sw_syscomsa/webpages/administracion_cuenta/scripts/changequotagr oup_cmd.sh ".$form->getValue('nomusugru')." ".$form->getValue('cuotagrac')." ". $form->getValue('cuotaabso'); #echo $cmd; $tmp = exec($cmd,$output,$status); #echo "<br/>".$tmp."<br/>"; if ($status == 0) { echo "<br/>".$tmp."<br/>"; //echo "entro al shell"; #echo "Definicion de cuotas realizado Exitosamente<br/>"; $form->setValue('nomusugru',""); //$form->setValue('usugrup',false); $form->setValue('cuotagrac',""); $form->setValue('cuotaabso',""); } else { echo "no entro"; echo "Definicion de cuotas NO realizado<br/>"; foreach ($output as $line) { echo $line."<br/>";} } }$form->display(); }else { echo "Ingrese los campos correctamente<br/>"; $form->display(); } } else if ($form->isSubmitted('cancel')) { 133 header("Location: /sw_syscomsa/contenido.php"); } else { $form->display(); } ?> </form> </body> </html> Archivo: pw_control_usuario.php <html> <head> <script> //busca caracteres que no sean espacio en blanco en una cadena function vacio(o) { if (o == "") { alert("ERROR: No puede dejar este campo vacio") return false } var caract_extra=" " var ubicacion var enter = " " var caracteres = "1234567890 ñáéíóúÁÉÍÓÚàèìòùÀÈÌÒÙºª\!|@·#$~%½¬&/{/ ([)]=}?\'¡~¿+]*`[^'_-·;,}çÇ" + String.fromCharCode(13) + enter + caract_extra var contador = 0 for (var i=0; i < o.length; i++) { if ( o.charAt(i) != "" ) { ubicacion = o.substring(i, i + 1) if (caracteres.indexOf(ubicacion) == -1) { contador++ } else { alert("ERROR: No se acepta el caracter '" + ubicacion + "'.") return false 134 } } } return true } //valida que el campo no este vacio y no tenga solo espacios en blanco function validatexto(F) { if( vacio(F) == false ) { //alert("Introduzca un cadena de texto correctamente.") return false } else { //alert("OK") return true } } //VALIDA TODOS LOS CAMPOS DEL FORMULARIO function validarFormulario() { if (validatexto(document.myform.user.value) == false) { return false; } if (validatexto(document.myform.accion.value) == false) { return false; } return true; } </script> <title>Control acceso de los Usuarios</title> <style type="text/css"> body { background-color: #FFFFFF; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 18px; 135 font-style: italic; line-height: 24px; color: #99FF99 #003300 #003300 #99FF99; margin-bottom: 0px; border-color: #0000CC; } td, th { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 18px; color: #3333FF; } a{ font-size: 12px; color: #336600; } form { background-color: #FFFFFF; background-image: url(../imagenes/Fondos/a16.jpg); } .title { font-family: "Comic Sans MS", Courier; font-size: 18px; line-height: 20px; background-color: #FFFFCC; color: #0000FF;} .subtitle { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 16px; line-height: 30px; color: #003300;} .header { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 20px; background-color: #CCFFFF; color: #FFFF33; } .nav { 136 font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 14px; font-weight: normal; background-color: #CCFF99; } .navLink { font-family: Arial, Helvetica, sans-serif; font-size: 14px; font-weight: bold; background-color: #DEDECA; } .sidebar { font-family: "Comic Sans MS", Courier; font-size: 12px; line-height: normal; padding: 3px; background-color: #33CCFF; color: #0000CC; } .sidebarHeader { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 14px; line-height: 18px; color: #003300; background-color: #FFFF66; } .sidebarFooter { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 18px; background-color: #FFFF99; font-style: italic; } .legal { font-family: Arial, Helvetica, sans-serif; font-size: 9px; color: #333333; } 137 .box1 { border-width: thin; border-color: #99FF99 #003300 #003300 #99FF99; border-style: double; } .promo { font-family: "Verdana", Times, serif; color: #0000FF; font-size: 14px; font-weight: italic; } .footer { font-family: Arial, Helvetica, sans-serif; font-size: 24px; font-weight: bold; line-height: normal; color: #F3F2F9; background-color: #3B4D61; } .dingbat { font-family: Arial, Helvetica, sans-serif; background-color: #FFFFFF; color: #660000; font-weight: bolder; font-size: 20px; } .titlebar { font-family: "Times New Roman", Times, serif; font-size: 9px; color: #FFFFFF; background-color: #336699; } input.big { width: 100px; } input.small { width: 50px; } .warning { color: #ff0000; 138 } .required { color: #0000ff; } .fieldLabel { text-align: right; color: BLUE; } </style> </head> <body> <?php require_once('/var/www/html/sw_syscomsa/FormBuilder.php'); # require_once('FormBuilder.php'); //$ac = array ('RELAY' => 'RELAY', 'OK' => 'OK', 'REJECT' => 'REJECT'); $ac = array ('RELAY' => 'ACEPTA', 'REJECT' => 'DENIEGA'); $op = array ('CU' => 'Cuenta de Usuario', 'IPR' => 'Ip/Red', 'DO' => 'Nombre Dominio'); $form = new FormBuilder(); $form->addField(new LabelFieldtitulo('Control de Acceso de los Usuarios', 'controlacces')); $form->addField(new LabelFieldsubtitulo('Detalle de las Opciones', 'controlacces')); $form->addField(new LabelFieldmensaje('Usted podra darle o quitarle acceso al envio o recepcion de correo desde una cuenta de correo', 'controlacces')); $file_user = file ("/etc/passwd"); foreach ($file_user as $lin_user => $user) { $arr_user = explode (":",$user); if ($arr_user[2]>=500 and $arr_user[2] <= 10000) { $mapeo_user[$arr_user[0]]= $arr_user[0]; } } 139 $form->addField(new PopupField('Usuarios:', 'user', true, $mapeo_user)); //$form->addField(new RadioButtonField('Usuario/Grupo:', 'usugrup',false, $eleccion)); //$form->addField(new PopupField('Opción: ', 'opcion', true, $op)); $form->addField(new PopupField('Acción: ', 'accion', true, $ac)); $form->addField(new LabelFieldmensaje('El ACEPTA Permitira Enviar y Recibir correos internos y externos del dominio actual', 'msn2')); //$form->addField(new LabelFieldmensaje('El OK Permitira Enviar y Recibir SOLO correos internos', 'msn3')); $form->addField(new LabelFieldmensaje('El DENIEGA no me permitira el Envio y Recepcion de correos internos y externos', 'msn4')); $form->addField(new SubmitFieldGroup(array('save' => 'Grabar', 'cancel' => 'Cancel'))); if ($form->isSubmitted('save')) { if ($form->validate()) #if(($form->getValue('nomusugru') == true) and ($form>getValue('usugrup') == true)and ($form->getValue('cuotagrac') == true)and ($form>getValue('cuotaabso') == true)) { #echo $form->getValue('usugrup')."<br/>"; //$letra= $form->getValue('opcion'); #echo $letra; $cmd = "sudo /var/www/html/sw_syscomsa/webpages/administracion_cuenta/scripts/controlaccusu ario_cmd.sh ".$form->getValue('user')." ".$form->getValue('accion'); #echo $cmd; $tmp = exec($cmd,$output,$status); #echo "<br/>".$tmp."<br/>"; # Exitosamente<br/>"; if ($status == 0) { echo "<br/>".$tmp."<br/>"; echo "Definicion de cuotas realizado $form->setValue('user',""); $form->setValue('accion',""); 140 } else { echo "Definicion de cuotas NO realizado<br/>"; foreach ($output as $line) { echo $line."<br/>";} } $form->display(); }else { echo "Ingrese los campos correctamente<br/>"; $form->display(); } } else if ($form->isSubmitted('cancel')) { header("Location: /sw_syscomsa/contenido.php"); } else { $form->display(); } ?> </body> </html> Archivo: pw_control_correo.php <html> <head> <script> // FUNCION PARA VALIDAR IP function validaip(ip) { partes=ip.split('.'); if (partes.length!=4) { alert("ERROR: La ip que usted ingreso no es valida"); return false; } for (i=0;i<4;i++) { num=partes[i]; 141 if (num>255 || num<0 || num.length==0 || isNaN(num)) { alert("ERROR: La ip que usted ingreso no es valida"); return false; } } return true; } //busca caracteres que no sean espacio en blanco en una cadena function vacio(o) { if (o == "") { alert("ERROR: No puede dejar el o los campos vacios") return false } var caract_extra=" " var ubicacion var enter = " " var caracteres = "1234567890 ABCDEFGHIJKLMNOPQRSTUVWXYZÑñáéíóúÁÉÍÓÚàèìòùÀÈÌÒÙºª\!|@·#$~ %½¬&/{/([)]=}?\'¡~¿+]*`[^'_-·;,.}çÇ" + String.fromCharCode(13) + enter + caract_extra var contador = 0 for (var i=0; i < o.length; i++) { if ( o.charAt(i) != "" ) { ubicacion = o.substring(i, i + 1) if (caracteres.indexOf(ubicacion) == -1) { contador++ } else { alert("ERROR: No se acepta el caracter '" + ubicacion + "'.") return false } } } return true } 142 //valida que el campo no este vacio y no tenga solo espacios en blanco function validatexto(F) { if( vacio(F) == false ) { //alert("Introduzca un cadena de texto correctamente.") return false } else { //alert("OK") return true } } //busca caracteres que no sean espacio en blanco en una cadena function vaciovacio(P) { if (P == "") { alert("ERROR: No puede dejar el o los campos vacios") return false } return true } //valida que el campo no este vacio y no tenga solo espacios en blanco function vaciotexto(G) { if( vaciovacio(G) == false ) { //alert("Introduzca un cadena de texto correctamente.") return false } else { //alert("OK") return true } } //busca caracteres que no sean espacio en blanco en una cadena function vaciodominio(p) { if (p == "") 143 { alert("ERROR: No puede dejar este campo vacio") return false } partes2=p.split('.'); if ((partes2.length!=2) && (partes2.length!=3)) { alert("ERROR: El nombre del dominio esta erroneo"); alert("Debe de ingresarlo de la sgte manera, 'dominio.com' o 'dominio.com.ec"); return false; } var caract_extra=" " var ubicacion var enter = " " var caracteres = "ABCDEFGHIJKLMNOPQRSTUVWXYZÑñáéíóúÁÉÍÓÚàèìòùÀÈÌÒÙºª\!|@·#$~ %½¬&/{/([)]=}?\'¡~¿+]*`[^'_-·;,}çÇ" + String.fromCharCode(13) + enter + caract_extra var contador = 0 for (var i=0; i < p.length; i++) { if ( p.charAt(i) != "" ) { ubicacion = p.substring(i, i + 1) if (caracteres.indexOf(ubicacion) == -1) { contador++ } else { alert("ERROR: No se acepta el caracter '" + ubicacion + "'.") return false } } } return true } //valida que el campo no este vacio y no tenga solo espacios en blanco function validadominio(g) 144 { if( vaciodominio(g) == false ) { //alert("Introduzca un cadena de texto correctamente.") return false } else { //alert("OK") return true } } //VALIDA TODOS LOS CAMPOS DEL FORMULARIO function validarFormulario() { if (vaciotexto(document.myform.opcion.value) == false) { return false; } if (vaciotexto(document.myform.accion.value) == false) { return false; } if ((document.myform.opcion.value)== "DO") { //alert("Dominio ") if (validadominio(document.myform.descrip.value) == false) { return false; } } if ((document.myform.opcion.value) == "IPR") { //alert("Ip red") if (validaip(document.myform.descrip.value) == false) { return false; } } return true; } 145 </script> <title>Control de Acceso de Correo</title> <style type="text/css"> body { background-color: #FFFFFF; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 18px; font-style: italic; line-height: 24px; color: #99FF99 #003300 #003300 #99FF99; margin-bottom: 0px; border-color: #0000CC; } td, th { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 18px; color: #3333FF; } a{ font-size: 12px; color: #336600; } form { background-color: #FFFFFF; background-image: url(../imagenes/Fondos/a16.jpg); } .title { font-family: "Comic Sans MS", Courier; font-size: 18px; line-height: 20px; background-color: #FFFFCC; color: #0000FF;} .subtitle { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 16px; line-height: 30px; color: #003300;} 146 .header { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 20px; background-color: #CCFFFF; color: #FFFF33; } .nav { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 14px; font-weight: normal; background-color: #CCFF99; } .navLink { font-family: Arial, Helvetica, sans-serif; font-size: 14px; font-weight: bold; background-color: #DEDECA; } .sidebar { font-family: "Comic Sans MS", Courier; font-size: 12px; line-height: normal; padding: 3px; background-color: #33CCFF; color: #0000CC; } .sidebarHeader { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 14px; line-height: 18px; color: #003300; background-color: #FFFF66; } .sidebarFooter { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 18px; background-color: #FFFF99; 147 font-style: italic; } .legal { font-family: Arial, Helvetica, sans-serif; font-size: 9px; color: #333333; } .box1 { border-width: thin; border-color: #99FF99 #003300 #003300 #99FF99; border-style: double; } .promo { font-family: "Verdana", Times, serif; color: #0000FF; font-size: 14px; font-weight: italic; } .footer { font-family: Arial, Helvetica, sans-serif; font-size: 24px; font-weight: bold; line-height: normal; color: #F3F2F9; background-color: #3B4D61; } .dingbat { font-family: Arial, Helvetica, sans-serif; background-color: #FFFFFF; color: #660000; font-weight: bolder; font-size: 20px; } .titlebar { font-family: "Times New Roman", Times, serif; font-size: 9px; color: #FFFFFF; background-color: #336699; } input.big { width: 100px; 148 } input.small { width: 50px; } .warning { color: #ff0000; } .required { color: #0000ff; } .fieldLabel { text-align: right; color: BLUE; } </style> </head> <body> <?php require_once('/var/www/html/sw_syscomsa/FormBuilder.php'); # require_once('FormBuilder.php'); //$ac = array ('RELAY' => 'RELAY', 'OK' => 'OK', 'REJECT' => 'REJECT'); $ac = array ('RELAY' => 'ACEPTA', 'REJECT' => 'DENIEGA'); $op = array ('IPR' => 'Ip/Red', 'DO' => 'Nombre Dominio'); $form = new FormBuilder(); $form->addField(new LabelFieldtitulo('Control de Acceso de Correo', 'controlacces')); $form->addField(new LabelFieldsubtitulo('Detalle de las Opciones', 'controlacces')); $form->addField(new LabelFieldmensaje('Usted podra darle o quitarle acceso al envio o recepcion de correo ya sea de una ip o de una red', 'controlacces')); $form->addField(new TextField('Descripción: ', 'descrip', 25,2,30)); $form->addField(new HiddenField('Campo: ', 'campo')); //$form->addField(new RadioButtonField('Usuario/Grupo:', 'usugrup',false, $eleccion)); 149 $form->addField(new PopupField('Opción: ', 'opcion', true, $op)); $form->addField(new PopupField('Acción: ', 'accion', true, $ac)); $form->addField(new LabelFieldmensaje('El ACEPTA Permitira Enviar y Recibir correos internos y externos del dominio actual', 'msn2')); //$form->addField(new LabelFieldmensaje('El OK Permitira Enviar y Recibir SOLO correos internos', 'msn3')); $form->addField(new LabelFieldmensaje('El DENIEGA no me permitira el Envio y Recepcion de correos internos y externos', 'msn4')); $form->addField(new SubmitFieldGroup(array('save' => 'Grabar', 'cancel' => 'Cancel'))); if ($form->isSubmitted('save')) { if ($form->validate()) #if(($form->getValue('nomusugru') == true) and ($form>getValue('usugrup') == true)and ($form->getValue('cuotagrac') == true)and ($form>getValue('cuotaabso') == true)) { #echo $form->getValue('usugrup')."<br/>"; $letra= $form->getValue('opcion'); #echo $letra; $cmd = "sudo /var/www/html/sw_syscomsa/webpages/administracion_cuenta/scripts/controlaccess_ cmd.sh ".$form->getValue('descrip')." ".$form->getValue('accion'); #echo $cmd; $tmp = exec($cmd,$output,$status); #echo "<br/>".$tmp."<br/>"; # Exitosamente<br/>"; if ($status == 0) { echo "<br/>".$tmp."<br/>"; echo "Definicion de cuotas realizado $form->setValue('descrip',""); $form->setValue('accion',""); $form->setValue('opcion',""); } else 150 { echo "Definicion de cuotas NO realizado<br/>"; foreach ($output as $line) { echo $line."<br/>";} } $form->display(); }else { echo "Ingrese los campos correctamente<br/>"; $form->display(); } } else if ($form->isSubmitted('cancel')) { header("Location: /sw_syscomsa/contenido.php"); } else { $form->display(); } ?> </body> </html> Sección administración usuarios. Esta sección se encuentra ubicada en la ruta: /var/www/html/sw_syscomsa/webpages/administracion_usuarios/ en el cual se encuentran los siguientes archivos Archivo: pw_crear_usuario.php <html> <head> <title>Creacion de Usuarios</title> <script> //busca caracteres que no sean espacio en blanco en una cadena function vacio(o) { if (o == "") { alert("ERROR: No puede dejar el o los campos vacios") return false } 151 var caract_extra=" " var ubicacion var enter = " " var caracteres = "1234567890 ABCDEFGHIJKLMNOPQRSTUVWXYZÑñáéíóúÁÉÍÓÚàèìòùÀÈÌÒÙºª\!|@·#$~ %½¬&/{/([)]=}?\'¡~¿+]*`[^'_-·;,}çÇ" + String.fromCharCode(13) + enter + caract_extra var contador = 0 for (var i=0; i < o.length; i++) { if ( o.charAt(i) != "" ) { ubicacion = o.substring(i, i + 1) if (caracteres.indexOf(ubicacion) == -1) { contador++ } else { alert("ERROR: No se acepta el caracter '" + ubicacion + "'.") return false } } } return true } //valida que el campo no este vacio y no tenga solo espacios en blanco function validatexto(F) { if( vacio(F) == false ) { //alert("Introduzca un cadena de texto correctamente.") return false } else { //alert("OK") return true } } //busca caracteres que no sean espacio en blanco en una cadena, caja de texto del nombre, apellido paterno y materno 152 function vacio2(q) { if (q == "") { alert("ERROR: No puede dejar el o los campos vacios") return false } var caract_extra=" " var ubicacion var enter = " " var caracteres = "1234567890 àèìòùÀÈÌÒÙºª\!|@·#$~%½¬&/{/ ([)]=}?\'¡~¿+]*`[^'_-·;,}çÇ" + String.fromCharCode(13) + enter + caract_extra var contador = 0 for (var i=0; i < q.length; i++) { if ( q.charAt(i) != "" ) { ubicacion = q.substring(i, i + 1) if (caracteres.indexOf(ubicacion) == -1) { contador++ } else { alert("ERROR: No se acepta el caracter '" + ubicacion + "'.") return false } } } return true } //valida que el campo no este vacio y no tenga solo espacios en blanco function validatexto2(H) { if( vacio2(H) == false ) { //alert("Introduzca un cadena de texto correctamente.") return false } else { //alert("OK") return true 153 } } //busca caracteres que no sean espacio en blanco en una cadena, valida password function vaciopass(p) { if (p == "") { alert("ERROR: No puede dejar el o los campos vacios") return false } var caract_extra=" " var ubicacion var enter = " " var caracteres = ".ºª\!|·#$~%½¬&/{/([)]=}?\'¡~¿+]*`[^'_·;,}çÇÑñáéíóúÁÉÍÓÚàèìòùÀÈÌÒÙ" + String.fromCharCode(13) + enter + caract_extra var contador = 0 for (var i=0; i < p.length; i++) { if ( p.charAt(i) != "" ) { ubicacion = p.substring(i, i + 1) if (caracteres.indexOf(ubicacion) == -1) { contador++ } else { alert("ERROR: No se acepta el caracter '" + ubicacion + "'.") return false } } } return true } //valida que el campo no este vacio y no tenga solo espacios en blanco function validapass(G) { if( vaciopass(G) == false ) { 154 //alert("Introduzca un cadena de texto correctamente.") return false } else { //alert("OK") return true } } //VALIDA TODOS LOS CAMPOS DEL FORMULARIO function validarFormulario() { if (validapass(document.myform.password.value) == false) { return false; } if (validapass(document.myform.password2.value) == false) { return false; } if (validatexto(document.myform.usuario.value) == false) { return false; } if (validatexto2(document.myform.nombre.value) == false) { return false; } if (validatexto2(document.myform.apellido1.value) == false) { return false; } if (validatexto2(document.myform.apellido2.value) == false) { return false; } return true; } </script> 155 <style type="text/css"> body { background-color: #FFFFFF; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 18px; font-style: italic; line-height: 24px; color: #99FF99 #003300 #003300 #99FF99; margin-bottom: 0px; border-color: #0000CC; } td, th { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 18px; color: #3333FF; } a{ font-size: 12px; color: #336600; } form { background-color: #FFFFFF; background-image: url(../imagenes/Fondos/a16.jpg); } .title { font-family: "Comic Sans MS", Courier; font-size: 18px; line-height: 20px; background-color: #FFFFCC; color: #0000FF;} .subtitle { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 16px; line-height: 30px; color: #003300;} .header { font-family: Verdana, Arial, Helvetica, sans-serif; 156 font-size: 20px; background-color: #CCFFFF; color: #FFFF33; } .nav { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 14px; font-weight: normal; background-color: #CCFF99; } .navLink { font-family: Arial, Helvetica, sans-serif; font-size: 14px; font-weight: bold; background-color: #DEDECA; } .sidebar { font-family: "Comic Sans MS", Courier; font-size: 12px; line-height: normal; padding: 3px; background-color: #33CCFF; color: #0000CC; } .sidebarHeader { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 14px; line-height: 18px; color: #003300; background-color: #FFFF66; } .sidebarFooter { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 18px; background-color: #FFFF99; font-style: italic; } 157 .legal { font-family: Arial, Helvetica, sans-serif; font-size: 9px; color: #333333; } .box1 { border-width: thin; border-color: #99FF99 #003300 #003300 #99FF99; border-style: double; } .promo { font-family: "Verdana", Times, serif; color: #0000FF; font-size: 14px; font-weight: italic; } .footer { font-family: Arial, Helvetica, sans-serif; font-size: 24px; font-weight: bold; line-height: normal; color: #F3F2F9; background-color: #3B4D61; } .dingbat { font-family: Arial, Helvetica, sans-serif; background-color: #FFFFFF; color: #660000; font-weight: bolder; font-size: 20px; } .titlebar { font-family: "Times New Roman", Times, serif; font-size: 9px; color: #FFFFFF; background-color: #336699; } input.big { width: 100px; } 158 input.small { width: 50px; } .warning { color: #ff0000; } .required { color: #0000ff; } .fieldLabel { text-align: right; color: BLUE; } </style> </head> <body> <?php require_once('/var/www/html/sw_syscomsa/FormBuilder.php'); $form = new FormBuilder(); $form->addField(new LabelFieldtitulo('Creación de Usuarios', 'creausua')); $form->addField(new LabelFieldsubtitulo('Detalle del Usuario', 'infoausua2')); $form->addField(new TextField('Username:', 'usuario', 25,4,30,'','promo')); $form->addField(new PasswordField('Password:', 'password', 25,6,20)); $form->addField(new PasswordField('Repita su Password:', 'password2', 25,6,20)); $form->addField(new LabelFieldmensaje('Recuerde que el username no debe contener mayusculas y ni caracteres especiales', 'mensaje')); $form->addField(new LabelFieldmensaje('El password debe tener minimo seis caracteres y diferente al username', 'mensaje2')); $form->addField(new LabelFieldsubtitulo('Información del Usuario', 'infoausua')); $form->addField(new TextField('Nombre del Usuario:', 'nombre', 25,2,30)); $form->addField(new TextField('Apellido Paterno:', 'apellido1', 25,2,20)); $form->addField(new TextField('Apellido Materno:', 'apellido2', 25,2,20)); $form->addField(new LabelFieldsubtitulo('Asignación de Área/Departamento', 'asgdept')); $file_group = file ( "/etc/group"); 159 foreach ($file_group as $linea => $contenido) { $arr_grupo = explode (":",$contenido); if ( $arr_grupo[2] >= 500 and $arr_grupo[2] <= 10000 ) { $grupo[$arr_grupo[2]] = $arr_grupo[0]; $form->addField(new PopupField('Departamentos:', 'departamento',true, $grupo)); } } $form->addField(new LabelFieldsubtitulo('Opciones de Usuario', 'opcusua')); $form->addField(new DateField('Fecha que expira cuenta:', 'fecha', true, false, array (-1,15))); $form->addField(new SubmitFieldGroup(array('submit' => 'Crear', 'cancel' => 'Cancel'))); if ($form->isSubmitted('submit')) { if ($form->validate()) { $pass = $form->getValue('password'); $pass2 = $form->getValue('password2'); $usuario_a_cre = $form->getValue('usuario'); $file_passwd = file ( "/etc/passwd"); $band=0; foreach ($file_passwd as $linea => $contenido) { $arr_usuario = explode (":",$contenido); $user = $arr_usuario[0]; if ( $arr_usuario[2] >= 500 and $usuario_a_cre == $user ) { $band=$band+1; } } if ($band!=0) { echo "El usuario ya existe por favor escriba otro username"; $form->setValue('usuario',''); 160 $form->setValue('password',''); $form->setValue('password2',''); $form->display(); } else { if ($usuario_a_cre==$pass or $pass!=$pass2 or $pass=="abcdef" or $pass=="012345" or $pass=="0123456" or $pass=="123456" or $pass=="01234567" or $pass=="012345678" or $pass=="0123456789" or $pass=="000000" or $pass=="0000000" or $pass=="00000000" or $pass=="000000000" or $pass=="0000000000" or $pass=="012abc" or $pass=="abc012" or $pass=="333333" or $pass=="3333333" or $pass=="33333333" or $pass=="333333333" or $pass=="3333333333" or $pass=="222222" or $pass=="2222222" or $pass=="22222222" or $pass=="222222222" or $pass=="2222222222" or $pass=="111111" or $pass=="1111111" or $pass=="11111111" or $pass=="111111111" or $pass=="1111111111" or $pass=="11111111" or $pass=="abc123456" or $pass=="abc123456" or $pass=="abc123" or $pass=="abcdef" or $pass=="abcdefg") { echo "Corrija su Password por favor"."<br/>"; $form->setValue('password',''); $form->setValue('password2',''); } else { $cmd = "sudo /var/www/html/sw_syscomsa/webpages/administracion_usuarios/scripts/useradd_cm d.sh ".$form->getValue('usuario')." ".$form->getValue('departamento')." ".$form>getValue('fecha')." ".$form->getValue('nombre')." ".$form->getValue('apellido1')." ". $form->getValue('apellido2'); # echo $cmd; $tmp = exec($cmd,$output,$status); # echo "<br/>".$tmp."<br/>"; if ($status == 0) { $cmd = "sudo /var/www/html/sw_syscomsa/webpages/administracion_usuarios/scripts/chpasswd.sh ".$form->getValue('usuario')." ".$form->getValue('password'); #echo $cmd; $tmp = exec($cmd,$output,$status); 161 #echo "<br/>".$tmp."<br/>"; echo "Usuario Creado Exitosamente<br/>"; $form->setValue('usuario',''); $form->setValue('password',''); $form->setValue('password2',''); $form->setValue('nombre',''); $form->setValue('apellido1',''); $form->setValue('apellido2',''); $form->setValue('departamento',''); $form->setValue('fecha',''); }else { echo "Usuario no Creado<br/>"; foreach ($output as $line) { echo $line."<br/>";} } } $form->display(); } }else { echo "Ingrese los campos faltantes<br/>"; $form->display(); } }else if ($form->isSubmitted('cancel')) { header("Location: /sw_syscomsa/contenido.php"); }else { $form->display(); } ?> </body> </html> Archivo: pw_crear_grupo.php <html> <head> <title>Creacion de Departamentos</title> <script> //busca caracteres que no sean espacio en blanco en una cadena 162 function vacio(o) { if (o == "") { alert("ERROR: No puede dejar este campo vacio") return false } var caract_extra=" " var ubicacion var enter = " " var caracteres = "1234567890 ABCDEFGHIJKLMNOPQRSTUVWXYZÑñáéíóúÁÉÍÓÚàèìòùÀÈÌÒÙºª\!|@·#$~ %½¬&/{/([)]=}?\'¡~¿+]*`[^'_-·;,}çÇ" + String.fromCharCode(13) + enter + caract_extra var contador = 0 for (var i=0; i < o.length; i++) { if ( o.charAt(i) != "" ) { ubicacion = o.substring(i, i + 1) if (caracteres.indexOf(ubicacion) == -1) { contador++ } else { alert("ERROR: No se acepta el caracter '" + ubicacion + "'.") return false } } } return true } //valida que el campo no este vacio y no tenga solo espacios en blanco function validatexto(F) { if( vacio(F) == false ) { //alert("Introduzca un cadena de texto correctamente.") return false } else { 163 //alert("OK") return true } } //VALIDA TODOS LOS CAMPOS DEL FORMULARIO function validarFormulario() { if (validatexto(document.myform.departamento.value) == false) { return false; } return true; } </script> <style type="text/css"> body { background-color: #FFFFFF; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 18px; font-style: italic; line-height: 24px; color: #99FF99 #003300 #003300 #99FF99; margin-bottom: 0px; border-color: #0000CC; } td, th { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 18px; color: #3333FF; } a{ font-size: 12px; color: #336600; } form { background-color: #FFFFFF; background-image: url(../imagenes/Fondos/a16.jpg); 164 } .title { font-family: "Comic Sans MS", Courier; font-size: 18px; line-height: 20px; background-color: #FFFFCC; color: #0000FF;} .subtitle { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 16px; line-height: 30px; color: #003300;} .header { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 20px; background-color: #CCFFFF; color: #FFFF33; } .nav { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 14px; font-weight: normal; background-color: #CCFF99; } .navLink { font-family: Arial, Helvetica, sans-serif; font-size: 14px; font-weight: bold; background-color: #DEDECA; } .sidebar { font-family: "Comic Sans MS", Courier; font-size: 12px; line-height: normal; padding: 3px; background-color: #33CCFF; color: #0000CC; } 165 .sidebarHeader { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 14px; line-height: 18px; color: #003300; background-color: #FFFF66; } .sidebarFooter { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 18px; background-color: #FFFF99; font-style: italic; } .legal { font-family: Arial, Helvetica, sans-serif; font-size: 9px; color: #333333; } .box1 { border-width: thin; border-color: #99FF99 #003300 #003300 #99FF99; border-style: double; } .promo { font-family: "Verdana", Times, serif; color: #0000FF; font-size: 14px; font-weight: italic; } .footer { font-family: Arial, Helvetica, sans-serif; font-size: 24px; font-weight: bold; line-height: normal; color: #F3F2F9; background-color: #3B4D61; } 166 .dingbat { font-family: Arial, Helvetica, sans-serif; background-color: #FFFFFF; color: #660000; font-weight: bolder; font-size: 20px; } .titlebar { font-family: "Times New Roman", Times, serif; font-size: 9px; color: #FFFFFF; background-color: #336699; } input.big { width: 100px; } input.small { width: 50px; } .warning { color: #ff0000; } .required { color: #0000ff; } .fieldLabel { text-align: right; color: BLUE; } </style> </head> <body> <?php require_once('/var/www/html/sw_syscomsa/FormBuilder.php'); $form = new FormBuilder(); $form->addField(new LabelFieldtitulo('Creación de Área/Departamento', 'asgdept')); $form->addField(new LabelFieldsubtitulo('Datos del Departameto', 'datdept')); 167 $form->addField(new TextField('Departamento:', 'departamento', 25,4,30)); $form->addField(new LabelFieldmensaje('Recuerde que el nombre departamento no debe contener mayusculas y ni caracteres especiales', 'mensaje')); $form->addField(new SubmitFieldGroup(array('submit' => 'Crear', 'cancel' => 'Cancel'))); if ($form->isSubmitted('submit')) { if($form->validate()) { $usuario_a_cre = $form->getValue('departamento'); $file_group = file ( "/etc/group"); $band=0; foreach ($file_group as $linea => $contenido) { $arr_grupo = explode (":",$contenido); $user = $arr_grupo[0]; if ( $arr_grupo[2] >= 500 and $usuario_a_cre == $user ) { $band=$band+1; } } if ($band!=0) { echo "El grupo ya existe por favor escriba otro"; $form->setValue('departamento',''); $form->display(); } else { $cmd = "sudo /var/www/html/sw_syscomsa/webpages/administracion_usuarios/scripts/groupadd_c md.sh ".$form->getValue('departamento'); #echo $cmd; $tmp = exec($cmd,$output,$status); #echo "<br/>".$tmp."<br/>"; if ($status == 0) { 168 echo "Departamento Creado Exitosamente<br/>"; $form->setValue('departamento',' '); } else { echo "Usuario no Creado<br/>"; foreach ($output as $line) { echo $line."<br/>";} } $form->display(); } }else { echo "Ingrese los campos faltantes<br/>"; $form->display(); } } else if ($form->isSubmitted('cancel')) { header("Location: /sw_syscomsa/contenido.php"); } else { $form->display(); } ?> </body> </html> Archivo: pw_crear_usua_lista.php <html> <head> <title>Creación de Usuarios por Lista</title> <script> //busca caracteres que no sean espacio en blanco en una cadena function vacio(o) { if (o == "") { alert("ERROR: No puede dejar este campo vacio") return false } var caract_extra="" 169 var ubicacion var enter = "" var caracteres = "ÑñáéíóúÁÉÍÓÚàèìòùÀÈÌÒÙºª!|@·#$~ %½¬&{([)]=}?'¡~¿+]*`[^'·;,}çÇ" + String.fromCharCode(13) + enter + caract_extra var contador = 0 for (var i=0; i < o.length; i++) { if ( o.charAt(i) != "" ) { ubicacion = o.substring(i, i + 1) if (caracteres.indexOf(ubicacion) == -1) { contador++ } else { alert("ERROR: No se acepta el caracter '" + ubicacion + "'.") return false } } } return true } //valida que el campo no este vacio y no tenga solo espacios en blanco function validatexto(F) { if( vacio(F) == false ) { //alert("Introduzca un cadena de texto correctamente.") return false } else { //alert("OK") return true } } //VALIDA TODOS LOS CAMPOS DEL FORMULARIO function validarFormulario() { if (validatexto(document.myform.exa.value) == false) { return false; 170 } return true; } </script> <style type="text/css"> body { background-color: #FFFFFF; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 18px; font-style: italic; line-height: 24px; color: #99FF99 #003300 #003300 #99FF99; margin-bottom: 0px; border-color: #0000CC; } td, th { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 18px; color: #3333FF; } a{ font-size: 12px; color: #336600; } form { background-color: #FFFFFF; background-image: url(../imagenes/Fondos/a16.jpg); } .title { font-family: "Comic Sans MS", Courier; font-size: 18px; line-height: 20px; background-color: #FFFFCC; color: #0000FF;} .subtitle { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 16px; 171 line-height: 30px; color: #003300;} .header { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 20px; background-color: #CCFFFF; color: #FFFF33; } .nav { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 14px; font-weight: normal; background-color: #CCFF99; } .navLink { font-family: Arial, Helvetica, sans-serif; font-size: 14px; font-weight: bold; background-color: #DEDECA; } .sidebar { font-family: "Comic Sans MS", Courier; font-size: 12px; line-height: normal; padding: 3px; background-color: #33CCFF; color: #0000CC; } .sidebarHeader { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 14px; line-height: 18px; color: #003300; background-color: #FFFF66; } .sidebarFooter { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; 172 line-height: 18px; background-color: #FFFF99; font-style: italic; } .legal { font-family: Arial, Helvetica, sans-serif; font-size: 9px; color: #333333; } .box1 { border-width: thin; border-color: #99FF99 #003300 #003300 #99FF99; border-style: double; } .promo { font-family: "Verdana", Times, serif; color: #0000FF; font-size: 14px; font-weight: italic; } .footer { font-family: Arial, Helvetica, sans-serif; font-size: 24px; font-weight: bold; line-height: normal; color: #F3F2F9; background-color: #3B4D61; } .dingbat { font-family: Arial, Helvetica, sans-serif; background-color: #FFFFFF; color: #660000; font-weight: bolder; font-size: 20px; } .titlebar { font-family: "Times New Roman", Times, serif; font-size: 9px; color: #FFFFFF; 173 background-color: #336699; } input.big { width: 100px; } input.small { width: 50px; } .warning { color: #ff0000; } .required { color: #0000ff; } .fieldLabel { text-align: right; color: BLUE; } </style> </head> <body> <?php require_once('/var/www/html/sw_syscomsa/FormBuilder.php'); $form = new FormBuilder5(); $form->addField(new LabelFieldtitulo('Creación de Usuarios desde Archivo', 'creausualista')); $form->addField(new LabelFieldmensaje('Aquí podrás crear los usuarios de inmediato mediante un archivo en donde se encontrara una serie de usuarios que deseas crear.', 'mensaje1')); // $form->addField(new UploadField('Ruta del Archivo a ejecutar:','exa',true,28,150,'/var/www/html/sw_syscomsa/webpages/administracion_u suarios')); $form->addField(new TextField('Ruta del Archivo a ejecutar:','exa',35,2,15000)); 174 $form->addField(new LabelFieldmensaje('El formato de las lineas del archivo para la creacion de usuarios por listas deben estar especificados de la sgte manera: ', 'mensaje3')); $form->addField(new LabelFieldmensaje2('Username:Password:Nombre:ApellidoPaterno:ApellidoMaterno :Departamento:FechaExpiracion(Año-Mes-Dia):', 'mensaje4')); $form->addField(new SubmitFieldGroup(array('crear' => 'Enviar', 'cancel' => 'Cancel'))); if ($form->isSubmitted('crear')) { $form->display(); }else if ($form->isSubmitted('cancel')) { header("Location: /sw_syscomsa/contenido.php"); } else { $form->display(); } ?> </form> </body> </html> Archivo: pw_mod_usuario.php <html> <head> <title>Busqueda de Usuarios</title> <script> //busca caracteres que no sean espacio en blanco en una cadena function vacio(o) { if (o == "") { alert("ERROR: No puede dejar este campo vacio") return false } var caract_extra=" " 175 var ubicacion var enter = " " var caracteres = "1234567890 ABCDEFGHIJKLMNOPQRSTUVWXYZÑñáéíóúÁÉÍÓÚàèìòùÀÈÌÒÙºª\!|@·#$~ %½¬&/{/([)]=}?\'¡~¿+]*`[^'_-·;,}çÇ" + String.fromCharCode(13) + enter + caract_extra var contador = 0 for (var i=0; i < o.length; i++) { if ( o.charAt(i) != "" ) { ubicacion = o.substring(i, i + 1) if (caracteres.indexOf(ubicacion) == -1) { contador++ } else { alert("ERROR: No se acepta el caracter '" + ubicacion + "'.") return false } } } return true } //valida que el campo no este vacio y no tenga solo espacios en blanco function validatexto(F) { if( vacio(F) == false ) { //alert("Introduzca un cadena de texto correctamente.") return false } else { //alert("OK") return true } } //VALIDA TODOS LOS CAMPOS DEL FORMULARIO function validarFormulario() { if (validatexto(document.myform.user.value) == false) 176 { return false; } return true; } </script> <style type="text/css"> body { background-color: #FFFFFF; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 18px; font-style: italic; line-height: 24px; color: #99FF99 #003300 #003300 #99FF99; margin-bottom: 0px; border-color: #0000CC; } td, th { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 18px; color: #3333FF; } a{ font-size: 12px; color: #336600; } form { background-color: #FFFFFF; background-image: url(../imagenes/Fondos/a16.jpg); } .title { font-family: "Comic Sans MS", Courier; font-size: 18px; line-height: 20px; background-color: #FFFFCC; color: #0000FF;} .subtitle { 177 font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 16px; line-height: 30px; color: #003300;} .header { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 20px; background-color: #CCFFFF; color: #FFFF33; } .nav { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 14px; font-weight: normal; background-color: #CCFF99; } .navLink { font-family: Arial, Helvetica, sans-serif; font-size: 14px; font-weight: bold; background-color: #DEDECA; } .sidebar { font-family: "Comic Sans MS", Courier; font-size: 12px; line-height: normal; padding: 3px; background-color: #33CCFF; color: #0000CC; } .sidebarHeader { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 14px; line-height: 18px; color: #003300; background-color: #FFFF66; } .sidebarFooter { 178 font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 18px; background-color: #FFFF99; font-style: italic; } .legal { font-family: Arial, Helvetica, sans-serif; font-size: 9px; color: #333333; } .box1 { border-width: thin; border-color: #99FF99 #003300 #003300 #99FF99; border-style: double; } .promo { font-family: "Verdana", Times, serif; color: #0000FF; font-size: 14px; font-weight: italic; } .footer { font-family: Arial, Helvetica, sans-serif; font-size: 24px; font-weight: bold; line-height: normal; color: #F3F2F9; background-color: #3B4D61; } .dingbat { font-family: Arial, Helvetica, sans-serif; background-color: #FFFFFF; color: #660000; font-weight: bolder; font-size: 20px; } .titlebar { font-family: "Times New Roman", Times, serif; 179 font-size: 9px; color: #FFFFFF; background-color: #336699; } input.big { width: 100px; } input.small { width: 50px; } .warning { color: #ff0000; } .required { color: #0000ff; } .fieldLabel { text-align: right; color: BLUE; } </style> </head> <body> <?php require_once('/var/www/html/sw_syscomsa/FormBuilder.php'); $form = new FormBuilder2(); $form->addField(new LabelFieldtitulo('Busqueda de Usuario', 'modusua')); $form->addField(new LabelFieldmensaje('Seleccione el nombre del usuario a Buscar', 'msn1')); $file_user = file ("/etc/passwd"); foreach ($file_user as $lin_user => $user) { $arr_user = explode (":",$user); if ($arr_user[2]>=500 and $arr_user[2] <= 10000) { $mapeo_user[$arr_user[0]]= $arr_user[0]; 180 } } $form->addField(new PopupField('Usuarios:', 'user', true, $mapeo_user)); $form->addField(new SubmitField('search', 'Buscar', 25,2,30)); if ($form->isSubmitted('search')) { $form->display(); }else { $form->display(); } ?> </body> </html> Archivo: pw_modif_usuario.php <html> <head> <title>Modificacion de Usuarios</title> <script> //busca caracteres que no sean espacio en blanco en una cadena function vacio(o) { if (o == "") { alert("ERROR: No puede dejar el o los campos vacios") return false } var caract_extra=" " var ubicacion var enter = " " var caracteres = "1234567890 ABCDEFGHIJKLMNOPQRSTUVWXYZÑñáéíóúÁÉÍÓÚàèìòùÀÈÌÒÙºª\!|@·#$~ %½¬&/{/([)]=}?\'¡~¿+]*`[^'_-·;,}çÇ" + String.fromCharCode(13) + enter + caract_extra var contador = 0 for (var i=0; i < o.length; i++) { if ( o.charAt(i) != "" ) { 181 ubicacion = o.substring(i, i + 1) if (caracteres.indexOf(ubicacion) == -1) { contador++ } else { alert("ERROR: No se acepta el caracter '" + ubicacion + "'.") return false } } } return true } //valida que el campo no este vacio y no tenga solo espacios en blanco function validatexto(F) { if( vacio(F) == false ) { //alert("Introduzca un cadena de texto correctamente.") return false } else { //alert("OK") return true } } //busca caracteres que no sean espacio en blanco en una cadena, caja de texto del nombre, apellido paterno y materno function vacio2(q) { if (q == "") { alert("ERROR: No puede dejar el o los campos vacios") return false } var caract_extra=" " var ubicacion var enter = " " var caracteres = "1234567890 àèìòùÀÈÌÒÙºª\!|@·#$~%½¬&/{/ ([)]=}?\'¡~¿+]*`[^'_-·;,}çÇ" + String.fromCharCode(13) + enter + caract_extra 182 var contador = 0 for (var i=0; i < q.length; i++) { if ( q.charAt(i) != "" ) { ubicacion = q.substring(i, i + 1) if (caracteres.indexOf(ubicacion) == -1) { contador++ } else { alert("ERROR: No se acepta el caracter '" + ubicacion + "'.") return false } } } return true } //valida que el campo no este vacio y no tenga solo espacios en blanco function validatexto2(H) { if( vacio2(H) == false ) { //alert("Introduzca un cadena de texto correctamente.") return false } else { //alert("OK") return true } } //busca caracteres que no sean espacio en blanco en una cadena, valida password function vaciopass(p) { if (p == "") { alert("ERROR: No puede dejar el o los campos vacios") return false } 183 var caract_extra=" " var ubicacion var enter = " " var caracteres = "ÑñáéíóúÁÉÍÓÚàèìòùÀÈÌÒÙºª\!|@·#$~%½¬&/{/ ([)]=}?\'¡~¿+]*`[^'_-·;,}çÇ " + String.fromCharCode(13) + enter + caract_extra var contador = 0 for (var i=0; i < p.length; i++) { if ( p.charAt(i) != "" ) { ubicacion = p.substring(i, i + 1) if (caracteres.indexOf(ubicacion) == -1) { contador++ } else { alert("ERROR: No se acepta el caracter '" + ubicacion + "'.") return false } } } return true } //valida que el campo no este vacio y no tenga solo espacios en blanco function validapass(G) { if( vaciopass(G) == false ) { //alert("Introduzca un cadena de texto correctamente.") return false } else { //alert("OK") return true } } //VALIDA TODOS LOS CAMPOS DEL FORMULARIO function validarFormulario() { if (validapass(document.myform.passw.value) == false) { 184 return false; } if (validapass(document.myform.passw2.value) == false) { return false; } if (validatexto(document.myform.userna.value) == false) { return false; } if (validatexto2(document.myform.name.value) == false) { return false; } if (validatexto2(document.myform.apel1.value) == false) { return false; } if (validatexto2(document.myform.apel2.value) == false) { return false; } return true; } </script> <style type="text/css"> body { background-color: #FFFFFF; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 18px; font-style: italic; line-height: 24px; color: #99FF99 #003300 #003300 #99FF99; margin-bottom: 0px; border-color: #0000CC; } 185 td, th { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 18px; color: #3333FF; } a{ font-size: 12px; color: #336600; } form { background-color: #FFFFFF; background-image: url(../imagenes/Fondos/a16.jpg); } .title { font-family: "Comic Sans MS", Courier; font-size: 18px; line-height: 20px; background-color: #FFFFCC; color: #0000FF;} .subtitle { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 16px; line-height: 30px; color: #003300;} .header { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 20px; background-color: #CCFFFF; color: #FFFF33; } .nav { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 14px; font-weight: normal; background-color: #CCFF99; } .navLink { 186 font-family: Arial, Helvetica, sans-serif; font-size: 14px; font-weight: bold; background-color: #DEDECA; } .sidebar { font-family: "Comic Sans MS", Courier; font-size: 12px; line-height: normal; padding: 3px; background-color: #33CCFF; color: #0000CC; } .sidebarHeader { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 14px; line-height: 18px; color: #003300; background-color: #FFFF66; } .sidebarFooter { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 18px; background-color: #FFFF99; font-style: italic; } .legal { font-family: Arial, Helvetica, sans-serif; font-size: 9px; color: #333333; } .box1 { border-width: thin; border-color: #99FF99 #003300 #003300 #99FF99; border-style: double; } 187 .promo { font-family: "Verdana", Times, serif; color: #0000FF; font-size: 14px; font-weight: italic; } .footer { font-family: Arial, Helvetica, sans-serif; font-size: 24px; font-weight: bold; line-height: normal; color: #F3F2F9; background-color: #3B4D61; } .dingbat { font-family: Arial, Helvetica, sans-serif; background-color: #FFFFFF; color: #660000; font-weight: bolder; font-size: 20px; } .titlebar { font-family: "Times New Roman", Times, serif; font-size: 9px; color: #FFFFFF; background-color: #336699; } input.big { width: 100px; } input.small { width: 50px; } .warning { color: #ff0000; } .required { color: #0000ff; } 188 .fieldLabel { text-align: right; color: BLUE; } </style> </head> <body> <?php require_once('/var/www/html/sw_syscomsa/FormBuilder.php'); $form = new FormBuilder(); $usuario_a_mod = $_GET['user']; $form = new FormBuilder(); $form->addField(new LabelFieldtitulo('Modificación del Usuario: '.'"'. $usuario_a_mod.'"', 'modusua')); $form->addField(new LabelFieldsubtitulo('Detalle del Usuario', 'detusua')); $form->addField(new HiddenField('userac','Username Actual')); $form->addField(new TextField('UserName Nuevo:', 'userna', 25,4,30)); $form->addField(new PasswordField('Password:','passw',25,6,20 )); $form->addField(new PasswordField('Repita su Password:','passw2',25,6,20 )); $form->addField(new LabelFieldmensaje('Recuerde que el username no debe contener mayusculas y ni caracteres especiales', 'mensaje')); $form->addField(new LabelFieldmensaje('El password debe tener minimo seis caracteres y diferente al username', 'mensaje2')); $form->addField(new LabelFieldsubtitulo('Informacion del Usuario', 'infoausua')); $form->addField(new TextField('Nombre del Usuario:', 'name', 25,2,30)); $form->addField(new TextField('Apellido Paterno:', 'apel1', 25,5,20)); $form->addField(new TextField('Apellido Materno:', 'apel2', 25,5,20)); $form->addField(new LabelFieldsubtitulo('Asignación de Área/Departamento','asgdept')); $file_group = file ("/etc/group"); foreach ($file_group as $lin_group => $group) { $arr_grupo = explode (":",$group); if ($arr_grupo[2]>=500 and $arr_grupo[2] <= 10000) 189 { $mapeo_grupo[$arr_grupo[2]]= $arr_grupo[0]; } } foreach ($mapeo_grupo as $indice => $contenido) { #echo "Num grupo:".$indice." - Nombre grupo:".$contenido."<br/>"; } $file_passwd = file ( "/etc/passwd"); foreach ($file_passwd as $linea => $contenido) { $arr_usuario = explode (":",$contenido); $usuario = $arr_usuario[0]; if ($arr_usuario[2] >= 500 and $arr_usuario[2] <= 1000 and $usuario_a_mod == $usuario ) { $nombre = $arr_usuario[4]; $arr_nombre = explode (" ",$nombre); $primer_nombre = $arr_nombre[0]; $apellido_mat = $arr_nombre[2]; $apellido_pat = $arr_nombre[1]; $departamento = $arr_usuario[3]; } } $form->addField(new PopupField('Departamentos:', 'departamentos',true, $mapeo_grupo)); $form->addField(new LabelFieldsubtitulo('Opciones de Usuario', 'opcusua')); $form->addField(new DateField('Fecha que expira cuenta:', 'date', true, false, array (-1,15))); $form->setValue('userac',$_POST['user']); $form->setValue('name',$primer_nombre); $form->setValue('apel1',$apellido_pat); $form->setValue('apel2',$apellido_mat); $form->setValue('departamentos',$departamento); $form->setValue('date',''); $form->addField(new SubmitFieldGroup(array('change' => 'Modificar', 'cancel' => 'Cancelar'))); 190 if ($form->isSubmitted('change')) { if ($form->validate()) { $pass = $form->getValue('passw'); $pass2 = $form->getValue('passw2'); $usuario_a_cre = $form->getValue('userna'); $file_passwd = file ( "/etc/passwd"); $band=0; foreach ($file_passwd as $linea => $contenido) { $arr_usuario = explode (":",$contenido); $user = $arr_usuario[0]; if ( $arr_usuario[2] >= 500 and $usuario_a_cre == $user and $usuario_a_cre!= $usuario_a_mod ) { $band=$band+1; } } if ($band!=0) { echo "El usuario ya existe por favor escriba otro username"; $form->setValue('userna',''); $form->setValue('passw',''); $form->setValue('passw2',''); $form->display(); } else { if ($usuario_a_cre==$pass or $pass!=$pass2 or $pass=="abcdef" or $pass=="012345" or $pass=="0123456" or $pass=="01234567" or $pass=="012345678" or $pass=="0123456789" or $pass=="000000" or $pass=="0000000" or $pass=="00000000" or $pass=="000000000" or $pass=="0000000000" or $pass=="012abc" or $pass=="abc012" or $pass=="abc123456" or $pass=="abc123" or $pass=="abcdef" or $pass=="abcdefg") { echo "Corrija su Password por favor"."<br/>"; $form->setValue('passw',''); $form->setValue('passw2',''); $form->display(); } 191 else { $cmd = "sudo /var/www/html/sw_syscomsa/webpages/administracion_usuarios/scripts/changeuser_ cmd.sh ".$_GET['user']." ".$form->getValue('userna')." ".$form->getValue('name')." ".$form->getValue('apel1')." ".$form->getValue('apel2')." ".$form>getValue('departamentos')." ".$form->getValue('date'); # echo $cmd; $tmp = exec($cmd,$output,$status); #echo $tmp; if ($status == 0) { $cmd = "sudo /var/www/html/sw_syscomsa/webpages/administracion_usuarios/scripts/chpasswd.sh ".$form->getValue('userna')." ".$form->getValue('passw'); #echo $cmd; $tmp = exec($cmd,$output,$status); #echo "<br/>".$tmp."<br/>"; #header ("Location: ./pw_mod_usuario.php"); echo "Usuario Modificado Exitosamente<br/>"; }else { echo "Usuario no Modificado<br/>"; foreach ($output as $line) { echo $line."<br/>";} } } #$form->display(); } }else { echo "Ingrese los campos faltantes<br/>"; $form->display(); } }else if ($form->isSubmitted('cancel')) { header ("Location: ./pw_mod_usuario.php"); } else { $form->display(); 192 } ?> </body> </html> Archivo: pw_mod_grupo.php <html> <head> <title>Busqueda de Departamentos</title> <script> //busca caracteres que no sean espacio en blanco en una cadena function vacio(o) { if (o == "") { alert("ERROR: No puede dejar este campo vacio") return false } var caract_extra=" " var ubicacion var enter = " " var caracteres = "1234567890 ABCDEFGHIJKLMNOPQRSTUVWXYZÑñáéíóúÁÉÍÓÚàèìòùÀÈÌÒÙºª\!|@·#$~ %½¬&/{/([)]=}?\'¡~¿+]*`[^'_-·;,}çÇ" + String.fromCharCode(13) + enter + caract_extra var contador = 0 for (var i=0; i < o.length; i++) { if ( o.charAt(i) != "" ) { ubicacion = o.substring(i, i + 1) if (caracteres.indexOf(ubicacion) == -1) { contador++ } else { alert("ERROR: No se acepta el caracter '" + ubicacion + "'.") return false } } } return true 193 } //valida que el campo no este vacio y no tenga solo espacios en blanco function validatexto(F) { if( vacio(F) == false ) { //alert("Introduzca un cadena de texto correctamente.") return false } else { //alert("OK") return true } } //VALIDA TODOS LOS CAMPOS DEL FORMULARIO function validarFormulario() { if (validatexto(document.myform.group.value) == false) { return false; } return true; } </script> <style type="text/css"> body { background-color: #FFFFFF; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 18px; font-style: italic; line-height: 24px; color: #99FF99 #003300 #003300 #99FF99; margin-bottom: 0px; border-color: #0000CC; } td, th { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 18px; 194 color: #3333FF; } a{ font-size: 12px; color: #336600; } form { background-color: #FFFFFF; background-image: url(../imagenes/Fondos/a16.jpg); } .title { font-family: "Comic Sans MS", Courier; font-size: 18px; line-height: 20px; background-color: #FFFFCC; color: #0000FF;} .subtitle { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 16px; line-height: 30px; color: #003300;} .header { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 20px; background-color: #CCFFFF; color: #FFFF33; } .nav { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 14px; font-weight: normal; background-color: #CCFF99; } .navLink { font-family: Arial, Helvetica, sans-serif; font-size: 14px; font-weight: bold; background-color: #DEDECA; 195 } .sidebar { font-family: "Comic Sans MS", Courier; font-size: 12px; line-height: normal; padding: 3px; background-color: #33CCFF; color: #0000CC; } .sidebarHeader { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 14px; line-height: 18px; color: #003300; background-color: #FFFF66; } .sidebarFooter { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 18px; background-color: #FFFF99; font-style: italic; } .legal { font-family: Arial, Helvetica, sans-serif; font-size: 9px; color: #333333; } .box1 { border-width: thin; border-color: #99FF99 #003300 #003300 #99FF99; border-style: double; } .promo { font-family: "Verdana", Times, serif; color: #0000FF; 196 font-size: 14px; font-weight: italic; } .footer { font-family: Arial, Helvetica, sans-serif; font-size: 24px; font-weight: bold; line-height: normal; color: #F3F2F9; background-color: #3B4D61; } .dingbat { font-family: Arial, Helvetica, sans-serif; background-color: #FFFFFF; color: #660000; font-weight: bolder; font-size: 20px; } .titlebar { font-family: "Times New Roman", Times, serif; font-size: 9px; color: #FFFFFF; background-color: #336699; } input.big { width: 100px; } input.small { width: 50px; } .warning { color: #ff0000; } .required { color: #0000ff; } .fieldLabel { text-align: right; color: BLUE; } 197 </style> </head> <body> <?php require_once('/var/www/html/sw_syscomsa/FormBuilder.php'); $form = new FormBuilder3(); $form->addField(new LabelFieldtitulo('Busqueda de Grupo', 'modgrupo')); $form->addField(new LabelFieldmensaje('Seleccione el nombre del grupo a buscar', 'modusua1')); $file_group = file ("/etc/group"); foreach ($file_group as $lin_group => $group) { $arr_group = explode (":",$group); if ($arr_group[2]>=500 and $arr_group[2] <= 10000) { $mapeo_group[$arr_group[0]]= $arr_group[0]; } } $form->addField(new PopupField('Nombre del Grupo:', 'group', true, $mapeo_group)); $form->addField(new SubmitField('search', 'Buscar', 25,2,30)); if ($form->isSubmitted('search')) { $form->display(); }else { $form->display(); } ?> </body> </html> Archivo: pw_modif_grupo.php <html> <head> 198 <title>Creacion de Departamentos</title> <script> //busca caracteres que no sean espacio en blanco en una cadena function vacio(o) { if (o == "") { alert("ERROR: No puede dejar este campo vacio") return false } var caract_extra=" " var ubicacion var enter = " " var caracteres = "1234567890 ABCDEFGHIJKLMNOPQRSTUVWXYZÑñáéíóúÁÉÍÓÚàèìòùÀÈÌÒÙºª\!|@·#$~ %½¬&/{/([)]=}?\'¡~¿+]*`[^'_-·;,}çÇ" + String.fromCharCode(13) + enter + caract_extra var contador = 0 for (var i=0; i < o.length; i++) { if ( o.charAt(i) != "" ) { ubicacion = o.substring(i, i + 1) if (caracteres.indexOf(ubicacion) == -1) { contador++ } else { alert("ERROR: No se acepta el caracter '" + ubicacion + "'.") return false } } } return true } //valida que el campo no este vacio y no tenga solo espacios en blanco function validatexto(F) { if( vacio(F) == false ) { 199 //alert("Introduzca un cadena de texto correctamente.") return false } else { //alert("OK") return true } } //VALIDA TODOS LOS CAMPOS DEL FORMULARIO function validarFormulario() { if (validatexto(document.myform.gruponue.value) == false) { return false; } return true; } </script> <style type="text/css"> body { background-color: #FFFFFF; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 18px; font-style: italic; line-height: 24px; color: #99FF99 #003300 #003300 #99FF99; margin-bottom: 0px; border-color: #0000CC; } td, th { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 18px; color: #3333FF; } a{ font-size: 12px; color: #336600; } 200 form { background-color: #FFFFFF; background-image: url(../imagenes/Fondos/a16.jpg); } .title { font-family: "Comic Sans MS", Courier; font-size: 18px; line-height: 20px; background-color: #FFFFCC; color: #0000FF;} .subtitle { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 16px; line-height: 30px; color: #003300;} .header { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 20px; background-color: #CCFFFF; color: #FFFF33; } .nav { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 14px; font-weight: normal; background-color: #CCFF99; } .navLink { font-family: Arial, Helvetica, sans-serif; font-size: 14px; font-weight: bold; background-color: #DEDECA; } .sidebar { font-family: "Comic Sans MS", Courier; font-size: 12px; line-height: normal; padding: 3px; 201 background-color: #33CCFF; color: #0000CC; } .sidebarHeader { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 14px; line-height: 18px; color: #003300; background-color: #FFFF66; } .sidebarFooter { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 18px; background-color: #FFFF99; font-style: italic; } .legal { font-family: Arial, Helvetica, sans-serif; font-size: 9px; color: #333333; } .box1 { border-width: thin; border-color: #99FF99 #003300 #003300 #99FF99; border-style: double; }<html> <head> <title>Creacion de Departamentos</title> <script> //busca caracteres que no sean espacio en blanco en una cadena function vacio(o) { if (o == "") { alert("ERROR: No puede dejar este campo vacio") return false 202 } var caract_extra=" " var ubicacion var enter = " " var caracteres = "1234567890 ABCDEFGHIJKLMNOPQRSTUVWXYZÑñáéíóúÁÉÍÓÚàèìòùÀÈÌÒÙºª\!|@·#$~ %½¬&/{/([)]=}?\'¡~¿+]*`[^'_-·;,}çÇ" + String.fromCharCode(13) + enter + caract_extra var contador = 0 for (var i=0; i < o.length; i++) { if ( o.charAt(i) != "" ) { ubicacion = o.substring(i, i + 1) if (caracteres.indexOf(ubicacion) == -1) { contador++ } else { alert("ERROR: No se acepta el caracter '" + ubicacion + "'.") return false } } } return true } //valida que el campo no este vacio y no tenga solo espacios en blanco function validatexto(F) { if( vacio(F) == false ) { //alert("Introduzca un cadena de texto correctamente.") return false } else { //alert("OK") return true } } //VALIDA TODOS LOS CAMPOS DEL FORMULARIO 203 function validarFormulario() { if (validatexto(document.myform.gruponue.value) == false) { return false; } return true; } </script> <style type="text/css"> body { background-color: #FFFFFF; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 18px; font-style: italic; line-height: 24px; color: #99FF99 #003300 #003300 #99FF99; margin-bottom: 0px; border-color: #0000CC; } td, th { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 18px; color: #3333FF; } a{ font-size: 12px; color: #336600; } form { background-color: #FFFFFF; background-image: url(../imagenes/Fondos/a16.jpg); } .title { font-family: "Comic Sans MS", Courier; font-size: 18px; line-height: 20px; 204 background-color: #FFFFCC; color: #0000FF;} .subtitle { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 16px; line-height: 30px; color: #003300;} .header { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 20px; background-color: #CCFFFF; color: #FFFF33; } .nav { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 14px; font-weight: normal; background-color: #CCFF99; } .navLink { font-family: Arial, Helvetica, sans-serif; font-size: 14px; font-weight: bold; background-color: #DEDECA; } .sidebar { font-family: "Comic Sans MS", Courier; font-size: 12px; line-height: normal; padding: 3px; background-color: #33CCFF; color: #0000CC; } .sidebarHeader { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 14px; line-height: 18px; color: #003300; background-color: #FFFF66; 205 } .sidebarFooter { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 18px; background-color: #FFFF99; font-style: italic; } .legal { font-family: Arial, Helvetica, sans-serif; font-size: 9px; color: #333333; } .box1 { border-width: thin; border-color: #99FF99 #003300 #003300 #99FF99; border-style: double; } .promo { font-family: "Verdana", Times, serif; color: #0000FF; font-size: 14px; font-weight: italic; } .footer { font-family: Arial, Helvetica, sans-serif; font-size: 24px; font-weight: bold; line-height: normal; color: #F3F2F9; background-color: #3B4D61; } .dingbat { font-family: Arial, Helvetica, sans-serif; background-color: #FFFFFF; color: #660000; font-weight: bolder; font-size: 20px; 206 } .titlebar { font-family: "Times New Roman", Times, serif; font-size: 9px; color: #FFFFFF; background-color: #336699; } input.big { width: 100px; } input.small { width: 50px; } .warning { color: #ff0000; } .required { color: #0000ff; } .fieldLabel { text-align: right; color: BLUE; } </style> </head> <body> <?php require_once('/var/www/html/sw_syscomsa/FormBuilder.php'); $form = new FormBuilder(); $group_a_mod = $_GET['group']; $form->addField(new LabelFieldtitulo('Modificación del Grupo: '.'"'. $group_a_mod.'"', 'modgrupo')); $form->addField(new LabelFieldmensaje('Escriba el nombre del grupo a cambiar', 'modusua1')); $form->addField(new HiddenField('grupoac','Nombre Grupo-Actual:')); $form->addField(new TextField('Nombre del Nuevo Grupo:', 'gruponue', 15,4,30)); 207 $form->setValue('grupoac',$_GET['group']); $form->addField(new SubmitFieldGroup(array('change' => 'Modificar', 'cancel' => 'Cancelar'))); if ($form->isSubmitted('change')) { if ($form->validate()) { $usuario_a_cre = $form->getValue('gruponue'); $file_group = file ( "/etc/group"); $band=0; foreach ($file_group as $linea => $contenido) { $arr_grupo = explode (":",$contenido); $user = $arr_grupo[0]; if ( $arr_grupo[2] >= 500 and $usuario_a_cre == $user and $usuario_a_cre!= $grupo_a_mod ) { $band=$band+1; } } if ($band!=0) { echo "El grupo ya existe por favor escriba otro"; $form->setValue('gruponue',''); $form->display(); } else { $cmd = "sudo /var/www/html/sw_syscomsa/webpages/administracion_usuarios/scripts/changegroup _cmd.sh ".$_GET['group']." ".$form->getValue('gruponue'); #echo $cmd; $tmp = exec($cmd,$output,$status); # echo $tmp; if ($status == 0) { 208 echo "Grupo Modificado Exitosamente<br/>"; # header ("Location: ./pw_mod_grupo.php"); }else { echo "Usuario no Modificado<br/>"; foreach ($output as $line) { echo $line."<br/>"; } } # $form->display(); } }else { echo "Ingrese los campos faltantes<br/>"; $form->display(); } }else if ($form->isSubmitted('cancel')) { header ("Location: ./pw_mod_grupo.php"); } else { $form->display(); } ?> </body> </html> .promo { font-family: "Verdana", Times, serif; color: #0000FF; font-size: 14px; font-weight: italic; } .footer { 209 font-family: Arial, Helvetica, sans-serif; font-size: 24px; font-weight: bold; line-height: normal; color: #F3F2F9; background-color: #3B4D61; } .dingbat { font-family: Arial, Helvetica, sans-serif; background-color: #FFFFFF; color: #660000; font-weight: bolder; font-size: 20px; } .titlebar { font-family: "Times New Roman", Times, serif; font-size: 9px; color: #FFFFFF; background-color: #336699; } input.big { width: 100px; } input.small { width: 50px; } .warning { color: #ff0000; } .required { color: #0000ff; } .fieldLabel { text-align: right; color: BLUE; } </style> </head> <body> <?php 210 require_once('/var/www/html/sw_syscomsa/FormBuilder.php'); $form = new FormBuilder(); $group_a_mod = $_GET['group']; $form->addField(new LabelFieldtitulo('Modificación del Grupo: '.'"'. $group_a_mod.'"', 'modgrupo')); $form->addField(new LabelFieldmensaje('Escriba el nombre del grupo a cambiar', 'modusua1')); $form->addField(new HiddenField('grupoac','Nombre Grupo-Actual:')); $form->addField(new TextField('Nombre del Nuevo Grupo:', 'gruponue', 15,4,30)); $form->setValue('grupoac',$_GET['group']); $form->addField(new SubmitFieldGroup(array('change' => 'Modificar', 'cancel' => 'Cancelar'))); if ($form->isSubmitted('change')) { if ($form->validate()) { $usuario_a_cre = $form->getValue('gruponue'); $file_group = file ( "/etc/group"); $band=0; foreach ($file_group as $linea => $contenido) { $arr_grupo = explode (":",$contenido); $user = $arr_grupo[0]; if ( $arr_grupo[2] >= 500 and $usuario_a_cre == $user and $usuario_a_cre!= $grupo_a_mod ) { $band=$band+1; } } if ($band!=0) { echo "El grupo ya existe por favor escriba otro"; $form->setValue('gruponue',''); $form->display(); 211 } else { $cmd = "sudo /var/www/html/sw_syscomsa/webpages/administracion_usuarios/scripts/changegroup _cmd.sh ".$_GET['group']." ".$form->getValue('gruponue'); #echo $cmd; $tmp = exec($cmd,$output,$status); # echo $tmp; if ($status == 0) { echo "Grupo Modificado Exitosamente<br/>"; # header ("Location: ./pw_mod_grupo.php"); }else { echo "Usuario no Modificado<br/>"; foreach ($output as $line) { echo $line."<br/>"; } } # $form->display(); } }else { echo "Ingrese los campos faltantes<br/>"; $form->display(); } }else if ($form->isSubmitted('cancel')) { header ("Location: ./pw_mod_grupo.php"); } else { $form->display(); } 212 ?> </body> </html> Archivo: pw_mod_contrase.php <html> <head> <title>Busqueda de Usuarios para cambio de Contraseña</title> <script> //busca caracteres que no sean espacio en blanco en una cadena function vacio(o) { if (o == "") { alert("ERROR: No puede dejar este campo vacio") return false } var caract_extra=" " var ubicacion var enter = " " var caracteres = "1234567890 ABCDEFGHIJKLMNOPQRSTUVWXYZÑñáéíóúÁÉÍÓÚàèìòùÀÈÌÒÙºª\!|@·#$~ %½¬&/{/([)]=}?\'¡~¿+]*`[^'_-·;,}çÇ" + String.fromCharCode(13) + enter + caract_extra var contador = 0 for (var i=0; i < o.length; i++) { if ( o.charAt(i) != "" ) { ubicacion = o.substring(i, i + 1) if (caracteres.indexOf(ubicacion) == -1) { contador++ } else { alert("ERROR: No se acepta el caracter '" + ubicacion + "'.") return false } } } return true } 213 //valida que el campo no este vacio y no tenga solo espacios en blanco function validatexto(F) { if( vacio(F) == false ) { //alert("Introduzca un cadena de texto correctamente.") return false } else { //alert("OK") return true } } //VALIDA TODOS LOS CAMPOS DEL FORMULARIO function validarFormulario() { if (validatexto(document.myform.user.value) == false) { return false; } return true; } </script> <style type="text/css"> body { background-color: #FFFFFF; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 18px; font-style: italic; line-height: 24px; color: #99FF99 #003300 #003300 #99FF99; margin-bottom: 0px; border-color: #0000CC; } td, th { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 18px; color: #3333FF; 214 } a{ font-size: 12px; color: #336600; } form { background-color: #FFFFFF; background-image: url(../imagenes/Fondos/a16.jpg); } .title { font-family: "Comic Sans MS", Courier; font-size: 18px; line-height: 20px; background-color: #FFFFCC; color: #0000FF;} .subtitle { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 16px; line-height: 30px; color: #003300;} .header { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 20px; background-color: #CCFFFF; color: #FFFF33; } .nav { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 14px; font-weight: normal; background-color: #CCFF99; } .navLink { font-family: Arial, Helvetica, sans-serif; font-size: 14p<html> <head> <title>Busqueda de Usuarios para cambio de Contraseña</title> 215 <script> //busca caracteres que no sean espacio en blanco en una cadena function vacio(o) { if (o == "") { alert("ERROR: No puede dejar este campo vacio") return false } var caract_extra=" " var ubicacion var enter = " " var caracteres = "1234567890 ABCDEFGHIJKLMNOPQRSTUVWXYZÑñáéíóúÁÉÍÓÚàèìòùÀÈÌÒÙºª\!|@·#$~ %½¬&/{/([)]=}?\'¡~¿+]*`[^'_-·;,}çÇ" + String.fromCharCode(13) + enter + caract_extra var contador = 0 for (var i=0; i < o.length; i++) { if ( o.charAt(i) != "" ) { ubicacion = o.substring(i, i + 1) if (caracteres.indexOf(ubicacion) == -1) { contador++ } else { alert("ERROR: No se acepta el caracter '" + ubicacion + "'.") return false } } } return true } //valida que el campo no este vacio y no tenga solo espacios en blanco function validatexto(F) { if( vacio(F) == false ) { //alert("Introduzca un cadena de texto correctamente.") return false 216 } else { //alert("OK") return true } } //VALIDA TODOS LOS CAMPOS DEL FORMULARIO function validarFormulario() { if (validatexto(document.myform.user.value) == false) { return false; } return true; } </script> <style type="text/css"> body { background-color: #FFFFFF; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 18px; font-style: italic; line-height: 24px; color: #99FF99 #003300 #003300 #99FF99; margin-bottom: 0px; border-color: #0000CC; } td, th { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 18px; color: #3333FF; } a{ font-size: 12px; color: #336600; } form { 217 background-color: #FFFFFF; background-image: url(../imagenes/Fondos/a16.jpg); } .title { font-family: "Comic Sans MS", Courier; font-size: 18px; line-height: 20px; background-color: #FFFFCC; color: #0000FF;} .subtitle { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 16px; line-height: 30px; color: #003300;} .header { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 20px; background-color: #CCFFFF; color: #FFFF33; } .nav { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 14px; font-weight: normal; background-color: #CCFF99; } .navLink { font-family: Arial, Helvetica, sans-serif; font-size: 14px; font-weight: bold; background-color: #DEDECA; } .sidebar { font-family: "Comic Sans MS", Courier; font-size: 12px; line-height: normal; padding: 3px; background-color: #33CCFF; color: #0000CC; 218 } .sidebarHeader { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 14px; line-height: 18px; color: #003300; background-color: #FFFF66; } .sidebarFooter { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 18px; background-color: #FFFF99; font-style: italic; } .legal { font-family: Arial, Helvetica, sans-serif; font-size: 9px; color: #333333; } .box1 { border-width: thin; border-color: #99FF99 #003300 #003300 #99FF99; border-style: double; } .promo { font-family: "Verdana", Times, serif; color: #0000FF; font-size: 14px; font-weight: italic; } .footer { font-family: Arial, Helvetica, sans-serif; font-size: 24px; font-weight: bold; line-height: normal; color: #F3F2F9; 219 background-color: #3B4D61; } .dingbat { font-family: Arial, Helvetica, sans-serif; background-color: #FFFFFF; color: #660000; font-weight: bolder; font-size: 20px; } .titlebar { font-family: "Times New Roman", Times, serif; font-size: 9px; color: #FFFFFF; background-color: #336699; } input.big { width: 100px; } input.small { width: 50px; } .warning { color: #ff0000; } .required { color: #0000ff; } .fieldLabel { text-align: right; color: BLUE; } </style> </head> <body> <?php require_once('/var/www/html/sw_syscomsa/FormBuilder.php'); $form = new FormBuilder4(); 220 $form->addField(new LabelFieldtitulo('Modificación de Contraseñas', 'modusua')); $form->addField(new LabelFieldmensaje('Seleccione el nombre del usuario a buscar', 'modusua1')); $file_user = file ("/etc/passwd"); foreach ($file_user as $lin_user => $user) { $arr_user = explode (":",$user); if ($arr_user[2]>=500 and $arr_user[2] <= 10000) { $mapeo_user[$arr_user[0]]= $arr_user[0]; } } $form->addField(new PopupField('Usuarios:', 'user', true, $mapeo_user)); $form->addField(new SubmitField('search', 'Buscar', 25,2,30)); if ($form->isSubmitted('search')) { $form->display(); }else { $form->display(); } ?> </form> </body> </html>x; font-weight: bold; background-color: #DEDECA; } .sidebar { font-family: "Comic Sans MS", Courier; font-size: 12px; line-height: normal; padding: 3px; background-color: #33CCFF; color: #0000CC; } 221 .sidebarHeader { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 14px; line-height: 18px; color: #003300; background-color: #FFFF66; } .sidebarFooter { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 18px; background-color: #FFFF99; font-style: italic; } .legal { font-family: Arial, Helvetica, sans-serif; font-size: 9px; color: #333333; } .box1 { border-width: thin; border-color: #99FF99 #003300 #003300 #99FF99; border-style: double; } .promo { font-family: "Verdana", Times, serif; color: #0000FF; font-size: 14px; font-weight: italic; } .footer { font-family: Arial, Helvetica, sans-serif; font-size: 24px; font-weight: bold; line-height: normal; color: #F3F2F9; background-color: #3B4D61; 222 } .dingbat { font-family: Arial, Helvetica, sans-serif; background-color: #FFFFFF; color: #660000; font-weight: bolder; font-size: 20px; } .titlebar { font-family: "Times New Roman", Times, serif; font-size: 9px; color: #FFFFFF; background-color: #336699; } input.big { width: 100px; } input.small { width: 50px; } .warning { color: #ff0000; } .required { color: #0000ff; } .fieldLabel { text-align: right; color: BLUE; } </style> </head> <body> <?php require_once('/var/www/html/sw_syscomsa/FormBuilder.php'); $form = new FormBuilder4(); $form->addField(new LabelFieldtitulo('Modificación de Contraseñas', 'modusua')); 223 $form->addField(new LabelFieldmensaje('Seleccione el nombre del usuario a buscar', 'modusua1')); $file_user = file ("/etc/passwd"); foreach ($file_user as $lin_user => $user) { $arr_user = explode (":",$user); if ($arr_user[2]>=500 and $arr_user[2] <= 10000) { $mapeo_user[$arr_user[0]]= $arr_user[0]; } } $form->addField(new PopupField('Usuarios:', 'user', true, $mapeo_user)); $form->addField(new SubmitField('search', 'Buscar', 25,2,30)); if ($form->isSubmitted('search')) { $form->display(); }else { $form->display(); } ?> </form> </body> </html> Archivo: pw_modif_contrase.php <html> <head> <title>Modificacion de Contraseña</title> <script> //busca caracteres que no sean espacio en blanco en una cadena function vacio(o) { if (o == "") { alert("ERROR: No puede dejar este campo vacio") return false 224 } var caract_extra=" " var ubicacion var enter = " " var caracteres = "ÑñáéíóúÁÉÍÓÚàèìòùÀÈÌÒÙºª\!|·#$~%½¬&/{/ ([)]=}?\'¡~¿+]*`[^'_-·;,}çÇ" + String.fromCharCode(13) + enter + caract_extra var contador = 0 for (var i=0; i < o.length; i++) { if ( o.charAt(i) != "" ) { ubicacion = o.substring(i, i + 1) if (caracteres.indexOf(ubicacion) == -1) { contador++ } else { alert("ERROR: No se acepta el caracter '" + ubicacion + "'.") return false } } } return true } //valida que el campo no este vacio y no tenga solo espacios en blanco function validatexto(F) { if( vacio(F) == false ) { //alert("Introduzca un cadena de texto correctamente.") return false } else { //alert("OK") return true } } //VALIDA TODOS LOS CAMPOS DEL FORMULARIO function validarFormulario() { 225 if (validatexto(document.myform.passw.value) == false) { return false; } if (validatexto(document.myform.passw2.value) == false) { return false; } return true; } </script> <style type="text/css"> body { background-color: #FFFFFF; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 18px; font-style: italic; line-height: 24px; color: #99FF99 #003300 #003300 #99FF99; margin-bottom: 0px; border-color: #0000CC; } td, th { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 18px; color: #3333FF; } a{ font-size: 12px; color: #336600; } form { background-color: #FFFFFF; background-image: url(../imagenes/Fondos/a16.jpg); } .title { font-family: "Comic Sans MS", Courier; 226 font-size: 18px; line-height: 20px; background-color: #FFFFCC; color: #0000FF;} .subtitle { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 16px; line-height: 30px; color: #003300;} .header { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 20px; background-color: #CCFFFF; color: #FFFF33; } .nav { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 14px; font-weight: normal; background-color: #CCFF99; } .navLink { font-family: Arial, Helvetica, sans-serif; font-size: 14px; font-weight: bold; background-color: #DEDECA; } .sidebar { font-family: "Comic Sans MS", Courier; font-size: 12px; line-height: normal; padding: 3px; background-color: #33CCFF; color: #0000CC; } .sidebarHeader { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 14px; line-height: 18px; 227 color: #003300; background-color: #FFFF66; } .sidebarFooter { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 18px; background-color: #FFFF99; font-style: italic; } .legal { font-family: Arial, Helvetica, sans-serif; font-size: 9px; color: #333333; } .box1 { border-width: thin; border-color: #99FF99 #003300 #003300 #99FF99; border-style: double; } .promo { font-family: "Verdana", Times, serif; color: #0000FF; font-size: 14px; font-weight: italic; } .footer { font-family: Arial, Helvetica, sans-serif; font-size: 24px; font-weight: bold; line-height: normal; color: #F3F2F9; background-color: #3B4D61; } .dingbat { font-family: Arial, Helvetica, sans-serif; 228 background-color: #FFFFFF; color: #660000; font-weight: bolder; font-size: 20px; } .titlebar { font-family: "Times New Roman", Times, serif; font-size: 9px; color: #FFFFFF; background-color: #336699; } input.big { width: 100px; } input.small { width: 50px; } .warning { color: #ff0000; } .required { color: #0000ff; } .fieldLabel { text-align: right; color: BLUE; } </style> </head> <body> <?php require_once('/var/www/html/sw_syscomsa/FormBuilder.php'); $form = new FormBuilder(); $usuario_a_mod = $_GET['user']; $form = new FormBuilder(); $form->addField(new LabelFieldtitulo('Modificación de Contraseñas: '.'"'. $usuario_a_mod.'"', 'modusua')); 229 $form->addField(new LabelFieldmensaje('Escriba la Contraseña a modificar', 'modusua1')); $form->addField(new HiddenField('userac','Username Actual')); $form->addField(new PasswordField('Password:','passw',25,6,20 )); $form->addField(new PasswordField('Repita su Password:','passw2',25,6,20 )); $form->addField(new LabelFieldmensaje('Recuerde que el username no debe contener mayusculas y ni caracteres especiales', 'mensaje')); $form->addField(new LabelFieldmensaje('El password debe tener minimo seis caracteres y diferente al username', 'mensaje2')); $form->setValue('userac',$_GET['user']); $form->addField(new SubmitFieldGroup(array('change' => 'Modificar', 'cancel' => 'Cancelar'))); if ($form->isSubmitted('change')) { if ($form->validate()) { $pass = $form->getValue('passw'); $pass2 = $form->getValue('passw2'); if ($usuario_a_mod==$pass or $pass!=$pass2 or $pass=="abcdef" or $pass=="012345" or $pass=="0123456" or $pass=="01234567" or $pass=="012345678" or $pass=="0123456789" or $pass=="000000" or $pass=="0000000" or $pass=="00000000" or $pass=="000000000" or $pass=="0000000000" or $pass=="012abc" or $pass=="abc012" or $pass=="abc123456" or $pass=="abc123" or $pass=="abcdef" or $pass=="abcdefg") { echo "Corrija su Password por favor"."<br/>"; $form->setValue('passw',''); $form->setValue('passw2',''); $form->display(); } else { $cmd = "sudo /var/www/html/sw_syscomsa/webpages/administracion_usuarios/scripts/chpasswd.sh ".$_GET['user']." ".$form->getValue('passw'); #echo $cmd; $tmp = exec($cmd,$output,$status); #echo $tmp; 230 if ($status == 0) { echo "Contraseña Modificada Exitosamente<br/>"; }else { echo "Contraseña no Modificado<br/>"; foreach ($output as $line){ echo $line."<br/>";} } } #$form->display(); }else { echo "Ingrese los campos faltantes<br/>"; $form->display(); } }else if ($form->isSubmitted('cancel')) { header ("Location: ./pw_mod_contrase.php"); } else { $form->display(); } ?> </body> </html> Sección administración seguridades. Esta sección se encuentra ubicada en la ruta: /var/www/html/sw_syscomsa/webpages/seguridades/ en el cual se encuentran los siguientes archivos. Archivo: pw_copia_seguridadsimple.php <html> <head> <title>Copias de Seguridades Horario Simple</title> <script> //busca caracteres que no sean espacio en blanco en una cadena function vaciovacio(P) { if (P == "") 231 { alert("ERROR: No puede dejar el o los campos vacios") return false } return true } //valida que el campo no este vacio y no tenga solo espacios en blanco function vaciotexto(G) { if( vaciovacio(G) == false ) { // alert("Introduzca un cadena de texto correctamente.") return false } else { //alert("OK") return true } } //VALIDA TODOS LOS CAMPOS DEL FORMULARIO function validarFormulario() { if (vaciotexto(document.myform.user.value) == false) { return false; } return true; } </script> <style type="text/css"> body { background-color: #FFFFFF; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 18px; font-style: italic; line-height: 24px; color: #99FF99 #003300 #003300 #99FF99; margin-bottom: 0px; border-color: #0000CC; } 232 td, th { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 18px; color: #3333FF; } a{ font-size: 12px; color: #336600; } form { background-color: #FFFFFF; background-image: url(../imagenes/Fondos/a16.jpg); } .title { font-family: "Comic Sans MS", Courier; font-size: 18px; line-height: 20px; background-color: #FFFFCC; color: #0000FF;} .subtitle { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 16px; line-height: 30px; color: #003300;} .header { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 20px; background-color: #CCFFFF; color: #FFFF33; } .nav { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 14px; font-weight: normal; background-color: #CCFF99; } 233 .navLink { font-family: Arial, Helvetica, sans-serif; font-size: 14px; font-weight: bold; background-color: #DEDECA; } .sidebar { font-family: "Comic Sans MS", Courier; font-size: 14px; line-height: normal; padding: 3px; background-color: #33CCFF; color: #0000CC; } .sidebarHeader { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 14px; line-height: 18px; color: #003300; background-color: #FFFF66; } .sidebarFooter { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 18px; background-color: #FFFF99; font-style: italic; } .legal { font-family: Arial, Helvetica, sans-serif; font-size: 9px; color: #333333; } .box1 { border-width: thin; border-color: #99FF99 #003300 #003300 #99FF99; border-style: double; 234 } .promo { font-family: "Verdana", Times, serif; color: #0000FF; font-size: 14px; font-weight: italic; } .footer { font-family: Arial, Helvetica, sans-serif; font-size: 24px; font-weight: bold; line-height: normal; color: #F3F2F9; background-color: #3B4D61; } .dingbat { font-family: Arial, Helvetica, sans-serif; background-color: #FFFFFF; color: #660000; font-weight: bolder; font-size: 20px; } .titlebar { font-family: "Times New Roman", Times, serif; font-size: 9px; color: #FFFFFF; background-color: #336699; } input.big { width: 100px; } input.small { width: 50px; } .warning { color: #ff0000; } .required { color: #0000ff; } 235 .fieldLabel { text-align: right; color: BLUE; } </style> </head> <body> <?php require_once('/var/www/html/sw_syscomsa/FormBuilder.php'); $form = new FormBuilder(); $form->addField(new LabelFieldtitulo('Creación de Copias de Seguridad', 'copias')); $tipohor = array ('SIM'=>'Simples', 'MUL'=> 'Multiples'); $file_user = file ("/etc/passwd"); foreach ($file_user as $lin_user => $user) { $arr_user = explode (":",$user); if ($arr_user[2]>=500 and $arr_user[2] <= 10000) { $mapeo_user[$arr_user[0]]= $arr_user[0]; } } $mapeo_user[$arr_user[1]] = "ALL USER"; $form->addField(new PopupField('Nombre Usuario:', 'user', true, $mapeo_user)); $form->addField(new LabelFieldsubtitulo('Planificaciones de las Copias de Seguridad', 'plancop')); $form->addField(new LabelFieldsubtitulo('Ingreso de Horario Simple', 'horasimp')); $form->addField(new TimeField2('Hora / Minuto:', 'time', true)); $form->addField(new DateField2('Dia / Mes / Día-Semana:', 'date', true)); $form->addField(new LabelFieldmensaje('El asterisco (*) sirve para definir todos los valores', 'men1')); $form->addField(new SubmitFieldGroup(array('save' => 'Grabar', 236 'cancel' => 'Cancel'))); if ($form->isSubmitted('save')) { if ($form->validate()) { $cmd = "sudo /var/www/html/sw_syscomsa/webpages/seguridades/scripts/copiaseguridadsimple_c md.sh ".$form->getValue('user')." ".$form->getValue('time')." ".$form>getValue('date'); #echo $cmd; $tmp = exec($cmd,$output,$status); #echo "<br/>".$tmp."<br/>"; if ($status == 0) { # echo "<br/>".$tmp."<br/>"; echo "Definicion de copias realizado Exitosamente<br/>"; $form->setValue('user',""); $form->setValue('time',""); $form->setValue('date',""); } else { echo "Definicion de copias NO realizado<br/>"; foreach ($output as $line) { echo $line."<br/>";} } $form->display(); }else { echo "Ingrese los campos correctamente<br/>"; $form->display(); } } else if ($form->isSubmitted('cancel')) { header("Location: /sw_syscomsa/contenido.php"); } else { $form->display(); } 237 ?> </body> </html> Archivo: pw_copia_seguridadmultiple.php <html> <head> <title>Copias de Seguridades Horario Multiple</title> <script> //busca caracteres que no sean espacio en blanco en una cadena function vaciocampos(m) { if (m == "") { alert("ERROR: No puede dejar este campo vacio") return false } partes2=m.split('-'); //alert ("hola -"); if (partes2.length>2) {alert ("hola -"); alert("ERROR: Esta incorrecto el valor ingresado"); alert("Puede ingresarlo por rangos, de esta forma: '1-3'" ); return false; } for (i=0;i<2;i++) { num=partes2[i]; if (num>=60 || num<0 || num.length==0 || isNaN(num) || num.length>=3|| num.length<=1 || partes2[0]>=partes2[1]) { alert("ERROR: El rango de numero esta mal ingresado"); return false; } } var caract_extra=" " var ubicacion var enter = " " 238 var caracteres = "ABCDEFGHIJKLMNOPQRSTUVWXYZÑñáéíóúÁÉÍÓÚàèìòùÀÈÌÒÙºª\!|@·#$~ %½¬&/{/([)]=}?\'¡~¿+]*`[^'_·;çÇ" + String.fromCharCode(13) + enter + caract_extra var contador = 0 for (var i=0; i < m.length; i++) { if ( m.charAt(i) != "" ) { ubicacion = m.substring(i, i + 1) if (caracteres.indexOf(ubicacion) == -1) { contador++ } else { alert("ERROR: No se acepta el caracter '" + ubicacion + "'.") return false } } } return true } //valida que el campo no este vacio y no tenga solo espacios en blanco function validacampos(w) { if( vaciocampos(w) == false ) { //alert("Introduzca un cadena de texto correctamente.") return false } else { //alert("OK") return true } } //busca caracteres que no sean espacio en blanco en una cadena function vacio(o) { if (o == "") { alert("ERROR: No puede dejar este campo vacio") return false 239 } var caract_extra=" " var ubicacion var enter = " " var caracteres = "123456789 ABCDEFGHIJKLMNOPQRSTUVWXYZÑñáéíóúÁÉÍÓÚàèìòùÀÈÌÒÙºª\!|@·#$~ %½¬&/{/([)]=}?\'¡~¿+]*`[^'_·;}çÇ-," + String.fromCharCode(13) + enter + caract_extra var contador = 0 for (var i=0; i < o.length; i++) { if ( o.charAt(i) != "" ) { ubicacion = o.substring(i, i + 1) if (caracteres.indexOf(ubicacion) == -1) { contador++ } else { alert("ERROR: No se acepta el caracter '" + ubicacion + "'.") return false } } } return true } //valida que el campo no este vacio y no tenga solo espacios en blanco function validatexto(F) { if( vacio(F) == false ) { //alert("Introduzca un cadena de texto correctamente.") return false } else { //alert("OK") return true } } //busca caracteres que no sean espacio en blanco en una cadena 240 function vaciovacio(P) { if (P == "") { alert("ERROR: No puede dejar el o los campos vacios") return false } return true } //valida que el campo no este vacio y no tenga solo espacios en blanco function vaciotexto(G) { if( vaciovacio(G) == false ) { // alert("Introduzca un cadena de texto correctamente.") return false } else { //alert("OK") return true } } //VALIDA TODOS LOS CAMPOS DEL FORMULARIO function validarFormulario() { if (validatexto(document.myform.user.value) == false) { return false; } if (validacampos(document.myform.minuto.value) == false) { return false; } if (validacampos(document.myform.horas.value) == false) { return false; } if (validacampos(document.myform.diames.value) == false) { return false; } 241 if (validacampos(document.myform.mes.value) == false) { return false; } if (validacampos(document.myform.diasema.value) == false) { return false; } return true; } </script> <style type="text/css"> body { background-color: #FFFFFF; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 18px; font-style: italic; line-height: 24px; color: #99FF99 #003300 #003300 #99FF99; margin-bottom: 0px; border-color: #0000CC; } td, th { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 18px; color: #3333FF; } a{ font-size: 12px; color: #336600; } form { background-color: #FFFFFF; background-image: url(../imagenes/Fondos/a16.jpg); } .title { font-family: "Comic Sans MS", Courier; 242 font-size: 18px; line-height: 20px; background-color: #FFFFCC; color: #0000FF;} .subtitle { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 16px; line-height: 30px; color: #003300;} .header { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 20px; background-color: #CCFFFF; color: #FFFF33; } .nav { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 14px; font-weight: normal; background-color: #CCFF99; } .navLink { font-family: Arial, Helvetica, sans-serif; font-size: 14px; font-weight: bold; background-color: #DEDECA; } .sidebar { font-family: "Comic Sans MS", Courier; font-size: 14px; line-height: normal; padding: 3px; background-color: #33CCFF; color: #0000CC; } .sidebarHeader { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 14px; line-height: 18px; 243 color: #003300; background-color: #FFFF66; } .sidebarFooter { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 18px; background-color: #FFFF99; font-style: italic; } .legal { font-family: Arial, Helvetica, sans-serif; font-size: 9px; color: #333333; } .box1 { border-width: thin; border-color: #99FF99 #003300 #003300 #99FF99; border-style: double; } .promo { font-family: "Verdana", Times, serif; color: #0000FF; font-size: 14px; font-weight: italic; } .footer { font-family: Arial, Helvetica, sans-serif; font-size: 24px; font-weight: bold; line-height: normal; color: #F3F2F9; background-color: #3B4D61; } .dingbat { font-family: Arial, Helvetica, sans-serif; 244 background-color: #FFFFFF; color: #660000; font-weight: bolder; font-size: 20px; } .titlebar { font-family: "Times New Roman", Times, serif; font-size: 9px; color: #FFFFFF; background-color: #336699; } input.big { width: 100px; } input.small { width: 50px; } .warning { color: #ff0000; } .required { color: #0000ff; } .fieldLabel { text-align: right; color: BLUE; } </style> </head> <body> <?php require_once('/var/www/html/sw_syscomsa/FormBuilder.php'); $form = new FormBuilder(); $form->addField(new LabelFieldtitulo('Creación de Copias de Seguridad', 'copias')); $file_user = file ("/etc/passwd"); foreach ($file_user as $lin_user => $user) { 245 $arr_user = explode (":",$user); if ($arr_user[2]>=500 and $arr_user[2] <= 10000) { $mapeo_user[$arr_user[0]]= $arr_user[0]; } } $mapeo_user[$arr_user[1]] = "ALL USER"; $form->addField(new PopupField('Nombre Usuario:', 'user', true, $mapeo_user)); $form->addField(new LabelFieldsubtitulo('Planificaciones de las Copias de Seguridad', 'plancop')); $form->addField(new LabelFieldsubtitulo('Ingreso de Horario Múltiple', 'horamult')); $form->addField(new TextField('Minutos: ', 'minuto', 5,1,15)); $form->addField(new TextField('Horas: ', 'horas', 5,1,15)); $form->addField(new TextField('Dia del Mes: ', 'diames', 5,1,15)); $form->addField(new TextField('Mes: ', 'mes', 5,1,15)); $form->addField(new TextField('Dia de la Semana: ', 'diasema', 5,1,15)); $form->addField(new LabelFieldmensaje('Los valores son: Domingo=0, Lunes=1, Martes=2, Miércoles=3, Jueves=4, Viernes=5, Sábado=6', 'h1')); // $form->addField(new LabelFieldmensaje('Un conjunto de enteros, separados por coma, para definir una lista (1,3,4,6)', 'h3')); $form->addField(new LabelFieldmensaje('Un conjunto de enteros, separados por un guión, para definir un rango (4-6)', 'h4')); $form->addField(new SubmitFieldGroup(array('save' => 'Grabar', 'cancel' => 'Cancel'))); if ($form->isSubmitted('save')) { if ($form->validate()) { $cmd = "sudo /var/www/html/sw_syscomsa/webpages/seguridades/scripts/copiaseguridadmultiple_ cmd.sh ".$form->getValue('user')." ".$form->getValue('minuto')." ".$form>getValue('horas')." ".$form->getValue('diames')." ".$form->getValue('mes')." ". $form->getValue('diasema'); //echo $cmd; $tmp = exec($cmd,$output,$status); 246 #echo "<br/>".$tmp."<br/>"; #$form->display(); if ($status == 0) { #echo "<br/>".$tmp."<br/>"; echo "Definicion de cuotas realizado Exitosamente<br/>"; $form->setValue('user',""); $form->setValue('minuto',""); $form->setValue('horas',""); $form->setValue('diames',""); $form->setValue('mes',""); $form->setValue('diasema',""); // $form->display(); } else { echo "Definicion de cuotas NO realizado<br/>"; foreach ($output as $line) { echo $line."<br/>";} } $form->display(); }else { echo "Ingrese los campos correctamente<br/>"; $form->display(); } } else if ($form->isSubmitted('cancel')) { header("Location: /sw_syscomsa/contenido.php"); } else { $form->display(); } ?> </form> </body> </html> Archivo: pw_restauracion_copia.php <html> 247 <head> <title>Restauracion de copias de Segurirades</title> <script> //FUNCION PARA VALIDAR NUMEROS function isNum(q) { for ( i = 0; i < q.length; i++ ) { //con el for y la sentencia if( q.charAt(i) = " " ){... ..ya me queda lista para validar los espacios en blanco, de lo contrario: valor = parseInt(q.charAt(i)); // me permite convertir letra por letra en numero y si no es un numero entonces no regresa nada if (isNaN(valor)) { return false } } return true } //FUNCION QUE LLAMA A LA DE VALIDAR NUMEROS, TRABAJA CON LA FUNCION isNum function validarNumeroEntero(F) { if (isNum(F) == false) { alert("ES NECESARIO QUE EL VALOR INICIAL SEA UN NUMERO ENTERO "+F); return false; }else { return true } } //busca caracteres que no sean espacio en blanco en una cadena function vacio(p) { if (p == "") { alert("ERROR: No puede dejar este campo vacio") return false } 248 return true } //valida que el campo no este vacio y no tenga solo espacios en blanco function validavacio(h) { if( vacio(h) == false ) { //alert("Introduzca un cadena de texto correctamente.") return false } else { //alert("OK") return true } } //VALIDA TODOS LOS CAMPOS DEL FORMULARIO function validarFormulario() { if (validavacio(document.myform.user.value) == false) { return false; } if (validavacio(document.myform.carprest.value) == false) { return false; } return true; } </script> <style type="text/css"> body { background-color: #FFFFFF; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 18px; font-style: italic; line-height: 24px; color: #99FF99 #003300 #003300 #99FF99; margin-bottom: 0px; border-color: #0000CC; } 249 td, th { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 18px; color: #3333FF; } a{ font-size: 12px; color: #336600; } form { background-color: #FFFFFF; background-image: url(../imagenes/Fondos/a16.jpg); } .title { font-family: "Comic Sans MS", Courier; font-size: 18px; line-height: 20px; background-color: #FFFFCC; color: #0000FF;} .subtitle { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 16px; line-height: 30px; color: #003300;} .header { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 20px; background-color: #CCFFFF; color: #FFFF33; } .nav { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 14px; font-weight: normal; background-color: #CCFF99; } 250 .navLink { font-family: Arial, Helvetica, sans-serif; font-size: 14px; font-weight: bold; background-color: #DEDECA; } .sidebar { font-family: "Comic Sans MS", Courier; font-size: 14px; line-height: normal; padding: 3px; background-color: #33CCFF; color: #0000CC; } .sidebarHeader { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 14px; line-height: 18px; color: #003300; background-color: #FFFF66; } .sidebarFooter { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 18px; background-color: #FFFF99; font-style: italic; } .legal { font-family: Arial, Helvetica, sans-serif; font-size: 9px; color: #333333; } .box1 { border-width: thin; border-color: #99FF99 #003300 #003300 #99FF99; border-style: double; 251 } .promo { font-family: "Verdana", Times, serif; color: #0000FF; font-size: 14px; font-weight: italic; } .footer { font-family: Arial, Helvetica, sans-serif; font-size: 24px; font-weight: bold; line-height: normal; color: #F3F2F9; background-color: #3B4D61; } .dingbat { font-family: Arial, Helvetica, sans-serif; background-color: #FFFFFF; color: #660000; font-weight: bolder; font-size: 20px; } .titlebar { font-family: "Times New Roman", Times, serif; font-size: 9px; color: #FFFFFF; background-color: #336699; } input.big { width: 100px; } input.small { width: 50px; } .warning { color: #ff0000; } .required { color: #0000ff; } 252 .fieldLabel { text-align: right; color: BLUE; } </style> </head> <body> <?php require_once('/var/www/html/sw_syscomsa/FormBuilder.php'); $form = new FormBuilder(); $tipohor = array ('SIM'=>'Simples', 'MUL'=> 'Multiples'); $sino = array ('1' => 'SI', '0' => 'NO'); $form->addField(new LabelFieldtitulo('Restauracion de Copias de Seguridades', 'respcop')); $carpetas = array ('ALL'=>'Todos', 'INB'=> 'Entrada', 'ENV'=> 'Enviados', 'BOR'=> 'Borradores', 'PAP'=> 'Papelera', 'SPA'=> 'Spam'); // $file_user = file ("/etc/passwd"); $file_user = file ("/var/www/html/sw_syscomsa/webpages/seguridades/scripts/usuarioscopiados.txt"); foreach ($file_user as $lin_user => $user) { $arr_user = explode (":",$user); //if ($arr_user[2]>=500 and $arr_user[2] <= 10000) //{ $mapeo_user[$arr_user[0]]= $arr_user[0]; // // } } $mapeo_user[$arr_user[1]] = "ALL USER"; $form->addField(new PopupField('Nombre Usuario:', 'user', true, $mapeo_user)); $form->addField(new LabelFieldmensaje('Elija el nombre del usuario a restaurar las copias de seguridad', 'copias')); 253 $form->addField(new PopupField('Carpeta a Restaurar:', 'carprest', true, $carpetas)); $form->addField(new LabelFieldmensaje('Elija la carpeta a restaurar', 'carpeta')); $form->addField(new SubmitFieldGroup(array('save' => 'Restaurar', 'cancel' => 'Cancel'))); if ($form->isSubmitted('save')) { if($form->validate()) { $cmd = "sudo /var/www/html/sw_syscomsa/webpages/seguridades/scripts/restaurarmail_cmd.sh ". $form->getValue('user')." ".$form->getValue('carprest'); #echo $cmd; $tmp = exec($cmd,$output,$status); #echo "<br/>".$tmp."<br/>"; if ($status == 0) { echo "<br/>".$tmp."<br/>"; #echo "Restauración de copias de seguridad<br/>"; $form->setValue('user',""); $form->setValue('carprest',""); } else { echo "<br/>".$tmp."<br/>"; #echo "Restauracion de copias NO realizado<br/>"; foreach ($output as $line) { echo $line."<br/>";} } $form->display(); }else { echo "Ingrese los campos correctamente<br/>"; $form->display(); } } else if ($form->isSubmitted('cancel')) { header("Location: /sw_syscomsa/contenido.php"); 254 } else { $form->display(); } ?> </form> </body> </html> Sección administración de servidores de correo Esta sección se encuentra ubicada en la ruta: /var/www/html/sw_syscomsa/webpages/admin_servi_correo/ en el cual se encuentran los siguientes archivos. Archivo: pw_config_red.php <html> <head> <title>Configuración de Red</title> <script> // FUNCION PARA VALIDAR IP function validarip(ip) { if (ip == "") { alert("ERROR: No puede dejar este campo vacio") return false } partes=ip.split('.'); if (partes.length!=4) { alert("ERROR: La ip que usted ingreso no es valida"); return false; } for (i=0;i<4;i++) { num=partes[i]; if ( partes[0]>224 || partes[0]<0 || partes[1]>224 || partes[1]<0 || partes[2]>224 || partes[2]<0 || num.length==0 || isNaN(num) || partes[3]>=255 || partes[3]<1) { alert("ERROR: La ip que usted ingreso no es valida"); 255 return false; } } return true; } function validarmask(mask) { if (mask == "") { alert("ERROR: No puede dejar este campo vacio") return false } partes=mask.split('.'); if (partes.length!=4) { alert("ERROR: La mascara de red que usted ingreso no es valida"); return false; } for (i=0;i<4;i++) { num=partes[i]; if (partes[0]!=255 || partes[1]!=255 || partes[2]!=255 || num.length==0 || isNaN(num) || partes[3]!=0) { alert("ERROR: La mascara de red que usted ingreso no es valida"); return false; } } return true; } //VALIDA TODOS LOS CAMPOS DEL FORMULARIO function validarFormulario() { if (validarip(document.myform.ipservidor.value) == false) { return false; } if (validarmask(document.myform.maskred.value) == false) 256 { return false; } return true; } </script> <style type="text/css"> body { background-color: #FFFFFF; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 18px; font-style: italic; line-height: 24px; color: #99FF99 #003300 #003300 #99FF99; margin-bottom: 0px; border-color: #0000CC; } td, th { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 18px; color: #3333FF; } a{ font-size: 12px; color: #336600; } form { background-color: #FFFFFF; background-image: url(../imagenes/Fondos/a16.jpg); } .sidebar { font-family: "Comic Sans MS", Courier; font-size: 14px; line-height: normal; padding: 3px; background-color: #33CCFF; color: #0000CC; } .promo { font-family: "Verdana", Times, serif; color: #0000FF; 257 font-size: 14px; font-weight: italic; } .footer { font-family: Arial, Helvetica, sans-serif; font-size: 24px; font-weight: bold; line-height: normal; color: #F3F2F9; background-color: #3B4D61; } .dingbat { font-family: Arial, Helvetica, sans-serif; background-color: #FFFFFF; color: #660000; font-weight: bolder; font-size: 20px; } .warning { color: #ff0000; } .required { color: #0000ff; } .fieldLabel { text-align: right; color: BLUE; } </style> </head> <body> <?php require_once('/var/www/html/sw_syscomsa/FormBuilder.php'); $form = new FormBuilder(); $form->addField(new LabelFieldtitulo('Configuración Dominio de Red', 'confired')); $form->addField(new LabelFieldsubtitulo('Detalle de Red', 'detared')); $form->addField(new LabelFieldmensaje('Este asistente necesita saber la direccion de la red','mensaje1')); $form->addField(new TextField('IP del Servidor:', 'ipservidor',15,1,15)); $form->addField(new LabelFieldmensaje('La ip del servidor es la que corresponderá al servidor webmail.','mensaje2')); $form->addField(new TextField('Mascara de la Red:', 'maskred', 15,1,15)); $form->addField(new SubmitFieldGroup(array('next' => 'Siguente', 'exit' => 'Salir'))); 258 if ($form->isSubmitted('next')) { if ($form->validate()) //if(($form->getValue('ipservidor') == true) and ($form>getValue('maskred') == true)) { $cmd = "sudo /var/www/html/sw_syscomsa/webpages/admin_servi_correo/scripts/configred_cmd.s h ".$form->getValue('ipservidor')." ".$form->getValue('maskred'); #echo $cmd; $tmp = exec($cmd,$output,$status); #echo "<br/>".$tmp."<br/>"; if ($status == 0) { //echo "Definicion de IP realizado<br/>"; header ("Location:./pw_config_dns.php"); } else { echo "Definicion de IP NO realizado<br/>"; foreach ($output as $line) { echo $line."<br/>"; } } }else { echo "Ingrese los campos correctamente<br/>"; $form->display(); } } else if ($form->isSubmitted('exit')) { header("Location: /sw_syscomsa/contenido.php"); } else { $form->display(); } ?> </body> 259 </html> Archivo: pw_config_dns.php <html> <head> <title>Configuracion de DNS</title> <script> // FUNCION PARA VALIDAR IP function validarip(ip) { if (ip == "") { alert("ERROR: No puede dejar este campo vacio") return false } partes=ip.split('.'); if (partes.length!=4) { alert("ERROR: La ip que usted ingreso no es valida"); return false; } for (i=0;i<4;i++) { num=partes[i]; if (num>255 || num<0 || num.length==0 || isNaN(num)) { alert("ERROR: La ip que usted ingreso no es valida"); return false; } } return true; } // FUNCION PARA VALIDAR IP function validarip2(ip2) { partes=ip2.split('.'); if (partes.length!=4) { // alert("KIERES CASARTE CONMIGO"); alert("ERROR: La ip que usted ingreso no es valida"); return false; } for (i=0;i<4;i++) 260 { num=partes[i]; if (num>255 || num<0 ||num.length==0 || isNaN(num) ) { //alert("si te KIERES CASARTE CONMIGO"); alert("ERROR: La ip que usted ingreso no es valida"); return false; } } return true; } /* function validarip3(ip3) { if (ip3 == "") { // alert("ERROR: No puede dejar este campo vacio") return true; } }*/ //VALIDA TODOS LOS CAMPOS DEL FORMULARIO function validarFormulario() { if (validarip(document.myform.gateway.value) == false) { return false; } if (validarip(document.myform.dnsexterno1.value) == false) { return false; } if (validarip(document.myform.dnsexterno2.value) == false) { return false; } /* // if (validarip3(document.myform.dnsexterno2.value) == true) if (validarip2(document.myform.dnsexterno2.value) == false) { alert("entro al vacio") return false; } 261 else { //if(validarip2(document.myform.dnsexterno2.value) == false) // { // // alert("si ta lleno") return false; } return false; }*/ return true; } </script> <style type="text/css"> body { background-color: #FFFFFF; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 18px; font-style: italic; line-height: 24px; color: #99FF99 #003300 #003300 #99FF99; margin-bottom: 0px; border-color: #0000CC; } td, th { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 18px; color: #3333FF; } a{ font-size: 12px; color: #336600; } form { background-color: #FFFFFF; background-image: url(../imagenes/Fondos/a16.jpg); } .sidebar { font-family: "Comic Sans MS", Courier; font-size: 14px; line-height: normal; padding: 3px; background-color: #33CCFF; 262 color: #0000CC; } .promo { font-family: "Verdana", Times, serif; color: #0000FF; font-size: 14px; font-weight: italic; } .footer { font-family: Arial, Helvetica, sans-serif; font-size: 24px; font-weight: bold; line-height: normal; color: #F3F2F9; background-color: #3B4D61; } .dingbat { font-family: Arial, Helvetica, sans-serif; background-color: #FFFFFF; color: #660000; font-weight: bolder; font-size: 20px; } .warning { color: #ff0000; } .required { color: #0000ff; } .fieldLabel { text-align: right; color: BLUE; } </style> </head> <body> <?php require_once('/var/www/html/sw_syscomsa/FormBuilder.php'); $form = new FormBuilder(); $form->addField(new LabelFieldtitulo('Configuración de Dominio', 'confidomin')); $form->addField(new LabelFieldsubtitulo('Detalle IP Externas', 'detaipext')); $form->addField(new LabelFieldmensaje('En caso de tener un dominio registrado y un proveedor de internet deberiamos ingresar la Ip que nos haya asignado 263 gateway ademas de las Ip`s correspondientes a los dominios externos a la empresa (Dns primario y secundario)..', 'msn1')); $form->addField(new TextField('Gateway', 'gateway', 25,2,30)); $form->addField(new TextField('Dns Externo Primario', 'dnsexterno1', 25,2,30)); $form->addField(new TextField('Dns Externo Secundario', 'dnsexterno2', 25,2,30)); $form->addField(new SubmitFieldGroup(array('lastdns' => 'Atras', 'nextdns' => 'Siguente', 'exitdns' => 'Salir'))); if ($form->isSubmitted('nextdns')) { $form->validate(); if(($form->getValue('gateway') == true) and ($form>getValue('dnsexterno1') == true)) /* if(($form->getValue('gateway') == true) and ($form>getValue('dnsexterno1') == true) and ($form->getValue('dnsexterno2') == true))*/ { $cmd = "sudo /var/www/html/sw_syscomsa/webpages/admin_servi_correo/scripts/configdns_cmd.s h ".$form->getValue('gateway')." ".$form->getValue('dnsexterno1')." ".$form>getValue('dnsexterno2'); #echo $cmd; $tmp = exec($cmd,$output,$status); #echo "<br/>".$tmp."<br/>"; if ($status == 0) { header ("Location: ./pw_crear_dominio.php"); } else { echo "Definicion de cuotas NO realizado<br/>"; foreach ($output as $line) { echo $line."<br/>";} } $form->display(); }else { echo "Ingrese los campos correctamente<br/>"; $form->display(); } 264 } else if ($form->isSubmitted('lastdns')) { header ("Location: ./pw_config_red.php"); } else if ($form->isSubmitted('exitdns')) { header("Location: /sw_syscomsa/contenido.php"); } else { $form->display(); } ?> </body> </html> Archivo: pw_crear_dominio.php <html> <head> <title>Configuracion de Dominio</title> <script> // FUNCION PARA VALIDAR IP function validarip(ip) { if (ip == "") { alert("ERROR: No puede dejar este campo vacio") return false } partes=ip.split('.'); if (partes.length!=4) { alert("ERROR: La ip que usted ingreso no es valida"); return false; } for (i=0;i<4;i++) { num=partes[i]; if (num>255 || num<0 || num.length==0 || isNaN(num)) 265 { alert("ERROR: La ip que usted ingreso no es valida"); return false; } } return true; } //busca caracteres que no sean espacio en blanco en una cadena function vacio(o) { if (o == "") { alert("ERROR: No puede dejar este campo vacio") return false } var caract_extra=" " var ubicacion var enter = " " var caracteres = ".ABCDEFGHIJKLMNOPQRSTUVWXYZÑáéíóúÁÉÍÓÚàèìòùÀÈÌÒÙºª\!|@·#$~ %½¬&/{/([)]=}?\'¡~¿+]*`[^'_-·;,}çÇ" + String.fromCharCode(13) + enter + caract_extra var contador = 0 for (var i=0; i < o.length; i++) { if ( o.charAt(i) != "" ) { ubicacion = o.substring(i, i + 1) if (caracteres.indexOf(ubicacion) == -1) { contador++ } else { alert("ERROR: No se acepta el caracter '" + ubicacion + "'.") return false } } } return true } 266 //valida que el campo no este vacio y no tenga solo espacios en blanco function validatexto(F) { if( vacio(F) == false ) { //alert("Introduzca un cadena de texto correctamente.") return false } else { //alert("OK") return true } } //busca caracteres que no sean espacio en blanco en una cadena function vaciodominio(p) { if (p == "") { alert("ERROR: No puede dejar este campo vacio") return false } partes2=p.split('.'); if ((partes2.length!=2) && (partes2.length!=3)) { alert("ERROR: El nombre del dominio esta erroneo"); alert("Debe de ingresarlo de la sgte manera, 'dominio.com' o 'dominio.com.ec"); return false; } var caract_extra=" " var ubicacion var enter = " " var caracteres = "ABCDEFGHIJKLMNOPQRSTUVWXYZÑñáéíóúÁÉÍÓÚàèìòùÀÈÌÒÙ" + String.fromCharCode(13) + enter + caract_extra var contador = 0 for (var i=0; i < p.length; i++) { if ( p.charAt(i) != "" ) { 267 ubicacion = p.substring(i, i + 1) if (caracteres.indexOf(ubicacion) == -1) { contador++ } else { alert("ERROR: No se acepta el caracter '" + ubicacion + "'.") return false } } } return true } //valida que el campo no este vacio y no tenga solo espacios en blanco function validadominio(g) { if( vaciodominio(g) == false ) { //alert("Introduzca un cadena de texto correctamente.") return false } else { //alert("OK") return true } } //VALIDA TODOS LOS CAMPOS DEL FORMULARIO function validarFormulario() { if (validarip(document.myform.actualiza.value) == false) { return false; } if (validatexto(document.myform.equipo.value) == false) { return false; } if (validadominio(document.myform.dominio.value) == false) { return false; } 268 return true; } </script> <style type="text/css"> body { background-color: #FFFFFF; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 18px; font-style: italic; line-height: 24px; color: #99FF99 #003300 #003300 #99FF99; margin-bottom: 0px; border-color: #0000CC; } td, th { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 18px; color: #3333FF; } a{ font-size: 12px; color: #336600; } form { background-color: #FFFFFF; } .promo { font-family: "Verdana", Times, serif; color: #0000FF; font-size: 14px; font-weight: italic; } .footer { font-family: Arial, Helvetica, sans-serif; font-size: 24px; font-weight: bold; line-height: normal; color: #F3F2F9; background-color: #3B4D61; } .dingbat { font-family: Arial, Helvetica, sans-serif; background-color: #FFFFFF; 269 color: #660000; font-weight: bolder; font-size: 20px; } .warning { color: #ff0000; } .required { color: #0000ff; } </style> </head> <body> <?php require_once('/var/www/html/sw_syscomsa/FormBuilder.php'); $form = new FormBuilder(); $form->addField(new LabelFieldtitulo('Configuración de Dominio', 'confidomin')); $form->addField(new LabelFieldmensaje('A continuacion le asignaremos el nombre correspondiente al dominio el cual va a ser utilizado para la asignacion de cuotas (Nombre de dominio)..', 'msn1')); $form->addField(new TextField('Nombre de dominio', 'dominio', 25,2,30)); $form->addField(new TextField('Nombre de equipo', 'equipo', 25,2,30)); $form->addField(new TextField('Permite actualizaciones','actualiza', 25,2,30)); $form->addField(new LabelFieldmensaje('(Direccion de Red o de IP)', 'msn5')); $form->addField(new SubmitFieldGroup(array('lastdns' => 'Atras', 'enddns' => 'Finalizar', 'exitdns' => 'Salir'))); if ($form->isSubmitted('enddns')) { if ($form->validate()) { $cmd = "sudo /var/www/html/sw_syscomsa/webpages/admin_servi_correo/scripts/configdominio_c md.sh ".$form->getValue('dominio')." ".$form->getValue('equipo')." ".$form>getValue('actualiza'); //echo $cmd; $tmp = exec($cmd,$output,$status); //echo "<br/>".$tmp."<br/>"; 270 if ($status == 0) { $cmd = "sudo /var/www/html/sw_syscomsa/webpages/admin_servi_correo/scripts/changeallconfig_ cmd.sh"; //echo $cmd; $tmp = exec($cmd,$output,$status); //echo "<br/>".$tmp."<br/>"; if ($status == 0) { $cmd = "sudo /var/www/html/sw_syscomsa/webpages/admin_servi_correo/scripts/restartservices_c md.sh"; $tmp = exec($cmd,$output,$status); header("Location: ./pw_mensaje_dns.php"); echo "Creacion de Dominio Modificado Exitosamente<br/>"; } else { echo "Creacion de Dominio NO Modificado<br/>"; foreach ($output as $line) { echo $line."<br/>";} } } else { echo "Creacion de Dominio NO Modificado<br/>"; foreach ($output as $line) { echo $line."<br/>"; } } // $form->display(); }else { echo "Ingrese los campos correctamente<br/>"; $form->display(); } } else if ($form->isSubmitted('lastdns')) { header ("Location: ./pw_config_dns.php"); 271 } else if ($form->isSubmitted('exitdns')) { header("Location: /sw_syscomsa/contenido.php"); } else { $form->display(); } ?> </body> </html> Archivo: pw_mensaje_dns.php <html> <head> <title>Configuracion Finalazada de Red y de Dominio</title> <style type="text/css"> body { background-color: #FFFFFF; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 18px; font-style: italic; line-height: 24px; color: #99FF99 #003300 #003300 #99FF99; margin-bottom: 0px; border-color: #0000CC; } td, th { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 18px; color: #3333FF; } a{ font-size: 12px; color: #336600; } form { background-color: #FFFFFF; background-image: url(../imagenes/Fondos/a16.jpg); } .sidebar { font-family: "Comic Sans MS", Courier; font-size: 14px; 272 line-height: normal; padding: 3px; background-color: #33CCFF; color: #0000CC; } .promo { font-family: "Verdana", Times, serif; color: #0000FF; font-size: 14px; font-weight: italic; } .footer { font-family: Arial, Helvetica, sans-serif; font-size: 24px; font-weight: bold; line-height: normal; color: #F3F2F9; background-color: #3B4D61; } .dingbat { font-family: Arial, Helvetica, sans-serif; background-color: #FFFFFF; color: #660000; font-weight: bolder; font-size: 20px; } .warning { color: #ff0000; } .required { color: #0000ff; } .fieldLabel { text-align: right; color: BLUE; } </style> </head> <body> <?php require_once('/var/www/html/sw_syscomsa/FormBuilder.php'); $eleccion = array ('-u' => 'Usuario', '-g' => 'Grupo'); 273 $form = new FormBuilder(); $form->addField(new LabelFieldtitulo('Configuración Dominio de Red', 'confired')); $form->addField(new LabelFieldsubtitulo('La configuración del dominio de red ha finalizado exitosamente.', 'mensaje1')); $form->addField(new LabelFieldmensaje('Ud puede ahora crear las cuotas necesarias con su propio dominio')); $form->addField(new LabelFieldmensaje('Por favor tenga la amabilidad de salir del explorador y volver a ingresar con el dominio que ud acaba de modificar')); /*$form->addField(new SubmitField('exit', 'Salir')); if ($form->isSubmitted('exit')) { header ("Location: /sw_syscomsa/login_syscomsa.htm"); } else { $form->display(); }*/ $form->display(); ?> </body> </html> Archivo: syscomsa.sql # MySQL-Front Dump 2.5 # # Host: localhost Database: syscomsa # -------------------------------------------------------# Server version 5.0.41-community-nt USE syscomsa; # # Table structure for table 'opcion_vinculo' # DROP TABLE IF EXISTS opcion_vinculo; CREATE TABLE IF NOT EXISTS opcion_vinculo ( codi_opvi int(4) NOT NULL , nomb_opvi varchar(100) NOT NULL , link_opvi varchar(254) NOT NULL , nivel_opvi int(4) , codi_usua int(4) unsigned , fcrea_opvi datetime , ai_opvi int(4) NOT NULL , 274 PRIMARY KEY (codi_opvi) ); # # Dumping data for table 'opcion_vinculo' # INSERT INTO opcion_vinculo VALUES("1", "Usuarios", "0", "0", "1", "2008-05-18 00:28:37", "1"); INSERT INTO opcion_vinculo VALUES("2", "Cuentas", "0", "0", "1", "2008-05-18 00:28:37", "1"); INSERT INTO opcion_vinculo VALUES("3", "Interfaz Horde", "0", "0", "1", "200805-18 00:28:37", "1"); INSERT INTO opcion_vinculo VALUES("4", "Seguridades", "0", "0", "1", "2008-0518 00:28:37", "1"); INSERT INTO opcion_vinculo VALUES("6", "Creaci&oacute;n de Usuarios", "webpages/administracion_usuarios/pw_crear_usuario.php", "1", "1", "2008-05-18 00:28:37", "1"); INSERT INTO opcion_vinculo VALUES("7", "Creaci&oacute;n de Grupos", "webpages/administracion_usuarios/pw_crear_grupo.php", "1", "1", "2008-05-18 00:28:37", "1"); INSERT INTO opcion_vinculo VALUES("8", "Creaci&oacute;n de Usuario por Lista", "webpages/administracion_usuarios/pw_crear_usua_lista.php", "1", "1", "2008-05-18 00:28:37", "1"); INSERT INTO opcion_vinculo VALUES("9", "Modificaci&oacute;n de Usuarios", "webpages/administracion_usuarios/pw_mod_usuario.php", "1", "1", "2008-05-18 00:28:37", "1"); INSERT INTO opcion_vinculo VALUES("10", "Modificaci&oacute;n de Grupos", "webpages/administracion_usuarios/pw_mod_grupo.php", "1", "1", "2008-05-18 00:28:37", "1"); INSERT INTO opcion_vinculo VALUES("11", "Cambio de Claves", "webpages/administracion_usuarios/pw_mod_contrase.php", "1", "1", "2008-05-18 00:28:37", "1"); INSERT INTO opcion_vinculo VALUES("12", "Par&aacute;metros de Cuentas", "webpages/administracion_cuenta/pw_parametros_cuenta.php", "2", "1", "2008-0518 00:28:37", "1"); #INSERT INTO opcion_vinculo VALUES("13", "Definici&oacute;n de Cuotas", "webpages/administracion_cuenta/pw_definicion_cuotas.php", "2", "1", "2008-05-18 00:28:37", "1"); INSERT INTO opcion_vinculo VALUES("14", "Definici&oacute;n de Cuotas Usuario", "webpages/administracion_cuenta/pw_definicion_cuotas_usuario.php", "2", "1", "2008-05-18 00:28:37", "1"); 275 INSERT INTO opcion_vinculo VALUES("15", "Definici&oacute;n de Cuotas Grupo", "webpages/administracion_cuenta/pw_definicion_cuotas_grupo.php", "2", "1", "2008-05-18 00:28:37", "1"); INSERT INTO opcion_vinculo VALUES("16", "Control Acceso de Usuarios", "webpages/administracion_cuenta/pw_control_usuario.php", "2", "1", "2008-05-18 00:28:37", "1"); INSERT INTO opcion_vinculo VALUES("17", "Control Acceso de Dominio e Ip Red", "webpages/administracion_cuenta/pw_control_correo.php", "2", "1", "2008-0518 00:28:37", "1"); INSERT INTO opcion_vinculo VALUES("18", "Idioma y Hora", "webpages/administracio_interfaz/pw_sele_idiomahora.php", "3", "1", "2008-05-18 00:28:37", "1"); INSERT INTO opcion_vinculo VALUES("19", "Opciones de Visualizaci&oacute;n", "webpages/administracio_interfaz/pw_opciones_visualizacion.php", "3", "1", "200805-18 00:28:37", "1"); #INSERT INTO opcion_vinculo VALUES("##", "Mantenimiento de Inicio de Sesi&oacute;n", "webpages/administracio_interfaz/pw_mantenimiento_sesion.php", "3", "1", "2008-05-18 00:28:37", "1"); INSERT INTO opcion_vinculo VALUES("21", "Tareas de Inicio de Sesi&oacute;n en Correo (Parte I)", "webpages/administracio_interfaz/pw_inicio_sesion_correo.php", "3", "1", "2008-05-18 00:28:37", "1"); INSERT INTO opcion_vinculo VALUES("22", "Tareas de Inicio de Sesi&oacute;n en Correo (Parte II)", "webpages/administracio_interfaz/pw_inicio_sesion_correo2.php", "3", "1", "2008-05-18 00:28:37", "1"); INSERT INTO opcion_vinculo VALUES("23", "Copias Horarios Simples", "webpages/seguridades/pw_copia_seguridadsimple.php", "4", "1", "2008-05-18 00:28:37", "1"); INSERT INTO opcion_vinculo VALUES("24", "Copias Horario Multiple", "webpages/seguridades/pw_copia_seguridadmultiple.php", "4", "1", "2008-05-18 00:28:37", "1"); INSERT INTO opcion_vinculo VALUES("25", "Administraci&oacute;n de Servidor de Correo", "0", "0", "2", "2008-05-22 00:00:00", "1"); INSERT INTO opcion_vinculo VALUES("26", "Configuraci&oacute;n de Red", "webpages/admin_servi_correo/pw_config_red.php", "25", "2", "2008-05-22 00:00:00", "1"); INSERT INTO opcion_vinculo VALUES("27", "Restauraci&oacute;n de copias de seguridad", "webpages/seguridades/pw_restauracion_copias.php", "4", "1", "2008-0522 00:00:00", "1"); INSERT INTO opcion_vinculo VALUES("28", "Opciones de Redacci&oacute;n de mensajes", "webpages/administracio_interfaz/pw_opc_redaccion.php", "3", "1", "2008-05-22 00:00:00", "1"); 276 # # Table structure for table 'usuario' # DROP TABLE IF EXISTS usuario; CREATE TABLE IF NOT EXISTS usuario ( codi_usua int(4) unsigned NOT NULL , nomb_usua varchar(100) NOT NULL , clave_usua varchar(100) NOT NULL , fcrea_usua datetime NOT NULL , ai_usua int(4) NOT NULL , PRIMARY KEY (codi_usua) ); # # Dumping data for table 'usuario' # INSERT INTO usuario VALUES("1", "webmaster", "827ccb0eea8a706c4c34a16891f84e7b", "2008-05-17 19:16:56", "1"); INSERT INTO usuario VALUES("2", "admin", "81dc9bdb52d04dc20036dbd8313ed055", "2008-05-22 22:13:02", "1"); # # Table structure for table 'usuario_vinculo' # DROP TABLE IF EXISTS usuario_vinculo; CREATE TABLE IF NOT EXISTS usuario_vinculo ( codi_usua int(4) unsigned , codi_opvi int(4) , codi_usua1 int(4) NOT NULL , fcrea_opvi datetime , ai_opvi int(4) NOT NULL , KEY codi_usua (codi_usua), KEY codi_opvi (codi_opvi) ); # # Dumping data for table 'usuario_vinculo' # 277 INSERT INTO usuario_vinculo VALUES("1", "1", "1", "2008-05-22 22:25:26", "1"); INSERT INTO usuario_vinculo VALUES("1", "2", "1", "2008-05-22 22:25:26", "1"); INSERT INTO usuario_vinculo VALUES("1", "3", "1", "2008-05-22 22:25:26", "1"); INSERT INTO usuario_vinculo VALUES("1", "4", "1", "2008-05-22 22:25:26", "1"); INSERT INTO usuario_vinculo VALUES("1", "6", "1", "2008-05-22 22:25:26", "1"); INSERT INTO usuario_vinculo VALUES("1", "7", "1", "2008-05-22 22:25:26", "1"); INSERT INTO usuario_vinculo VALUES("1", "8", "1", "2008-05-22 22:25:26", "1"); INSERT INTO usuario_vinculo VALUES("1", "9", "1", "2008-05-22 22:25:26", "1"); INSERT INTO usuario_vinculo VALUES("1", "10", "1", "2008-05-22 22:25:26", "1"); INSERT INTO usuario_vinculo VALUES("1", "11", "1", "2008-05-22 22:25:26", "1"); INSERT INTO usuario_vinculo VALUES("1", "12", "1", "2008-05-22 22:25:26", "1"); #INSERT INTO usuario_vinculo VALUES("1", "13", "1", "2008-05-22 22:25:26", "1"); INSERT INTO usuario_vinculo VALUES("1", "14", "1", "2008-05-22 22:25:26", "1"); INSERT INTO usuario_vinculo VALUES("1", "15", "1", "2008-05-22 22:25:26", "1"); INSERT INTO usuario_vinculo VALUES("1", "16", "1", "2008-05-22 22:25:26", "1"); INSERT INTO usuario_vinculo VALUES("1", "17", "1", "2008-05-22 22:25:26", "1"); INSERT INTO usuario_vinculo VALUES("1", "18", "1", "2008-05-22 22:25:26", "1"); INSERT INTO usuario_vinculo VALUES("1", "19", "1", "2008-05-22 22:25:26", "1"); INSERT INTO usuario_vinculo VALUES("1", "20", "1", "2008-05-22 22:25:26", "1"); INSERT INTO usuario_vinculo VALUES("1", "21", "1", "2008-05-22 22:25:26", "1"); INSERT INTO usuario_vinculo VALUES("1", "22", "1", "2008-05-22 22:25:26", "1"); INSERT INTO usuario_vinculo VALUES("1", "23", "1", "2008-05-22 22:25:26", "1"); INSERT INTO usuario_vinculo VALUES("1", "24", "1", "2008-05-22 22:25:26", "1"); INSERT INTO usuario_vinculo VALUES("2", "25", "2", "2008-05-22 22:25:26", "1"); 278 INSERT INTO usuario_vinculo VALUES("2", "26", "2", "2008-05-22 22:25:26", "1"); INSERT INTO usuario_vinculo VALUES("1", "27", "1", "2008-05-22 22:25:26", "1"); INSERT INTO usuario_vinculo VALUES("1", "28", "1", "2008-05-22 22:25:26", "1"); Archivo: login_syscomsa.htm <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> <title>Bienvenidos - LOGIN</title> <style type="text/css"> <!-.Estilo1 { font-size: 24px; color: #FFFFFF; font-weight: bold; } .Estilo2 { font-size: 18px; color: #FFFFFF; } --> </style> </head> <body> <form id="form1" name="form1" method="post" action="pw_principal.php"> <table width="336" border="0" align="center" cellpadding="0" cellspacing="0"> <tr> <td width="164"><img src="Imagenes/Images/cabecera_04.gif" width="164" height="38" /></td> <td width="172"><img src="Imagenes/Images/cabecera_05.gif" width="172" height="38" /></td> </tr> <tr> <td><img src="Imagenes/Images/cabecera_09.gif" width="164" height="33" /></td> <td><img src="Imagenes/Images/cabecera_10.gif" width="172" height="33" /></td> </tr> 279 <tr> <td colspan="2" bgcolor="#3B4D61"><div align="center" class="Estilo1">Bienvenidos ! </div></td> </tr> <tr> <td bgcolor="#0099CC">&nbsp;</td> <td bgcolor="#0099CC">&nbsp;</td> </tr> <tr> <td bgcolor="#0099CC"><span class="Estilo2">Usuario:</span></td> <td bgcolor="#0099CC"><input name="txt_usuario" type="text" id="txt_usuario" /></td> </tr> <tr> <td bgcolor="#0099CC" class="Estilo2">Clave:</td> <td bgcolor="#0099CC"><input name="txt_clave" type="password" id="txt_clave" /></td> </tr> <tr> <td bgcolor="#0099CC" class="Estilo2">&nbsp;</td> <td bgcolor="#0099CC">&nbsp;</td> </tr> <tr> <td colspan="2" bgcolor="#3B4D61"><div align="center"><input type="submit" name="Submit" value="Enviar" /></div></td> </tr> </table> </form> </body> </html> Archivo: contenido.php <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> <title>Documento sin t&iacute;tulo</title> <style type="text/css"> <!-.Estilo6 { font-size: 30px; color: #0000FF; } 280 .Estilo8 {font-size: 18px; color: #000066; font-family: "Times New Roman", Times, serif; } --> </style> </head> <body> <table width="100%" border="0" cellpadding="0" cellspacing="0"> <tr> <td> <table width="500" border="0" cellspacing="0" cellpadding="0" align="center"> <tr> <td><div align="center"><span class="Estilo6">Bienvenidos al Administrador de Servicios Webmail.</span></div></td> </tr> <tr> <td><table cellspacing="0" cellpadding="0" hspace="0" vspace="0" align="right"> <tr> <td valign="top" align="left"><p class="Estilo8">&nbsp;</p> <p align="justify" class="Estilo8">Syscomsa se complace en darle la bienvenida a nuestro Wizard de configuraciones v&iacute;a Web. Mediante este wizard web usted podr&aacute; efectuar modificaciones a su servidor de Webmail Corporativo. Esta herramienta permitir&aacute; realizar modificaciones del servidor de correo, cambiar las configuraciones de par&aacute;metros de correo. La configuraci&oacute;n de usuarios as&iacute; como la configuraci&oacute;n de interfaz gr&aacute;fica se lo podr&aacute; modifcar.</p> <p class="Estilo8">&nbsp;</p></td> </tr> <tr> <td valign="top" align="left"><align="justify" class="Estilo8">Esperando que este producto permita satisfacer las necesidades de su organizaci&aacute;n.</td> </tr> <tr> <td valign="top" align="left"><p align="justify" class="Estilo8">Atentamente Grupo # 7.</p></td> </tr> <tr> <td valign="top" align="left"><align="justify" class="Estilo8">Zaida Yadira Miranda Castro</td> </tr> <tr> <td valign="top" align="left"><align="justify" class="Estilo8">Luis Eduardo Erazo Cordova</td> 281 </tr> <tr> <td valign="top" align="left"><align="justify" class="Estilo8">Ra&uacute;l Andr&eacute;s Jaramillo Ord&oacute;ñez</td> </tr> </table></td> </tr> </table> </td> </tr> </table> </body> </html> Archivo: Index.html <html> <head> <title>SysComsa</title> <script language="JavaScript"> <!-function MM_checkPlugin(plgIn, theURL, altURL, autoGo) { //v3.0 var ok=false; document.MM_returnValue = false; with (navigator) if (appName.indexOf('Microsoft')==-1) ok=(plugins && plugins[plgIn]); else if (appVersion.indexOf('3.1')==-1) { //not Netscape or Win3.1 if (plgIn.indexOf("Flash")!=-1 && window.MM_flash!=null) ok=window.MM_flash; else if (plgIn.indexOf("Director")!=-1 && window.MM_dir!=null) ok=window.MM_dir; else ok=autoGo; } if (!ok) theURL=altURL; if (theURL) window.location=theURL; } //--> </script> </head> <body bgcolor="#FFFFFF" onLoad="MM_checkPlugin('Shockwave Flash','login_syscomsa.htm','login_syscomsa.htm',false);return document.MM_returnValue"> </body> <script name="Used by MM_checkPlugin" language="javascript"> <!-with (navigator) if (appName.indexOf('Microsoft')!=-1 && appVersion.indexOf('Mac')==-1) document.write(''+ '<scr'+'ipt language="VBScript">\nOn error resume next\n'+ 282 'MM_dir = (IsObject(CreateObject("SWCtl.SWCtl.1")) Or IsObject(CreateObject("Macromedia.ActiveShockwave.1")))\n'+ 'MM_flash = NOT IsNull(CreateObject("ShockwaveFlash.ShockwaveFlash"))\n</scr'+'ipt>'); //--> </script> </html> RUTA: /var/www/html/sw_syscomsa/ Archivo: Index.html <html> <head> <title>SysComsa</title> <script language="JavaScript"> <!-function MM_checkPlugin(plgIn, theURL, altURL, autoGo) { //v3.0 var ok=false; document.MM_returnValue = false; with (navigator) if (appName.indexOf('Microsoft')==-1) ok=(plugins && plugins[plgIn]); else if (appVersion.indexOf('3.1')==-1) { //not Netscape or Win3.1 if (plgIn.indexOf("Flash")!=-1 && window.MM_flash!=null) ok=window.MM_flash; else if (plgIn.indexOf("Director")!=-1 && window.MM_dir!=null) ok=window.MM_dir; else ok=autoGo; } if (!ok) theURL=altURL; if (theURL) window.location=theURL; } //--> </script> </head> <body bgcolor="#FFFFFF" onLoad="MM_checkPlugin('Shockwave Flash','login_syscomsa.htm','login_syscomsa.htm',false);return document.MM_returnValue"> </body> <script name="Used by MM_checkPlugin" language="javascript"> <!-with (navigator) if (appName.indexOf('Microsoft')!=-1 && appVersion.indexOf('Mac')==-1) document.write(''+ '<scr'+'ipt language="VBScript">\nOn error resume next\n'+ 'MM_dir = (IsObject(CreateObject("SWCtl.SWCtl.1")) Or IsObject(CreateObject("Macromedia.ActiveShockwave.1")))\n'+ 'MM_flash = NOT IsNull(CreateObject("ShockwaveFlash.ShockwaveFlash"))\n</scr'+'ipt>'); //--> 283 </script> </html> Archivo: pw_principal.php <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> <title>Administrador Webmail</title> <?php require "syscomsa.php"; conectar($conec); $usuario=$_POST['txt_usuario']; $clave=$_POST['txt_clave']; $sql="select * from usuario where nomb_usua='$usuario' and clave_usua=md5('$clave');"; carga($sql,$conec,$r); if(!mysql_affected_rows($conec)) { mensaje("no existe el usuario",0); die(); } $fila=mysql_fetch_array($r); ?> </head> <frameset rows="100,*" cols="*" framespacing="0" frameborder="no" border="0"> <frame src="pw_cabecera.php?codi_usua=<?php echo $fila['codi_usua'];?>" name="cabecera" scrolling="No" noresize="noresize" id="cabecera" /> <frameset rows="*,17" cols="*" framespacing="0" frameborder="no" border="0"> <frameset rows="*" cols="165,*" framespacing="0" frameborder="no" border="0"> <frame src="pw_submenu.php" name="submenu" scrolling="no" noresize="noresize" id="submenu" /> <frame src="contenido.php" name="contenido" id="contenido" /> </frameset> <frame src="pw_pie.html" name="pie" scrolling="No" noresize="noresize" id="pie" /> </frameset> </frameset> <noframes><body> </body> </noframes> <?php 284 mysql_free_result($r); ?> </html> Archivo: syscomsa.php <?PHP define (DATASERVER, "localhost"); define (USUARIO, "root"); define (CLAVE, "centos"); define (BASE, "syscomsa"); define (SITIO, "http://localhost"); define (N_FILAS_CONSULTA,10); define (COLOR_CONSULTA_N1,"#009966"); define (COLOR_CONSULTA_N2,"#99cc99"); function conectar(&$c) { $c=@ mysql_connect(DATASERVER,USUARIO,CLAVE) or $c=0; if(!$c) { mensaje("no se puede realizar la conexion",0); die(); } else { $vefifica=@ mysql_select_db(BASE,$c) or $vefifica=0; if(!$vefifica) { mensaje("no tiene permisos de acceder a los datos",0); die(); } } } function carga($sql,&$c,&$r) { $link=@mysql_query($sql,$c) or $link=0; if(!$link) { mensaje("la consulta tiene error o se perdio conexion al servidor",0); die(); } $r=$link; } function mensaje($m,$tipo) { echo $m; 285 } ?>