From 01b20efdf43b87981c6b9899122e22ef307ee52f Mon Sep 17 00:00:00 2001 From: Richard Jones Date: Thu, 7 May 2009 15:51:02 +0100 Subject: [PATCH] Augeas is now completely optional. --- README | 2 +- TODO | 5 ----- daemon/augeas.c | 61 ++++++++++++++++++++++++++++++++++++++++++++++++++--- daemon/configure.ac | 17 +++++++++------ 4 files changed, 69 insertions(+), 16 deletions(-) diff --git a/README b/README index 252e595..9efcb9b 100644 --- a/README +++ b/README @@ -35,7 +35,7 @@ Requirements - XDR, rpcgen -- Augeas (http://augeas.net/) +- (Optional) Augeas (http://augeas.net/) - perldoc (pod2man, pod2text) to generate the manual pages and other documentation. diff --git a/TODO b/TODO index 9b36e96..e2eaff0 100644 --- a/TODO +++ b/TODO @@ -16,9 +16,4 @@ Limit on transfers would still be 2MB for these types. ---------------------------------------------------------------------- -Augeas support should be completely optional. Major platforms lack -it, such as RHEL 5. - ----------------------------------------------------------------------- - Implement febootstrap command. diff --git a/daemon/augeas.c b/daemon/augeas.c index 3595f8d..0dbf0e7 100644 --- a/daemon/augeas.c +++ b/daemon/augeas.c @@ -22,16 +22,21 @@ #include #include #include + +#ifdef HAVE_AUGEAS #include +#endif #include "daemon.h" #include "actions.h" +#ifdef HAVE_AUGEAS /* The Augeas handle. We maintain a single handle per daemon, which * is all that is necessary and reduces the complexity of the API * considerably. */ static augeas *aug = NULL; +#endif #define NEED_AUG(errcode) \ do { \ @@ -46,6 +51,7 @@ static augeas *aug = NULL; int do_aug_init (const char *root, int flags) { +#ifdef HAVE_AUGEAS char *buf; int len; @@ -74,17 +80,26 @@ do_aug_init (const char *root, int flags) } return 0; +#else + reply_with_error ("%s is not available", __func__); + return -1; +#endif } int do_aug_close (void) { +#ifdef HAVE_AUGEAS NEED_AUG(-1); aug_close (aug); aug = NULL; return 0; +#else + reply_with_error ("%s is not available", __func__); + return -1; +#endif } int @@ -102,7 +117,7 @@ do_aug_defvar (const char *name, const char *expr) } return r; #else - reply_with_error ("aug_defvar is not available"); + reply_with_error ("%s is not available", __func__); return -1; #endif } @@ -124,7 +139,7 @@ do_aug_defnode (const char *name, const char *expr, const char *val) r.created = created; return &r; #else - reply_with_error ("aug_defvar is not available"); + reply_with_error ("%s is not available", __func__); return NULL; #endif } @@ -132,6 +147,7 @@ do_aug_defnode (const char *name, const char *expr, const char *val) char * do_aug_get (const char *path) { +#ifdef HAVE_AUGEAS const char *value = NULL; char *v; int r; @@ -165,11 +181,16 @@ do_aug_get (const char *path) } return v; /* Caller frees. */ +#else + reply_with_error ("%s is not available", __func__); + return NULL; +#endif } int do_aug_set (const char *path, const char *val) { +#ifdef HAVE_AUGEAS int r; NEED_AUG (-1); @@ -181,11 +202,16 @@ do_aug_set (const char *path, const char *val) } return 0; +#else + reply_with_error ("%s is not available", __func__); + return -1; +#endif } int do_aug_insert (const char *path, const char *label, int before) { +#ifdef HAVE_AUGEAS int r; NEED_AUG (-1); @@ -197,11 +223,16 @@ do_aug_insert (const char *path, const char *label, int before) } return 0; +#else + reply_with_error ("%s is not available", __func__); + return -1; +#endif } int do_aug_rm (const char *path) { +#ifdef HAVE_AUGEAS int r; NEED_AUG (-1); @@ -213,11 +244,16 @@ do_aug_rm (const char *path) } return r; +#else + reply_with_error ("%s is not available", __func__); + return -1; +#endif } int do_aug_mv (const char *src, const char *dest) { +#ifdef HAVE_AUGEAS int r; NEED_AUG (-1); @@ -229,11 +265,16 @@ do_aug_mv (const char *src, const char *dest) } return 0; +#else + reply_with_error ("%s is not available", __func__); + return -1; +#endif } char ** do_aug_match (const char *path) { +#ifdef HAVE_AUGEAS char **matches = NULL; void *vp; int r; @@ -259,11 +300,16 @@ do_aug_match (const char *path) matches[r] = NULL; return matches; /* Caller frees. */ +#else + reply_with_error ("%s is not available", __func__); + return NULL; +#endif } int do_aug_save (void) { +#ifdef HAVE_AUGEAS NEED_AUG (-1); if (aug_save (aug) == -1) { @@ -272,6 +318,10 @@ do_aug_save (void) } return 0; +#else + reply_with_error ("%s is not available", __func__); + return -1; +#endif } int @@ -287,7 +337,7 @@ do_aug_load (void) return 0; #else - reply_with_error ("aug_load is not available"); + reply_with_error ("%s is not available", __func__); return -1; #endif } @@ -296,6 +346,7 @@ do_aug_load (void) char ** do_aug_ls (const char *path) { +#ifdef HAVE_AUGEAS char **matches; char *buf; int len; @@ -333,4 +384,8 @@ do_aug_ls (const char *path) sort_strings (matches, count_strings (matches)); return matches; /* Caller frees. */ +#else + reply_with_error ("%s is not available", __func__); + return NULL; +#endif } diff --git a/daemon/configure.ac b/daemon/configure.ac index 6cf4c0f..a91db6d 100644 --- a/daemon/configure.ac +++ b/daemon/configure.ac @@ -46,13 +46,16 @@ test "x$U" != "x" && AC_MSG_ERROR([Compiler not ANSI compliant]) AC_PROG_CC_C_O -dnl Check for Augeas. -AC_CHECK_LIB([augeas],[aug_match],,[ - AC_MSG_ERROR([Augeas library not found]) - ]) - -dnl Check for functions not available in earlier versions of Augeas. -AC_CHECK_FUNCS([aug_load aug_defvar aug_defnode]) +dnl Check for Augeas (now optional). +AC_CHECK_LIB([augeas],[aug_match],[ + LIBS="-laugeas $LIBS" + have_augeas=yes + dnl Check for functions not available in earlier versions of Augeas. + AC_CHECK_FUNCS([aug_load aug_defvar aug_defnode]) + ],[have_augeas=no]) +if test "x$have_augeas" = "xyes"; then + AC_DEFINE([HAVE_AUGEAS],[1],[Define to 1 if you have Augeas]) +fi dnl Check for XDR library. AC_CHECK_LIB([portablexdr],[xdrmem_create],[],[ -- 1.8.3.1