#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.
Ceci-dit, en quoi est-ce une faille de sécurité de travailler avec des fichiers temporaires dans un tel exemple ?
* 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
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
Mais, là, c'est pour du donjon et dragon version ADD1 et ADD2 (avant 2000), donc, ce serait plus pour les profs
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
Et j'évite donc l'écriture d'un fichier temporaire 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