From a73891ca1724559ce2ad9916124c59eb9c417091 Mon Sep 17 00:00:00 2001 From: An-Cheng Huang Date: Mon, 23 Aug 2010 14:51:20 -0700 Subject: 0.17.9 --- debian/changelog | 6 ++++++ 1 file changed, 6 insertions(+) (limited to 'debian') diff --git a/debian/changelog b/debian/changelog index 48591ae..113c297 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,9 @@ +vyatta-cfg (0.17.9) unstable; urgency=low + + * move "changed" status handling into library + + -- An-Cheng Huang Mon, 23 Aug 2010 14:51:19 -0700 + vyatta-cfg (0.17.8) unstable; urgency=low * don't remove the workaround yet -- cgit v1.2.3 From 3afeb6df69058c605ad251dfc7ae93d4d0ae6f1d Mon Sep 17 00:00:00 2001 From: An-Cheng Huang Date: Tue, 24 Aug 2010 18:54:06 -0700 Subject: add extensible node sorting mechanism * unify node sorting implementation into the backend library. * allow future implementation of per-node, customized sorting policy. --- Makefile.am | 1 + debian/control | 2 +- src/cstore/cstore.cpp | 42 ++++++++++++++++++++++++++++++++++++++++-- src/cstore/cstore.hpp | 41 ++++++++++++++++++++++++++++++++++++++--- 4 files changed, 80 insertions(+), 6 deletions(-) (limited to 'debian') diff --git a/Makefile.am b/Makefile.am index 86db597..00a3c80 100644 --- a/Makefile.am +++ b/Makefile.am @@ -23,6 +23,7 @@ src_libvyatta_cfg_la_LIBADD = /usr/lib/libglib-2.0.la src_libvyatta_cfg_la_LIBADD += /usr/lib/libgio-2.0.la src_libvyatta_cfg_la_LIBADD += -lboost_system src_libvyatta_cfg_la_LIBADD += -lboost_filesystem +src_libvyatta_cfg_la_LIBADD += -lapt-pkg src_libvyatta_cfg_la_LDFLAGS = -version-info 1:0:0 src_libvyatta_cfg_la_SOURCES = src/cli_parse.y src/cli_def.l src/cli_val.l src_libvyatta_cfg_la_SOURCES += src/cli_new.c src/cli_path_utils.c diff --git a/debian/control b/debian/control index 2d7e270..6ab3335 100644 --- a/debian/control +++ b/debian/control @@ -3,7 +3,7 @@ Section: contrib/net Priority: extra Maintainer: Vyatta Package Maintainers Build-Depends: debhelper (>= 5), autotools-dev, libglib2.0-dev, - libboost-filesystem1.40-dev + libboost-filesystem1.40-dev, libapt-pkg-dev Standards-Version: 3.7.2 Package: vyatta-cfg diff --git a/src/cstore/cstore.cpp b/src/cstore/cstore.cpp index b7261fe..2c30207 100644 --- a/src/cstore/cstore.cpp +++ b/src/cstore/cstore.cpp @@ -25,6 +25,10 @@ #include #include +// for debian's version comparison algorithm +#define APT_COMPATIBILITY 986 +#include + #include #include #include @@ -58,6 +62,12 @@ const string Cstore::C_ENV_SHAPI_HELP_STRS = "_cli_shell_api_hstrs"; const string Cstore::C_ENUM_SCRIPT_DIR = "/opt/vyatta/share/enumeration"; const string Cstore::C_LOGFILE_STDOUT = "/tmp/cfg-stdout.log"; + +////// static +bool Cstore::_init = false; +map Cstore::_sort_func_map; + + ////// constructors/destructors /* this constructor just returns the generic environment string, * currently the two levels. implementation-specific environment @@ -71,6 +81,8 @@ const string Cstore::C_LOGFILE_STDOUT = "/tmp/cfg-stdout.log"; */ Cstore::Cstore(string& env) { + init(); + string decl = "declare -x "; env = (decl + C_ENV_EDIT_LEVEL + "=/; "); env += (decl + C_ENV_TMPL_LEVEL + "=/;"); @@ -182,6 +194,7 @@ Cstore::tmplGetChildNodes(const vector& path_comps, SAVE_PATHS; append_tmpl_path(path_comps); get_all_tmpl_child_node_names(cnodes); + sort_nodes(cnodes); RESTORE_PATHS; } @@ -1096,6 +1109,7 @@ Cstore::cfgPathGetDeletedChildNodesDA(const vector& path_comps, cnodes.push_back(acnodes[i]); } } + sort_nodes(cnodes); } /* get "deleted" values of specified "multi node" during commit @@ -1145,7 +1159,8 @@ Cstore::cfgPathGetDeletedValuesDA(const vector& path_comps, */ void Cstore::cfgPathGetChildNodesStatus(const vector& path_comps, - map& cmap) + map& cmap, + vector& sorted_keys) { // get a union of active and working map umap; @@ -1166,6 +1181,7 @@ Cstore::cfgPathGetChildNodesStatus(const vector& path_comps, for (; it != umap.end(); ++it) { string c = (*it).first; ppath.push_back(c); + sorted_keys.push_back(c); // note: "changed" includes "deleted" and "added", so check those first. if (cfgPathDeleted(ppath)) { cmap[c] = C_NODE_STATUS_DELETED; @@ -1178,6 +1194,7 @@ Cstore::cfgPathGetChildNodesStatus(const vector& path_comps, } ppath.pop_back(); } + sort_nodes(sorted_keys); } /* DA version of the above function. @@ -1187,12 +1204,14 @@ Cstore::cfgPathGetChildNodesStatus(const vector& path_comps, */ void Cstore::cfgPathGetChildNodesStatusDA(const vector& path_comps, - map& cmap) + map& cmap, + vector& sorted_keys) { // process deleted nodes first vector del_nodes; cfgPathGetDeletedChildNodesDA(path_comps, del_nodes); for (size_t i = 0; i < del_nodes.size(); i++) { + sorted_keys.push_back(del_nodes[i]); cmap[del_nodes[i]] = C_NODE_STATUS_DELETED; } @@ -1202,6 +1221,7 @@ Cstore::cfgPathGetChildNodesStatusDA(const vector& path_comps, vector ppath = path_comps; for (size_t i = 0; i < work_nodes.size(); i++) { ppath.push_back(work_nodes[i]); + sorted_keys.push_back(work_nodes[i]); /* note: in the DA version here, we do NOT check the deactivate state * when considering the state of the child nodes (which include * deactivated ones). the reason is that this DA function is used @@ -1231,6 +1251,7 @@ Cstore::cfgPathGetChildNodesStatusDA(const vector& path_comps, ppath.pop_back(); } + sort_nodes(sorted_keys); } /* check whether specified path is "deactivated" in working config or @@ -1294,6 +1315,7 @@ Cstore::cfgPathGetChildNodesDA(const vector& path_comps, append_cfg_path(path_comps); get_all_child_node_names(cnodes, active_cfg, include_deactivated); RESTORE_PATHS; + sort_nodes(cnodes); } /* get value of specified single-value node. @@ -1575,6 +1597,7 @@ Cstore::cfgPathGetEffectiveChildNodes(const vector& path_comps, } ppath.pop_back(); } + sort_nodes(cnodes); } /* get the "effective" value of specified path during commit operation. @@ -1877,6 +1900,21 @@ Cstore::output_internal(const char *fmt, ...) ////// private functions +bool +Cstore::sort_func_deb_version(string a, string b) +{ + return (pkgVersionCompare(a, b) < 0); +} + +void +Cstore::sort_nodes(vector& nvec, Cstore::SortAlgT sort_alg) +{ + if (_sort_func_map.find(sort_alg) == _sort_func_map.end()) { + return; + } + sort(nvec.begin(), nvec.end(), _sort_func_map[sort_alg]); +} + /* try to append the logical path to template path. * is_tag: (output) whether the last component is a "tag". * return false if logical path is not valid. otherwise return true. diff --git a/src/cstore/cstore.hpp b/src/cstore/cstore.hpp index 0c80ffd..8cb3fd1 100644 --- a/src/cstore/cstore.hpp +++ b/src/cstore/cstore.hpp @@ -38,7 +38,7 @@ using namespace std; class Cstore { public: - Cstore() {}; + Cstore() { init(); }; Cstore(string& env); virtual ~Cstore() {}; @@ -66,6 +66,7 @@ public: static const size_t MAX_CMD_OUTPUT_SIZE = 4096; + ////// the public cstore interface //// functions implemented in this base class // these operate on template path @@ -186,7 +187,13 @@ public: void cfgPathGetDeletedValues(const vector& path_comps, vector& dvals); void cfgPathGetChildNodesStatus(const vector& path_comps, - map& cmap); + map& cmap) { + vector dummy; + cfgPathGetChildNodesStatus(path_comps, cmap, dummy); + }; + void cfgPathGetChildNodesStatus(const vector& path_comps, + map& cmap, + vector& sorted_keys); /* observers for "effective config". can be used both during a config * session and outside a config session. more detailed information @@ -244,7 +251,13 @@ public: vector& dvals, bool include_deactivated = true); void cfgPathGetChildNodesStatusDA(const vector& path_comps, - map& cmap); + map& cmap) { + vector dummy; + cfgPathGetChildNodesStatusDA(path_comps, cmap, dummy); + }; + void cfgPathGetChildNodesStatusDA(const vector& path_comps, + map& cmap, + vector& sorted_keys); /* these are internal API functions and operate on current cfg and @@ -349,6 +362,28 @@ private: virtual string tmpl_path_to_str() = 0; ////// implemented + // for sorting + typedef enum { + SORT_DEFAULT = 0, + SORT_DEB_VERSION = 0, + SORT_NONE + } SortAlgT; + typedef bool (*SortFuncT)(std::string, std::string); + static map _sort_func_map; + + static bool sort_func_deb_version(string a, string b); + void sort_nodes(vector& nvec, SortAlgT sort_alg = SORT_DEFAULT); + + // init + static bool _init; + static void init() { + if (_init) { + return; + } + _init = true; + _sort_func_map[SORT_DEB_VERSION] = &sort_func_deb_version; + } + // begin path modifiers (only these can change path permanently) bool append_tmpl_path(const vector& path_comps, bool& is_tag); bool append_tmpl_path(const vector& path_comps) { -- cgit v1.2.3 From 17e3a880453dc220e5a235df1e21dabfa89f1e8e Mon Sep 17 00:00:00 2001 From: An-Cheng Huang Date: Tue, 24 Aug 2010 18:58:31 -0700 Subject: 0.17.10 --- debian/changelog | 6 ++++++ 1 file changed, 6 insertions(+) (limited to 'debian') diff --git a/debian/changelog b/debian/changelog index 113c297..6ee5968 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,9 @@ +vyatta-cfg (0.17.10) unstable; urgency=low + + * add extensible node sorting mechanism + + -- An-Cheng Huang Tue, 24 Aug 2010 18:58:31 -0700 + vyatta-cfg (0.17.9) unstable; urgency=low * move "changed" status handling into library -- cgit v1.2.3 From 6d7e5ff8dd0a8b967afb44f7be00c277d438f717 Mon Sep 17 00:00:00 2001 From: An-Cheng Huang Date: Wed, 25 Aug 2010 17:20:58 -0700 Subject: 0.17.11 --- debian/changelog | 7 +++++++ 1 file changed, 7 insertions(+) (limited to 'debian') diff --git a/debian/changelog b/debian/changelog index 6ee5968..dfadcd7 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,10 @@ +vyatta-cfg (0.17.11) unstable; urgency=low + + * switch to unordered_map + * remove sorting from unsorted API calls + + -- An-Cheng Huang Wed, 25 Aug 2010 17:20:57 -0700 + vyatta-cfg (0.17.10) unstable; urgency=low * add extensible node sorting mechanism -- cgit v1.2.3 From ce05f4b0afc37658baa87f972908dea2876b2b9e Mon Sep 17 00:00:00 2001 From: An-Cheng Huang Date: Thu, 26 Aug 2010 16:47:13 -0700 Subject: 0.17.12 --- debian/changelog | 10 ++++++++++ 1 file changed, 10 insertions(+) (limited to 'debian') diff --git a/debian/changelog b/debian/changelog index dfadcd7..15a2904 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,13 @@ +vyatta-cfg (0.17.12) unstable; urgency=low + + * new implementation for config output + * switch vyatta-cfg-cmd-wrapper to new config output implementation. + * mark changed ancestors up to the root + * switch "save" to use new config output implementation. + * don't show extra empty level for typeless leaf nodes. + + -- An-Cheng Huang Thu, 26 Aug 2010 16:47:13 -0700 + vyatta-cfg (0.17.11) unstable; urgency=low * switch to unordered_map -- cgit v1.2.3 From dd0e8e1abf74b79a0fd259007d803db7359dffc2 Mon Sep 17 00:00:00 2001 From: An-Cheng Huang Date: Thu, 26 Aug 2010 17:08:01 -0700 Subject: 0.17.13 --- debian/changelog | 6 ++++++ 1 file changed, 6 insertions(+) (limited to 'debian') diff --git a/debian/changelog b/debian/changelog index 15a2904..5a245ed 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,9 @@ +vyatta-cfg (0.17.13) unstable; urgency=low + + * mark the root as "changed" after "comment" operation. + + -- An-Cheng Huang Thu, 26 Aug 2010 17:08:00 -0700 + vyatta-cfg (0.17.12) unstable; urgency=low * new implementation for config output -- cgit v1.2.3 From efe1f2b5aea0065f94394b916f1fa8b447229d5a Mon Sep 17 00:00:00 2001 From: An-Cheng Huang Date: Thu, 26 Aug 2010 19:04:24 -0700 Subject: fix for bug 5960 * change "commit" to use syscalls (instead of system("...") calls) for mount/umount. * this is a temporary fix, and such low-level details need to be moved into the backend library. --- debian/vyatta-cfg.postinst.in | 2 +- src/common/unionfs.c | 65 +++++++++++++++++++------------------------ 2 files changed, 30 insertions(+), 37 deletions(-) (limited to 'debian') diff --git a/debian/vyatta-cfg.postinst.in b/debian/vyatta-cfg.postinst.in index c007538..bb747d4 100644 --- a/debian/vyatta-cfg.postinst.in +++ b/debian/vyatta-cfg.postinst.in @@ -28,7 +28,7 @@ if [ "$sysconfdir" != "/etc" ]; then fi # capability stuff -for bin in my_cli_bin my_cli_shell_api; do +for bin in my_cli_bin my_cli_shell_api my_commit; do touch -ac $sbindir/$bin setcap cap_sys_admin=pe $sbindir/$bin done diff --git a/src/common/unionfs.c b/src/common/unionfs.c index da4cd7e..9fe2497 100644 --- a/src/common/unionfs.c +++ b/src/common/unionfs.c @@ -3,6 +3,7 @@ #include #include #include +#include #include #include #include @@ -23,6 +24,10 @@ extern vtw_path t_path; * behavior so no status is returned (since system() return code was not * checked). this should probably be changed so each invocation is checked * for error. + * + * XXX these (and many other things here) will need to be moved into the + * library to consolidate the usage of all low-level implementation + * details. */ static inline void sys_mkdir_p(const char *path) @@ -54,6 +59,25 @@ sys_cp(const char *src_file, const char *dst_file) } } +static inline void +sys_umount_session() +{ + if (umount(get_mdirp()) != 0) { + perror("umount"); + } +} + +static inline void +sys_mount_session() +{ + char mopts[MAX_LENGTH_DIR_PATH * 2]; + snprintf(mopts, MAX_LENGTH_DIR_PATH * 2, "dirs=%s=rw:%s=ro", + get_cdirp(), get_adirp()); + if (mount("unionfs", get_mdirp(), "unionfs", 0, mopts) != 0) { + perror("mount"); + } +} + void set_path(char *path, boolean config); @@ -743,9 +767,6 @@ common_commit_copy_to_live_config(GNode *node, boolean suppress_piecewise_copy, static const char format1point1[]="mv -f %s/* -t %s"; /*mdirp, tmpp*/ static const char format1point5[]="rm -fr '%s'/*"; /*tmpp*/ - static const char format2[]="sudo umount %s"; //mdirp - static const char format8[]="sudo mount -t unionfs -o dirs=%s=rw:%s=ro unionfs %s"; //cdirp, adirp, mdirp - set_echo(TRUE); char mbuf[MAX_LENGTH_DIR_PATH]; @@ -802,15 +823,9 @@ common_commit_copy_to_live_config(GNode *node, boolean suppress_piecewise_copy, system(command); } - //unmount temp (i.e. rm merge) - sprintf(command, format2, mbuf_root); - if (g_debug) { - printf("%s\n",command); - syslog(LOG_DEBUG,"%s\n",command); - fflush(NULL); - } + // unmount the session dir if (test_mode == FALSE) { - system(command); + sys_umount_session(); } if (suppress_piecewise_copy) { @@ -837,14 +852,8 @@ common_commit_copy_to_live_config(GNode *node, boolean suppress_piecewise_copy, piecewise_copy(node, test_mode); } - sprintf(command, format8, cbuf_root,abuf_root,mbuf_root); - if (g_debug) { - printf("%s\n",command); - syslog(LOG_DEBUG,"%s\n",command); - fflush(NULL); - } if (test_mode == FALSE) { - system(command); + sys_mount_session(); } fflush(NULL); @@ -876,10 +885,7 @@ common_commit_clean_temp_config(GNode *root_node, boolean test_mode) char *command; command = malloc(MAX_LENGTH_DIR_PATH); /* XXX must ... remove ... this ... */ - static const char format2[]="sudo umount %s"; //mdirp static const char format5[]="rm -fr '%s'/{.*,*} >&/dev/null ; /bin/true"; /*cdirp*/ - static const char format7[]="sudo mount -t unionfs -o dirs=%s=rw:%s=ro unionfs %s"; //cdirp, adirp, mdirp - char tbuf[MAX_LENGTH_DIR_PATH]; sprintf(tbuf,"%s",get_tmpp()); @@ -892,15 +898,8 @@ common_commit_clean_temp_config(GNode *root_node, boolean test_mode) set_echo(TRUE); - sprintf(command, format2, mbuf); - if (g_debug) { - printf("%s\n",command); - syslog(LOG_DEBUG,"%s\n",command); - fflush(NULL); - } - if (test_mode == FALSE) { - system(command); + sys_umount_session(); } /* @@ -939,14 +938,8 @@ common_commit_clean_temp_config(GNode *root_node, boolean test_mode) system(command); } - sprintf(command, format7, cbuf,abuf,mbuf); - if (g_debug) { - printf("%s\n",command); - syslog(LOG_DEBUG,"%s\n",command); - fflush(NULL); - } if (test_mode == FALSE) { - system(command); + sys_mount_session(); } /* notify other users in config mode */ -- cgit v1.2.3 From 6bb4484271ab7985d249978d433a8449857701ca Mon Sep 17 00:00:00 2001 From: An-Cheng Huang Date: Thu, 26 Aug 2010 19:06:17 -0700 Subject: 0.17.14 --- debian/changelog | 6 ++++++ 1 file changed, 6 insertions(+) (limited to 'debian') diff --git a/debian/changelog b/debian/changelog index 5a245ed..da7e74d 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,9 @@ +vyatta-cfg (0.17.14) unstable; urgency=low + + * fix for bug 5960 + + -- An-Cheng Huang Thu, 26 Aug 2010 19:06:17 -0700 + vyatta-cfg (0.17.13) unstable; urgency=low * mark the root as "changed" after "comment" operation. -- cgit v1.2.3 From 93d2e191cd769036bd50e0d4c4fd7d3688b32566 Mon Sep 17 00:00:00 2001 From: Mohit Mehta Date: Fri, 27 Aug 2010 11:36:19 -0700 Subject: 0.17.15 --- debian/changelog | 12 ++++++++++++ 1 file changed, 12 insertions(+) (limited to 'debian') diff --git a/debian/changelog b/debian/changelog index da7e74d..f2faf39 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,15 @@ +vyatta-cfg (0.17.15) unstable; urgency=low + + [ Michael Larson ] + * allow commit hook commands to write to stdout. + * fix for bug 5982. + + [ Mohit Mehta ] + * commits that don't need to be ported to mendocino from larkspur to + exclude file + + -- Mohit Mehta Fri, 27 Aug 2010 11:36:19 -0700 + vyatta-cfg (0.17.14) unstable; urgency=low * fix for bug 5960 -- cgit v1.2.3 From 55ceb4f86413a213d4bf9406649503f2afba7e3f Mon Sep 17 00:00:00 2001 From: An-Cheng Huang Date: Thu, 2 Sep 2010 16:59:29 -0700 Subject: fix squeeze build issue --- debian/control | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'debian') diff --git a/debian/control b/debian/control index 6ab3335..5cdffdd 100644 --- a/debian/control +++ b/debian/control @@ -3,7 +3,7 @@ Section: contrib/net Priority: extra Maintainer: Vyatta Package Maintainers Build-Depends: debhelper (>= 5), autotools-dev, libglib2.0-dev, - libboost-filesystem1.40-dev, libapt-pkg-dev + libboost-filesystem1.42-dev, libapt-pkg-dev Standards-Version: 3.7.2 Package: vyatta-cfg @@ -49,7 +49,7 @@ Architecture: any Priority: optional Section: libdevel Depends: libvyatta-cfg1 (=${binary:Version}), - libboost-filesystem1.40-dev + libboost-filesystem1.42-dev Description: libvyatta-cfg development package Development header and library files for the Vyatta configuration back-end library. -- cgit v1.2.3 From 3025df97ecfd9371851bf2f47a2c268ef3cfe038 Mon Sep 17 00:00:00 2001 From: An-Cheng Huang Date: Thu, 2 Sep 2010 18:27:53 -0700 Subject: 0.17.16 --- debian/changelog | 6 ++++++ 1 file changed, 6 insertions(+) (limited to 'debian') diff --git a/debian/changelog b/debian/changelog index f2faf39..b418432 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,9 @@ +vyatta-cfg (0.17.16) unstable; urgency=low + + * fix squeeze build issue + + -- An-Cheng Huang Thu, 02 Sep 2010 18:27:53 -0700 + vyatta-cfg (0.17.15) unstable; urgency=low [ Michael Larson ] -- cgit v1.2.3 From 0c12d73485c172b721153be23f958223f349a19f Mon Sep 17 00:00:00 2001 From: An-Cheng Huang Date: Fri, 3 Sep 2010 13:15:41 -0700 Subject: remove lintian warnings --- debian/vyatta-cfg.postinst.in | 2 +- debian/vyatta-cfg.postrm.in | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) (limited to 'debian') diff --git a/debian/vyatta-cfg.postinst.in b/debian/vyatta-cfg.postinst.in index bb747d4..f4bc76e 100644 --- a/debian/vyatta-cfg.postinst.in +++ b/debian/vyatta-cfg.postinst.in @@ -1,4 +1,4 @@ -#!/bin/bash +#!/bin/bash -e prefix=@prefix@ exec_prefix=@exec_prefix@ diff --git a/debian/vyatta-cfg.postrm.in b/debian/vyatta-cfg.postrm.in index c211589..2c33121 100644 --- a/debian/vyatta-cfg.postrm.in +++ b/debian/vyatta-cfg.postrm.in @@ -1,4 +1,4 @@ -#!/bin/bash +#!/bin/bash -e if [ "$1" = "purge" ]; then update-rc.d vyatta-router remove >/dev/null || exit $? -- cgit v1.2.3 From 5a4ac0f6fc5fa0a25663f7834fef4cbd5ba98ecd Mon Sep 17 00:00:00 2001 From: An-Cheng Huang Date: Fri, 3 Sep 2010 13:16:22 -0700 Subject: 0.17.17 --- debian/changelog | 7 +++++++ 1 file changed, 7 insertions(+) (limited to 'debian') diff --git a/debian/changelog b/debian/changelog index b418432..c4ffc60 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,10 @@ +vyatta-cfg (0.17.17) unstable; urgency=low + + * rebuild to link with latest apt + * remove lintian warnings + + -- An-Cheng Huang Fri, 03 Sep 2010 13:16:07 -0700 + vyatta-cfg (0.17.16) unstable; urgency=low * fix squeeze build issue -- cgit v1.2.3