Home Directory auslesen in C?

Hallo an alle,

kann man in C die Home Directory des Benutzers auslesen? In der Bash
würde das mit "cat /etc/passwd | grep `id -u`" gehen (sofern die
Benutzer lokal angelegt sind, und nicht auf einem LDAP Server & Co).

Grüße, Daniel

Hallo Daniel,

Der Aufruf, den du suchst ist getpwent(3)

BTW:
Der Wrapper fuer die verschiedenen Password-Datenbanken (/etc/passwd, LDAP
etc) ist in der Shell "getent passwd $USER".

HTH,
Thomas.

Daniel schrieb:

Hallo an alle,

hi!

kann man in C die Home Directory des Benutzers auslesen? In der Bash
würde das mit "cat /etc/passwd | grep `id -u`" gehen (sofern die
Benutzer lokal angelegt sind, und nicht auf einem LDAP Server & Co).

es kommt darauf an, wie du das meinst... willst du den benutzer, der
das programm ausführt?
dann kann ich dir empfehlen die kommandos 'who' und 'whoami' anzusehen..

willst du das heimverzeichniss eines bestimmten benutzers? also
weisst den den benutzernamen schon, oder wie..?

andernfalls kann ich dir in der shell ~ empfehlen, obwhol ich jetzt
nicht weiss, ob das in c geht.. :wink:

gruß daniel

- --
this mail was sent using 100% recycled electrons

Ich meine den Benutzer der das Program ausführt und bräuchte es in C
(wenn das überhaupt geht). In der Shell würde der Befehl "printenv
HOME"; jedoch gibt printenv nicht den String (also das Home
Verzeichnes) sondern den Befehlstatus zurück.

bye, Daniel

2005/12/15, Daniel G. Siegel <dgsiegel(a)gmail.com>:

Daniel wrote:

Ich meine den Benutzer der das Program ausführt und bräuchte es in C
(wenn das überhaupt geht). In der Shell würde der Befehl "printenv
HOME"; jedoch gibt printenv nicht den String (also das Home
Verzeichnes) sondern den Befehlstatus zurück.

char *my_homedir = getenv("HOME");

Hannes

Das funktioniert einwandfrei. Dankeschön :slight_smile:

Grüße, Daniel

Daniel ha scritto:

Das funktioniert einwandfrei. Dankeschön :slight_smile:

Grüße, Daniel

Daniel wrote:

Ich meine den Benutzer der das Program ausführt und bräuchte es in C
(wenn das überhaupt geht). In der Shell würde der Befehl "printenv
HOME"; jedoch gibt printenv nicht den String (also das Home
Verzeichnes) sondern den Befehlstatus zurück.

char *my_homedir = getenv("HOME");

http://www.die.net/doc/linux/man/man3/getenv.3.html

  char *my_homedir = getenv("HOME");
  if(my_homedir)
  my_homedir = strdup(my_homedir);
  else
  return/exit(EXIT_FAILURE);

  is not safe to play with pointers which point directly to the process
inherited environment space. If you are developing networked deamon that
pointer could be used for some kind of exploit or nasty things.
  In case of environment space corruption application itself or its
forked childs which inherited corrupted enviroments could crash badly.

  If you want change your enviroment please use setenv/putenv

  http://www.die.net/doc/linux/man/man3/setenv.3.html
  http://www.die.net/doc/linux/man/man3/putenv.3.html

  I hope this will save your time.
  If not I am sorry but I am not able to read german fluently.

  Cheers,

Hi Roberto,

I would like to add my 2 cents: if security is important, then it would be
better avoiding environment variables (and other information which can be
influenced by a malicious and/or chuckleheaded user) at all.

Thomas

Hi Roberto,

in fact, I am only interested in reading the values of the environment
variables. This trick with the if/else block and the "strdup" function
is really interesting, since it is exactly what I was searching and I
don't have to care about pointers to the original environment
variables. Thank you :slight_smile:

Best regards,
Daniel

2005/12/22, Roberto A. Foglietta <roberto.foglietta(a)sad.it>:

Thomas Pircher ha scritto:

is not safe to play with pointers which point directly to the process
inherited environment space.

Hi Roberto,

I would like to add my 2 cents: if security is important, then it would be
better avoiding environment variables (and other information which can be
influenced by a malicious and/or chuckleheaded user) at all.

  I understand...
...so, for example, busybox has to avoid any enviroment managment to be
secure?

  Enviroments could be a data-input-channel like another and we have to
treat it, not to drop it. Some sw has the need to r/w a $HOME/.myexec,
for example

  export HOME="$(cat malicios.data)"; myexec

  now could happen:

  - myexec: open a root shell
  - myexec: segmentation fault
  - myexec: quit with exit code 255

  May be somebody could do a thing like this

  cp -f malicios.data ~/.myexec

  or

  myexec < malicios.data

  so we have to avoid file r/w and ignore keyboard inputs too, in order
to enache security?
  :-)

  Cheers,

Roberto A. Foglietta ha scritto:

to enache security?

<typo, may be not the only>
  to enhance ...
  :-)
</typo, may be not the only>

  Cheers,