UNIVERSIDAD DE GUAYAQUIL Facultad de Ciencias...

376
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

Transcript of UNIVERSIDAD DE GUAYAQUIL Facultad de Ciencias...

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 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 8

1.7. Requerimientos Tecnológicos 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 Entidad de Relación.Diagrama de

Flujo de

Información.D

FD.-

Diagrama de Flujo de Datos.

Internet

ProtocolHD.-

DFI.-

Hard Disk.

ICMP.-IP.- Internet Control Message ProtocolLAN.- Local Area Network.OO.- Orientado a objetosRAM.- Random Access Memory.SQL.- Language Query Sentences.TCP.- Transfer Control Protocol.UDP.- 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

[email protected], 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

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

1.8. 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.

1.11. Cronograma

Figura 1.1 Modelo en Espiral

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:\\[email protected]

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.

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

Figura 2.1 Esquema Básico del Webmail

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 EduardoJaramillo Ordóñez Raúl AndrésMiranda Castro Zaida Yadira

GUAYAQUIL-ECUADORAñ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 personasque 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 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ésC.I. 0920317161 C.I. 0923068852

_______________________Miranda Castro Zaida YadiraC.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 hemosdesarrollado es para poder administrar esta herramienta de una forma mas amigable alusuario 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 IIDEDICATORIA IIITRIBUNAL DE GRADUACIÓN IVDECLARACIÓN EXPRESA

VRESUMEN VIINDICE GENERAL VII

CAPITULO 1

1.1. Introduccion. 11.2. Requerimientos. 21.2.1. Requerimientos Software. 2 1.2.2. Requerimientos Hardware. 2 1.3. Panel Web Dominio. 31.3.1. Configuraciones del Servidor. 3

1.3.1.1. Configuración De La Interfaz De Red. 3Configuración De Dominio. 81.4. Panel Web Administración. 91.4.1. Administración De Usuarios. 101.4.2. Administración De Cuentas. 181.4.3. Administración De Interfaz. 23Copias De Seguridad. 281.5. Mensajes De Error. 301.6. Sesión Del Webmail Horde. 33

CAPITULO 2

Introducción. 37Funcionamiento. 38Servicios que deben de estar activos. 39Configuraciones. 40Configuraciones del dominio. 40Configuraciones de parámetros de cuentas. 48Direcciones. 52Codificación del proyecto. 54Scripts del proyecto. 54

Sección administración interfaz. 54Sección administración cuenta. 602.3.1.3. Sección administración de usuarios. 632.3.1.4. Sección administración de correos. 652.3.1.5. Sección administración de seguridades. 722.4. Código PHP del proyecto. 74

2.4.1. Sección administración de interfaz. 742.4.2. Sección administración de cuenta. 92 2.4.3. Sección administración de usuarios. 1102.4.4. Sección administración de seguridades. 1452.4.5. Sección administración de correos. 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. Laaplicació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 archivosadjuntos. 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 vayaa 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:

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 1.3

Figura 1.1

