From 36575bff493e40a5748f137957dfd82baec41da6 Mon Sep 17 00:00:00 2001 From: kremlin Date: Thu, 12 Jun 2014 21:01:30 -0500 Subject: [PATCH] fleshed out config and hostnamed more, structure for other 3 daemons.. --- src/config.c | 79 +++++++++++++++++++++++++++- src/interfaces/hostnamed/hostnamed.c | 46 +++++++++++++--- src/main.c | 12 ++--- 3 files changed, 124 insertions(+), 13 deletions(-) diff --git a/src/config.c b/src/config.c index b1b7161..189eb23 100644 --- a/src/config.c +++ b/src/config.c @@ -1 +1,78 @@ -init +#include +#include +#include + +static GKeyFile *config; + +static const gchar *CONFIG_KEYS[] = { + "PrettyHostname", + "IconName", + "ChassisType" +}; + +/* NULL if key doesn't exist */ +gchar *get_option(gchar *key, gchar *group) { + + if(!group) + group = "default"; + + return g_key_file_get_string(config, group, key, NULL); +} + +/* false if key isn't already defined or value is invalid */ +gboolean set_option(gchar *key, gchar *value, gchar *group) { + + if(!group) + group = "default"; + + if(!g_key_file_get_string(config, group, key, NULL)) + return FALSE; + + //TODO safteycheck value + g_key_file_set_string(config, group, key, value); + return TRUE; +} + +/* initial load/check */ + +gboolean config_init() { + + static gchar *config_path; + int tryopen = 0; + /* config is already good to go */ + if(config) + 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; + + return TRUE; + + /* it does it exist and was written to config var */ + } else + return TRUE; +} diff --git a/src/interfaces/hostnamed/hostnamed.c b/src/interfaces/hostnamed/hostnamed.c index e33c4fd..a7c960d 100644 --- a/src/interfaces/hostnamed/hostnamed.c +++ b/src/interfaces/hostnamed/hostnamed.c @@ -166,7 +166,7 @@ GError * hostnamed_init() { return err; } -static gboolean init_props() { +gboolean init_props() { if(init_hostname() && init_static_hostname() @@ -183,11 +183,11 @@ static gboolean init_props() { } //POSIX, for future ports try_hostname should be checked for null-termination -static gboolean init_hostname() { +gboolean init_hostname() { - gchar try_hostname[MAX_HOSTNAME]; + gchar try_hostname[HOST_NAME_MAX]; - if(!get_hostname(try_hostname, MAX_HOSTNAME)) { + if(!gethostname(try_hostname, HOST_NAME_MAX)) { hostname = try_hostname; return TRUE; } @@ -195,10 +195,44 @@ static gboolean init_hostname() { return FALSE; } -static gboolean init_pretty_hostname() { +gboolean init_static_hostname() { + //TODO + return TRUE; +} - +gboolean init_pretty_hostname() { + //TODO + return TRUE; +} + +gboolean init_icon_name() { + //TODO + return TRUE; +} + +gboolean init_chassis() { + //TODO + return TRUE; +} +gboolean init_kernel_name() { + //TODO + return TRUE; +} + +gboolean init_kernel_version() { + //TODO + return TRUE; +} + +gboolean init_os_name() { + //TODO + return TRUE; +} + +gboolean init_os_cpe() { + //TODO + return TRUE; } //TODO figure out DMI variables on obsd diff --git a/src/main.c b/src/main.c index daa8157..d9a6ef9 100644 --- a/src/main.c +++ b/src/main.c @@ -1,10 +1,10 @@ /* debugging */ -//#define INSTALL 1 +#define INSTALL 1 //#define NO_BUILTIN_XML 1 /* end debugging */ #include -#include +#include "config.c" #include "interfaces/hostnamed/hostnamed.c" //#include "main.h" @@ -17,17 +17,17 @@ static gboolean install_conf() { int main() { //TODO cleanup #ifdef INSTALL - if(!install_conf()) { + if(!config_init()) { g_printf("%s\n", "FAILED to install configs in /etc/!"); - exit(1); + return 1; } #endif //TODO cleanup #if (defined NO_BUILTIN_XML && defined INSTALL) - if(!install_conf()) { + if(!config_init()) { g_printf("%s\n", "FAILED to install xml configs!"); - exit(1); + return 1; } #else #endif -- 2.41.0