If the module path is relative, prepend the module installation

directory which was specified at configure time.

Inspired by:	NetBSD


git-svn-id: svn+ssh://svn.openpam.org/svn/openpam/trunk@308 185d5e19-27fe-0310-9dcf-9bff6b9f3609
This commit is contained in:
Dag-Erling Smørgrav 2005-06-09 21:32:00 +00:00
parent ee668335b1
commit 9787583d8d
2 changed files with 13 additions and 2 deletions

View File

@ -1,3 +1,5 @@
# $P4: //depot/projects/openpam/lib/Makefile.am#4 $
NULL =
INCLUDES = -I$(top_srcdir)/include
@ -48,6 +50,8 @@ libpam_la_SOURCES = \
pam_vprompt.c \
$(NULL)
libpam_la_CFLAGS = -DOPENPAM_MODULES_DIR='"@OPENPAM_MODULES_DIR@"'
libpam_la_LDFLAGS = -no-undefined -version-info @LIB_MAJ@ @DL_LIBS@
# Not implemented yet:

View File

@ -31,7 +31,7 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
* $P4: //depot/projects/openpam/lib/openpam_dynamic.c#13 $
* $P4: //depot/projects/openpam/lib/openpam_dynamic.c#14 $
*/
#include <dlfcn.h>
@ -57,6 +57,7 @@ pam_module_t *
openpam_dynamic(const char *path)
{
pam_module_t *module;
const char *prefix;
char *vpath;
void *dlh;
int i;
@ -65,8 +66,14 @@ openpam_dynamic(const char *path)
if ((module = calloc(1, sizeof *module)) == NULL)
goto buf_err;
/* Prepend the standard prefix if not an absolute pathname. */
if (path[0] != '/')
prefix = OPENPAM_MODULES_DIR;
else
prefix = "";
/* try versioned module first, then unversioned module */
if (asprintf(&vpath, "%s.%d", path, LIB_MAJ) < 0)
if (asprintf(&vpath, "%s%s.%d", prefix, path, LIB_MAJ) < 0)
goto buf_err;
if ((dlh = dlopen(vpath, RTLD_NOW)) == NULL) {
openpam_log(PAM_LOG_DEBUG, "%s: %s", vpath, dlerror());