Archive

Archive for the ‘Uncategorized’ Category

Why I hate Oracle DB so much? Because it’s unable to do simple things in a simple way

It’s not the first time I complain about Oracle DB doing things in a complicated way. But here is an extreme example of its stupidness:

SELECT bug_id, assigned_to, assigned_to FROM bugs ORDER BY assigned_to;

All this query does is to select the bug ID and the assignee ID twice, and display the list ordered by the assignee ID. This query works correctly in MySQL, MariaDB and PostgreSQL, but fails miserably in Oracle with this error message:

ORA-00960: ambiguous column naming in select list

It complains that we want to sort the list based on the assigned_to column, but this column is mentioned twice in the SELECT part of the query and so it doesn’t know which one to choose to sort the list. As it’s twice the same column, this doesn’t matter!! But Oracle is unable to realize this! If I write:

SELECT bug_id, assigned_to, assigned_to FROM bugs ORDER BY bugs.assigned_to;

then Oracle is happy.

I really wonder why people pay thousands of dollars for such a buggy and heavy software when MySQL/MariaDB and PostgreSQL are way better.

Catégories:Uncategorized

Mais où va le monde?

Cet article de 24 Heures décrit les pratiques inacceptables de certains recruteurs américains exigeant l’accès total au compte Facebook des demandeurs d’emploi. Alors que cela me semble être une évidente violation de la vie privée, certains experts arrivent à ne pas partager cet avis. Bientôt, les recruteurs demanderont à venir fouiller votre maison, à vérifier vos relations amicales et amoureuses (et au besoin de vous demander de changer d’amis ou de femme?), ou encore à pouvoir contrôler le contenu de vos bulletins de vote (et à les censurer si nécessaire?) et je ne sais quoi d’autre. Il serait temps que ces recruteurs (et les entreprises qui les embauchent) arrêtent de se prendre pour des dieux avec des droits sans limites. Vous êtes juste pathétiques; je vous plains.

Catégories:Uncategorized

Google+ est maintenant accessible aux moins de 18 ans

L’âge minimum pour posséder un compte sur Google+ a été abaissé par Google! Alors qu’il fallait auparavant être âgé d’au moins 18 ans, cette limite a été abaissée à 13 ans (sauf pour l’Espagne et la Corée du Sud: 14 ans, ainsi que les Pays-Bas: 16 ans). Cette limite d’âge est donc maintenant la même que pour Facebook et Twitter. Il y a fort à parier que cela va faire exploser le nombre de comptes Google+ dans les semaines à venir. Reste à savoir si cela sera suffisant pour concurrencer Facebook et ses 800 millions d’utilisateurs.

Catégories:Uncategorized

Comment mal protéger son site web? Il suffit d’inclure le nom d’utilisateur et le mot de passe dans la page elle-même!

En allant visiter le site web d’une compagnie de sapeurs-pompiers dont je faisais partie il y a plusieurs années, j’ai constaté qu’une partie du site était désormais protégée par un nom d’utilisateur et un mot de passe. Me demandant ce qu’un tel site pouvait bien avoir à cacher, j’ai décidé d’investiguer un peu.

En arrivant sur la partie protégée, j’ai constaté que la page me demandant mon nom d’utilisateur et mon mot de passe avait l’URL suivante:

lmpasswdlg.html?l='14159490828c4a1e...',p='14159496828c4a19...'

(J’ai tronqué ces deux variables pour qu’elles tiennent dans la largeur de cette page.) En regardant le code source de la page, et en particulier son code JavaScript, j’ai constaté que ces variables correspondaient respectivement au nom d’utilisateur du site et à son mot de passe, mais en version encryptée. À ce stade, je m’attendais à ce que le script prenne les données entrées par l’utilisateur, les encrypte et les compare aux valeurs ci-dessus. Dans ce cas, il n’y aurait pas eu moyen d’obtenir facilement le nom d’utilisateur et le mot de passe. Or, et c’est là que ça devient intéressant, le script fait exactement l’inverse. Il décrypte ces valeurs pour les comparer en clair aux valeurs entrées par l’utilisateur! Il ne me restait plus qu’à exécuter ce code moi-même avec les valeurs ci-dessus, et regarder les valeurs ainsi retournées:
login = ‘cdists’, password = ‘eca0665′. Wow! Et me voilà dans la partie "protégée" du site. Vous parlez d’une protection!

Donc tout ce code ne sert strictement à rien:

function HexToDec(c) {
  var alpha="aA";
  if (c>='a' && c<='f')
    return c.charCodeAt(0)-alpha.charCodeAt(0)+10;
  if (c>='A' && c<='F')
    return c.charCodeAt(0)-alpha.charCodeAt(1)+10;
  else
    return eval(c);
}

function EnDecrypStr(sSecret) {
  var sSecretTodo=sSecret;
  var sPassword="$%¢£²¼|*°«¢@%)-¾?";
  var strOut="";
  var l=sPassword.length;
  var l2=sSecretTodo.length/2;
  for (var x=1; x<=l2; x++) {
    var g=((x-1) % l);
    var iChar=sPassword.charCodeAt(g);
    var c1=HexToDec(sSecretTodo.charAt((x-1)*2));
    var c2=HexToDec(sSecretTodo.charAt((x-1)*2+1));
    var c=c1*16+c2;
    iChar=c^iChar;
    strOut=strOut+String.fromCharCode(iChar);
  }
  return strOut;
}

