]> git.ipfire.org Git - thirdparty/tor.git/commitdiff
Always use get_data_directory() instead of options.DataDirectory; fix a memory leak...
authorNick Mathewson <nickm@torproject.org>
Wed, 30 Jun 2004 16:37:08 +0000 (16:37 +0000)
committerNick Mathewson <nickm@torproject.org>
Wed, 30 Jun 2004 16:37:08 +0000 (16:37 +0000)
svn:r1991

src/common/util.c
src/common/util.h
src/or/dirserv.c
src/or/main.c
src/or/router.c

index fb8c015edcaeabf0122aeb0adb4fb7ab677658e5..27d43337afbabdd4345629259cadbeed97f2b7c7 100644 (file)
@@ -1508,7 +1508,7 @@ static int daemon_filedes[2];
  * until finish_daemon is called.  (Note: it's safe to call this more
  * than once: calls after the first are ignored.)
  */
-void start_daemon(char *desired_cwd)
+void start_daemon(const char *desired_cwd)
 {
   pid_t pid;
 
index 40154e8bfa8c9ddef7e14ed6974a7d3cea337f78..4b44d1a44c7f78dc8fc06412e06f4805339a9893 100644 (file)
@@ -235,7 +235,7 @@ int is_internal_IP(uint32_t ip);
 
 const char *get_uname(void);
 
-void start_daemon(char *desired_cwd);
+void start_daemon(const char *desired_cwd);
 void finish_daemon(void);
 
 void write_pidfile(char *filename);
index 6e09ee1ec32cfafb87278070dc39ae393317b289..8252ee077b28711ecdac585aa574a6570bd8a1e7 100644 (file)
@@ -597,7 +597,7 @@ void dirserv_set_cached_directory(const char *directory, time_t when)
     cached_directory = tor_strdup(directory);
     cached_directory_len = strlen(cached_directory);
     cached_directory_published = when;
-    sprintf(filename,"%s/cached-directory", options.DataDirectory);
+    sprintf(filename,"%s/cached-directory", get_data_directory(&options));
     if(write_str_to_file(filename,cached_directory) < 0) {
       log_fn(LOG_WARN, "Couldn't write cached directory to disk. Ignoring.");
     }
@@ -643,7 +643,7 @@ size_t dirserv_get_directory(const char **directory)
       exit(0);
     }
     free(new_directory);
-    sprintf(filename,"%s/cached-directory", options.DataDirectory);
+    sprintf(filename,"%s/cached-directory", get_data_directory(&options));
     if(write_str_to_file(filename,the_directory) < 0) {
       log_fn(LOG_WARN, "Couldn't write cached directory to disk. Ignoring.");
     }
