--- embedaddon/sudo/plugins/sudoers/group_plugin.c 2013/07/22 10:46:12 1.1.1.3 +++ embedaddon/sudo/plugins/sudoers/group_plugin.c 2014/06/15 16:12:54 1.1.1.4 @@ -37,24 +37,16 @@ #ifdef HAVE_UNISTD_H # include #endif /* HAVE_UNISTD_H */ -#if TIME_WITH_SYS_TIME +#ifdef TIME_WITH_SYS_TIME # include #endif -#ifdef HAVE_DLOPEN -# include -#else -# include "compat/dlfcn.h" -#endif #include #include #include #include "sudoers.h" +#include "sudo_dso.h" -#ifndef RTLD_GLOBAL -# define RTLD_GLOBAL 0 -#endif - #if defined(HAVE_DLOPEN) || defined(HAVE_SHL_LOAD) static void *group_handle; @@ -86,7 +78,7 @@ group_plugin_load(char *plugin_info) len = snprintf(path, sizeof(path), "%s%s", (*plugin_info != '/') ? _PATH_SUDO_PLUGIN_DIR : "", plugin_info); } - if (len <= 0 || len >= sizeof(path)) { + if (len <= 0 || (size_t)len >= sizeof(path)) { errno = ENAMETOOLONG; warning("%s%s", (*plugin_info != '/') ? _PATH_SUDO_PLUGIN_DIR : "", plugin_info); @@ -99,28 +91,28 @@ group_plugin_load(char *plugin_info) goto done; } if (sb.st_uid != ROOT_UID) { - warningx(_("%s must be owned by uid %d"), path, ROOT_UID); + warningx(U_("%s must be owned by uid %d"), path, ROOT_UID); goto done; } if ((sb.st_mode & (S_IWGRP|S_IWOTH)) != 0) { - warningx(_("%s must only be writable by owner"), path); + warningx(U_("%s must only be writable by owner"), path); goto done; } /* Open plugin and map in symbol. */ - group_handle = dlopen(path, RTLD_LAZY|RTLD_GLOBAL); + group_handle = sudo_dso_load(path, SUDO_DSO_LAZY|SUDO_DSO_GLOBAL); if (!group_handle) { - warningx(_("unable to dlopen %s: %s"), path, dlerror()); + warningx(U_("unable to load %s: %s"), path, sudo_dso_strerror()); goto done; } - group_plugin = dlsym(group_handle, "group_plugin"); + group_plugin = sudo_dso_findsym(group_handle, "group_plugin"); if (group_plugin == NULL) { - warningx(_("unable to find symbol \"group_plugin\" in %s"), path); + warningx(U_("unable to find symbol \"group_plugin\" in %s"), path); goto done; } if (GROUP_API_VERSION_GET_MAJOR(group_plugin->version) != GROUP_API_VERSION_MAJOR) { - warningx(_("%s: incompatible group plugin major version %d, expected %d"), + warningx(U_("%s: incompatible group plugin major version %d, expected %d"), path, GROUP_API_VERSION_GET_MAJOR(group_plugin->version), GROUP_API_VERSION_MAJOR); goto done; @@ -157,7 +149,7 @@ done: if (rc != true) { if (group_handle != NULL) { - dlclose(group_handle); + sudo_dso_unload(group_handle); group_handle = NULL; group_plugin = NULL; } @@ -176,7 +168,7 @@ group_plugin_unload(void) group_plugin = NULL; } if (group_handle != NULL) { - dlclose(group_handle); + sudo_dso_unload(group_handle); group_handle = NULL; } debug_return;