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"; |