mirror of
https://github.com/systemd/systemd-stable.git
synced 2025-01-05 09:17:44 +03:00
hostname: only suppress setting of pretty hostname if it is non-equal to the static hostname and if the static hostname is set, too
https://bugzilla.redhat.com/show_bug.cgi?id=957814
This commit is contained in:
parent
0b95a21bd7
commit
e724b0639c
@ -42,7 +42,7 @@ static int read_and_strip_hostname(const char *path, char **hn) {
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
hostname_cleanup(s);
|
||||
hostname_cleanup(s, false);
|
||||
|
||||
if (isempty(s)) {
|
||||
free(s);
|
||||
|
@ -213,26 +213,6 @@ static int show_status(DBusConnection *bus, char **args, unsigned n) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
static char* hostname_simplify(char *s) {
|
||||
char *p, *d;
|
||||
|
||||
for (p = s, d = s; *p; p++) {
|
||||
if ((*p >= 'a' && *p <= 'z') ||
|
||||
(*p >= '0' && *p <= '9') ||
|
||||
*p == '-' || *p == '_')
|
||||
*(d++) = *p;
|
||||
else if (*p >= 'A' && *p <= 'Z')
|
||||
*(d++) = *p - 'A' + 'a';
|
||||
else if (*p == ' ')
|
||||
*(d++) = '-';
|
||||
}
|
||||
|
||||
*d = 0;
|
||||
|
||||
strshorten(s, HOST_NAME_MAX);
|
||||
return s;
|
||||
}
|
||||
|
||||
static int set_hostname(DBusConnection *bus, char **args, unsigned n) {
|
||||
_cleanup_dbus_message_unref_ DBusMessage *reply = NULL;
|
||||
dbus_bool_t interactive = true;
|
||||
@ -254,16 +234,17 @@ static int set_hostname(DBusConnection *bus, char **args, unsigned n) {
|
||||
* just set the passed hostname as static/dynamic
|
||||
* hostname. */
|
||||
|
||||
if (hostname_is_valid(hostname))
|
||||
h = strdup(hostname);
|
||||
if (!h)
|
||||
return log_oom();
|
||||
|
||||
hostname_cleanup(h, true);
|
||||
|
||||
if (arg_set_static && streq(h, hostname))
|
||||
p = "";
|
||||
else {
|
||||
p = hostname;
|
||||
|
||||
h = strdup(hostname);
|
||||
if (!h)
|
||||
return log_oom();
|
||||
|
||||
hostname = hostname_simplify(h);
|
||||
hostname = h;
|
||||
}
|
||||
|
||||
r = bus_method_call_with_reply(
|
||||
|
@ -839,7 +839,7 @@ static int request_handler_machine(
|
||||
"\"cutoff_to_realtime\" : \"%llu\" }\n",
|
||||
SD_ID128_FORMAT_VAL(mid),
|
||||
SD_ID128_FORMAT_VAL(bid),
|
||||
hostname_cleanup(hostname),
|
||||
hostname_cleanup(hostname, false),
|
||||
os_name ? os_name : "Linux",
|
||||
v ? v : "bare",
|
||||
(unsigned long long) usage,
|
||||
|
@ -835,7 +835,7 @@ static int setup_keys(void) {
|
||||
hn = gethostname_malloc();
|
||||
|
||||
if (hn) {
|
||||
hostname_cleanup(hn);
|
||||
hostname_cleanup(hn, false);
|
||||
fprintf(stderr, "\nThe keys have been generated for host %s/" SD_ID128_FORMAT_STR ".\n", hn, SD_ID128_FORMAT_VAL(machine));
|
||||
} else
|
||||
fprintf(stderr, "\nThe keys have been generated for host " SD_ID128_FORMAT_STR ".\n", SD_ID128_FORMAT_VAL(machine));
|
||||
|
@ -1267,7 +1267,7 @@ int main(int argc, char *argv[]) {
|
||||
goto finish;
|
||||
}
|
||||
|
||||
hostname_cleanup(arg_machine);
|
||||
hostname_cleanup(arg_machine, false);
|
||||
if (isempty(arg_machine)) {
|
||||
log_error("Failed to determine machine name automatically, please use -M.");
|
||||
goto finish;
|
||||
|
@ -3838,24 +3838,29 @@ bool hostname_is_valid(const char *s) {
|
||||
return true;
|
||||
}
|
||||
|
||||
char* hostname_cleanup(char *s) {
|
||||
char* hostname_cleanup(char *s, bool lowercase) {
|
||||
char *p, *d;
|
||||
bool dot;
|
||||
|
||||
for (p = s, d = s, dot = true; *p; p++) {
|
||||
if (*p == '.') {
|
||||
if (dot || p[1] == 0)
|
||||
if (dot)
|
||||
continue;
|
||||
|
||||
*(d++) = '.';
|
||||
dot = true;
|
||||
} else
|
||||
} else if (hostname_valid_char(*p)) {
|
||||
*(d++) = lowercase ? tolower(*p) : *p;
|
||||
dot = false;
|
||||
}
|
||||
|
||||
if (hostname_valid_char(*p))
|
||||
*(d++) = *p;
|
||||
}
|
||||
|
||||
*d = 0;
|
||||
if (dot && d > s)
|
||||
d[-1] = 0;
|
||||
else
|
||||
*d = 0;
|
||||
|
||||
strshorten(s, HOST_NAME_MAX);
|
||||
|
||||
return s;
|
||||
|
@ -411,7 +411,7 @@ bool nulstr_contains(const char*nulstr, const char *needle);
|
||||
bool plymouth_running(void);
|
||||
|
||||
bool hostname_is_valid(const char *s) _pure_;
|
||||
char* hostname_cleanup(char *s);
|
||||
char* hostname_cleanup(char *s, bool lowercase);
|
||||
|
||||
char* strshorten(char *s, size_t l);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user