function HexToUnicode(str) {
  var strOut="";
  var s1=16;
  var s2=16*16;
  var s3=16*16*16;
  var l2=str.length/4;
  for (var x=1; x<=l2; x++) {
    var c1=HexToDec(str.charAt((x-1)*4));
    var c2=HexToDec(str.charAt((x-1)*4+1));
    var c3=HexToDec(str.charAt((x-1)*4+2));
    var c4=HexToDec(str.charAt((x-1)*4+3));
    var c=c1*s3+c2*s2+c3*s1+c4;
    strOut=strOut+String.fromCharCode(c);
  }
  return strOut;
}

// proviennent de l'URL ci-dessus
var l = '14159490828c4a1e809b947915191a8d0f14129693828b4f';
var p = '14159496828c4a19809b947115191e8e0f14169493828f4a1a809897';

var login = EnDecrypStr(l);
login = HexToUnicode(login);
var passwd = EnDecrypStr(p);
passwd = HexToUnicode(passwd);

if (CompareUnicodeString(my_Login, login)
    && CompareUnicodeString(my_Password, password)) {
 .... // success
}

Je ne me suis même pas donné la peine de regarder ce que pouvais bien faire la fonction CompareUnicodeString(), bien que son nom soit suffisamment explicite. :) J’avais déjà les informations dont j’avais besoin. Ou comment écrire du code compliqué pour rien et faire croire aux webmasters que leur site sera protégé….

Catégories:Uncategorized

Your PC doesn’t shutdown correctly anymore? Uninstall VirtualBox 4.1.0

Earlier this week, I upgraded VirtualBox from 4.0.12 to 4.1.0, being excited to read in the changelog that it finally supports Direct3D in Windows guests (I was hoping to see my Windows Experience Index to become higher than 1.0). Unfortunately, not only VirtualBox now crashes when asking Windows 7 to calculate the Windows Experience Index, but my PC is no longer able to shutdown. It freezes very close to shutdown, after the "halt" command is called for all processes. What I get is a kernel panic, as you can see in this screenshot.

VirtualBox 4.1.0 triggers a kernel panic on shutdown

The keyboard is totally unresponsive, and you have to reboot the PC by pressing the reboot button. When I do that, the PC first seems to reboot correctly, but suddenly decides to reboot again a few tens of seconds later, sometimes even after I’m already logged in. After the second reboot, everything goes fine again… till I try to shutdown my PC again. Hum! So I uninstalled VirtualBox 4.1.0, as this version seems broken, as reported in the VirtualBox bugtracker too.

These days, I’m pretty irritated with all these new releases which break stuff. Mageia 1 and KDE 4.6 (also here and here) come to mind. Instead of new releases with new features, I would prefer stable releases with bugfixes only.

Update: VirtualBox 4.1.2 has this problem fixed.

Catégories:Blogroll, Uncategorized

Mageia 1 est arrivée

Mageia, clone de Mandriva Linux, a atteint hier la version 1, marquant ainsi la première version stable de cette nouvelle distribution Linux. Pour l’avoir testée pendant plusieurs mois dans ma machine virtuelle durant les phases beta et RC, Mageia 1 me semble être un système d’exploitation très stable, fonctionnel et surtout convivial et rapide (par exemple, Mageia démarre bien plus rapidement que Ubuntu et Fedora, et l’écran de démarrage est bien plus convivial également). Si vous cherchez à vous échapper de Mandriva Linux 2010.1 ou 2010.2, n’hésitez pas, essayez Mageia 1!

PS: Je ne contribue en aucun cas au projet Mageia, mais je me permets de faire de la pub pour des applications/OS/initiatives qui en valent la peine. Et Mageia en fait définitivement partie. Je souhaite plein de succès à cette nouvelle et courageuse équipe. :)

Catégories:Uncategorized

Pour/contre qui sont faites les lois?

"J’ai 33 ans, je suis micromécanicien, je suis pompier volontaire et bien intégré. La population dans ma commune m’apprécie. Mon pays, la côte d’Ivoire, est au bord de la guerre civile." Verdict du tribunal administratif fédéral? Expulsion!

"Je suis dealer, je n’ai pas d’emploi, j’agresse les gens et ne suis pas du tout intégré. J’ai brûlé mes papiers d’identité et prétends avoir moins de 18 ans (donc mineur)." Résultat? Pas expulsable, car le pays d’origine ne peut être établi.

Cherchez l’erreur!! En résumé, si vous êtes malhonnête, vous ne risquez pas grand chose: pas expulsable, car le pays d’origine ne peut être identifié; pas de peine de prison ferme, car elles sont déjà pleines; pas ammendable, encore faudrait-il avoir de l’argent; à peine inquiété, car soi-disant mineur (mais bien sûr!). Mais si vous êtes honnête, vous vous passez vous-même la corde autour du coup, et attendez que l’administration donne un coup de pied dans la chaise sur laquelle vous vous trouvez. C’est ça, la défense des droits de l’homme!

Catégories:Mozilla, Uncategorized
Suivre

Recevez les nouvelles publications par mail.