chiark
/
gitweb
/
~ianmdlvl
/
elogind.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
journald: when checking available disk space for rate limiting, cache the results...
[elogind.git]
/
src
/
random-seed.c
diff --git
a/src/random-seed.c
b/src/random-seed.c
index 586c69837b337dc39e85f40b7e0ff5eeb56f1f2e..0c63794b66839e7cb3fb6f97830ddfc1f003e17b 100644
(file)
--- a/
src/random-seed.c
+++ b/
src/random-seed.c
@@
-32,7
+32,7
@@
int main(int argc, char *argv[]) {
int seed_fd = -1, random_fd = -1;
int main(int argc, char *argv[]) {
int seed_fd = -1, random_fd = -1;
- int ret =
1
;
+ int ret =
EXIT_FAILURE
;
void* buf;
size_t buf_size = 0;
ssize_t r;
void* buf;
size_t buf_size = 0;
ssize_t r;
@@
-40,16
+40,22
@@
int main(int argc, char *argv[]) {
if (argc != 2) {
log_error("This program requires one argument.");
if (argc != 2) {
log_error("This program requires one argument.");
- return
1
;
+ return
EXIT_FAILURE
;
}
log_set_target(LOG_TARGET_SYSLOG_OR_KMSG);
log_parse_environment();
log_open();
}
log_set_target(LOG_TARGET_SYSLOG_OR_KMSG);
log_parse_environment();
log_open();
+ umask(0022);
+
/* Read pool size, if possible */
if ((f = fopen("/proc/sys/kernel/random/poolsize", "re"))) {
/* Read pool size, if possible */
if ((f = fopen("/proc/sys/kernel/random/poolsize", "re"))) {
- fscanf(f, "%zu", &buf_size);
+ if (fscanf(f, "%zu", &buf_size) > 0) {
+ /* poolsize is in bits on 2.6, but we want bytes */
+ buf_size /= 8;
+ }
+
fclose(f);
}
fclose(f);
}
@@
-61,6
+67,11
@@
int main(int argc, char *argv[]) {
goto finish;
}
goto finish;
}
+ if (mkdir_parents(RANDOM_SEED, 0755) < 0) {
+ log_error("Failed to create directories parents of %s: %m", RANDOM_SEED);
+ goto finish;
+ }
+
/* When we load the seed we read it and write it to the device
* and then immediately update the saved seed with new data,
* to make sure the next boot gets seeded differently. */
/* When we load the seed we read it and write it to the device
* and then immediately update the saved seed with new data,
* to make sure the next boot gets seeded differently. */
@@
-81,9
+92,11
@@
int main(int argc, char *argv[]) {
}
}
}
}
- if ((r = loop_read(seed_fd, buf, buf_size, false)) <= 0)
- log_error("Failed to read seed file: %s", r < 0 ? strerror(errno) : "EOF");
- else {
+ if ((r = loop_read(seed_fd, buf, buf_size, false)) <= 0) {
+
+ if (r != 0)
+ log_error("Failed to read seed file: %m");
+ } else {
lseek(seed_fd, 0, SEEK_SET);
if ((r = loop_write(random_fd, buf, (size_t) r, false)) <= 0)
lseek(seed_fd, 0, SEEK_SET);
if ((r = loop_write(random_fd, buf, (size_t) r, false)) <= 0)
@@
-119,7
+132,7
@@
int main(int argc, char *argv[]) {
log_error("Failed to write new random seed file: %s", r < 0 ? strerror(errno) : "short write");
}
log_error("Failed to write new random seed file: %s", r < 0 ? strerror(errno) : "short write");
}
- ret =
0
;
+ ret =
EXIT_SUCCESS
;
finish:
if (random_fd >= 0)
finish:
if (random_fd >= 0)