=================================================================== RCS file: /cvsrepo/anoncvs/cvs/src/usr.bin/sudo/Attic/find_path.c,v retrieving revision 1.7 retrieving revision 1.8 diff -c -r1.7 -r1.8 *** src/usr.bin/sudo/Attic/find_path.c 2003/04/19 21:57:17 1.7 --- src/usr.bin/sudo/Attic/find_path.c 2004/09/28 15:10:51 1.8 *************** *** 1,36 **** /* ! * Copyright (c) 1996, 1998-2003 Todd C. Miller ! * All rights reserved. * ! * Redistribution and use in source and binary forms, with or without ! * modification, are permitted provided that the following conditions ! * are met: * ! * 1. Redistributions of source code must retain the above copyright ! * notice, this list of conditions and the following disclaimer. * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * 3. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * 4. Products derived from this software may not be called "Sudo" nor - * may "Sudo" appear in their names without specific prior written - * permission from the author. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, - * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY - * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL - * THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; - * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR - * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF - * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * * Sponsored in part by the Defense Advanced Research Projects * Agency (DARPA) and Air Force Research Laboratory, Air Force * Materiel Command, USAF, under agreement number F39502-99-1-0512. --- 1,18 ---- /* ! * Copyright (c) 1996, 1998-2004 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 ! * copyright notice and this permission notice appear in all copies. * ! * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES ! * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF ! * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ! * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES ! * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ! * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF ! * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. * * Sponsored in part by the Defense Advanced Research Projects * Agency (DARPA) and Air Force Research Laboratory, Air Force * Materiel Command, USAF, under agreement number F39502-99-1-0512. *************** *** 69,75 **** #include "sudo.h" #ifndef lint ! static const char rcsid[] = "$Sudo: find_path.c,v 1.103 2003/04/16 00:42:10 millert Exp $"; #endif /* lint */ /* --- 51,57 ---- #include "sudo.h" #ifndef lint ! static const char rcsid[] = "$Sudo: find_path.c,v 1.109 2004/08/24 18:01:12 millert Exp $"; #endif /* lint */ /* *************** *** 80,98 **** * but it is in '.' and IGNORE_DOT is set. */ int ! find_path(infile, outfile, path) char *infile; /* file to find */ char **outfile; /* result parameter */ char *path; /* path to search */ { ! static char command[MAXPATHLEN]; /* qualified filename */ char *n; /* for traversing path */ char *origpath; /* so we can free path later */ char *result = NULL; /* result of path/file lookup */ int checkdot = 0; /* check current dir? */ int len; /* length parameter */ ! if (strlen(infile) >= MAXPATHLEN) errx(1, "%s: File name too long", infile); /* --- 62,81 ---- * but it is in '.' and IGNORE_DOT is set. */ int ! find_path(infile, outfile, sbp, path) char *infile; /* file to find */ char **outfile; /* result parameter */ + struct stat *sbp; /* stat result parameter */ char *path; /* path to search */ { ! static char command[PATH_MAX]; /* qualified filename */ char *n; /* for traversing path */ char *origpath; /* so we can free path later */ char *result = NULL; /* result of path/file lookup */ int checkdot = 0; /* check current dir? */ int len; /* length parameter */ ! if (strlen(infile) >= PATH_MAX) errx(1, "%s: File name too long", infile); /* *************** *** 101,107 **** */ if (strchr(infile, '/')) { strlcpy(command, infile, sizeof(command)); /* paranoia */ ! if (sudo_goodpath(command)) { *outfile = command; return(FOUND); } else --- 84,90 ---- */ if (strchr(infile, '/')) { strlcpy(command, infile, sizeof(command)); /* paranoia */ ! if (sudo_goodpath(command, sbp)) { *outfile = command; return(FOUND); } else *************** *** 124,130 **** /* * Search current dir last if it is in PATH This will miss sneaky ! * things like using './' or './/' */ if (*path == '\0' || (*path == '.' && *(path + 1) == '\0')) { checkdot = 1; --- 107,113 ---- /* * Search current dir last if it is in PATH This will miss sneaky ! * things like using './' or './/' */ if (*path == '\0' || (*path == '.' && *(path + 1) == '\0')) { checkdot = 1; *************** *** 138,144 **** len = snprintf(command, sizeof(command), "%s/%s", path, infile); if (len <= 0 || len >= sizeof(command)) errx(1, "%s: File name too long", infile); ! if ((result = sudo_goodpath(command))) break; path = n + 1; --- 121,127 ---- len = snprintf(command, sizeof(command), "%s/%s", path, infile); if (len <= 0 || len >= sizeof(command)) errx(1, "%s: File name too long", infile); ! if ((result = sudo_goodpath(command, sbp))) break; path = n + 1; *************** *** 150,157 **** * Check current dir if dot was in the PATH */ if (!result && checkdot) { ! result = sudo_goodpath(infile); ! if (result && def_flag(I_IGNORE_DOT)) return(NOT_FOUND_DOT); } --- 133,140 ---- * Check current dir if dot was in the PATH */ if (!result && checkdot) { ! result = sudo_goodpath(infile, sbp); ! if (result && def_ignore_dot) return(NOT_FOUND_DOT); }