Category Archives: Uncategorized

mysql unsecure password function removed

ok on le savait qu’elle était pas top cette fonction déterministe : https://blog.kastenbaum.net/dont-crypt-password-with-mysql-functions/
mais de là à la supprimer ….
c’est fait mysql8 c’est supprimé (mariadb aussi ? why??).

on veut bien changer , mais pour les anciens mots de passe, on fait comment ??

on émule car old_password c’est compliqué mais on connait, et password, c’est du sha1 de unhex de sha1 https://stackoverflow.com/questions/5654819/how-can-i-decrypt-mysql-passwords :

drop function if exists my5password;
 delimiter $$
 create function my5password (input varchar(250)) 
 returns varchar(50)
 deterministic
 begin 
  return concat('*',upper(sha1(unhex(sha1(input)))));
 end$$
 delimiter ;



 drop function if exists old_password;
 delimiter $$
 create function old_password (input char(250)) 
 returns char(16)
 deterministic
 begin 
   declare nr bigint;
   declare nr2 bigint;
   declare ad bigint;
   declare inlen int;
   declare i int;
   declare b char;
   declare tmp int;
   declare output char(16);
   set nr = 1345345333;
   set nr2 = 0x12345671;
   set ad = 7;
   set inlen = length(input);
   set i = 1;
   while i <= inlen do
     set b = mid(input, i, 1);
     if b != ' ' and b != '\t' then
       set tmp = ord(b);
       set nr = nr ^ ((((nr & 63) + ad) * tmp) + ((nr << 8) & 0xffffffff));
       set nr2 = nr2 + (((nr2 << 8) & 0xffffffff) ^ nr);
       set ad = ad + tmp;
     end if;
     set i = i + 1;
   end while;
   set nr  = nr  & ((1 << 31) - 1);
   set nr2 = nr2 & ((1 << 31) - 1);      
   set output = lower(concat(hex(nr), hex(nr2)));
   return output;
 end$$
 delimiter ;

select my5password('toto'),old_password('toto');

