示例#1
0
lt_dlhandle lt_dlopenext(char const *name)
{
	int flags = RTLD_NOW;
	void *handle;
	char buffer[2048];

#ifdef RTLD_GLOBAL
	if (strcmp(name, "rlm_perl") == 0) {
		flags |= RTLD_GLOBAL;
	} else
#endif
		flags |= RTLD_LOCAL;

	/*
	 *	Prefer loading our libraries by absolute path.
	 */
	snprintf(buffer, sizeof(buffer), "%s/%s%s", radlib_dir, name, LT_SHREXT);

	check_lib_access(buffer);

	handle = dlopen(buffer, flags);
	if (handle) return handle;

	strlcpy(buffer, name, sizeof(buffer));

	/*
	 *	FIXME: Make this configurable...
	 */
	strlcat(buffer, LT_SHREXT, sizeof(buffer));

	return dlopen(buffer, flags);
}
示例#2
0
lt_dlhandle lt_dlopenext(char const *name)
{
	int flags = RTLD_NOW;
	void *handle;
	char buffer[2048];
	char *env;

#ifdef RTLD_GLOBAL
	if (strcmp(name, "rlm_perl") == 0) {
		flags |= RTLD_GLOBAL;
	} else
#endif
		flags |= RTLD_LOCAL;

#ifndef NDEBUG
	/*
	 *	Bind all the symbols *NOW* so we don't hit errors later
	 */
	flags |= RTLD_NOW;
#endif
	/*
	 *	Prefer loading our libraries by absolute path.
	 */
	snprintf(buffer, sizeof(buffer), "%s/%s%s", radlib_dir, name, LT_SHREXT);

	DEBUG4("Loading library using absolute path");

	handle = dlopen(buffer, flags);
	if (handle) {
		return handle;
	}
	check_lib_access(buffer);

	DEBUG4("Falling back to linker search path(s)");
	if (DEBUG_ENABLED4) {
#ifdef __APPLE__

		env = getenv("LD_LIBRARY_PATH");
		if (env) {
			DEBUG4("LD_LIBRARY_PATH            : %s", env);
		}
		env = getenv("DYLD_LIBRARY_PATH");
		if (env) {
			DEBUG4("DYLB_LIBRARY_PATH          : %s", env);
		}
		env = getenv("DYLD_FALLBACK_LIBRARY_PATH");
		if (env) {
			DEBUG4("DYLD_FALLBACK_LIBRARY_PATH : %s", env);
		}
		env = getcwd(buffer, sizeof(buffer));
		if (env) {
			DEBUG4("Current directory          : %s", env);
		}
#else
		env = getenv("LD_LIBRARY_PATH");
		if (env) {
			DEBUG4("LD_LIBRARY_PATH  : %s", env);
		}
		DEBUG4("Defaults         : /lib:/usr/lib");
#endif
	}

	strlcpy(buffer, name, sizeof(buffer));
	/*
	 *	FIXME: Make this configurable...
	 */
	strlcat(buffer, LT_SHREXT, sizeof(buffer));

	return dlopen(buffer, flags);
}