c0daz

t'as fait de l'autoQUOI ??

Ceux qui me connaissent et qui ont lu le post précédent ont peut-être cru à l’imposture: ”. Basculement vers autoconf pour la génération du Makefile” iMil ? c’est bien toi ? Oui alors attention hein, pas d’affolement. Il s’agit réellement d’une utilisation très très light de ces outils que j’évite habituellement comme la peste. Tellement light que seul autoconf m’a été utile. Mais reprenons. Ceux qui ont eu le courage de se plonger dans le code de pkgin se rappellent peut-être de ce genre de choses :

snprintf(surprise, BUFSIZ, "prout%s", surprise);

Cet après midi, j’ai eu une mauvaise surprise. Je fus en effet étonné de constater qu’en compilant pkgin sous GNU/Linux, les appels du type : tronquaient a avec uniquement unechaine. Evidemment, mon premier reflexe fut de blâmer GNU/Linux puisque ce code passait sans aucun soucis sur NetBSD, DragonFly BSD et même Solaris. Et pourtant. C’est gl qui m’informa que ce document issu de l’ISO et l’IEC explique clairement que le fait d’appeler snprintf() de la sorte rendait le résultat “imprévisible”.

la magie des SLIST

Il y a 5 ans de cela, je vous entretenais sur la beauté des SLIST, un concept issu du monde BSD permettant de facilement manipuler des listes chainées dans votre code C sans avoir à réinventer la roue à chaque code. Comme je n’avais plus manipulé ce type d’objet depuis un certain temps, je me suis replongé dans ce petit tutoriel, mais je lui ai trouvé un manque que je m’apprète à combler ici même.

char *slurp(const char *url)

Pour mon projet top secret que j’ai, j’avais besoin de télécharger un fichier, en C, via FTP ou HTTP. En cherchant ce qui est fait dans pkg_install, et plus particulièrement dans admin/audit.c, j’ai trouvé un bon exemple d’utilisation de la libfetch, dont le man est à mon avis complètement indigeste. Petit résumé. Afin de visualiser un code complet et fonctionnel sur l’utilisation de la libfetch, le fichier audit.c précedemment cité fera reference.

La magie de l'ELF

En comparant le projet qui m’obsède jour et nuit et les outils similaires déjà existants (crunchgen(1), rescue), j’en suis venu à me poser des questions sur le cas d’un mode “full static”. Pour mémoire, BeastieBox “trouve” la fonction à appeler fonction de argv[0], et je pars du principe que chaque nom de fonction doit être construit dynamiquement. Ce tour de passe-passe est facilement geré par les fonctions dlopen(3) / dlsym(3) dans le cas d’un binaire compilé dynamiquement, mais quid d’un binaire beastiebox compilé à l’aide du swtich -static ?

Duplication de symboles, la bonne methode

On oublie le post ci dessous. En effet, après avoir posté le resultat de mes travaux sur tech-userlevel@, j’ai appris une astuce des plus magiques. Arnaud Lacombe me dit dans une réponse : _ Just looking quickly at the code, you can avoid the “#ifdef BBOX commant_() #else main() #endif” heavy logic and the commonfunc.sh' hack by using nm(1), objcopy(1) and symbol renaming as done by crunchgen(1). </foo>_ Je regarde donc comment s'y prend le gaillard de crunchgen(1)` pour eviter les conflits de symboles et je vois ceci :

cvs co ya7ans

fouyou, ce voyage dans le passé… Il y a 7 ans, je commettais ceci. EasyLDAP était une librairie qui permettait d’implémenter une interaction LDAP en C assez simplement. Mais son but final était plus concret; en effet, en 2001, FreeBSD ne possédait pas de port nss_ldap, son architecture nss était quelque peu aride, et l’un de mes projets dans mon job de l’époque, c’était de trouver le moyen de centraliser l’authentification de nos serveurs FreeBSD, et de préférence, via LDAP.

à peine classe

Bon c’est pas encore super brillant, j’imagine que ça fera hurler les puristes, mais au cas ou quelqu’un aurait besoin d’une toute petite classe de rien du tout pour manipuler des fichiers de conf “basiques” du type : J’ai pondu un truc ici. Ça s’utilise comme ça : et magie : Améliorations bienvenues toussa.

fsHhshhhshhhHHh tsssk tssk fFSShhhsh

Alors voila. Y’a bien quoi, 3 ans ? 4 ans ? que moult lutins me chantaient les louanges de python, mais flemme, manque de proj et de temps aidant, je snobais le langage au serpent, tout juste capable de gentiment hacker quelques codes existants, rien d’excitant. Et puis arrive ce petit proj au boulot, un truc sympa, pas bien méchant, qui me ferait manipuler des IO, des connexions interactives, un proj avec un potentiel futur relativement interessant.

back to c0daze

Pour déconner j’ai pondu ça ce soir: infon.c Il s’agit d’un bête petit serveur TCP à compiler avec l’environnement de developpement de la Fonera et qui répond pour le moment aux requetes l[oad] et m[em]. Genre comme ça : Tu l’auras compris ami lecteur, tout ce qui manque à ce bidule, c’est un frontend sur un desktop qui se glissera gentiment dans un gnome-panel ou equivalent. Tu t’ennuies ? NB: la commande de compil qui va bien: mips-linux-uclibc-gcc -Os -pedantic -Wall -o infon infon.