jueves, 17 de julio de 2008

Mi primer parche: unrar

El otro día cuando estuve retocando algunas cosillas de las fuentes del unrar (aunque al final no me sirvió para nada) encontré un bug en el código, y se lo he mandado esta tarde, y lo mejor de todo es que me han respondido!!:
Date: Thu, 17 Jul 2008 23:52:33 +0600
From: Eugene Roshal
To: "elparaito"
Subject: Re: Bug in rdwrfn.cpp

Hello,

We'll change it. Thank you.

Eugene

> I have found a little bug in last source code of unrarsrc-3.8.2.
> It may not apply ever in current version. But it arose when I was making
> some changes in other parts of source code.
> It is about applying CRC to a block using the size told to read, but not the
> actually read.

> A patch is attached.

> diff -Naur unrar.orig/rdwrfn.cpp unrar/rdwrfn.cpp
> --- unrar.orig/rdwrfn.cpp 2008-06-15 12:42:13.000000000 +0000
> +++ unrar/rdwrfn.cpp 2008-07-17 16:58:40.000000000 +0000
> @@ -59,7 +59,7 @@
> RetCode=SrcFile->Read(ReadAddr,ReadSize);
> FileHeader *hd=SubHead!=NULL ? SubHead:&SrcArc->NewLhd;
> if (hd->Flags & LHD_SPLIT_AFTER)
> - PackedCRC=CRC(PackedCRC,ReadAddr,ReadSize);
> + PackedCRC=CRC(PackedCRC,ReadAddr,RetCode);
> }
> CurUnpRead+=RetCode;
> TotalRead+=RetCode;

El fallo ocurria cuando se pide leer de un archivo un bloque de cierto tamaño, que puede que lo lea o lea menos, pero luego al procesarlo suponían que lo leía entero en vez de lo que realmente había leido.

De todas formas parece que lo normal es que lo lea todo, pero nunca se sabe... Por ejemplo en mi modificación no pasaba eso, y por culpa del bug luego acababa fallando el CRC.

Ya lo se, es una estupidez, pero me hace gracia.

Leer más…

Truco: Que hacer cuando estás trabajando en /tmp y se va la luz

Como realmente los archivos de /tmp se borran al arrancar, basta con arrancar el sistema sin que lanze nada y mover los archivos a otro sitio:

  • Al arrancar el GRUB, se selecciona que se use para arrancar y se pulsa "e" (edit).
  • Dentro de las distintas líneas seleccionamos la línea del kernel, y pulsamos de nuevo "e" (edit).
  • Añadimos al final " init=/bin/bash" o escrito con teclado español "init¡-bin-bash", y pulsamos "b" (boot).
  • Cuando termine de cargarse el kernel tendremos acceso al sistema como administrador. Montamos las partición de tmp, si tenía la suya propia, y movemos los archivos de nuestro interés a otro sitio, como el directorio del usuario.
  • Para seguir con el arranque normal, dejamos todo como estaba y ejecutamos:
    # exec /sbin/init
  • Y a seguir enredando

Evidentemente este truco también se puede utilizar si se pierde el password de root, o para entrar en un equipo por toda la cara, por lo que a continuación presento:

Contramedidas

Para evitar que puedan entrar en nuestro equipo, sin necesidad de al menos un liveCD, que siempre hay alguna forma, basta con añadirle una clave de acceso a los menues del GRUB:

$ /usr/sbin/grub-md5-crypt
Password:
Retype password:
$1$JjsRb$yq4pULUpy72WgmiyIY1t40
$ sudo vi /boot/grub/menu.lst
y añadimos en las opciones globales:
password --md5 $1$JjsRb$yq4pULUpy72WgmiyIY1t40

Entrada dedicada con cariño a Juanlu.

Leer más…

Zattoo en Etch

Parece que ya va siendo hora de pasarse a Lenny, pero mientras tanto ya he conseguido instalar Zattoo. Aunque el paquete que hay en la web se supone que es para Etch falla una dependecia con dbus-x11. Para solucionarlo solo hace falta hacer un backport del paquete dbus:

  • Instalar algunas herramientas:
    $ sudo aptitude install build-essential fakeroot
  • Bajamos el paquete y lo descomprimimos:
    $ cd /tmp
    $ wget http://ftp.de.debian.org/debian/pool/main/d/dbus/dbus_1.2.1{.orig.tar.gz,-2.diff.gz,-2.dsc}
    $ dpkg-source -x dbus_1.2.1-2.dsc
    $ cd dbus-1.2.1
  • Comprobamos si faltan algunas dependencia, y según las que falten las instalamos:
    $ dpkg-checkbuilddeps
    $ sudo aptitude install cdbs libselinux1-dev ...
  • Compilamos el paquete:
    $ dpkg-buildpackage -uc -b -rfakeroot
    $ cd ..
  • Y lo instalamos:
    $ sudo dpkg -i dbus_1.2.1-2_i386.deb dbus-x11_1.2.1-2_i386.deb libdbus-1-3_1.2.1-2_i386.deb

Tras esto ya se puede instalar bien el paquete de Zattoo:

$ cd /tmp
$ http://download.zattoo.com/zattoo-3.2.1.14137-i386.deb
$ sudo dpkg -i zattoo-3.2.1.14137-i386.deb

Y a aprovechar para ver un poco el canal de "Aprenda Inglés TV", que está curioso aunque sea solo para tenerlo de fondo e ir cogiendo algo de oido.

Leer más…