Proyecto

General

Perfil

Descargar (4,48 KB) Estadísticas
| Rama: | Revisión:
23a384b9 Elisa
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.