Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 18/02/2012, à 19:04

Troumad

[C] Récupérer le répertoire temporaire

Bonjour

Sous Mageia et Windows, getenv("TMP") me renvoie le répertoire temporaire. Sous ubuntu, je récupère NULL !
Comment parer ce problème ?


Amicalement vOOotre
A visiter sur http://troumad.org ou http://troumad.developpez.com

Hors ligne

#2 Le 18/02/2012, à 19:13

Troumad

Re : [C] Récupérer le répertoire temporaire

J'avais oublié une entrée de FAQ à laquelle j'avais contribuée : http://c.developpez.com/faq/?page=envir … _main_envp
Mais, sous Ubuntu, je ne trouve pas ce qui m'intéresse :

TERM=xterm
SHELL=/bin/bash
XDG_SESSION_COOKIE=8f6659af466fd98cc2b01fc40000000e-1329549217.440896-1893727468
SSH_CLIENT=192.168.2.15 35673 22222
SSH_TTY=/dev/pts/0
USER=troumad
LS_COLORS=rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arj=01;31:*.taz=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.dz=01;31:*.gz=01;31:*.lz=01;31:*.xz=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.rar=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.jpg=01;35:*.jpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.axv=01;35:*.anx=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=00;36:*.au=00;36:*.flac=00;36:*.mid=00;36:*.midi=00;36:*.mka=00;36:*.mp3=00;36:*.mpc=00;36:*.ogg=00;36:*.ra=00;36:*.wav=00;36:*.axa=00;36:*.oga=00;36:*.spx=00;36:*.xspf=00;36:
MAIL=/var/mail/troumad
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
PWD=/home/troumad/Documents/add/gtk
LANG=fr_FR.UTF-8
SHLVL=1
HOME=/home/troumad
LOGNAME=troumad
SSH_CONNECTION=192.168.1.15 35673 192.168.1.14 22222
LESSOPEN=| /usr/bin/lesspipe %s
DISPLAY=localhost:10.0
LESSCLOSE=/usr/bin/lesspipe %s %s
_=./a.out
OLDPWD=/home/troumad/Documents/add/gtk/perso

Amicalement vOOotre
A visiter sur http://troumad.org ou http://troumad.developpez.com

Hors ligne

#3 Le 18/02/2012, à 21:28

grim7reaper

Re : [C] Récupérer le répertoire temporaire

Pourquoi tu veux récupérer le répertoire temporaire ?
Si c’est pour y créer des fichiers tu n’as pas besoin de la connaître car créer les fichiers temporaires à la main c’est une faille de sécurité.
Il faut utiliser mkstemp (et non pas mktemp) ou tmpfile.

Hors ligne

#4 Le 18/02/2012, à 22:03

Troumad

Re : [C] Récupérer le répertoire temporaire

Pour mon fichier temporaire... Je génère les fichiers d'un odt que je compresse après. Je ne vois pas comment faire facilement !


Amicalement vOOotre
A visiter sur http://troumad.org ou http://troumad.developpez.com

Hors ligne

#5 Le 18/02/2012, à 22:08

grim7reaper

Re : [C] Récupérer le répertoire temporaire

Et les fonctions que je t’ai donné ne font pas l’affaire pour créer ton fichier temporaire ?

Hors ligne

#6 Le 18/02/2012, à 22:22

Troumad

Re : [C] Récupérer le répertoire temporaire

Elles pourraient faire l'affaire si je savais utiliser un fichier temporaire avec une librairie de compression zip. Déjà que ça n'a pas été une mince affaire pour trouver comment faire et après importer le tout sous windows...


Amicalement vOOotre
A visiter sur http://troumad.org ou http://troumad.developpez.com

Hors ligne

#7 Le 18/02/2012, à 22:52

grim7reaper

Re : [C] Récupérer le répertoire temporaire

Bah un fichier temporaire ça s’utilise comme n’importe quel fichier (tmpfile retourne un FILE*), donc si tu sais utiliser une bibliothèque de compression zip avec un fichier, tu sais l’utiliser avec un fichier créé par les fonctions citées.

Hors ligne

#8 Le 18/02/2012, à 22:59

Troumad

Re : [C] Récupérer le répertoire temporaire

La bibliothèque, je l'utilise avec des fichiers directement :

    f_zip=zip_open("feuille.zip",ZIP_CREATE,NULL);
    n_zip=zip_source_file(f_zip,"content.xml",0,0);
    zip_replace(f_zip,zip_name_locate(f_zip,"content.xml",ZIP_FL_NOCASE) ,n_zip);
    zip_close(f_zip);

Le fichier que je crée est content.xml. Mais, je me souviens avoir décompressé un fichier content.xml d'un odt et avoir directement travaillé sur le flux. Ce serait peut-être une bonne option à travailler dès que j'aurais le temps.

