This source file includes following definitions.
- read_and_strip_hostname
- hostname_setup
#include <unistd.h>
#include <stdio.h>
#include <errno.h>
#include <string.h>
#include <stdlib.h>
#include "hostname-setup.h"
#include "macro.h"
#include "util.h"
#include "log.h"
#include "fileio.h"
static int read_and_strip_hostname(const char *path, char **hn) {
char *s;
int r;
assert(path);
assert(hn);
r = read_one_line_file(path, &s);
if (r < 0)
return r;
hostname_cleanup(s, false);
if (isempty(s)) {
free(s);
return -ENOENT;
}
*hn = s;
return 0;
}
int hostname_setup(void) {
int r;
_cleanup_free_ char *b = NULL;
const char *hn;
bool enoent = false;
r = read_and_strip_hostname("/etc/hostname", &b);
if (r < 0) {
if (r == -ENOENT)
enoent = true;
else
log_warning("Failed to read configured hostname: %s", strerror(-r));
hn = NULL;
} else
hn = b;
if (isempty(hn)) {
if (hostname_is_set())
return 0;
if (enoent)
log_info("No hostname configured.");
hn = "localhost";
}
if (sethostname_idempotent(hn) < 0) {
log_warning("Failed to set hostname to <%s>: %m", hn);
return -errno;
}
log_info("Set hostname to <%s>.", hn);
return 0;
}