aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorkremlin <ian@kremlin.cc>2014-06-20 10:38:50 +0800
committerkremlin <ian@kremlin.cc>2014-06-20 10:38:50 +0800
commit39df684714f381d12e902de486e20a23c2e78bec (patch)
treec4e9efa3721e25b50c90b552dca1be0c4842a5a1 /src
parentfd8852d9a5a230f7fd075aa27b892a4980667cff (diff)
downloadsystembsd-39df684714f381d12e902de486e20a23c2e78bec.tar
systembsd-39df684714f381d12e902de486e20a23c2e78bec.tar.gz
systembsd-39df684714f381d12e902de486e20a23c2e78bec.tar.bz2
systembsd-39df684714f381d12e902de486e20a23c2e78bec.tar.lz
systembsd-39df684714f381d12e902de486e20a23c2e78bec.tar.xz
systembsd-39df684714f381d12e902de486e20a23c2e78bec.tar.zst
systembsd-39df684714f381d12e902de486e20a23c2e78bec.zip
finish migrating old code to work with gdbus-codegen types, cleaned up config IO/install, cleaned up code all-around to work with strict compiler flags
Diffstat (limited to 'src')
-rw-r--r--src/config.c83
-rw-r--r--src/interfaces/hostnamed/hostnamed.c30
-rw-r--r--src/main.c40
-rw-r--r--src/main.h1
4 files changed, 76 insertions, 78 deletions
diff --git a/src/config.c b/src/config.c
index 189eb23..5d85346 100644
--- a/src/config.c
+++ b/src/config.c
@@ -34,45 +34,62 @@ gboolean set_option(gchar *key, gchar *value, gchar *group) {
}
/* initial load/check */
-
gboolean config_init() {
- static gchar *config_path;
- int tryopen = 0;
- /* config is already good to go */
if(config)
+ return TRUE; //already init'd
+
+ config = g_key_file_new();
+
+ const gchar *config_path;
+ GStatBuf *config_lstat;
+
+ config_path = "/etc/systemd_compat.conf";
+
+ /* does conf exist? */
+ if(g_lstat(config_path, config_lstat)) {
+
+ /* if not, can we write it */
+ if(g_access("/etc/", W_OK)) {
+ g_printf("%s\n", "no write permissions for /etc/! exiting..");
+ return FALSE;
+ }
+
+ int config_descr;
+ config_descr = g_open(config_path, O_CREAT, 644);
+
+ gchar *posix_hostname;
+ posix_hostname = g_malloc(255);
+
+ gethostname(posix_hostname, 255);
+
+ g_key_file_set_string(config, "hostnamed", "Hostname", posix_hostname);
+ g_key_file_set_string(config, "hostnamed", "PrettyHostname", "");
+ g_key_file_set_string(config, "hostnamed", "IconName", "Computer");
+ g_key_file_set_string(config, "hostnamed", "ChassisType", "laptop"); //TODO set these correctly
+
+ if(!g_key_file_save_to_file(config, config_path, NULL)) {
+ g_printf("failed to write config to %s!\n", config_path);
+ g_free(posix_hostname);
+ return FALSE;
+ }
+
+ g_printf("wrote config to %s\n", config_path);
+
+ g_free(posix_hostname);
+
return TRUE;
- /* does config file exist? if not, write one */
- else if(!g_key_file_load_from_data(config, "systemd_compat.conf", &config_path, G_KEY_FILE_KEEP_COMMENTS, NULL)) {
-
- tryopen = g_open("/etc/systemd_compat.conf", O_CREAT, 644);
-
- //TODO clean this up, use g_data_dirs and g_exit
- /* can we open it rw? */
- if(!g_access("/etc/systemd_compat.conf", W_OK) && !tryopen) {
- g_printf("%s\n", "ERROR: cannot open systemd_compat.conf as read/write!");
- return FALSE;
- }
-
- if(tryopen) {
- config_path = "/etc/systemd_compat.conf";
- g_close(tryopen, NULL);
- }
-
- //TODO set these properly
- config = g_key_file_new();
-
- g_key_file_set_string(config, "hostnamed", "PrettyHostname", "");
- g_key_file_set_string(config, "hostnamed", "IconName", "Computer");
- g_key_file_set_string(config, "hostnamed", "ChassisType", "laptop");
-
- if(!g_key_file_save_to_file(config, config_path, NULL))
- return FALSE;
+ /* it does exist, read it */
+ } else {
+ if(!g_access(config_path, W_OK)) {
+ g_printf("%s\n", "no write permissions for /etc/! exiting..");
+ return FALSE;
+ } else if(g_key_file_load_from_file(config, config_path, G_KEY_FILE_KEEP_COMMENTS, NULL))
return TRUE;
- /* it does it exist and was written to config var */
- } else
- return TRUE;
+ g_printf("could not read config at %s! exiting..", config_path);
+ return FALSE;
+ }
}
diff --git a/src/interfaces/hostnamed/hostnamed.c b/src/interfaces/hostnamed/hostnamed.c
index 95539fb..e75476e 100644
--- a/src/interfaces/hostnamed/hostnamed.c
+++ b/src/interfaces/hostnamed/hostnamed.c
@@ -18,11 +18,6 @@ static void on_bus_acquired(GDBusConnection *conn,
g_print("got bus, name: %s\n", name);
- /*g_dbus_connection_register_object(conn,
- "/org/freedesktop/hostname1",
- spect_data->interfaces[0],
- &interface_vtable,
- NULL, NULL, NULL);*/
}
static void on_name_acquired(GDBusConnection *conn,
@@ -44,7 +39,7 @@ static void on_name_lost(GDBusConnection *conn,
}
/* safe call to try and start hostnamed */
-GError * hostnamed_init() {
+GError *hostnamed_init() {
guint bus_descriptor;
GError *err = NULL;
@@ -52,8 +47,9 @@ GError * hostnamed_init() {
gchar *hostnamed_joined_xml;
hostnamed_freeable = g_ptr_array_new();
+ hostnamed_ispect_xml = g_malloc(3000);
- g_file_get_contents("conf/hostnamed-ispect.xml", hostnamed_ispect_xml, GUINT_TO_POINTER(3000), &err);
+ g_file_get_contents("conf/hostnamed-ispect.xml", hostnamed_ispect_xml, NULL, NULL);
hostnamed_joined_xml = g_strjoinv("\n", hostnamed_ispect_xml);
spect_data = g_dbus_node_info_new_for_xml(hostnamed_joined_xml, NULL);
@@ -69,24 +65,10 @@ GError * hostnamed_init() {
NULL,
NULL);
- //TODO: malloc and return reference as if a main() closed
+ //TODO: malloc and return reference as if a main() closed
return err;
}
-//POSIX, for future ports try_hostname should be checked for null-termination
-/*
-gboolean init_hostname() {
-
- gchar try_hostname[HOST_NAME_MAX];
-
- if(!gethostname(try_hostname, HOST_NAME_MAX)) {
- hostname = try_hostname;
- return TRUE;
- }
-
- return FALSE;
-}*/
-
/* free()'s */
void hostnamed_mem_clean() {
@@ -102,7 +84,7 @@ void hostnamed_mem_clean() {
//TODO vm check
#if defined(__i386__) || defined(__x86_64__)
- /*
+
Taken with a few minor changes from systemd's hostnamed.c,
copyright 2011 Lennart Poettering.
@@ -110,7 +92,7 @@ void hostnamed_mem_clean() {
details about the values listed here:
http://www.dmtf.org/sites/default/files/standards/documents/DSP0134_2.7.1.pdf
- */ /*
+
if (g_file_get_contents ("/sys/class/dmi/id/chassis_type", &filebuf, NULL, NULL)) {
switch (g_ascii_strtoull (filebuf, NULL, 10)) {
diff --git a/src/main.c b/src/main.c
index d9a6ef9..82d68f8 100644
--- a/src/main.c
+++ b/src/main.c
@@ -4,40 +4,38 @@
/* end debugging */
#include <gio/gio.h>
+#include <glib.h>
+#include <glib/gprintf.h>
+#include <glib/gstdio.h>
#include "config.c"
#include "interfaces/hostnamed/hostnamed.c"
-//#include "main.h"
+//#include "main/h"
-#ifdef INSTALL
-static gboolean install_conf() {
-
-}
-#endif
-
-int main() {
- //TODO cleanup
+gboolean systemd_utils_init() {
#ifdef INSTALL
if(!config_init()) {
g_printf("%s\n", "FAILED to install configs in /etc/!");
- return 1;
+ return FALSE;
}
#endif
+ return TRUE;
+}
- //TODO cleanup
- #if (defined NO_BUILTIN_XML && defined INSTALL)
- if(!config_init()) {
- g_printf("%s\n", "FAILED to install xml configs!");
- return 1;
- }
- #else
- #endif
+int main() {
- GMainLoop *mloop = NULL;
+ GMainLoop *mloop;
- mloop = g_main_loop_new(NULL, FALSE);
+ if(!systemd_utils_init()) {
+ g_printf("failed to init, are you root?\n");
+ return 1; //TODO errno properly. grep for all "return 1;"s, not TODO'ing each one
+ }
+
hostnamed_init();
+
+ mloop = g_main_loop_new(NULL, TRUE);
+
g_main_loop_run(mloop);
+ g_main_loop_unref(mloop);
return 0;
}
-
diff --git a/src/main.h b/src/main.h
index c8f9781..a5fd502 100644
--- a/src/main.h
+++ b/src/main.h
@@ -1,5 +1,6 @@
#include <gio/gio.h>
+//TODO change this to config dir, not data dir
gboolean install_conf() {
gchar *our_conf_uri = "systemd-utl/xml-conf/";
gchar **data_dir = g_get_system_data_dirs();