]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
Fix the logic in config_text_file_save so that if an
authorMark Michelson <mmichelson@digium.com>
Mon, 25 Aug 2008 15:52:59 +0000 (15:52 +0000)
committerMark Michelson <mmichelson@digium.com>
Mon, 25 Aug 2008 15:52:59 +0000 (15:52 +0000)
UpdateConfig manager action is issued and the
file specified in DstFileName does not yet exist,
an error is not returned.

(closes issue #13341)
Reported by: vadim
Patches:
      13341.patch uploaded by putnopvut (license 60)
  (with small modification from seanbright)

git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@139769 65c4cc65-6c06-0410-ace0-fbb531ad65f3

main/config.c

index 26404af953d617820c33082b7798353a88301d00..6163f827a493986ffc6ce220aa590369578e7326 100644 (file)
@@ -1013,6 +1013,7 @@ int config_text_file_save(const char *configfile, const struct ast_config *cfg,
        struct ast_comment *cmt;
        struct stat s;
        int blanklines = 0;
+       int stat_result = 0;
 
        if (configfile[0] == '/') {
                snprintf(fntmp, sizeof(fntmp), "%s.XXXXXX", configfile);
@@ -1124,10 +1125,11 @@ int config_text_file_save(const char *configfile, const struct ast_config *cfg,
                        close(fd);
                return -1;
        }
-       stat(fn, &s);
-       fchmod(fd, s.st_mode);
+       if (!(stat_result = stat(fn, &s))) {
+               fchmod(fd, s.st_mode);
+       }
        fclose(f);
-       if (unlink(fn) || link(fntmp, fn)) {
+       if ((!stat_result && unlink(fn)) || link(fntmp, fn)) {
                if (option_debug)
                        ast_log(LOG_DEBUG, "Unable to open for writing: %s (%s)\n", fn, strerror(errno));
                if (option_verbose > 1)