summaryrefslogtreecommitdiff
path: root/sys/src
diff options
context:
space:
mode:
authorcinap_lenrek <cinap_lenrek@felloff.net>2017-02-26 23:10:17 +0100
committercinap_lenrek <cinap_lenrek@felloff.net>2017-02-26 23:10:17 +0100
commit394af5a2162c44a4e2f16897b611f622f8dbbfac (patch)
tree1fa924e14db33e1a2c600adf59abac033ee91f4b /sys/src
parent6de804b578e54fb2e7d24e56c3032def4d24547e (diff)
authsrv: handle short reads in initkeyseed()
Diffstat (limited to 'sys/src')
-rw-r--r--sys/src/cmd/auth/authsrv.c18
1 files changed, 12 insertions, 6 deletions
diff --git a/sys/src/cmd/auth/authsrv.c b/sys/src/cmd/auth/authsrv.c
index 051c08ff1..23a6a38a2 100644
--- a/sys/src/cmd/auth/authsrv.c
+++ b/sys/src/cmd/auth/authsrv.c
@@ -1008,14 +1008,20 @@ initkeyseed(void)
int fd;
genrandom(keyseed, sizeof(keyseed));
- if((fd = create("/adm/keyseed", OWRITE|OEXCL, 0600)) >= 0){
- write(fd, keyseed, sizeof(keyseed));
- } else if((fd = open("/adm/keyseed", OREAD)) >= 0){
- read(fd, keyseed, sizeof(keyseed));
- } else{
- syslog(0, AUTHLOG, "initkeyseed: no seed file: %r");
+ if((fd = open("/adm/keyseed", OREAD)) >= 0){
+ werrstr("file truncated");
+ if(read(fd, keyseed, sizeof(keyseed)) == sizeof(keyseed)){
+ close(fd);
+ return;
+ }
+ close(fd);
+ }
+ syslog(0, AUTHLOG, "initkeyseed: no keyseed: %r");
+ if((fd = create("/adm/keyseed", OWRITE, 0600)) < 0){
+ syslog(0, AUTHLOG, "initkeyseed: can't create: %r");
return;
}
+ write(fd, keyseed, sizeof(keyseed));
close(fd);
}