Ceci-dit, en quoi est-ce une faille de sécurité de travailler avec des fichiers temporaires dans un tel exemple ?


Amicalement vOOotre
A visiter sur http://troumad.org ou http://troumad.developpez.com

Hors ligne

#9 Le 18/02/2012, à 23:53

grim7reaper

Re : [C] Récupérer le répertoire temporaire

Si tu utilise mkstemp tu peux avoir le nom du fichier créé car le template (le paramètre que la fonction prend) est modifié par la fonction.

Troumad a écrit :

Ceci-dit, en quoi est-ce une faille de sécurité de travailler avec des fichiers temporaires dans un tel exemple ?

Advanced Linux Programming a écrit :

* More than one instance of your program may be run simultaneously (by the
same user or by different users).The instances should use different temporary
filenames so that they don’t collide.

* The file permissions of the temporary file should be set in such a way that
unauthorized users cannot alter the program’s execution by modifying or
replacing the temporary file.

* Temporary filenames should be generated in a way that cannot be predicted
externally; otherwise, an attacker can exploit the delay between testing whether
a given name is already in use and opening a new temporary file.

Si on connaît le nom de ton fichier, on peut s’amuser à le remplacer par un autre fichier qui fera planter ton appli ou lui faire exécuter du code arbitraire ou ce genre de chose (tout dépend de comment est codé ton appli)

Dernière modification par grim7reaper (Le 18/02/2012, à 23:56)

Hors ligne

#10 Le 19/02/2012, à 09:12

Troumad

Re : [C] Récupérer le répertoire temporaire

grim7reaper a écrit :

Si on connaît le nom de ton fichier, on peut s’amuser à le remplacer par un autre fichier qui fera planter ton appli ou lui faire exécuter du code arbitraire ou ce genre de chose (tout dépend de comment est codé ton appli)

Je suis bien d'accord avec un gros programme qui fait plein de choses, mais, là, c'est juste un fichier odt (pour LibreOffice) que je fais. Mais, je prévois de regarder dès que j'ai du temps.


Amicalement vOOotre
A visiter sur http://troumad.org ou http://troumad.developpez.com

Hors ligne

#11 Le 19/02/2012, à 10:40

grim7reaper

Re : [C] Récupérer le répertoire temporaire

Admettons que pour la sécurité il n’y ai pas de risque (ne jamais sous-estimer l’inventivité des gens, certains exploits sont impensables avant d’être réalisés), il reste le problème de collision avec 2 instances de ton programme qui tourne en même temps vu que tes fichiers ont des noms fixes.

Hors ligne

#12 Le 19/02/2012, à 10:53

Troumad

Re : [C] Récupérer le répertoire temporaire

Tout à fait exact. Mais, il faudrait que l'utilisateur clique presque instantanément sur enregistrer dans deux fenêtres distinctes. Rien n'est impossible de ce côté.
Je n'y pensais pas, mais ce serait fort surprenant.

Ceci dit, comme c'est la sortie, mais pas la sauvegarde de la configuration, on ne perd aucune donnée, on gagne juste le droit de cliquer à nouveau sur le bouton Enregistrer.

Mais, je regarderai la solution que tu proposes car mon but est d'apprendre : http://linux.die.net/man/3/zip_source_filep devrait faire l'affaire.

Dernière modification par Troumad (Le 19/02/2012, à 11:05)


Amicalement vOOotre
A visiter sur http://troumad.org ou http://troumad.developpez.com

Hors ligne

#13 Le 19/02/2012, à 11:47

grim7reaper

Re : [C] Récupérer le répertoire temporaire

Oui, je suis d’accord que pour un même utilisateur c’est (très ?) peu probable.
Mais bon les machines avec de OS type Unix sont souvent multi-utilisateurs .Par exemple dans une école : un gros serveur et les étudiants bossent sur des terminaux qui se connectent au serveur. Dans ce genre de configuration ça devient un peu plus probable ;-)

Hors ligne

#14 Le 19/02/2012, à 12:02

Troumad

Re : [C] Récupérer le répertoire temporaire

Sauf si le répertoire temporaire est ~/tmp , mais il est vrai que souvent, c'est /tmp sad
Mais, là, c'est pour du donjon et dragon version ADD1 et ADD2 (avant 2000), donc, ce serait plus pour les profs wink


Amicalement vOOotre
A visiter sur http://troumad.org ou http://troumad.developpez.com

Hors ligne

#15 Le 20/02/2012, à 12:31

Troumad

Re : [C] Récupérer le répertoire temporaire

Ça marche wink
Et j'évite donc l'écriture d'un fichier temporaire wink Je supprime la fonction pour trouver le répertoire temporaire de mon programme...

Mais, si je veux aller plus loin ,il me reste un autre problème : http://www.developpez.net/forums/d11879 … ost6516436


Amicalement vOOotre
A visiter sur http://troumad.org ou http://troumad.developpez.com

Hors ligne