Mercurial > go > multipass
comparison file/file.go @ 9:e58bfc7fc207
Make multipass files default all-readable.
| author | Paul Fisher <paul@pfish.zone> |
|---|---|
| date | Sun, 25 Oct 2015 10:45:32 -0400 |
| parents | c18bc7b9d1d9 |
| children | 1246b4b9028b |
comparison
equal
deleted
inserted
replaced
| 8:4db389f948c9 | 9:e58bfc7fc207 |
|---|---|
| 141 | 141 |
| 142 func openWriteHandle(tempName, fileName string) (*writeHandle, error) { | 142 func openWriteHandle(tempName, fileName string) (*writeHandle, error) { |
| 143 h := new(writeHandle) | 143 h := new(writeHandle) |
| 144 h.tempName = tempName | 144 h.tempName = tempName |
| 145 h.fileName = fileName | 145 h.fileName = fileName |
| 146 // Open the output file, readable only by the current user. | 146 // Open the output file, readable by everybody, but only if it doesn't exist. |
| 147 // This prevents race conditions. | |
| 147 oldUmask := unix.Umask(077) | 148 oldUmask := unix.Umask(077) |
| 148 tempFile, err := os.Create(tempName) | 149 tempFile, err := os.OpenFile(tempName, os.O_CREATE | os.O_EXCL | os.O_WRONLY | os.O_SYNC, 0600) |
| 149 unix.Umask(oldUmask) | 150 unix.Umask(oldUmask) |
| 150 if err != nil { | 151 if err != nil { |
| 151 return nil, err | 152 return nil, err |
| 152 } | 153 } |
| 153 h.tempFile = tempFile | 154 h.tempFile = tempFile |
| 176 } | 177 } |
| 177 if err := h.tempFile.Chmod(inStat.Mode()); err != nil { | 178 if err := h.tempFile.Chmod(inStat.Mode()); err != nil { |
| 178 h.bail() | 179 h.bail() |
| 179 return nil, err | 180 return nil, err |
| 180 } | 181 } |
| 181 } | 182 } else { |
| 182 // TODO(pfish): If there is no input file, set the right permissions + group on the output file. | 183 // TODO(pfish): Restrict ACL to only multipass authenticators. |
| 184 if err := h.tempFile.Chmod(0644); err != nil { | |
| 185 h.bail() | |
| 186 return nil, err | |
| 187 } | |
| 188 } | |
| 183 h.writer = bufio.NewWriter(h.tempFile) | 189 h.writer = bufio.NewWriter(h.tempFile) |
| 184 if _, err := h.writer.WriteString(Banner + "\n"); err != nil { | 190 if _, err := h.writer.WriteString(Banner + "\n"); err != nil { |
| 185 return nil, err | 191 return nil, err |
| 186 } | 192 } |
| 187 return h, nil | 193 return h, nil |
