OVH Cloud OVH Cloud

portabilité

15 réponses
Avatar
manu
Deux petites questions de portabilité:

1) pour me debarasser desdroits de root, j'ai l'habitude d'ecrire

if ((setuid(something) != 0) ||
(seteuid(something) != 0))
perror("...

Ca compile bien sur BSD, moins bien sur d'autres systèmes. Quelle est la
façon portable de faire ca?

2) De même, pour tester si un objet est un socket Unix, j'utilie stat(2)
et je teste le bit S_IFSOCK du champ st_mode. Ca râle sous Linux.
Comment doit on faire?

--
Emmanuel Dreyfus
Publicité subliminale: achetez ce livre!
http://www.eyrolles.com/php.informatique/Ouvrages/9782212112443.php3
manu@netbsd.org

5 réponses

1 2
Avatar
manu
Thomas Nemeth wrote:

Je suis déçu.


Dans le genre décevant, j'ai le code généré par lex et yacc qui est
incapable de compiler en -Wall -Werror sous Linux. Faut le patcher à la
main pour que ca passe.

--
Emmanuel Dreyfus
Un bouquin en français sur BSD:
http://www.eyrolles.com/php.informatique/Ouvrages/9782212112443.php3


Avatar
manu
I love cats wrote:

Passer sous un UID non root dans un daemon.
Ca c'est l'objectif, mais quel est le problème ? Ca marche pas ? Ca

passe pas à la compile ? Au link ? Sur quel système ?


Objectif: passer sous un UID non root avec du code qui compile en -Wall
-Werror.

Mais bon je ne suis pas si psychorigide que ca: j'ai viré le -Werror et
c'est bon.

--
Emmanuel Dreyfus
A lire: 240 pages en français sur l'administration UNIX avec BSD
http://www.eyrolles.com/php.informatique/Ouvrages/9782212112443.php3



Avatar
Pascal Bourguignon
(Emmanuel Dreyfus) writes:

Thomas Nemeth wrote:

Je suis déçu.


Dans le genre décevant, j'ai le code généré par lex et yacc qui e st
incapable de compiler en -Wall -Werror sous Linux. Faut le patcher à la
main pour que ca passe.


Ça, lex et yacc, c'est loin d'être un modèle de propreté!

C'est pas pour rien qu'ils ont été réimplémentés des dizaines de fois.
Ce qui est dômage, c'est que la plupart des réimplémentations ont
essayé d'être bug-compatible... Enfin, flex et bison, c'est quand
même un peu mieux. Personnellement, mon préféré était cctb (coc tail)
qui génère du Modula-2 au lieu de C.

--
__Pascal_Bourguignon__ http://www.informatimago.com/
There is no worse tyranny than to force a man to pay for what he doesn't
want merely because you think it would be good for him.--Robert Heinlein
http://www.theadvocates.org/


Avatar
I love cats
(Emmanuel Dreyfus) writes:

Objectif: passer sous un UID non root avec du code qui compile en -Wall
-Werror.


Donc il y a un warning. Mais lequel ?

Toujours sur le même système RH8 j'ai fait le petit prog de test
ci-dessous, et ça compile avec gcc -Wall -Werror:

#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>

int
main(int argc, char *argv[])
{
uid_t something;

if ((setuid(something) != 0) ||
(seteuid(something) != 0))
perror("...");

return 0;
}


Mais bon je ne suis pas si psychorigide que ca: j'ai viré le -Werror et
c'est bon.


Mouaif, quand on voit la qualité du code dans certains includes
courants, est-ce vraiment raisonnable d'espérer faire un code portable
non trivial et avec 0 warnings ?

--
"Never ascribe to malice what can be explained by human stupidity"
R. A. Heinlein

Avatar
manu
I love cats wrote:

Donc il y a un warning. Mais lequel ?


seteuid non défini. Pour qu'il le soit faut ajouter -D_BSD_SOURCE

--
Emmanuel Dreyfus
A lire: 240 pages en français sur l'administration UNIX avec BSD
http://www.eyrolles.com/php.informatique/Ouvrages/9782212112443.php3


1 2