index 99e83f37cd617f2fad2c3a135f57babdc375d507..9aba9cffe7d0bf6668baa65137f9e084dfa39885 100644 (file)
@@ -586,7 +586,7 @@ static int init_from_config(int argc, char **argv) {
 
   /* Start backgrounding the process, if requested. */
   if (options.RunAsDaemon) {
-    start_daemon(options.DataDirectory);
+    start_daemon(get_data_directory(&options));
   }
 
   /* Configure the log(s) */
@@ -638,7 +638,7 @@ static int do_hup(void) {
   }
   if(options.DirPort) {
     /* reload the approved-routers file */
-    sprintf(keydir,"%s/approved-routers", options.DataDirectory);
+    sprintf(keydir,"%s/approved-routers", get_data_directory(&options));
     log_fn(LOG_INFO,"Reloading approved fingerprints from %s...",keydir);
     if(dirserv_parse_fingerprint_file(keydir) < 0) {
       log_fn(LOG_WARN, "Error reloading fingerprints. Continuing with old list.");
@@ -657,7 +657,7 @@ static int do_hup(void) {
     dnsworkers_rotate();
     /* Rebuild fresh descriptor as needed. */
     router_rebuild_descriptor();
-    sprintf(keydir,"%s/router.desc", options.DataDirectory);
+    sprintf(keydir,"%s/router.desc", get_data_directory(&options));
     log_fn(LOG_INFO,"Dumping descriptor to %s...",keydir);
     if (write_str_to_file(keydir, router_get_my_descriptor())) {
       return -1;
index 9d386bbad4de2b780f69265aba8043f1001603b7..26b8d89e1c238ed7014c82583a40036177b57bfd 100644 (file)
@@ -98,7 +98,7 @@ void rotate_onion_key(void)
 {
   char fname[512];
   crypto_pk_env_t *prkey;
-  sprintf(fname,"%s/keys/onion.key",options.DataDirectory);
+  sprintf(fname,"%s/keys/onion.key",get_data_directory(&options));
   if (!(prkey = crypto_new_pk_env())) {
     log(LOG_ERR, "Error creating crypto environment.");
     goto error;
@@ -183,7 +183,7 @@ int init_keys(void) {
   char keydir[512];
   char fingerprint[FINGERPRINT_LEN+MAX_NICKNAME_LEN+3];
   char *cp;
-  const char *tmp, *mydesc;
+  const char *tmp, *mydesc, *datadir;
   crypto_pk_env_t *prkey;
 
   if (!key_lock)
@@ -199,16 +199,17 @@ int init_keys(void) {
     return 0;
   }
   /* Make sure DataDirectory exists, and is private. */
-  tor_assert(options.DataDirectory);
-  if (strlen(options.DataDirectory) > (512-128)) {
+  datadir = get_data_directory(&options);
+  tor_assert(datadir);
+  if (strlen(datadir) > (512-128)) {
     log_fn(LOG_ERR, "DataDirectory is too long.");
     return -1;
   }
-  if (check_private_dir(options.DataDirectory, 1)) {
+  if (check_private_dir(datadir, 1)) {
     return -1;
   }
   /* Check the key directory. */
-  sprintf(keydir,"%s/keys",options.DataDirectory);
+  sprintf(keydir,"%s/keys", datadir);
   if (check_private_dir(keydir, 1)) {
     return -1;
   }
@@ -249,13 +250,13 @@ int init_keys(void) {
     log(LOG_ERR, "Unable to add own descriptor to directory.");
     return -1;
   }
-  sprintf(keydir,"%s/router.desc", options.DataDirectory);
+  sprintf(keydir,"%s/router.desc", datadir);
   log_fn(LOG_INFO,"Dumping descriptor to %s...",keydir);
   if (write_str_to_file(keydir, mydesc)) {
     return -1;
   }
   /* 5. Dump fingerprint to 'fingerprint' */
-  sprintf(keydir,"%s/fingerprint", options.DataDirectory);
+  sprintf(keydir,"%s/fingerprint", datadir);
   log_fn(LOG_INFO,"Dumping fingerprint to %s...",keydir);
   tor_assert(strlen(options.Nickname) <= MAX_NICKNAME_LEN);
   strcpy(fingerprint, options.Nickname);
@@ -271,14 +272,14 @@ int init_keys(void) {
   if(!options.DirPort)
     return 0;
   /* 6. [dirserver only] load approved-routers file */
-  sprintf(keydir,"%s/approved-routers", options.DataDirectory);
+  sprintf(keydir,"%s/approved-routers", datadir);
   log_fn(LOG_INFO,"Loading approved fingerprints from %s...",keydir);
   if(dirserv_parse_fingerprint_file(keydir) < 0) {
     log_fn(LOG_ERR, "Error loading fingerprints");
     return -1;
   }
   /* 7. [dirserver only] load old directory, if it's there */
-  sprintf(keydir,"%s/cached-directory", options.DataDirectory);
+  sprintf(keydir,"%s/cached-directory", datadir);
   log_fn(LOG_INFO,"Loading cached directory from %s...",keydir);
   cp = read_file_to_str(keydir);
   if(!cp) {
@@ -286,12 +287,13 @@ int init_keys(void) {
   } else {
     if(options.AuthoritativeDir && dirserv_load_from_directory_string(cp) < 0){
       log_fn(LOG_ERR, "Cached directory %s is corrupt", keydir);
-      free(cp);
+      tor_free(cp);
       return -1;
     }
     /* set time to 1 so it will be replaced on first download.
      */
     dirserv_set_cached_directory(cp, 1);
+    tor_free(cp);
   }
   /* success */
   return 0;