clearenv()

clearenv() ist in der stdlib definiert, die in C über stdlib.h, bzw in C++ über cstdlib eingebunden wird.

Funktion

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.

Signatur

#include <stdio.h>
int clearenv( void  );

name: Name der Enviroment-Variablen.

Return Value: 0 im Erfolgsfall, sonst einen Wert, der nicht Null entspricht.

Fehlerquellen

Sollte dieses Makro nicht zur Verfügung stehen, kann man sich durch das Überschreiben der statischen environ-Varibale behelfen:

environ = NULL;

Beispiel

#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$ 

siehe auch