Added ssh-keysync-adddomain + manpage, added folding
authorMaximilian Wilhelm <max@rfc2324.org>
Sun, 11 Sep 2005 01:10:53 +0000 (01:10 +0000)
committerMaximilian Wilhelm <max@rfc2324.org>
Sun, 11 Sep 2005 01:10:53 +0000 (01:10 +0000)
debian/changelog
debian/rules
files/server/RBM/sshKeySync/Merge.pm
files/server/RBM/sshKeySync/Merge/Domain.pm
files/server/man1/ssh-keysync-merge.1
files/server/man1/upgrade_sshkeysync.1
files/server/ssh-keysync-adddomain [new file with mode: 0755]
files/server/ssh-keysync-server.conf
files/server/upgrade_sshkeysync

index e29353f..d645fc8 100644 (file)
@@ -1,14 +1,14 @@
 rbm-ssh-keysync (0.4) stable; urgency=high
 
-  * Initial official version.
+  * Initial official release.
   * Made this software configurable to allow public distribution.
-  * Rewrote server part to allow handling of multiple domains.
+  * Rewrote ssh-keysync-merge to allow handling of multiple domains and added
+    DNS check for every host (move files to ATTIC if no DNS entry exists.)
+  * Added ssh-keysync-adddomain to the server part.
   * Added automagic upgrade script.
-  * Added DNS check for every host (move files to ATTIC if no DNS entry
-    exists.)
-  * Added manpages.
+  * Added manpages for all binaries.
 
- -- Maximilan Wilhelm <max@rfc2324.org>  Sun,  4 Sep 2005 01:28:00 +0200
+ -- Maximilan Wilhelm <max@rfc2324.org>  Sun, 11 Sep 2005 03:08:53 +0200
 
 rbm-ssh-keysync (0.3-7) stable; urgency=high
 
index 02bbf4a..3d0bbb5 100755 (executable)
@@ -62,10 +62,12 @@ install: build
 
        ## ssh-keysync-client ##
        mkdir -p $(CURDIR)/debian/rbm-ssh-keysync-client/usr/sbin
+       mkdir -p $(CURDIR)/debian/rbm-ssh-keysync-client/usr/share/man
        mkdir -p $(CURDIR)/debian/rbm-ssh-keysync-client/etc/rbm
        
        install -m 750 -o root -g root files/client/ssh-keysync $(CURDIR)/debian/rbm-ssh-keysync-client/usr/sbin
        install -m 640 -o root -g root files/client/ssh-keysync-client.conf $(CURDIR)/debian/rbm-ssh-keysync-client/etc/rbm
+       cp -R $(CURDIR)/files/client/man1/ $(CURDIR)/debian/rbm-ssh-keysync-client/usr/share/man/
        find $(CURDIR)/debian/rbm-ssh-keysync-client/ -name CVS -type d | xargs rm -rf
 
 
@@ -74,7 +76,7 @@ install: build
        install -m 644 $(CURDIR)/files/server/ssh-keysync-server.conf $(CURDIR)/debian/rbm-ssh-keysync-server/etc/rbm
 
        mkdir -p $(CURDIR)/debian/rbm-ssh-keysync-server/usr/bin
-       install -m 755 -o root -g root $(CURDIR)/files/server/{upgrade_sshkeysync,ssh-keysync-merge} $(CURDIR)/debian/rbm-ssh-keysync-server/usr/bin
+       install -m 755 -o root -g root $(CURDIR)/files/server/{upgrade_sshkeysync,ssh-keysync-{adddomain,merge}} $(CURDIR)/debian/rbm-ssh-keysync-server/usr/bin
 
        mkdir -p $(CURDIR)/debian/rbm-ssh-keysync-server/usr/share/perl5/
        cp -R $(CURDIR)/files/server/RBM $(CURDIR)/debian/rbm-ssh-keysync-server/usr/share/perl5/
index 4f7ada1..d7b376b 100644 (file)
@@ -36,9 +36,8 @@ use RBM::sshKeySync::Merge::Domain;
 my $resolver = Net::DNS::Resolver->new;
 
 
-
 ##
-# Little big of magic
+# _options( @args ): Little big of magic #{{{
 sub _options
 {
        my %args = @_;
@@ -53,10 +52,10 @@ sub _options
        
        return \%args;
 }
-
+#}}}
 
 ##
-# Create new instance
+# new(): Create new instance # {{{
 sub new {
        my $class = shift;
 
@@ -85,10 +84,10 @@ sub new {
                fh_common_of => undef
        }, $class;
 }
