Mercurial > hg > early-roguelike
comparison arogue5/save.c @ 66:c56f672244f4
arogue5: close security holes.
Prevent whoami (player name), file_name, and score_file from being
changed if the systemwide save location is being used.
author | elwin |
---|---|
date | Sat, 11 Aug 2012 16:27:20 +0000 |
parents | a98834ce7e04 |
children | c49f7927b0fa |
comparison
equal
deleted
inserted
replaced
65:7aff18a8d508 | 66:c56f672244f4 |
---|---|
39 * get file name | 39 * get file name |
40 */ | 40 */ |
41 mpos = 0; | 41 mpos = 0; |
42 if (file_name[0] != '\0') | 42 if (file_name[0] != '\0') |
43 { | 43 { |
44 msg("Save file (%s)? ", file_name); | 44 if (use_savedir) |
45 msg("Save game? "); | |
46 else | |
47 msg("Save file (%s)? ", file_name); | |
45 do | 48 do |
46 { | 49 { |
47 c = readchar(); | 50 c = readchar(); |
48 if (c == ESCAPE) return(0); | 51 if (c == ESCAPE) return(0); |
49 } while (c != 'n' && c != 'N' && c != 'y' && c != 'Y'); | 52 } while (c != 'n' && c != 'N' && c != 'y' && c != 'Y'); |
51 if (c == 'y' || c == 'Y') | 54 if (c == 'y' || c == 'Y') |
52 { | 55 { |
53 msg("File name: %s", file_name); | 56 msg("File name: %s", file_name); |
54 goto gotfile; | 57 goto gotfile; |
55 } | 58 } |
59 if (use_savedir) { | |
60 msg(""); | |
61 return FALSE; | |
62 } | |
56 } | 63 } |
57 | 64 |
58 do | 65 do |
59 { | 66 { |
60 msg("File name: "); | 67 msg("File name: "); |
67 } | 74 } |
68 msg(""); | 75 msg(""); |
69 strcpy(file_name, buf); | 76 strcpy(file_name, buf); |
70 gotfile: | 77 gotfile: |
71 if ((savef = fopen(file_name, "w")) == NULL) | 78 if ((savef = fopen(file_name, "w")) == NULL) |
79 { | |
72 msg(strerror(errno)); /* fake perror() */ | 80 msg(strerror(errno)); /* fake perror() */ |
81 if (use_savedir) | |
82 return FALSE; | |
83 } | |
73 } while (savef == NULL); | 84 } while (savef == NULL); |
74 | 85 |
75 /* | 86 /* |
76 * write out encrpyted file (after a stat) | 87 * write out encrpyted file (after a stat) |
77 * The fwrite is to force allocation of the buffer before the write | 88 * The fwrite is to force allocation of the buffer before the write |