]> git.ipfire.org Git - thirdparty/systemd.git/blame - src/core/hostname-setup.c
tree-wide: sort includes
[thirdparty/systemd.git] / src / core / hostname-setup.c
CommitLineData
d6c9574f 1/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
302e8c4c
LP
2
3/***
4 This file is part of systemd.
5
6 Copyright 2010 Lennart Poettering
7
8 systemd is free software; you can redistribute it and/or modify it
5430f7f2
LP
9 under the terms of the GNU Lesser General Public License as published by
10 the Free Software Foundation; either version 2.1 of the License, or
302e8c4c
LP
11 (at your option) any later version.
12
13 systemd is distributed in the hope that it will be useful, but
14 WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
5430f7f2 16 Lesser General Public License for more details.
302e8c4c 17
5430f7f2 18 You should have received a copy of the GNU Lesser General Public License
302e8c4c
LP
19 along with systemd; If not, see <http://www.gnu.org/licenses/>.
20***/
21
302e8c4c 22#include <errno.h>
07630cea 23#include <stdio.h>
302e8c4c
LP
24#include <stdlib.h>
25
b5efdb8a 26#include "alloc-util.h"
a5c32cff 27#include "fileio.h"
cf0fbc49 28#include "hostname-setup.h"
958b66ea 29#include "hostname-util.h"
07630cea
LP
30#include "log.h"
31#include "macro.h"
32#include "string-util.h"
33#include "util.h"
302e8c4c 34
302e8c4c
LP
35int hostname_setup(void) {
36 int r;
46a2911b
LP
37 _cleanup_free_ char *b = NULL;
38 const char *hn;
fb3d2b8f 39 bool enoent = false;
302e8c4c 40
139e5336 41 r = read_hostname_config("/etc/hostname", &b);
fb3d2b8f 42 if (r < 0) {
28695e0f 43 if (r == -ENOENT)
fb3d2b8f 44 enoent = true;
28695e0f 45 else
da927ba9 46 log_warning_errno(r, "Failed to read configured hostname: %m");
46a2911b
LP
47
48 hn = NULL;
28695e0f
LP
49 } else
50 hn = b;
302e8c4c 51
344de609
LP
52 if (isempty(hn)) {
53 /* Don't override the hostname if it is already set
54 * and not explicitly configured */
55 if (hostname_is_set())
46a2911b 56 return 0;
9bec0b1e 57
fb3d2b8f
LP
58 if (enoent)
59 log_info("No hostname configured.");
60
9bec0b1e
LP
61 hn = "localhost";
62 }
63
709f6e46
MS
64 r = sethostname_idempotent(hn);
65 if (r < 0)
66 return log_warning_errno(r, "Failed to set hostname to <%s>: %m", hn);
302e8c4c 67
46a2911b
LP
68 log_info("Set hostname to <%s>.", hn);
69 return 0;
302e8c4c 70}