--- embedaddon/sudo/plugins/sudoers/group_plugin.c 2012/05/29 12:26:49 1.1.1.2 +++ embedaddon/sudo/plugins/sudoers/group_plugin.c 2014/06/15 16:12:54 1.1.1.4 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2010 Todd C. Miller + * Copyright (c) 2010-2013 Todd C. Miller * * Permission to use, copy, modify, and distribute this software for any * purpose with or without fee is hereby granted, provided that the above @@ -17,7 +17,6 @@ #include #include -#include #include #include #include @@ -38,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; @@ -87,10 +78,10 @@ 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)) { - warningx(_("%s%s: %s"), - (*plugin_info != '/') ? _PATH_SUDO_PLUGIN_DIR : "", plugin_info, - strerror(ENAMETOOLONG)); + if (len <= 0 || (size_t)len >= sizeof(path)) { + errno = ENAMETOOLONG; + warning("%s%s", + (*plugin_info != '/') ? _PATH_SUDO_PLUGIN_DIR : "", plugin_info); goto done; } @@ -100,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; @@ -158,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; } @@ -177,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;