Fix race condition during socket creation
| ... | ... |
@@ -1211,11 +1211,20 @@ func ListenAndServe(proto, addr string, job *engine.Job) error {
|
| 1211 | 1211 |
} |
| 1212 | 1212 |
} |
| 1213 | 1213 |
|
| 1214 |
+ var oldmask int |
|
| 1215 |
+ if proto == "unix" {
|
|
| 1216 |
+ oldmask = syscall.Umask(0777) |
|
| 1217 |
+ } |
|
| 1218 |
+ |
|
| 1214 | 1219 |
if job.GetenvBool("BufferRequests") {
|
| 1215 | 1220 |
l, err = listenbuffer.NewListenBuffer(proto, addr, activationLock) |
| 1216 | 1221 |
} else {
|
| 1217 | 1222 |
l, err = net.Listen(proto, addr) |
| 1218 | 1223 |
} |
| 1224 |
+ |
|
| 1225 |
+ if proto == "unix" {
|
|
| 1226 |
+ syscall.Umask(oldmask) |
|
| 1227 |
+ } |
|
| 1219 | 1228 |
if err != nil {
|
| 1220 | 1229 |
return err |
| 1221 | 1230 |
} |
| ... | ... |
@@ -1253,9 +1262,6 @@ func ListenAndServe(proto, addr string, job *engine.Job) error {
|
| 1253 | 1253 |
log.Println("/!\\ DON'T BIND ON ANOTHER IP ADDRESS THAN 127.0.0.1 IF YOU DON'T KNOW WHAT YOU'RE DOING /!\\")
|
| 1254 | 1254 |
} |
| 1255 | 1255 |
case "unix": |
| 1256 |
- if err := os.Chmod(addr, 0660); err != nil {
|
|
| 1257 |
- return err |
|
| 1258 |
- } |
|
| 1259 | 1256 |
socketGroup := job.Getenv("SocketGroup")
|
| 1260 | 1257 |
if socketGroup != "" {
|
| 1261 | 1258 |
if err := changeGroup(addr, socketGroup); err != nil {
|
| ... | ... |
@@ -1267,6 +1273,9 @@ func ListenAndServe(proto, addr string, job *engine.Job) error {
|
| 1267 | 1267 |
} |
| 1268 | 1268 |
} |
| 1269 | 1269 |
} |
| 1270 |
+ if err := os.Chmod(addr, 0660); err != nil {
|
|
| 1271 |
+ return err |
|
| 1272 |
+ } |
|
| 1270 | 1273 |
default: |
| 1271 | 1274 |
return fmt.Errorf("Invalid protocol format.")
|
| 1272 | 1275 |
} |