getpwnam_error.c
author Markus Bröker<broeker.markus@googlemail.com>
Sun, 10 Feb 2019 13:17:01 +0100
changeset 173 374a86886bc5
parent 77 49e0babccb23
permissions -rw-r--r--
LAST-DIGIT-BUG: INCREMENT before LF

/**
 * getpwnam_error.c
 * Copyright (C) 2008 Markus Broeker
 */

#include <stdio.h>
#include <stdlib.h>

#include <pwd.h>

/**
==7531==
==7531== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 25 from 2)
==7531== malloc/free: in use at exit: 156 bytes in 11 blocks.
==7531== malloc/free: 66 allocs, 55 frees, 6,342 bytes allocated.
==7531== For counts of detected errors, rerun with: -v
==7531== searching for pointers to 11 not-freed blocks.
==7531== checked 60,444 bytes.
==7531==
==7531== 156 (36 direct, 120 indirect) bytes in 1 blocks are definitely lost in loss record 1 of 3
==7531==    at 0x4022D6E: malloc (vg_replace_malloc.c:207)
==7531==    by 0x412C7E0: (within /lib/i686/cmov/libc-2.7.so)
==7531==    by 0x412D0DB: __nss_database_lookup (in /lib/i686/cmov/libc-2.7.so)
==7531==    by 0x4596F5B: ???
==7531==    by 0x4597CF6: ???
==7531==    by 0x40D3BD1: getpwnam_r (in /lib/i686/cmov/libc-2.7.so)
==7531==    by 0x40D3646: getpwnam (in /lib/i686/cmov/libc-2.7.so)
==7531==    by 0x8048478: main (getpwnam_error.c:48)
==7531==
==7531== LEAK SUMMARY:
==7531==    definitely lost: 36 bytes in 1 blocks.
==7531==    indirectly lost: 120 bytes in 10 blocks.
==7531==      possibly lost: 0 bytes in 0 blocks.
==7531==    still reachable: 0 bytes in 0 blocks.
==7531==         suppressed: 0 bytes in 0 blocks.
*/

/*
 * LD_PRELOAD=/lib/libnss_compat.so.2 valgrind --leak-check=full \
 * ./getpwnam_error
 * fixes it - Many thanks to telexicon for reporting this...
 *
 */

int main (int argc, char **argv)
{
    struct passwd *pwd;
    char *user;

    if ((user = getenv ("USER")) == NULL) {
        printf ("This system isn't supported yet\n");
        return EXIT_FAILURE;
    }

    if ((pwd = getpwnam (user)) == NULL) {
        printf ("I wasn't able to retrieve the neccessary data\n");
        return EXIT_FAILURE;
    }

    printf ("Your full name: %s\n", pwd->pw_gecos);

    return EXIT_SUCCESS;
}