Como crear un parche con diff y como aplicarlo con patch

[h]Como crear un parche con diff y como aplicarlo con patch[/h]
https://www.wifi-libre.com/img/members/3/parche_1.jpg
El otro día hemos hablado de un bug en airmon-ng y como arreglarlo. Bug rfkill de airmon-ng: Arreglo chapuza pero efectivo
Había de paso reportado el error en el trac de aircrack-ng.
Resulta que las lineas que cité en la descripción no eran las buenas.
Tampoco pensé en que repasar un script de miles de lineas no le apetece a nadie.
Lo que hubiera tenido que hacer desde el inicio es mandar un parche para simplificar la vida al desarrollador.
Sobre todo que crear un parche es de lo más simple.
[h]Crear un parche con diff[/h]
Es otro de estos comandos fundamentales UNIX-Linux que uno debería conocer
Su función prima es comparar dos textos y mostrar en consola las differencias entre los dos documentados (dicho de otro modo las lineas iguales no se muestran).
Como linux está enfocado hacía la colaboración abierta este mismo comando permite crear un parche gracias a sus opciones.
Hagamos un parche juntos para corregir el bug rfkill aimon-ng
Edito airmon-ng con mi editor de texto y guardo la versión modificada bajo el nombre de airmon-ng_mod
Abro una consola en la carpeta que contiene airmon-ng (original) y airmon-ng_mod (la versión con las modificaciones hechas)
Ejecuto

diff -Naur airmon-ng airmon-ng_mod > parche_airmon-ng 

Y obtengo un parche que he llamado “parche_airmon-ng
He empleado con diff una combinación de opciones: ** -Naur**
-u hubiera bastado, sin embargo -Naur es una sintaxis más robusta, así que es mejor emplearla
Veamos un rato que pinta tiene el parche:
https://www.wifi-libre.com/img/members/3/parche_2.jpg
Veis que entre los “@@” se dan las coordenadas de la linea a modificar
Y veis que se usa el símbolo menos y plus para indicar la linea a modificar y la modificación a efectuar.
[h]Aplicar un parche con patch[/h]
Patch sirve solo para parchear.
La sintaxis básica es

patch <programa> <parche>

Así de fácil.

patch airmon-ng parche_airmon-ng

Si queréis aplicar el parche para arreglar la orden rfkill y la salida en consola

[code]— airmon-ng 2017-06-15 14:41:36.094598000 +0200
+++ airmon-ng_mod 2017-06-15 11:58:36.393546216 +0200
@@ -298,7 +298,7 @@
#immediatly return if rfkill isn’t supported
return 0
fi

  • rfkill_status=“$(rfkill unblock ${1#phy} 2>&1)”
  • rfkill_status=“$(rfkill unblock “$index” 2>&1)”
    if $? != 0 ]; then
    printf “rfkill error: ${rfkill_status}\n”
    printf “Unable to unblock.\n”
    @@ -373,9 +373,9 @@
    rfkill_check ${PHYDEV}
    rfkill_retcode=“$?”
    case ${rfkill_retcode} in
  •   1) printf "\t${1} is soft blocked, please run \"rfkill unblock ${1#phy}\" to use this interface.\n" ;;
    
  •   1) printf "\t${1} is soft blocked, please run \"rfkill unblock "$index"\" to use this interface.\n" ;;
      2) printf "\t${1} is hard blocked, please flip the hardware wifi switch to on.\n"
    
  •      printf "\tIt may also be possible to unblock with \"rfkill unblock ${1#phy}\"\n"
    
  •      printf "\tIt may also be possible to unblock with \"rfkill unblock "$index"\"\n"
         if  "${checkvm_status}" != "run" ]; then
         	checkvm
         fi
    

@@ -383,12 +383,12 @@
printf “Detected VM using ${vm_from}\n”
printf “This appears to be a ${vm} Virtual Machine\n”
printf “Some distributions have bugs causing rfkill hard block to be forced on in a VM.\n”

  •      	printf "If toggling the rfkill hardware switch and \"rfkill unblock ${1#phy}\" both fail\n"
    
  •      	printf "If toggling the rfkill hardware switch and \"rfkill unblock "$index"\" both fail\n"
         	printf "to fix this, please try not running in a VM.\n"
         fi
         ;;
      3) printf "\t${1} is hard and soft blocked, please flip the hardware wifi switch to on.\n"
    
  •      printf "\tIt may also be needed to unblock with \"rfkill unblock ${1#phy}\"\n" ;;
    
  •      printf "\tIt may also be needed to unblock with \"rfkill unblock "$index"\"\n" ;;
    
    esac
    if “${rfkill_retcode}” != 0 ]; then
    printf “rfkill error, unable to start ${1}\n\n”[/code]