summaryrefslogtreecommitdiff
path: root/src/shared
diff options
context:
space:
mode:
authorMichal Sekletar <msekleta@redhat.com>2014-10-21 18:17:54 +0200
committerMichal Sekletar <msekleta@redhat.com>2014-10-27 10:37:46 +0100
commit605f81a8968b2df8a28cca2cf11db99ab948a2af (patch)
tree5f7bc76ca61e8165860510ee181c57ecbfdd3055 /src/shared
parentcaa2f4c0c9613b2e02aafa308c8fb092576014a9 (diff)
util: introduce sethostname_idempotent
Function queries system hostname and applies changes only when necessary. Also, migrate all client of sethostname to sethostname_idempotent while at it.
Diffstat (limited to 'src/shared')
-rw-r--r--src/shared/util.c20
-rw-r--r--src/shared/util.h2
2 files changed, 22 insertions, 0 deletions
diff --git a/src/shared/util.c b/src/shared/util.c
index bc97c67f76..7d94a28302 100644
--- a/src/shared/util.c
+++ b/src/shared/util.c
@@ -7175,3 +7175,23 @@ int free_and_strdup(char **p, const char *s) {
return 0;
}
+
+int sethostname_idempotent(const char *s) {
+ int r;
+ char buf[HOST_NAME_MAX + 1] = {};
+
+ assert(s);
+
+ r = gethostname(buf, sizeof(buf));
+ if (r < 0)
+ return -errno;
+
+ if (streq(buf, s))
+ return 0;
+
+ r = sethostname(buf, strlen(buf));
+ if (r < 0)
+ return -errno;
+
+ return 1;
+}
diff --git a/src/shared/util.h b/src/shared/util.h
index 887cdc4a44..35584467c1 100644
--- a/src/shared/util.h
+++ b/src/shared/util.h
@@ -997,3 +997,5 @@ int unquote_first_word(const char **p, char **ret);
int unquote_many_words(const char **p, ...) _sentinel_;
int free_and_strdup(char **p, const char *s);
+
+int sethostname_idempotent(const char *s);