summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--AUTHORS1
-rw-r--r--COPYING340
l---------ChangeLog1
-rw-r--r--Makefile.am21
-rw-r--r--NEWS1
-rw-r--r--README1
-rw-r--r--configure.ac23
-rw-r--r--debian/README8
-rwxr-xr-xdebian/autogen.sh11
-rw-r--r--debian/changelog6
-rw-r--r--debian/compat1
-rw-r--r--debian/control15
-rw-r--r--debian/copyright39
-rw-r--r--debian/docs2
-rw-r--r--debian/linda1
-rw-r--r--debian/lintian2
-rwxr-xr-xdebian/rules106
-rw-r--r--debian/vyatta-config-mgmt.postinst.in9
-rw-r--r--lib/Vyatta/ConfigMgmt.pm161
-rwxr-xr-xscripts/vyatta-commit-push.pl83
-rwxr-xr-xscripts/vyatta-commit-revs.pl59
-rwxr-xr-xscripts/vyatta-config-mgmt.pl165
-rw-r--r--templates-cfg/system/config-mgmt/commit-revisions/node.def12
-rw-r--r--templates-cfg/system/config-mgmt/commit-uri/node.def24
-rw-r--r--templates-cfg/system/config-mgmt/node.def1
-rw-r--r--templates-op/show/system/commit/file/node.def1
-rw-r--r--templates-op/show/system/commit/file/node.tag/node.def4
-rw-r--r--templates-op/show/system/commit/node.def3
28 files changed, 1101 insertions, 0 deletions
diff --git a/AUTHORS b/AUTHORS
new file mode 100644
index 0000000..ee635b2
--- /dev/null
+++ b/AUTHORS
@@ -0,0 +1 @@
+eng@vyatta.com
diff --git a/COPYING b/COPYING
new file mode 100644
index 0000000..0d73906
--- /dev/null
+++ b/COPYING
@@ -0,0 +1,340 @@
+ GNU GENERAL PUBLIC LICENSE
+ Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+ 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users. This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it. (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.) You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+ To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have. You must make sure that they, too, receive or can get the
+source code. And you must show them these terms so they know their
+rights.
+
+ We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+ Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software. If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+ Finally, any free program is threatened constantly by software
+patents. We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary. To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ GNU GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License. The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language. (Hereinafter, translation is included without limitation in
+the term "modification".) Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+ 1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+ 2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+ a) You must cause the modified files to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ b) You must cause any work that you distribute or publish, that in
+ whole or in part contains or is derived from the Program or any
+ part thereof, to be licensed as a whole at no charge to all third
+ parties under the terms of this License.
+
+ c) If the modified program normally reads commands interactively
+ when run, you must cause it, when started running for such
+ interactive use in the most ordinary way, to print or display an
+ announcement including an appropriate copyright notice and a
+ notice that there is no warranty (or else, saying that you provide
+ a warranty) and that users may redistribute the program under
+ these conditions, and telling the user how to view a copy of this
+ License. (Exception: if the Program itself is interactive but
+ does not normally print such an announcement, your work based on
+ the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+ 3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+ a) Accompany it with the complete corresponding machine-readable
+ source code, which must be distributed under the terms of Sections
+ 1 and 2 above on a medium customarily used for software interchange; or,
+
+ b) Accompany it with a written offer, valid for at least three
+ years, to give any third party, for a charge no more than your
+ cost of physically performing source distribution, a complete
+ machine-readable copy of the corresponding source code, to be
+ distributed under the terms of Sections 1 and 2 above on a medium
+ customarily used for software interchange; or,
+
+ c) Accompany it with the information you received as to the offer
+ to distribute corresponding source code. (This alternative is
+ allowed only for noncommercial distribution and only if you
+ received the program in object code or executable form with such
+ an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it. For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable. However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+ 4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License. Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+ 5. You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Program or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+ 6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+ 7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all. For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+ 8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded. In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+ 9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation. If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+ 10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission. For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this. Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+ NO WARRANTY
+
+ 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+ 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+ <one line to give the program's name and a brief idea of what it does.>
+ Copyright (C) <year> <name of author>
+
+ 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 2 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, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+ Gnomovision version 69, Copyright (C) year name of author
+ Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License. Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary. Here is a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+ `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+ <signature of Ty Coon>, 1 April 1989
+ Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs. If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library. If this is what you want to do, use the GNU Library General
+Public License instead of this License. \ No newline at end of file
diff --git a/ChangeLog b/ChangeLog
new file mode 120000
index 0000000..d526672
--- /dev/null
+++ b/ChangeLog
@@ -0,0 +1 @@
+debian/changelog \ No newline at end of file
diff --git a/Makefile.am b/Makefile.am
new file mode 100644
index 0000000..281bb8d
--- /dev/null
+++ b/Makefile.am
@@ -0,0 +1,21 @@
+cfgdir = $(datadir)/vyatta-cfg/templates
+opdir = $(datadir)/vyatta-op/templates
+share_perl5dir = $(datarootdir)/perl5/Vyatta
+bin_sudo_usersdir = $(bindir)/sudo-users
+
+sbin_SCRIPTS = scripts/vyatta-commit-push.pl
+sbin_SCRIPTS += scripts/vyatta-commit-revs.pl
+sbin_SCRIPTS += scripts/vyatta-config-mgmt.pl
+
+bin_sudo_users_SCRIPTS =
+
+share_perl5_DATA = lib/Vyatta/ConfigMgmt.pm
+
+cpiop = find . ! -regex '\(.*~\|.*\.bak\|.*\.swp\|.*\#.*\#\)' -print0 | \
+ cpio -0pd
+
+install-exec-hook:
+ mkdir -p $(DESTDIR)$(cfgdir)
+ cd templates-cfg; $(cpiop) $(DESTDIR)$(cfgdir)
+ mkdir -p $(DESTDIR)$(opdir)
+ cd templates-op; $(cpiop) $(DESTDIR)$(opdir)
diff --git a/NEWS b/NEWS
new file mode 100644
index 0000000..78fdaa6
--- /dev/null
+++ b/NEWS
@@ -0,0 +1 @@
+see http://www.vyatta.com/news/
diff --git a/README b/README
new file mode 100644
index 0000000..9d8f65e
--- /dev/null
+++ b/README
@@ -0,0 +1 @@
+This package has the Vyatta configuration/operational templates and scripts for the config-mgmt system.
diff --git a/configure.ac b/configure.ac
new file mode 100644
index 0000000..ecc4e94
--- /dev/null
+++ b/configure.ac
@@ -0,0 +1,23 @@
+# Process this file with autoconf to produce a configure script.
+AC_PREREQ(2.59)
+
+m4_define([VERSION_ID], [m4_esyscmd([
+ if test -f .version ; then
+ head -n 1 .version | tr -d \\n
+ else
+ echo -n 2.4
+ fi])])
+AC_INIT([vyatta-config-mgmt], VERSION_ID, [vyatta-support@vyatta.com])
+
+test -n "$VYATTA_VERSION" || VYATTA_VERSION=$PACKAGE_VERSION
+
+AC_CONFIG_AUX_DIR([config])
+AM_INIT_AUTOMAKE([gnu no-dist-gzip dist-bzip2 subdir-objects])
+AC_PREFIX_DEFAULT([/opt/vyatta])
+
+AC_CONFIG_FILES(
+ [Makefile]
+ [debian/vyatta-config-mgmt.postinst])
+
+AC_OUTPUT
+
diff --git a/debian/README b/debian/README
new file mode 100644
index 0000000..55896c0
--- /dev/null
+++ b/debian/README
@@ -0,0 +1,8 @@
+The Debian Package vyatta-config-mgmt
+---------------------------------
+
+This package has the Vyatta configuration/operational templates and scripts
+for configuration management.
+
+ -- Stig Thormodsrud <stig@vyatta.com> Tue, 26 Oct 2010
+
diff --git a/debian/autogen.sh b/debian/autogen.sh
new file mode 100755
index 0000000..e8c94af
--- /dev/null
+++ b/debian/autogen.sh
@@ -0,0 +1,11 @@
+#!/bin/sh
+
+
+rm -rf config
+rm -f aclocal.m4 config.guess config.statusconfig.sub configure INSTALL
+
+autoreconf --force --install
+
+rm -f config.sub config.guess
+ln -s /usr/share/misc/config.sub .
+ln -s /usr/share/misc/config.guess .
diff --git a/debian/changelog b/debian/changelog
new file mode 100644
index 0000000..ef7d68d
--- /dev/null
+++ b/debian/changelog
@@ -0,0 +1,6 @@
+vyatta-config-mgmt (0.1) unstable; urgency=low
+
+ * Initial Release.
+
+ -- Stig Thormodsrud <stig@vyatta.com> Tue, 26 Oct 2010 10:54:14 -0700
+
diff --git a/debian/compat b/debian/compat
new file mode 100644
index 0000000..7ed6ff8
--- /dev/null
+++ b/debian/compat
@@ -0,0 +1 @@
+5
diff --git a/debian/control b/debian/control
new file mode 100644
index 0000000..e1206ff
--- /dev/null
+++ b/debian/control
@@ -0,0 +1,15 @@
+Source: vyatta-config-mgmt
+Section: contrib/net
+Priority: extra
+Maintainer: Vyatta Package Maintainers <maintainers@vyatta.com>
+Build-Depends: debhelper (>= 5), autotools-dev
+Standards-Version: 3.7.2
+
+Package: vyatta-config-mgmt
+Architecture: all
+Depends: perl,
+ vyatta-cfg (>= 0.15.33),
+ vyatta-cfg-system,
+ vyatta-op,
+Description: Vyatta commands for config-mgmt
+ Vyatta configuration/operational templates and scripts for the config management system.
diff --git a/debian/copyright b/debian/copyright
new file mode 100644
index 0000000..d634161
--- /dev/null
+++ b/debian/copyright
@@ -0,0 +1,39 @@
+This package was debianized by Stig Thormodsrud <stig@vyatta.com> on
+Tue Oct 26 14:31:39 PDT 2010.
+
+It's original content from the GIT repository
+<http://vyatta.com/git/vyatta-config-mgmt>
+
+Upstream Author:
+
+ <eng@vyatta.com>
+
+Copyright:
+
+ Copyright (C) 2010 Vyatta, Inc.
+ All Rights Reserved.
+
+License:
+
+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 2, 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.
+
+A copy of the GNU General Public License is available as
+`/usr/share/common-licenses/GPL' in the Debian GNU/Linux distribution
+or on the World Wide Web at `http://www.gnu.org/copyleft/gpl.html'.
+You can also obtain it by writing to the Free Software Foundation,
+Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
+MA 02110-1301, USA.
+
+On Debian systems, the complete text of the GNU General
+Public License can be found in `/usr/share/common-licenses/GPL'.
+
+The Debian packaging is (C) 2010, Stig Thormodsrud <stig@vyatta.com> and
+is licensed under the GPL, see above.
diff --git a/debian/docs b/debian/docs
new file mode 100644
index 0000000..50bd824
--- /dev/null
+++ b/debian/docs
@@ -0,0 +1,2 @@
+NEWS
+README
diff --git a/debian/linda b/debian/linda
new file mode 100644
index 0000000..0381d9d
--- /dev/null
+++ b/debian/linda
@@ -0,0 +1 @@
+Tag: file-in-opt
diff --git a/debian/lintian b/debian/lintian
new file mode 100644
index 0000000..00bc703
--- /dev/null
+++ b/debian/lintian
@@ -0,0 +1,2 @@
+vyatta-config-mgmt: file-in-unusual-dir
+vyatta-config-mgmt: dir-or-file-in-opt
diff --git a/debian/rules b/debian/rules
new file mode 100755
index 0000000..3194128
--- /dev/null
+++ b/debian/rules
@@ -0,0 +1,106 @@
+#!/usr/bin/make -f
+# -*- makefile -*-
+# Sample debian/rules that uses debhelper.
+# This file was originally written by Joey Hess and Craig Small.
+# As a special exception, when this file is copied by dh-make into a
+# dh-make output file, you may use that output file without restriction.
+# This special exception was added by Craig Small in version 0.37 of dh-make.
+
+# Uncomment this to turn on verbose mode.
+#export DH_VERBOSE=1
+
+
+# These are used for cross-compiling and for saving the configure script
+# from having to guess our platform (since we know it already)
+DEB_HOST_GNU_TYPE ?= $(shell dpkg-architecture -qDEB_HOST_GNU_TYPE)
+DEB_BUILD_GNU_TYPE ?= $(shell dpkg-architecture -qDEB_BUILD_GNU_TYPE)
+PACKAGE=vyatta-config-mgmt
+PKGDIR=$(CURDIR)/debian/$(PACKAGE)
+
+CFLAGS = -Wall -g
+
+configure = ./configure
+configure += --host=$(DEB_HOST_GNU_TYPE)
+configure += --build=$(DEB_BUILD_GNU_TYPE)
+configure += --prefix=/opt/vyatta
+configure += --mandir=\$${prefix}/share/man
+configure += --infodir=\$${prefix}/share/info
+configure += CFLAGS="$(CFLAGS)"
+configure += LDFLAGS="-Wl,-z,defs"
+
+ifneq (,$(findstring noopt,$(DEB_BUILD_OPTIONS)))
+ CFLAGS += -O0
+else
+ CFLAGS += -O2
+endif
+
+configure: configure.ac Makefile.am
+ chmod +x debian/autogen.sh
+ debian/autogen.sh
+
+config.status: configure
+ dh_testdir
+ rm -f config.cache
+ $(configure)
+
+build: build-stamp
+
+build-stamp: config.status
+ dh_testdir
+ $(MAKE)
+ touch $@
+
+clean: clean-patched
+
+# Clean everything up, including everything auto-generated
+# at build time that needs not to be kept around in the Debian diff
+clean-patched:
+ dh_testdir
+ dh_testroot
+ if test -f Makefile ; then $(MAKE) clean distclean ; fi
+ rm -f build-stamp
+ rm -f config.status config.sub config.guess config.log
+ rm -f aclocal.m4 configure Makefile.in Makefile INSTALL
+ rm -rf config
+ dh_clean
+
+install: build
+ dh_testdir
+ dh_testroot
+ dh_clean -k
+ dh_installdirs
+
+ $(MAKE) DESTDIR=$(PKGDIR) install
+
+ install -D --mode=0644 debian/lintian $(PKGDIR)/usr/share/lintian/overrides/$(PACKAGE)
+ install -D --mode=0644 debian/linda $(PKGDIR)/usr/share/linda/overrides/$(PACKAGE)
+
+# Build architecture-independent files here.
+binary-indep: build install
+ rm -f debian/files
+ dh_testdir
+ dh_testroot
+ dh_installchangelogs ChangeLog
+ dh_installdocs
+ dh_install
+ dh_installdebconf
+ dh_link
+ dh_strip
+ dh_compress
+ dh_fixperms
+ dh_installdeb
+ if [ -f "../.VYATTA_DEV_BUILD" ]; then \
+ dh_gencontrol -- -v999.dev; \
+ else \
+ dh_gencontrol; \
+ fi
+ dh_md5sums
+ dh_builddeb
+
+# Build architecture-dependent files here.
+binary-arch: build install
+# This is an architecture independent package
+# so; we have nothing to do by default.
+
+binary: binary-indep binary-arch
+.PHONY: build clean binary-indep binary-arch binary install
diff --git a/debian/vyatta-config-mgmt.postinst.in b/debian/vyatta-config-mgmt.postinst.in
new file mode 100644
index 0000000..1dbf981
--- /dev/null
+++ b/debian/vyatta-config-mgmt.postinst.in
@@ -0,0 +1,9 @@
+#!/bin/bash
+
+prefix=@prefix@
+exec_prefix=@exec_prefix@
+sysconfdir=@sysconfdir@
+bindir=@bindir@
+sbindir=@sbindir@
+
+
diff --git a/lib/Vyatta/ConfigMgmt.pm b/lib/Vyatta/ConfigMgmt.pm
new file mode 100644
index 0000000..85d9c72
--- /dev/null
+++ b/lib/Vyatta/ConfigMgmt.pm
@@ -0,0 +1,161 @@
+#
+# Module: ConfigMgmt.pm
+#
+# **** License ****
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License version 2 as
+# published by the Free Software Foundation.
+#
+# 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.
+#
+# This code was originally developed by Vyatta, Inc.
+# Portions created by Vyatta are Copyright (C) 2007-2009 Vyatta, Inc.
+# All Rights Reserved.
+#
+# Author: Stig Thormodsrud
+# Date: October 2010
+# Description: Common config-mgmt functions
+#
+# **** End License ****
+#
+package Vyatta::ConfigMgmt;
+
+use strict;
+use warnings;
+
+our @EXPORT = qw(cm_commit_add_log cm_commit_get_log cm_get_archive_dir
+ cm_get_lr_conf_file cm_get_lr_state_file
+ cm_get_commit_hook_dir cm_write_file cm_read_file
+ cm_commit_get_file);
+use base qw(Exporter);
+
+use Vyatta::Config;
+use Vyatta::Interface;
+use Vyatta::Misc;
+use POSIX;
+use IO::Zlib;
+
+
+my $commit_hook_dir = '/etc/commit/';
+my $config_dir = '/opt/vyatta/etc/config';
+my $archive_dir = "$config_dir/archive";
+my $config_file = "$config_dir/config.boot";
+my $lr_conf_file = "$archive_dir/lr.conf";
+my $lr_state_file = "$archive_dir/lr.state";
+my $commit_log_file = "$archive_dir/commits";
+
+
+sub cm_get_commit_hook_dir {
+ return $commit_hook_dir;
+}
+
+sub cm_get_archive_dir {
+ return $archive_dir;
+}
+
+sub cm_get_lr_conf_file {
+ return $lr_conf_file;
+}
+
+sub cm_get_lr_state_file {
+ return $lr_state_file;
+}
+
+sub cm_read_file {
+ my ($file) = @_;
+ my @lines;
+ if ( -e $file) {
+ open(my $FILE, '<', $file) or die "Error: read $!";
+ @lines = <$FILE>;
+ close($FILE);
+ chomp @lines;
+ }
+ return @lines;
+}
+
+sub cm_write_file {
+ my ($file, $data) = @_;
+
+ open(my $fh, '>', $file) || die "Couldn't open $file - $!";
+ print $fh $data;
+ close $fh;
+ return 1;
+}
+
+sub cm_get_max_revs {
+ my $config = new Vyatta::Config;
+ $config->setLevel('system config-mgmt');
+ my $revs = $config->returnOrigValue('commit-revisions');
+ return $revs;
+}
+
+sub cm_commit_add_log {
+ my ($user, $via, $comment) = @_;
+
+ my $time = time();
+ if ($comment =~ /\|/) {
+ print "before [$comment]\n";
+ $comment =~ s/\|/\%\%/g;
+ print "after [$comment]\n";
+ }
+ my $new_line = "|$time|$user|$via|$comment|";
+ my @lines = cm_read_file($commit_log_file);
+
+ my $revs = cm_get_max_revs();
+ unshift(@lines, $new_line); # head push()
+ if (defined $revs and scalar(@lines) > $revs) {
+ $#lines = $revs-1;
+ }
+ my $log = join("\n", @lines);
+ cm_write_file($commit_log_file, $log);
+}
+
+sub cm_commit_get_log {
+
+ my @lines = cm_read_file($commit_log_file);
+
+ my @commit_log = ();
+ my $count = 0;
+ foreach my $line (@lines) {
+ if ($line !~ /^\|(.*)\|$/) {
+ print "Invalid log format [$line]\n";
+ next;
+ }
+ $line = $1;
+ my ($time, $user, $via, $comment) = split(/\|/, $line);
+ my $time_str = strftime("%Y-%m-%d %H:%M:%S", localtime($time));
+ $comment =~ s/\%\%/\|/g;
+ my $new_line = sprintf("%-2s %s by %s via %s\n",
+ $count, $time_str, $user, $via);
+ push @commit_log, $new_line;
+ if (defined $comment and $comment ne '' and $comment ne 'commit') {
+ push @commit_log, " $comment\n"
+ }
+ $count++;
+ }
+ return @commit_log;
+}
+
+sub cm_commit_get_file {
+ my ($revnum) = @_;
+
+ my $max_revs = cm_get_max_revs();
+ if ($revnum > $max_revs) {
+ print "Error: Invalid config revision number\n";
+ exit 1;
+ }
+
+ my $filename = $archive_dir . "/config.boot." . $revnum . ".gz";
+ die "File [$filename] not found." if ! -e $filename;
+
+ my $fh = new IO::Zlib;
+ $fh->open($filename, "rb") or die "Error: read $!";
+ my @lines = <$fh>;
+ $fh->close;
+ return join('', @lines);
+}
+
+1;
diff --git a/scripts/vyatta-commit-push.pl b/scripts/vyatta-commit-push.pl
new file mode 100755
index 0000000..ab63509
--- /dev/null
+++ b/scripts/vyatta-commit-push.pl
@@ -0,0 +1,83 @@
+#!/usr/bin/perl
+#
+# **** License ****
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License version 2 as
+# published by the Free Software Foundation.
+#
+# 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.
+#
+# A copy of the GNU General Public License is available as
+# `/usr/share/common-licenses/GPL' in the Debian GNU/Linux distribution
+# or on the World Wide Web at `http://www.gnu.org/copyleft/gpl.html'.
+# You can also obtain it by writing to the Free Software Foundation,
+# Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
+# MA 02110-1301, USA.
+#
+# This code was originally developed by Vyatta, Inc.
+# Portions created by Vyatta are Copyright (C) 2010 Vyatta, Inc.
+# All Rights Reserved.
+#
+# Author: Stig Thormodsrud
+# Date: October 2010
+# Description: Script to push cofig.boot to one or more URIs
+#
+# **** End License ****
+#
+
+use strict;
+use warnings;
+use lib '/opt/vyatta/share/perl5/';
+
+use Vyatta::Config;
+use POSIX;
+use File::Basename;
+use URI;
+
+
+my $debug = 0;
+
+my $config = new Vyatta::Config;
+$config->setLevel('system config-mgmt');
+my @uris = $config->returnOrigValues('commit-uri');
+
+if (scalar(@uris) < 1) {
+ print "No URI's configured\n";
+ exit 0;
+}
+
+my $upload_file = '/opt/vyatta/etc/config/config.boot';
+
+my $timestamp = strftime("_%Y%m%d_%H%M%S", localtime);
+my $same_file = basename($upload_file) . $timestamp;
+
+print "Archiving config...\n";
+foreach my $uri (@uris) {
+ my $u = URI->new($uri);
+ my $scheme = $u->scheme();
+ my $auth = $u->authority();
+ my $path = $u->path();
+ my ($host, $remote) = ('', '');
+ if (defined $auth and $auth =~ /.*\@(.*)/) {
+ $host = $1;
+ } else {
+ $host = $auth if defined $auth;
+ }
+ $remote .= "$scheme://$host";
+ $remote .= "$path" if defined $path;
+
+ print " $remote ";
+ my $cmd = "curl -s -T $upload_file $uri/$same_file";
+ print "cmd [$cmd]\n" if $debug;
+ my $rc = system($cmd);
+ if ($rc eq 0) {
+ print " OK\n";
+ } else {
+ print " failed\n";
+ }
+}
+
+exit 0;
diff --git a/scripts/vyatta-commit-revs.pl b/scripts/vyatta-commit-revs.pl
new file mode 100755
index 0000000..7ae34ad
--- /dev/null
+++ b/scripts/vyatta-commit-revs.pl
@@ -0,0 +1,59 @@
+#!/usr/bin/perl
+#
+# **** License ****
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License version 2 as
+# published by the Free Software Foundation.
+#
+# 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.
+#
+# A copy of the GNU General Public License is available as
+# `/usr/share/common-licenses/GPL' in the Debian GNU/Linux distribution
+# or on the World Wide Web at `http://www.gnu.org/copyleft/gpl.html'.
+# You can also obtain it by writing to the Free Software Foundation,
+# Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
+# MA 02110-1301, USA.
+#
+# This code was originally developed by Vyatta, Inc.
+# Portions created by Vyatta are Copyright (C) 2010 Vyatta, Inc.
+# All Rights Reserved.
+#
+# Author: Stig Thormodsrud
+# Date: October 2010
+# Description: Script to create config.boot revision backups.
+#
+# **** End License ****
+#
+
+use strict;
+use warnings;
+use lib '/opt/vyatta/share/perl5/';
+
+use Vyatta::Config;
+use Vyatta::ConfigMgmt;
+
+#
+# main
+#
+
+my $archive_dir = cm_get_archive_dir();
+my $lr_state_file = cm_get_lr_state_file();
+my $lr_conf_file = cm_get_lr_conf_file();
+
+if (! -d $archive_dir) {
+ system("sudo mkdir $archive_dir");
+}
+
+my $tmp_config_file = "/tmp/config.boot.$$";
+system("/opt/vyatta/sbin/vyatta-save-config.pl $tmp_config_file > /dev/null");
+system("sudo mv $tmp_config_file $archive_dir/config.boot");
+system("sudo logrotate -f -s $lr_state_file $lr_conf_file");
+my ($user) = getpwuid($<);
+cm_commit_add_log($user, 'cli', $ARGV[0]);
+
+exit 0;
+
+# end of file
diff --git a/scripts/vyatta-config-mgmt.pl b/scripts/vyatta-config-mgmt.pl
new file mode 100755
index 0000000..e3f01ec
--- /dev/null
+++ b/scripts/vyatta-config-mgmt.pl
@@ -0,0 +1,165 @@
+#!/usr/bin/perl
+#
+# **** License ****
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License version 2 as
+# published by the Free Software Foundation.
+#
+# 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.
+#
+# A copy of the GNU General Public License is available as
+# `/usr/share/common-licenses/GPL' in the Debian GNU/Linux distribution
+# or on the World Wide Web at `http://www.gnu.org/copyleft/gpl.html'.
+# You can also obtain it by writing to the Free Software Foundation,
+# Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
+# MA 02110-1301, USA.
+#
+# This code was originally developed by Vyatta, Inc.
+# Portions created by Vyatta are Copyright (C) 2010 Vyatta, Inc.
+# All Rights Reserved.
+#
+# Author: Stig Thormodsrud
+# Date: October 2010
+# Description: Script for config management features.
+#
+# **** End License ****
+#
+
+use strict;
+use warnings;
+use lib '/opt/vyatta/share/perl5/';
+
+use Vyatta::Config;
+use Vyatta::ConfigMgmt;
+use Getopt::Long;
+use File::Basename;
+use URI;
+
+my $commit_uri_script = '/opt/vyatta/sbin/vyatta-commit-push.pl';
+my $commit_revs_script = '/opt/vyatta/sbin/vyatta-commit-revs.pl';
+
+my $commit_hook_dir = cm_get_commit_hook_dir();
+my $archive_dir = cm_get_archive_dir();
+my $config_file = "$archive_dir/config.boot";
+my $lr_conf_file = cm_get_lr_conf_file();
+
+my $debug = 0;
+
+sub get_link {
+ my ($path) = @_;
+
+ my $link = $commit_hook_dir . basename($path);
+ return $link;
+}
+
+
+#
+# main
+#
+my ($action, $uri, $revs, $revnum);
+
+GetOptions("action=s" => \$action,
+ "uri=s" => \$uri,
+ "revs=i" => \$revs,
+ "revnum=i" => \$revnum,
+);
+
+die "Error: no action" if ! defined $action;
+
+my ($cmd, $rc) = ('', 1);
+
+if ($action eq 'add-uri') {
+ print "add-uri\n" if $debug;
+ my $config = new Vyatta::Config;
+ $config->setLevel('system config-mgmt');
+ my @uris = $config->returnValues('commit-uri');
+ my $link = get_link($commit_uri_script);
+ if (scalar(@uris) >= 1 and ! -e $link) {
+ print "add link [$link]\n" if $debug;
+ $rc = system("ln -s $commit_uri_script $link");
+ exit $rc;
+ }
+ exit 0;
+}
+
+if ($action eq 'del-uri') {
+ print "del-uri\n" if $debug;
+ my $config = new Vyatta::Config;
+ $config->setLevel('system config-mgmt');
+ my @uris = $config->returnValues('commit-uri');
+ if (scalar(@uris) <= 0) {
+ my $link = get_link($commit_uri_script);
+ print "remove link [$link]\n" if $debug;
+ $rc = system("rm -f $link");
+ exit $rc;
+ }
+ exit 0;
+}
+
+if ($action eq 'valid-uri') {
+ die "Error: no uri" if ! defined $uri;
+ print "valid-uri [$uri]\n" if $debug;
+ my $u = URI->new($uri);
+ exit 1 if ! defined $u;
+ my $scheme = $u->scheme();
+ my $auth = $u->authority();
+ my $path = $u->path();
+
+ exit 1 if ! defined $scheme or ! defined $path;
+ if ($scheme eq 'tftp') {
+ } elsif ($scheme eq 'ftp') {
+ } elsif ($scheme eq 'scp') {
+ } else {
+ print "Unsupported URI scheme\n";
+ exit 1;
+ }
+ exit 0;
+}
+
+if ($action eq 'update-revs') {
+ die "Error: no revs" if ! defined $revs;
+ print "update-revs [$revs]\n" if $debug;
+ my $link = get_link($commit_revs_script);
+ if ($revs == 0) {
+ print "remove link [$link]\n" if $debug;
+ $rc = system("rm -f $link");
+ } else {
+ if (! -e $link) {
+ print "add link [$link]\n" if $debug;
+ $rc = system("ln -s $commit_revs_script $link");
+ }
+ if (! -e $archive_dir) {
+ system("sudo mkdir $archive_dir");
+ }
+ my $lr_conf = "$config_file {\n";
+ $lr_conf .= "\t rotate $revs\n";
+ $lr_conf .= "\t compress \n";
+ $lr_conf .= "}\n";
+ cm_write_file($lr_conf_file, $lr_conf);
+ exit 0;
+ }
+ exit 0;
+}
+
+if ($action eq 'show-commit-log') {
+ print "show-commit-log\n" if $debug;
+ my @log = cm_commit_get_log();
+ foreach my $line (@log) {
+ print $line;
+ }
+ exit 0;
+}
+
+if ($action eq 'show-commit-file') {
+ die "Error: no revnum" if ! defined $revnum;
+ print "show-commit-file [$revnum]\n" if $debug;
+ my $file = cm_commit_get_file($revnum);
+ print $file;
+}
+
+exit $rc;
+
+# end of file
diff --git a/templates-cfg/system/config-mgmt/commit-revisions/node.def b/templates-cfg/system/config-mgmt/commit-revisions/node.def
new file mode 100644
index 0000000..e5da66a
--- /dev/null
+++ b/templates-cfg/system/config-mgmt/commit-revisions/node.def
@@ -0,0 +1,12 @@
+type: u32
+priority: 400
+help: Commit revisions
+
+update: sudo ${vyatta_sbindir}/vyatta-config-mgmt.pl \
+ --action=update-revs \
+ --revs="$VAR(@)"
+
+val_help: u32:0-65535 ; Number of config backups to keep
+
+syntax:expression: $VAR(@) >= 0 && $VAR(@) <= 65535 ; \
+ "Commit revisions must be in range 0 to 65535"
diff --git a/templates-cfg/system/config-mgmt/commit-uri/node.def b/templates-cfg/system/config-mgmt/commit-uri/node.def
new file mode 100644
index 0000000..7b483f9
--- /dev/null
+++ b/templates-cfg/system/config-mgmt/commit-uri/node.def
@@ -0,0 +1,24 @@
+multi:
+priority: 400
+type: txt
+help: Commit URI
+
+syntax:expression: exec "/opt/vyatta/sbin/vyatta-config-mgmt.pl \
+ --action=valid-uri \
+ --uri=\"$VAR(@)\" "; "Invalid URI"
+
+create: if [ "$COMMIT_SIBLING_POSITION" = "LAST" ] || \
+ [ "$COMMIT_SIBLING_POSITION" = "FIRSTLAST" ] ; then
+ sudo ${vyatta_sbindir}/vyatta-config-mgmt.pl --action=add-uri
+ fi;
+
+delete: if [ "$COMMIT_SIBLING_POSITION" = "LAST" ] || \
+ [ "$COMMIT_SIBLING_POSITION" = "FIRSTLAST" ] ; then
+ sudo ${vyatta_sbindir}/vyatta-config-mgmt.pl --action=del-uri
+ fi;
+
+val_help: <uri> ; Uniform Resource Identifier
+comp_help:
+ "scp://<user>:<passwd>@<host>/<dir>"
+ "ftp://<user>:<passwd>@<host>/<dir>"
+ "tftp://<host>/<dir>" \ No newline at end of file
diff --git a/templates-cfg/system/config-mgmt/node.def b/templates-cfg/system/config-mgmt/node.def
new file mode 100644
index 0000000..e260c27
--- /dev/null
+++ b/templates-cfg/system/config-mgmt/node.def
@@ -0,0 +1 @@
+help: Configuration management settings
diff --git a/templates-op/show/system/commit/file/node.def b/templates-op/show/system/commit/file/node.def
new file mode 100644
index 0000000..d0622af
--- /dev/null
+++ b/templates-op/show/system/commit/file/node.def
@@ -0,0 +1 @@
+help: show commit revision file
diff --git a/templates-op/show/system/commit/file/node.tag/node.def b/templates-op/show/system/commit/file/node.tag/node.def
new file mode 100644
index 0000000..52fd065
--- /dev/null
+++ b/templates-op/show/system/commit/file/node.tag/node.def
@@ -0,0 +1,4 @@
+help: show commit revision file
+run: ${vyatta_sbindir}/vyatta-config-mgmt.pl \
+ --action=show-commit-file \
+ --revnum="$5"
diff --git a/templates-op/show/system/commit/node.def b/templates-op/show/system/commit/node.def
new file mode 100644
index 0000000..4646d29
--- /dev/null
+++ b/templates-op/show/system/commit/node.def
@@ -0,0 +1,3 @@
+help: Show commit revisions log
+run: ${vyatta_sbindir}/vyatta-config-mgmt.pl --action=show-commit-log
+