Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Valgrind entdeckt Fehler bei getpwnam()

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
09.06.2004, 18:01 Uhr
~ET
Gast


Hallo alle zusammen,

erst Mal "hallo" - das ist mein erstes Posting hier.
Der Grund, aus dem ich schreibe ist, dass ich ein Problem mit der getpwnam() Funktion habe. Und zwar entdeckt Valgrind immer Fehler, doch ich kann keine Fehler im Quellcode entdecken.
Nach stundenlanger Fehlersuche habe ich leider keine Lust mehr. Vielleicht kann mir ja hier jemand helfen.

Der Quellcode ist:

C++:
int checkForUser(){
     char test[9] = "username";
    printf("Name: %s\n", username);
    
    struct passwd *pwdstruct;
    pwdstruct = getpwnam(test);
    
    if (pwdstruct != NULL){
        return TRUE;
    } else {
        return FALSE;
    } /* of else */
    
} /* of method */


Die Valgrind Fehlermeldung lautet:

Code:
==21279== Invalid read of size 1
==21279==    at 0x928DEA: strcmp (in /lib/ld-2.3.2.so)
==21279==    by 0xA40B79: dl_open_worker (in /lib/libc-2.3.2.so)
==21279==    by 0x923795: _dl_catch_error_internal (in /lib/ld-2.3.2.so)
==21279==    by 0xA409E8: __GI__dl_open (in /lib/libc-2.3.2.so)
==21279==    Address 0xFFFFE210 is not stack'd, malloc'd or free'd
==21279==
==21279== Invalid read of size 1
==21279==    at 0x928DEA: strcmp (in /lib/ld-2.3.2.so)
==21279==    by 0x92315A: openaux (in /lib/ld-2.3.2.so)
==21279==    by 0x923795: _dl_catch_error_internal (in /lib/ld-2.3.2.so)
==21279==    by 0x922CE0: _dl_map_object_deps_internal (in /lib/ld-2.3.2.so)
==21279==    Address 0xFFFFE210 is not stack'd, malloc'd or free'd
Close
==21279== discard syms in /lib/libnss_nis-2.3.2.so due to munmap()
==21279== discard syms in /lib/libnsl-2.3.2.so due to munmap()
==21279== discard syms in /lib/libnss_files-2.3.2.so due to munmap()


Das Problem muss uebrigens an dieser Methode liegen, da der Fehler auch auftritt, wenn ich ausschließlich diese Methode aufrufe.

Gruß,
ET

Dieser Post wurde am 09.06.2004 um 18:21 Uhr von Pablo editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
09.06.2004, 18:03 Uhr
~ET
Gast


PS: Ich hätte vielleicht noch erwähnen sollen, dass es sich um C (nicht C++) Quellcode handelt.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
09.06.2004, 18:32 Uhr
Pablo
Supertux
(Operator)


Was genau funktioniert nicht? Bei mir kompiliert das ohne Warnungen oder sonstiges
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
09.06.2004, 18:41 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


mal davon abgesehen das ichs so umschreiben würde

C++:
int checkForUser(){
    char test[9] = "username";//was soll das hier?
    printf("Name: %s\n", username);// was zum henker ist username wo kommt das her?
    
    struct passwd *pwdstruct;
    pwdstruct = getpwnam(test);

    return pwdstruct != NULL;

} /* of method */



--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
09.06.2004, 19:03 Uhr
Pablo
Supertux
(Operator)



C++:
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <pwd.h>
#include <string.h>

void user_info(const char* user)
{
        struct passwd* pass=NULL;
        pass = getpwnam(user);
        if (!pass) {
                printf("The user '%s' is unknown\n",user);
                return;
        }
        printf("User Name: %s\nuid=%d\ngid=%d\nreal name=%s\nhome dir:%s\nshell: %s\n",
                pass->pw_name,
                pass->pw_uid,
                pass->pw_gid,
                pass->pw_gecos,
                pass->pw_dir,
                pass->pw_shell);
}

int main(int argc, char** argv)
{
        int i;
        char user[20];
        for(i=1; i<argc; ++i) {
                strcpy(user, argv[i]);
                if (argc==1) strcpy(user,getenv("HOME"));
                printf("Printing user information for '%s'\n", user);
                user_info(user);
        }
        return 0;
}



So funktioniert es bei mir
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!

Dieser Post wurde am 09.06.2004 um 19:03 Uhr von Pablo editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
10.06.2004, 08:36 Uhr
virtual
Sexiest Bit alive
(Operator)


Ich kann den Fehler bei mir auch nicht nachvollziehen. Auch bekomme ich vn valgrind keine entsprechende Meldung. Ich kann auch nicht ganz nachvollziehen, warum Du der Meinung bist, daß das getpwnam ein Problem ist, wo valgrind doch ausdrücklich von Problemen im Zusammenhang mit dl_open spricht.
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: