--- /dev/null
+--- zsh.org/Src/hist.c.org 2005-12-16 10:51:24.680963000 +0100
++++ zsh/Src/hist.c 2005-12-16 10:59:14.100963000 +0100
+@@ -2127,8 +2127,18 @@
+ }
+ fclose(out);
+ if (tmpfile) {
++ struct stat sb;
++ int restore = 0;
++ if (stat(unmeta(fn), &sb) == 0)
++ restore = 1;
+ if (rename(tmpfile, unmeta(fn)) < 0)
+ zerr("can't rename %s.new to $HISTFILE", fn, 0);
++ else if (restore) {
++ if (chown(unmeta(fn), sb.st_uid, sb.st_gid) < 0)
++ zerr("can't restore user/group on $HISTFILE", 0);
++ if (chmod(unmeta(fn), sb.st_mode) < 0)
++ zerr("can't restore permissions on $HISTFILE", 0);
++ }
+ free(tmpfile);
+ }
+