|
unit globales ;
|
|
|
|
{$mode objfpc}{$H+}
|
|
|
|
interface
|
|
uses
|
|
unix,Classes, SysUtils,process,IniFiles;
|
|
|
|
const
|
|
PUERTO_ROOT:integer=37999;
|
|
PUERTO_USUARIO:integer=38000;
|
|
PUERTO_VNC:integer=5988;
|
|
var
|
|
fdirpersonal:string;
|
|
fdirrecibidos:string;
|
|
fusuario:string;
|
|
fenviar:string;
|
|
fapagando:boolean=false;
|
|
fmipuerto:integer;
|
|
|
|
|
|
g_maquina_profe:boolean=false;
|
|
g_finalizar:boolean=false;
|
|
g_dirmensaje:string;
|
|
|
|
procedure MatarAplicacion(aplica:String);
|
|
procedure Ejecutar1 (comando:string);
|
|
function CrearArchivoMensaje(TipoMensaje,AsuntoMensaje,ContenidoMensaje:string; ArchivoMensaje:String='0'):boolean;
|
|
function HallarDatos(Cmd:string):String;
|
|
function compruebaPasswordRoot(password:String):Boolean;
|
|
function EncriptaXOR(cadena,clave : string) : string;
|
|
Function quitaEspacios(texto:String):String;
|
|
Function poneEspacios(texto:String):String;
|
|
implementation
|
|
Function quitaEspacios(texto:String):String;
|
|
begin
|
|
result:=StringReplace(texto,' ','&#', [rfReplaceAll])
|
|
end;
|
|
Function poneEspacios(texto:String):String;
|
|
begin
|
|
result:=StringReplace(texto,'&#',' ', [rfReplaceAll])
|
|
end;
|
|
function EncriptaXOR(cadena,clave : string) : string;
|
|
var
|
|
i : integer;
|
|
begin
|
|
result:='';
|
|
for i:=1 to length(cadena) do
|
|
result:=result+chr(ord(cadena[i]) xor ord(clave[(i mod length(clave))+1]));
|
|
end;
|
|
|
|
function compruebaPasswordRoot(password:String):Boolean;
|
|
const
|
|
GENERA_PASSWORD:STRING=' mkpasswd -H md5 %s -S %s ';
|
|
HALLA_SALT:String='cat /etc/shadow | grep "^root:" | head -n 1| cut -f3 -d"$"';
|
|
HALLA_PASSWORD:String='cat /etc/shadow | grep "^root:" | cut -f4 -d"$" |cut -f1 -d":"';
|
|
HALLA_NUMERO:String='cat /etc/shadow | grep "^root:" | cut -f2 -d"$"';
|
|
var
|
|
clavecorrecta:Boolean;
|
|
passwordRoot:String;
|
|
passwordGenerado:String;
|
|
salt:String;
|
|
orden:String;
|
|
numero:String;
|
|
ordenpasw:String;
|
|
begin
|
|
try
|
|
clavecorrecta:=false;
|
|
passwordRoot:=HallarDatos(HALLA_PASSWORD);
|
|
salt:=HallarDatos(HALLA_SALT);
|
|
numero:=HallarDatos(HALLA_NUMERO);
|
|
ordenpasw:='perl -e '+ QuotedStr('print crypt("%s","\$%s\$%s"), "\n"');
|
|
ordenpasw:=Format(ordenpasw,[password,numero,salt]);
|
|
passwordRoot:='$'+numero+'$'+salt+'$'+passwordRoot;
|
|
orden:=Format(GENERA_PASSWORD,[password,salt]);
|
|
passwordGenerado:=HallarDatos(ordenpasw);
|
|
if passwordGenerado = passwordRoot then
|
|
clavecorrecta:=true
|
|
else
|
|
clavecorrecta:=false ;
|
|
Result:=clavecorrecta;
|
|
except
|
|
Result:=false;;
|
|
end;
|
|
end;
|
|
function HallarDatos(Cmd:string):String;
|
|
var
|
|
file1: TextFile;
|
|
s,t: ansistring;
|
|
n: longint;
|
|
j:integer;
|
|
begin
|
|
j:=0;
|
|
n:=popen(file1, Cmd, 'r');
|
|
if n=-1 then
|
|
begin
|
|
result:='';
|
|
//writeln('Error al hallar dato');
|
|
Exit;
|
|
end;
|
|
t:='';
|
|
while not eof(file1) do begin
|
|
Readln(File1,s);
|
|
t:=t+s+Chr(10);
|
|
inc(j);
|
|
end;
|
|
pclose(file1);
|
|
result := trim(t);
|
|
end;
|
|
procedure Ejecutar1 (comando:string);
|
|
begin;
|
|
unix.fpSystem(comando);
|
|
end;
|
|
procedure MatarAplicacion(aplica:String);
|
|
const
|
|
ORDEN_MATAR:STRING='killall %s & 2>>/dev/null';
|
|
|
|
var
|
|
orden:string;
|
|
begin
|
|
orden:=format(ORDEN_MATAR,[aplica]);
|
|
unix.fpSystem(orden);
|
|
end;
|
|
function CrearArchivoMensaje(TipoMensaje,AsuntoMensaje,ContenidoMensaje:string; ArchivoMensaje:String='0'):boolean;
|
|
const
|
|
NOMBRE_ALUMNO:string='Profesor';
|
|
var
|
|
Mifichero:TMemIniFile;
|
|
begin
|
|
result:=true;
|
|
if fileexists(g_dirmensaje) then DeleteFile(g_dirmensaje);
|
|
try
|
|
Mifichero := TMemIniFile.Create(g_dirmensaje);
|
|
with Mifichero do
|
|
begin
|
|
WriteString('MENSAJE','mensaje',ContenidoMensaje);
|
|
WriteString('MENSAJE','tipo', TipoMensaje);
|
|
WriteString('MENSAJE','titulo',AsuntoMensaje);
|
|
WriteString('MENSAJE','tiempo','30');
|
|
WriteString('MENSAJE','usuario',NOMBRE_ALUMNO);
|
|
WriteString('MENSAJE','archivo',ArchivoMensaje);
|
|
UpdateFile;
|
|
Free;
|
|
end;
|
|
sleep(2000);
|
|
except
|
|
begin
|
|
result:=false;
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
|
|
|
|
|
|
end.
|
|
|