clearenv()
ist in der stdlib
definiert, die in C über stdlib.h
, bzw in C++ über cstdlib
eingebunden wird.
clearenv()
löscht alle nicht zwangsläufig notwendigen Systemvariablen. Dies ist vorallem dann interessant, wenn verhindert werden soll, dass das Enviroment aufgrund von Sicherheitsaspekten nicht an andere Prozesse vererbt werden soll.
#include <stdio.h> int clearenv( void );
name: Name der Enviroment-Variablen.
Return Value: 0 im Erfolgsfall, sonst einen Wert, der nicht Null entspricht.
Sollte dieses Makro nicht zur Verfügung stehen, kann man sich durch das Überschreiben der statischen environ-Varibale behelfen:
environ = NULL;
#include <stdio.h> #include <stdlib.h> int main (void) { system( "set" ); printf( "----------------------------------------------------------\n" ); clearenv(); system( "set" ); return EXIT_SUCCESS; }
Der Code gibt über den Bashbefehl set
zuerst das vollständige Enviroment aus, gefolgt von einer Trennzeile und löscht dann das Enviroment. Unterhalb der Trennzeile sind also sämtliche nicht wirklich notwendigen Variablen gelöscht.
In beiden Fällen wird das Enviroment an den Befehl set
vererbt - im zweiten Fall erhält der Befehl jedoch deutlich weniger Informationen über den Benutzer.
Ausgabe
xin@trinity:~/proggen.org/clib/stdlib$ ./a.out COLORFGBG='15;0' DBUS_SESSION_BUS_ADDRESS='unix:abstract=/tmp/dbus-oOXMsb8LyW,guid=4268a2b2508eaf7268fb37eb00000021' DEBEMAIL='xin@thisdomain.org' DEBFULLNAME='Sascha Atrops' DESKTOP_SESSION='kde' DISPLAY=':0' DM_CONTROL='/var/run/xdmctl' GS_LIB='/home/xin/.fonts' GTK2_RC_FILES='/home/xin/.gtkrc-2.0' GTK_MODULES='canberra-gtk-module' GTK_RC_FILES='/etc/gtk/gtkrc:/home/xin/.gtkrc::/data/home/xin/.kde/share/config/gtkrc' HOME='/home/xin' IFS=' ' KDE_FULL_SESSION='true' KDE_MULTIHEAD='false' KDE_SESSION_UID='1000' KDE_SESSION_VERSION='4' KONSOLE_DBUS_SERVICE=':1.74' KONSOLE_DBUS_SESSION='/Sessions/2' LANG='de_DE.UTF-8' LANGUAGE='' LOGNAME='xin' OLDPWD='/home/xin/proggen.org' OPTIND='1' PATH='/home/xin/workspace/gsys/bin/:/usr/local/bin:/usr/bin:/bin:/usr/bin/X11:/usr/games' PPID='2550' PROFILEHOME='' PS1='$ ' PS2='> ' PS4='+ ' PWD='/home/xin/proggen.org/clib/stdlib' QT_PLUGIN_PATH='/home/xin/.kde/lib/kde4/plugins/:/usr/lib/kde4/plugins/' SESSION_MANAGER='local/trinity:@/tmp/.ICE-unix/2044,unix/trinity:/tmp/.ICE-unix/2044' SHELL='/bin/bash' SHLVL='1' SSH_AGENT_PID='1972' SSH_AUTH_SOCK='/tmp/ssh-kwFMcP1934/agent.1934' TERM='xterm' USER='xin' WINDOWID='121634854' WINDOWPATH='7' XCURSOR_THEME='Oxygen_Black' XDG_DATA_DIRS='/usr/share:/usr/share:/usr/local/share' XDG_SESSION_COOKIE='60634ab7c17a622d3854b4ca00000313-1293392788.605835-1649696329' XDM_MANAGED='method=classic' _='./a.out' ---------------------------------------------------------- IFS=' ' OPTIND='1' PATH='/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin' PPID='2550' PS1='$ ' PS2='> ' PS4='+ ' PWD='/data/home/xin/proggen.org/clib/stdlib' xin@trinity:~/proggen.org/clib/stdlib$