alors bon ouais je n’ai pas réussi à créer la fonction qui s’appelle password() .
Enfin si on peut la créer mais il faut l’appeler mabase.password() donc ça revient au même, il faut repasser dans tous les SQL, et remplacer les where password(saisi)=champw par my5password(…

Quelle idée à la con de supprimer password(), ça va râler, c’est bien un coup d’oracle. On aurait pu rajouter un paramètre ‘salt’ optionnel, mais bon ça n’aurait pas fermé le trou de sécurité risqué par le transport de mot de passe non crypté vers mysql.

Les codes invisibles de gauche à droite rtl ltr 200e e2808e

Dans mon insertion sql de dates, elles n’étaient quelquefois pas reconnues, et du coup default now ou null. Quelquefois.
Et en cherchant sur quoi je tombe ?

06<200e>/<200e>07<200e>/<200e>19

Mais c’est quoi ces codes de m.. (en effet j’hésitais entre unicode et utf8).
Justement, c’est pas pareil, c’est des codes invisibles ltr rtl qui ne préviennent pas. Ils sont là si on veut mettre une citation en hébreu dans la phrase, mais למה לא?.
Justement l’unicode et l’utf8 sont différents. \u200e et \xe2808e
osef on veut les virer partout ?

function udb_clear_invisible($v_in)
{ //clear ltr rtl update udb_mta set mta_value=replace(mta_value,UNHEX('e2808e'),'') where mta_value like CONCAT('%', UNHEX('e2808e'),'%')
return(str_replace(array("\x20\x0e","\x20\x0f","\xe2\x80\x8e","\xe2\x80\x8f"),'',$v_in));
}

ntpdate rdate via http

Fatigué de ramer sur la mise en place de ntp, ntpd, port 123, et le message already used, trouver ntpdate -u, et voir qu’on ne trouve toujours pas les pool.ntp.org, et se dire que tout le monde est à l’heure sauf sa machine, et qu’on n’a que le http comme protocole, et qu’avec le http on a toujours l’heure dans le header, et que pourquoi qu’on n’utiliserait pas cette heure pour mettre à jour, hein ?

curl -X HEAD -s -i http://fr.pool.ntp.org|grep Date|sed -e 's/^Date:/--set="/' -e 's/$/"/'|xargs date

Fini les accents dans les URLs

Ouais, je sais, je devrais faire un “=”.urlencoding($val) à chaque fois mais bon hein, ça passe toujours. Non? 

Tomcat 8.5 et tomcat 9 (tomcat 8.0 aurait dû marcher mais pas chez moi) ça y est, ils n’acceptent plus d’accents dans les urls query_string. à peine s’ils acceptent les ([{|}]).

Utilisons l’apache en frontal pour transformer les accents reçus dans les URLs en leur équivalent %XX. Bonne idée au départ, mais je n’ai pas réussi à modifier la query string en lua. ça aurait été cool. Donc suivant la méthodologie QAD (euh.. quick and dirty …), voici la centaine de RewriteRule nécessaires : 


#used by : Include conf/rewriteacc.inc
echo "# UGLY : transcode real iso-8859-1 chars to %XX URL encoding " > /etc/httpd/conf/rewriteacc.inc
for L in a b c d e f;do
for C in 0 1 2 3 4 5 6 7 8 9 a b c d e f;do
X=$L$C
cat <<EOT>>/etc/httpd/conf/rewriteacc.inc
RewriteCond %{QUERY_STRING} ^(.*)\x$X(.*)$
RewriteRule ^(.*)\$ \$1?%1%$X%2 [N]
EOT
done
done
for X in 22 3c 3e 5b 5b 5c 5d 5e 7b 7c 7d 7e;do
cat <<EOT>>/etc/httpd/conf/rewriteacc.inc
RewriteCond %{QUERY_STRING} ^(.*)\x$X(.*)$
RewriteRule ^(.*)\$ \$1?%1%$X%2 [N]
EOT
done
cat <<EOT>>/etc/httpd/conf/rewriteacc.inc
RewriteRule ^(.*)\$ - [PT]
EOT

 

Je n’ose même pas commenter ces lignes. juste qu’il y a un proxypass derrière, d’où la bidouille du [PT] en fin de rewrites

Il y a des scripts quantiques schroedingeriens simultanément dans des états superposés de fierté et de honte.

Découpage de mbox, la vie des petits scripts

Nouveau serveur de mail, dilemne sur le choix du format de stockage, par fichier ou par boite, maildir ou mbox. Bon ok j’aurais du choisir maildir. Car maintenant je dois découper des très gros mbox qui ralentissent un peu les clients de mail.

j’ai retrouvé ce bout de perl mboxsplit.pl

my $part="off";
my $h=0;
while (<>) {
 my $l=$_;
 chomp;
 $part="arc" if (/^From MAILER.DAEMON/);
 $part="sent" if (/^From [a-z]*\@ledomaine.fr/);
  if ($part ne "off") {
  $c++;
  my $d=$_;
# From MAILER-DAEMON  Mon Feb 12 01:16:39 2018
  $d=~s/^From [^ ]* *[A-Za-z][A-Za-z][A-Za-z] //;
  $d=~s/\d\d \d\d:\d\d:\d\d //;
  $d=~s/ /_/g;
  if ($c > $m ) {
   close($h) unless ($h==0);
   $c=0;
   open($h,">".$part."_".$d);
  }
  $part="off";
 }
 print $h $l;
}
close($h);

on va manuellement trouver de gros mbox (inbox ou Sent généralement) et on tape

cat inbox|perl mboxsplit.pl

ce qui découpe le mbox en morceaux pas trop gros et pas trop petits, et les nommant pas trop mal arc_MMM_YYYY .

 

C’est intéressant la vie de tous ces bouts de codes qu’on n’utilisera qu’une ou deux fois, mais dont on est assez fiers de leur flexibilité.

Je pense à

une rotation de fichier

if [ -f $N ];then cp $N $N.0;fi
for i in 8 7 6 5 4 3 2 1 0;do
 if [ -f "$N.$i" ];then cp $N.$i $N.$(expr 1 + $i);fi
done

 

ou à une détection de connexion et d’envoi smtp douteuse, avec renvoi d’un ratio, pour zabbix

T=5000
L=$(tail -$T /var/log/maillog|wc -l)
P=0
if [ $L -gt 100 ];then
M=$(tail -$T /var/log/maillog|grep -c "ALLOWED .* origin_rdns: (unknown) auth: [a-z]")
P=$(expr $M \* 1000 / $L)
fi
echo $P

 

à tous ces codes qu’on se rappelle vaguement avoir fait, et qu’on n’arrive jamais à retrouver quand on en a besoin. En réalité, ils nous servent à savoir qu’on peut les refaire, très vite et mieux.

repackage solaris

un peu de code pour ouvrir un package solaris, y modifier des trucs, et le repackager.

#!/bin/sh
UNTRUC=":/home/"
UNAUTRE=":/export/home/"
P=$1
Q=`echo $P|sed -e 's/\.SunOS/SC.SunOS/'`
if [ ! -f "$P" ];then echo "$0 package";exit;fi
mkdir -p tmp/
rm -rf tmp/*
cd tmp
pkgtrans ../$P . all
D=`ls -d *`
cd $D
for F in $(ls install/*);do
if [ "`grep -c $UNTRUC $F`" != "0" ];then
cp $F $F.tmp
cat $F.tmp|sed -e "s|$UNTRUC|$UNAUTRE|" > $F
rm $F.tmp
G=`basename $F`
L=`wc -c $F|sed -e 's/^ *//' -e 's/ .*$//'`
S=`sum $F|sed -e 's/ .*$//'`
cp pkgmap pkgmap.tmp
cat pkgmap.tmp|sed -e "s/^1 i $G [0-9]* [0-9]* /1 i $G $L $S /" > pkgmap
rm pkgmap.tmp
fi
done
cd ..
pkgtrans -s . ../$Q all
cd ..
rm -rf tmp/*

 

en bref, lire la doc de pkgtrans, et recalculer les longueurs et checksums …

un jour comme un autre