trawick 00/11/12 19:18:19
Modified: src CHANGES src/modules/standard config.m4 mod_userdir.c src/lib/apr configure.in src/lib/apr/include apr.h.in apr.hw Added: src/lib/apr/user/unix .cvsignore homedir.c Makefile.in src/lib/apr/include apr_user.h Log: add apr_get_home_directory(), teach mod_userdir to use that instead of calling getpwnam[_r] directly, back out mod_userdir's config check for getpwnam_r Revision Changes Path 1.319 +2 -0 apache-2.0/src/CHANGES Index: CHANGES =================================================================== RCS file: /home/cvs/apache-2.0/src/CHANGES,v retrieving revision 1.318 retrieving revision 1.319 diff -u -r1.318 -r1.319 --- CHANGES 2000/11/11 06:05:57 1.318 +++ CHANGES 2000/11/13 03:18:18 1.319 @@ -1,4 +1,6 @@ Changes with Apache 2.0a8 + *) APR: add apr_get_home_directory() [Jeff Trawick] + *) Not all platforms have INADDR_NONE defined by default. Apache used to make this check and define INADDR_NONE if appropriate, but APR needs the check too, and I suspect other applications will 1.32 +1 -3 apache-2.0/src/modules/standard/config.m4 Index: config.m4 =================================================================== RCS file: /home/cvs/apache-2.0/src/modules/standard/config.m4,v retrieving revision 1.31 retrieving revision 1.32 diff -u -r1.31 -r1.32 --- config.m4 2000/11/10 23:52:18 1.31 +++ config.m4 2000/11/13 03:18:18 1.32 @@ -25,9 +25,7 @@ APACHE_CHECK_STANDARD_MODULE(imap, internal imagemaps, , yes) APACHE_CHECK_STANDARD_MODULE(actions, Action triggering on requests, action, yes) APACHE_CHECK_STANDARD_MODULE(speling, correct common URL misspellings, , no) -APACHE_CHECK_STANDARD_MODULE(userdir, mapping of user requests, , yes, [ - AC_CHECK_FUNCS(getpwnam_r) -]) +APACHE_CHECK_STANDARD_MODULE(userdir, mapping of user requests, , yes) APACHE_CHECK_STANDARD_MODULE(suexec, set uid and gid for spawned processes, , no) APACHE_CHECK_STANDARD_MODULE(alias, translation of requests, , yes) 1.27 +13 -21 apache-2.0/src/modules/standard/mod_userdir.c Index: mod_userdir.c =================================================================== RCS file: /home/cvs/apache-2.0/src/modules/standard/mod_userdir.c,v retrieving revision 1.26 retrieving revision 1.27 diff -u -r1.26 -r1.27 --- mod_userdir.c 2000/11/10 23:52:18 1.26 +++ mod_userdir.c 2000/11/13 03:18:18 1.27 @@ -96,6 +96,7 @@ #endif #include "apr_strings.h" +#include "apr_user.h" #include "ap_config.h" #include "httpd.h" #include "http_config.h" @@ -103,9 +104,6 @@ #ifdef HAVE_UNIX_SUEXEC #include "unixd.h" /* Contains the suexec_identity hook used on Unix */ #endif -#ifdef HAVE_PWD_H -#include <pwd.h> -#endif #ifdef HAVE_UNISTD_H #include <unistd.h> #endif @@ -320,29 +318,23 @@ return HTTP_MOVED_TEMPORARILY; } else { -#ifdef WIN32 - /* Need to figure out home dirs on NT */ - return DECLINED; -#else /* WIN32 */ - struct passwd *pw; - -#if APR_HAS_THREADS && defined(HAVE_GETPWNAM_R) - struct passwd pwd; - size_t buflen = sysconf(_SC_GETPW_R_SIZE_MAX); - char *buf = apr_pcalloc(r->pool, buflen); +#if APR_HAS_USER + char *homedir; - if (!getpwnam_r(w, &pwd, buf, buflen, &pw)) { -#else - if ((pw = getpwnam(w))) { -#endif -#ifdef OS2 + if (apr_get_home_directory(&homedir, w, r->pool) == APR_SUCCESS) { +#ifdef OS2 /* XXX should this OS/2 logic move to APR? */ /* Need to manually add user name for OS/2 */ - filename = apr_pstrcat(r->pool, pw->pw_dir, w, "/", userdir, NULL); + filename = apr_pstrcat(r->pool, homedir, w, "/", userdir, NULL); #else - filename = apr_pstrcat(r->pool, pw->pw_dir, "/", userdir, NULL); + filename = apr_pstrcat(r->pool, homedir, "/", userdir, NULL); #endif } -#endif /* WIN32 */ + else { + /* XXX old code ignored this error... */ + } +#else + return DECLINED; +#endif } /* 1.172 +2 -1 apache-2.0/src/lib/apr/configure.in Index: configure.in =================================================================== RCS file: /home/cvs/apache-2.0/src/lib/apr/configure.in,v retrieving revision 1.171 retrieving revision 1.172 diff -u -r1.171 -r1.172 --- configure.in 2000/11/12 14:46:11 1.171 +++ configure.in 2000/11/13 03:18:18 1.172 @@ -35,7 +35,7 @@ # These added to allow default directories to be used... DEFAULT_OSDIR="unix" echo "(Default will be ${DEFAULT_OSDIR})" -MODULES="file_io network_io threadproc misc locks time mmap shmem i18n" +MODULES="file_io network_io threadproc misc locks time mmap shmem i18n user" # Most platforms use a prefix of 'lib' on their library files. LIBPREFIX='lib' @@ -268,6 +268,7 @@ AC_CHECK_HEADERS(netdb.h) AC_CHECK_HEADERS(osreldate.h) AC_CHECK_HEADERS(process.h) +AC_CHECK_HEADERS(pwd.h) AC_CHECK_HEADERS(sys/sem.h) AC_CHECK_HEADERS(signal.h, signalh="1", signalh="0") AC_CHECK_HEADERS(stdarg.h, stdargh="1", stdargh="0") 1.1 apache-2.0/src/lib/apr/user/unix/.cvsignore Index: .cvsignore =================================================================== Makefile 1.1 apache-2.0/src/lib/apr/user/unix/homedir.c Index: homedir.c =================================================================== /* ==================================================================== * The Apache Software License, Version 1.1 * * Copyright (c) 2000 The Apache Software Foundation. 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 end-user documentation included with the redistribution, * if any, must include the following acknowledgment: * "This product includes software developed by the * Apache Software Foundation (http://www.apache.org/)." * Alternately, this acknowledgment may appear in the software itself, * if and wherever such third-party acknowledgments normally appear. * * 4. The names "Apache" and "Apache Software Foundation" must * not be used to endorse or promote products derived from this * software without prior written permission. For written * permission, please contact [EMAIL PROTECTED] * * 5. Products derived from this software may not be called "Apache", * nor may "Apache" appear in their name, without prior written * permission of the Apache Software Foundation. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED 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 APACHE SOFTWARE FOUNDATION OR * ITS CONTRIBUTORS 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. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Software Foundation. For more * information on the Apache Software Foundation, please see * <http://www.apache.org/>. */ #include "apr_strings.h" #include "apr_portable.h" #include "apr_user.h" #include "apr_private.h" #ifdef HAVE_PWD_H #include <pwd.h> #endif #if APR_HAVE_SYS_TYPES_H #include <sys/types.h> #endif apr_status_t apr_get_home_directory(char **dirname, const char *userid, apr_pool_t *p) { struct passwd *pw; #if APR_HAS_THREADS && defined(_POSIX_THREAD_SAFE_FUNCTIONS) struct passwd pwd; char pwbuf[512]; #endif #if APR_HAS_THREADS && defined(_POSIX_THREAD_SAFE_FUNCTIONS) if (!getpwnam_r(userid, &pwd, pwbuf, sizeof(pwbuf), &pw)) { #else if ((pw = getpwnam(userid)) != NULL) { #endif *dirname = apr_pstrdup(p, pw->pw_dir); } else { return errno; } return APR_SUCCESS; } 1.1 apache-2.0/src/lib/apr/user/unix/Makefile.in Index: Makefile.in =================================================================== [EMAIL PROTECTED]@ [EMAIL PROTECTED]@ [EMAIL PROTECTED]@ [EMAIL PROTECTED]@ @OPTIM@ [EMAIL PROTECTED]@ [EMAIL PROTECTED]@ $(LIBS) INCDIR=../../include INCLUDES=-I$(INCDIR) -I$(INCDIR)/arch OBJS=homedir.o .c.o: $(CC) $(CFLAGS) -c $(INCLUDES) $< all: $(OBJS) clean: $(RM) -f *.o *.a *.so distclean: clean -$(RM) -f Makefile # # We really don't expect end users to use this rule. It works only with # gcc, and rebuilds Makefile.in. You have to re-run configure after # using it. # depend: cp Makefile.in Makefile.in.bak \ && sed -ne '1,/^# DO NOT REMOVE/p' Makefile.in > Makefile.new \ && gcc -MM $(INCLUDES) $(CFLAGS) *.c >> Makefile.new \ && sed -e '1,$$s: $(INCDIR)/: $$(INCDIR)/:g' \ -e '1,$$s: $(OSDIR)/: $$(OSDIR)/:g' Makefile.new \ > Makefile.in \ && rm Makefile.new # DO NOT REMOVE homedir.o: homedir.c $(INCDIR)/apr_strings.h $(INCDIR)/apr.h \ $(INCDIR)/apr_lib.h $(INCDIR)/apr_pools.h \ $(INCDIR)/apr_thread_proc.h $(INCDIR)/apr_file_io.h \ $(INCDIR)/apr_general.h $(INCDIR)/apr_errno.h \ $(INCDIR)/apr_time.h $(INCDIR)/apr_tables.h \ $(INCDIR)/apr_portable.h $(INCDIR)/apr_network_io.h \ $(INCDIR)/apr_lock.h $(INCDIR)/apr_dso.h \ $(INCDIR)/apr_user.h $(INCDIR)/apr_private.h 1.51 +1 -0 apache-2.0/src/lib/apr/include/apr.h.in Index: apr.h.in =================================================================== RCS file: /home/cvs/apache-2.0/src/lib/apr/include/apr.h.in,v retrieving revision 1.50 retrieving revision 1.51 diff -u -r1.50 -r1.51 --- apr.h.in 2000/11/11 06:05:59 1.50 +++ apr.h.in 2000/11/13 03:18:19 1.51 @@ -96,6 +96,7 @@ #define APR_HAS_OTHER_CHILD @oc@ #define APR_HAS_DSO @aprdso@ #define APR_HAS_UNICODE_FS 0 +#define APR_HAS_USER 1 /* This macro tells APR that it is safe to make a file masquerade as a * socket. This is necessary, because some platforms support poll'ing 1.36 +2 -0 apache-2.0/src/lib/apr/include/apr.hw Index: apr.hw =================================================================== RCS file: /home/cvs/apache-2.0/src/lib/apr/include/apr.hw,v retrieving revision 1.35 retrieving revision 1.36 diff -u -r1.35 -r1.36 --- apr.hw 2000/11/13 02:57:25 1.35 +++ apr.hw 2000/11/13 03:18:19 1.36 @@ -160,6 +160,8 @@ */ #define APR_HAS_UNICODE_FS 1 +#define APR_HAS_USER 0 + /* Not all platforms have a real INADDR_NONE. This macro replaces INADDR_NONE * on all platforms. */ 1.1 apache-2.0/src/lib/apr/include/apr_user.h Index: apr_user.h =================================================================== /* ==================================================================== * The Apache Software License, Version 1.1 * * Copyright (c) 2000 The Apache Software Foundation. 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 end-user documentation included with the redistribution, * if any, must include the following acknowledgment: * "This product includes software developed by the * Apache Software Foundation (http://www.apache.org/)." * Alternately, this acknowledgment may appear in the software itself, * if and wherever such third-party acknowledgments normally appear. * * 4. The names "Apache" and "Apache Software Foundation" must * not be used to endorse or promote products derived from this * software without prior written permission. For written * permission, please contact [EMAIL PROTECTED] * * 5. Products derived from this software may not be called "Apache", * nor may "Apache" appear in their name, without prior written * permission of the Apache Software Foundation. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED 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 APACHE SOFTWARE FOUNDATION OR * ITS CONTRIBUTORS 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. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Software Foundation. For more * information on the Apache Software Foundation, please see * <http://www.apache.org/>. */ #ifndef APR_USER_H #define APR_USER_H #include "apr.h" #if APR_HAS_USER #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ /** * @package APR user id services */ /*** * Get the home directory for a specified userid. * @param dirname Pointer to new string containing directory name (on output) * @param userid The userid * @param p The pool from which to allocate the string * @deffunc apr_status_t apr_get_home_directory(char **dirname, const char *userid, apr_pool_t *p) * @tip This function is available only if APR_HAS_USER is defined. */ apr_status_t apr_get_home_directory(char **dirname, const char *userid, apr_pool_t *p); #ifdef __cplusplus } #endif #endif /* ! APR_HAS_USER */ #endif /* ! APR_USER_H */