]> granicus.if.org Git - apache/commitdiff
htpasswd.c: various cleanups and move to using apr_temp_dir_get()
authorThom May <thommay@apache.org>
Sat, 13 Mar 2004 22:18:19 +0000 (22:18 +0000)
committerThom May <thommay@apache.org>
Sat, 13 Mar 2004 22:18:19 +0000 (22:18 +0000)
Submitted by: Guenter Knauf
Reviewed by: Thom May

git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@102950 13f79535-47bb-0310-9956-ffa450edef68

CHANGES
support/htpasswd.c

diff --git a/CHANGES b/CHANGES
index ceb0b1a85ebaf06bf139f84cafb2e58c6810dfce..c5b88b0aa63e931d9aff75a83e6b6667b849ed1d 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -2,6 +2,9 @@ Changes with Apache 2.1.0-dev
 
   [Remove entries to the current 2.0 section below, when backported]
 
+  *) htpasswd: use apr_temp_dir_get() and general cleanup
+     [Guenter Knauf <eflash gmx.net>, Thom May]
+
   *) mod_proxy: Fix handling of non-200 success status codes when
      "ProxyErrorOverride On" is configured.  PR 20183.
      [Marcus Janson <marcus.janson tre.se>, Joe Orton]
index 1833bfe704512ee7b66bb2b0fb69b67c5d258d50..16d83d7b830a80ae05a3241b118b7c5b7bd64179 100644 (file)
@@ -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);