chiark
/
gitweb
/
~ianmdlvl
/
elogind.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
getty-generator: Enable getty on all active serial consoles.
[elogind.git]
/
src
/
getty-generator
/
getty-generator.c
diff --git
a/src/getty-generator/getty-generator.c
b/src/getty-generator/getty-generator.c
index 13dca7d1b0acccbe2ed8940c9d01dd888276dd5a..6c938062def7256c40d40147c7c8d4fbb216c807 100644
(file)
--- a/
src/getty-generator/getty-generator.c
+++ b/
src/getty-generator/getty-generator.c
@@
-28,6
+28,7
@@
#include "mkdir.h"
#include "unit-name.h"
#include "virt.h"
#include "mkdir.h"
#include "unit-name.h"
#include "virt.h"
+#include "fileio.h"
static const char *arg_dest = "/tmp";
static const char *arg_dest = "/tmp";
@@
-38,16
+39,15
@@
static int add_symlink(const char *fservice, const char *tservice) {
assert(fservice);
assert(tservice);
assert(fservice);
assert(tservice);
-
asprintf(&from, SYSTEM_DATA_UNIT_PATH "/%s
", fservice);
-
asprintf(&to, "%s/getty.target.wants/%s", arg_dest, tservice
);
+
from = strappend(SYSTEM_DATA_UNIT_PATH "/
", fservice);
+
to = strjoin(arg_dest,"/getty.target.wants/", tservice, NULL
);
if (!from || !to) {
if (!from || !to) {
- log_error("Out of memory");
- r = -ENOMEM;
+ r = log_oom();
goto finish;
}
goto finish;
}
- mkdir_parents(to, 0755);
+ mkdir_parents
_label
(to, 0755);
r = symlink(from, to);
if (r < 0) {
r = symlink(from, to);
if (r < 0) {
@@
-55,7
+55,7
@@
static int add_symlink(const char *fservice, const char *tservice) {
/* In case console=hvc0 is passed this will very likely result in EEXIST */
r = 0;
else {
/* In case console=hvc0 is passed this will very likely result in EEXIST */
r = 0;
else {
- log_error("Failed to create symlink
from %s to %s: %m", from
, to);
+ log_error("Failed to create symlink
%s: %m"
, to);
r = -errno;
}
}
r = -errno;
}
}
@@
-77,10
+77,8
@@
static int add_serial_getty(const char *tty) {
log_debug("Automatically adding serial getty for /dev/%s.", tty);
n = unit_name_replace_instance("serial-getty@.service", tty);
log_debug("Automatically adding serial getty for /dev/%s.", tty);
n = unit_name_replace_instance("serial-getty@.service", tty);
- if (!n) {
- log_error("Out of memory");
- return -ENOMEM;
- }
+ if (!n)
+ return log_oom();
r = add_symlink("serial-getty@.service", n);
free(n);
r = add_symlink("serial-getty@.service", n);
free(n);
@@
-99,20
+97,20
@@
int main(int argc, char *argv[]) {
char *active;
const char *j;
char *active;
const char *j;
- if (argc >
2
) {
- log_error("This program takes
on
e or no arguments.");
+ if (argc >
1 && argc != 4
) {
+ log_error("This program takes
thre
e or no arguments.");
return EXIT_FAILURE;
}
return EXIT_FAILURE;
}
- log_set_target(LOG_TARGET_AUTO);
+ if (argc > 1)
+ arg_dest = argv[1];
+
+ log_set_target(LOG_TARGET_SAFE);
log_parse_environment();
log_open();
umask(0022);
log_parse_environment();
log_open();
umask(0022);
- if (argc > 1)
- arg_dest = argv[1];
-
if (detect_container(NULL) > 0) {
log_debug("Automatically adding console shell.");
if (detect_container(NULL) > 0) {
log_debug("Automatically adding console shell.");
@@
-124,33
+122,42
@@
int main(int argc, char *argv[]) {
}
if (read_one_line_file("/sys/class/tty/console/active", &active) >= 0) {
}
if (read_one_line_file("/sys/class/tty/console/active", &active) >= 0) {
- const char *tty;
-
- tty = strrchr(active, ' ');
- if (tty)
- tty ++;
- else
- tty = active;
-
- /* Automatically add in a serial getty on the kernel
- * console */
- if (tty_is_vc(tty))
- free(active);
- else {
+ char *w, *state;
+ size_t l;
+
+ /* Automatically add in a serial getty on all active
+ * kernel consoles */
+ FOREACH_WORD(w, l, active, state) {
+ char *tty;
int k;
int k;
+ tty = strndup(w, l);
+ if (!tty) {
+ log_oom();
+ free(active);
+ r = EXIT_FAILURE;
+ goto finish;
+ }
+
+ if (isempty(tty) || tty_is_vc(tty)) {
+ free(tty);
+ continue;
+ }
+
/* We assume that gettys on virtual terminals are
* started via manual configuration and do this magic
* only for non-VC terminals. */
k = add_serial_getty(tty);
/* We assume that gettys on virtual terminals are
* started via manual configuration and do this magic
* only for non-VC terminals. */
k = add_serial_getty(tty);
- free(active);
if (k < 0) {
if (k < 0) {
+ free(tty);
+ free(active);
r = EXIT_FAILURE;
goto finish;
}
}
r = EXIT_FAILURE;
goto finish;
}
}
+ free(active);
}
/* Automatically add in a serial getty on the first
}
/* Automatically add in a serial getty on the first
@@
-160,7
+167,7
@@
int main(int argc, char *argv[]) {
int k;
if (asprintf(&p, "/sys/class/tty/%s", j) < 0) {
int k;
if (asprintf(&p, "/sys/class/tty/%s", j) < 0) {
- log_
error("Out of memory"
);
+ log_
oom(
);
r = EXIT_FAILURE;
goto finish;
}
r = EXIT_FAILURE;
goto finish;
}