Figura 1.2

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 ( La mascara 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.4

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 dominiosexternos. 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 servidor de correo, este 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_syscomsaLuego 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.6

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.

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.8

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”. Siel 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 quedesee 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 dela 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 clicen el botón “Buscar” y luego saldrá una pantalla igual a la de creación de usuario perocon los datos actuales para que lo podamos modificar. A continuación se muestra la pantalla.

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 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.12

Figura 1.13

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 contraseña asignada al usuario seleccionado. A continuación se muestra las pantallas 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 seencuentra en la parte de arriba de la ventana.Se te presentarán las siguientes opciones:

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 se creó. Dentro de las opciones múltiples tenemos las siguientes que se detallan una a una.

Figura 1.15

Figura 1.16

Figura 1.18

Figura 1.17

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 quees 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.

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 el nombre del usuario que ya esta creado previamente, luego se deberá 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.

Figura 1.19

Figura 1.20

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 de la red que necesitemos bloquear.

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 queel 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.21

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.

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.

Figura 1.24

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 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 encontraremosque 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.25

Figura 1.26Figura 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 seleccionamoshora 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 deuna forma más compleja ingresando los minutos, horas, día del mes, mes y el día de la semana.

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.28

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 de error que se muestra a continuación:

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.

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.

Si ingresamos la mascara de red erróneamente aparecerá un mensaje de error avisándo que la mascara que ingresada es invalida.

Dele clic en Aceptar y vuelva a ingresar los datos.

Figura 1.31

Figura 1.32

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:

Podemos realizar varias actividades como revisar la bandeja de entrada dando clic en el icono que se presenta en la siguiente figura.

Permite redactar correo para enviar a los usuarios que tengan también una cuenta de correo.

Figura 1.35

Figura 1.36

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.

En caso de que necesitemos ayuda podemos dar clic en el icono que se presenta en la siguiente figura.

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.

CAPITULO 2

Figura 1.39

Figura 1.40

Figura 1.41

Figura 1.42

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 queestuvié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.

Para acceder a esta herramienta a la parte de administración se requiere de un username 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

IMAP

IMAP

Figura 2.1

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.

2.2.1. Servicios que deben estar activos

Para que esta herramienta funcione correctamente debemos tener instalado en el servidor Linux los siguientes servicios:

Mysql

Mailscanner

Httpd NamedNetwork 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 ᄉ

Figura 2.2

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 quese presentan en la siguiente figura. Luego de ello detallamos los archivos.

El archivo Sendmail

DAEMON_OPTIONS

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ámetroFEATURE(`accept_unresolvable_domains').

Archivo sendmail.mc:

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 modoDAEMON_OPTIONS(`Port=smtp, Name=MTA')dnl

localice 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 máscara que utilizará el servidor:MASQUERADE_AS(`dominio.com')dnl

Figura 2.3

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.

Los archivos del dominio

Aquí se encuentran todos los archivos de zona del dominio creado. Recuerdemos que tambien debe de existir una zona inversa para el dominio.

Configuración De Apache

Están las configuraciones necesarias para que el servidor pueda efectuar las operaciones por medio de un navegador.

Los archivos adjuntos se los configura en Php en la ruta mencionada en la figura anterior.

DOVECOTRuta /etc/dovecot.confSe modifica el parámetro:# Protocols we want to be serving:# imap imaps pop3 pop3s

DNS

Paquetes utilizados: bindbind-libsbind-chrootbind-utilscaching-nameserver

Ruta( /var/named/chroot/var/named (archivos de zona)/var/named/chroot/etc (archivo named.conf)

Archivo named.conf:

options {directory "/var/named";dump-file "/var/named/data/cache_dump.db";stadistics-file "/var/named/data/named_stats.txt"forwarders {

200.93.192.148;200.93.192.161;

};};

Paquetes utilizados: httpdRuta( /var/www/html/mail/

Configure PHPPrimero configurar php en la ruta /etc/php.ini. Estas lineas deben ser configuradas:/etc/php.inifile_uploads = On// short_open_tag is not needed in newer versions of

Figura 2.4

Figura 2.5

Figura 2.6

Figura 2.7

21

Creamos directorios en donde se almacena toda la información del webmail horde.

Para reiniciar los servicios que guardan las configuraciones se utiliza los comandos citados en la figura.

Creación de los archivos de la figura para realizar las pruebas necesarias.

La Ip del servidor es la dirección de cuatro octetos separados cada uno por un punto, esta dirección debe estar entre 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.

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> SetOutputFilter PHP SetInputFilter PHP # max attachment size: 512 kbytes LimitRequestBody 524288</Files>

Configurar el VirtualHostEditar el archive de configuracion del apache y añadir los VirtualHost :

/etc/httpd/conf/httpd.conf # make .htpasswd work

Se le agrego:<Directory /var/www/html/mail/horde> Options FollowSymLinks AllowOverride All</Directory>

# One NameVirtualHost per IP addressNameVirtualHost 192.168.3.1:80# NameVirtualHost 192.168.3.2:80

<VirtualHost 192.168.3.1:80> ServerAdmin [email protected] DocumentRoot /var/www/html/mail/horde/imp ServerName mail. syscomsa.com

Creación de directoriosCrear todos los directorios necesarios:# mkdir -p /var/www/html/mail/horde/imp/

Test Apacheresetear apache para que surtan efecto los cambios:# service httpd configtest

Creación de un archivo temporal:# touch /var/www/html/mail/horde/imp/test.html

Figura 2.8

Figura 2.9

Figura 2.10

Figura 2.11

Figura 2.12

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.1Debido 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 queexplote vulnerabilidades recientes (desbordamientos de búfer) en UW IMAP, Outlooky 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 los5 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 permitidosEste 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 existentesy dejen lugar para nuevas conexiones.

Conexiones máximas por segundoEste 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 activadosMysqlMailscannerHttpdNamedNetworkSendmail

Herramientas y protocolos utilizadosWebmail hordeAntivirus ClamavProtocolo 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 dela 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"\\/"$timezone1btimeformat1=`sed -n 284p $ruta1`dateformat1=`sed -n 293p $ruta1`firstweekday1=`sed -n 326p $ruta1`

echo "lo que tiene el prefs.php"echo $lenguaje1echo $timezone1aecho $timezone1becho $timezone1echo $timeformat1echo $dateformat1echo $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 $lenguaje2echo $timezone2echo $timeformat2echo $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 $lenguajefor i in $ruta1dosed $lenguaje $i > $i.ndonemv $i.n $i

echo $timezonefor i in $ruta1dosed $timezone $i > $i.ndonemv $i.n $i

#echo $timeformatfor i in $ruta1dosed $timeformat $i > $i.ndonemv $i.n $i

#echo $dateformatfor i in $ruta1dosed $dateformat $i > $i.ndonemv $i.n $i

#echo $firstweekdayfor i in $ruta1dosed $firstweekday $i > $i.ndonemv $i.n $i

chown apache $ruta1chgrp 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 $initialapl1echo $showlastlo1echo $summaryrefresh1echo $uithemes1echo $showsidebar1echo $sidebarwidth1echo $menuview1echo $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 $initialapl2echo $showlastlo2echo $summaryrefresh2

28

echo $uithemes2echo $showsidebar2echo $sidebarwidth2echo $menuview2echo $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 $initialaplfor i in $ruta1dosed $initialapl $i > $i.ndonemv $i.n $i

echo $showlastlofor i in $ruta1dosed $showlastlo $i > $i.ndonemv $i.n $i

echo $summaryrefreshfor i in $ruta1dosed $summaryrefresh $i > $i.ndonemv $i.n $i

echo $uithemesfor i in $ruta1dosed $uithemes $i > $i.n

29

donemv $i.n $i

echo $showsidebarfor i in $ruta1dosed $showsidebar $i > $i.ndonemv $i.n $i

echo $sidebarwidthfor i in $ruta1dosed $sidebarwidth $i > $i.ndonemv $i.n $i

echo $menuviewfor i in $ruta1dosed $menuview $i > $i.ndonemv $i.n $i

echo $menurefreshfor i in $ruta1dosed $menurefresh $i > $i.ndonemv $i.n $i

mv -f $rutaimg $rutaimg".orig"cp -f $9 $rutaimg

chown apache $ruta1chgrp apache $ruta1Archivo: 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 $composepopup1echo $composecursor1echo $composecc1echo $composebcc1echo $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 $composepopup2echo $composecursor2echo $composecc2echo $composebcc2echo $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 $composepopupfor i in $ruta1

31

dosed $composepopup $i > $i.ndonemv $i.n $i

echo $composecursorfor i in $ruta1dosed $composecursor $i > $i.ndonemv $i.n $i

echo $composeccfor i in $ruta1dosed $composecc $i > $i.ndonemv $i.n $i

echo $composebccfor i in $ruta1dosed $composebcc $i > $i.ndonemv $i.n $i

echo $composespellcheckfor i in $ruta1dosed $composespellcheck $i > $i.ndonemv $i.n $i

#echo $dispositionrequestread#for i in $ruta1#do#sed $dispositionrequestread $i > $i.n#done#mv $i.n $i

chown apache $ruta1chgrp apache $ruta1Archivo: 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 $purgetrash1echo $purgetrashinterval1#echo $purgetrashkeep1echo $purgespam1echo $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 $purgetrash2echo $purgetrashinterval2#echo $purgetrashkeep2echo $purgespam2echo $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 $ruta1dosed $purgetrash $i > $i.ndonemv $i.n $i

echo $purgetrashintervalfor i in $ruta1dosed $purgetrashinterval $i > $i.ndonemv $i.n $i

#echo $purgetrashkeep#for i in $ruta1#do#sed $purgetrashkeep $i > $i.n#done#mv $i.n $i

echo $purgespamfor i in $ruta1dosed $purgespam $i > $i.ndonemv $i.n $i

echo $purgespamintervalfor i in $ruta1dosed $purgespaminterval $i > $i.ndonemv $i.n $i

chown apache $ruta1chgrp apache $ruta1Archivo: 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 $initialapl1echo $purgesentmail1echo $purgesentmailinterval1echo $deleattachmon1echo $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 $initialapl2echo $purgesentmail2echo $purgesentmailinterval2echo $deleattachmon2echo $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 $initialaplfor i in $ruta1dosed $initialapl $i > $i.ndonemv $i.n $i

35

echo $purgesentmailfor i in $ruta1dosed $purgesentmail $i > $i.ndonemv $i.n $i

echo $purgesentmailintervalfor i in $ruta1dosed $purgesentmailinterval $i > $i.ndonemv $i.n $i

echo $deleattachmonfor i in $ruta1dosed $deleattachmon $i > $i.ndonemv $i.n $i

echo $deleattachmonkeepfor i in $ruta1dosed $deleattachmonkeep $i > $i.ndonemv $i.n $i

chown apache $ruta1chgrp apache $ruta1Archivo: 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 $purgetrash1echo $purgetrashinterval1echo $purgespam1echo $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 $purgetrash2echo $purgetrashinterval2echo $purgespam2echo $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 $purgetrashfor i in $ruta1dosed $purgetrash $i > $i.ndonemv $i.n $i

echo $purgetrashintervalfor i in $ruta1dosed $purgetrashinterval $i > $i.ndonemv $i.n $i

echo $purgespam

37

for i in $ruta1dosed $purgespam $i > $i.ndonemv $i.n $i

echo $purgespamintervalfor i in $ruta1dosed $purgespaminterval $i > $i.ndonemv $i.n $i

chown apache $ruta1chgrp apache $ruta1Secció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 $cuentausuariothen 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"#fiArchivo: changequota_cmd.sh#!/bin/bash# \

ruta1="/etc/passwd"ruta2="/etc/group"

usergroup=$1letra=$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.txtif 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" fielse 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 fifiArchivo: 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 $nombreusuarioif test -z $nombreusuariothen 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" fifiArchivo: 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 $attachsizelimit1echo $attachcountlimit1

42

echo $replylimit1echo $dispositionrequestread1echo $domantenaince1echo $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 $attachsizelimit2echo $attachcountlimit2echo $replylimit2echo $dispositionrequestread2echo $domantenaince2echo $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 $attachsizelimitfor i in $ruta1dosed $attachsizelimit $i > $i.ndonemv $i.n $i

echo $attachcountlimitfor i in $ruta1dosed $attachcountlimit $i > $i.ndonemv $i.n $i

43

echo $replylimitfor i in $ruta1dosed $replylimit $i > $i.ndonemv $i.n $i

echo $dispositionrequestreadfor i in $ruta3dosed $dispositionrequestread $i > $i.ndonemv $i.n $i

echo $domantenaincefor i in $ruta2dosed $domantenaince $i > $i.ndonemv $i.n $i

echo $confirmantenaincefor i in $ruta2dosed $confirmantenaince $i > $i.ndonemv $i.n $i

chown apache $ruta1chgrp apache $ruta1chown apache $ruta2chgrp apache $ruta2chown apache $ruta3chgrp apache $ruta3Secció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 seencuentran los siguientes archivos.

Archivo: changegroup_cmd.sh#!/bin/bash

groupname=$1groupnamenew=$2

44

ruta1='/etc/group'ruta2='/etc/gshadow'

changgroup="s/$groupname/$groupnamenew/g"

echo $changgroupfor i in $ruta1dosed $changgroup $i > $i.ndonemv $i.n $i

echo $changgroupfor i in $ruta2dosed $changgroup $i > $i.ndonemv $i.n $iArchivo: changeuser_cmd.sh#!/bin/bash

username=$1usernamenew=$2nombreusua=$3apellidousua=$4apellidousua2=$5departamento=$6fecha=$7

if test $1 = $2then 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/$1else 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/$2fiArchivo: 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 1expect "assword:"send "$password\r"expect "assword:"send "$password\r"expect eofArchivo: groupadd_cmd.sh#!/bin/bash

groupadd $1Archivo: useradd_cmd.sh#!/bin/bash# \

useradd -g $2 -e $3 $1 -c $4' '$5' '$6

mkdir /home/$1/mailchmod go-rwx /home/$1/mail/

touch /home/$1/mail/Enviadostouch /home/$1/mail/Papeleratouch /home/$1/mail/Spamtouch /home/$1/mail/Borradortouch /home/$1/mail/inboxtouch /var/spool/mail/$1

chown -R $1 /home/$1chgrp -R $2 /home/$1

chown -R $1 /var/spool/mail/$1chgrp -R mail /var/spool/mail/$1

46

chmod go-r /home/$1/mail/Enviadoschmod go-r /home/$1/mail/Papelerachmod go-r /home/$1/mail/Spamchmod go-r /home/$1/mail/Borradorchmod go-r /home/$1/mail/inboxchmod go-r /var/spool/mail/$1Secció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=$1dns1=$2dns2=$3

ruta1="/var/www/html/sw_syscomsa/webpages/admin_servi_correo/scripts/datosconfig.txt"

touch /var/www/html/sw_syscomsa/webpages/admin_servi_correo/scripts/datosconfig.txt

echo "GATEWAY="$1 >> $ruta1echo "DNS1="$2";" >> $ruta1echo "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 $aArchivo: configdominio_cmd.sh#!/bin/sh

dominio=$1hostname=$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.txtecho "HOSTNAME="$2 >> /var/www/html/sw_syscomsa/webpages/admin_servi_correo/scripts/datosconfig.txtecho "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 $aArchivo: configred_cmd.sh#!/bin/sh

ipser=$1mask=$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.txtecho "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 $aArchivo: changeallconfig_cmd.sh#!/bin/sh

48

# rutas de los archivos a configurarruta1='/etc/sysconfig/network-scripts/ifcfg-eth0'ruta2='/var/www/html/sw_syscomsa/webpages/admin_servi_correo/scripts/datosconfig.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 rednetmask1=`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.confdominio1=`sed -n 1p $ruta3 | cut -c8-100`# captura de datos de lo que actualmente el /etc/sysconfig/networkhostname1=`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.confdnsextpri1=`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 actualmenteecho "lo q tiene la tarjeta"echo $netmask1echo $ipaddr1echo $gateway1echo $gate1echo $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/networkecho $hostname1echo $hosts1

#visualizacion de los datos de lo que tiene actualmente /var/named/chroot/etc/named.confecho $dnsextpri1echo $dnsextsec1

# captura de datos del archivo de configuracion datosconfig.txtnetmask2=`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.txtecho " "echo "lo nuevo a actualizar"echo $netmask2echo $ipaddr2echo $gateway2echo $gate2echo $dominio2echo $hostname2echo $hosts2echo $ips2

echo $dnsextpri2echo $dnsextsec2

#asignacion de variables para el reemplazo de datos posteriormentenetmask="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/network-scripts/ifcfg-eth0

echo " "echo "archivo /etc/sysconfig/network-scripts/ifcfg-eth0"echo $netmaskfor i in $ruta1dosed $netmask $i > $i.ndonemv $i.n $i

#busqueda y reemplazo del dato gateway en el archivo /etc/sysconfig/network-scripts/ifcfg-eth0echo " "echo $gatewayfor i in $ruta1dosed $gateway $i > $i.ndonemv $i.n $i

#busqueda y reemplazo del dato ipaddr en el archivo /etc/sysconfig/network-scripts/ifcfg-eth0echo " "echo $ipaddrfor i in $ruta1dosed $ipaddr $i > $i.ndonemv $i.n $i

#busqueda y reemplazo del dato dominio en el archivo /etc/resolv.confecho " "echo "archivo /etc/resolv.conf"echo $dominiofor i in $ruta3dosed $dominio $i > $i.n

51

donemv $i.n $i

#busqueda y reemplazo del dato hostname en el archivo /etc/resolv.confecho " "echo $ipsfor i in $ruta3dosed $ips $i > $i.ndonemv $i.n $i

#busqueda y reemplazo del dato hostname en el archivo /etc/sysconfig/networkecho " "echo "archivo /etc/sysconfig/network"echo $hostnamefor i in $ruta4dosed $hostname $i > $i.ndonemv $i.n $i

#busqueda y reemplazo del dato dominio en el archivo /etc/hostsecho "archivo /etc/hosts"echo $dominiofor i in $ruta8dosed $dominio $i > $i.ndonemv $i.n $i

#busqueda y reemplazo del dato hostname en el archivo /etc/hostsecho $hostsfor i in $ruta8dosed $hosts $i > $i.ndonemv $i.n $i

#busqueda y reemplazo del dato ipaddress en el archivo /etc/hostsecho $ipsfor i in $ruta8dosed $ips $i > $i.n

52

donemv $i.n $i

#busqueda y reemplazo del dato dominio en el archivo /etc/mail/accessecho "archivo /etc/mail/access"echo $dominiofor i in $ruta9dosed $dominio $i > $i.ndonemv $i.n $i

#busqueda y reemplazo del dato hostname en el archivo /etc/mail/accessecho $hostsfor i in $ruta9dosed $hosts $i > $i.ndonemv $i.n $i

#busqueda y reemplazo del dato ipaddress en el archivo /etc/mail/accessecho $ipsfor i in $ruta9dosed $ips $i > $i.ndonemv $i.n $i

#busqueda y reemplazo del dato dominio en el archivo /etc/mail/local-host-namesecho "archivo /etc/mail/local-host-names"echo $dominiofor i in $ruta10dosed $dominio $i > $i.ndonemv $i.n $i

#busqueda y reemplazo del dato hostname en el archivo /etc/mail/local-host-namesecho $hostsfor i in $ruta10dosed $hosts $i > $i.ndonemv $i.n $i

53

#busqueda y reemplazo del dato hostname en el archivo /etc/aliasesecho "archivo /etc/aliases"echo $hostsfor i in $ruta11dosed $hosts $i > $i.ndonemv $i.n $i

#busqueda y reemplazo del dato dominio en el archivo /etc/mail/relay-domains

echo "archivo /etc/mail/relay-domains"echo $dominiofor i in $ruta12dosed $dominio $i > $i.ndonemv $i.n $i

#busqueda y reemplazo del dato hostname en el archivo /etc/mail/relay-domainsecho $hostsfor i in $ruta12dosed $hosts $i > $i.ndonemv $i.n $i

#busqueda y reemplazo del dato dominio en el archivo /etc/mail/sendmail.mcecho "archivo /etc/mail/sendmail.mc"echo $dominiofor i in $ruta13dosed $dominio $i > $i.ndonemv $i.n $i

#copia de lineas del named.confl1=`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.confecho "archivo /var/named/chroot/etc/named.conf"echo $dominiofor i in $ruta5dosed $dominio $i > $i.ndonemv $i.n $ichmod go+rx $i

#busqueda y reemplazo del dato dns externo primario en el archivo /var/named/chroot/etc/named.confecho $dnsextprifor i in $ruta5dosed $dnsextpri $i > $i.ndonemv $i.n $ichmod go+rx $i

#busqueda y reemplazo del dato dns externo secundario en el archivo /var/named/chroot/etc/named.confecho $dnsextsecfor i in $ruta5dosed $dnsextsec $i > $i.ndonemv $i.n $ichmod go+rx $i

echo $l1 >> /var/named/chroot/etc/named.confecho $l2 >> /var/named/chroot/etc/named.confecho $l3 >> /var/named/chroot/etc/named.confecho $l4 >> /var/named/chroot/etc/named.confecho $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 nuevocp /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 $dominiofor i in $ruta6dosed $dominio $i > $i.ndonemv $i.n $ichmod 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 $hostsfor i in $ruta6dosed $hosts $i > $i.ndonemv $i.n $ichmod 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 $ipsfor i in $ruta6dosed $ips $i > $i.ndonemv $i.n $ichmod 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 $ipsfor i in $ruta6adosed $ips $i > $i.ndonemv $i.n $ichmod 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"."$ipocteto1aipnormal1=$ipocteto1a"."$ipocteto1b"."$ipocteto1c

echo $ipocteto1aecho $ipocteto1becho $ipocteto1cecho $ipinversa1echo $ipnormal1

# visualizacion de los datos del archivo de configuracion datosconfig.txtecho "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"."$ipocteto2aipnormal2=$ipocteto2a"."$ipocteto2b"."$ipocteto2c

echo $ipocteto2aecho $ipocteto2becho $ipocteto2cecho $ipinversa2echo $ipnormal2

#asignacion de variables para el reemplazo de datos posteriormenteipinversa="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/namedecho $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/namedecho $ipoctetodfor i in $ruta7adosed $ipoctetod $i > $i.ndonemv $i.n $ichmod 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 $dominiofor i in $ruta14dosed $dominio $i > $i.ndonemv $i.n $ichmod go-x $ichgrp apache $ichown 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 $ipsfor i in $ruta14dosed $ips $i > $i.ndonemv $i.n $ichmod go-x $ichgrp apache $ichown 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 laruta /etc/httpd/conf/echo $dominiofor i in $ruta15dosed $dominio $i > $i.ndonemv $i.n $i

59

chmod go-x $i

#busqueda y reemplazo del dato dominio en el archivo del httpd.conf en el httpd en laruta /etc/httpd/conf/echo $ipsfor i in $ruta15dosed $ips $i > $i.ndonemv $i.n $ichmod 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 $dominiofor i in $ruta16dosed $dominio $i > $i.ndonemv $i.n $ichmod go-x $i

#busqueda y reemplazo del dato dominio en el archivo /etc/dhcpd.confecho "archivo /etc/dhcpd.conf"echo $dominiofor i in $ruta17dosed $dominio $i > $i.ndonemv $i.n $i

#busqueda y reemplazo del dato ips en el archivo /etc/dhcpd.confecho $ipsfor i in $ruta17dosed $ips $i > $i.ndonemv $i.n $i

60

#busqueda y reemplazo del dato gateway en el archivo /etc/dhcpd.confecho $gatefor i in $ruta17dosed $gate $i > $i.ndonemv $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"."$ipoct3aipnor3=$ipoct3a"."$ipoct3b"."$ipoct3c

echo $ipoct3aecho $ipoct3becho $ipoct3cecho $ipinv3echo $ipnor3

ipnormal="s/$ipnor3/$ipnormal2/g"

#busqueda y reemplazo del dato subnet en el archivo /etc/dhcpd.confecho $ipnormalfor i in $ruta17dosed $ipnormal $i > $i.ndonemv $i.n $iArchivo: restartservices_cmd.sh!/bin/sh# rutas de los archivos a configurar

/etc/rc.d/init.d/network restartecho "Servicio NETWORK reiniciado"

/etc/rc.d/init.d/sendmail restartecho " "echo "Servicio SENDMAIL reiniciado"

#/etc/rc.d/init.d/MailScanner restart#echo " "#echo "Servicio MAILSCANNER reiniciado"

61

/etc/rc.d/init.d/named restartecho " "echo "Servicio NAMED reiniciado"

/etc/rc.d/init.d/dhcpd restartecho " "echo "Servicio DHCPD reiniciado"

/etc/rc.d/init.d/httpd reloadecho " "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.txt"copiaar="/var/www/html/sw_syscomsa/webpages/seguridades/scripts/usuarioscopiados.txt"ruta2="/home"ruta3="/var/spool/mail"ruta4="/etc/passwd"ruta5="/etc/crontab"

touch /var/www/html/sw_syscomsa/webpages/seguridades/scripts/copiasmultiples.txttouch /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=$2hora=$3dias=$4mes=$5diasem=$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 restartelse 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=$2hora=$3dias=$4mes=$5diasem=$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 fifiArchivo: 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/usuarioscopiados.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 restartelse 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 fifiArchivo: 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 $nombreusuariothenecho "La Cuenta de Usuario no Existe"elsecd /backupmails/; tar -xzf /backupmails/$1""backupmail.tar.gzif test $2 = "ALL"thenecho "Se va a proceder a la restauracion"# cd /backupmails/; tar -xvzf /backupmails/$1""backupmail.tar.gzcp -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"thencp -frp /backupmails/home/$1/mail/inbox $ruta2/$1/mail/inboxcp -frp /backupmails/var/spool/mail/$1 $ruta3/echo "Realizado Exitosamente la restauracion de la carpeta INBOX"elseif test $2 = "ENV"thencp -frp /backupmails/home/$1/mail/Enviados $ruta2/$1/mail/Enviadoscp -frp /backupmails/var/spool/mail/$1 $ruta3/echo "Realizado Exitosamente la restauracion de la carpeta Enviados"elseif test $2 = "BOR"thencp -frp /backupmails/home/$1/mail/Borrador $ruta2/$1/mail/Borradorcp -frp /backupmails/var/spool/mail/$1 $ruta3/echo "Realizado Exitosamente la restauracion de la carpeta Borrador"elseif test $2 = "PAP"thencp -frp /backupmails/home/$1/mail/Papelera $ruta2/$1/mail/Papeleracp -frp /backupmails/var/spool/mail/$1 $ruta3/echo "Realizado Exitosamente la restauracion de la carpeta Papelera"elseif test $2 = "SPA"thencp -frp /backupmails/home/$1/mail/Spam $ruta2/$1/mail/Spamcp -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 NUMEROSfunction 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 isNumfunction 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 cadenafunction 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 blancofunction 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 FORMULARIOfunction 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 NUMEROSfunction 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 isNumfunction 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 cadenafunction 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 blancofunction validavacio(h) {

if( vacio(h) == false ) {

return false} else {

return true}

}

75

//VALIDA TODOS LOS CAMPOS DEL FORMULARIOfunction 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 cadenafunction 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 blancofunction 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 FORMULARIOfunction 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;&#x0438;)','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;&#x043a;&#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;&#x043a;&#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_cmd.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 NUMEROSfunction 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 isNumfunction 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 cadenafunction 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 blancofunction 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 cadenafunction vacio3(a){

var caract_extra=" "var ubicacionvar enter = " "var caracteres = " ÑñáéíóúÁÉÍÓÚàèìòùÀÈÌÒÙºª!|@·#$~

%½¬&{([)]=}?'¡~¿+]*`[^'·;,}çÇ" + String.fromCharCode(13) + enter + caract_extravar contador = 0for (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 FORMULARIOfunction 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.jpg//'/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 NUMEROSfunction 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 isNumfunction 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 cadenafunction 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 blancofunction 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 FORMULARIOfunction 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 NUMEROSfunction 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 isNumfunction 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 cadenafunction 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 blancofunction 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 FORMULARIOfunction 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 datosadjuntos por mensajes', 'msn5'));

$form->addField(new PopupField('Máximo Tamaño de mensajes reenviados ocontestados:', '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/parametroscuenta_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 NUMEROSfunction 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 isNumfunction 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 IPfunction 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 cadenafunction vacio(o){

if (o == "") {

alert("ERROR: No puede dejar este campo vacio")return false

}

var caract_extra=" "var ubicacionvar enter = " "var caracteres = "1234567890

ABCDEFGHIJKLMNOPQRSTUVWXYZÑáéíóúÁÉÍÓÚàèìòùÀÈÌÒÙºª\!|@·#$~%½¬&/{/([)]=}?\'¡~¿+]*`[^'_-·;,}çÇ" + String.fromCharCode(13) + enter + caract_extra

var contador = 0for (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 blancofunction 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 FORMULARIOfunction 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/changequotauser_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 NUMEROSfunction 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 isNumfunction 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 cadenafunction vacio(o){

if (o == "") {

alert("ERROR: No puede dejar este campo vacio")return false

}

var caract_extra=" "var ubicacionvar enter = " "var caracteres = "1234567890

ABCDEFGHIJKLMNOPQRSTUVWXYZÑáéíóúÁÉÍÓÚàèìòùÀÈÌÒÙºª\!|@·#$~%½¬&/{/([)]=}?\'¡~¿+]*`[^'_-·;,}çÇ" + String.fromCharCode(13) + enter + caract_extra

var contador = 0for (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 blancofunction 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 FORMULARIOfunction 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/changequotauser_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/changequotagroup_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 cadenafunction vacio(o){

if (o == "") {

alert("ERROR: No puede dejar este campo vacio")return false

}

var caract_extra=" "var ubicacionvar enter = " "var caracteres = "1234567890 ñáéíóúÁÉÍÓÚàèìòùÀÈÌÒÙºª\!|@·#$~%½¬&/{/

([)]=}?\'¡~¿+]*`[^'_-·;,}çÇ" + String.fromCharCode(13) + enter + caract_extravar contador = 0for (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 blancofunction 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 FORMULARIOfunction 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/controlaccusuario_cmd.sh ".$form->getValue('user')." ".$form->getValue('accion');

#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('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 IPfunction 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 cadenafunction vacio(o){

if (o == "") {

alert("ERROR: No puede dejar el o los campos vacios")return false

}

var caract_extra=" "var ubicacionvar enter = " "var caracteres = "1234567890

ABCDEFGHIJKLMNOPQRSTUVWXYZÑñáéíóúÁÉÍÓÚàèìòùÀÈÌÒÙºª\!|@·#$~%½¬&/{/([)]=}?\'¡~¿+]*`[^'_-·;,.}çÇ" + String.fromCharCode(13) + enter + caract_extra

var contador = 0for (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 blancofunction 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 cadenafunction 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 blancofunction 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 cadenafunction 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 ubicacionvar enter = " "var caracteres =

"ABCDEFGHIJKLMNOPQRSTUVWXYZÑñáéíóúÁÉÍÓÚàèìòùÀÈÌÒÙºª\!|@·#$~%½¬&/{/([)]=}?\'¡~¿+]*`[^'_-·;,}çÇ" + String.fromCharCode(13) + enter + caract_extra

var contador = 0for (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 blancofunction 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 FORMULARIOfunction 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/>";

if ($status == 0) {

echo "<br/>".$tmp."<br/>"; # echo "Definicion de cuotas realizado Exitosamente<br/>";

$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 cadenafunction vacio(o){

if (o == "") {

alert("ERROR: No puede dejar el o los campos vacios")return false

}

151

var caract_extra=" "var ubicacionvar enter = " "var caracteres = "1234567890

ABCDEFGHIJKLMNOPQRSTUVWXYZÑñáéíóúÁÉÍÓÚàèìòùÀÈÌÒÙºª\!|@·#$~%½¬&/{/([)]=}?\'¡~¿+]*`[^'_-·;,}çÇ" + String.fromCharCode(13) + enter + caract_extra

var contador = 0for (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 blancofunction 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 ubicacionvar enter = " "var caracteres = "1234567890 àèìòùÀÈÌÒÙºª\!|@·#$~%½¬&/{/

([)]=}?\'¡~¿+]*`[^'_-·;,}çÇ" + String.fromCharCode(13) + enter + caract_extravar contador = 0for (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 blancofunction 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 passwordfunction vaciopass(p){

if (p == "") {

alert("ERROR: No puede dejar el o los campos vacios")return false

}

var caract_extra=" "var ubicacionvar enter = " "var caracteres = ".ºª\!|·#$~%½¬&/{/([)]=}?\'¡~¿+]*`[^'_-

·;,}çÇÑñáéíóúÁÉÍÓÚàèìòùÀÈÌÒÙ" + String.fromCharCode(13) + enter + caract_extra

var contador = 0for (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 blancofunction 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 FORMULARIOfunction 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_cmd.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 ubicacionvar enter = " "var caracteres = "1234567890

ABCDEFGHIJKLMNOPQRSTUVWXYZÑñáéíóúÁÉÍÓÚàèìòùÀÈÌÒÙºª\!|@·#$~%½¬&/{/([)]=}?\'¡~¿+]*`[^'_-·;,}çÇ" + String.fromCharCode(13) + enter + caract_extra

var contador = 0for (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 blancofunction 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 FORMULARIOfunction 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_cmd.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 cadenafunction vacio(o){

if (o == "") {

alert("ERROR: No puede dejar este campo vacio")return false

}

var caract_extra=""

169

var ubicacionvar enter = ""var caracteres = "ÑñáéíóúÁÉÍÓÚàèìòùÀÈÌÒÙºª!|@·#$~

%½¬&{([)]=}?'¡~¿+]*`[^'·;,}çÇ" + String.fromCharCode(13) + enter + caract_extravar contador = 0for (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 blancofunction 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 FORMULARIOfunction 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_usuarios'));

$form->addField(new TextField('Ruta del Archivo a ejecutar:','exa',35,2,15000));

174

$form->addField(new LabelFieldmensaje('El formato de las lineas del archivopara 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 cadenafunction vacio(o){

if (o == "") {

alert("ERROR: No puede dejar este campo vacio")return false

}

var caract_extra=" "

175

var ubicacionvar enter = " "var caracteres = "1234567890

ABCDEFGHIJKLMNOPQRSTUVWXYZÑñáéíóúÁÉÍÓÚàèìòùÀÈÌÒÙºª\!|@·#$~%½¬&/{/([)]=}?\'¡~¿+]*`[^'_-·;,}çÇ" + String.fromCharCode(13) + enter + caract_extra

var contador = 0for (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 blancofunction 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 FORMULARIOfunction 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 cadenafunction vacio(o){

if (o == "") {

alert("ERROR: No puede dejar el o los campos vacios")return false

}

var caract_extra=" "var ubicacionvar enter = " "var caracteres = "1234567890

ABCDEFGHIJKLMNOPQRSTUVWXYZÑñáéíóúÁÉÍÓÚàèìòùÀÈÌÒÙºª\!|@·#$~%½¬&/{/([)]=}?\'¡~¿+]*`[^'_-·;,}çÇ" + String.fromCharCode(13) + enter + caract_extra

var contador = 0for (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 blancofunction 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 maternofunction vacio2(q){

if (q == "") {

alert("ERROR: No puede dejar el o los campos vacios")return false

}

var caract_extra=" "var ubicacionvar enter = " "var caracteres = "1234567890 àèìòùÀÈÌÒÙºª\!|@·#$~%½¬&/{/

([)]=}?\'¡~¿+]*`[^'_-·;,}çÇ" + String.fromCharCode(13) + enter + caract_extra

182

var contador = 0for (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 blancofunction 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 passwordfunction vaciopass(p){

if (p == "") {

alert("ERROR: No puede dejar el o los campos vacios")return false

}

183

var caract_extra=" "var ubicacionvar enter = " "var caracteres = "ÑñáéíóúÁÉÍÓÚàèìòùÀÈÌÒÙºª\!|@·#$~%½¬&/{/

([)]=}?\'¡~¿+]*`[^'_-·;,}çÇ " + String.fromCharCode(13) + enter + caract_extravar contador = 0for (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 blancofunction 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 FORMULARIOfunction 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 cadenafunction vacio(o){

if (o == "") {

alert("ERROR: No puede dejar este campo vacio")return false

}

var caract_extra=" "var ubicacionvar enter = " "var caracteres = "1234567890

ABCDEFGHIJKLMNOPQRSTUVWXYZÑñáéíóúÁÉÍÓÚàèìòùÀÈÌÒÙºª\!|@·#$~%½¬&/{/([)]=}?\'¡~¿+]*`[^'_-·;,}çÇ" + String.fromCharCode(13) + enter + caract_extra

var contador = 0for (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 blancofunction 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 FORMULARIOfunction 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 cadenafunction vacio(o){

if (o == "") {

alert("ERROR: No puede dejar este campo vacio")return false

}

var caract_extra=" "var ubicacionvar enter = " "var caracteres = "1234567890

ABCDEFGHIJKLMNOPQRSTUVWXYZÑñáéíóúÁÉÍÓÚàèìòùÀÈÌÒÙºª\!|@·#$~%½¬&/{/([)]=}?\'¡~¿+]*`[^'_-·;,}çÇ" + String.fromCharCode(13) + enter + caract_extra

var contador = 0for (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 blancofunction 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 FORMULARIOfunction 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 cadenafunction vacio(o){

if (o == "") {

alert("ERROR: No puede dejar este campo vacio")return false

202

}

var caract_extra=" "var ubicacionvar enter = " "var caracteres = "1234567890

ABCDEFGHIJKLMNOPQRSTUVWXYZÑñáéíóúÁÉÍÓÚàèìòùÀÈÌÒÙºª\!|@·#$~%½¬&/{/([)]=}?\'¡~¿+]*`[^'_-·;,}çÇ" + String.fromCharCode(13) + enter + caract_extra

var contador = 0for (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 blancofunction 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 cadenafunction vacio(o){

if (o == "") {

alert("ERROR: No puede dejar este campo vacio")return false

}

var caract_extra=" "var ubicacionvar enter = " "var caracteres = "1234567890

ABCDEFGHIJKLMNOPQRSTUVWXYZÑñáéíóúÁÉÍÓÚàèìòùÀÈÌÒÙºª\!|@·#$~%½¬&/{/([)]=}?\'¡~¿+]*`[^'_-·;,}çÇ" + String.fromCharCode(13) + enter + caract_extra

var contador = 0for (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 blancofunction 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 FORMULARIOfunction 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 cadenafunction vacio(o){

if (o == "") {

alert("ERROR: No puede dejar este campo vacio")return false

}

var caract_extra=" "var ubicacionvar enter = " "var caracteres = "1234567890

ABCDEFGHIJKLMNOPQRSTUVWXYZÑñáéíóúÁÉÍÓÚàèìòùÀÈÌÒÙºª\!|@·#$~%½¬&/{/([)]=}?\'¡~¿+]*`[^'_-·;,}çÇ" + String.fromCharCode(13) + enter + caract_extra

var contador = 0for (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 blancofunction 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 FORMULARIOfunction 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 cadenafunction vacio(o){

if (o == "") {

alert("ERROR: No puede dejar este campo vacio")return false

224

}

var caract_extra=" "var ubicacionvar enter = " "var caracteres = "ÑñáéíóúÁÉÍÓÚàèìòùÀÈÌÒÙºª\!|·#$~%½¬&/{/

([)]=}?\'¡~¿+]*`[^'_-·;,}çÇ" + String.fromCharCode(13) + enter + caract_extravar contador = 0for (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 blancofunction 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 FORMULARIOfunction 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 cadenafunction 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 blancofunction 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 FORMULARIOfunction 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_cmd.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 cadenafunction 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 ubicacionvar enter = " "

238

var caracteres = "ABCDEFGHIJKLMNOPQRSTUVWXYZÑñáéíóúÁÉÍÓÚàèìòùÀÈÌÒÙºª\!|@·#$~%½¬&/{/([)]=}?\'¡~¿+]*`[^'_·;çÇ" + String.fromCharCode(13) + enter + caract_extra

var contador = 0for (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 blancofunction 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 cadenafunction vacio(o){

if (o == "") {

alert("ERROR: No puede dejar este campo vacio")return false

239

}

var caract_extra=" "var ubicacionvar enter = " "var caracteres = "123456789

ABCDEFGHIJKLMNOPQRSTUVWXYZÑñáéíóúÁÉÍÓÚàèìòùÀÈÌÒÙºª\!|@·#$~%½¬&/{/([)]=}?\'¡~¿+]*`[^'_·;}çÇ-," + String.fromCharCode(13) + enter + caract_extra

var contador = 0for (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 blancofunction 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 blancofunction 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 FORMULARIOfunction 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 NUMEROSfunction 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 isNumfunction 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 cadenafunction 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 blancofunction 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 FORMULARIOfunction 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 encuentranlos siguientes archivos.

Archivo: pw_config_red.php<html><head> <title>Configuración de Red</title><script>// FUNCION PARA VALIDAR IPfunction 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 FORMULARIOfunction 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.sh ".$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 IPfunction 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 IPfunction 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 FORMULARIOfunction 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.sh ".$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 IPfunction 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 cadenafunction vacio(o){

if (o == "") {

alert("ERROR: No puede dejar este campo vacio")return false

}

var caract_extra=" "var ubicacionvar enter = " "var caracteres =

".ABCDEFGHIJKLMNOPQRSTUVWXYZÑáéíóúÁÉÍÓÚàèìòùÀÈÌÒÙºª\!|@·#$~%½¬&/{/([)]=}?\'¡~¿+]*`[^'_-·;,}çÇ" + String.fromCharCode(13) + enter + caract_extra

var contador = 0for (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 blancofunction 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 cadenafunction 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 ubicacionvar enter = " "var caracteres =

"ABCDEFGHIJKLMNOPQRSTUVWXYZÑñáéíóúÁÉÍÓÚàèìòùÀÈÌÒÙ" + String.fromCharCode(13) + enter + caract_extra

var contador = 0for (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 blancofunction 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 FORMULARIOfunction 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_cmd.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_cmd.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", "2008-05-18 00:28:37", "1");INSERT INTO opcion_vinculo VALUES("4", "Seguridades", "0", "0", "1", "2008-05-18 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-05-18 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-05-18 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", "2008-05-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 enCorreo (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 enCorreo (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-05-22 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><?phprequire "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<?PHPdefine (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

}?>