Browse Source

As far as I can tell, CONFIG_LEGAL_FILENAME_CHARACTERS is both pointless and broken. #if it out, pending agreement from arma. This fixes a bug on win32 that rejected paths with a : in them.

svn:r2309
Nick Mathewson 21 years ago
parent
commit
015232bd39
4 changed files with 15 additions and 2 deletions
  1. 2 0
      src/common/crypto.c
  2. 2 0
      src/common/util.c
  3. 4 0
      src/common/util.h
  4. 7 2
      src/or/config.c

+ 2 - 0
src/common/crypto.c

@@ -344,10 +344,12 @@ int crypto_pk_read_private_key_from_filename(crypto_pk_env_t *env, const char *k
 
   tor_assert(env && keyfile);
 
+#if 0
   if(strspn(keyfile,CONFIG_LEGAL_FILENAME_CHARACTERS) != strlen(keyfile)) {
     /* filename contains nonlegal characters */
     return -1;
   }
+#endif
 
   /* open the keyfile */
   f_pr=fopen(keyfile,"rb");

+ 2 - 0
src/common/util.c

@@ -1507,10 +1507,12 @@ char *read_file_to_str(const char *filename) {
 
   tor_assert(filename);
 
+#if 0
   if(strcspn(filename,CONFIG_LEGAL_FILENAME_CHARACTERS) != 0) {
     log_fn(LOG_WARN,"Filename %s contains illegal characters.",filename);
     return NULL;
   }
+#endif
 
   if(stat(filename, &statbuf) < 0) {
     log_fn(LOG_INFO,"Could not stat %s.",filename);

+ 4 - 0
src/common/util.h

@@ -74,12 +74,16 @@ struct timeval {
 #define tor_close_socket(s) close(s)
 #endif
 
+#if 0
+/* XXXX Remove this -- These lists are incomplete, and detecting bad filenames
+ * is the OS's job. -NM */
 /** Legal characters in a filename */
 #ifdef MS_WINDOWS
 #define CONFIG_LEGAL_FILENAME_CHARACTERS "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.-_/\\ "
 #else
 #define CONFIG_LEGAL_FILENAME_CHARACTERS "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.-_/ "
 #endif
+#endif
 
 #define HEX_CHARACTERS "0123456789ABCDEFabcdef"
 

+ 7 - 2
src/or/config.c

@@ -28,14 +28,17 @@ typedef enum config_type_t {
 /** Largest allowed config line */
 #define CONFIG_LINE_T_MAXLEN 4096
 
+#if 0
 static FILE *config_open(const unsigned char *filename);
 static int config_close(FILE *f);
+#endif
 static struct config_line_t *config_get_commandlines(int argc, char **argv);
 static struct config_line_t *config_get_lines(FILE *f);
 static void config_free_lines(struct config_line_t *front);
 static int config_compare(struct config_line_t *c, const char *key, config_type_t type, void *arg);
 static int config_assign(or_options_t *options, struct config_line_t *list);
 
+#if 0
 /** Open a configuration file for reading */
 static FILE *config_open(const unsigned char *filename) {
   tor_assert(filename);
@@ -51,6 +54,7 @@ static int config_close(FILE *f) {
   tor_assert(f);
   return fclose(f);
 }
+#endif
 
 /** Helper: Read a list of configuration options from the command line. */
 static struct config_line_t *config_get_commandlines(int argc, char **argv) {
@@ -670,9 +674,10 @@ int getconfig(int argc, char **argv, or_options_t *options) {
       }
     }
   }
+  tor_assert(fname);
   log(LOG_DEBUG,"Opening config file '%s'",fname);
 
-  cf = config_open(fname);
+  cf = fopen(fname, "r");
   if(!cf) {
     if(using_default_torrc == 1) {
       log(LOG_NOTICE, "Configuration file '%s' not present, using reasonable defaults.",fname);
@@ -692,7 +697,7 @@ int getconfig(int argc, char **argv, or_options_t *options) {
     if(config_assign(options,cl) < 0)
       return -1;
     config_free_lines(cl);
-    config_close(cf);
+    fclose(cf);
   }
 
 /* go through command-line variables too */