-
+# }}}
 
 ##
-# Check some things
+# init(): verify the configuration and initialize data strcuture # {{{
 sub init() {
        my $args = shift;
        my $configfile = $args->{configfile};
@@ -133,11 +132,10 @@ sub init() {
 
        return ( $config, $domains );
 }
-
+# }}}
 
 ##
-# Parse the config file (using Config::IniFiles) and return a reference
-# to the config-hash and the domains-hash.
+# loadConfig( $configfile, \%args ): Parse $configfile (using Config::IniFiles) and return a reference %config and %domains. # {{{
 sub loadConfig {
        my $configfile = shift;
        my $args = shift;
@@ -215,12 +213,10 @@ sub loadConfig {
 
        return (\%config, \%domains);
 }
-
+# }}}
 
 ##
-# Merge all keys within the given domain 
-#
-# merge_domain <domain>
+# merge_domain( $domain ): Merge all keys within $domain. # {{{
 sub merge_domain {
        my $self = shift;
 
@@ -363,10 +359,10 @@ sub merge_domain {
        print "  * finished.\n" if ( $config->{verbose} );
        close ( SEPARATE_OF );
 }
-
+# }}}
 
 ##
-# Loop through all doamins an merge them
+# merge_all_domains(): Loop through all domains an merge them. # {{{
 sub merge_all_domains() {
        my $self = shift;
        my $config = $self->{config};
@@ -391,10 +387,10 @@ sub merge_all_domains() {
 
        close( $self->{fh_common_of} );
 }
-
+# }}}
 
 ##
-# Generate and return a well formated line for key to fit to ssh_known_hosts
+# gen_hostpart( $domain, $hostname, \@alt_domain ): Generate and return a well formated ssh_known_hosts line # {{{
 #
 # Usage: gen_entry( domain, hostname, reference to the alt_domains_array )
 # Format: hostname,hostname.domain,hostname.alt_domain1...hostname.alt_domainN,IP1,IPn key
@@ -409,11 +405,11 @@ sub gen_hostpart {
 
        return $hostpart;
 }
-
+# }}}
 
 ##
-# Return a comma separeted list of ip adress(es) for this host, formated to
-# be added to the $hostpart string in gen_entry.
+# get_ip_string( $host, \%config ): Return a comma separeted list of ip adress(es) for this host. #{{{
+# (formated to be added to the $hostpart string in gen_entry())
 #
 # Format: ",IP1,IP2"
 sub get_ip_string {
@@ -440,9 +436,10 @@ sub get_ip_string {
 
        return $ipstring;
 }
+#}}}
 
 ##
-# Move the given keyfile into the domains ATTIC dir
+# move_key_to_ATTIC( $self, $domain, $keyfile): Move $keyfile into the domains ATTIC dir #{{{
 sub move_key_to_ATTIC {
        my $self = shift;
        my $domain = shift;
@@ -476,6 +473,11 @@ sub move_key_to_ATTIC {
        rename $keyfile, "$self->{config}->{base_dir}/$domain/ATTIC/" . basename( $keyfile )
                or print STDERR "Cannot move " . basename( $keyfile ) . " from domain $domain into the ATTIC...\n";
 }
+#}}}
 
+##
 # return true on startup
 1;
+
+##
+# vim:foldmethod=marker:
index 76f7217..b228261 100644 (file)
@@ -6,7 +6,7 @@
 # of the 'Rechnerbetrieb Mathematik' (Computersupportcenter at the
 # institute of mathematics) at the Univiersity of Paderborn.
 #
-#   Copyright (C) 2005, Maximilian Wilhelm <max@barbarossa.name>
+#   Copyright (C) 2005, Maximilian Wilhelm <max@rfc2324.org>
 # 
 #   RBM::sshKeySync::Merge::Domain is free software; you can redistribute it
 #   and/or modify it under the terms of the GNU General Public License as 
@@ -22,7 +22,7 @@ package RBM::sshKeySync::Merge::Domain;
 use strict;
 
 ##
-# Create no domain object
+# new(): Create no domain object #{{{
 sub new {
        my $this = shift;
        my $class = ref($this) || $this;
@@ -35,38 +35,41 @@ sub new {
                common_of => $common_of
                }, $class;
 }
-
+#}}}
 
 ##
-# Get the array with the alternativ domains
+# get_alt_domains(): Get the array with the alternativ domains (reference) #{{{
 sub get_alt_domains{
        my $self = shift;
        my $ref_alt_dom = $self->{alt_domains};
        
        return $ref_alt_dom;
 }
-
+#}}}
 
 ##
-# Should the output be put into a separate outfile?
+# get_separate_outfile() Should the output be put into a separate outfile? #{{{
 sub get_separate_outfile {
        my $self = shift;
        my $s_of = $self->{separate_of};
 
        return $s_of;
 }
-
+#}}}
 
 ##
-# Should the output be put into a separate outfile?
+# get_common_outfile(): Should the output be put into a separate outfile? #{{{
 sub get_common_outfile {
        my $self = shift;
        my $c_of = $self->{common_of};
 
        return $c_of;
 }
-
+# }}}
 
 ##
 # Return true on startup
 1;
+
+##
+# vim:foldmethod=marker:
index 5536354..7e6277f 100644 (file)
@@ -1,4 +1,4 @@
-.TH ssh-keysync-merge 1 "2005-09-07" "1.0" 
+.TH ssh-keysync-merge 1 "2005-09-11" "1.0" "ssh-keysync utils"
 
 .\"""
 .\" Short term description
@@ -6,14 +6,17 @@
 ssh-keysync-merge \- Merge ssh host pub keys to a ssh_known_hosts file
 
 .\"""
-.\" The general command line
+.\" SYNOPSIS: The general command line #{{{
 .SH SYNOPSIS
 .B ssh-keysync-merge
 .RB [\| \-c \||\| \-config
 .IR configfile \|]
 .RB [\| \-d \||\| \-debug \|]
 .RB [\| \-q \||\| \-quiet \|]
+.\" #}}}
 
+.\"""
+.\" DESCROPTION: Program description #{{{
 .SH DESCRIPTION
 .B ssh-keysync-merge
 is a tool to merge the ssh public keys of your hosts to one ssh_known_hosts
@@ -33,12 +36,11 @@ If you're running an automated installation system like Thomas Langes
 you can integrate an
 .BR automagic-save-ssh-pub-keys-hook
 into the installation, to help your ssh_known_hosts file to be up to date.
-
+.\" #}}}
 
 .\"""
-.\" Programm options
+.\" OPTIONS: Command line parameters in detail #{{{
 .SH OPTIONS
-
 .TP
 .BI \-c \ configfile
 Specify an alternae configuration file to use.
@@ -60,23 +62,50 @@ Only errors will be print out in quiet mode.
 This is usefull when running
 .BR ssh-keysync-merge
 from cron.
+-\" #}}}
 
 .\"""
-.\" Files used by this utility
+.\" FILES: Files used by this utility #{{{
 .SH FILES
 .TP
 .I /etc/rbm/ssh-keysync-server.conf
 Configuration file used by ssh-keysync-merge
+
 .TP
 .I /var/cache/ssh-keysync
 The domains and ssh public key storage hierachy
 
+.TP
+.I /var/cache/ssh-keysync/pub
+The public directory of
+.B ssh-keysync
+to be shared by a webserver.
+
+.TP
+.I /var/cache/ssh-keysync/ssh_known_hosts
+The
+.I common outfile
+of
+.BR ssh-keysync-merge .
+
+.TP
+.I /var/cache/ssh-keysync/<domain>/ssh_known_hosts
+The
+.I separate outfile
+for
+.I domain
+of
+.BR ssh-keysync-merge .
+.\" #}}}
+
 .\"""
-.\" You may want to have a look at this:
+.\" SEE ALSO #{{{
 .SH "SEE ALSO"
 .BR ssh-keysync (1)
-
+.\" #}}}
 
 .\" The perl monger...
 .SH AUTHOR
 Written by Maximilian Wilhelm <max@rfc2324.org>
+
+.\" vim:foldmethod=marker:
index 8e3c679..471bcd1 100644 (file)
@@ -1,4 +1,4 @@
-.TH upgrade_sshkeysync 1 "2005-09-08" "1.0" 
+.TH upgrade_sshkeysync 1 "2005-09-08" "1.0" "ssh-keysync utils"
 
 .\"""
 .\" Short term description
@@ -6,7 +6,7 @@
 upgrade_sshkeysync \- Upgrade ssh-keysync config/file system structure
 
 .\"""
-.\" The general command line
+.\" SYNOPSIS: The general command line #{{{
 .SH SYNOPSIS
 .B upgrade_sshkeysync
 
@@ -17,8 +17,10 @@ is used to upgrade the configuration and file system infrastructure under
 from a
 .BR ssh-keysync
 version.
+.\" #}}}
 
-.\" Files used by this utility
+.\"""
+.\" FILES: Files used by this utility #{{{
 .SH FILES
 .TP
 .I /etc/rbm/ssh-keysync-server.conf
@@ -28,13 +30,17 @@ Configuration file upgraded by
 .TP
 .I /var/cache/ssh-keysync
 The domains and ssh public key storage hierachy to be upgraded.
+.\" #}}}
 
 .\"""
-.\" You may want to have a look at this:
+.\" SEE ALSO #{{{
 .SH "SEE ALSO"
 .BR ssh-keysync (1),
 .BR ssh-keysync-merge (1)
+.\" #}}}
 
 .\" The perl monger...
 .SH AUTHOR
 Written by Maximilian Wilhelm <max@rfc2324.org>
+
+.\" vim:foldmethod=marker:
diff --git a/files/server/ssh-keysync-adddomain b/files/server/ssh-keysync-adddomain
new file mode 100755 (executable)
index 0000000..48dabb1
--- /dev/null
@@ -0,0 +1,183 @@
+#!/bin/sh
+#
+# ssh-keysync-adddomain
+#
+#  This is part of the ssh-keysync-server package.
+#  It is used to create a new domain within the ssh-keysync system,
+#  a system for collecting and merging ssh public keys to ssh_known_hosts
+#  files and distribute them to your clients.
+#  
+#  This script will create an configuration entry for the new domain
+#  and a doamin directory under /var/cache/ssh-keysync or a different
+#  bsae_dir defined in /etc/rbm/ssh-keysync-server.conf
+#
+#
+#  Maximlian Wilhelm <max@rfc2324.org>
+#   -- Sat, 10 Sep 2005 22:29:33 +0200
+#
+
+##
+# Some varialbes # {{{
+#
+# Configuration file
+CONFIGFILE="/etc/rbm/ssh-keysync-server.conf"
+
+# Default base_dir
+DEF_BASE_DIR="/var/cache/ssh-keysync"
+
+# The domain to add
+DOMAIN=""
+
+# Alternative domains
+ALT_DOMAINS=""
+
+# By default, don't use common outfile
+C_OF="no"
+
+# By default use a separate outfile
+S_OF="yes"
+
+# No debugging by default
+DEBUG=""
+
+# }}}
+
+##
+# usage(): Print a nice little usage text      # {{{
+function usage() {
+cat << EOUSAGE >&2
+Usage: $0 [-sof | -nsof] [-cof | -nsof] my.dom.ain [myalt.dom.ain [...]]
+
+  -sof   This domain should be merged into a separate outfile. (default)
+  -nsof  This domain snould *not* be merged into a separate outfile.
+
+  -cof   This domain should be merged into the common outfile.
+  -ncof  This domain should *not* be merged into the common outfile. (default)
+
+  myalt.dom.ain(s) may be specified if your hosts are known in
+  several *equal* domains, such as "sourceforge.net" and "sf.net".
+EOUSAGE
+}
+# }}}
+
+##
+# handle_domain(): Handle given domain the right way   # {{{
+function handle_domain() {
+       if [ "$#" == 1 ]; then
+               if [ -z "${DOMAIN}" ]; then
+                       DOMAIN="$1"
+               else
+                       ALT_DOMAINS="${ALT_DOMAINS},$1"
+               fi
+       else
+               echo "Error: $0:handle_domain must be called with exactly one argument." >&2
+               exit 1
+       fi
+}
+# }}}
+
+##
+# Check / parse command line parameters                # {{{
+if [ $# == 0 ]; then
+       usage
+       exit 1
+else
+       while [ $# -gt 0 ]; do
+               case "$1" in
+                       -cof)           export C_OF="yes" ;;
+                       -ncof)          export C_OF="no" ;;
+                       -sof)           export S_OF="yes" ;;
+                       -nsof)          export S_OF="no" ;;
+                       -h|--help)      usage; exit 0 ;;
+                       -d|--debug)     export DEBUG="1" ;;
+                       -*)             usage; exit 1 ;;
+                       *)              handle_domain $1 ;;
+               esac
+               shift
+       done
+
+       if [ -z "${DOMAIN}" ]; then
+               usage
+               exit 1
+       fi
+
+       # Remove trailing ',' from ALT_DOMAINS
+       ALT_DOMAINS=`echo ${ALT_DOMAINS} | sed -e 's/^,//'`
+
+       [ "${DEBUG}" ] && echo "C_OF: $C_OF,  S_OF: $S_OF,  DOMAIN: $DOMAIN,  ALT_DOMAINS: $ALT_DOMAINS"
+fi
+# }}}
+
+##
+# Check for the config file    # {{{
+if [ ! -r "${CONFIGFILE}"  ]; then
+       echo "Error: Configfile ${CONFIGFILE} does not exist or is not readable." >&2
+       exit 1
+fi
+# }}}
+
+##
+# Get the base_dir from the config file                #{{{
+BASE_DIR=`grep '^base_dir' "${CONFIGFILE}" | sed -e 's|.*= *"\?\(.*\)$|\1|' -e 's/"$//'`
+if [ -z "${BASE_DIR}" ]; then
+       BASE_DIR="${BASE_DIR}"
+       echo "Warning no base_dir specified in ${CONFIGFILE}." >&2
+       echo "Defaulting to ${DEF_BASE_DIR}..."
+fi
+# }}}
+
+##
+# Check if there is anything known about the 'new' domain      # {{{
+DOM_CONFIG="";
+DOM_DIR="";
+#
+# Check for config entry
+if grep -q "^\[${DOMAIN}\]" "${CONFIGFILE}"; then
+       DOM_CONFIG="true"
+       echo "Error: The domain ${DOMAIN} does allready have an config entry!." >&2
+fi
+
+# Check for domain directory
+if [ -d "${BASE_DIR}/${DOMAIN}" ]; then
+       echo "Error: The domain ${DOMAIN} does allready have a domain dir!" >&2
+       DOM_DIR="true"
+fi
+
+# If config entry *and* directory exist, eveyrthing is fine.
+if [ "${DOM_CONFIG}" -a "${DOM_DIR}" ]; then
+       echo "Domain ${DOMAIN} allready configured properly." >&2
+       exit 0
+fi
+
+# If we're still running and one of the following is set, that's not good.
+if [ "${DOM_CONFIG}" -o "${DOM_DIR}" ]; then
+       echo "Giving up, you have to fix this situation manually..." >&2
+       exit 1
+fi
+
+# }}}
+
+##
+# If we're now still running, there's no problem...
+# Append stanze for new domain to config and create dirs... # {{{
+if cat << EOCONF >> "${CONFIGFILE}"; then
+
+[${DOMAIN}]
+alt_domains=${ALT_DOMAINS}
+separate_outfile = ${S_OF}
+common_outfile = ${C_OF}
+EOCONF
+
+       mkdir "${BASE_DIR}/${DOMAIN}"
+       mkdir "${BASE_DIR}/${DOMAIN}/ATTIC"
+       
+       chown -R skeysync:skeysync "${BASE_DIR}/${DOMAIN}"
+       chmod -R 2775 "${BASE_DIR}/${DOMAIN}"
+else
+       echo "Failed to add domain stanze to ${CONFIGFILE}" >&2
+       exit 1
+fi
+# }}}
+
+
+# vim:foldmethod=marker:
index 228043d..da2c9ae 100644 (file)
@@ -5,8 +5,8 @@
 ##
 # General configuration options
 [general]
-base_dir="/var/cache/ssh-keysnc"
-user="skeysync"
+base_dir = "/var/cache/ssh-keysnc"
+user = skeysync
 
 ##
 # The domains managed by RBM::sshKeySync
index a62a0f6..cde7d89 100755 (executable)
@@ -5,6 +5,8 @@
 CONFIGFILE="/etc/rbm/ssh-keysync-server.conf"
 CONFIG_OLD="${CONFIGFILE}.oldsave"
 
+##
+# upgrade_config(): Upgrade the configuration file #{{{
 function upgrade_config() {
 
        echo "=========="
@@ -89,10 +91,10 @@ EOF
                echo " Configuration file ${CONFIGFILE} is up to date."
        fi
 }
-
+#}}}
 
 ##
-# Upgrade the filesystem structure
+# upgrade_dirs(): Upgrade the filesystem structure #{{{
 function upgrade_dirs() {
        echo "=========="
        echo "Upgrade file system structure:"
@@ -144,7 +146,7 @@ function upgrade_dirs() {
                exit 0
        fi
 }
-
+#}}}
 
 
 #
@@ -152,3 +154,6 @@ function upgrade_dirs() {
 #
 upgrade_config
 upgrade_dirs
+
+##
+# vim:foldmethod=marker: