sábado, 31 de enero de 2009

Comenzo el proyecto RSIF (hace un rato)

Buscando una excusa interesante para hacer un proyecto en ruby, me encontre con que no habia ninguna herramienta de sql injection automatizado (hecha por mi). De ahi que comenze con el proyecto Rsif. Rsif significa Rsif Sql Injection Framework, y es lo que dice (o mejor dicho, quiere ser :p ), y lo mas orientado posible a la participacion de cualquiera.
Si quieren mas informacion, pasense por el blog de rsif, que es el que motivo este articulo, en primer lugar

jueves, 29 de enero de 2009

El Ruby brilla y refleja: local_variables y demas

Para los que no saben, en el scope de cada metodo en ruby nacen las variables locales (y mueren si no "trascienden", pero eso es asunto de otro post), ruby tiene algunas variables predefinidas en toda funcion que pueden hacer cosas interesantes, una de ellas es "local_variables", la cual es un array de todas las variables locales definidas hasta el momento, se puede usar de la siguiente forma:


a = 1
b = 2
c = 3

local_variables.each do |vn|
print "#{vn}=#{eval(vn)}\n"
end



eso devuelve por la salida:


a=1
b=2
c=3


Las utilidades que pueden darle a esto les dejo a su imaginacion

lunes, 19 de enero de 2009

Todo mal, Diego Gomez es un clone, frakin cylon machine


La verdad que no me esperaba una tragedia como esta, al parecer, mi amigo y compañero de trabajo tiene sangre de mentira en las venas, una fuente ATX en lugar de corazón y un destello rojo en vez de alma :(, esto lo descubri buscando el blog de Dieguito por la web para encontrarme con que se vislumbran dos copias de este modelo de cylon:

* Diego Gomez "phantom", tiene un blog, es aficionado a la tecnología, la web, el software libre y el humor (usa debian)

* Diego Gomez "deck", tiene un blog, es aficionado a la tecnología, la web, el software libre y el humor (seguro usa debian también)

Para el que este desinformado acerca del tema de los cylon, solo les digo que fueron construidos por el hombre, se rebelaron, y se ven como y creen que son humanos :(

lunes, 12 de enero de 2009

Factorial super compacto en ruby

Posiblemente algunos conoceran la clasica implementacion del factorial en ruby, para los que no, la posteo aca:



def factorial(n)
if n > 1
# casos mayor que 1, se usa la formula recursiva
# n! = n*(n-1)!

n * factorial(n-1)
else
# casos 0 y 1, devuelve 1
1
end
end




Les presento una forma mas compacta de expresar el factorial



def factorial(n)
# el metodo inject del rango 2..n multiplica
# todos los elementos del conjunto tal como indica
# el bloque de codigo que se le esta pasando
(2..n).inject{|x,y| x*y}
end



A donde sea que vayan, lleven un interprete de ruby con ustedes

viernes, 2 de enero de 2009

Patch para VMware Server 1.0.8 en linux kernel 2.6.27

Termine una versión del patch para vmware bajo linux para kernels nuevos ( testeado en un fedora con kernel 2.6.27.9 ), básicamente este patch corrigen los problemas descriptos en este post

A las correcciones descriptas en el articulo anteriormente mencionado, se le suma la corrección de la deferencia de puntero nulo, la que producía el colapso del kernel (el de la maquina host :S ) y escupía este backtrace:

[<f99e76a1>] HostIF_SetFastClockRate+0x8d/0x148 [vmmon]
[<f99efd65>] Vmx86_SetHostClockRate+0xad/0xd5 [vmmon]
[<f99e5a87>] LinuxDriver_Ioctl+0x4c6/0xdcd [vmmon]
[<c0118694>] kmap_atomic_prot+0x102/0x137
[<c0395846>] _spin_unlock+0x5/0x1c
[<c017bd62>] mnt_drop_write+0x64/0xdd
[<c01f0680>] rb_insert_color+0x4c/0xad
[<c013260a>] enqueue_hrtimer+0xc9/0xd4
[<c0132ba5>] hrtimer_start+0xf9/0x129
[<c011a13c>] hrtick_start_fair+0xf7/0x123
[<c0129e78>] group_send_sig_info+0x12/0x56
[<c0129eed>] kill_pid_info+0x31/0x54
[<c012a44e>] sys_kill+0x73/0x13e
[<c0172b53...


Pasaba que en el archivo linux/hostif.c, en la funcion HostIF_SetFastClockRate, aproximadamente por la linea 3480, habia algo asi:



res = filp->f_op->ioctl(filp->f_dentry->d_inode, filp, RTC_PIE_ON, 0);
if (!cap) {
cap_lower(current->cap_effective, CAP_SYS_RESOURCE);
}



Y aparentemente, en ocasiones, filp->f_op->ioctl (que es un puntero a una función, para los mas desprevenidos), tenia el valor de 0, es decir un puntero a nada, para solventar esto, simplemente cambie ese bloque de codigo por esto:



// mejor verificamos si ioctl es un puntero nulo antes
// de deferenciarlo como puntero funcion
if (filp->f_op->ioctl == 0) {
// si el puntero es nulo, hacemos de cuenta que
// la función devolvió status de error
res = -1;
} else {
// ojo, en esta seccion de esta deferencia ioctl como puntero
// que bueno que ya se verifico
res = filp->f_op->ioctl(filp->f_dentry->d_inode, filp, RTC_PIE_ON, 0);
if (!cap) {
cap_lower(current->cap_effective, CAP_SYS_RESOURCE);
}
}



Y con eso se chequeo el puntero antes de deferenciarlo

Uh, casi me olvidaba, aca esta el patch, tengan en cuenta que es para la version 1.0.8-126538 (no se descarata que funcione en otras versiones de vmware, pero yo solo lo probe con esa), por favor, si lo prueban comenten a este articulo que tal les fue, si hubo problemas, para que version de vmware y linux (kernel) instalaron el patch, etc...

jueves, 1 de enero de 2009