/* Authors: Jakub Hrozek Copyright (C) 2011 Red Hat This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #include #include #include "util/util.h" #include "util/sss_python.h" #include "providers/ipa/ipa_hbac.h" #define PYTHON_MODULE_NAME "pyhbac" #ifndef PYHBAC_ENCODING #define PYHBAC_ENCODING "UTF-8" #endif #define PYHBAC_ENCODING_ERRORS "strict" #define CHECK_ATTRIBUTE_DELETE(attr, attrname) do { \ if (attr == NULL) { \ PyErr_Format(PyExc_TypeError, \ "Cannot delete the %s attribute", \ attrname); \ return -1; \ } \ } while(0) static PyObject *PyExc_HbacError; /* ==================== Utility functions ========================*/ static char * py_strdup(const char *string) { char *copy; copy = PyMem_New(char, strlen(string)+1); if (copy == NULL) { PyErr_NoMemory(); return NULL; } return strcpy(copy, string); } static char * py_strcat_realloc(char *first, const char *second) { char *new_first; new_first = PyMem_Realloc(first, strlen(first) + strlen(second) + 1); if (new_first == NULL) { PyErr_NoMemory(); return NULL; } return strcat(new_first, second); } static PyObject * get_utf8_string(PyObject *obj, const char *attrname) { const char *a = attrname ? attrname : "attribute"; PyObject *obj_utf8 = NULL; if (PyString_Check(obj)) { obj_utf8 = obj; Py_INCREF(obj_utf8); /* Make sure we can DECREF later */ } else if (PyUnicode_Check(obj)) { if ((obj_utf8 = PyUnicode_AsUTF8String(obj)) == NULL) { return NULL; } } else { PyErr_Format(PyExc_TypeError, "%s must be a string", a); return NULL; } return obj_utf8; } static void free_string_list(const char **list) { int i; if (!list) return; for (i=0; list[i]; i++) { PyMem_Free(discard_const_p(char, list[i])); } PyMem_Free(list); } static const char ** sequence_as_string_list(PyObject *seq, const char *paramname) { const char *p = paramname ? paramname : "attribute values"; const char **ret; PyObject *utf_item; int i; Py_ssize_t len; PyObject *item; if (!PySequence_Check(seq)) { PyErr_Format(PyExc_TypeError, "The object must be a sequence\n"); return NULL; } len = PySequence_Size(seq); if (len == -1) return NULL; ret = PyMem_New(const char *, (len+1)); if (!ret) { PyErr_NoMemory(); return NULL; } for (i = 0; i < len; i++) { item = PySequence_GetItem(seq, i); if (item == NULL) { break; } utf_item = get_utf8_string(item, p); if (utf_item == NULL) { return NULL; } ret[i] = py_strdup(PyString_AsString(utf_item)); Py_DECREF(utf_item); if (!ret[i]) { return NULL; } } ret[i] = NULL; return ret; } static bool verify_sequence(PyObject *seq, const char *attrname) { const char *a = attrname ? attrname : "attribute"; if (!PySequence_Check(seq)) { PyErr_Format(PyExc_TypeError, "%s must be a sequence", a); return false; } return true; } static int pyobject_to_category(PyObject *o) { int c; c = PyInt_AsLong(o); if (c == -1 && PyErr_Occurred()) { PyErr_Format(PyExc_TypeError, "Invalid type for category element - must be an int\n"); return -1; } switch (c) { case HBAC_CATEGORY_NULL: case HBAC_CATEGORY_ALL: return c; } PyErr_Format(PyExc_ValueError, "Invalid value %d for category\n", c); return -1; } static uint32_t native_category(PyObject *pycat) { PyObject *iterator; PyObject *item; uint32_t cat; int ret; iterator = PyObject_GetIter(pycat); if (iterator == NULL) { PyErr_Format(PyExc_RuntimeError, "Cannot iterate category\n"); return -1; } cat = 0; while ((item = PyIter_Next(iterator))) { ret = pyobject_to_category(item); Py_DECREF(item); if (ret == -1) { Py_DECREF(iterator); return -1; } cat |= ret; } Py_DECREF(iterator); return cat; } static char * str_concat_sequence(PyObject *seq, const char *delim) { Py_ssize_t size; Py_ssize_t i; PyObject *item; char *s = NULL; char *part; size = PySequence_Size(seq); if (size == 0) { s = py_strdup(""); if (s == NULL) { return NULL; } return s; } for (i=0; i < size; i++) { item = PySequence_GetItem(seq, i); if (item == NULL) goto fail; part = PyString_AsString(item); if (part == NULL) { Py_DECREF(item); goto fail; } if (s) { s = py_strcat_realloc(s, delim); if (s == NULL) goto fail; s = py_strcat_realloc(s, part); if (s == NULL) goto fail; } else { s = py_strdup(part); if (s == NULL) goto fail; } Py_DECREF(item); } return s; fail: PyMem_Free(s); return NULL; } /* ================= HBAC Exception handling =====================*/ static void set_hbac_exception(PyObject *exc, struct hbac_info *error) { PyErr_SetObject(exc, Py_BuildValue(sss_py_const_p(char, "(i,s)"), error->code, error->rule_name ? \ error->rule_name : "no rule")); } /* ==================== HBAC Rule Element ========================*/ typedef struct { PyObject_HEAD PyObject *category; PyObject *names; PyObject *groups; } HbacRuleElement; static PyObject * HbacRuleElement_new(PyTypeObject *type, PyObject *args, PyObject *kwds) { HbacRuleElement *self; self = (HbacRuleElement *) type->tp_alloc(type, 0); if (self == NULL) { PyErr_NoMemory(); return NULL; } self->category = sss_python_set_new(); self->names = PyList_New(0); self->groups = PyList_New(0); if (!self->names || !self->groups || !self->category) { Py_DECREF(self); PyErr_NoMemory(); return NULL; } return (PyObject *) self; } static int HbacRuleElement_clear(HbacRuleElement *self) { Py_CLEAR(self->names); Py_CLEAR(self->groups); Py_CLEAR(self->category); return 0; } static void HbacRuleElement_dealloc(HbacRuleElement *self) { HbacRuleElement_clear(self); self->ob_type->tp_free((PyObject*) self); } static int HbacRuleElement_traverse(HbacRuleElement *self, visitproc visit, void *arg) { Py_VISIT(self->groups); Py_VISIT(self->names); Py_VISIT(self->category); return 0; } static int hbac_rule_element_set_names(HbacRuleElement *self, PyObject *names, void *closure); static int hbac_rule_element_set_groups(HbacRuleElement *self, PyObject *groups, void *closure); static int hbac_rule_element_set_category(HbacRuleElement *self, PyObject *category, void *closure); static int HbacRuleElement_init(HbacRuleElement *self, PyObject *args, PyObject *kwargs) { const char * const kwlist[] = { "names", "groups", "category", NULL }; PyObject *names = NULL; PyObject *groups = NULL; PyObject *category = NULL; PyObject *tmp = NULL; if (!PyArg_ParseTupleAndKeywords(args, kwargs, sss_py_const_p(char, "|OOO"), discard_const_p(char *, kwlist), &names, &groups, &category)) { return -1; } if (names) { if (hbac_rule_element_set_names(self, names, NULL) != 0) { return -1; } } if (groups) { if (hbac_rule_element_set_groups(self, groups, NULL) != 0) { return -1; } } if (category) { if (hbac_rule_element_set_category(self, category, NULL) != 0) { return -1; } } else { tmp = PyInt_FromLong(HBAC_CATEGORY_NULL); if (!tmp) { return -1; } if (sss_python_set_add(self->category, tmp) != 0) { Py_DECREF(tmp); return -1; } } return 0; } static int hbac_rule_element_set_names(HbacRuleElement *self, PyObject *names, void *closure) { CHECK_ATTRIBUTE_DELETE(names, "names"); if (!verify_sequence(names, "names")) { return -1; } SAFE_SET(self->names, names); return 0; } static PyObject * hbac_rule_element_get_names(HbacRuleElement *self, void *closure) { Py_INCREF(self->names); return self->names; } static int hbac_rule_element_set_groups(HbacRuleElement *self, PyObject *groups, void *closure) { CHECK_ATTRIBUTE_DELETE(groups, "groups"); if (!verify_sequence(groups, "groups")) { return -1; } SAFE_SET(self->groups, groups); return 0; } static PyObject * hbac_rule_element_get_groups(HbacRuleElement *self, void *closure) { Py_INCREF(self->groups); return self->groups; } static int hbac_rule_element_set_category(HbacRuleElement *self, PyObject *category, void *closure) { PyObject *iterator; PyObject *item; int ret; CHECK_ATTRIBUTE_DELETE(category, "category"); if (!sss_python_set_check(category)) { PyErr_Format(PyExc_TypeError, "The category must be a set type\n"); return -1; } /* Check the values, too */ iterator = PyObject_GetIter(category); if (iterator == NULL) { PyErr_Format(PyExc_RuntimeError, "Cannot iterate a set?\n"); return -1; } while ((item = PyIter_Next(iterator))) { ret = pyobject_to_category(item); Py_DECREF(item); if (ret == -1) { Py_DECREF(iterator); return -1; } } SAFE_SET(self->category, category); Py_DECREF(iterator); return 0; } static PyObject * hbac_rule_element_get_category(HbacRuleElement *self, void *closure) { Py_INCREF(self->category); return self->category; } static PyObject * HbacRuleElement_repr(HbacRuleElement *self) { char *strnames = NULL; char *strgroups = NULL; uint32_t category; PyObject *o, *format, *args; format = sss_python_unicode_from_string(""); if (format == NULL) { return NULL; } strnames = str_concat_sequence(self->names, discard_const_p(char, ",")); strgroups = str_concat_sequence(self->groups, discard_const_p(char, ",")); category = native_category(self->category); if (strnames == NULL || strgroups == NULL || category == -1) { PyMem_Free(strnames); PyMem_Free(strgroups); Py_DECREF(format); return NULL; } args = Py_BuildValue(sss_py_const_p(char, "Kss"), (unsigned long long ) category, strnames, strgroups); if (args == NULL) { PyMem_Free(strnames); PyMem_Free(strgroups); Py_DECREF(format); return NULL; } o = PyUnicode_Format(format, args); PyMem_Free(strnames); PyMem_Free(strgroups); Py_DECREF(format); Py_DECREF(args); return o; } PyDoc_STRVAR(HbacRuleElement_names__doc__, "(sequence of strings) A list of object names this element applies to"); PyDoc_STRVAR(HbacRuleElement_groups__doc__, "(sequence of strings) A list of group names this element applies to"); PyDoc_STRVAR(HbacRuleElement_category__doc__, "(set) A set of categories this rule falls into"); static PyGetSetDef py_hbac_rule_element_getset[] = { { discard_const_p(char, "names"), (getter) hbac_rule_element_get_names, (setter) hbac_rule_element_set_names, HbacRuleElement_names__doc__, NULL }, { discard_const_p(char, "groups"), (getter) hbac_rule_element_get_groups, (setter) hbac_rule_element_set_groups, HbacRuleElement_groups__doc__, NULL }, { discard_const_p(char, "category"), (getter) hbac_rule_element_get_category, (setter) hbac_rule_element_set_category, HbacRuleElement_category__doc__, NULL }, { NULL, 0, 0, 0, NULL } /* Sentinel */ }; PyDoc_STRVAR(HbacRuleElement__doc__, "IPA HBAC Rule Element\n\n" "HbacRuleElement() -> new empty rule element\n" "HbacRuleElement([names], [groups], [category]) -> optionally, provide\n" "names and/or groups and/or category\n"); static PyTypeObject pyhbac_hbacrule_element_type = { PyObject_HEAD_INIT(NULL) .tp_name = sss_py_const_p(char, "pyhbac.HbacRuleElement"), .tp_basicsize = sizeof(HbacRuleElement), .tp_new = HbacRuleElement_new, .tp_dealloc = (destructor) HbacRuleElement_dealloc, .tp_traverse = (traverseproc) HbacRuleElement_traverse, .tp_clear = (inquiry) HbacRuleElement_clear, .tp_init = (initproc) HbacRuleElement_init, .tp_repr = (reprfunc) HbacRuleElement_repr, .tp_getset = py_hbac_rule_element_getset, .tp_flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE | Py_TPFLAGS_HAVE_GC, .tp_doc = HbacRuleElement__doc__ }; static void free_hbac_rule_element(struct hbac_rule_element *el) { if (!el) return; free_string_list(el->names); free_string_list(el->groups); PyMem_Free(el); } struct hbac_rule_element * HbacRuleElement_to_native(HbacRuleElement *pyel) { struct hbac_rule_element *el = NULL; /* check the type, None would wreak havoc here because for some reason * it would pass the sequence check */ if (!PyObject_IsInstance((PyObject *) pyel, (PyObject *) &pyhbac_hbacrule_element_type)) { PyErr_Format(PyExc_TypeError, "The element must be of type HbacRuleElement\n"); goto fail; } el = PyMem_Malloc(sizeof(struct hbac_rule_element)); if (!el) { PyErr_NoMemory(); goto fail; } el->category = native_category(pyel->category); el->names = sequence_as_string_list(pyel->names, "names"); el->groups = sequence_as_string_list(pyel->groups, "groups"); if (!el->names || !el->groups || el->category == -1) { goto fail; } return el; fail: free_hbac_rule_element(el); return NULL; } /* ==================== HBAC Rule ========================*/ typedef struct { PyObject_HEAD PyObject *name; bool enabled; HbacRuleElement *users; HbacRuleElement *services; HbacRuleElement *targethosts; HbacRuleElement *srchosts; } HbacRuleObject; static void free_hbac_rule(struct hbac_rule *rule); static struct hbac_rule * HbacRule_to_native(HbacRuleObject *pyrule); static PyObject * HbacRule_new(PyTypeObject *type, PyObject *args, PyObject *kwds) { HbacRuleObject *self; self = (HbacRuleObject *) type->tp_alloc(type, 0); if (self == NULL) { PyErr_NoMemory(); return NULL; } self->name = sss_python_unicode_from_string(""); if (self->name == NULL) { Py_DECREF(self); PyErr_NoMemory(); return NULL; } self->enabled = false; self->services = (HbacRuleElement *) HbacRuleElement_new( &pyhbac_hbacrule_element_type, NULL, NULL); self->users = (HbacRuleElement *) HbacRuleElement_new( &pyhbac_hbacrule_element_type, NULL, NULL); self->targethosts = (HbacRuleElement *) HbacRuleElement_new( &pyhbac_hbacrule_element_type, NULL, NULL); self->srchosts = (HbacRuleElement *) HbacRuleElement_new( &pyhbac_hbacrule_element_type, NULL, NULL); if (self->services == NULL || self->users == NULL || self->targethosts == NULL || self->srchosts == NULL) { Py_XDECREF(self->services); Py_XDECREF(self->users); Py_XDECREF(self->targethosts); Py_XDECREF(self->srchosts); Py_DECREF(self->name); Py_DECREF(self); PyErr_NoMemory(); return NULL; } return (PyObject *) self; } static int HbacRule_clear(HbacRuleObject *self) { Py_CLEAR(self->name); Py_CLEAR(self->services); Py_CLEAR(self->users); Py_CLEAR(self->targethosts); Py_CLEAR(self->srchosts); return 0; } static void HbacRule_dealloc(HbacRuleObject *self) { HbacRule_clear(self); self->ob_type->tp_free((PyObject*) self); } static int HbacRule_traverse(HbacRuleObject *self, visitproc visit, void *arg) { Py_VISIT((PyObject *) self->name); Py_VISIT((PyObject *) self->services); Py_VISIT((PyObject *) self->users); Py_VISIT((PyObject *) self->targethosts); Py_VISIT((PyObject *) self->srchosts); return 0; } static int hbac_rule_set_enabled(HbacRuleObject *self, PyObject *enabled, void *closure); static int hbac_rule_set_name(HbacRuleObject *self, PyObject *name, void *closure); static int HbacRule_init(HbacRuleObject *self, PyObject *args, PyObject *kwargs) { const char * const kwlist[] = { "name", "enabled", NULL }; PyObject *name = NULL; PyObject *empty_tuple = NULL; PyObject *enabled=NULL; if (!PyArg_ParseTupleAndKeywords(args, kwargs, sss_py_const_p(char, "O|O"), discard_const_p(char *, kwlist), &name, &enabled)) { return -1; } if (enabled) { if (hbac_rule_set_enabled(self, enabled, NULL) == -1) { return -1; } } if (hbac_rule_set_name(self, name, NULL) == -1) { return -1; } empty_tuple = PyTuple_New(0); if (!empty_tuple) { return -1; } if (HbacRuleElement_init(self->users, empty_tuple, NULL) == -1 || HbacRuleElement_init(self->services, empty_tuple, NULL) == -1 || HbacRuleElement_init(self->targethosts, empty_tuple, NULL) == -1 || HbacRuleElement_init(self->srchosts, empty_tuple, NULL) == -1) { Py_DECREF(empty_tuple); return -1; } Py_DECREF(empty_tuple); return 0; } static int hbac_rule_set_enabled(HbacRuleObject *self, PyObject *enabled, void *closure) { CHECK_ATTRIBUTE_DELETE(enabled, "enabled"); if (PyString_Check(enabled) || PyUnicode_Check(enabled)) { PyObject *utf8_str; char *str; utf8_str = get_utf8_string(enabled, "enabled"); if (!utf8_str) return -1; str = PyString_AsString(utf8_str); if (!str) { Py_DECREF(utf8_str); return -1; } if (strcasecmp(str, "true") == 0) { self->enabled = true; } else if (strcasecmp(str, "false") == 0) { self->enabled = false; } else { PyErr_Format(PyExc_ValueError, "enabled only accepts 'true' of 'false' " "string literals"); Py_DECREF(utf8_str); return -1; } Py_DECREF(utf8_str); return 0; } else if (PyBool_Check(enabled)) { self->enabled = (enabled == Py_True); return 0; } else if (PyInt_Check(enabled)) { switch(PyInt_AsLong(enabled)) { case 0: self->enabled = false; break; case 1: self->enabled = true; break; default: PyErr_Format(PyExc_ValueError, "enabled only accepts '0' of '1' " "integer constants"); return -1; } return 0; } PyErr_Format(PyExc_TypeError, "enabled must be a boolean, an integer " "1 or 0 or a string constant true/false"); return -1; } static PyObject * hbac_rule_get_enabled(HbacRuleObject *self, void *closure) { if (self->enabled) { Py_RETURN_TRUE; } Py_RETURN_FALSE; } static int hbac_rule_set_name(HbacRuleObject *self, PyObject *name, void *closure) { CHECK_ATTRIBUTE_DELETE(name, "name"); if (!PyString_Check(name) && !PyUnicode_Check(name)) { PyErr_Format(PyExc_TypeError, "name must be a string or Unicode"); return -1; } SAFE_SET(self->name, name); return 0; } static PyObject * hbac_rule_get_name(HbacRuleObject *self, void *closure) { if (PyUnicode_Check(self->name)) { Py_INCREF(self->name); return self->name; } else if (PyString_Check(self->name)) { return PyUnicode_FromEncodedObject(self->name, PYHBAC_ENCODING, PYHBAC_ENCODING_ERRORS); } /* setter does typechecking but let us be paranoid */ PyErr_Format(PyExc_TypeError, "name must be a string or Unicode"); return NULL; } static PyObject * HbacRule_repr(HbacRuleObject *self) { PyObject *users_repr; PyObject *services_repr; PyObject *targethosts_repr; PyObject *srchosts_repr; PyObject *o, *format, *args; format = sss_python_unicode_from_string(""); if (format == NULL) { return NULL; } users_repr = HbacRuleElement_repr(self->users); services_repr = HbacRuleElement_repr(self->services); targethosts_repr = HbacRuleElement_repr(self->targethosts); srchosts_repr = HbacRuleElement_repr(self->srchosts); if (users_repr == NULL || services_repr == NULL || targethosts_repr == NULL || srchosts_repr == NULL) { Py_XDECREF(users_repr); Py_XDECREF(services_repr); Py_XDECREF(targethosts_repr); Py_XDECREF(srchosts_repr); Py_DECREF(format); return NULL; } args = Py_BuildValue(sss_py_const_p(char, "OiOOOO"), self->name, self->enabled, users_repr, services_repr, targethosts_repr, srchosts_repr); if (args == NULL) { Py_DECREF(users_repr); Py_DECREF(services_repr); Py_DECREF(targethosts_repr); Py_DECREF(srchosts_repr); Py_DECREF(format); return NULL; } o = PyUnicode_Format(format, args); Py_DECREF(users_repr); Py_DECREF(services_repr); Py_DECREF(targethosts_repr); Py_DECREF(srchosts_repr); Py_DECREF(format); Py_DECREF(args); return o; } static PyObject * py_hbac_rule_validate(HbacRuleObject *self, PyObject *args) { struct hbac_rule *rule; bool is_valid; uint32_t missing; uint32_t attr; PyObject *ret = NULL; PyObject *py_is_valid = NULL; PyObject *py_missing = NULL; PyObject *py_attr = NULL; rule = HbacRule_to_native(self); if (!rule) { /* Make sure there is at least a generic exception */ if (!PyErr_Occurred()) { PyErr_Format(PyExc_IOError, "Could not convert HbacRule to native type\n"); } goto fail; } is_valid = hbac_rule_is_complete(rule, &missing); free_hbac_rule(rule); ret = PyTuple_New(2); if (!ret) { PyErr_NoMemory(); goto fail; } py_is_valid = PyBool_FromLong(is_valid); py_missing = sss_python_set_new(); if (!py_missing || !py_is_valid) { PyErr_NoMemory(); goto fail; } for (attr = HBAC_RULE_ELEMENT_USERS; attr <= HBAC_RULE_ELEMENT_SOURCEHOSTS; attr <<= 1) { if (!(missing & attr)) continue; py_attr = PyInt_FromLong(attr); if (!py_attr) { PyErr_NoMemory(); goto fail; } if (sss_python_set_add(py_missing, py_attr) != 0) { /* If the set-add succeeded, it would steal the reference */ Py_DECREF(py_attr); goto fail; } } PyTuple_SET_ITEM(ret, 0, py_is_valid); PyTuple_SET_ITEM(ret, 1, py_missing); return ret; fail: Py_XDECREF(ret); Py_XDECREF(py_missing); Py_XDECREF(py_is_valid); return NULL; } PyDoc_STRVAR(py_hbac_rule_validate__doc__, "validate() -> (valid, missing)\n\n" "Validate an HBAC rule\n" "Returns a tuple of (bool, set). The boolean value describes whether\n" "the rule is valid. If it is False, then the set lists all the missing " "rule elements as HBAC_RULE_ELEMENT_* constants\n"); static PyMethodDef py_hbac_rule_methods[] = { { sss_py_const_p(char, "validate"), (PyCFunction) py_hbac_rule_validate, METH_VARARGS, py_hbac_rule_validate__doc__, }, { NULL, NULL, 0, NULL } /* Sentinel */ }; PyDoc_STRVAR(HbacRuleObject_users__doc__, "(HbacRuleElement) Users and user groups for which this rule applies"); PyDoc_STRVAR(HbacRuleObject_services__doc__, "(HbacRuleElement) Services and service groups for which this rule applies"); PyDoc_STRVAR(HbacRuleObject_targethosts__doc__, "(HbacRuleElement) Target hosts for which this rule applies"); PyDoc_STRVAR(HbacRuleObject_srchosts__doc__, "(HbacRuleElement) Source hosts for which this rule applies"); static PyMemberDef py_hbac_rule_members[] = { { discard_const_p(char, "users"), T_OBJECT_EX, offsetof(HbacRuleObject, users), 0, HbacRuleObject_users__doc__ }, { discard_const_p(char, "services"), T_OBJECT_EX, offsetof(HbacRuleObject, services), 0, HbacRuleObject_services__doc__ }, { discard_const_p(char, "targethosts"), T_OBJECT_EX, offsetof(HbacRuleObject, targethosts), 0, HbacRuleObject_targethosts__doc__}, { discard_const_p(char, "srchosts"), T_OBJECT_EX, offsetof(HbacRuleObject, srchosts), 0, HbacRuleObject_srchosts__doc__}, { NULL, 0, 0, 0, NULL } /* Sentinel */ }; PyDoc_STRVAR(HbacRuleObject_enabled__doc__, "(bool) Is the rule enabled"); PyDoc_STRVAR(HbacRuleObject_name__doc__, "(string) The name of the rule"); static PyGetSetDef py_hbac_rule_getset[] = { { discard_const_p(char, "enabled"), (getter) hbac_rule_get_enabled, (setter) hbac_rule_set_enabled, HbacRuleObject_enabled__doc__, NULL }, { discard_const_p(char, "name"), (getter) hbac_rule_get_name, (setter) hbac_rule_set_name, HbacRuleObject_name__doc__, NULL }, {NULL, 0, 0, 0, NULL} /* Sentinel */ }; PyDoc_STRVAR(HbacRuleObject__doc__, "IPA HBAC Rule\n\n" "HbacRule(name, [enabled]) -> instantiate an empty rule, optionally\n" "specify whether it is enabled. Rules are created disabled by default and\n" "contain empty HbacRuleElement instances in services, users, targethosts\n" "and srchosts attributes.\n"); static PyTypeObject pyhbac_hbacrule_type = { PyObject_HEAD_INIT(NULL) .tp_name = sss_py_const_p(char, "pyhbac.HbacRule"), .tp_basicsize = sizeof(HbacRuleObject), .tp_new = HbacRule_new, .tp_dealloc = (destructor) HbacRule_dealloc, .tp_traverse = (traverseproc) HbacRule_traverse, .tp_clear = (inquiry) HbacRule_clear, .tp_init = (initproc) HbacRule_init, .tp_repr = (reprfunc) HbacRule_repr, .tp_members = py_hbac_rule_members, .tp_methods = py_hbac_rule_methods, .tp_getset = py_hbac_rule_getset, .tp_flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE | Py_TPFLAGS_HAVE_GC, .tp_doc = HbacRuleObject__doc__ }; static void free_hbac_rule(struct hbac_rule *rule) { if (!rule) return; free_hbac_rule_element(rule->services); free_hbac_rule_element(rule->users); free_hbac_rule_element(rule->targethosts); free_hbac_rule_element(rule->srchosts); PyMem_Free(discard_const_p(char, rule->name)); PyMem_Free(rule); } static struct hbac_rule * HbacRule_to_native(HbacRuleObject *pyrule) { struct hbac_rule *rule = NULL; PyObject *utf_name; rule = PyMem_Malloc(sizeof(struct hbac_rule)); if (!rule) { PyErr_NoMemory(); goto fail; } if (!PyObject_IsInstance((PyObject *) pyrule, (PyObject *) &pyhbac_hbacrule_type)) { PyErr_Format(PyExc_TypeError, "The rule must be of type HbacRule\n"); goto fail; } utf_name = get_utf8_string(pyrule->name, "name"); if (utf_name == NULL) { return NULL; } rule->name = py_strdup(PyString_AsString(utf_name)); Py_DECREF(utf_name); if (rule->name == NULL) { goto fail; } rule->services = HbacRuleElement_to_native(pyrule->services); rule->users = HbacRuleElement_to_native(pyrule->users); rule->targethosts = HbacRuleElement_to_native(pyrule->targethosts); rule->srchosts = HbacRuleElement_to_native(pyrule->srchosts); if (!rule->services || !rule->users || !rule->targethosts || !rule->srchosts) { goto fail; } rule->enabled = pyrule->enabled; return rule; fail: free_hbac_rule(rule); return NULL; } /* ==================== HBAC Request Element ========================*/ typedef struct { PyObject_HEAD PyObject *name; PyObject *groups; } HbacRequestElement; static PyObject * HbacRequestElement_new(PyTypeObject *type, PyObject *args, PyObject *kwds) { HbacRequestElement *self; self = (HbacRequestElement *) type->tp_alloc(type, 0); if (self == NULL) { PyErr_NoMemory(); return NULL; } self->name = sss_python_unicode_from_string(""); if (self->name == NULL) { PyErr_NoMemory(); Py_DECREF(self); return NULL; } self->groups = PyList_New(0); if (self->groups == NULL) { Py_DECREF(self->name); Py_DECREF(self); PyErr_NoMemory(); return NULL; } return (PyObject *) self; } static int HbacRequestElement_clear(HbacRequestElement *self) { Py_CLEAR(self->name); Py_CLEAR(self->groups); return 0; } static void HbacRequestElement_dealloc(HbacRequestElement *self) { HbacRequestElement_clear(self); self->ob_type->tp_free((PyObject*) self); } static int HbacRequestElement_traverse(HbacRequestElement *self, visitproc visit, void *arg) { Py_VISIT(self->name); Py_VISIT(self->groups); return 0; } static int hbac_request_element_set_groups(HbacRequestElement *self, PyObject *groups, void *closure); static int hbac_request_element_set_name(HbacRequestElement *self, PyObject *name, void *closure); static int HbacRequestElement_init(HbacRequestElement *self, PyObject *args, PyObject *kwargs) { const char * const kwlist[] = { "name", "groups", NULL }; PyObject *name = NULL; PyObject *groups = NULL; if (!PyArg_ParseTupleAndKeywords(args, kwargs, sss_py_const_p(char, "|OO"), discard_const_p(char *, kwlist), &name, &groups)) { return -1; } if (name) { if (hbac_request_element_set_name(self, name, NULL) != 0) { return -1; } } if (groups) { if (hbac_request_element_set_groups(self, groups, NULL) != 0) { return -1; } } return 0; } static int hbac_request_element_set_name(HbacRequestElement *self, PyObject *name, void *closure) { CHECK_ATTRIBUTE_DELETE(name, "name"); if (!PyString_Check(name) && !PyUnicode_Check(name)) { PyErr_Format(PyExc_TypeError, "name must be a string or Unicode"); return -1; } SAFE_SET(self->name, name); return 0; } static PyObject * hbac_request_element_get_name(HbacRequestElement *self, void *closure) { if (PyUnicode_Check(self->name)) { Py_INCREF(self->name); return self->name; } else if (PyString_Check(self->name)) { return PyUnicode_FromEncodedObject(self->name, PYHBAC_ENCODING, PYHBAC_ENCODING_ERRORS); } /* setter does typechecking but let us be paranoid */ PyErr_Format(PyExc_TypeError, "name must be a string or Unicode"); return NULL; } static int hbac_request_element_set_groups(HbacRequestElement *self, PyObject *groups, void *closure) { CHECK_ATTRIBUTE_DELETE(groups, "groups"); if (!verify_sequence(groups, "groups")) { return -1; } SAFE_SET(self->groups, groups); return 0; } static PyObject * hbac_request_element_get_groups(HbacRequestElement *self, void *closure) { Py_INCREF(self->groups); return self->groups; } static PyObject * HbacRequestElement_repr(HbacRequestElement *self) { char *strgroups; PyObject *o, *format, *args; format = sss_python_unicode_from_string(""); if (format == NULL) { return NULL; } strgroups = str_concat_sequence(self->groups, discard_const_p(char, ",")); if (strgroups == NULL) { Py_DECREF(format); return NULL; } args = Py_BuildValue(sss_py_const_p(char, "Os"), self->name, strgroups); if (args == NULL) { PyMem_Free(strgroups); Py_DECREF(format); return NULL; } o = PyUnicode_Format(format, args); PyMem_Free(strgroups); Py_DECREF(format); Py_DECREF(args); return o; } PyDoc_STRVAR(HbacRequestElement_name__doc__, "(string) An object name this element applies to"); PyDoc_STRVAR(HbacRequestElement_groups__doc__, "(list of strings) A list of group names this element applies to"); static PyGetSetDef py_hbac_request_element_getset[] = { { discard_const_p(char, "name"), (getter) hbac_request_element_get_name, (setter) hbac_request_element_set_name, HbacRequestElement_name__doc__, NULL }, { discard_const_p(char, "groups"), (getter) hbac_request_element_get_groups, (setter) hbac_request_element_set_groups, HbacRequestElement_groups__doc__, NULL }, { NULL, 0, 0, 0, NULL } /* Sentinel */ }; PyDoc_STRVAR(HbacRequestElement__doc__, "IPA HBAC Request Element\n\n" "HbacRequestElement() -> new empty request element\n" "HbacRequestElement([name], [groups]) -> optionally, provide name and/or " "groups\n"); static PyTypeObject pyhbac_hbacrequest_element_type = { PyObject_HEAD_INIT(NULL) .tp_name = sss_py_const_p(char, "pyhbac.HbacRequestElement"), .tp_basicsize = sizeof(HbacRequestElement), .tp_new = HbacRequestElement_new, .tp_dealloc = (destructor) HbacRequestElement_dealloc, .tp_traverse = (traverseproc) HbacRequestElement_traverse, .tp_clear = (inquiry) HbacRequestElement_clear, .tp_init = (initproc) HbacRequestElement_init, .tp_repr = (reprfunc) HbacRequestElement_repr, .tp_getset = py_hbac_request_element_getset, .tp_flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE | Py_TPFLAGS_HAVE_GC, .tp_doc = HbacRequestElement__doc__ }; static void free_hbac_request_element(struct hbac_request_element *el) { if (!el) return; PyMem_Free(discard_const_p(char, el->name)); free_string_list(el->groups); PyMem_Free(el); } static struct hbac_request_element * HbacRequestElement_to_native(HbacRequestElement *pyel) { struct hbac_request_element *el = NULL; PyObject *utf_name; if (!PyObject_IsInstance((PyObject *) pyel, (PyObject *) &pyhbac_hbacrequest_element_type)) { PyErr_Format(PyExc_TypeError, "The element must be of type HbacRequestElement\n"); goto fail; } el = PyMem_Malloc(sizeof(struct hbac_request_element)); if (!el) { PyErr_NoMemory(); goto fail; } utf_name = get_utf8_string(pyel->name, "name"); if (utf_name == NULL) { return NULL; } el->name = py_strdup(PyString_AsString(utf_name)); Py_DECREF(utf_name); if (!el->name) { goto fail; } el->groups = sequence_as_string_list(pyel->groups, "groups"); if (!el->groups) { goto fail; } return el; fail: free_hbac_request_element(el); return NULL; } /* ==================== HBAC Request ========================*/ typedef struct { PyObject_HEAD HbacRequestElement *service; HbacRequestElement *user; HbacRequestElement *targethost; HbacRequestElement *srchost; PyObject *rule_name; } HbacRequest; static PyObject * HbacRequest_new(PyTypeObject *type, PyObject *args, PyObject *kwds) { HbacRequest *self; self = (HbacRequest *) type->tp_alloc(type, 0); if (self == NULL) { PyErr_NoMemory(); return NULL; } self->service = (HbacRequestElement *) HbacRequestElement_new( &pyhbac_hbacrequest_element_type, NULL, NULL); self->user = (HbacRequestElement *) HbacRequestElement_new( &pyhbac_hbacrequest_element_type, NULL, NULL); self->targethost = (HbacRequestElement *) HbacRequestElement_new( &pyhbac_hbacrequest_element_type, NULL, NULL); self->srchost = (HbacRequestElement *) HbacRequestElement_new( &pyhbac_hbacrequest_element_type, NULL, NULL); if (self->service == NULL || self->user == NULL || self->targethost == NULL || self->srchost == NULL) { Py_XDECREF(self->service); Py_XDECREF(self->user); Py_XDECREF(self->targethost); Py_XDECREF(self->srchost); Py_DECREF(self); PyErr_NoMemory(); return NULL; } return (PyObject *) self; } static int HbacRequest_clear(HbacRequest *self) { Py_CLEAR(self->service); Py_CLEAR(self->user); Py_CLEAR(self->targethost); Py_CLEAR(self->srchost); Py_CLEAR(self->rule_name); return 0; } static void HbacRequest_dealloc(HbacRequest *self) { HbacRequest_clear(self); self->ob_type->tp_free((PyObject*) self); } static int HbacRequest_traverse(HbacRequest *self, visitproc visit, void *arg) { Py_VISIT((PyObject *) self->service); Py_VISIT((PyObject *) self->user); Py_VISIT((PyObject *) self->targethost); Py_VISIT((PyObject *) self->srchost); return 0; } static int HbacRequest_init(HbacRequest *self, PyObject *args, PyObject *kwargs) { PyObject *empty_tuple = NULL; empty_tuple = PyTuple_New(0); if (!empty_tuple) { PyErr_NoMemory(); return -1; } self->rule_name = NULL; if (HbacRequestElement_init(self->user, empty_tuple, NULL) == -1 || HbacRequestElement_init(self->service, empty_tuple, NULL) == -1 || HbacRequestElement_init(self->targethost, empty_tuple, NULL) == -1 || HbacRequestElement_init(self->srchost, empty_tuple, NULL) == -1) { Py_DECREF(empty_tuple); return -1; } Py_DECREF(empty_tuple); return 0; } PyDoc_STRVAR(py_hbac_evaluate__doc__, "evaluate(rules) -> int\n\n" "Evaluate a set of HBAC rules.\n" "rules is a sequence of HbacRule objects. The returned value describes\n" "the result of evaluation and will have one of HBAC_EVAL_* values.\n" "Use hbac_result_string() to get textual representation of the result\n" "On error, HbacError exception is raised.\n" "If HBAC_EVAL_ALLOW is returned, the class attribute rule_name would\n" "contain the name of the rule that matched. Otherwise, the attribute\n" "contains None\n"); static struct hbac_eval_req * HbacRequest_to_native(HbacRequest *pyreq); static void free_hbac_rule_list(struct hbac_rule **rules) { int i; if (!rules) return; for(i=0; rules[i]; i++) { free_hbac_rule(rules[i]); } PyMem_Free(rules); } static void free_hbac_eval_req(struct hbac_eval_req *req); static PyObject * py_hbac_evaluate(HbacRequest *self, PyObject *args) { PyObject *py_rules_list = NULL; PyObject *py_rule = NULL; Py_ssize_t num_rules; struct hbac_rule **rules = NULL; struct hbac_eval_req *hbac_req = NULL; enum hbac_eval_result eres; struct hbac_info *info = NULL; PyObject *ret = NULL; long i; if (!PyArg_ParseTuple(args, sss_py_const_p(char, "O"), &py_rules_list)) { goto fail; } if (!PySequence_Check(py_rules_list)) { PyErr_Format(PyExc_TypeError, "The parameter rules must be a sequence\n"); goto fail; } num_rules = PySequence_Size(py_rules_list); rules = PyMem_New(struct hbac_rule *, num_rules+1); if (!rules) { PyErr_NoMemory(); goto fail; } for (i=0; i < num_rules; i++) { py_rule = PySequence_GetItem(py_rules_list, i); if (!PyObject_IsInstance(py_rule, (PyObject *) &pyhbac_hbacrule_type)) { PyErr_Format(PyExc_TypeError, "A rule must be of type HbacRule\n"); goto fail; } rules[i] = HbacRule_to_native((HbacRuleObject *) py_rule); if (!rules[i]) { /* Make sure there is at least a generic exception */ if (!PyErr_Occurred()) { PyErr_Format(PyExc_IOError, "Could not convert HbacRule to native type\n"); } goto fail; } } rules[num_rules] = NULL; hbac_req = HbacRequest_to_native(self); if (!hbac_req) { if (!PyErr_Occurred()) { PyErr_Format(PyExc_IOError, "Could not convert HbacRequest to native type\n"); } goto fail; } Py_XDECREF(self->rule_name); self->rule_name = NULL; eres = hbac_evaluate(rules, hbac_req, &info); switch (eres) { case HBAC_EVAL_ALLOW: self->rule_name = sss_python_unicode_from_string(info->rule_name); if (!self->rule_name) { PyErr_NoMemory(); goto fail; } /* FALLTHROUGH */ case HBAC_EVAL_DENY: ret = PyInt_FromLong(eres); break; case HBAC_EVAL_ERROR: set_hbac_exception(PyExc_HbacError, info); goto fail; case HBAC_EVAL_OOM: PyErr_NoMemory(); goto fail; } free_hbac_eval_req(hbac_req); free_hbac_rule_list(rules); hbac_free_info(info); return ret; fail: hbac_free_info(info); free_hbac_eval_req(hbac_req); free_hbac_rule_list(rules); return NULL; } static PyObject * hbac_request_element_get_rule_name(HbacRequest *self, void *closure) { if (self->rule_name == NULL) { Py_INCREF(Py_None); return Py_None; } else if (PyUnicode_Check(self->rule_name)) { Py_INCREF(self->rule_name); return self->rule_name; } PyErr_Format(PyExc_TypeError, "rule_name is not Unicode"); return NULL; } static PyObject * HbacRequest_repr(HbacRequest *self) { PyObject *user_repr; PyObject *service_repr; PyObject *targethost_repr; PyObject *srchost_repr; PyObject *o, *format, *args; format = sss_python_unicode_from_string(""); if (format == NULL) { return NULL; } user_repr = HbacRequestElement_repr(self->user); service_repr = HbacRequestElement_repr(self->service); targethost_repr = HbacRequestElement_repr(self->targethost); srchost_repr = HbacRequestElement_repr(self->srchost); if (user_repr == NULL || service_repr == NULL || targethost_repr == NULL || srchost_repr == NULL) { Py_XDECREF(user_repr); Py_XDECREF(service_repr); Py_XDECREF(targethost_repr); Py_XDECREF(srchost_repr); Py_DECREF(format); return NULL; } args = Py_BuildValue(sss_py_const_p(char, "OOOO"), user_repr, service_repr, targethost_repr, srchost_repr); if (args == NULL) { Py_DECREF(user_repr); Py_DECREF(service_repr); Py_DECREF(targethost_repr); Py_DECREF(srchost_repr); Py_DECREF(format); return NULL; } o = PyUnicode_Format(format, args); Py_DECREF(user_repr); Py_DECREF(service_repr); Py_DECREF(targethost_repr); Py_DECREF(srchost_repr); Py_DECREF(format); Py_DECREF(args); return o; } static PyMethodDef py_hbac_request_methods[] = { { sss_py_const_p(char, "evaluate"), (PyCFunction) py_hbac_evaluate, METH_VARARGS, py_hbac_evaluate__doc__ }, { NULL, NULL, 0, NULL } /* Sentinel */ }; PyDoc_STRVAR(HbacRequest_service__doc__, "(HbacRequestElement) This is a list of service DNs to check, it must\n" "consist of the actual service requested, as well as all parent groups\n" "containing that service"); PyDoc_STRVAR(HbacRequest_user__doc__, "(HbacRequestElement) This is a list of user DNs to check, it must consist\n" "of the actual user requested, as well as all parent groups containing\n" "that user."); PyDoc_STRVAR(HbacRequest_targethost__doc__, "(HbacRequestElement) This is a list of target hosts to check, it must\n" "consist of the actual target host requested, as well as all parent groups\n" "containing that target host."); PyDoc_STRVAR(HbacRequest_srchost__doc__, "(HbacRequestElement) This is a list of source hosts to check, it must\n" "consist of the actual source host requested, as well as all parent groups\n" "containing that source host."); static PyMemberDef py_hbac_request_members[] = { { discard_const_p(char, "service"), T_OBJECT_EX, offsetof(HbacRequest, service), 0, HbacRequest_service__doc__ }, { discard_const_p(char, "user"), T_OBJECT_EX, offsetof(HbacRequest, user), 0, HbacRequest_user__doc__ }, { discard_const_p(char, "targethost"), T_OBJECT_EX, offsetof(HbacRequest, targethost), 0, HbacRequest_targethost__doc__ }, { discard_const_p(char, "srchost"), T_OBJECT_EX, offsetof(HbacRequest, srchost), 0, HbacRequest_srchost__doc__ }, { NULL, 0, 0, 0, NULL } /* Sentinel */ }; PyDoc_STRVAR(HbacRequest_rule_name__doc__, "(string) If result of evaluation was to allow access, this member contains\n" "the name of the rule that allowed it. Otherwise, this attribute contains \n" "None. This attribute is read-only.\n"); static PyGetSetDef py_hbac_request_getset[] = { { discard_const_p(char, "rule_name"), (getter) hbac_request_element_get_rule_name, NULL, /* read only */ HbacRequest_rule_name__doc__, NULL }, { NULL, 0, 0, 0, NULL } /* Sentinel */ }; PyDoc_STRVAR(HbacRequest__doc__, "IPA HBAC Request\n\n" "HbacRequest() -> new empty HBAC request"); static PyTypeObject pyhbac_hbacrequest_type = { PyObject_HEAD_INIT(NULL) .tp_name = sss_py_const_p(char, "pyhbac.HbacRequest"), .tp_basicsize = sizeof(HbacRequest), .tp_new = HbacRequest_new, .tp_dealloc = (destructor) HbacRequest_dealloc, .tp_traverse = (traverseproc) HbacRequest_traverse, .tp_clear = (inquiry) HbacRequest_clear, .tp_init = (initproc) HbacRequest_init, .tp_repr = (reprfunc) HbacRequest_repr, .tp_methods = py_hbac_request_methods, .tp_members = py_hbac_request_members, .tp_getset = py_hbac_request_getset, .tp_flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, .tp_doc = HbacRequest__doc__ }; static void free_hbac_eval_req(struct hbac_eval_req *req) { if (!req) return; free_hbac_request_element(req->service); free_hbac_request_element(req->user); free_hbac_request_element(req->targethost); free_hbac_request_element(req->srchost); PyMem_Free(req); } static struct hbac_eval_req * HbacRequest_to_native(HbacRequest *pyreq) { struct hbac_eval_req *req = NULL; req = PyMem_Malloc(sizeof(struct hbac_eval_req)); if (!req) { PyErr_NoMemory(); goto fail; } if (!PyObject_IsInstance((PyObject *) pyreq, (PyObject *) &pyhbac_hbacrequest_type)) { PyErr_Format(PyExc_TypeError, "The request must be of type HbacRequest\n"); goto fail; } req->service = HbacRequestElement_to_native(pyreq->service); req->user = HbacRequestElement_to_native(pyreq->user); req->targethost = HbacRequestElement_to_native(pyreq->targethost); req->srchost = HbacRequestElement_to_native(pyreq->srchost); if (!req->service || !req->user || !req->targethost || !req->srchost) { goto fail; } return req; fail: free_hbac_eval_req(req); return NULL; } /* =================== the pyhbac module initialization =====================*/ PyDoc_STRVAR(py_hbac_result_string__doc__, "hbac_result_string(code) -> string\n" "Returns a string representation of the HBAC result code"); static PyObject * py_hbac_result_string(PyObject *module, PyObject *args) { enum hbac_eval_result result; const char *str; if (!PyArg_ParseTuple(args, sss_py_const_p(char, "i"), &result)) { return NULL; } str = hbac_result_string(result); if (str == NULL) { /* None needs to be referenced, too */ Py_INCREF(Py_None); return Py_None; } return sss_python_unicode_from_string(str); } PyDoc_STRVAR(py_hbac_error_string__doc__, "hbac_error_string(code) -> string\n" "Returns a string representation of the HBAC error code"); static PyObject * py_hbac_error_string(PyObject *module, PyObject *args) { enum hbac_error_code code; const char *str; if (!PyArg_ParseTuple(args, sss_py_const_p(char, "i"), &code)) { return NULL; } str = hbac_error_string(code); if (str == NULL) { /* None needs to be referenced, too */ Py_INCREF(Py_None); return Py_None; } return sss_python_unicode_from_string(str); } static PyMethodDef pyhbac_module_methods[] = { { sss_py_const_p(char, "hbac_result_string"), (PyCFunction) py_hbac_result_string, METH_VARARGS, py_hbac_result_string__doc__, }, { sss_py_const_p(char, "hbac_error_string"), (PyCFunction) py_hbac_error_string, METH_VARARGS, py_hbac_error_string__doc__, }, {NULL, NULL, 0, NULL} /* Sentinel */ }; PyDoc_STRVAR(HbacError__doc__, "An HBAC processing exception\n\n" "This exception is raised when there is an internal error during the\n" "HBAC processing, such as an Out-Of-Memory situation or unparseable\n" "rule. HbacError.args argument is a tuple that contains error code and\n" "the name of the rule that was being processed. Use hbac_error_string()\n" "to get the text representation of the HBAC error"); PyMODINIT_FUNC initpyhbac(void) { PyObject *m; int ret; m = Py_InitModule(sss_py_const_p(char, PYTHON_MODULE_NAME), pyhbac_module_methods); if (m == NULL) return; /* The HBAC module exception */ PyExc_HbacError = sss_exception_with_doc( discard_const_p(char, "hbac.HbacError"), HbacError__doc__, PyExc_EnvironmentError, NULL); Py_INCREF(PyExc_HbacError); ret = PyModule_AddObject(m, sss_py_const_p(char, "HbacError"), PyExc_HbacError); if (ret == -1) return; /* HBAC rule categories */ ret = PyModule_AddIntMacro(m, HBAC_CATEGORY_NULL); if (ret == -1) return; ret = PyModule_AddIntMacro(m, HBAC_CATEGORY_ALL); if (ret == -1) return; /* HBAC rule elements */ ret = PyModule_AddIntMacro(m, HBAC_RULE_ELEMENT_USERS); if (ret == -1) return; ret = PyModule_AddIntMacro(m, HBAC_RULE_ELEMENT_SERVICES); if (ret == -1) return; ret = PyModule_AddIntMacro(m, HBAC_RULE_ELEMENT_TARGETHOSTS); if (ret == -1) return; ret = PyModule_AddIntMacro(m, HBAC_RULE_ELEMENT_SOURCEHOSTS); if (ret == -1) return; /* enum hbac_eval_result */ ret = PyModule_AddIntMacro(m, HBAC_EVAL_ALLOW); if (ret == -1) return; ret = PyModule_AddIntMacro(m, HBAC_EVAL_DENY); if (ret == -1) return; ret = PyModule_AddIntMacro(m, HBAC_EVAL_ERROR); if (ret == -1) return; /* enum hbac_error_code */ ret = PyModule_AddIntMacro(m, HBAC_ERROR_UNKNOWN); if (ret == -1) return; ret = PyModule_AddIntMacro(m, HBAC_SUCCESS); if (ret == -1) return; ret = PyModule_AddIntMacro(m, HBAC_ERROR_NOT_IMPLEMENTED); if (ret == -1) return; ret = PyModule_AddIntMacro(m, HBAC_ERROR_OUT_OF_MEMORY); if (ret == -1) return; ret = PyModule_AddIntMacro(m, HBAC_ERROR_UNPARSEABLE_RULE); if (ret == -1) return; TYPE_READY(m, pyhbac_hbacrule_type, "HbacRule"); TYPE_READY(m, pyhbac_hbacrule_element_type, "HbacRuleElement"); TYPE_READY(m, pyhbac_hbacrequest_element_type, "HbacRequestElement"); TYPE_READY(m, pyhbac_hbacrequest_type, "HbacRequest"); } 'n1481' href='#n1481'>1481 1482 1483 1484 1485 1486 1487 1488 1489 1490 1491 1492 1493 1494 1495 1496 1497 1498 1499 1500 1501 1502 1503 1504 1505 1506 1507 1508 1509 1510 1511 1512 1513 1514 1515 1516 1517 1518 1519 1520 1521 1522 1523 1524 1525 1526 1527 1528 1529 1530 1531 1532 1533 1534 1535 1536 1537 1538 1539 1540 1541 1542 1543 1544 1545 1546 1547 1548 1549 1550 1551 1552 1553 1554 1555 1556 1557 1558 1559 1560 1561 1562 1563 1564 1565 1566 1567 1568 1569 1570 1571 1572 1573 1574 1575 1576 1577 1578 1579 1580 1581 1582 1583 1584 1585 1586 1587 1588 1589 1590 1591 1592 1593 1594 1595 1596 1597 1598 1599 1600 1601 1602 1603 1604 1605 1606 1607 1608 1609 1610 1611 1612 1613 1614 1615 1616 1617 1618 1619 1620 1621 1622 1623 1624 1625 1626 1627 1628 1629 1630 1631 1632 1633 1634 1635 1636 1637 1638 1639 1640 1641 1642 1643 1644 1645 1646 1647 1648 1649 1650 1651 1652 1653 1654 1655 1656 1657 1658 1659 1660 1661 1662 1663 1664 1665 1666 1667 1668 1669 1670 1671 1672 1673 1674 1675 1676 1677 1678 1679 1680 1681 1682 1683 1684 1685 1686 1687 1688 1689 1690 1691 1692 1693 1694 1695 1696 1697 1698 1699 1700 1701 1702 1703 1704 1705 1706 1707 1708 1709 1710 1711 1712 1713 1714 1715 1716 1717 1718 1719 1720 1721 1722 1723 1724 1725 1726 1727 1728 1729 1730 1731 1732 1733 1734 1735 1736 1737 1738 1739 1740 1741 1742 1743 1744 1745 1746 1747 1748 1749 1750 1751 1752 1753 1754 1755 1756 1757 1758 1759 1760 1761 1762 1763 1764 1765 1766 1767 1768 1769 1770 1771 1772 1773 1774 1775 1776 1777 1778 1779 1780 1781 1782 1783 1784 1785 1786 1787 1788 1789 1790 1791 1792 1793 1794 1795 1796 1797 1798 1799 1800 1801 1802 1803 1804 1805 1806 1807 1808 1809 1810 1811 1812 1813 1814 1815 1816 1817 1818 1819 1820 1821 1822 1823 1824 1825 1826 1827 1828 1829 1830 1831 1832 1833 1834 1835 1836 1837 1838 1839 1840 1841 1842 1843 1844 1845 1846 1847 1848 1849 1850 1851 1852 1853 1854 1855 1856 1857 1858 1859 1860 1861 1862 1863 1864 1865 1866 1867 1868 1869 1870 1871 1872 1873 1874 1875 1876 1877 1878 1879 1880 1881 1882 1883 1884 1885 1886 1887 1888 1889 1890 1891 1892 1893 1894 1895 1896 1897 1898 1899 1900 1901 1902 1903 1904 1905 1906 1907 1908 1909 1910 1911 1912 1913 1914 1915 1916 1917 1918 1919 1920 1921 1922 1923 1924 1925 1926 1927 1928 1929 1930 1931 1932 1933 1934 1935 1936 1937 1938 1939 1940 1941 1942 1943 1944 1945 1946 1947 1948 1949 1950 1951 1952 1953 1954 1955 1956 1957 1958 1959 1960 1961 1962 1963 1964 1965 1966 1967 1968 1969 1970 1971 1972 1973 1974 1975 1976 1977 1978 1979 1980 1981 1982 1983 1984 1985 1986 1987 1988 1989 1990 1991 1992 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 2019 2020 2021 2022 2023 2024 2025 2026 2027 2028 2029 2030 2031 2032 2033 2034 2035 2036 2037 2038 2039 2040 2041 2042 2043 2044 2045 2046 2047 2048 2049 2050 2051 2052 2053 2054 2055 2056 2057 2058 2059 2060 2061 2062 2063 2064 2065 2066 2067 2068 2069 2070 2071 2072 2073 2074 2075 2076 2077 2078 2079 2080 2081 2082 2083 2084 2085 2086 2087 2088 2089 2090 2091 2092 2093 2094 2095 2096 2097 2098 2099 2100 2101 2102 2103 2104 2105 2106 2107 2108 2109 2110 2111 2112 2113 2114 2115 2116 2117 2118 2119 2120 2121 2122 2123 2124 2125 2126 2127 2128 2129 2130 2131 2132 2133 2134 2135 2136 2137 2138 2139 2140 2141 2142 2143 2144 2145 2146 2147 2148 2149 2150 2151 2152 2153 2154 2155 2156 2157 2158 2159 2160 2161 2162 2163 2164 2165 2166 2167 2168 2169 2170 2171 2172 2173 2174 2175 2176 2177 2178 2179 2180 2181 2182 2183 2184 2185 2186 2187 2188 2189 2190 2191 2192 2193 2194 2195 2196 2197 2198 2199 2200 2201 2202 2203 2204 2205 2206 2207 2208 2209 2210 2211 2212 2213 2214 2215 2216 2217 2218 2219 2220 2221 2222 2223 2224 2225 2226 2227 2228 2229 2230 2231 2232 2233 2234 2235 2236 2237 2238 2239 2240 2241 2242 2243 2244 2245 2246 2247 2248 2249 2250 2251 2252 2253 2254 2255 2256 2257 2258 2259 2260 2261 2262 2263 2264 2265 2266 2267 2268 2269 2270 2271 2272 2273 2274 2275 2276 2277 2278 2279 2280 2281 2282 2283 2284 2285 2286 2287 2288 2289 2290 2291 2292 2293 2294 2295 2296 2297 2298 2299 2300 2301 2302 2303 2304 2305 2306 2307 2308 2309 2310 2311 2312 2313 2314 2315 2316 2317 2318 2319 2320 2321 2322 2323 2324 2325 2326 2327 2328 2329 2330 2331 2332 2333 2334 2335 2336 2337 2338 2339 2340 2341 2342 2343 2344 2345 2346 2347 2348 2349 2350 2351 2352 2353 2354 2355 2356 2357 2358 2359 2360 2361 2362 2363 2364 2365 2366 2367 2368 2369 2370 2371 2372 2373 2374 2375 2376 2377 2378 2379 2380 2381 2382 2383 2384 2385 2386 2387 2388 2389 2390 2391 2392 2393 2394 2395 2396 2397 2398 2399 2400 2401 2402 2403 2404 2405 2406 2407 2408 2409 2410 2411 2412 2413 2414 2415 2416 2417 2418 2419 2420 2421 2422 2423 2424 2425 2426 2427 2428 2429 2430 2431 2432 2433 2434 2435 2436 2437 2438 2439 2440 2441 2442 2443 2444 2445 2446 2447 2448 2449 2450 2451 2452 2453 2454 2455 2456 2457 2458 2459 2460 2461 2462 2463 2464 2465 2466 2467 2468 2469 2470 2471 2472 2473 2474 2475 2476 2477 2478 2479 2480 2481 2482 2483 2484 2485 2486 2487 2488 2489 2490 2491 2492 2493 2494 2495 2496 2497 2498 2499 2500 2501 2502 2503 2504 2505 2506 2507 2508 2509 2510 2511 2512 2513 2514 2515 2516 2517 2518 2519 2520 2521 2522 2523 2524 2525 2526 2527 2528 2529 2530 2531 2532 2533 2534 2535 2536 2537 2538 2539 2540 2541 2542 2543 2544 2545 2546 2547 2548 2549 2550 2551 2552 2553 2554 2555 2556 2557 2558 2559 2560 2561 2562 2563 2564 2565 2566 2567 2568 2569 2570 2571 2572 2573 2574 2575 2576 2577 2578 2579 2580 2581 2582 2583 2584 2585 2586 2587 2588 2589 2590 2591 2592 2593 2594 2595 2596 2597 2598 2599 2600 2601 2602 2603 2604 2605 2606 2607 2608 2609 2610 2611 2612 2613 2614 2615 2616 2617 2618 2619 2620 2621 2622 2623 2624 2625 2626 2627 2628 2629 2630 2631 2632 2633 2634 2635 2636 2637 2638 2639 2640 2641 2642 2643 2644 2645 2646 2647 2648 2649 2650 2651 2652 2653 2654 2655 2656 2657 2658 2659 2660 2661 2662 2663 2664 2665 2666 2667 2668 2669 2670 2671 2672 2673 2674 2675 2676 2677 2678 2679 2680 2681 2682 2683 2684 2685 2686 2687 2688 2689 2690 2691 2692 2693 2694 2695 2696 2697 2698 2699 2700 2701 2702 2703 2704 2705 2706 2707 2708 2709 2710 2711 2712 2713 2714 2715 2716 2717 2718 2719 2720 2721 2722 2723 2724 2725 2726 2727 2728 2729 2730 2731 2732 2733 2734 2735 2736 2737 2738 2739 2740 2741 2742 2743 2744 2745 2746 2747 2748 2749 2750 2751 2752 2753 2754 2755 2756 2757 2758 2759 2760 2761 2762 2763 2764 2765 2766 2767 2768 2769 2770 2771 2772 2773 2774 2775 2776 2777 2778 2779 2780 2781 2782 2783 2784 2785 2786 2787 2788 2789 2790 2791 2792 2793 2794 2795 2796 2797 2798 2799 2800 2801 2802 2803 2804 2805 2806 2807 2808 2809 2810 2811 2812 2813 2814 2815 2816 2817 2818 2819 2820 2821 2822 2823 2824 2825 2826 2827 2828 2829 2830 2831 2832 2833 2834 2835 2836 2837 2838 2839 2840 2841 2842 2843 2844 2845 2846 2847 2848 2849 2850 2851 2852 2853 2854 2855 2856 2857 2858 2859 2860 2861 2862 2863 2864 2865 2866 2867 2868 2869 2870 2871 2872 2873 2874 2875 2876 2877 2878 2879 2880 2881 2882 2883 2884 2885 2886 2887 2888 2889 2890 2891 2892 2893 2894 2895 2896 2897 2898 2899 2900 2901 2902 2903 2904 2905 2906 2907 2908 2909 2910 2911 2912 2913 2914 2915 2916 2917 2918 2919 2920 2921 2922 2923 2924 2925 2926 2927 2928 2929 2930 2931 2932 2933 2934 2935 2936 2937 2938 2939 2940 2941 2942 2943 2944 2945 2946 2947 2948 2949 2950 2951 2952 2953 2954 2955 2956 2957 2958 2959 2960 2961 2962 2963 2964 2965 2966 2967 2968 2969 2970 2971 2972 2973 2974 2975 2976 2977 2978 2979 2980 2981 2982 2983 2984 2985 2986 2987 2988 2989 2990 2991 2992 2993 2994 2995 2996 2997 2998 2999 3000 3001 3002 3003 3004 3005 3006 3007 3008 3009 3010 3011 3012 3013 3014 3015 3016 3017 3018 3019 3020 3021 3022 3023 3024 3025 3026 3027 3028 3029 3030 3031 3032 3033 3034 3035 3036 3037 3038 3039 3040 3041 3042 3043 3044 3045 3046 3047 3048 3049 3050 3051 3052 3053 3054 3055 3056 3057 3058 3059 3060 3061 3062 3063 3064 3065 3066 3067 3068 3069 3070 3071 3072 3073 3074 3075 3076 3077 3078 3079 3080 3081 3082 3083 3084 3085 3086 3087 3088 3089 3090 3091 3092 3093 3094 3095 3096 3097 3098 3099 3100 3101 3102 3103 3104 3105 3106 3107 3108 3109 3110 3111 3112 3113 3114 3115 3116 3117 3118 3119 3120 3121 3122 3123 3124 3125 3126 3127 3128 3129 3130 3131 3132 3133 3134 3135 3136 3137 3138 3139 3140 3141 3142 3143 3144 3145 3146 3147 3148 3149 3150 3151 3152 3153 3154 3155 3156 3157 3158 3159 3160 3161 3162 3163 3164 3165 3166 3167 3168 3169 3170 3171 3172 3173 3174 3175 3176 3177 3178 3179 3180 3181 3182 3183 3184 3185 3186 3187 3188 3189 3190 3191 3192 3193 3194 3195 3196 3197 3198 3199 3200 3201 3202 3203 3204 3205 3206 3207 3208 3209 3210 3211 3212 3213 3214 3215 3216 3217 3218 3219 3220 3221 3222 3223 3224 3225 3226 3227 3228 3229 3230 3231 3232 3233 3234 3235 3236 3237 3238 3239 3240 3241 3242 3243 3244 3245 3246 3247 3248 3249 3250 3251 3252 3253 3254 3255 3256 3257 3258 3259 3260 3261 3262 3263 3264 3265 3266 3267 3268 3269 3270 3271 3272 3273 3274 3275 3276 3277 3278 3279 3280 3281 3282 3283 3284 3285 3286 3287 3288 3289 3290 3291 3292 3293 3294 3295 3296 3297 3298 3299 3300 3301 3302 3303 3304 3305 3306 3307 3308 3309 3310 3311 3312 3313 3314 3315 3316 3317 3318 3319 3320 3321 3322 3323 3324 3325 3326 3327 3328 3329 3330 3331 3332 3333 3334 3335 3336 3337 3338 3339 3340 3341 3342 3343 3344 3345 3346 3347 3348 3349 3350 3351 3352 3353 3354 3355 3356 3357 3358 3359 3360 3361 3362 3363 3364 3365 3366 3367 3368 3369 3370 3371 3372 3373 3374 3375 3376 3377 3378 3379 3380 3381 3382 3383 3384 3385 3386 3387 3388 3389 3390 3391 3392 3393 3394 3395 3396 3397 3398 3399 3400 3401 3402 3403 3404 3405 3406 3407 3408 3409 3410 3411 3412 3413 3414 3415 3416 3417 3418 3419 3420 3421 3422 3423 3424 3425 3426 3427 3428 3429 3430 3431 3432 3433 3434 3435 3436 3437 3438 3439 3440 3441 3442 3443 3444 3445 3446 3447 3448 3449 3450 3451 3452 3453 3454 3455 3456 3457 3458 3459 3460 3461 3462 3463 3464 3465 3466 3467 3468 3469 3470 3471 3472 3473 3474 3475 3476 3477 3478 3479 3480 3481 3482 3483 3484 3485 3486 3487 3488 3489 3490 3491 3492 3493 3494 3495 3496 3497 3498 3499 3500 3501 3502 3503 3504 3505 3506 3507 3508 3509 3510 3511 3512 3513 3514 3515 3516 3517 3518 3519 3520 3521 3522 3523 3524 3525 3526 3527 3528 3529 3530 3531 3532 3533 3534 3535 3536 3537 3538 3539 3540 3541 3542 3543 3544 3545 3546 3547 3548 3549 3550 3551 3552 3553 3554 3555 3556 3557 3558 3559 3560 3561 3562 3563 3564 3565 3566 3567 3568 3569 3570 3571 3572 3573 3574 3575 3576 3577 3578 3579 3580 3581 3582 3583 3584 3585 3586 3587 3588 3589 3590 3591 3592 3593 3594 3595 3596 3597 3598 3599 3600 3601 3602 3603 3604 3605 3606 3607 3608 3609 3610 3611 3612 3613 3614 3615 3616 3617 3618 3619 3620 3621 3622 3623 3624 3625 3626 3627 3628 3629 3630 3631 3632 3633 3634 3635 3636 3637 3638 3639 3640 3641 3642 3643 3644 3645 3646 3647 3648 3649 3650 3651 3652 3653 3654 3655 3656 3657 3658 3659 3660 3661 3662 3663 3664 3665 3666 3667 3668 3669 3670 3671 3672 3673 3674 3675 3676 3677 3678 3679 3680 3681 3682 3683 3684 3685 3686 3687 3688 3689 3690 3691 3692 3693 3694 3695 3696 3697 3698 3699 3700 3701 3702 3703 3704 3705 3706 3707 3708 3709 3710 3711 3712 3713 3714 3715 3716 3717 3718 3719 3720 3721 3722 3723 3724 3725 3726 3727 3728 3729 3730 3731 3732 3733 3734 3735 3736 3737 3738 3739 3740 3741 3742 3743 3744 3745 3746 3747 3748 3749 3750 3751 3752 3753 3754 3755 3756 3757 3758 3759 3760 3761 3762 3763 3764 3765 3766 3767 3768 3769 3770 3771 3772 3773 3774 3775 3776 3777 3778 3779 3780 3781 3782 3783 3784 3785 3786 3787 3788 3789 3790 3791 3792 3793 3794 3795 3796 3797 3798 3799 3800 3801 3802 3803 3804 3805 3806 3807 3808 3809 3810 3811 3812 3813 3814 3815 3816 3817 3818 3819 3820 3821 3822 3823 3824 3825 3826 3827 3828 3829 3830 3831 3832 3833 3834 3835 3836 3837 3838 3839 3840 3841 3842 3843 3844 3845 3846 3847 3848 3849 3850 3851 3852 3853 3854 3855 3856 3857 3858 3859 3860 3861 3862 3863 3864 3865 3866 3867 3868 3869 3870 3871 3872 3873 3874 3875 3876 3877 3878 3879 3880 3881 3882 3883 3884 3885 3886 3887 3888 3889 3890 3891 3892 3893 3894 3895 3896 3897 3898 3899 3900 3901 3902 3903 3904 3905 3906 3907 3908 3909 3910 3911 3912 3913 3914 3915 3916 3917 3918 3919 3920 3921 3922 3923 3924 3925 3926 3927 3928 3929 3930 3931 3932 3933 3934 3935 3936 3937 3938 3939 3940 3941 3942 3943 3944 3945 3946 3947 3948 3949 3950 3951 3952 3953 3954 3955 3956 3957 3958 3959 3960 3961 3962 3963 3964 3965 3966 3967 3968 3969 3970 3971 3972 3973 3974 3975 3976 3977 3978 3979 3980 3981 3982 3983 3984 3985 3986 3987 3988 3989 3990 3991 3992 3993 3994 3995 3996 3997 3998 3999 4000 4001 4002 4003 4004 4005 4006 4007 4008 4009 4010 4011 4012 4013 4014 4015 4016 4017 4018 4019 4020 4021 4022 4023 4024 4025 4026 4027 4028 4029 4030 4031 4032 4033 4034 4035 4036 4037 4038 4039 4040 4041 4042 4043 4044 4045 4046 4047 4048 4049 4050 4051 4052 4053 4054 4055 4056 4057 4058 4059 4060 4061 4062 4063 4064 4065 4066 4067 4068 4069 4070 4071 4072 4073 4074 4075 4076 4077 4078 4079 4080 4081 4082 4083 4084 4085 4086 4087 4088 4089 4090 4091 4092 4093 4094 4095 4096 4097 4098 4099 4100 4101 4102 4103 4104 4105 4106 4107 4108 4109 4110 4111 4112 4113 4114 4115 4116 4117 4118 4119 4120 4121 4122 4123 4124 4125 4126 4127 4128 4129 4130 4131 4132 4133 4134 4135 4136 4137 4138 4139 4140 4141 4142 4143 4144 4145 4146 4147 4148 4149 4150 4151 4152 4153 4154 4155 4156 4157 4158 4159 4160 4161 4162 4163 4164 4165 4166 4167 4168 4169 4170 4171 4172 4173 4174 4175 4176 4177 4178 4179 4180 4181 4182 4183 4184 4185 4186 4187 4188 4189 4190 4191 4192 4193 4194 4195 4196 4197 4198 4199 4200 4201 4202 4203 4204 4205 4206 4207 4208 4209 4210 4211 4212 4213 4214 4215 4216 4217 4218 4219 4220 4221 4222 4223 4224 4225 4226 4227 4228 4229 4230 4231 4232 4233 4234 4235 4236 4237 4238 4239 4240 4241 4242 4243 4244 4245 4246 4247 4248 4249 4250 4251 4252 4253 4254 4255 4256 4257 4258 4259 4260 4261 4262 4263 4264 4265 4266 4267 4268 4269 4270 4271 4272 4273 4274 4275 4276 4277 4278 4279 4280 4281 4282 4283 4284 4285 4286 4287 4288 4289 4290 4291 4292 4293 4294 4295 4296 4297 4298 4299 4300 4301 4302 4303 4304 4305 4306 4307 4308 4309 4310 4311 4312 4313 4314 4315 4316 4317 4318 4319 4320 4321 4322 4323 4324 4325 4326 4327 4328 4329 4330 4331 4332 4333 4334 4335 4336 4337 4338 4339 4340 4341 4342 4343 4344 4345 4346 4347 4348 4349 4350 4351 4352 4353 4354 4355 4356 4357 4358 4359 4360 4361 4362 4363 4364 4365 4366 4367 4368 4369 4370 4371 4372 4373 4374 4375 4376 4377 4378 4379 4380 4381 4382 4383 4384 4385 4386 4387 4388 4389 4390 4391 4392 4393 4394 4395 4396 4397 4398 4399 4400 4401 4402 4403 4404 4405 4406 4407 4408 4409 4410 4411 4412 4413 4414 4415 4416 4417 4418 4419 4420 4421 4422 4423 4424 4425 4426 4427 4428 4429 4430 4431 4432 4433 4434 4435 4436 4437 4438 4439 4440 4441 4442 4443 4444 4445 4446 4447 4448 4449 4450 4451 4452 4453 4454 4455 4456 4457 4458 4459 4460 4461 4462 4463 4464 4465 4466 4467 4468 4469 4470 4471 4472 4473 4474 4475 4476 4477 4478 4479 4480 4481 4482 4483 4484 4485 4486 4487 4488 4489 4490 4491 4492 4493 4494 4495 4496
0.25.0
======
b1eddbb  Updated and created new CHANGELOG format
994d6e0  Adding tests for the #2599 fix
42ab73f  Ticket #2525 don't fail find_manifest on invalid module names
a0f0dcc  Updated permissions on test files
d45812b  Refactoring tests to reduce code size, increase coverage, and make
aba2f66  This further normalizes the handling of init-style services (including
fb236a0  Combined fix for #2525, #2552 -- RedHat service issues
d40b942  Fixed #2589 - Renamed zfs delete to destroy and added tests
4aa7fce  Monkey patch to improve yaml compatibility between ruby versions
1f6c74d  Fixed typo in parser test
2e9b706  Updated Red Hat spec file and RH patches for 0.25.0.
19815dd  Fixing #2592 - you can escape slashes in regexes
ea58478  Fixing #2590 - modulepath is not cached inappropriately
1a3d0c8  Fixed #2593: puppet init script status command not returning proper exit code
8dabc72  Update documentation string to reflect actual intent of Puppet::Node::Facts::Rest
b30a3c7  Fixes #2581. Use new 10.6 global launchd overrides file for service status/enabled
7f05469  Fixed Naginator link
e589cd3  Fixing #2582 - / no longer autorequires /
3342b73  Fixing #2577 - clarifying and demoting the deprecation notice
d397f8d  Fixing #2574 - autoloading finds plugins in modules
800a78b  The first regex node now matches first
6750aeb  Fixing #2563 - multiple regex nodes now work together
b728b93  Fixes #724 - false is equivalent to 'ruby -W1'
a9d5863  Fix parser error output
ee4f6ba  Fixing #2551 - fixing content changed logs
c8f859e  Fix for test isolation portion of Ticket #2511
6fa9271  Fixing #2549 - autoloading of top-level classes works again
c752680  Fixing a heisenbug resulting from a race condition
ea417d6  Fixing #2460 - puppetmasterd can now read the cert and key
a49915a  Not using the service user in settings when it's unavailable
14ec838  Explicitly loading all facts in the directory service provider
5ee6602  Adding an 'exists?' delegator from user type to provider
06fcece  Switching the owner/group settings to use symbolic values
4eb325a  Fixing the yamldir group to be a group instead of user
058514a  Moving Setting classes into separate files
b0f219a  Removing chuser on darwin restriction
7f749cb  Fixing a ruby warning in the authstore test
c0da3bf  Fixing #2558 - propagating recent fileserving changes
ff39bc7  Fixes #2550 Handles case where metadata is nil
47dee83  Ticket 2559 -- parseonly ignored specified file
a4f6896  Fixed #2562 - Recognize the usecacheonfailure option again
e408d6c  Refactoring the Module/Environment co-interface
796ba5c  Fixing #1544 - plugins in modules now works again
6bd3627  Adding a global cleanup to the spec_helper
0ef5f22  Removed misguided case sensitivity tests
c1967bb  Fixes #2513. debian service provider now uses invoke-rc.d to determine enabled? status
7e09247  Fixing fact-missing problem when puppet.conf is reparsed
a35e9bf  Fix for #2531; adds tests to confirm problem and related cases,
299eadb  Fixed #2530 - Fixed status setting in the SMF provider
e6a7e82  Fixed spec typo
75c6e4a  Fixes #2493
b62d966  conf/redhat/*.init: Fix condrestart/try-restart
e9fbd4c  conf/redhat/client.init: Fix #2123, status options on older RHEL
0461a02  Updates to Solaris smf files to reflect new binary locations
55a9cdb  Fix #2517 - Stack overflow when CA cert missing
601a2e5  Fix #2516 - Fix format detection when content-type contains charset
d86bc88  Fix #2507 - Add missing integration tests
aad3b76  Fix #2507 - Exported resources were not correctly collected.
63cb1ad  Fixes #2503
c129f2a  Fixes #2360 - Removed annoying log message
b1ffffa  Fixed #2525 - Wrong method being overridden in Red Hat services
a88fc4d  Fixing more tests broken from missing libraries
9a356ab  Fixing ActiveRecord Indirector tests to skip w/out Rails
acc5a96  Fixing #2489 - queue integration tests are skipped w/out json
1a5c5b3  Fixing #2508 - removing mention of ActiveRecord 2.3
0cb9072  Fixing #2541 - file cache is more resilient to failure
23948d0  vim: Mark puppetFunction values as contained
79a4339  Add shellquote() function.
79d705f  Fixes #2499. Allows execs to specify an array for the returns parameter
b611c34  Updated fix for #2481
f385072  Revert "Fxied #2481 - Added status and restart overrides for Red Hat service provider."
cc379b6  Fixed #2498 - logcheck update
85a3633  Removed extraneous debugging

0.25.0rc1
=========
bf94de9  Updated two more tests
5b87dba  Logs now assume resource params have metadata
1410bed  Adding metadata delegation from param to resource
3ab3a5c  Removing unnecessary debug output
488e368  Adding integration tests for #2371 (backup refactor)
f1406bf  Adding many tests for #2371, and slightly refactoring
8f60f0c  Fixes for Redmine 2371.
cd224c6  Fixes #2464, #2457. Deprecate reportserver for report_server. Add report_port setting. Add tests.
401a9ec  Fixing #2484 - "format missing" messages are better
f6cc598  Fixes #2483 - Log only copies metadata from RAL objects
7c4c00f  Fixed #2486 - Missing require 'monitor' in parser_support.rb
ea34ee6  Added R.I.Pienaar's extlookup.rb to the ext directory
36d3f58  Added example conf/puppet-queue.conf
967eb9f  Fxied #2481 - Added status and restart overrides for Red Hat service provider.
c702f76  rack: SSL Env vars can be in Request.env or ENV
ca17b3c  rack: don't directly use the forbidden HTTP_CONTENT_TYPE env var (fixes rack specification conformance)
a002e58  Removing old filebucket test
d8de446  Cleaning up tests for #2469
266aafa  default server in remote filebuckets
1f8ef60  Fixes #2444 - Various JSON test failures
11c0fb7  Fixed #2294 - Classes sometimes cannot be found
7e5b562  Adding #2477 - puppet can apply provided catalogs
97274ad  Fixing problems my Feature refactor caused
6fb8bf6  Fixing ruby warning in definition test
b3545fc  Fixed global deprecation error in useradd Unit tests
dc24472  Adding a test for the Exec type
58d9587  Speeding a test up through stubbing
d4d8372  Fixing a small test by stubbing instead of mocking
f7e1c36  Fixing a test broken by the regex features
54a225d  Fixing tests broken by caching autoload results
1ce31b4  Migrating Handler base tests from test/ to spec/
cc3f56a  Migrating Feature tests to spec
21d1d25  Fixing cron test to match new behaviour
849fa67  Migrating tests to spec and removing an obsolete test
6f458cc  Logging the configuration version we're applying
ac58e27  Configuration version information is now in logs
6ed0103  Adding support for an external catalog version
39320b8  Cleaning up duplication in another test file
25fae5f  Removing duplication in the test structure
36c0662  Simplified Rakefile and moved tasks to tasks/rake directorya
b45ccf8  Implement node matching with regexes
58a73b5  Make sure node are referenced by their names
3ebf148  Enhance selector and case statements to match with regexp
ef68967  Fix #2033 - Allow regexp in if expression
17e62b1  Add AST::Regex, an AST leaf node representing a regex
4f9545f  Add regexes and regex match operators to the parser
0ccd259  Add regex, match and not match token to the lexer
201ae59  Allow variable $0 to $9 to be interpolated, if ephemeral
f357a91  Implement ephemeral scope variables
d40ef29  Signed-off-by: Eric Sorenson <ahpook@gmail.com>
6d22afb  Modifying the REST client error to make server errors more clear
21f477a  Fixes #2472. Load Facter facts when ralsh is invoked, plus test.
2e41edb  Update CHANGELOG.git
ebb5a1f  Fixed ci_spec task for RubyGems 1.3.5
b6b903e  Fixes #2461. Provide new and old code paths for macosx_productversion_major with deprecation warning
26b0c70  Fixing typo in two tests which caused them to always pass
76fc2b1  Fixing #2440 - catalogs can now be compiled on demand
832b6ff  Exiting from app failures instead of raising
4ea3f17  Minimal patch to fix #2290 (/tmp permissions)
08ff9e8  Fix #2467 - rack: suggest putting puppet/lib at beginning of RUBYLIB search path
fb60f90  Fix #2465 - Default auth information is confusing with no auth.conf
0ca9b53  Fix #2459 - puppetdoc added namespace classes as RDoc modules instead of classes
18b5d61  Fix #2429 - vim: class/define/node should only be followed by whitespace
da828a4  Fix #2448 - fix the broken runit provider and tests
3898436  Fixed #2405 - Mount parameter "dump" doesn't accept all valid values on FreeBSD
9825bec  Fixes #2362. Do not validate users/groups when supplied with numeric uid/gids
450a19c  Fix #2454 - Definition named after a module don't show in puppetdoc
8551ece  Fix #2453 - puppetdoc mixes long class names that look alike
e3ee594  Fix #2422 & #2433 - make sure puppetdoc transform AST::Leaf boolean correctly
b3b76df  Fixing #2296 - overlapping recursions work again
9120712  Fixing mocks to remove warnings
eeec8e9  Fixing #2423 - no more strange dependency cycles
7d40f9e  Fixing #2443: Adding debugging guidance to dep cycle errors
b4facb0  Fixing a test broken by changing the default os x package type
b418921  Fixing selinux tests broken in the fix for #1963
719e76b  Fixing #2445 - fixing the mount test mock
f13f08d  Minor fix to URL for LDAP nodes documentation
7c859a7  Fixing #2399 - removing client-side rrd graphs
f6d6145  Fixing #2421 - file renaming errors now propagate
db82523  Fixes #2438, get major OS X version from Facter and replace Puppet::Error invocations with fail builtin
22145e7  Update install.rb to cope with all OS X versions, not just 10.5
935c463  Fixing #2403 - provider specificity is richer and better
d95b687  Fix #2439 - let puppetdoc use loaded_code
ef5c4ae  Fixed #2436 - Changed ralsh to use Puppet::Type.new and avoid deprecation notice
0c18013  Fixes #2430 - Stock apache2.conf for passenger incorrect
c383ceb  Make pkgdmg default Darwin provider, make confines consistent on Darwin package providers.
98599c4  Convert to using sbindir for OS X packages, clean out previous executables in bindir
c659743  Fix #2425 - make sure client can contact CA server with REST
17205bb  Fix #2424 - take 2, make sure default mounts allow every clients
f2c55cc  Fix #2378 and #2391 tests
8bbd8b4  Fix #2424 - File server can't find module in environment
effaf80  Fix small typo in the fix for #2394
a06094e  Feature #2378 - Implement "thin_storeconfigs"
b2a008e  Fix #2391 - Exported resources never make to the storeconfigs db
8f82407  Fix #2261 - Make sure query string parameters are properly escaped
c86d44e  Fixed #579 - puppet should try to clear solaris 10 services in maintenance state
910a5e2  Fix #1963 - Failing to read /proc/mounts for selinux kills file downloads
ba824e9  Fixing #2245 - provider lists are not lost on type reload
eb40966  Ruby no longer clobbers puppet autoloading
a42e878  deprecate NetInfo providers and examples, remove all NetInfo references and tests.
22f5632  Fixed #2410 - default acl logs as info instead of warn.
65b0137  Adding test for current auth config warning.
74f5ad4  Fixed #2394 - warn once on module mount deprecation.
f46a52a  Add test for current module mount deprec warning.
858d333  Fixes #2258,#2257,#2256. Maintain correct type for integers/booleans, allow correct values, and fix rule array handling
44f127f  Added Markdown mode to puppetdoc to output Markdown.
8a8ce9d  Excluded directories from rcov coverage report
d152c5e  Allow boolean value for boolean cli parameter
911b490  Fix #2364 - Associates the correct comment to the right statement
faefd92  Make sure the parser sees the correct line number
869ec27  Fix #2366 - puppetdoc was parsing classes in the wrong order
4c659b7  Added rcov coverage to Spec tests
1fd98b1  Fixes #2367 - Mongrel::HTTPRequest returns a StringIO object
8b09b83  Fix #2082 - puppetca shouldn't list revoked certificates
ea66cf6  Fix #2348 - Allow authstore (and REST auth) to match allow/deny against opaque strings
1e83aad  Fix #2392 - use Content-Type for REST communication
aaca17a  Fixed #2293 - Added cron syntax X-Y/Z and '7' for sunday
cddc365  Switching to LoadedCode from ASTSet
fc1f8cd  Adding a special class to handle loaded classes/defines/nodes
325b8e4  Fix #2383, an incompatibility with early ruby 1.8 versions
46112da  Fixing #2238 In some cases blank? is not available on String.
cdd1662  Fixing #2238 - Deal with nil hash keys from mongrel params
769c8aa  Final fix to CI test rakes
a6816ff  Set ENV['PATH'] to an empty string if non-existent
64a4720  Fix to CI rake tasks
5680cd5  Fixing #2197 - daemontools tests now pass
603b9cf  Change the diff default output to "unified"
9bc9b5c  Added missing colon to suntab
0f2d70d  Fixed #2087 and refactored the code that gets the smf service state
3f070c1  Using the logging utilities to clean up module warnings
feb7f89  Fixing #1064 - Deprecating module 'plugins' directories
ccf4e69  Removing deprecated :pluginpath setting
4036de9  Fixing #2094 - filebucket failures are clearer now
ed876e0  Refactoring part of the file/filebucket integration
bd81c25  Adding tests for file/backup behaviour
c45ebfa  Fixed pi binary so --meta option works and updated documentation
d2080a5  Fixing #2323 - Modules use environments correctly
b9e632f  Fixed #2102 - Rails feature update fixed for Debian and Ubuntu
1c4ef61  Fixed #2052 - Added -e option to puppet --help output
d332333  Fix #2333 - Make sure lexer skip whitespace on non-token
5fbf63c  Updated split function and add split function unit tests (courtesy of Thomas Bellman)
a585bdd  * provider/augeas: strip whitespace and ignore blank lines
a94d2de  Fixed pi tests
5f7455e  Fixed #2222 - Cleanup pi binary options and --help output
134ae3e  Fixing #2329 - puppetqd tests now pass
de55e19  Cleaning up scope tests a bit
e4ae870  Fixing #2336 - qualified variables only throw warnings
607b01e  Fix #2246 - take2: make sure we run the rails tag query only when needed
06b919d  Fix collector specs which were not working
2945f8d  Make sure overriding a tag also produces a tag
e142ca6  Removed a unit test which tested munging which is no longer done in the type
d8ee6cf  Clearn up a parsing error reported by the tests
446557f  vim: several improvements + cleanup
9152678  Fixed #2229 - Red Hat init script error
b5a8c4d  Fix #1907 (or sort) - 'require' puppet function
74730df  #2332: Remove trailing slashes from path commands in the plugin
1a89455  Changing the preferred serialization format to json
0de70b7  Switching Queueing to using JSON instead of YAML
7b33b6d  Adding JSON support to Catalogs
c0bd0aa  Providing JSON support to the Resource class
c16fd1b  Adding a JSON utility module for providing Ruby compat
f059c51  Adding JSON support to Puppet::Relationship
7f322b3  Adding a JSON format
7666597  Allowing formats to specify the individual method names to use
d40068f  Allowing formats to specify the methods they require
024ccf5  Adding a "json" feature
c8b382d  Fix some tests who were missing some actions
f9516d4  Make sure virtual and rails query use tags when tag are searched
b5855ec  Make sure resources are tagged with the user tag on the server
d69fffb  Fix #2246 - Array tagged resources can't be collected or exported
6ce0d1e  Partial fix for #2329
4f2c066  Removed extra whitespace from end of lines
97e6975  Changed indentation to be more consistent with style guide (4 spaces per level)
41ce18c  Changed tabs to spaces without interfering with indentation or alignment
f3b4092  Fix #2308 - Mongrel should use X-Forwarded-For
7b0413e  Fixes Bug #2324 - Puppetd fails to start without rails
48d5e8c  Enhance versioncmp documentation
ef56ba5  * provider/augeas: minor spec test cleanup
d322329  * provider/augeas: allow escaped whitespace and brackets in paths
9735c50  * provider/augeas: match comparison uses '==' and '!=' again
dbfa61b  * provider/augeas (process_match): no match results in empty array
386923e  * provider/augeas: remove useless checks for nil
171669a  * provider/augeas: simplify evaluation in process_get/match
51cc752  * provider/augeas (open_augeas): use Augeas flag names, not ints
4951cdf  * provider/augeas: ensure Augeas connection is always closed
0d5a24d  * provider/augeas: minor code cleanup
cea7bb5  * provider/augeas (parse_commands): use split to split string into lines
95bd826  * provider/augeas: remove trailing whitespace (no functional change)
7c5125b  Brought in lutters parse_commands patch and integrated it into the type.
6ce8154  Removed --no-chain-reply-to in rake mail_patches task
4ef7bba  Removing --no-thread from the mail_patches rake target
508934b  Fixing a bunch of warnings
fb0ed7a  Fixing tests broken by a recent fix to Cacher
650029e  Always providing a value for 'exported' on Rails resources
f1dba91  Fixing #2230 - exported resources work again
5522eb8  Disabling the catalog cache, so puppetqd is compatible with storeconfigs
abbb282  Fixing the rails feature to be compatible with 2.1+
907b39b  Using Message acknowledgement in queueing
42247f0  Fixing #2315 - ca --generate works again
d7be033  Fix #2220 - Make sure stat is refreshed while managing Files
e4d5966  Added puppet branding to format patch command
00d5139  vim: Remove another mention of 'site' from syntax
9067abd  vim: Highlight parameters with 'plusignment' operator
736b0e4  vim: Highlight strings in single quotes
ce01c95  vim: Clean up syntax spacing
3af2dbf  JRuby OpenSSL implementation is more strict than real ruby one and
62534a1  Logging when a cached catalog is used.
ff5c44f  Changing Puppet::Cacher::Expirer#expired? method name
e3d4c8e  Fixing #2240 - external node failures now log output
bc1445b  Fixing #2237 - client_yaml dir is always created by puppetd
e0c19f9  Fixing #2228 - --logdest works again in puppetd and puppetmasterd
ab34cf6  Fixing puppetmasterd tests when missing rack
9d5d0a0  Fixing the Agent so puppetrun actually works server-side
b0ef08b  Fixing #2248 - --no-client correctly leaves off client
b83b159  Fixing #2243 - puppetrun works again
3d2189f  Fixed #2304 - Added naggen script to directly generate nagios configuration files from a StoreConfigs Rails database
700ad5b  Sync conf/redhat/puppet.spec with Fedora/EPEL
3ec3f91  Fixed #2280 - Detailed exit codes fix
f98d49f  Fixing #2253 - pluginsync failures propagate correctly
d860a2f  Fixing a transaction test that had some broken plumbing
a728757  Refactoring resource generation slightly
6e824d8  Adding a Spec lib directory and moving tmpfile to it
1d69dbf  Extracting a method from eval_resource in Transaction
7650fb2  Not trying to load files that get removed in pluginsyncing
3995e70  Fix #2300 - Update ssh_authorized_key documentation
cb4a4d3  Changed version to allow Rake to work.  Minor
99f666f  enable maillist on centos, redhat, fedora
e13befa  Fixing #2288 - fixing the tests broken by my attr_ttl code
a406d58  Fix for #2234: test fails with old Rack version
c189b46  Fixing #2273 - file purging works more intuitively
138f19f  Caching whether named autoloaded files are missing
415553e  Adding caching of file metadata to the autoloader
d489a2b  Adding modulepath caching to the Autoloader
5f1c228  Adding caching to the Environment class
047ab78  Adding TTL support to attribute caching
6a413d2  Fixed #2666 - Broken docstring formatting
469604f  Deprecating factsync - pluginsync should be used instead
d39c485  Added spec and unit tests to the Rakefile files list and fixed CI rake tasks
e1a7f84  Added install.rb to Rakefile package task
e180a91  Fixed #2271 - Fix to puppetd documentation
4bf2980  Protecting Stomp client against internal failures
f4cb8f3  Adding some usability bits to puppetqd
a18298a  Refactoring the stomp client and tests a bit
2771918  Relying on threads rather than sleeping for puppetqd
07ff4be  Fixing #2250 - Missing templates throw a helpful error
7ce42da  Fixing #2273 - CA location is set correctly in puppetca
e1779c7  RackXMLRPC: buffer request contents in memory, as a real string.
fb957cc  Modules now can find their own paths
c608409  Moving file-searching code out of Puppet::Module
83ba0e5  Fixing #2234 - fixing all of the tests broken by my bindaddress fix
4f3a67f  Fixing #2221 - pluginsignore should work again
2d580c2  Fix snippets tests failing because of activated storeconfigs
8c718c9  Fix failing test: file.close! and file.path ordering fix
17f2c7d  Confine stomp tests to Stomp enabled systems
6a80b76  Fix some master failing tests
172422f  Fix bug #2124 - ssh_authorized_key always changes target if target is not defined
f945b66  Fixing #2265 - rack is loaded with features rather than manually
5aef915  Added .git to pluginsignore default list of ignores
6db5e8d  Cleanup of the Puppet Rakefile and removal of the requirement for the Reductive Build Library
5cc4910  Fix #1409 once again, including test
a6af5bf  Added split function

0.25.0beta2
===========
3f070c1  Using the logging utilities to clean up module warnings
feb7f89  Fixing #1064 - Deprecating module 'plugins' directories
ccf4e69  Removing deprecated :pluginpath setting
4036de9  Fixing #2094 - filebucket failures are clearer now
ed876e0  Refactoring part of the file/filebucket integration
bd81c25  Adding tests for file/backup behaviour
c45ebfa  Fixed pi binary so --meta option works and updated documentation
d2080a5  Fixing #2323 - Modules use environments correctly
b9e632f  Fixed #2102 - Rails feature update fixed for Debian and Ubuntu
1c4ef61  Fixed #2052 - Added -e option to puppet --help output
d332333  Fix #2333 - Make sure lexer skip whitespace on non-token
5fbf63c  Updated split function and add split function unit tests (courtesy of Thomas Bellman)
a585bdd  * provider/augeas: strip whitespace and ignore blank lines
a94d2de  Fixed pi tests
5f7455e  Fixed #2222 - Cleanup pi binary options and --help output
134ae3e  Fixing #2329 - puppetqd tests now pass
de55e19  Cleaning up scope tests a bit
e4ae870  Fixing #2336 - qualified variables only throw warnings
607b01e  Fix #2246 - take2: make sure we run the rails tag query only when needed
06b919d  Fix collector specs which were not working
2945f8d  Make sure overriding a tag also produces a tag
e142ca6  Removed a unit test which tested munging which is no longer done in the type
d8ee6cf  Clearn up a parsing error reported by the tests
446557f  vim: several improvements + cleanup
9152678  Fixed #2229 - Red Hat init script error
b5a8c4d  Fix #1907 (or sort) - 'require' puppet function
74730df  #2332: Remove trailing slashes from path commands in the plugin
1a89455  Changing the preferred serialization format to json
0de70b7  Switching Queueing to using JSON instead of YAML
7b33b6d  Adding JSON support to Catalogs
c0bd0aa  Providing JSON support to the Resource class
c16fd1b  Adding a JSON utility module for providing Ruby compat
f059c51  Adding JSON support to Puppet::Relationship
7f322b3  Adding a JSON format
7666597  Allowing formats to specify the individual method names to use
d40068f  Allowing formats to specify the methods they require
024ccf5  Adding a "json" feature
c8b382d  Fix some tests who were missing some actions
f9516d4  Make sure virtual and rails query use tags when tag are searched
b5855ec  Make sure resources are tagged with the user tag on the server
d69fffb  Fix #2246 - Array tagged resources can't be collected or exported
6ce0d1e  Partial fix for #2329
4f2c066  Removed extra whitespace from end of lines
97e6975  Changed indentation to be more consistent with style guide (4 spaces per level)
41ce18c  Changed tabs to spaces without interfering with indentation or alignment
f3b4092  Fix #2308 - Mongrel should use X-Forwarded-For
7b0413e  Fixes Bug #2324 - Puppetd fails to start without rails
48d5e8c  Enhance versioncmp documentation
ef56ba5  * provider/augeas: minor spec test cleanup
d322329  * provider/augeas: allow escaped whitespace and brackets in paths
9735c50  * provider/augeas: match comparison uses '==' and '!=' again
dbfa61b  * provider/augeas (process_match): no match results in empty array
386923e  * provider/augeas: remove useless checks for nil
171669a  * provider/augeas: simplify evaluation in process_get/match
51cc752  * provider/augeas (open_augeas): use Augeas flag names, not ints
4951cdf  * provider/augeas: ensure Augeas connection is always closed
0d5a24d  * provider/augeas: minor code cleanup
cea7bb5  * provider/augeas (parse_commands): use split to split string into lines
95bd826  * provider/augeas: remove trailing whitespace (no functional change)
7c5125b  Brought in lutters parse_commands patch and integrated it into the type.
6ce8154  Removed --no-chain-reply-to in rake mail_patches task
4ef7bba  Removing --no-thread from the mail_patches rake target
508934b  Fixing a bunch of warnings
fb0ed7a  Fixing tests broken by a recent fix to Cacher
650029e  Always providing a value for 'exported' on Rails resources
f1dba91  Fixing #2230 - exported resources work again
5522eb8  Disabling the catalog cache, so puppetqd is compatible with storeconfigs
abbb282  Fixing the rails feature to be compatible with 2.1+
907b39b  Using Message acknowledgement in queueing
42247f0  Fixing #2315 - ca --generate works again
d7be033  Fix #2220 - Make sure stat is refreshed while managing Files
e4d5966  Added puppet branding to format patch command
00d5139  vim: Remove another mention of 'site' from syntax
9067abd  vim: Highlight parameters with 'plusignment' operator
736b0e4  vim: Highlight strings in single quotes
ce01c95  vim: Clean up syntax spacing
3af2dbf  JRuby OpenSSL implementation is more strict than real ruby one and
62534a1  Logging when a cached catalog is used.
ff5c44f  Changing Puppet::Cacher::Expirer#expired? method name
e3d4c8e  Fixing #2240 - external node failures now log output
bc1445b  Fixing #2237 - client_yaml dir is always created by puppetd
e0c19f9  Fixing #2228 - --logdest works again in puppetd and puppetmasterd
ab34cf6  Fixing puppetmasterd tests when missing rack
9d5d0a0  Fixing the Agent so puppetrun actually works server-side
b0ef08b  Fixing #2248 - --no-client correctly leaves off client
b83b159  Fixing #2243 - puppetrun works again
3d2189f  Fixed #2304 - Added naggen script to directly generate nagios configuration files from a StoreConfigs Rails database
700ad5b  Sync conf/redhat/puppet.spec with Fedora/EPEL
3ec3f91  Fixed #2280 - Detailed exit codes fix
f98d49f  Fixing #2253 - pluginsync failures propagate correctly
d860a2f  Fixing a transaction test that had some broken plumbing
a728757  Refactoring resource generation slightly
6e824d8  Adding a Spec lib directory and moving tmpfile to it
1d69dbf  Extracting a method from eval_resource in Transaction
7650fb2  Not trying to load files that get removed in pluginsyncing
3995e70  Fix #2300 - Update ssh_authorized_key documentation
cb4a4d3  Changed version to allow Rake to work.  Minor
99f666f  enable maillist on centos, redhat, fedora
e13befa  Fixing #2288 - fixing the tests broken by my attr_ttl code
a406d58  Fix for #2234: test fails with old Rack version
c189b46  Fixing #2273 - file purging works more intuitively
138f19f  Caching whether named autoloaded files are missing
415553e  Adding caching of file metadata to the autoloader
d489a2b  Adding modulepath caching to the Autoloader
5f1c228  Adding caching to the Environment class
047ab78  Adding TTL support to attribute caching
6a413d2  Fixed #2666 - Broken docstring formatting
469604f  Deprecating factsync - pluginsync should be used instead
d39c485  Added spec and unit tests to the Rakefile files list and fixed CI rake tasks
e1a7f84  Added install.rb to Rakefile package task
e180a91  Fixed #2271 - Fix to puppetd documentation
4bf2980  Protecting Stomp client against internal failures
f4cb8f3  Adding some usability bits to puppetqd
a18298a  Refactoring the stomp client and tests a bit
2771918  Relying on threads rather than sleeping for puppetqd
07ff4be  Fixing #2250 - Missing templates throw a helpful error
7ce42da  Fixing #2273 - CA location is set correctly in puppetca
e1779c7  RackXMLRPC: buffer request contents in memory, as a real string.
fb957cc  Modules now can find their own paths
c608409  Moving file-searching code out of Puppet::Module
83ba0e5  Fixing #2234 - fixing all of the tests broken by my bindaddress fix
4f3a67f  Fixing #2221 - pluginsignore should work again
2d580c2  Fix snippets tests failing because of activated storeconfigs
8c718c9  Fix failing test: file.close! and file.path ordering fix
17f2c7d  Confine stomp tests to Stomp enabled systems
6a80b76  Fix some master failing tests
172422f  Fix bug #2124 - ssh_authorized_key always changes target if target is not defined
f945b66  Fixing #2265 - rack is loaded with features rather than manually
5aef915  Added .git to pluginsignore default list of ignores
6db5e8d  Cleanup of the Puppet Rakefile and removal of the requirement for the Reductive Build Library
5cc4910  Fix #1409 once again, including test
a6af5bf  Added split function
2dd55fc  Fixing #2200 - puppetqd expects Daemon to be a class
c016062  Removing unneeded test stubs
1a2e1bc  Fixing #2195 - the Server class handles bindaddress
df3a8f6  Minor fixes to function RST documentation
305fa80  Remove the old 0.24.x rack support, which is now useless cruft
d85d73c  puppetmasterd can now run as a standard Rack application (config.ru-style)
d6be4e1  Add XMLRPC compatibility for Rack
6e01e7a  Puppet as a Rack application
cc09c1a  Use FileCollection to store the pathname part of files
d51d87e  Add an unmunge capability to type parameters and properties
a1c0ae0  Fix #2218 - Ruby YAML bug prevents reloading catalog in puppetd
bf054e1  Fixes #2209 - Spec is failing due to a missing require
1c46205  Fix #2207 - type was doing its own tag management leading to subtile bugs
929130b  Moved puppetqd binary
36d0418  Fixed #2188 - Added set require to simple_graph.rb
51af239  Fixed puppetqd require and tweaked stomp library error message
dc0a997  Fixes #2196 - Add sharedscripts directive to logrotate
4d3b54e  Added puppetqd binary to Rakefile
1fee506  Updated version to 0.25.0beta1
0fbff61  Updates to CI tasks
aa6dcef  Fixing #2183 - checksum buffer size is now 4096b
c0b119a  Fixing #2187 - Puppet::Resource is expected by Rails support
5ec4f66  Adding an 'Exported' attribute to Puppet::Resource
adff2c5  Removing a non-functional and horrible test
606a689  Making sure the cert name is searched first
f489c30  Removing an "inspect" method that often failed in testing
93c3892  Removing deprecated concurrency setting usage in rails
6f8900d  Always making sure graph edges appear first
3f7cd18  Reverting part of the switch to sets in SimpleGraph
bf46db7  Fixing rails feature test
5f6b5c0  Failing to enable storeconfigs if ActiveRecord isn't available
8ed7ae3  Fixing the Rails feature test to require 2.3.x
a0c1ede  Modifying the Settings#handlearg prototype
284cbeb  Fixes #2172 - service provider for gentoo fails with ambiguous suffixes
68ba1f1  SMF import support working and documentation update
f1f0a57  Fixes #2145 and #2146
ec478da  Fix configurer to retrieve catalog with client certname
e623f8a  Unify auth/unauthenticated request authorization system
037a4ac  Allow REST auth system to restrict an ACL to authenticated or unauthenticated request
3ad7960  Fill REST request node with reverse lookup of IP address
c0c8245  Refactor rest authorization to raise exceptions deeper
aac996e  Add environment support in the REST authorization layer
72e28ae  Fix some indirector failing tests
dc1cd6f  Fix #1875 - Add a REST authorization system
8523376  Enhance authconfig format to support uri paths and regex
22b82ab  Add dynamic authorization to authstore
15abe17  Add RSpec unit tests for network rights
86c7977  Add RSpec unit tests for authconfig
f04a938  Adding support for specifying a preferred serialization format
6a51f6f  Fixing the FormatHandler test to use symbols for format names
b249f87  Fixing #2149 - Facts are passed as part of the catalog request
1cde0ae  Adding better logging when cached indirection resources are used
828b1ea  Fixing #2182 - SimpleGraph#walk is now iterative
9f32172  Fixing #2181 - Using Sets instead of Arrays in SimpleGraph
7a98459  Removing code that was backported and is now not needed
d06bd3e  Finishing class renames
b694b3c  Fixing tests that apparently only worked sometimes
93246c0  Removing the old rails tests.
5cb0f76  Fixing some rails tests that sometimes failed
bdbf9db  Added class_name tags to has_many relationships
2e62507  Adding time debugging for catalog storage to active_record
a705809  Adding defaults necessary for queueing
8a67a5c  Adding daemonization to puppetqd
fcd1390  Adding Queueing README
9b90f34  Using a setting for configuring queueing
444ae9f  Adding puppetqd executable.
22ae661  Adding "rubygems" and "stomp" features
efe6816  Removing unnecessary parser variables when yaml-dumping
a3b1e8c  Add queue indirection as an option for catalog storage.
bccfcc9  Introduce abstract queue terminus within the indirection system.
7947f10  Introduce queue client "plugin" namespace and interface, with a Stomp client implementation.
80dc837  renaming a method
f7ccaaa  Adjusted parameter name and puppet tag classes to use new cache accumulator behavior for storeconfigs.
75f1923  Initial implementation of a "cache accumulator" behavior.
bab45c4  Saving rails resources as I create them, which saves about 10%
7a91e1f  Changing rails value serialization to deal with booleans
c30ede5  Adding equality to ResourceReference
589f40f  Adding some more fine-grained benchmarks to Rails support
042689e  Adding a Rails-specific benchmarking module
89d9139  Adding simplistic param_name/puppet_tag caching
ea4e3b2  Adding more time debugging to Rails code, and refactoring a bit
6314745  Refactoring the Rails integration
be30a61  Adding a common Settings method for setting values
863c50b  Switching to Indirected ActiveRecord
a137146  Adding ActiveRecord terminus classes for Catalog
b9c95eb  Adding ActiveRecord terminus classes for Node and Facts.
8d0e997  Fixing #2180 - Catalogs yaml dump the resource table first
4e0de38  Partially fixing #1765 - node searching supports strict hostname checking
c1f562d  Removing unused Node code
e6b4200  Fixing #1885 - Relationships metaparams do not cascade
50e0f3d  Fix #2142 - Convert pkgdmg provider to use plists instead of string scanning for future proofing
c1be887  Fixing #2171 - All certificate files are written with default perms
e2201d6  Fix #2173 - fix running RSpec test by hand
424c87b  Fix #2174 - Fix RSpec rake targets
7ab7d9f  Fixing #2112 - Transactions handle conflicting generated resources
84e6c1b  Adding another stacktrace for debugging
4793334  Fixing puppet -e; it got broken in the move to Application
7398fa1  Partially fixing #2029 - failed caches doesn't throw an exception
88ff9c6  Fixing #2111 - SimpleGraph only creates valid adjacencies
36594fe  Switching to new() in the Puppet::Type.instances() class method
edcbab5  Removing duplicate method definition from SimpleGraph
d8eaca8  mini daemon to trigger puppetrun on clients without puppet listen mode
d2c417e  Fix #2113 - Make temp directory
916dd60  Fixed rspec gem at version 1.2.2
57b37e5  Add @options to test run call, for compatibility with more recent rspec versions.
173b5f0  Adding #2122 - you can specify the node to test with puppet-test
0863a79  Adding #2122 - you can specify the node to test with puppet-test
a677e26  Fixing all tests that were apparently broken in the 0.24.x merge.
e016307  Fixing Rakefile; apparently there was a rake or gem incompatibility
a43137c  More RST fixes
843cc6e  Fixed RST for functions
6160aaf  In order for ReST formatting to work properly, newlines and
62dad7a  Fix #2107 - flatten resource references arrays properly
cbee426  Fix #2101 - Return to recurse=0 == no recursion behavior
3b4816b  Fix #2101 - fix failing test
f089e11  Fix #2101 - fix recurselimit == 0 bad behaviour
1b4eae7  Added rake ci:all task
d125937  Added rake ci:all task
3f61df8  Fixed #2110 - versioncmp broken
c62c193  Updated to version 0.24.8
aa00bde  Fixing #1631 - adding /sbin and /usr/sbin to PATH
39deaf3  Fixed #2004 - ssh_authorized_key fails if no target is defined
dcf2bf2  Changelog entries for #1629 and #2004
bbcda1d  Fix Bug #1629
69a0f7d  Fix #1807 - make Puppet::Util::Package.versioncmp a module function
081021a  Fix #1829 - Add puppet function versioncmp to compare versions
2b33f80  Fixed install.rb typo
5ab63cd  Updated lib install permissions to 0644
830e1b1  CHANGELOG updates
3e0a9cd  Moved of puppetd, puppetca, puppetmasterd, puppetrun binary from bin to sbin
6ddebf4  Fixed #2086 - Fixes to make building tarballs easier
33d3624  Fix #1469 - Add an option to recurse only on remote side
77ade43  Forbidding REST clients to set the node or IP
0179e94  Fixing #1557 - Environments are now in REST URIs
a497263  Adding explicit optional attribute to indirection requests
3e95499  Removing an unused source file
97975e1  Adding a model accessor to the Request class
b6116fe  Requests now use default environment when none is specified
15740fe  Moving the REST API functions into a module
ef4fa68  Using the Handler for the REST api on both sides of the connection
8b13390  Adding REST::Handler methods for converting between indirection and uris
edf00db  Adding environment support to the REST URI
a064ed1  Moving the query_string method to Request
ff9c3ca  Adding tests for the REST query string usage
87ec08e  Fixing #2108 - pi should work again
af4455e  Fix #1088 - part2 - Add rspec tests
b15028f  Fix #1088 - Collections overrides
b24b9f5  Fixed #2071 - Updated LDAP schema
88aa1bc  Fixing tests broken in previous commits
f8dea98  Fixing #1949 - relationships now use attributes instead of a label
d0fc2f5  Correctly handling numerical REST arguments
90afd48  Not passing file sources on to child files
858480b  Correctly handling non-string checksums
27aa210  Removing unnecessary calls to expire()
5329b8a  Passing checksums around instead of file contents
71e4919  Moving default fileserving mount creation to the Configuration class
09bee91  Fixing #2028 - Better failures when a cert is found with no key
cf1cb14  Moving the clientyamldir setting into the puppetd section
5f73eb5  Fixed #1849 - Ruby 1.9 portability: `when' doesn't like colons, replace with semicolons
e40aea3  Fixed metaparameter reference to return str
5df9bad  Fixed #2016 - Split metaparameters from types in reference documentation
7e207a1  Fixed #2017 - incorrect require
417b5a5  Fixing #1904 - aliases are no longer inherited by child files
c0d5037  Removing or fixing old tests
262937f  Correctly handling URI escaping throughout the REST process
b800bde  Refactoring how the Settings file is parsed
d7864be  Relying on 'should_parse_config' in the 'puppet' application
bd8d097  Providing better indirection authorization errors
d3bc1e8  Adding pluginsyncing support to the Indirector
00726ba  Moving Request and Fileset integration into Fileset.
058266f  Switching the ModuleFiles Indirection terminus to the new Module/Env api
19b8534  Migrating the old FileServer to the new Module/Environment code
1be7c76  Using the Environments to handle a lot of Module searching
2b4469d  Environments now use their own modulepath method.
94de526  The 'Environment' class can now calculate its modulepath.
2573ef1  Added support for finding modules from an environment
9c18d5a  Adding support for finding all modules in a given path.
4b5ec82  reformatting the environment tests
458642b  Supporting multiple paths for searching for files.
eec1cad  Adding support for merging multiple filesets.
bdf3a80  Adding new methods to Puppet::Module.
a7be174  Refactoring Puppet::Module a bit.
7ceb437  Only using the checksum cache when we're using a host_config catalog
5fd182d  Fixing fileserving to support strings or symbols
7bc41ce  Adding clarity to query string handling in REST calls
992231a  Some small fixes to provide better debugging and load a library
0304a78  Providing better information when an exception is encountered during network communication
4a7cba3  Stubbing tests that were affecting other tests
3105b5b  Fixing a warning in a test
c854c59  Fixing a syntactically invalid application test
0f43fd6  Move --version handling to Puppet::Application
156fb81  Move puppetd to the Application Controller paradigm
0c71c5c  Move puppetdoc to the Application Controller paradigm
e317fa9  Move ralsh to the Application Controller paradigm
81f5438  Move puppetrun to Application Controller paradigm
3390d8d  Move pi to the Application Controller paradigm
8265d6e  Move puppetmasterd to Puppet::Application
af219bf  Move puppet to the Application Controller paradigm
d51398c  Move filebucket to the Application Controller paradigm
9b9e5e8  Move puppetca to the Application Controller paradigm
97e716a  Introducing the Application Controller
495ad66  Fixing broken filetype tests resulting from the loss of Type[]
21a714a  Fixing some tests that somehow broke in the merge to master
327ee17  Removing a test that was too dependant on order.
487b9b1  Failure to find node facts is now a failure.
610c838  Fixing #1527 - Failing Facter does not hurt Puppet
a2eca6c  Removing some unused code
cb0a083  Using Puppet::Type.new instead of create
84bd528  Actualling syncing facts and plugins
d5abdfb  Fix #1933 - Inconsistent resource evaluation order in subsequent evaluation runs
9bac833  Adding README.rst file
916abc2  Changing how the Configurer interacts with the cache
5335788  Fixing tests broken during the #1405 fix.
08a5d49  Adding an Agent::Runner class.
c7d178d  The Agent now uses its lockfile to determine running state
c0fcb21  Creating and using a new Puppet::Daemon class
700e823  Not using 'master' client for testing
4b7023e  Fixing (and testing) the return of Indirection#save
8dc0005  Adding a 'close_all' method to the Log class.
37d1a7c  Removing restart-handling from Configurer
bf3c72e  Adding temporary class EventManager
fc14b81  Splitting the Agent class into Agent and Configurer
e8be6dc  Removing the Hash default proc from SimpleGraph.
6bb804f  Removing the Catalog's @aliases hash default value
502e062  Removing an erroneous configuration call in puppetmasterd
337057a  Removing obsolete code and tests for the agent.
d53ad31  Converting the catalog as needed
f38277f  Adding REST support for facts and catalogs.
c48525b  Adding better error-handling to format rendering
b93a642  Resetting SSL cache terminii to nil when only using the ca
212b3e3  Allowing the Indirection cache to be reset to nil
5a83531  Moving the Agent locking code to a module.
b672790  Cleaning up SSL instances that can't be saved
f78a565  Only caching saved resources when the main save works
5434459  Moving classfile-writing to the Catalog
e65d7f1  Refactoring how the Facter integration works
6b4e5f4  Reformatting tests for facts
54faf78  Moving fact and plugin handling into modules
9d76b70  Removing the Agent code that added client-side facts
a5c2d7a  Adding Puppet client facts to Facter facts.
b99c6b5  Clarifying how node names are used during catalog compilation
8b44d6f  Reformatting Indirector catalog compiler tests
e770e7a  Removing ConfigStore code that was never actually used.
37692e5  Renmaing Puppet::Network::Client::Master to Puppet::Agent
15d8768  Revert "Adding the first bits of an Agent class."
63fb514  Revert "This is work that I've decided not to keep"
8f5cbc3  This is work that I've decided not to keep
25b28c5  Adding a new Agent::Downloader class for downloading files.
1afb821  Adding the first bits of an Agent class.
2afff60  Adding support for skipping cached indirection instances.
361db45  Change the way the tags and params are handled in rails
62cdeaa  Add methods to return hash instead of objects to params and tags
3acea41  Rails serialization module to help serialize/unserialize some Puppet Objects
10bf151  Fixing #1913 - 'undef' resource values do not get copied to the db
500ea20  Fixing #1914 - 'undef' relationship metaparameters do not stack
1407865  Revert "Fixed #1916 - Added environment option to puppetd"
8d0086b  Fixed #1916 - Added environment option to puppetd
a065aeb  Fixed #1910 - Updated logcheck regex
fa9dc73  Typo fix
7c8094c  Fixed #1879 - Added to tidy documentation
f40a6b1  Fixed #1881 - Added md5lite explanation
6af3179  Fixed #1877 - Tidy type reference update for use of 0
a5b0a75   Fix autotest on win32
234a035  Fix #1560
fb8f8cd  In order for ReST formatting to work properly, newlines and
69432d6  Fix Bug #1629
1f6dce5  Fix #1835 : Add whitespace/quote parsing to
8142981  Fix #1847 - Force re-examination of all files to generate correct indices
d2d3de5  Fix #1829 - Add puppet function versioncmp to compare versions
bdee116  Fix #1828 - Scope.number? wasn't strict enough and could produce wrong results
d69abfe  Fix #1807 - make Puppet::Util::Package.versioncmp a module function
34335b7  Fixed #1840 - Bug fixes and improvements for Emacs puppet-mode.el
3b8a77d  Fix #1834 part2 - Fix tests when no rails
b6e34b7  Fix #1834 part1 - Fix tempfile failing tests
566bf78  Fixing #1729 - puppetmasterd can now read certs at startup
0cf9dec  Canonicalizing Setting section names to symbols.
0fc0674  Fixing all of the test/ tests I broke in previous dev.
e4ba3db  Deprecating the Puppet::Type.create.
b6db545  Deprecating 'Puppet.type'; replacing all instances with Puppet::Type.type
89c25ad  Finishing the work to use Puppet::Resource instead of TransObject
1c7f8f6  Adding name/namevar abstraction to Puppet::Resource.
e601bab  Supporting a nil expirer on cacher objects.
f69ac9f  Setting resource defaults immediately.
352d7be  Refactoring the Settings class to use Puppet::Resource
91ff7c1  TransObject is nearly deprecated now.
fae3075  Simplifying the initialization interface for References
14c3c54  Replacing TransObject usage with Puppet::Resource
60062e4  Renaming the "Catalog#to_type" method to "Catalog#to_ral"
6b14000  Using Puppet::Resource to convert parser resources to RAL resources
e3b1590  Adding resource convertion to the parser resources
c306a17  Adding equality testing to Puppet::Resource::Reference
48a9949  Correcting whitespace and nested describes in Puppet::Resource::Catalog
d48fff6  Renaming Puppet::Node::Catalog to Puppet::Resource::Catalog
c927ce0  Renaming Puppet::ResourceReference to Puppet::Resource::Reference
e88746b  Adding Trans{Object,Bucket} backward compatibility to Puppet::Resource
832198f  Starting on #1808 - Added a base resource class.
820ff2e  Removing the "clear" from the macauthorization tests
89e9ef7  Fix #1483 - protect report terminus_class when testing for REST
435f1e9  Fix #1483 - use REST to transmit reports over the wire
6b30171  Fixing all broken tests.  Most of them were broken by fileserving changes.
f73e13e  Adding more file tests and fixing conflicting tests
cc12970  Completely refactoring the tidy type.
720dcbe  Cleaning up the tidy type a bit
053d7bf  These changes are all about making sure file data is expired when appropriate.
a8d9976  Catalogs always consider resource data to be expired if not mid-transaction.
8b08439  Properly cleaning up ssl ca configuration during testing
73fa397  Adding caching support to parameters, and using cached attributes for file source and metadata.
0ecbf79  Adding cached attribute support to resources.
29b9794  Allowing a nil expirer for caching classes.
cd09d6b  Refactoring the Cacher interface to always require attribute declaration.
14af971  Changing the Cacher.invalidate method to Cacher.expire.
99a0770  Fixing a critical bug in the Cacher module.
fe0b818  Fixing tests broken by fileserving and other refactoring.
eed37f7  Fixing a test broken by previous refactoring
45c6382  Finishing the refactoring of the resource generation interface.
0840719  Refactoring and clarifying the resource generation methods.
cc04646  Refactoring Catalog#add_resource to correctly handle implicit resources.
a73cad9  Adding SimpleGraph#leaves, which I apparently did not migrate from PGraph
2a685f9  Removing mention of obsolete edgelist_class from GRATR.
7e20f06  Changing the catalog's relationship graph into a normal graph.
2ba0336  Removing the PGraph class and subsuming it into SimpleGraph.
e92c1cc  Moving Catalog#write_graph to SimpleGraph, where it belongs.
0149e2e  Converting the file 'source' property to a parameter.
35c623e  Removing mid-transaction resources from the catalog.
f4800e8  Adding a method to Checksums to extract the sum type
44fadd1  Aliasing "must_not" just like we alias "must"
a9dbb5d  Deduplicating slashes in the fileserving code
bb6619a  Fixing the augeas type tests to work when augeas is missing
e728873  Reducing the number of calls to terminus() to reduce interference with caching
aa8d091  Switched all value management in props/params to internal classes.
e5b5033  Fixing #1677 - fixing the selinux tests in master.
77d73e0  Changing the meaning of the unused Puppet::Type#parameter method to return an instance
05e1325  Moving a file purging test to rspec
6f7ccff  Fixing #1641 - file recursion now only passes original parameters to child resources.
a4d4444  Removing obsolete methods and tests:
b4f4866  Making it so (once again) files with sources set can still be deleted
caf15c2  Fixing and migrating more file tests.
cccd838  Adding a starting point for spec tests for tidy.
255c9fb  Setting puppetmasterd up to serve all indirected classes.
7fdf2bb  Retrieving the CA certificate before the client certificate.
a00c1f2  Handling the case where a symbol (e.g., :ca) is used for a certificate name.
cf3a11c  Fixing :bindaddress setting to work with the new server subsystem.
a78c971  Fixing CertificateRequest#save to accept arguments.
e70c1a0  Fixing forward-compatibility issues resulting from no global resources
4596d2d  Fixing a test I broke when fixing a reporting bug
9742c26  Fixing resource aliasing to not use global resource aliasing.
1b517d2  Adding comments to Puppet::Util::Cacher
7a6d9b1  Removing obselete code from the file type.
1b512a9  Merged fsweetser's selinux patch against HEAD
e31df2f  Removing files that git wasn't smart enough to remote during a merge.
ac5db5e  Removing the old, obsolete recursion methods.
a9b7f08  As far as I can tell, recursion is working entirely.
b69c50c  Removing insanely stupid default property behaviour.
45f465b  Source recursion is nearly working.
93fc113  Files now use the Indirector to recurse locally.
bd1163a  Fixing filesets to allow nil ignore values.
5da2606  Recursion using REST seems to almost work.
ee1a85d  Mostly finishing refactoring file recursion to use REST.
7c68fdb  Fixing FileServing::Base so that it can recurse on a single file.
ac41987  Fixing the terminus helper so it correctly catches options passed from clients via REST.
be4c0e7  The file source is now refactored and uses REST.
44c6a52  Removing mention of an obselete class.
8271424  One third done refactoring file[:source] -- retrieve() is done.
98ac24a  Adding a "source" attribute to fileserving instances.
6e43c2d  Aliasing RSpec's :should method to :must.
8b45d13  Adding automatic attribute collection to the new fileserving code.
6ed8dfa  Adding the content writer to the content class.
92e144b  Fixing a test in the module_files terminus
151a54f  Causing format selection to fail intelligently if no suitable format can be picked.
deda646  Removing the last vestiges of the 'puppetmounts' protocol marker.
30dea68  Adding a 'plural?' method to the Indirection::Request class.
40e76fb  Fixing the rest backends for webrick and mongrel so the get the whole request key.
8ea25ef  Refactoring how files in FileServing are named.
550e3d6  Finishing the rename of FileBase => Base.
90e7022  Adding weights to network formats, and sorting them based on the weight.
5a195e0  Renaming FileServing::FileBase to FileServing::Base.
3101ea2  Adding a hackish raw format.
89a3738  Adding suitability as a requirement for a format being supported.
a0bda85  Removing the yaml conversion code from FileContent.
6335b14  Causing the Indirection to fail if a terminus selection hook does not return a value.
1104edb  Correcting whitespace in a test
2f224c9  Spell-correcting a comment
bcd40fb  Cleaning up an exception.
0a05720  FileServing Configurations now expect unqualified files.
237b7b2  Fixing whitespace in docs of some tests.
91b8252  Fixing the fileserving terminus selection hook.
f5ba99f  Special-casing 'file' URIs in the indirection requests.
a215aba  Dividing server/port configuration responsibility between the REST terminus and the indirection request.
d174605  Fixing a test that relied on hash ordering.
7034882  Adding parameter and URL support to the REST terminus.
c819042  Fixing the String format (fixes #1522).
78bc32d  Removing dead-end file work as promised.
a5ab52c  Adding files temporarily, since I've decided this work is a dead-end.
4f275b6  Fixing #1514 - format tests now work again.
025edc5  puppetd now uses the Indirected SSL.
62202bf  Adding 'require' statements as necessary for Puppet::SSL to work.
86a7188  Fixing the SSL::Host#waitforcert method.
a31c578  Adding logging when files are removed.
09ee814  Removing now-obsolete the wait-for-cert module.
cd314fa  Documenting a bit of a test
113d74a  Certificates now work over REST.
2cad30a  Caching the SSL store for the SSL Host.
93fd55f  Enhancing formatting errors with class and format.
6c80e0f  Making all certificates only support the plaintext format.
c464bf2  Adding wait_for_cert functionality to the ssl host class.
c854dbe  Adding a plaintext network format.
818599d  lazy load latest package definitions with yumhelper 2.2
8457856  Fixing a group test that failed after merging 0.24.x
c2c8941  Correctly handling when REST searches return nothing.
186f3cd  Removing an obsolete method from the rest indirector
29d704c  The REST formats are now fully functional, with yaml and marshal support.
c55acee  Adding some support for case insensivity in format names.
8033bd4  Moving validation from FormatHandler to Format.
3405841  Moving functionality out of the FormatHandler into the Format class.
43a6911  Searching again works over REST, including full content-type translation.
1064b5b  Fixing the format_handler tests so that they clean up after themselves.
167831e  Fixing a test I broke while rebasing
e78b1a6  Fixing a test to be order-independent.
352e2d0  Adding rudimentary support for directly managing formats.
55e2944  Adding support for rendering and converting multiple instances.
4632cfd  All error and format handling works over REST except searching.
e3350ca  Drastically simplifying the REST implementation tests.
b3914c3  Removing an apparently-obsolete hook from the handler
739a871  Adding explicit tests for the HTTP::Handler module.
0ce92f1  The REST terminus now uses the content-type and http result codes.
a4170ba  Removing a now-obsolete pending test.
bf5b086  The REST terminus now provides an Accept header with supported formats.
1f15725  Using the FormatHandler in indirected classes automatically.
0e7e16d  Adding a FormatHandler module for managing format conversions.
93eeff5  Fixing the user ldap provider tests
00b7da3  Fixing the new-form version of #1382.
c542dc0  Fixing #1168 for REST -- all ssl classes downcase their names.
eaa6eab  Fixing #1258 -- Removing a Rails idiom.
eb5e422  Fixing #1256 -- CA tests now work with no ~/.puppet.
66c36f0  Fixing another failing test -- the new CA tests correctly clear the cache.
447507c  Fixing #1245 -- ssh_authorized_keys tests work in master.
6f533d1  Fixing #1247 -- no more clear_cache failures.
3cb0d60  Fixing how the mongrel server sets up xmlrpc handlers.
6efe400  Using the new Cacher class for handling cached data.
68d8d0a  Adding a module for handling caching information.
e936ef2  Fixing some broken tests.
1cfb021  The CRL is now automatically used or ignored.
0365184  Removing obsolete tests
3303590  The master and client now successfully speak xmlrpc using the new system.
8fd68e3  Adding pidfile management and daemonization to the Server
dd4d868  Fixing the HttpPool module to get rid of an infinite loop.
57c7534  Adding REST terminuses for the SSL-related indirections.
d78b4ba  Adding autosigning to the new CA.
a822ef9  Moving the CA Interface class to a separate file.
38e2dcf  The master is now functionally serving REST and xmlrpc.
6e0d6dd  The REST infrastructure now correctly the SSL certificates.
51ce674  Fixing the webrick integration tests to use the newly-functional
62f1f5e  The Certificate Authority now automatically creates a CRL when appropriate.
e57436f  The Settings class now clears the 'used' sections when a value is changed.
137e29f  Moving some http configuration values to the main
a3b8804  The http pool manager now uses new-style certificate management.
e596bc5  Fixing some tests that were insufficiently mocking their configurations.
160f9d9  Fixing a critical problem in how CRLs were saved and moving SSL Store responsibilities to the SSL::Host class.
ce6d578  The SSL::Host class now uses the CA to generate its certificate when appropriate.
67dc268  The CA now initializes itself.
6356c04  Switched puppetmasterd to use the new-style server plumbing.
4c590df  Adding xmlrpc backward compatibility to the new Mongrel code.
31b79fa  Adding xmlrpc support to webrick.
7a876ed  Fixing some whitespace
7267341  Adding configuration support for XMLRPC handlers.
8c9b04d  I think I've now got the Webrick SSL support working.
83519f4  Interim commit, since I want to work but have no network available.
58fb416  Changing the File certificate terminus so that it
79ca444  Renaming the 'ca_file' ssl terminus type to 'ca'.
a116d10  Temporarily disabling the revoke/verify test in the CA.
d87e018  Fixing how the CRL is used for certificate verification.
6c539c0  Fixing puppetca so it uses the :local ca setting.
ebdbe48  Added an Interface class to the CA to model puppetca's usage.
934fbba  Making the SSL::Host's destroy method a class method,
d4813f1  Adding the last functionality needed for puppetca to use the Indirector.
809fc77  Finishing the interface between the CA and the CRL.
16056a2  Adding inventory support to the new certificate authority.
d498c4a  Adding support within the inventory for real certs or Puppet cert wrappers.
67f9d69  Changing the Inventory class to rebuild when the
7cca669  Adding a comment to the inventory class.
98db985  Adding an SSl::Inventory class for managing the ssl inventory.
92a7d76  All SSL terminus classes now force the CA information into the right place.
fb56dea  Switching the SSL::Host class to return Puppet instances.
f7e0990  Setting the expiration date of certificate objects to the expiry of the actual
71db9b5  Adding integration tests for a lot of the SSL code.
e5c4687  Moving the password file handling into the SSL::Key class.
d8bb81e  Moving all of the ca-specific settings to the ca_file
cbe5221  Adding SSL::Host-level support for managing the terminus and
c5f0eff  Fixing the CA so it actually automatically generates its certificate.
3d24b12  The certificate authority now uses a Host instance named 'ca'.
daa8cd5  Changing all of the SSL terminus classes to treat CA files specially.
7d2c05e  The 'destroy' method for the ssl_file terminus base class
7555af6  Marking a test as pending, because it's not ready yet.
c19c9d4  Removing all the cases where the ssl host specifies
054e4e4  Making the first pass at using requests instead of
6900f97  Adding a :to_text method that will convert the contained
174b9c9  Actually signing the certificates in the CA.
546ac97  Adding the first attempt at managing the certificate
c98ad25  Adding a :search method to the ssl_file terminus type
d184b35  Fixing a failing test that had not been updated from previous coding
b9d6479  We have a basically functional CA -- it can sign
1efed03  Adding tests for the easy bits of the CertificateFactory.
ee07d0b  Adding tests for the certificate serial numbers
dc5c73b  The certificate authority is now functional and tested.
a776a12  refactoring the cert request test a bit
7641bd4  This is a first pass at the certificate authority.
0f46815  It looks like all of the new ssl classes for managing
00e35bc  Adding he last of the indirection classes for the ssl
8347b06  The certificate and key are now correctly interacting
50f3c18  Removing obsolete indirection classes
ec5bdf3  The basics for the certificate and certificate request
bb87464  Fixing a couple of broken tests.
b0811ad  The new SSL classes basically work, but they're not
3970818  Finished the certificate request wrapper class.
4ca6fd3  First stage of cert refactoring:  Private
ef7d914  Oops; final fix on the integration test failures resulting
0ca0ef6  Fixing whitespace problems.
4640a3d  Fixing an integration test of the rest terminus; it was
d738f31  Adding the necessary tests for webrick to have logging and
b49fb68  Fixing the tests in test/ that were broken as
5e78151  Fixing tests that were failing as a result of the merge,
bee9aba  Environments are now available as variables in manifests,
b225e86  Fixing #1017 -- environment-specific modulepath is no
4ede432  Tidied the man page creation function and created "master" branch man pages
f335dc3  Updated defaults.rb to fix foru error stopping man page creation - links are not as neat as before but puppet.conf.man file will create neatly now.
c751058  Removed remaining elements of old_parse - closing Ticket #990
31e0850  Removed old configuration file behaviour and deprecation warning - closes ticket #990
4165eda  More fixes to the testing.
cfda651  Another round of test-fixes toward eliminating global resource
488c437  Fixing automatic relationships.  I was previously looking them
d8991ab  Updated install.rb to product puppet.conf.man page - updating ticket #198
5a0388f  Disabled new man page creation support
e5888af  Added support for man page creation - requires rst2man.py and writer - closed ticket #198
5bef4a5  Another round of fixes toward making global resources work.
3cc3e0f  Lots o' bug-fixes toward getting rid of global resources.
b7b11bd  Fixing a couple of failing tests
aed51b4  Fixed puppet logcheck issues
7aa79e2  Revert "Fixed documentation for code option in defaults.rb"
f2991a2  Revert "Fixed indentation error in pkgdmg.rb documentation"
754129e  Revert "Fixed issue where permissions are incorrectly set on Debian for /var/puppet/run directory"
20628ea  Added patch to ext/logcheck/puppet to fix ticket #978
badf977  Fixed indentation error in pkgdmg.rb documentation
e6547f0  Fixed documentation for code option in defaults.rb
594a5a3  Fixed issue where permissions are incorrectly set on Debian for /var/puppet/run directory
9736b3c  Updated for 0.24.0
99f9047  tweaking spec language; require Puppet::Network::HTTP class since it is referenced by Puppet::Network::Server
b38f538  Moving $PUPPET/spec/lib/autotest up to $PUPPET/autotest as something has changed and it can't be found otherwise.
e1abfac  moving autotest directory to make it possible to run autotest again

0.24.8
======
02a503f  Updated to version 0.24.8
cbc46de  Fixing #1631 - adding /sbin and /usr/sbin to PATH
9eb377a  Fixed #2004 - ssh_authorized_key fails if no target is defined
1b3fe82  Changelog entries for #1629 and #2004
8a671e5  Fix Bug #1629
ff5b13a  Fix #1807 - make Puppet::Util::Package.versioncmp a module function
991f82c  Fix #1829 - Add puppet function versioncmp to compare versions
d0bf26e  Fixed install.rb typo
4cf7a89  Updated lib install permissions to 0644
2c7e189  Fixes incorrect detail variable in OS X version check, re-patches ralsh to work with Facter values and adds error check for missing password hash files.
73a0757  Fix #1828 - Scope.number? wasn't strict enough and could produce wrong results

0.24.8rc1
=========
84d6637  Fixed #2000 - No default specified for checksum
a3bb201  Fixing change printing when list properties are absent
67fc394  Fixed #2026 - Red Hat ignoring stop method
cf64827  Bring in the documentation changes from the master branch
01bc88c  Added a force option to ensure the change is always applied, and call augeas twice to reduce the chance that data is lost
cedeb79  Backport the fix for #1835
cf48ec0  First cut at the not running if augeas does not change any of the underlieing files
9d36b58  Bug 1948: Added patch by jab to support the correct ins syntax. Updated the test cases as well
61661b1  Fixing #1991 - ldap booleans get converted to booleans
d5850dc  Refactored a method: extracted about five other methods
1c7c8fe  dbfix - fix typo and close another possible inconsistency
c55ac3f  Fix #2010 - add protection code for some storeconfig corruption
a790ee3  Further fix to #1910
9577d3a  Fixing #2013 - prefetching had a mismatch between type and title
719a8df  Fixed to rake tests for reductivelabs build
ac87600  Fixed report reference page
0c16426  Fixing broken 0.24.x tests in test/.
23066c1  Fixing every failing test I can find on the build server.
ec56ddf  This script fixes the most common issues with inconsistent
c052ff8  Make puppetd --waitforcert option behave as documented:
e2b4062  Adding a performance optimization to the FileCollection.
fa6494b  Using the FileCollection where appropriate.
373d505  Adding a FileCollection and a lookup module for it.
0e46786   Fixed #1963 - Failing to read /proc/mounts for selinux kills file downloads
4170238  Fixed #2025 - gentoo service provider handle only default init level
8c010e0  Fixed #1910 - updated logcheck
7504b04  Updated useradd.rb managehome confine to include other RH-like distributions
f07d928  Use Puppet.debug instead of own debug flag
25a3f59  Fixing #558 - File checksums no longer refer to 'nosum'
d758f45  Fixing #1871 once and for all - contents are never printed
c0f4943  Minor fix to launchd tests
24d48e6  Fix #1972 - ActiveRecord fixes resulted in broken tests
446989b  Fix spec test for launchd service provider to work with new service status method and add two new status tests.
3ef5849  Fixing a test I broke in commit:"897539e857b0da9145f15648b6aa2ef124ec1a19".
72bd378  Removing a no-longer-valid test.
682dd8b  Fixing password validation to support symbols.
44f97aa  Only backing up within parsedfile when managing files
04af7b4  Fixing a syntax error in the up2date provider
1070b3c  Fixing a test broken by a log demotion
ab84756  Cleaned up variable names to be more sane, clarified error messages and fixed incorrect use of 'value' variable rather than 'member'.
7f41857  Provide dscl -url output support for OS X 10.4 clients using the directoryservice provider.
0bc3c07  Fix launchd service provider so it is backwards compatible with OS X 10.4 as well
2561c8e  Updated Augeas type code
7d72186  Removed site from Puppet VIM syntax
1bc7404  Fixed #1831 - Added sprintf function
336b645  Fixed #1830 - Added regsubst function
2a85551  Bug 1948: Add logic and testing for the command parsing logic
2218611  Updated up2date and service confines to add support for Oracle EL and VM
39a8b28  Fixing #1964 - Facts get loaded from plugins
7cf085c  Adding tests for Puppet::Indirector::Facts::Facter.loadfacts
70ea39a  Adding a post-processor for Nagios names.
4dfa034  Revert "Refixing #1420 - _naginator_name is only used for services"
d5a193a  Fixing #1541 - ParsedFile only backs up files once per transaction
53f15b9  Removing the apparently obsolete netinfo filetype.
4e89156  Migrated FileType tests to spec, and fleshed them out a bit.
cc4d658  Bug #1948: Added patch by jab to support the correct ins syntax. Updated the test cases as well
5e35166  Fixing #961 - closing the http connection after every xmlrpc call
af3f3ae  Refactoring the XMLRPC::Client error-handling
f0ac3ae  Fixed #1959 - Added column protection for environment schema migration
319822a  Fixing #1869 - autoloaded files should never leak exceptions
6b0c1b9  Fixing #1543 - Nagios parse errors no longer kill Puppet
7fd5c7e  Moving the transaction specs to the right path
efb5cc5  Refixing #1420 - _naginator_name is only used for services
32c2be9  Fixed #1884 - exported defines are collected by the exporting host
0e49159  Cleaning up the AST::Resource code a bit
b22d148  Fix #1691 - Realize fails with array of Resource References
6331bfc  Fix #1682 - Resource titles are not flattened as they should
7e036eb  Fix #1922 - Functions squash all arguments into a single hash
535fa89  Fixed #1538 - Yumrepo sets permissions wrongly on files in /etc/yum.repos.d
f7b04df  Fixed #1936 - Added /* */ support to the vim file
671d73c  Prefetching, and thus purging, Nagios resources now works
063871f  Adding some basic tests for the Naginator provider base class
897539e  Removing a redundant instance prefect call.
012efe3  Fixing #1912 - gid still works with no 'should' value.
a9f34af  Fixing the Rakefile to use 'git format-patch'.
db05c00  Fixing #1920 - user passwords no longer allow ':'
aa219e7  Adding README.rst file
1d3f117  Added Reductive Labs build library
f01882d  Change the way the tags and params are handled in rails
b7ab54c  Add methods to return hash instead of objects to params and tags
5c64435  Rails serialization module to help serialize/unserialize some Puppet Objects
b27fccd  Fixed #1852 - Correct behaviour when no SELinux bindings
7403330  Updated Red Hat spec file 0.24.7

0.24.7rc1
=========
84d6637  Fixed #2000 - No default specified for checksum
a3bb201  Fixing change printing when list properties are absent
67fc394  Fixed #2026 - Red Hat ignoring stop method
cf64827  Bring in the documentation changes from the master branch
01bc88c  Added a force option to ensure the change is always applied, and call augeas twice to reduce the chance that data is lost
cedeb79  Backport the fix for #1835
cf48ec0  First cut at the not running if augeas does not change any of the underlieing files
9d36b58  Bug 1948: Added patch by jab to support the correct ins syntax. Updated the test cases as well
61661b1  Fixing #1991 - ldap booleans get converted to booleans
d5850dc  Refactored a method: extracted about five other methods
1c7c8fe  dbfix - fix typo and close another possible inconsistency
c55ac3f  Fix #2010 - add protection code for some storeconfig corruption
a790ee3  Further fix to #1910
9577d3a  Fixing #2013 - prefetching had a mismatch between type and title
719a8df  Fixed to rake tests for reductivelabs build
ac87600  Fixed report reference page
0c16426  Fixing broken 0.24.x tests in test/.
23066c1  Fixing every failing test I can find on the build server.
ec56ddf  This script fixes the most common issues with inconsistent
c052ff8  Make puppetd --waitforcert option behave as documented:
e2b4062  Adding a performance optimization to the FileCollection.
fa6494b  Using the FileCollection where appropriate.
373d505  Adding a FileCollection and a lookup module for it.
0e46786   Fixed #1963 - Failing to read /proc/mounts for selinux kills file downloads
4170238  Fixed #2025 - gentoo service provider handle only default init level
8c010e0  Fixed #1910 - updated logcheck
7504b04  Updated useradd.rb managehome confine to include other RH-like distributions
f07d928  Use Puppet.debug instead of own debug flag
25a3f59  Fixing #558 - File checksums no longer refer to 'nosum'
d758f45  Fixing #1871 once and for all - contents are never printed
c0f4943  Minor fix to launchd tests
24d48e6  Fix #1972 - ActiveRecord fixes resulted in broken tests
446989b  Fix spec test for launchd service provider to work with new service status method and add two new status tests.
3ef5849  Fixing a test I broke in commit:"897539e857b0da9145f15648b6aa2ef124ec1a19".
72bd378  Removing a no-longer-valid test.
682dd8b  Fixing password validation to support symbols.
44f97aa  Only backing up within parsedfile when managing files
04af7b4  Fixing a syntax error in the up2date provider
1070b3c  Fixing a test broken by a log demotion
ab84756  Cleaned up variable names to be more sane, clarified error messages and fixed incorrect use of 'value' variable rather than 'member'.
7f41857  Provide dscl -url output support for OS X 10.4 clients using the directoryservice provider.
0bc3c07  Fix launchd service provider so it is backwards compatible with OS X 10.4 as well
2561c8e  Updated Augeas type code
7d72186  Removed site from Puppet VIM syntax
1bc7404  Fixed #1831 - Added sprintf function
336b645  Fixed #1830 - Added regsubst function
2a85551  Bug 1948: Add logic and testing for the command parsing logic
2218611  Updated up2date and service confines to add support for Oracle EL and VM
39a8b28  Fixing #1964 - Facts get loaded from plugins
7cf085c  Adding tests for Puppet::Indirector::Facts::Facter.loadfacts
70ea39a  Adding a post-processor for Nagios names.
4dfa034  Revert "Refixing #1420 - _naginator_name is only used for services"
d5a193a  Fixing #1541 - ParsedFile only backs up files once per transaction
53f15b9  Removing the apparently obsolete netinfo filetype.
4e89156  Migrated FileType tests to spec, and fleshed them out a bit.
cc4d658  Bug #1948: Added patch by jab to support the correct ins syntax. Updated the test cases as well
5e35166  Fixing #961 - closing the http connection after every xmlrpc call
af3f3ae  Refactoring the XMLRPC::Client error-handling
f0ac3ae  Fixed #1959 - Added column protection for environment schema migration
319822a  Fixing #1869 - autoloaded files should never leak exceptions
6b0c1b9  Fixing #1543 - Nagios parse errors no longer kill Puppet
7fd5c7e  Moving the transaction specs to the right path
efb5cc5  Refixing #1420 - _naginator_name is only used for services
32c2be9  Fixed #1884 - exported defines are collected by the exporting host
0e49159  Cleaning up the AST::Resource code a bit
b22d148  Fix #1691 - Realize fails with array of Resource References
6331bfc  Fix #1682 - Resource titles are not flattened as they should
7e036eb  Fix #1922 - Functions squash all arguments into a single hash
535fa89  Fixed #1538 - Yumrepo sets permissions wrongly on files in /etc/yum.repos.d
f7b04df  Fixed #1936 - Added /* */ support to the vim file
671d73c  Prefetching, and thus purging, Nagios resources now works
063871f  Adding some basic tests for the Naginator provider base class
897539e  Removing a redundant instance prefect call.
012efe3  Fixing #1912 - gid still works with no 'should' value.
a9f34af  Fixing the Rakefile to use 'git format-patch'.
db05c00  Fixing #1920 - user passwords no longer allow ':'
aa219e7  Adding README.rst file
1d3f117  Added Reductive Labs build library
f01882d  Change the way the tags and params are handled in rails
b7ab54c  Add methods to return hash instead of objects to params and tags
5c64435  Rails serialization module to help serialize/unserialize some Puppet Objects
b27fccd  Fixed #1852 - Correct behaviour when no SELinux bindings
7403330  Updated Red Hat spec file 0.24.7
8befc18  Updated to version 0.24.7
cf19bd8  Not using a temporary file when locking files for writing.
b966ea0  Modifying the corruption-checking test.
1f34bca  Issue 1804 VDev with the same devices should be in sync
6d5a129  Documentation fixes
45144a1  Fixing #1812 (hopefully) - adding read and write locks to yaml.
2385a78  Preparing to fix #1812 - Moving locking code to a module
2961b83  Fix #1815 - puppetdoc --all crash on resource override
e5c36fd  Fix ZFS autorequire test
da71ad5  Add a unique name to objects so we can determine uniqueness when read back in
4418b34  Fix launchd service test on non-OSX platforms
4b2bdf9  Fix the spec tests to work on other platforms, do the confine around OS X versions more sanely
544a3e1  remove unnecessary mk_resource_methods call
50ac03a  CHANGELOG updates
a0a6d2c  Add a unique name to objects so we can determine uniqueness when read back in
68ffd46  Bug #1803 Zfs should auto require the ancestor file systems
7e2da7e  Refactor #1802 Use 'zfs get -H -o value' instead of parsing output for value
8616d74  Fixing #1800 - tidy now correctly ignores missing files and directories
6075d10  Fixing #1794 - returning sync when it is already initialized
18fe5c3  Fixing #1750 again - All of the properties and now :ensure check replace?
b22303e  Fix rake abort when there is a matching confine
0caa9c5  spec tests for type and provider and some code cleanup to adhere to DRY
0f2fc88  Finished work on rules creation and deletion
ed49153  new better way of doing stdin
05e05bb  finished rights flush, working on rules
1e37230  macauthorization type
4ed73ef  reset macauthorization tree. Initial checkin of new type/provider
5d32cd9  add NetInfo deprecation notice to user and group providers, make the directoryservice user provider the default, remove default for darwin from NetInfo providers
99ab940  Warn that the NetInfo nameservice provider is deprecated. Use directoryservice instead
c4412ec  add some more sanity checks around stdin
7de82c3  add support for stdin to Puppet::Util.execute
edef064  Make ralsh behave more sanely for non-existent objects and property values
9384a4a  Added git changelog task
c398db1  Bug #1780 Fixing meaningless test
278bfe8  Fixing mcx test failures (only happened sometimes).
c4812b8  Need to stub out the defaultprovider call for non Mac platforms
b444e43  remove extraneous comments
49d4d01  Trim down the after block clears to try to make the tests work for the build servers
65d6b49  Updated mcx type and provider with comprehensive spec tests.
fd128d6  Fixing a package test to be *much* faster
cdcbc5b  Fixing splaytime tests
6a4c0d5  Removing debugging from the "resources" type
0c6a151  Fixing a test that fails depending on test execution order
968f5cc  Relicense under GPLv2+
9ab3afb  Hopefully fixing #1703 - using a mutex around the sending of the tagmails
3fe9cc7  Fix #1741 - fix some failing tests on some ruby versions.
3570c71  Fix #1788 - allow rspec rake to run only some tests
1b3a7d8  Fixing the AST constant warnings, using a variable instead of a constant
091b8bf  Fixing #1785 - selinux tests no longer break other tests
c005dcf  Ticket 1780 - Solaris RBAC roles should be autorequired
3eff225  Feature 1696 Add support for branded zones
fa9820b  Bug #1778 - Solaris RBAC profiles should maintain order
f6fa4f7  Bug # 1680 Now you can set the hashed passwords on solaris
0a40668  Feature #1783 - Add ZFS support
047e5d0  Handle password when user is created
88edf66  == is not =
a219c88  Solaris doesn't have a native tool to set hashed passwords
9329c95  type/mcx.rb Feature #1026 - MCX Type
83b3a1e  Simplify launchd service provider and add tests
65a6074   Fixed #1695 - Solaris 10 zone provider doesn't properly handle unknown zone attributes in newer releases
0171e25  Fixing #1749 - Splay now hopefully behaves "better" for small values.
607958c  Fix #1741 - Add inline_template function
cc45c43  Fix #1741 - refactor TemplateWrapper, test for template function
d8c741f  Fix #1741 - Puppet::Parser::Functions rmfunctions and unit test
3c4efa7  Fixes #1773 - no longer check for absolute paths
3a39509  make sure only types that have passwords search for the password
a45c6b1  fix bug with numeric uid/gid in directoryservice provider. doc string cleanups
1f52795  Documentation fix for runit provider
81a91a7  Documentation fix for daemontools provider
4f67a7c  Fixed #1776 - Trivial fix for gentoo service provider
2764ab4  Rename migration so it's still applied
965c08d  Slight denormalisation to store a host's environment as a first class
5742966  Fixing #1743 - defined types get catalogs too.
31ec3e6  Adjusted CI tasks exit codes
3421954  Fixing #1755 - handling fully qualified classes correctly.
a1ac9a5  Added Rake :ci namespace and CI tasks
d978668  Lots of DirectoryService work. New Computer Type. Users now use password hashes. Groups now support setting members as attributes of the group for OS X.
86ce934  launchd service provider
97a8177  Refactoring the thread-safety in Puppet::Util a bit.
78bced1  Fixing #1683 - accessing and changing settings is now thread-safe.
83cebb5  Partially fixing #1772 - fixing selinux tests broken by removal of extraneous 'stat' in :file.
a839fe2  Partially fixing #1772 - fixing tidy code I broke.
5bd27c8  Partially fixing #1772 - broken 'resources' tests.
a3140b2  Manually setting an env var to mark autotest enabled so we see color
bbad983  Removing the included testing gems; you must now install them yourself.
b415848  Fixing #1708 - user groups specified as names are now detected correctly.
9ed382d  Fixed #1767 - Minor fix to emacs mode
27a750d  Revert "Fixing #1755 - File modes (and other strange properties) will now display correctly"
eb0d32a  Fixing #1764 - a property's 'sync' method is never considered a no-op.
e9f858a  Refactoring the file/owner property to be simpler and cleaner.
ed4c405  Fixing #1755 - File modes (and other strange properties) will now display correctly
c65f2b5  Fixed #1668 - puppetca can't clean unsigned certs
1ad33cc  Fix #1759 - Comparison operator was using string comparison for numbers
c96d250  Fixed #1711 - fileserver test fails due to incorrect mocking
8523a48  Fixed #1751 - Mac OS X DirectoryService nameservice provider support for plist output and password hash fil
d32d7f3  Fixed #1752 - Add an optional argument to Puppet::Util.execute to determine     whether stderr and stdout are combined in the output
4396740  Fix the init service type to cope with an array for defpath and if defpath does not exist
3c870d8  Added versionable feature to the RPM provider
f62d04d  Fixing broken tests resulting from the fix to #1747
030c791  Moved RRD feature from util/metric.rb to feature/base.rb
dc192b0  Manifest documentation generation
2c05a0a  Move function existance test to parser evaluation
064fb00  Add a doc attribute to AST nodes and fill it with the last seen comments
724a6f6  RSpec tests for the doc system (covers AST.doc, lexer and parser)
b8ed667  Fixed #1735 and #1747 - Fixes to confine system
6be5ac8  CHANGELOG updates
0ca5025  Fixed #1718 - Added preseed to apt uninstall and purge
01976ca  Include spec directory in packages
c98f7a5  Fixing the provider's confine subsystem so the logs are more useful.
6426a29  Removed extra 'end' from yum.rb
1e81739  Fix bug #1746: Sync SELinux file attributes after file contents created/modified
cebadd9  Fix bug #1681: Add filesystem type check to test for per-file SELinux context support
60455e7  Quiet debug when no default SELinux context found for one of the components
71a9e60  Fixes relating to transition to native SELinux bindings
3a5dcab  Refactoring of SELinux functions to use native Ruby SELinux interface
d5e19f1  Fixed #1739 - Added uninstall functionality to yum provider
bf5be00  Fix #1737 - part2 - Fix display of "options"
e032034  Fix #1737 - ssh_authorized_keys should be able to parse options containing commas
e33d087  Fix #1740 - Daemontools and Runit is not ReST compliant
dfc0554  Fixed #1730 - Edited file/ensure.rb docs for clarity
6d7b5ef  Fixes #1672 - unsafe crontab handling in Solaris
083077d  Fixing the augeas type tests to work when augeas is missing
0a3d34d  Fixes #1714 - yumhelper handling with yum 2.2.x is broken
7b70e85  Fixed #1721 - puppet.conf documentation incorrectly lists signals that affect the daemons
781a685  Fixing a test I broke when fixing a reporting bug
f063517  Added unit tests for the augeas type and provider
2d37f09  Fix #1402 - Allow multiline comments
9f30306  Fix #857 - Multiple class of the same name don't append code
649a9e0  Fixed augeas examples in type
56f3be6  Fixed #1710 - Spurious output in test run
4806c51  Fixing #1669 - The dump parameter can now be changed on mounts.
c7ccc4b  Fix #1682 - ASTArray should flatten product of evaluation of its children
c906afd  Fixing #1667 - regex automatic value documentation is now readable.
9fd1756  Split Augeas up into a provider and a type.
e542f8c  Fixed #1692 - k5login fails to set mode when file is created
57e791b  Fixing #1660 - Adding specifically supported values for tidy recursion.
42cac73  Fixing #1698 - all logs again show up in the report.
6ab4f1b  Fixed #1661 - Type reference: tidy should specify manditory parameters
2459106  Removing all mention of EPM, RPM, or Sun packages.
9ecbd63  Fixed #1104 - Classes and nodes should set $name variables
bc8cdb1  Beginning provider split, need help on the voodoo
6539f55  Updated Red Hat spec file for 0.24.6 and removed conf/debian directory.
cacafeb  Added augeas type and feature

0.24.6
======
b2c1149  Updated to version 0.24.6
5ba54d2  Updated to version 0.24.6
22024bc  Improve the inline documentation for SELinux types and parameters
f216237  Fixes #1663 - added Symbol check and additional test
81c3b72  Fix SELinux test to succeed when Puppet debug mode is enabled
f7516a7  Fix regression caused by switch to Puppet's execute() functions
c09d0cc  Solaris RBAC Attributes
6d05cbc  Fix #936 - Allow trailing comma in array definition
ec2b461  Fix #1115 - part2 - fix tests and add all_tags
356d8ca  Fixed #1662 - Configuration Reference still references 'section'
b53509b  Fixed #1460 - enhance redhat puppetmaster init.d script to easy start puppetmaster as a mongrel cluster
8a4e2e9  Fixed #1663 - Regression relating to facter fact naming from 0.24.5
e6f99f9  Fix #636 - Allow extraneous comma in function argument list
a74ec60  Fixing tests I broke when trying to fix the Providers reference.
d4df361  Use fully qualified paths when calling binaries, adjust chcon call to use Puppet's execute() function.
dedf0cd  Setting SELinux contexts with chcon should not dereference symbolic links
7f5ded1  Fixed #1646 - service puppet status does not work as non-root on redhat system
00d5fe4  Fix #1115 - Allow checking tags/classes from ERb templates
f5fb2d3  Fixed #1649 - OS X package creation script should be more selective about cleaning out prior versions
b0fd2e0  Fixing #1647 - puppetdoc's 'providers' report works again.
157c0dd  Fix 1642 (always warning) and improve unit tests to cover when to warn and not
65eafb7  lazy load latest package definitions with yumhelper 2.2
eff6ce0  Revert "Added last part of #1633 patch - update to util/metrics.rb"
c5d1a4f  Added last part of #1633 patch - update to util/metrics.rb
0fff7d7  Fixing some tests that were broken in 2fba85af
2afbd0d  Fixing a test that was failing as a result of the fix to #1491
b0c01da  Adding an additional option for the fix in ff36832e, skipping missing cert dirs
aea5582  Removing a gid test for users, since it is a bad test and has mostly been replaced in rspec
65d3040  Fixing a test that was broken in ee579641
b08002e  Fixing some tests that were broken in the fix for #1633
2bf0ba5  Fixing a test that was failing because i-have-no-idea
952ebb8  Fixing a test that was failing because of the change to retrieve() in ee579641
a5fe87f  Fixing a file source test that was failing because missing sources is now a failure
53b7d42  Fixing the broken tests resulting from the fix for #1551.
5ec6b07  Adding warnings when example groups are skipped.
54abe70  Moving some test/ package tests to rspec integration tests
85d3ae0  Cleanup selboolean and selmodule unit tests to pass on non-SELinux systems
a562ce5  Add unit test coverage for Puppet::Util::SELinux and fix problems found by tests
2b4aa0c  Fixed #1639 - uninitialized constant Puppet::Type::User::ProviderUseradd
4265825  Fix #1636 - part2 - correct some client errors.
9c31db9  Add failing test for plugin with file and recurse
2853447  Fix several small regressions in plugins mount
2153bae  Fixing #1640 - file groups now no longer get set on every run
80e5c11  Incremented CHANGELOG to 0.24.6
996ac46  Fix scenario when SELinux support tools exist, but SELinux is disabled
d803096  Add new set of unit tests for selmodule type
a3f34f9  Removal of redundant lines from unit test
307260f  Remove old selboolean unit tests and fix permissions on new tests
2ebd34e  Rewrote seboolean unit tests to provide better coverage
4df51ea  New and improved tests for file type SELinux contexts
253d4df  Fix regression when templatedir doesn't exist.
c7a6ef2  Fix #1202 - Collection attribute matching doesn't parse arrays
3281f2b  Fixed #1633 - Added support for --detailed-exits to bin/puppet
0b1e60f  Adding an array indexer method to Puppet::Util::Metric as requested in #1633.
765db30  Adding partial spec tests for Puppet::Util::Metric.
fb14e91  Fixed #1473 - Rescue Timeout::Error in xmlrpc clients
7275d7c  Fxied #1354 - yum provider problems with RHEL 3
0c297be  Fix #1109 - allow empty if or else branches
5268487  Fixed documentation, typo and added CHANGELOG entry
990e8e3  Fix #1530: Correctly parse ssh type 1 keys
06edac4  Fixed additional environments tests
79bb1f2  Rspec Tests for #381.
750e9ab  Fix #381 - Allow multiple resource overrides or references
782181e  Minor test fix for #1614
614326a  Fixing #1098 - Multiline strings now correctly increment the line count
1c6d57e  Doing some simple refactorings on Puppet::Log
a774443  Fixing #1089 - Log messages are now tagged with the log level,
db7f108  Adding rspec tests for the Puppet::Util::Log class.
d2c8998  Fixed #981 - Removed 'Adding aliases' info message
d098a90  Fix failing tests dependent on /etc/user_attr file existing
6bcfd9f  Fixing #947 - pluginsync no longer fails poorly when no plugins exist
67136f1  Fixing the Node class to no longer validate environments
a4110a3  Add SELinux context reset after file writes in Puppet::Util::FileType
250239e  Add new support for :selrange SELinux file property
c831482  Add detected defaults for existing SELinux file properties
772e9b2  Refactor SELinux commands to utility module
8153181  Clean up of SELinux rspec tests so all pass
e77ddc1  Merged fsweetser's selinux patch against HEAD
7272d49  Fixed #1613 - The client environment will be substituted when looking up settings.
1a9b567  Fixing #1614 - Environments no longer have to be listed out.
397c841  Fixed #1628 - Changed node search to use certname rather than Facter hostname
9d174c4  Updated puppet binary documentation
6a0b334  Fixed error message typo
655f378  Adding a rake task for sending emails to the dev list
d39bab9  Fixing package provider tests to use the new Transaction::Change interface
e32256a  Migrating the apt and dpkg tests to rspec.
ddda80a  Update change log with RBAC roles
d1abb86  Add role support to user type and an implemention
2fba85a  Some small clarifying refactors and change to objectadd to allow subclasses of
4a863c3  Adding user_attr util to parse attributes on solaris
93f952a  Fixed #1586 - Specifying "fully qualified" package names in Gentoo
8620775  Fixed #791 - You should now be able to create and find a user/group in one transaction.
63ad845  Refactoring and adding tests to the file group property.
7da4152  Modified the group and zone resource types to no longer call
ee57964  Modified the behaviour of resource-level 'retrieve' -- it only
0fb4693  Updating changelog for #1622
2afc4f5  Adding tests for the user retrieve method
679fede  Removing commented code from the user type from about 2005
2480654  The Netinfo and DirectoryService providers can now create user and group simultaneously.
4c998fe  Fixing #1622 - The user type only looks up groups when necessary.
6bc56ae  Aliasing the rspec 'should' method to 'must'
b9c75cd  Rewriting the user tests, in preparation for enhancing them
99de920  Fixed #1620 - Add 'sles' to Puppet confines when 'suse' is used
4cf9710  Add parser for arbitrary expressions
cfa230a  Add arithmetic operators to AST
850e0ba  Add not operator to AST
9cdecfe  Add comparison operators (< > == != <= >=) to AST
8372dc4  Add boolean operators to AST
e6698c2  Add warning and forcibly set to :md5 fixing #1564
af8c706  Fix metadata class for cases when checksum_type set
860bdb1  Fixed #1603 - Added support for running Puppet inside a Rack application
b2f0d87  Fix ticket 1596 in new fileset code, use tmpdir in fileserver tests.
a30ecf2  Make fileserver use fileset for recursion and handle dangling links by ignoring them fixing #1544
3b80763  Add tests for FileServer::Mount list for #1544
3749267  Fixed #1610 - Raise "Filebucketed" messages to Notice priority
f792b64  Added a number of confines to package providers
074abd4  Fixed #1609 - Added confines for the Gentoo, FreeBSD and SMF (Solaris) service providers
2da6d19  Fixed #1608 - Added ubuntu to defaultfor for apt provider
aa629ec  Fixed #1607 - Added ubuntu to defaultfor for Debian service provider
774c0f9  Fixed #1588 - Fixed puppetca --clean --all
98e79f8  Fixed #1472 -- defined, exported resources in the current compile now get expanded
0040bc8  Fixed #1045 - Multiple metaparams all get added to resources.
8d5ded0  Removing some code in Parameter that is unnecessary.
5fbdc49  Fixed #1595 - Internally, Property#retrieve is no longer called
c16a5ae  Only apply splay the first run
27f0c7d  fix failing hpux user specs
7a3a38f  Add rspec unit test for the append operator
16793d2  Add an append (+=) variable operator:
7f8abbd  Bug #1550 - Rework to avoid regressing rspec tests, add new rspec tests for templatedir as a path
0905734  Allow a templatedir to be colon separated.
11b0848  Fixed #1500 - puppetrun host regression
3b1d6e2  Fixed #1579 and #1580 - errors in the Puppet RPM spec file
77f4fb6  Fixed #1521 -- ldap user and group are now used with the default connection
a1a670b  Fixed #1572 -- file purging now fails if remote sources do not exist.
dd4f654  Fixing #1576 - moving all of the Puppet::Type code back into type.rb.
923fd89  Fixed issues with file descriptors leaking into subprocesses
cab5d85  Fixed #1571 - Puppet::Util::binary returns incorrect results
a7306e1  Fixed #1553 - Puppet and Facter cannot both install the plist module into two different locations
758505b  Fixed #1568 - createpackage.sh
7ce902d  Adjusted hpuxuseradd user provider to confine to HP-UX and fixed HP-UX user provider path regression
8f1336f  Fixed #1566 - changed password property of the user type
d4d3213  Fixed debug messages in package type - thanks to Todd Zullinger for this fix
b88df5a  Sync with latest Fedora/EPEL specfile
0705dfb  Fixes #1455 - Adds HP-UX support for user type
e15d316  Fixes #1551 puppetmaster.freshness xmlrpc call returns incorrect type
8fe0338  Fixes #1554 - Fix exception for undefined hostname
81cc9bf  Fixed #1533 - changed permissions for man directory
41dc1fa  Runit service provider
aae0793  Daemontools service provider
29ae879  Fixes tests broken by 95aa085
b50e718  Fixed #1488 - Moved individual functions out of functions.rb into
5fb5091  Fixed #1457 - case insensitive match for error
ded94f7  Removed spec color option for buildbot
415663b  Added simple rake task for running unit tests
557be9d  Added spec Rake task
0d118a5  Fix leaking LoadedFile when adding templates to be watched
67387e2  Fixed #1506 - Removed storeconfig duplicate indexes
7accb89  id column is autogenerated by rails as a primary key, there is no need
c5fb092  Removed reference to namespaces from --genconfig documentation
1729de1  Updates to ext/puppetlast to support multiple hosts
b6609ee  Fixed #1508 - Add HP-UX package provider.
3e482a2  Updating the authors list for the gem spec
2ec4e29  Fix #1502 - abysmal storeconfig performance - part2
9272df4  Fix #1052 - abysmal storeconfig performance - part1
f48a0ae  Fix #1510 - storeconfig fails with rails 2.1
b1ad596  Add the -P/--ping option to puppetrun, fixes #1501
6676b6b  Fixes #1274 - allow class names to start with numbers
d02f95c  Fixed #1394 - Added stored configuration clearing script to /ext
fb8cc53  Fixed #1442 - replaced use of Facter for report titling with certname
18dda20  Fixed $1456 - add proxy configuration to yum repo
ab4cb6a  Fixing #1447 -- Replacing Puppet::PackageError with Puppet::Error.
8a0cb16  Added tests for TemplateWrapper's use of Scope#to_hash.
3ae7eca  Fixing an ldap connectivity test
d3393b4  Added CHANEGLOG entry for removal of interface type
bfcdfe8  fix terrible error with overwriting permissions
0147570  Fixed #1457 - removed confine warning
fecdfbc  A working script to create an OS X pkg out of the Puppet repository
6a2e71d  Fixed #1441 - Updated console colours
404450a  Add testing for the changes to resolve redmine #1427, where Kernel methods shadow
03c76de  Expose all puppet variables as instance member variables of the template wrapper.
13069ec  Ensure that we consistently use either string #{} interpolation or String.%
469c5fe  Feature #1476: Allow specification of --bindir --sbindir --sitelibdir --mandir --destdir in install.rb
2a3d195  Specs for yaml indirector .search - I'm still learning!
c97389d  Made puppetlast work on 0.24.5 by using the YAML indirector
5c53617  Added a search method to the YAML indirector.
482489a  Revert "Fixing puppetlast to make it work with 0.24.5 / 0.25."
0bbac8d  Fixes #1417 - whitespace in ssh_auth_key provider
a772110  Sync with latest Fedora/EPEL specfile
97987a7  Feature #1241 : Improve performance of group lookups
fe99828  Bug #1448: Puppet CA incorrectly writes out all certs to inventory .txt on each certificate signing
971af69  Fixing puppetlast to make it work with 0.24.5 / 0.25.
d91d806  Updating the authors list for the gem spec

0.24.5
======
ce964ec  Updated to version 0.24.5
a7df4eb  Updated to version 0.24.5
4dffaf3  Reverting the version so my release process works
aac7dd1  Incremented versions
bfcd626  Fixes #1445 and #1426
8f5800f  Fixes #1445 and #1426
ff36832  Fixing the renaming code to skip missing directories.
8c2478b  Fixing puppet_module -- it needed the same node interface change.
d9aa5ab  Fixing a cert test to pass on Darwin.
686ba4d  Revert "Merging fsweetser's selinux patch against 0.24.4"
f16da42  Merging fsweetser's selinux patch against 0.24.4
a47fed4  'Fix' broken tests related to missing source raising
238b8d7  Fixing #1438 -- mongrel and module tests now pass.
ebb219e  Fixed all of the fileserving termini so they use indirection requests.
d8937ac  You can now select the encoding format when transferring the catalog,
a0fa09f  Revert "Fixed #1201 - all external node attributes are converted to strings."
8f8ce60  Fixed #1431 - Provider confines must now specify similar tests in one call.
7fa7251  The mongrel-related tests now run without mongrel.
bdbd992  Updated /spec/unit/rails.rb test
de6aec6  Fix Ticket 1426 - services on redhat are restarted again
0a0fcaf  Fixed #1414 - Return code from waitpid now right shifted 8 bits
61b9bcd  Added Changelog entry for new auth_key type
65b9869  Further moves from the examples directory and ext directory
4ce7159  Fail instead of log when rescuing remote file connections
4c5293b  Fix #1409, Move path expansion from the type into the provider
8043655  Fixing #1408 - --loadclasses works again.
605d760  Moved debian to conf and updated examples directory
d25c2b2  Fixed #1407 - allowdupe is now a boolean group parameter.
9eb9aff  Fixed #1368 - updated Red Hat init scripts
c7dc73f  Fixing the user ldap provider tests
edf99c5  Added message referencing ReductveLabs build library
6ff9246  Fixed #1396 - Added sha1 function from DavidS to core
19b76c7  Fixing #1401 - integration tests now work regardless of the yamldir.
667fac1  Fixed #1226 - Gems can now specify source repositories.
21d4957  Correct whitespace
4762b52  Moving the gem test to the non-ral directory
71f4b02  Importing Sam Quigley's work to enhance gem support for sources.
c751e4e  Fixed #1272 - ldap group names will be converted to GIDs.
0922c3b  Fixed #1399 - the ldap user provider knows it can manage passwords.
196494a  Fixed #1231 - Exceptions during startup should now be clear.
9d69b3f  Testing and simplifying the Transaction::Change#backward method.
61ec332  Removing the Transaction::Change#transaction accessor.
2863df2  Refactoring the Transaction::Event class.
a37a784  Adding tests for the Transaction::Event class
31ffeab  Adding tests to the Transaction::Change class.
8865bdf  file object creation should fail if source is not present
73c06c0  Renaming Puppet::Event to Puppet::Transaction::Event
84b5665  Updated test/ral/type/sshkey.rb test
5ef8979  Removed debugging from lib/puppet/util/ldap/connection.rb
6124c69  Renaming the Puppet::PropertyChange class to Puppet::Transaction::Change.
ba12d30  Fixed #1232 - the rundir no longer specifies a user/group,
be169da  Removing all of the code related to the interface type.
04ecb74  Doing what I can to fix #1128, but just in preparation for removing 'interface'.
2279acd  Adding changes to config print that were missed in fix for 1183
a87885a  Fixing the "describe" in the redhat interface specs
bd3f8e3  Fixed 1240 - puppet will function more like puppetd if graphing
7a6ae29  Add a missing test for exercising the last untested line of lib/puppet/type/ssh_authorized_key.rb
731d0f2  Minor documentation updates for ssh_authorized_key type
c825c99  Fixing the ldap node terminus to merge facts with the right name.
4b6b22e  Adding logging when a node's facts can't be found
daf0d9d  Backporting a test that was failing in master, and fixing it
38540d5  Fixing the ldap node integration test so it cleans up
e03c1be  Fixing #1382 - existing uppercase certs, keys, et al will be renamed.
5156230  Use generate instead of autorequire in the ssh_authorized_key type based on Luke's comments
d3a8125  Fixed #1006 - puppetrun --class works again.  I added the class
c1e010f  Fixing the Node::Ldap.search method to use an indirection request.
4d22a95  Switching the ldap terminus to use Util::Ldap::Connection.
b47d4e1  Added a 'search' method to the ldap node terminus.
a1d1abd  Adding an 'instance' class method to ldap connections.
ee9d002  Fixed #1114 - Facts in plugin directories should now be autoloaded,
f1d5903  Fixing #1388 - the package test no longer uses 'require'.
8c5c949  ssh_authorized_key: autorequire, default permissions and cleanup
5a283d6  Fixing #1374  - Using Puppet::Type.type() in tests
17afb8a  Fixes #1195 - Updated Gentoo init scripts
00182ff  Fixed #707 - special '@reboot'-style cron jobs work again.
c83b23d  Updated CHANGELOG for two missed commits
2380fcd  Fixed #1012 - templates in the templatedir are preferred to module templates.
4d95364  Fixed #1221 - aliases to titles now work for resources.
24ca81f  Fixed #1360 -- allowdupe works with groups again.
955a8ff  Removed test/util/loadedfile.rb tests which fixes #1370
9c1ab14  Fixed #1371 - Updated bin/puppet to use Node.find
aedfa2b  Fixed #1369 - the init service provider now supports HP-UX.
422dea0  issue 1183
d3a4d9a  Updated Rakefile fixes #1367
5f600dd  Fixing #1168 (for 0.24.x) -- automatically downcasing the fqdn.
ac7f596  Fixed #1201 - all external node attributes are converted to strings.
6658463  Updating the changelog for the changes to node lookups.
1f19453  Removing the Node.find_by_name method.
51e1ba8  The LDAP Node terminus now searches for the fqdn, short name, and default.
fb4e843  Refactoring the 'find' method a bit in the LDAP Node terminus.
317af36  Removing the now-obsolete Node.node_facts method.
b7bd427  Converting the Node.node_names class method into an instance method.
75c94e3  Removing an obsolete, unimplemented test
98e38a6  Adds support for keepconfig for the dpkg provider fixes #234
4d70449  Fix bug in test, add more specs and small refactor
86f8ff4  Removed the unless condition in query, because the issue is a stale cached
4539b1c  Issue 1215
7b2c310  Adding another note about the save_object stub.
d816614  Fixing #1362 -- I had previously removed a stub point needed for testing.
9b1301c  Removing a duplicate call left over from debugging
087480b  Replacing all two-space indents with four-space
3980323  Adding ruby interpreter lines to the tests missing them.
9fe2b03  Adding execute bits to every test currently missing them.
fb5f09b  Fixing how the Indirector::Request sets its options.
4b29a5e  Fixing how the indirection tests for whether the request has node info.
6764af3  Change description of spec to make baby jesus happy
946081b  Try again
bdc578a  Applying the fixes recommended by David Schmitt to the inline documentation of
886c984  Updating the docs for ResourceTemplate.
29c840a  Adding a class for using templates directly within resources
1205881  The mongrel and webrick REST handlers now extract certificate information.
e8044f9  Adding to the indirection request support for authentication information.
dbd9b40  Updated fix for ticket #1271
cf3b98e  Applied patch for ticket #1271
9943da6  Further Emacs puppet-mode fixes
3c2e69f  Fixed Rakefile to install non-.rb files to fix #1266
ad3803f  Fixes for install.rb running of tests that fixes #1267
65c1889  Fixing #1242 -- lack of storeconfigs only produces warning, not exception.
8a22b59  Fixing #1265 -- the ca/client tests now all pass again.
02411f5  Always using the cert name to store yaml files, which fixes #1178.
89100c4  Moving the majority of the pkgdmg docs to the wiki, fixing #1264.
9decf35  Put function in ticket #311 in correct location
6c3e7e1  Reverted function - "Added cron random function fixing ticket #311"
c173264  Refactoring warnings.rb for tests.
e6837a4  Fixing an inaccurate test so the tests will run correctly in all branches.
054a811  Removing extra debugging
bdcf5db  Fixing tests that are broken when running as root under OSX 10.5
d55a755  Added warnings test and cleaning up trailing whitespace.
c0f78b4  Fixed a bug in my tests which caused them to fail when run against the master branch.
d54338f  Added cron random function fixing ticket #311
6ea494f  Pushed patch fixing #1235
c370104  Fixing the node/catalog so that it can convert from parser catalogs to RAL catalogs.
bd51a53  Fixing transaction support for prefetching generated resources.
4434072  The ldap user/group providers now work when no users/groups are in ldap yet.
419f244  Adding support for settings within the existing Facter provider confines.
3e13bd5  Intermediate commit so I can move on to other things.
ee4be4f  Removing an unused file.  Closes #1229.
b8ce6a1  Mocking Facter in an integration test, so it works with no networking
77ee4ec  Refactoring how the provider confine tests work, again.
0820819  Minor cosmetic changes to cleanup some style elements and get rid of some cruft.
6a6a1d9  Another refactor based on feedback from Luke. This includes adding an accessor for @@state to make testing a bit cleaner.
ee04129  Refactored tests based on feedback from Luke.
d7f25ff  Rewritten tests for Puppet::Util::Storage.
c5da401  Add unit tests for Puppet::Util::Storage
8008bbc  Modified the 'factpath' setting to automatically configure
a02c6bb  Fixing a mock in the redhat interface test.
390db80  Updated puppetd documentation which fixes ticket #1227
2d6a914  Fix for latest method in rpm provider (fixes #1224)
38545d9  Crontab provider: fix a parse error when a line begins with a space character
a1409d7  Moving all confine code out of the Provider class, and fixing #1197.
995991d  Switching the Provider class to use the new Confiner class.
c9757a6  Moving the 'confine' handling to separate classes.
ac79a79  Duh, fixing all of the paths being loaded for spec in the moved tests.
d02334f  Moving all tests that are in 'ral' up a level.
e7bef08  Fixing the user test.
158d3df  Added the ability to add arbitrary attributes to ldap.
83ef1b0  Fix for #1219
b500689  adding more autotest docs
c61fc02  Adding autotest info to the ext/ directory.
59b9958  Correcting whitespace in the templatewrapper code.
49dde11  Adding has_variable? support, fixing ticket #1177
d8cc1c5  adding execute bits to tests
5e2a4b5  updating the changelog for the ldap providers
17e8158  Adding ldap providers for the user and group type.
c56e9a6  Fixing another test that wrote to ~
954aad4  Fix Emacs mode indentation of multiple nested blocks
f52e343  Enhancements to syntax highlighting and indentation for Emacs
9bf21a6  Use our own count-matches for Emacs 21 compatibility
20e60b1  Applying patch by martin to fix #1207.
270c007  Clarifying the exception when there's a syntax error but a valid parser.
f3fa589  Fixing a test that wrote to ~.
ae842ea  Fix for urpmi provider that fixes #1217
da4cdd2  Fix for ticket #1218 - changed to appropriate variable name
88ec3d8  Cosmetic fix
67dc261  Removed "none" as a valid type attribute value, it was useless anyway
db8a46c  New native ssh_authorized_key type
2b185af  Add values for dump parameter for the mount type closing #1212
69fc802  Update to man pages, fix to ralsh help text and fix for #1211
c57e194  Fixing an error message to be more clear
5a2bbad  fix bindir/sbindir defaults on OS X 10.5
fff6ad9  Fix for ticket #1209
b2a3db9  Fixed #1196 - added /sbin/service support for the redhat service provider + some doco fixes
62ca726  Fixed some tests broken by #1176
82b9f61  Added puppetlast script to ext directory
a35450b  Pushed patch for #1176 - configtimeout fix
57fd88b  Pushed patch for ticket #1191 - adding globbing support to ports provider
b5640a1  Pushed patch for ticket #1187 - freebsd pkg_add support
0a5d8a6  Fixed #1195 - support for gentoo openrc
4599791  Pushed schema patch for #1193
eac14f6  Fixed #1189 and added support for --all to puppetca --clean
d9846fc  Fixishing some pending tests, including filling in
cb617f2  Making the changes necessary to get the REST support
a6a397b  The 'destroy' method in the indirection now returns
04aba52  fill out specs for network_* methods; refactor lowest-level network hooks
a0804ae  adding rest_connection_details helper to Indirector::REST -- will need to be overridden to lookup the real connection details
aed1375  make sure unit indirector specs are working with #save; fill out network_put pending specs
75bf05d  removed a debugging helper from the Indirector::Rest#save method
9187a34  updating mongrel/webrick unit tests to match integration-tested version of REST save functionality
93bc1a9  adding REST save support, with integration tests.  A handful of unit tests in that area now need to be updated.
99b295b  disabling caching for Puppet::Indirector::Indirection as it was causing hella problems with testing save without caching; judging my luke's blog this is going to be rewritten somehow anyway
1befd1d  work-in-progress; playing with refactoring network_* methods inside Indirector::REST
f28f20b  Added support for destroy/DELETE over REST (including units & integrations on both webrick & mongrel).
0797440  updating search integration specs to include webrick
e8caf13  making search work over REST, w/ unit & integration specs
b750482  unit specs and implementation for Indirector::REST#search method
a7f2dd4  placeholders for integration specs on final REST methods
cebb677  ensure that we only run the mongrel specs when mongrel is available as a feature
dab9deb  bringing Indirector::REST specs to mongrel-land as well.
1e0f19b  Make mongrel happy like WEBrick.
d24c03c  exceptions on remote end now properly passed to local end via REST and re-raised (integration-tested)
7a73434  Much larger commit than I would like to land at once.  This is all REST-related code.  Two specs are failing related to how Mongrel is initialized for REST; will fix those shortly.
a1c4579  a trivial integration test to test whether the RESTful indirection terminus has a remote shot at working; will need to be upgraded to actually be useful
7d51146  fixing Puppet::Node::REST class name to work with autoloader inflection (Puppet::Node::Rest), so we can do Puppet::Node.terminus_class = :rest
e86fde2  This is the first version where mongrel and webrick are reliably startable and stoppable via Puppet::Network::Server.
c2f8c69  the indirector will not serve xmlrpc (this is the responsibility of the legacy networking code; it was a mistake to include stubbed support for it in the new code); removing
13c40e9  removing obsolete TODO comment
2cdd0f8  puppet-compliant indentation
b49fd49  Resources now return the 'should' value for properties from
4aaad26  Modified the 'master' handler to use the Catalog class to
2925ad1  Fixed #1184 -- definitions now autoload correctly all of the time.
376628d  Removed the code from the client that tries to avoid recompiling
3718b64  Fixing #1173 -- classes and definitions can now have the same
d91b6d8  Fixing #1173 -- classes and definitions can now have the same
738889b  Fixing the expire method (it wasn't using a request
f285f1a  Moved the request creation into the Indirection
d420701  Making the log messages around caching better.
d82ac98  Fixing the executables to use the new indirection api.
7774d9c  Ported the rest of the indirection terminuses over to
bf728d2  Intermediate commit.
644d6ba  Fixing some tests that were failing because new base types
768315b  Adding the ability for indirection requests to be created
38f0f48  Fixing an errant comment
69a321f  Fixing the tests that were failing because of the use
f9881ed  Adding a Request class to the Indirection layer.  This
4032a27  Fixing the integration tests related to the destroy fix.  Yay.
0bd5799  Fixing one other test that was failing because of the change
941177a  Changing how destroy works, just a bit -- it now accepts
c6729d1  Reworking the caching layer to use TTLs instead of versions
8e1e06f  Removing unused code from the file_serving/metadata class.
1458123  Adding an envelope module to handle indirected instance
bd858df  Changing the default environment to production.
80f8b80  Adding validation to the user type to confirm that the
92765ea  Making a test executable
7295626  Used stubs to decouple our code behavior from the behavior of the underlying filesystem, as well as removing the need to sleep (which caused the tests to take a long time).
911c7fb  Additional fix for emacs syntax for ticket #1160
c13486e  Revert "Additional fix to emacs for ticket #1160"
bb65226  Additional fix to emacs for ticket #1160
6f1c469  Extend workaround from 56aad69f8cdf8b0b08fdb7985014986223fa4455 to not only fix UIDs but also GIDs
e621985  Changed some non-standard Ruby locations to env ruby shebangs
2036d22  Fixes debian service enabled/disable issue as detailed in #1161.
1c02749  Committed patch from #1160
335972e  Pushed patch to fix #1174
6f32e95  Adding the report reference back; I don't really know
f927b97  Updates to rrdgraph documentation
e51d05c  Better fix for #1020
4a39d64  Revert "Added updated fix for #1020"
2cac600  Fixed duplicate oid for parentnode and environment in schema - addresses #1170
eae5cee  Fixing a duplicate word in the mount docs
4f8df98  Added updated fix for #1020
aa830b9  Adding 0.24.4 header to the changelog
4c63b69  Add a bunch of directives, allows a full parse of stanford's huge nagios config
9d30b26  Fixes #1148 - replaces #!/usr/bin/ruby with #!/usr/bin/env ruby.
874a02f  Added check_puppet.rb Nagios check plugin (See #1162)
491a696  I think this will include the man pages in the build but overall the Rakefile needs a rewrite
9cf7150  Added some more tests for loadedfile, based off the old unit tests.
077312a  Added rspec tests for loadedfile

0.24.4
======
3a8053a  Updated to version 0.24.4
d3e4ed7  Updated to version 0.24.4
55a9009  Pass source to pkg_add via the PKG_PATH environment variable if
6a53519  Fixing #571 -- provider suitability is now checked at resource
528bbf1  Fixing a couple of tests.
017f673  Moved the configuration of the Node cache to the puppetmasterd
bd3f6ec  Disabled man page creation by default and updated CHANGELOG
4bfc4ef  Modifying the way ensure is handled so that it supports
d93e1b4  Fixing #1138 -- the yamldir is automatically created by the
273c7ec  Disabling http keep-alive as a means of preventing #1010.
6aa6fdb  Applying patch by Ryan McBride to fix OpenBSD package
5a31959  Added man pages and man page creation logic to install.rb
e5b16b2  Ported #198 man page creation functionality to 0.24.x branch
18320b8  Found all instances of methods where split() is used without
f6325dc  Found an array that leaked pretty quickly between reparsing
25b81b3  Fixing a test I broke with my fix to #1147
4f400d4  Fixed #1147: Cached nodes are correctly considered out of
54bedb2  tweak the (already applied) patch in 388cf7c3df7ce26e953949ed6fe63d76cbbb3691 to resolve #1137; also, add tests which detect the problem.
a240969  Applying patch by wyvern to fix #1142.
e00065a  * puppet/ext/emacs/puppet-mode.el (puppet-indent-line): Clean up the code somewhat after commit 738d275f41f3eaf015800021dd2dfe6c42a1ae79, as promised.
5f3ed8d  * puppet/ext/emacs/puppet-mode.el (puppet-indent-line): Be more sophisticated about what we do at the beginning of the buffer, so that the first expression after an block-opening statement that happens to begin at the beginning of the buffer gets indented correctly. This may need some cleanup, but I wanted to get the correct behavior committed first.
d1d408c  Fix bug mentioned in commit f814e23eab140ad01df4a4a3b187fcbf20da02be:
7514057  * ext/emacs/puppet-mode.el (puppet-comment-line-p, puppet-in-array): New helper functions. (puppet-indent-line): Rewrite to handle three more situations: indent elements in an array, indent single-line blocks, and ignore previous comment content when indenting non-comment lines.
40a389a  * ext/emacs/puppet-mode.el: Untabify, in preparation for substantive changes.
0c45a5a  Adding another commit for #1136 -- Consolidated
4ce1d37  Fixed ports documentation error
c75cc42  Added more detail about the requirement for ruby-libshadow for useradd password management
1dc6dc2  Final fix to #1136 - further changes to --test setting
e714156  Second fix to #1136 - fixed --test problem
2155fe1  Fix for ticket #1136 --verbose cancels out --debug
4cc18ed  Applied patch in #1134
2795ba4  fixing another failing test
a40e9b7  Fixing some tests that only failed under certain
7d35ae8  Refactoring how the catalog creation handles errors.
1b3c85b  Removing extra debugging
2d90468  Fixing a unit test for node integration
e81fc58  Settings now (again?) do not use a section more than
fca467d  Removing explicit requires of types and providers,
34129d9  Removing obsolete code from the fileserving handler.
f62eec8  updating resource references in the docs
d0554db  Hopefully *finally* fixed the "already being managed" problem
13c6de3  Adding a rake taks for updating the trac docs

0.24.3
======
0e26a07  Updated to version 0.24.3
990638c  Updated to version 0.24.3
18ed28b  Updating changelog for 0.24.3
ab72048  Removing a Settings.use that is unnecessary
bba0b43  Downgrading the "Using cache" message from the indirection to debug
1dc0e24  Modified the ldap node terminus to also use the facts version
4a45a1d  Caching node information in yaml (I figured caching in memory will
f3a304c  Modifying the yaml terminus base class to use the timestamp
8b29368  Adding a filebucket test to puppet-test
da77cb6  Adding a test for local compiling
405802e  Using the indirected facts rather than master.getfacts, so no factsync is used
388cf7c  Regression in :node_name functionality
872ced7  Flat file now does writing to a tempfile.
4956323  Fixing #1132 -- host names can now have dashes anywhere.
ecb873d  Fixing #1118 -- downloading plugins and facts now ignores noop.
e2370b3  Fixing the service-stop on debian, using the patch provided by DavidS
e8029cc  Fixing the "tidy" type to use an option hash for specifying its parent class
c955f61  updating changelog for already-closed tickets
eecc22c  Cache the same type we check for, hopefully fixes #1116
f1216f8  Revert "Cache the same type we check for, hopefully fixes #1116"
ca0b62a  Cache the same type we check for, hopefully fixes #1116
35214eb  Fixing the rest of #1113: External node commands can specify
2261032  Partially fixing #1113: LDAP nodes now support environments,
4c0f6c8  Fix for 1094
647f5b4  Always duplicating resource defaults in the parser, so that
ee8fac6  Changed name of method for clarity per code review
8192475  Ticket #1041
4c47656  Applies patches from #1111 and #1112
443db20  Fix tests depending on the Puppet[:localcert] file existing using stubs
8627139  Updating version number
3b5daf7  Revert "Fixes #1099 - use of -m option with -d option for home directories"
0ae58a9  Fixes #1099 - use of -m option with -d option for home directories

0.24.2
======
f019cac  Updated to version 0.24.2
bfdac69  Updated to version 0.24.2
6faed12  updating changelog for 0.24.2
ee88c58  Applying patch by DavidS to fix #1083.
a7339ec  Fixing a few tests
e008b02  Fixing #1110 -- transactions now always make sure
65b7267  Fixing the fact that resources that model defined resources
4c3fa78  Fixing a few more loading order issues.
857814a  Fixing tests that did not work with Rails 2.
7ca0ad6  Fixing a test that changed the environment for all later tests,
9b07758  * Tweaks for puppetshow UI cleanup
0139889  * Add migration for "created_at" (hobo expects it)
43aea83  renaming ral/types to ral/type in the tests
879ee22  Fixing #1062 by moving the yamldir setting to its own yaml
fd1573f  Fixed #1047 -- Puppet's parser no longer changes the order
9d6e926  Fixed #1063 -- the master correctly logs syntax errors when
abd688e  Fixing #1092 by no longer using the resource reference to
29aafb4  Fixing an integration test so it cleans up after itself
82b02b9  Fixing #1101 -- puppetrun works again.
dd17d4c  Fixing #1093 -- 0.23.2 clients are again compatible
c0b5352  testing automatic commit emails
614ab9f  Adding a 'control' parameter to services, for those
bb8051b  Removed the loglevels from the valid values for 'logoutput'
ff4f65a  replacing tabs with spaces in the redhat interface provider
f3db79e  Fixing a typo in the mailalias resource type
4e55999  Removing the validation on package sources, since
42bfdf2  Fixing #1085, I think -- I was not returning a resource
1258512  Fixing #1084 -- the node catalog asks the individual
9a33487  adding a comment to the namespaceauth.conf file
04892ee  Adding an example namespaceauth.conf
f0975df  Trac #1038: not a fix, just an attempt at improving the situation.
c8b320e  Corrected #1040 fix - this should now be right - trace was after raise
07cd482  Making a couple of other small fixes, requiring
ff97059  Somewhat refactored fileserving so that it no longer caches
939c952  Fixes ticket #1080
f184228  Fixes ticket #1079 - added . support for tags
9b6e501  Fixing a test that was failing when a user-specific
5d35bc5  Fixes #1078 and includes new test
7976015  Removing a test I never migrated from test/unit.
279a0c5  Fixing a test that was actually reading in keys
098a69c  updating checksum for #1010 fix
b06767e  Quashed commit of my fixes for #1010.
5e18b8d  Hasstatus in the init service provider; it was just
60f18c2  Fixed minor documentation error
39a6756  Fixed #1073 - moved show_diff and other logic post config parse
f006e17  Fixed test for #1040
1f0ea5a  Second attempt fix address ticket #1040
39f9818  Removing some extraneous debugging from a test.
d82bfd8  Attempt to fix #1040 - catching errors in compilation
e830f28  Fixed #1018 -- resources now have their namevars added as
60dd569  Fixed #1037 -- remote unreadable files no longer have the
2de4654  converting parser ast node specs from setup/teardown to before/after
9927efb  converting parser ast host class specs from setup/teardown to before/after
c86c1da  converting node catalog specs from setup/teardown to before/after
61cdc2b  converting indirector yaml specs from setup/teardown to before/after
f702096  converting facter indirector specs from setup/teardown to before/after
516e5b6  converting indirector checksum file specs from setup/teardown to before/after
d260b7e  converting parser compilerspecs from setup/teardown to before/after
1913134  converting mount provider specs from setup/teardown to before/after
6781e10  converting indirector terminus specs from setup/teardown to before/after
dba64dd  converting file serving configuration specs from setup/teardown to before/after
b4c8f99  converting indirector ldap node specs from setup/teardown to before/after
3cb1118  converting indirector direct file server specs from setup/teardown to before/after
9e632bc  converting parsed mount provider specs from setup/teardown to before/after
becafab  converting mount type specs from setup/teardown to before/after
034336b  converting indirector file specs from setup/teardown to before/after
12f139c  converting package type specs from setup/teardown to before/after
b8d5ce0  converting fileserving/configuration/parser specs from setup/teardown to before/after
eb0bdcb  converting indirector/module_files specs from setup/teardown to before/after
22d6f9f  converting ral/types/schedule specs away from setup/teardown
d04567a  converting indirection specs away from setup/teardown to rspec compatible before/after usage
aa14ce7  moving setup() methods to before :each, so that the tests will run with rspec, as opposed to just rake (which calls them directly with ruby, as opposed to any spec binary)
f9f32c4  reordering spec binaries to prefer the local vendor/gems/rspec/bin/spec option
d11cd39  Fixing a failing test that resulted from a change
62d7616  Fixing the directory service provider's behaviour
f087df0  Fixed ticket #1072 - Debian directory updates
0eede76  Fixed Ticket 1009 - problem with plist xml parser.  We do not need the plist parser for pkgdmg.
458cb23  Fixed ticket #1070 - puppetrun configuration parse problem
2e41803  Fixed ticket #1069 - removed remaining references to multiple configuration files
10d4d0e  Fixed ticket #1065 - Solaris SMF manifests
8fa4120  Fixed ticket #1068 - Minor documentation fix
30128bd  Really minor change to user creation in Leopard.
6013b25  Refactoring the incremental checksum generation
aebd303  Enhancing the stand-alone checksums utility module
df3fbc7  Fixed #1060 - Debian service removal and addition
5ef8a3e  Changing portage to use Puppet::Error instead of Puppet::PackageError,
c4f7c51  Fixing comment -- ticket #1027 instead of #1064
8920557  Fixing #1064 -- providers et al are now autoloaded
4829711  removing "lib" deprecation notice from autoloader
f8afe13  Fixed #1043 -- autoloading now searches the plugins directory
fe02591  Fixed #1003 -- Applying DavidS's patch to fix searching for
9b1bfc1  Fixed #992 -- Puppet is now compatible with gems 1.0.1.
0cfa1d2  Fixed #968 again, this time with tests -- parseonly works,
8367fdf  Renaming the 'pfile' and 'pfilebucket' files to plain
a42c3ae  Fixed #1021 -- the problem was that my method of determining
d406353  Removing the last vestiges of GRATR from the PGraph class
068b61e  Removing obsolete references (they're in the indirection
98dbfa2  Loading the mocha gem from the puppettest.rb file.
12fa0fa  Fixing the Rakefile so all tests run in one task instead
cb5def4  'rake' within the spec dir works now, anyway, which is
eb74033  Fixing the puppet_rspec autotest plugin to use the modern interface
1b90f7f  Trying to upgrade rspec, but not having much luck.
bcb9b56  Copying over Rick's work from the master branch supporting autotest and
3af6827  Adding an inflection util class.
7e45553  Fixed #997 -- virtual defined types are no longer evaluated.
c8da318  Moving the ast node tests to rspec (which I could have
8b2fae0  Removing the last remaining vestiges of GRATR --
cf21ade  Switching the Node catalog to use the Tagging module
744cd45  Added a 'tagged?' method to the Tagging module.
d21416b  Switching the Node Catalog to using a separate method
fd0c5cb  Changing the name of the Compile class to Compiler,
5ebaa89  Refactoring the interface between the Compile class
e247b56  Changing some methods in the Compile class to
6a4cf6c  Fixed #1030 - class and definition evaluation has been significantly
3b740ff  Converting the Compile class to use a Node::Catalog instance
194e730  Moving all of the tests for Puppet::Parser::Compile to
fb4bdc0  More AST refactoring -- each of the code wrapping classes
5a0e34b  Refactoring the AST classes just a bit.  I realized that
82720d5  Removing some obsolete code from the AST base class
dbaffae  Ceasing autoloading ast files; loading them manually instead
7c500da  Stubbing Facter during the snippet tests, so they are faster and work with no network
084d0fb  Adding more information to dependencies that do not resolve
b293763  Applying patch by Jay to fix #989 -- missing crl files are
2931723  Fixing the Settings class so that it correctly handles
f7b0ca9  Fixed #1052 - fixed gentoo service management
b3f67ec  Fix ticket 974. My original "fix" wasn't. This actually fixes the problem by using a regular expression that matches only up to the first square bracket.
8f0d87d  Added :env parameter for backwards-compatibility, with warning about deprecation. :env parameter sets new :environment parameter. Changed instances of :env to :environment for consistency with other types. Added tests for new parameters. This cimmit fixes ticket 1007.
139ff33  Fujin's patch for ticket #1007 - consistent use of 'environment' instead of 'env'
aedd59c  fix bug 974 - filenames with opening bracket characters generate exceptions
b8036a9  Updating the docs for the cron type
28a8577  Added hostname test for hosts type
16df87c  Updated fix for ticket #151 and added a test
ed0c745  Fixing #1017 -- environment-specific modulepath is no
ade9f3c  Store a resource before adding relations to it otherwise activerecord will
047ec54  Fixed tickt #1034 - doco typo
6ff9423  Significantly refactoring the lexer, including adding Token and TokenList
11799b3  Fixed #1001
348aa3e  Fixed #1028 - examples incorrect for 0.24.x
974fcdb  Removed womble-specific Debian build section
321b8fd  Fixed #1006 - changed ldapnodes to node_terminus
ee6ddc9  Removing tons of unnecessary calls to "nil?" from the lexer.
7a4935f  Fixing a couple of tests, one related to recent tagging changes
9a290bb  Second attempt to fix ticket #151 - host type now validates IP addresses and hostnames/FQDNs
4a7fcfc  Revert "Fixes ticket #151 - host type now validates IP addresses and hostnames/FQDNs - the regex for the latter is quite complex but I have found it bullet-proof in the past"
b561ae6  Fix bug #997, only evaluate non-virtual definitions
1ccc9c3  Fixes ticket #151 - host type now validates IP addresses and hostnames/FQDNs - the regex for the latter is quite complex but I have found it bullet-proof in the past
d7a89b4  Fixed #1019 - made libshadow available for non-Linux users
8a649ff  I think I've finally fixed #959, by having the Settings
52eba77  Fixing #794 -- consolidating the gentoo configuration files.
f43be56  Removing the line that marked fink as the default package
f98be4a  Fixing #976 -- both the full name of qualified classes and
2cbab2c  Fixing #1008 -- Puppet no longer throws an exception
f5674cd  Fixing #995 -- puppetd no longer dies at startup if the
7a9aae8  Wrapping the Resolv call in the mongrel server so if it
9161ae8  Applying a fix for #998 -- I used a patch equivalent to
046a326  Fixing #977 -- rundir is again set to 1777.
4618140  Updating docs for ssh.
7ee4746  Adding a parse test to puppet-test.
35145f3  Fixed ticket #1005 - added additional logcheck lines
b24ac77  Fixes ticket #1004 - documentation fixes for ralsh and puppetrun
1ff9d65  Updated documentation for builtin cron type; added information about range and step syntaxes.
f15696c  Updated tagmail documentation fixing ticket #996
e3d4ea8  Fixes ticket #993 - tagmail with smtpserver specified does not add To/From/Subject header
40addcd  Fixing #982 -- I have completely removed the GRATR graph library
927dff4  Fixing #971 -- classes can once again be included multiple
117926c  Fixing the unit tests for nagios_maker; I could swear I'd already
a7bca7e  Removing the requirement in the parsed mount provider
1bdf3f8  Fixed #984 - Added Debian to reponsefile doco
b1f13af  Fixed #980 - minor wiki formatting error in nagios_maker.rb
2f9c13b  Fixed ticket #979 - code configuration option doco
039dc8d  Fixed ticket #979 - pkgdmg.rb documentation
1154c42  Fixed ticket #978 - logcheck/puppet
33e319a  Added builtin support for all Nagios resource types.
68cde4f  Removing the one-off naginator provider for nagios_command.
348f257  Adding the metaprogramming to create the Nagios types
4e8bc40  Fixing the inability to manage '/' directly.  It was a result
9b1d036  Adding the first round of Nagios code.  There are no
20367c6  Updated for 0.24.1
20d430d  Adding 0.24.1 tag to the changelog.

0.24.1
======
4fa6546  Updated to version 0.24.1
d17fb7a  Updated to version 0.24.1
40439da  Updating an exception message a bit.
e2fc425  Attempting to fix #952 -- catching any exceptions thrown
c59ff62  Further fixes toward #965.  Turned out that the previous fix
4d28b10  Updating the failure when the CRL is missing, so it's
e4446b6  Fixing parseonly with a modified version of jay's
bc0616e  Updating filetype detection for vim, and changing
927cb24  Fixing #967 -- default resources no longer conflict with
c998a25  Adding a --print option to puppetca that just prints the full-text version of a
9c32c9c  Removing the ability to disable http-keep alive,
553b2ad  Entirely refactoring http keep-alive.  There's now
92b0ebc  Fixing #967 -- relationships now work when running 0.23.x clients
1ada24d  Fixing some tests that were failing with the recent ruby that has
c22a584  Uninstalling packages through 'ensure => absent' works again for the rpm and yum providers.
8f5989a  Updated for 0.24.0-2
cc2d532  Updated for 0.24.0
933b1df  Fixing #961 -- closing existing, open connections when
e0dab9a  Updating changelog to reflect the fact that we no
4d3a368  Remove the warning about an explicit plugins mount.
178093f  Fixing the Rakefile to include the yumhelper.py file in

0.24.0
======
6b02bd5  Updated to version 0.24.0
e92f1cc  Updated to version 0.24.0
22daebe  Adding changelog update for misspiggy/0.24.0
e0f5444  Fixing the webrick test to provide a correct host
106f319  Changing the statefile to only being managed by clients,
4ebb8d0  Hopefully finally fixing #959.  Loading the stored cache
690e287  This should be the last fix for exported resources.
f1169ee  Not using the main section when running the store report, since it is unneeded and can cause conflicts within puppetmasterd
ce5cab1  Removing extraneous debugging from the schedule resource type.
cb0c4ee  Renaming 'configuration' to 'catalog', fixing #954.
7ac3bd7  Renaming the 'null' terminus type to 'plain', as
a21ee00  Copying the fact-loading code from the network client to
1bbaf18  Applying patch by whaymond to fix #955.
d9200a0  Adding what is hopefully the last commit for #896.  Here's the
74db777  Removing the 'addpath' commands from the freebsd service
b19a0c9  Removing the recently-commited paludis provider,
02b64ab  Applying patch by josb in #884 to provide pattern
584127c  Applying patch by raj in #881.
4ee5ab8  Applying patch for portage package support from thansen
ed642ac  Replacing freebsd service provider with the one
117f005  Adding paludis package support as provided by KillerFox
3248c93  Fixing #937 -- I had not ported the dot methods at all,
a8bf74b  Fixing #946.
b70f00a  Fixing some further failing tests resulting from the fix for
862d1f7  Adding an Indirection reference, along with the work
da77e4a  Updating the changelog with external node info.
f127d04  Fixing #951 -- external nodes work again, but you have to
7a4ae08  Fixing the rest of #948.  My previous work was sufficient,
3790ce1  Fixing part of #948 -- per-setting hooks are now called
b852c2f  Fixing #941 -- calling pkg_info instead of info
ae33e57  Fixing #923 (again).  The host storage method was not
9ad7d1a  Adding basic unit tests for type/user by DavidS from #948.
038b9c8  Fixing #923.  Resources that are collected on the local
5886d37  Applying patch by whaymond_home to further fix part of #896.
072b03e  simplify PluginsMount
a012849  Updated tests for http_enable_post_connection_check configuration setting.
4d4abd3  Better test to match the behavior of the code.
24cacdb  Fixed test case for http_enable_post_connection_check
f94d6d3  As per lutter; augmented fix for #896 to be configurable and defaulting to validate the server certificate, honoring CVE-2007-5162.
8eecbe5  Fixing another failing test I somehow missed in my last big commit
88304cc  Renaming @model to @resource in a provider
75647ee  Fixing a couple of tests that were failing on a different platform or with a different version of ruby
811fefa  Fixing #892 -- filesystem mounts are no longer remounted.
dedc56a  Fixing #527 (rewrote service tests), #766 (services only restart when they
421b3fc  Another backward compatibility patch, this time helping with a new server and old client
bbf8a8b  Making a few changes to the transportable class to enhance backward compatibility
11ae473  Theoretically, this patch is to fix #917 (which it does), but
8127397  Fixing puppetca so it passes its tests, duh.  Apparently
2282046  Adding a top-level ResourceReference class that everything
c6d1746  Fixing the first half of #917 -- the ResourcReference
6c1d8d3  Applying fix to xmlrpc client tests by Matt Palmer
6b2c0d8  Fixing the error message as requested in #893.
1b2142b  Applying patches from #823 by wyvern
c7cd7ec  Fixing the markup on the pkgdmg provider so it is a bit better
1e6ba6f  Fixing #781, from what I can tell.  I'm leaving it with
5d30ea9  Fixing #810 -- I catch the error and prefix it with something
4e52ffc  Fixing #796 -- the fileserver can now start with no
168fa5f  Fixing the asuser method in Puppet::Util::SUIDManager
0ef6b95  Fixing #931 by keeping track in configurations of
a38b415  Fixing #927 -- rewriting the test to actually test what it's
7ff8ea5  Fixing the persistent and periodic schedule test failures
18b4c3a  Fixing #924 -- clearing the configuration cache before and
2cb1199  Fixing the breakage that I caused when I added the 'declared_feature?'
2d19ee2  Fixing #920 -- I have replaced the existing mount test with an
c3dde68  Fixing #919 -- installed packages used for testing are just ignored,
47890f9  Fixing a test that was erroneously testing for the wrong feature
12ebbe2  Rewriting the tests for the package resource type, fixing #930.
fc7f1b4  Fixing #921, mostly by just deleting the existing test.  I had
9311bdd  Applying patch by trombik from #756.
b575d15  Integrating Matt Palmer's patch to provide a 'plugins'
36c947e  Fix #896 - Always disable DNS checking of certificate when making https connections.
3fb8e2e  Applying the rest of Matt Palmer's patches
7eb09ab  Implementing the test for setting the Rails
676efa7  Incorporating patch 20071030034736-6856b-6004090b3968cdbf7d366a03ee1c44e2160a3fe0.patch
7f1b2d6  change up rails specs again with Luke's help
8de1412  Integrating most of Matt Palmer's from
a88891a  Fixed #906 - Augmented Cert DN regexp check to work with Pound and Apache.
c19d08a  mock all use of Puppet[] in Puppet::Rails.database_arguments
e69e0c3  fix spacing
b435f04  fix socket argument to AR and add rails spec
e53693e  Hopefully fixing #698 -- fixing the markup for the pkgdmg package provider
7c36ae9  Adding patch 20071030035457-6856b-bd1c45ed5ecd753b2cb4f05347061f7245cc175a.patch from womble -- Force removal of directories during pluginsync
880a8e2  Adding patch 20071020020745-6856b-dbc63ff3f137a4039fb997b9978202d52f621e8c.patch from womble -- Fix some residual instances of /var/run fever
696f1fb  Adding patch 20071020015958-6856b-69efa7868cf3df3f2a2da6fcfc3b794bbb532c7f.patch from womble -- Remove rundir from puppet.conf, and add a NEWS entry to document these changes
7a95017  Adding part of patch 20071020011907-6856b-05b59120fdb90ab4a5842f91613247b07206a4ba.patch from womble -- Fix for Debian#447314, by fiddling with /var/run/puppet.  This does not accept the whole patch, because the change needs to be tested around other platforms.
38b970a  Adding patch 20070927050018-6856b-7fa134180aceb9cee2e667630345f5f8467a9d0c.patch from womble -- Catch more retryable errors in the XMLRPC call wrapper
276034f  Adding patch 20070927042000-6856b-38a0c82fd0a0d950937e7fe5a38b9901743402b3.patch from womble -- Recycle the connection more aggressively, to stop problems with clients that are newly requesting certificates
3bf7031  Adding patch 20070926235454-6856b-079fc12a9b63d59afd59aa205bc8bfeb350b097a.patch from womble -- Recycle the connection if we're presented with an EPIPE
0ebd99e  Adding patch 20070926214630-6856b-edd313b08555033710c90a94d9d8beaf889d6cf4.patch from womble -- Fix spelling mistake in debian control files
7ed1c17  Adding patch 20070913032650-6856b-b1cca1c249415c6076ffcecb9df1525a728457c7.patch from womble -- Fix annoying database deletion error for ParamValue objects.
28430c4  Adding patch 20070913032546-6856b-0de200e8450920e7f712c54bf287ae43c7fda8af.patch from womble -- Only set dbuser if explicitly asked for
d7b381b  Adding patch 20070913011122-6856b-98bf03f09c8e19679390d73fdddc2e4d1273f698.patch from womble -- Add changelog entries for the pulled pgsql patches
a7d75d3  Adding patch 20070913010926-6856b-eb64be3b5169b7af674388124b406a1db7470880.patch from womble -- More restrictive permissions on some puppet-related directories
407734f  Adding patch 20070913005414-6856b-db5ea77e10ec6869ad01a4bd6483912c337f3a70.patch from womble -- NEWS for the ssldir transition
1486d39  Applying patch 20070913004017-6856b-cdbbba99de0b33b64874205a27833b5114fcc6b9.patch by womble -- Allow empty config settings
03c8ffd  Adding patch 20070913003810-6856b-cdc8b2e8c6c46eb8d6d073f86291a0fc5a59f429.patch from womble -- Only set the hostname and password if we want them; this allows pgsql ident auth to work it's magic
035fa38  Adding patch 20070905004837-6856b-2e7b8d8595ee0883537620c46424a4bf6174dc6a.patch from womble -- Add an attr_accessor for @http#ca_file, since older versions of libopenssl-ruby only provides ca_file=, not ca_file
63b205a  Adding patch 20070831053637-6856b-dd0fddab681485ce7cea0b57336d0c48fa33f7f8.patch from womble; updates changelog
72c0e7b  Adding the debian directory via patch 20070831052721-6856b-b90bb56a4ed37ea420f10352a0a366068cddc7e4.patch from womble
7efe24f  Fixing #882 -- I just added a quick hook to the
56aad69  Patching a bit for #804 by making the maximum much higher UID
a525ab5  Fixing a couple of tests that were failing because of the environment changes.
6d74ddd  Accepting a modified form of the patch from #885 by immerda.
b745f04  Fixing #886 -- the problem was the I had changed the base
dbe70a1  Added calls to endgrent/endpwent in util/posix.rb to
7f504b0  Applying patch from #896 by whaymond_home, adding more
1cb40ec  Obviating targets in interfaces; they now just generate a warning.
eee9f5e  Adding more tests to the redhat interface provider.  It no
1a4e4fb  Rewriting the sunos interface provider to manually parse and
8cbe8bd  Adding unit tests for the sunos interface provider.
3d2e1a5  Adding some unit tests for the interface type before i go messing around with it
cca613d  Fixing the first part of #787.  Not all collections were
96b3cde  Applying patch from #834, apparently fixing a problem
9472eef  Removing the bootproto and broadcast attributes from the redhat interface provider, since they are not needed
a7a46af  fixing the path to the spec helper in the exec test
3d31dc8  Fixing #762.  The main problem was that I accepted the patch
8ecdfc2  Moving the exec test into the types/ directory
94e63ad  Fixing the last failing test relating to the environment changes
7fe5bfc  Fixing the exec spec so it works when non-root and is a bit cleaner
8cc07ad  Using the Environment class to determine the default environment,
53008e5  The Puppet settings instance now validates environments when
9e5fc76  Fixing #911 and #912 -- there's a default environment (development)
cc88441  Removing the manual ssldir setting by David in 59626cb3907d36e4fd762277daa76f523faf0908
1bf3999  Fixing a failing test from my fix for #446 -- I had changed
3f0b250  Fixing a few test suites that passed when run as
4bd7b6f  Fixing #896 by applying DerekW's patches, with slight
8ad2732  Fixing #446.  I ended up largely not using porridge's patch,
1b78f57  Add Exec{ logoutput=> on_failure }
2b14f62  Reverting the changes I'd made toward removing the global
9cf477b  Applying fix by Jeff McCune from #905
edc4b1d  Fixing a SimpleGraph unit test so it doesn't depend
c19835c  Fixed most failing tests, but there are still over thirty failing.
4afbaa6  fix #903: add patch from hrvojehr
32d9afc  tests for #903: fail when no logoutput is generated on failure
9290cc8  Modifying how default resources are created; they are now
ffb4c2d  This commit is the first run at removing all global
b65fb83  Fixing a parser test -- really, just removing tests
72510bf  Fixing #800 by refactoring how configurations are retrieved
dd7caa7  Moving some compile tests to the spec/ directory, and
47a2605  Changing the 'main' class to no longer be lazy-evaluated.
a4e8f1c  Adding a memory terminus for facts, which is really only used for testing
3851415  fix dependency on $HOME, which causes massive failures when running without environment
59626cb  fix failing CA test, when testing with incomplete setup (no ssldir, no DNS)
a6ad326  fix the underlying dependency on the environment in the cron type
d48ee3e  fix crontests depending on ENV[USER] by using Etc.getpwuid(Process.uid) instead
8fe892d  fix a testfailure when running spec tests as root
445c29c  fix #872: improve property(:content).insync?
5726412  tests for #872: check interaction between "replace" and "content"
61ef289  fix #815: add :main to all use() for :reporting and :metrics
418bc21  remove obsolete runners variable
a535cbb  Commenting out the time debugging I was using
3f583dc  Adding unit tests for the module that handles the
8f04446  Fixing the 'mount' tests so that they no longer
ba19989  Switching the class resource evaluation to only happen
cf75168  Classes once again get evaluated immediately when the
4441052  fix #891: create a plugins mount which collects all modules' plugins/ subdirs
dfe774f  Switching the base class for the Relationship class.
4194526  fix #760: property_fix has to be called after creating a symlink
b250416  fix #731: add exported=true to collect_exported
1ffcce0  Splitting the puppetd tests into two tests.  It is still not a very good test, but I do not know of a good way to test this, really.
065a1d0  Switching the graph base class from GRATR::Digraph
3f21e93  Adding a new graphing base class, because the GRATR stuff
ef99495  Caching the 'parent' value, which resulted in
826efe8  The configurations should now be functional again --
db293cf  Fixing a bit of indentation and commenting in the xmlrpc/client file
956daa5  This won't be perfect by any stretch, but put in a moderately reasonable autotest config file.
c7b36b7  One significant step closer to getting autotest running properly on the Puppet specs.
6585835  Adding patch from #879 by tim
d03f68e  Changing the test/ classes so that they work from the main
c0a07ac  File serving should work now, both recursive and
54fc80d  Exceptions on requests are now captured, exceptions are serialized, and exception text is passed back via REST.
e7bfe0b  Finish serializing successful results (via calls to to_yaml, etc.) for REST handlers.  Refactor request building in REST handler specs.
d28a904  REST handlers now properly returning 200 status on success.
1746751  Adding post- hooks for :find and :search in the indirection class.
09f9c3c  Adding the calls to the authorization hooks in the Indirection.
b874751  Renaming the FileServing TerminusSelector module to IndirectionHooks,
de5d91e  Renaming the :local termini for metadata and content
7fa99b0  Link handling is now in the file serving classes.
688fcdf  Adding searchability to the fileserving termini, using the
393a3e8  Adding a Fileset class for managing sets of files.  This
b2b8f75  Adding authorization hooks to the file_server and
8f827ff  Renaming the 'mounts' terminus to 'file_server', and renaming
08099b7  File serving now works.  I've tested a couple of ways to
264331b  Partial work done for ssl certificates.
ec39672  Adding this test stub that's been sitting
fc60751  I've now split the file-serving termini into two separate types (in
64c6700  Fixing all of the classes that I just renamed, and adding
56b83fe  Renaming the file serving indirection termini to match
33d7dc0  I'm working on making file serving work in the indirector now, so I
8156185  Renaming the file_serving/{content,metadata} indirections
2718b63  This is the first mostly functional commit of the
e1dd5dd  Adding spec stubs for authorization in the indirection
e69a50a  Fix test which is conditional on mongrel installation.
8bf5196  Oops, forgot this file in my last commit.
d0bd48c  Adding the first pass at modifying file serving
d2b891f  More specs, fleshing out the returns from REST
e5921c5  getting more fine-grained with the response specs -- the target is always moving.
705f76f  Argument passing now supported on {webrick,mongrel}+REST.
ce34968  Make the actual runtime be more robust when mongrel is not installed.
6cd0f37  Make it possible to run all tests even if mongrel isn't installed.  Shouldn't "confine" produce some output when running spec?  Who knows.
216dd8c  Refactoring, argument processing for model methods.
abbc824  Tweak to move model lookup functionality into the Handler base class where it belongs.  Robustifying the request sanitization a bit more.
2a497ff  Refactored to use a Handler base class for server+protocol handlers.  Finally eliminated dependency on Puppet.start, etc., from WEBrick HTTP server class.  {webrick,mongrel}+REST now support request handling uniformly; need encode/decode next.
6ab78f6  Inlined the controller, eliminating a class.  Mongrel+REST has the right bits for request handling prior to the encode/decode/exception-handling bits.  Refactored to make the common logic extractable to a base class.
b8c877c  Registration now built for {webrick,mongrel} REST handlers.
3c370b3  Going back to each server+protocol object being responsible for only one indirection, as the REST vs. XMLRPC models are different enough that the object must register itself on initialization and handle the request when it comes in.
c06edda  First pass through initializers of {mongrel, webrick} REST handlers; hooks into Indirection to look up models from indirected names.
ab4c7fa  Minor tweaks to make the ::Server initialization a bit more robust.  Fail on unknown HTTP Server types; fail fast.
099c546  Finish front end of delegation to server+protocol helper classes ("handlers").
b1d6223  Bringing in initial handlers for server+protocol pairs.
a815f78  Reorganizing the file structure for indirection terminus types.
ba95202  Partial support for building Handlers for all handler-protocol pairs.
ef8ebe0  Implementing address & port support for new webrick server.
c34efbc  Hooking up address/port support for the various servers w/ specs.  Still need to start up a webrick server w/ address + port (this is far too incestuous with Puppet lib & Puppet.start at the moment).
9a179ec  trivial: WEBRick -> WEBrick, to be more consistent with how the WEBrick ruby classes are named.
e56406f  Implementing listening state tracking for webrick and mongrel.
ec71e05  More unit specs for mongrel and webrick; more code to make them work, yo.
31384fe  Pushing functionality down to webrick/mongrel classes now; cleanup in the base server / http server classes + specs.