Les pire c'est OSX en tout cas.
Comme de par hasard.
Les pire c'est OSX en tout cas.
Comme de par hasard.
Sleeping all day, sitting up all night
Poncing fags that's all right
We're on the dole and we're proud of it
We're ready for 5 More Years
C'est la sélection naturelle, seuls les meilleurs utilisateurs restent.
"Dieu est mort" · "Si le téléchargement c’est du vol, Linux c’est de la prostitution."
Suffit de recompiler, pas d'excuse
Est-ce que Kali Linux est dangereux? Le gouvernement britannique a apparemment cru bon de mettre en garde les parents contre la nocivité de Linux et Kali Discord
https://linuxreviews.org/Wondering_W...cy%22_Can_Help
j'avais lu à droite à gauche une news (un peu grosse mais peut être pas complètement fake) qui parlait du gouvernement (à priori britanique ?) qui aurait sorti une liste permettant aux parents de savoir si leur enfant est possiblement un hacker. Pardon, un cracker, pour être exact (un hacker ne fait rien de mal, même si on a oublié la différence entre les deux termes).
Grosse merdo ça sortait des inepties telles que : si votre enfant a fait CA, c'est un dangereux pirate et il faut l'aider à s'en sortir :
- il gagne des sous avec de la cryptomonnaie
- il n'a pas d'amis et passe tout son temps devant son PC
- il a des pseudos cheloux (enfin... de geek ou fan de manga quoi)
- il parle sans arrêt de hacking, backdoor, etc
Bref, le genre de truc complètement ouf dans lequel se retrouvent 90% des ados gamers.
Il ne manquait que "écoute du métal" ou "regarde Doctor Who" pour caractériser les terroristes.
Si ce n'est pas une pauvre blague de l'internet ou d'un politicien un peu bêbête, j'imagine que c'est lié. J'ai du voir ce torchon en passant rapidement sur developpez.com, donc niveau crédibilité on repassera
Dernière modification par gros_bidule ; 19/02/2020 à 09h29.
Je suis rageance.
Je suis en c++11/14/17 avec ou sans boost, et je n'arrive pas à trouver de manière portable d'effectuer des opérations simples sur le système de fichiers, sachant que je vais devoir livrer sous W10 en plus de Linux.
En particulier, je veux juste savoir si j'ai le droit d'écrire dans un répertoire, pour le moment.
J'arrive à consulter de manière assez fine les droits avec filesystem de c++17, mais ça ne m'est pas très utile car il faut dépatouiller les permissions entre les différents groupes d'utilisateurs (cas typique, des répertoires système sont en rwx/r-x/r-x avec root en créateur).
La fonction qui existe et fait exactement ce que je veux: acces(), déclarée dans unistd.h
Comme la doc l'indique bien, elle répond à la seule question: "le mec qui lance le process peut-il écrire à l'endroit indiqué?"Code:bool is_folder_writable(const char *str) { if(access(str, W_OK) == 0) { return true; } else { return false; } }
Y-a-t-il un équivalent portable à cette fonction?
Essayer d'écrire et catch l'exception si elle se présente ?
C'est pas une solution spécifique à C++ (que je ne connais pas) mais je finis souvent par faire ça (en bash et python).
https://en.cppreference.com/w/cpp/fi...em/permissions
C++ 17 FTW .Code:#include <fstream> #include <bitset> #include <iostream> #include <filesystem> namespace fs = std::filesystem; void demo_perms(fs::perms p) { std::cout << ((p & fs::perms::owner_read) != fs::perms::none ? "r" : "-") << ((p & fs::perms::owner_write) != fs::perms::none ? "w" : "-") << ((p & fs::perms::owner_exec) != fs::perms::none ? "x" : "-") << ((p & fs::perms::group_read) != fs::perms::none ? "r" : "-") << ((p & fs::perms::group_write) != fs::perms::none ? "w" : "-") << ((p & fs::perms::group_exec) != fs::perms::none ? "x" : "-") << ((p & fs::perms::others_read) != fs::perms::none ? "r" : "-") << ((p & fs::perms::others_write) != fs::perms::none ? "w" : "-") << ((p & fs::perms::others_exec) != fs::perms::none ? "x" : "-") << '\n'; } int main() { std::ofstream("test.txt"); // create file std::cout << "Created file with permissions: "; demo_perms(fs::status("test.txt").permissions()); fs::permissions("test.txt", fs::perms::owner_all | fs::perms::group_all, fs::perm_options::add); std::cout << "After adding o+rwx and g+rwx: "; demo_perms(fs::status("test.txt").permissions()); fs::remove("test.txt"); }
La programmation est une course entre le développeur, qui s’efforce de produire des applications à l’épreuve des imbéciles, et l’univers qui s’efforce de produire de meilleurs imbéciles... L’univers a une bonne longueur d’avance !!!
Ben je l'ai vu, mais comme dit dans mon exemple, je n'arrive pas à le mettre en pratique.
Lorsque je lance un process avec l'user vectra et que je donne un répertoire genre /lib64 avec les droits '755' mais l'user 'root', il me retourne bien '7' pour l'user...
Sauf que je ne suis pas root ni dans son groupe, et donc il me dit que je peux écrire mon fichier dans /lib64, ce qui évidemment ne se vérifiera pas expérimentalement!
J'ai peut-être raté un truc, mais je suis bloqué quand-même...drwxr-xr-x 2 root root 4,0K août 5 2019 lib64/
La fonction access, bien que deprecated, va vérifier si c'est l'owner du processus qui a bien le droit d'écriture.
La programmation est une course entre le développeur, qui s’efforce de produire des applications à l’épreuve des imbéciles, et l’univers qui s’efforce de produire de meilleurs imbéciles... L’univers a une bonne longueur d’avance !!!
Alors oui, d'après ce tuto:
https://doc.ubuntu-fr.org/acl
Mais pour préciser, le but de ma quête est de produire un code qui marchera 'tel quel' sur une cible W10 en plus de Linux.
Ce que je voulais dire :
Est ce que ton user linux à les droit sur le dossier sur lequel tu fais des tests via les ACL (d'ou le getfacl). Si tel est le cas alors il est peut être normal que le système te dise que ton user à les droits.
La programmation est une course entre le développeur, qui s’efforce de produire des applications à l’épreuve des imbéciles, et l’univers qui s’efforce de produire de meilleurs imbéciles... L’univers a une bonne longueur d’avance !!!
Ah pardon!
Donc, non...
/>getfacl /lib64/
getfacl : suppression du premier « / » des noms de chemins absolus
# file: lib64/
# owner: root
# group: root
user::rwx
group::r-x
other::r-x
/>cat > /lib64/toto
bash: /lib64/toto: Permission non accordée
Ça sert à quoi en fait d'avoir les permissions owner/group/others quand tu ne sais pas qui tu es ou qui est le owner/group du fichier ?
En portable et sans bibliothèque supplémentaire, je vois rien d'autre que d'essayer d'écrire comme le suggère Nattlefrost. Ou alors tu écris ta propre fonction portable avec deux implémentations linux/windows.
Nan mais ouais, en fait, c'est largement la solution la plus simple possible.
Je trouvais ça un peu naïf que de faire un fopen en écriture, surtout qu'il faut effacer derrière, mais c'est encore le plus direct. Y'a aucun jugement de valeur ici, c'est juste que je voulais voir ce qu'avait dans le ventre la nouvelle norme.
- - - Mise à jour - - -
He ben en fait, s'il y avait une lib vraiment portable qui faisait ça, cela pourrait m'intéresser en théorie.
Ca me semble assez fou qu'il n'y ait rien de tout prêt et normalisé pour tester ce genre de besoins, qui me semble quand-même assez vital: "puis-je écrire ici"?
Pareil pour Linux, on peut écrire dans $XDG_DATA_HOME, $XDG_CONFIG_HOME, $XDG_CACHE_HOME, $XDG_RUNTIME_DIR.
La seule bibliothèque que j'utilise qui propose un test portable c'est qt, et c'est pas une dépendance qu'on ajoute à la légère.
Eh ben en fait, ce projet est justement en Qt.
En un sens, j'aurais dû commencer par là, mais c'est une bonne chose à savoir que je ne suis pas prêt à me débrouiller avec la std.
Oui clairement, ça rallonge un peu le CMake
Pour la déconne, il y avait déjà des choses similaires sur boost.
Je viens de retrouver ça dans mon code:
Code:bool vectrautil::path_writeable_cpp11_p(const boost::filesystem::path &p) { std::ostringstream o; o << std::oct << boost::filesystem::status(p) . permissions(); size_t len = o . str() . size(); if ( ! (len == 3 || len == 4)) return false; size_t pos = (len == 3) ? 0 : 1; // il peut y avoir un sticky bit à 1 en première position return (o . str()[pos] == '7'); }
Rien de très étonnant :
https://en.cppreference.com/w/cpp/experimental/fsThis library is directly based on boost.filesystem, which is currently available on more compilers and platforms than this experimental technical specification.
La programmation est une course entre le développeur, qui s’efforce de produire des applications à l’épreuve des imbéciles, et l’univers qui s’efforce de produire de meilleurs imbéciles... L’univers a une bonne longueur d’avance !!!
Bon, en tous cas, c'est débloqué et mes idées un peu dépoussiérées
Merci pour vos lumières
Bon ça y est, même mon code fait la promotion de Doom Eternal
Réalisé à l'instant sans trucageCode:Dynamic assertion `nb_hits == 1` failed in /home/[redacted].hpp line 666: <too many or no corresponding planes>
Tu devrais ajouter des "assert(__LINE__ != 666);" pour éviter ce problème.
Salut les devs. Vous êtes bien tous confiné chez vous ? De la bonne remote desktop connection en fibre ou en mousse ?
Il y a longtemps que je n'ai pas posé de question de comptoir par ici. Alors en voici une:
que pensez-vous des tests quand leur mise en place devient plus fastidieuse et complexe que le code métier ?
Je me pose cette question car sur un projet assez récent nous avons décidé de jouer les tests à fond, par en TDD, mais simplement en s'astreignant à une bonne couverture de code.
Il s'agit d'un backend assez classique en Java, avec SpringBoot + JPA. Il y a en plus quelques services qui vont appeler d'autres services tiers en différentes technos (un coup SOAP, un coup REST, un coup une API propriétaire, un coup un FTP des familles, etc).
Si tester les service Spring est assez simple et propre avec peu de mock et une db en mémoire, en revanche tester l'intégration avec les services tiers devient assez vite un gloubi-boulga dégueu avec des mocks compliqués et autres simulations de services externes.
Du coup les tests deviennent imbitables, car trop complexes, trop verbeux, trop fragiles, trop dangereux. On ne sait plus très bien ce qui est vraiment testé au final ! Et quand un test se met à déconner c'est très compliqué de comprendre qu'est-ce qui ne va pas.
Souvent l'intégration avec ces systèmes tiers est dure à tester pour plein de raisons: pas d'environnement de test, pas de possibilité de remettre certaines données à zéro, pas d'accès aux données, nécessité d'avoir des enrobages techniques (retry, pool de connection), etc
Perso j'essaie de bien séparer le business de la couche "de liaison technique" avec les systèmes tiers, mais si je veux tester jusqu'au bout, je termine toujours avec des tests très moches pour cette "intégration".
Vous faites comment pour faire ce genre de tests d'intégration ? Comment vous faites pour éviter d'avoir des tests alambiqués plein de mocks et de simulations de services tiers pourries pour tester vos intégrations ?
Déjà avant de faire des tests d'intégration, faire des tess unitaires qui fonctionnent bien. Ensuite les tests d'intégration sur ce que vous maîtrisez de bout en bout (j'ai découvert très récemment un bug avec mockito sur les tests d'intégration d'ailleurs...) Et ensuite vous pourrez vous attaquer au plus chiant. My2cents
ba oui, c'est un peu ce que nous faisons: des tests unitaires simples quand c'est possible. Par contre pour ces tests chiants et dangereux, là je ne vois pas trop de solution élégante.
Pour les Data Access Layers, je ne mock pas, je pointe sur lesdits services directement (mocker reviendrai à écrire ce que tu pense que le service fait, mais sans en avoir la garanti).
Si pas possible, rendre les DAL les plus propres possibles, les tester extensivement à la main et essayer ne plus jamais y toucher.
Tout ce qui est au dessus des DAL par contre, là c'est en contrôle et mocké proprement, mais tout ce qui cause à l'extérieur, je le laisse causer à l'extérieur (avec processus d'initialisation/nettoyage avant et après le test si nécessaire, bien évidemment).