comparison mcabber/mcabber/settings.c @ 2253:5a107c907e71

Read $HOME/.mcabberrc if there is no mcabber configuration directory This was broken by ccd4ffa41a1b. This patch should fix issue #146.
author Mikael Berthe <mikael@lilotux.net>
date Sat, 27 Feb 2016 11:28:24 +0100
parents ccd4ffa41a1b
children f5402d705f67
comparison
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";