Changeset 516 in openpam for trunk


Ignore:
Timestamp:
Jan 10, 2012, 9:26:34 PM (8 years ago)
Author:
Dag-Erling Smørgrav
Message:

Use fdlopen(3) if it is available.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/lib/openpam_dynamic.c

    r502 r516  
    4141
    4242#include <dlfcn.h>
     43#include <fcntl.h>
    4344#include <errno.h>
    4445#include <stdio.h>
     
    6162 */
    6263
     64#ifdef HAVE_FDLOPEN
    6365static void *
    6466try_dlopen(const char *modfn)
    6567{
     68        void *dlh;
     69        int fd;
     70
     71        if ((fd = open(modfn, O_RDONLY)) < 0)
     72                return (NULL);
     73        if (openpam_check_desc_owner_perms(modfn, fd) != 0) {
     74                close(fd);
     75                return (NULL);
     76        }
     77        if ((dlh = fdlopen(fd, RTLD_NOW)) == NULL) {
     78                openpam_log(PAM_LOG_ERROR, "%s: %s", modfn, dlerror());
     79                close(fd);
     80                errno = 0;
     81                return (NULL);
     82        }
     83        close(fd);
     84        return (dlh);
     85}
     86#else
     87static void *
     88try_dlopen(const char *modfn)
     89{
     90        void *dlh;
    6691
    6792        if (openpam_check_path_owner_perms(modfn) != 0)
    6893                return (NULL);
    69         return (dlopen(modfn, RTLD_NOW));
     94        if ((dlh = dlopen(modfn, RTLD_NOW)) == NULL) {
     95                openpam_log(PAM_LOG_ERROR, "%s: %s", modfn, dlerror());
     96                errno = 0;
     97                return (NULL);
     98        }
     99        return (dlh);
    70100}
     101#endif
    71102   
    72103/*
     
    125156        FREE(module);
    126157err:
    127         openpam_log(PAM_LOG_ERROR, "%m");
     158        if (errno != 0)
     159                openpam_log(PAM_LOG_ERROR, "%s: %m", path);
    128160        return (NULL);
    129161}
Note: See TracChangeset for help on using the changeset viewer.