--- embedaddon/sudo/plugins/sudoers/find_path.c 2012/05/29 12:26:49 1.1.1.2 +++ embedaddon/sudo/plugins/sudoers/find_path.c 2014/06/15 16:12:54 1.1.1.4 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1996, 1998-2005, 2010-2011 + * Copyright (c) 1996, 1998-2005, 2010-2013 * Todd C. Miller * * Permission to use, copy, modify, and distribute this software for any @@ -22,7 +22,6 @@ #include #include -#include #include #include #ifdef STDC_HEADERS @@ -65,8 +64,10 @@ find_path(char *infile, char **outfile, struct stat *s int len; /* length parameter */ debug_decl(find_path, SUDO_DEBUG_UTIL) - if (strlen(infile) >= PATH_MAX) - errorx(1, _("%s: %s"), infile, strerror(ENAMETOOLONG)); + if (strlen(infile) >= PATH_MAX) { + errno = ENAMETOOLONG; + fatal("%s", infile); + } /* * If we were given a fully qualified or relative path @@ -104,8 +105,10 @@ find_path(char *infile, char **outfile, struct stat *s * Resolve the path and exit the loop if found. */ len = snprintf(command, sizeof(command), "%s/%s", path, infile); - if (len <= 0 || len >= sizeof(command)) - errorx(1, _("%s: %s"), infile, strerror(ENAMETOOLONG)); + if (len <= 0 || (size_t)len >= sizeof(command)) { + errno = ENAMETOOLONG; + fatal("%s", infile); + } if ((found = sudo_goodpath(command, sbp))) break; @@ -119,8 +122,10 @@ find_path(char *infile, char **outfile, struct stat *s */ if (!found && checkdot) { len = snprintf(command, sizeof(command), "./%s", infile); - if (len <= 0 || len >= sizeof(command)) - errorx(1, _("%s: %s"), infile, strerror(ENAMETOOLONG)); + if (len <= 0 || (size_t)len >= sizeof(command)) { + errno = ENAMETOOLONG; + fatal("%s", infile); + } found = sudo_goodpath(command, sbp); if (found && ignore_dot) debug_return_int(NOT_FOUND_DOT);