mcabber/mcabber/settings.c
changeset 2253 5a107c907e71
parent 2204 ccd4ffa41a1b
child 2268 f5402d705f67
equal deleted inserted replaced
2252:2c7cca6dec6a 2253:5a107c907e71
    93 // The directory is looked up for only once (and the string is never freed,
    93 // The directory is looked up for only once (and the string is never freed,
    94 // but we might change this later).
    94 // but we might change this later).
    95 const gchar *settings_get_mcabber_config_dir(void)
    95 const gchar *settings_get_mcabber_config_dir(void)
    96 {
    96 {
    97   static char *config_dir;
    97   static char *config_dir;
    98   char *home_dir;
    98   const char *home_dir;
    99   GString *sfilename;
    99   GString *sfilename;
   100   FILE *fp;
   100   FILE *fp;
   101 
   101 
   102   if (config_dir)
   102   if (config_dir)
   103     return config_dir;
   103     return config_dir;
   148       }
   148       }
   149       g_free(xdg_config_dir);
   149       g_free(xdg_config_dir);
   150     }
   150     }
   151   }
   151   }
   152 
   152 
   153   // Last guess: home directory itself...
   153   if (!config_dir)
   154   if (!config_dir) {
   154       scr_log_print(LPRINT_NORMAL, "Cannot find configuration directory!\n");
   155     g_string_printf(sfilename, "%s/.mcabberrc", home_dir);
       
   156     if ((fp = fopen(sfilename->str, "r")) != NULL) {
       
   157       fclose(fp);
       
   158       config_dir = g_strdup(home_dir);
       
   159     } else {
       
   160       scr_log_print(LPRINT_NORMAL, "Cannot find/open any configuration file!\n");
       
   161     }
       
   162   }
       
   163 
   155 
   164   g_string_free(sfilename, TRUE);
   156   g_string_free(sfilename, TRUE);
   165   return config_dir;
   157   return config_dir;
   166 }
   158 }
   167 
   159 
   189       scr_LogPrint(LPRINT_LOGNORM, "No file name provided");
   181       scr_LogPrint(LPRINT_LOGNORM, "No file name provided");
   190       return -1;
   182       return -1;
   191     }
   183     }
   192 
   184 
   193     mcabber_conf_dir = settings_get_mcabber_config_dir();
   185     mcabber_conf_dir = settings_get_mcabber_config_dir();
   194     if (!mcabber_conf_dir)
   186     if (!mcabber_conf_dir) {
   195       return -1;
   187       // Try home directory
   196 
   188       const char *home_dir = getenv("HOME");
   197     def_filename = g_strdup_printf("%s/mcabberrc", mcabber_conf_dir);
   189       if (!home_dir) {
       
   190         scr_log_print(LPRINT_NORMAL, "Cannot find any configuration file!\n");
       
   191         err = -1;
       
   192         goto cfg_read_file_return;
       
   193       }
       
   194       def_filename = g_strdup_printf("%s/.mcabberrc", home_dir);
       
   195     } else {
       
   196       def_filename = g_strdup_printf("%s/mcabberrc", mcabber_conf_dir);
       
   197     }
       
   198 
   198     if ((fp = fopen(def_filename, "r")) == NULL) {
   199     if ((fp = fopen(def_filename, "r")) == NULL) {
   199       fprintf(stderr, "Cannot open config file!\n");
   200       fprintf(stderr, "Cannot open config file!\n");
   200       g_free(def_filename);
   201       g_free(def_filename);
   201       err = -1;
   202       err = -1;
   202       goto cfg_read_file_return;
   203       goto cfg_read_file_return;
   203     }
   204     }
   204     // Check configuration file permissions
   205     // Check configuration file permissions
   205     // As it could contain sensitive data, we make it user-readable only.
   206     // As it could contain sensitive data, we make it user-readable only.
   206     checkset_perm(def_filename, TRUE);
   207     checkset_perm(def_filename, TRUE);
   207     scr_log_print(LPRINT_LOGNORM, "Reading %s", def_filename);
   208     scr_log_print(LPRINT_LOGNORM, "Reading %s", def_filename);
   208     // Check mcabber dir.  Here we just warn, we don't change the modes.
   209 
   209     checkset_perm(mcabber_conf_dir, FALSE);
   210     // Check mcabber directory permissions.
       
   211     // Here we just warn, we don't change the mode.
       
   212     if (mcabber_conf_dir)
       
   213       checkset_perm(mcabber_conf_dir, FALSE);
       
   214 
   210     g_free(def_filename);
   215     g_free(def_filename);
   211   } else {
   216   } else {
   212     // filename was specified
   217     // filename was specified
   213     if ((fp = fopen(filename, "r")) == NULL) {
   218     if ((fp = fopen(filename, "r")) == NULL) {
   214       const char *msg = "Cannot open configuration file";
   219       const char *msg = "Cannot open configuration file";