- int rv;
-
- if ((cfp = fopen(file_citadel_config, "rb+")) == NULL)
- perror(file_citadel_config);
- else {
- rv = fwrite((char *) &config, sizeof(struct config), 1, cfp);
- if (rv == -1)
- syslog(LOG_EMERG, "Failed to write: %s [%s]\n",
- file_citadel_config, strerror(errno));
- fclose(cfp);
+ int blocks_written = 0;
+
+ if ((cfp = fopen(file_citadel_config, "w")) != NULL) {
+ blocks_written = fwrite((char *) &config, sizeof(struct config), 1, cfp);
+ if (blocks_written == 1) {
+ fclose(cfp);
+ chown(file_citadel_config, CTDLUID, (-1));
+ chmod(file_citadel_config, 0600);
+ return;
+ }