/* SPDX-License-Identifier: LGPL-2.1-or-later */ #include #include #include #include "nss-test-util.h" #include "string-util.h" const char* nss_status_to_string(enum nss_status status, char *buf, size_t buf_len) { switch (status) { case NSS_STATUS_TRYAGAIN: return "NSS_STATUS_TRYAGAIN"; case NSS_STATUS_UNAVAIL: return "NSS_STATUS_UNAVAIL"; case NSS_STATUS_NOTFOUND: return "NSS_STATUS_NOTFOUND"; case NSS_STATUS_SUCCESS: return "NSS_STATUS_SUCCESS"; case NSS_STATUS_RETURN: return "NSS_STATUS_RETURN"; default: (void) snprintf(buf, buf_len, "%i", status); return buf; } }; void* nss_open_handle(const char *dir, const char *module, int flags) { const char *path = NULL; void *handle; if (dir) path = strjoina(dir, "/libnss_", module, ".so.2"); if (!path || access(path, F_OK) < 0) path = strjoina("libnss_", module, ".so.2"); log_debug("Using %s", path); handle = dlopen(path, flags); if (!handle) log_error("Failed to load module %s: %s", module, dlerror()); return handle; }