- Removed struct conf reference
- Made scheme routines internal only
- add configured routines in agent
Signed-off-by: Adam Stokes <astokes(a)fedoraproject.org>
---
src/include/matahari/sysconfig.h | 12 -----
src/lib/sysconfig_linux.c | 100 +++++++++++++++++--------------------
src/sysconfig/sysconfig-qmf.cpp | 34 ++++++++++---
src/tests/mh_api_sysconfig.h | 8 +--
4 files changed, 75 insertions(+), 79 deletions(-)
diff --git a/src/include/matahari/sysconfig.h b/src/include/matahari/sysconfig.h
index cdd1e8d..8b28ca8 100644
--- a/src/include/matahari/sysconfig.h
+++ b/src/include/matahari/sysconfig.h
@@ -25,14 +25,6 @@
#ifndef __MH_SYSCONFIG_H__
#define __MH_SYSCONFIG_H__
-typedef struct conf_s {
- int flags;
- const char *uri;
- const char *data;
- const char *query;
- const char *key;
- const char *scheme;
-} conf_t;
// Supported FLAGS
@@ -43,9 +35,5 @@ extern int mh_sysconfig_run_string(const char *string, int flags, const
char *sc
extern int mh_sysconfig_query(const char *query, const char *data,
int flags, const char *scheme);
-// scheme specific
-extern int mh_sysconfig_run_puppet(conf_t *cf);
-extern int mh_sysconfig_run_augeas(conf_t *cf);
-extern int mh_sysconfig_query_augeas(conf_t *cf);
#endif // __MH_SYSCONFIG_H__
diff --git a/src/lib/sysconfig_linux.c b/src/lib/sysconfig_linux.c
index a1f438a..cb6cb5d 100644
--- a/src/lib/sysconfig_linux.c
+++ b/src/lib/sysconfig_linux.c
@@ -33,7 +33,6 @@
MH_TRACE_INIT_DATA(mh_sysconfig);
-static conf_t cf = {};
static int
download(const char *uri, FILE *fp)
{
@@ -55,52 +54,9 @@ download(const char *uri, FILE *fp)
return 0;
}
-int
-mh_sysconfig_run_uri(const char *uri, int flags, const char *scheme) {
- int rc = 0;
-
- if (g_strcmp0(scheme, "puppet") == 0) {
- cf.uri = uri;
- cf.scheme = scheme;
- rc = mh_sysconfig_run_puppet(&cf);
- } else {
- rc = -1;
- }
- return rc;
-}
-
-int
-mh_sysconfig_run_string(const char *data, int flags, const char *scheme) {
- int rc = 0;
-
- if (g_strcmp0(scheme, "puppet") == 0) {
- cf.data = data;
- cf.scheme = scheme;
- rc = mh_sysconfig_run_puppet(&cf);
- } else {
- rc = -1;
- }
- return rc;
-}
-
-int
-mh_sysconfig_query(const char *query, const char *data, int flags, const char *scheme) {
- int rc = 0;
-
- if (g_strcmp0(scheme, "augeas") == 0) {
- cf.query = query;
- cf.data = data;
- cf.scheme = scheme;
- rc = mh_sysconfig_run_augeas(&cf);
- } else {
- rc = -1;
- }
- return rc;
-}
-
-int
-mh_sysconfig_run_puppet(conf_t *cf)
+static int
+mh_sysconfig_run_puppet(const char *uri, const char *data)
{
gboolean ret;
GError *error;
@@ -108,18 +64,18 @@ mh_sysconfig_run_puppet(conf_t *cf)
gchar cmd[PATH_MAX];
int fd;
FILE *fp;
- if (cf->uri != NULL) {
+ if (uri != NULL) {
filename = strdup("puppet_conf_XXXXXX");
fd = mkstemp(filename);
fp = fdopen(fd, "w+b");
- if ((download(cf->uri, fp)) != 0) {
+ if ((download(uri, fp)) != 0) {
fclose(fp);
return -1;
}
fclose(fp);
- } else if (cf->data != NULL) {
+ } else if (data != NULL) {
filename = strdup("puppet_conf_blob");
- g_file_set_contents(filename, cf->data, strlen(cf->data), NULL);
+ g_file_set_contents(filename, data, strlen(data), NULL);
} else {
return -1;
}
@@ -137,16 +93,52 @@ mh_sysconfig_run_puppet(conf_t *cf)
return 0;
}
-int
-mh_sysconfig_run_augeas(conf_t *cf)
+static int
+mh_sysconfig_run_augeas(const char *query, const char *data)
{
fprintf(stderr, "not implemented\n");
return 0;
}
-int
-mh_sysconfig_query_augeas(conf_t *cf)
+static int
+mh_sysconfig_query_augeas(const char *query, const char *data)
{
fprintf(stderr, "not implemented\n");
return 0;
}
+
+int
+mh_sysconfig_run_uri(const char *uri, int flags, const char *scheme) {
+ int rc = 0;
+
+ if (g_strcmp0(scheme, "puppet") == 0) {
+ rc = mh_sysconfig_run_puppet(uri, NULL);
+ } else {
+ rc = -1;
+ }
+ return rc;
+}
+
+int
+mh_sysconfig_run_string(const char *data, int flags, const char *scheme) {
+ int rc = 0;
+
+ if (g_strcmp0(scheme, "puppet") == 0) {
+ rc = mh_sysconfig_run_puppet(NULL, data);
+ } else {
+ rc = -1;
+ }
+ return rc;
+}
+
+int
+mh_sysconfig_query(const char *query, const char *data, int flags, const char *scheme) {
+ int rc = 0;
+
+ if (g_strcmp0(scheme, "augeas") == 0) {
+ rc = mh_sysconfig_run_augeas(query, data);
+ } else {
+ rc = -1;
+ }
+ return rc;
+}
diff --git a/src/sysconfig/sysconfig-qmf.cpp b/src/sysconfig/sysconfig-qmf.cpp
index 16fdf19..440b966 100644
--- a/src/sysconfig/sysconfig-qmf.cpp
+++ b/src/sysconfig/sysconfig-qmf.cpp
@@ -34,7 +34,9 @@
extern "C" {
#include <stdlib.h>
#include <string.h>
+#include <fcntl.h>
#include <glib.h>
+#include <glib/gstdio.h>
#include <glib/gprintf.h>
#include "matahari/sysconfig.h"
#include "matahari/logging.h"
@@ -44,6 +46,7 @@ extern "C" {
#include <sigar_format.h>
};
+static const char *configured_fn = "/var/lib/matahari/.is_configured";
class ConfigAgent : public MatahariAgent
{
private:
@@ -79,15 +82,24 @@ ConfigAgent::setup(qmf::AgentSession session)
return 0;
}
+static void
+set_configured() {
+ if(!g_file_test(configured_fn, G_FILE_TEST_EXISTS)) {
+ g_creat(configured_fn, S_IRWXU);
+ }
+}
+
static int
-is_configured(const char *key, int flags) {
- int rc = 0;
+is_configured(int flags) {
if(flags & SYSCONFIG_FLAG_FORCE) {
- return rc;
+ return 0;
}
- return rc;
+ if(g_file_test(configured_fn, G_FILE_TEST_EXISTS)) {
+ return 1;
+ }
+ return 0;
}
gboolean
@@ -105,23 +117,29 @@ ConfigAgent::invoke(qmf::AgentSession session, qmf::AgentEvent
event, gpointer u
if (methodName == "run_uri") {
flags = event.getArguments()["flags"].asInt32();
- if((is_configured(_instance.getProperty("uuid").asString().c_str(),
flags)) == 0) {
+ if((is_configured(flags)) == 0) {
rc =
mh_sysconfig_run_uri(event.getArguments()["uri"].asString().c_str(),
flags,
event.getArguments()["scheme"].asString().c_str());
+ if (rc == 0) {
+ set_configured();
+ }
}
event.addReturnArgument("configured", rc);
} else if (methodName == "run_string") {
flags = event.getArguments()["flags"].asInt32();
- if((is_configured(_instance.getProperty("uuid").asString().c_str(),
flags)) == 0) {
+ if((is_configured(flags)) == 0) {
rc =
mh_sysconfig_run_string(event.getArguments()["data"].asString().c_str(),
flags,
event.getArguments()["scheme"].asString().c_str());
+ if (rc == 0) {
+ set_configured();
+ }
}
event.addReturnArgument("configured", rc);
} else if (methodName == "query") {
flags = event.getArguments()["flags"].asInt32();
- if((is_configured(_instance.getProperty("uuid").asString().c_str(),
flags)) == 0) {
+ if((is_configured(flags)) == 0) {
rc =
mh_sysconfig_query(event.getArguments()["query"].asString().c_str(),
event.getArguments()["data"].asString().c_str(),
flags,
@@ -129,7 +147,7 @@ ConfigAgent::invoke(qmf::AgentSession session, qmf::AgentEvent event,
gpointer u
}
event.addReturnArgument("configured", rc);
} else if (methodName == "is_configured") {
- rc = is_configured(event.getArguments()["key"].asString().c_str(), 0);
+ rc = is_configured(0);
_instance.setProperty("is_postboot_configured", rc);
event.addReturnArgument("configured", rc);
} else {
diff --git a/src/tests/mh_api_sysconfig.h b/src/tests/mh_api_sysconfig.h
index 7e1b2b4..7ae11af 100644
--- a/src/tests/mh_api_sysconfig.h
+++ b/src/tests/mh_api_sysconfig.h
@@ -25,11 +25,9 @@ class MhApiSysconfigSuite : public CxxTest::TestSuite
void testIsConfigured(void)
{
- conf_t cf = {};
- cf.uri = "http://matahariproject.org/atom.xml";
- cf.flags = 0;
- cf.scheme = "puppet";
- TS_ASSERT((mh_sysconfig_run_uri(cf.uri, cf.flags, cf.scheme)) != -1);
+ const char *uri = "http://matahariproject.org/atom.xml";
+ int flags = 0;
+ TS_ASSERT((mh_sysconfig_run_uri(uri, flags, "puppet")) != -1);
}
};
--
1.7.6