From: Bradley Nicholes Date: Mon, 29 Mar 2004 23:51:44 +0000 (+0000) Subject: Use apr_temp_dir_get for htpasswd X-Git-Tag: 2.0.50~260 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=83173c5e479cc6e2008e9d849a74b33a2d4806ab;p=thirdparty%2Fapache%2Fhttpd.git Use apr_temp_dir_get for htpasswd Submitted by: Guenter Knauf Reviewed by: thommay, bnicholes, jjclar git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/branches/APACHE_2_0_BRANCH@103208 13f79535-47bb-0310-9956-ffa450edef68 --- diff --git a/STATUS b/STATUS index b15520f25a0..65b80cde66c 100644 --- a/STATUS +++ b/STATUS @@ -1,5 +1,5 @@ APACHE 2.0 STATUS: -*-text-*- -Last modified at [$Date: 2004/03/29 23:43:29 $] +Last modified at [$Date: 2004/03/29 23:51:43 $] Release: @@ -110,10 +110,6 @@ PATCHES TO BACKPORT FROM 2.1 modules/dav/fs/lock.c: r1.31 +1: trawick - *) Use apr_temp_dir_get for htpasswd - support/htpasswd.c: 1.75 - +1: thommay, bnicholes, jjclar - *) Allow Satisfy directives to be influenced by . PR: 14726 include/http_core.h: r1.81 diff --git a/support/htpasswd.c b/support/htpasswd.c index 1833bfe7045..16d83d7b830 100644 --- a/support/htpasswd.c +++ b/support/htpasswd.c @@ -261,12 +261,13 @@ static int exists(char *fname, apr_pool_t *pool) return ((check || sbuf.filetype != APR_REG) ? 0 : 1); } -#ifdef NETWARE -void nwTerminate() +static void terminate(void) { + apr_terminate(); +#ifdef NETWARE pressanykey(); -} #endif +} static void check_args(apr_pool_t *pool, int argc, const char *const argv[], int *alg, int *mask, char **user, char **pwfilename, @@ -379,18 +380,6 @@ static void check_args(apr_pool_t *pool, int argc, const char *const argv[], } } -static char *get_tempname(apr_pool_t *p) -{ - char tn[] = "htpasswd.tmp.XXXXXX"; - char *dirname; - - if (!(dirname = getenv("TEMP")) && !(dirname = getenv("TMPDIR"))) { - dirname = P_tmpdir; - } - dirname = apr_psprintf(p, "%s/%s", dirname, tn); - return dirname; -} - /* * Let's do it. We end up doing a lot of file opening and closing, * but what do we care? This application isn't run constantly. @@ -403,7 +392,8 @@ int main(int argc, const char * const argv[]) char *password = NULL; char *pwfilename = NULL; char *user = NULL; - char *tn; + char tn[] = "htpasswd.tmp.XXXXXX"; + char *dirname; char scratch[MAX_STRING_LEN]; int found = 0; int i; @@ -417,10 +407,7 @@ int main(int argc, const char * const argv[]) #endif apr_app_initialize(&argc, &argv, NULL); - atexit(apr_terminate); -#ifdef NETWARE - atexit(nwTerminate); -#endif + atexit(terminate); apr_pool_create(&pool, NULL); apr_file_open_stderr(&errfile, pool); @@ -519,10 +506,16 @@ int main(int argc, const char * const argv[]) * We can access the files the right way, and we have a record * to add or update. Let's do it.. */ - tn = get_tempname(pool); - if (apr_file_mktemp(&ftemp, tn, 0, pool) != APR_SUCCESS) { + if (apr_temp_dir_get((const char**)&dirname, pool) != APR_SUCCESS) { + apr_file_printf(errfile, "%s: could not determine temp dir\n", + argv[0]); + exit(ERR_FILEPERM); + } + dirname = apr_psprintf(pool, "%s/%s", dirname, tn); + + if (apr_file_mktemp(&ftemp, dirname, 0, pool) != APR_SUCCESS) { apr_file_printf(errfile, "%s: unable to create temporary file %s\n", - argv[0], tn); + argv[0], dirname); exit(ERR_FILEPERM); } @@ -600,7 +593,7 @@ int main(int argc, const char * const argv[]) /* The temporary file has all the data, just copy it to the new location. */ - if (apr_file_copy(tn, pwfilename, APR_FILE_SOURCE_PERMS, pool) != + if (apr_file_copy(dirname, pwfilename, APR_FILE_SOURCE_PERMS, pool) != APR_SUCCESS) { apr_file_printf(errfile, "%s: unable to update file %s\n", argv[0], pwfilename);