From: <di...@us...> - 2007-01-24 19:58:05
|
Revision: 287 http://safekeep.svn.sourceforge.net/safekeep/?rev=287&view=rev Author: dimi Date: 2007-01-24 11:58:01 -0800 (Wed, 24 Jan 2007) Log Message: ----------- Provide a reasonable set of includes/excludes if not specified Modified Paths: -------------- safekeep/trunk/safekeep Modified: safekeep/trunk/safekeep =================================================================== --- safekeep/trunk/safekeep 2007-01-23 22:11:35 UTC (rev 286) +++ safekeep/trunk/safekeep 2007-01-24 19:58:01 UTC (rev 287) @@ -186,17 +186,29 @@ snaps.append(parse_snap(snap_el)) data_el = backup_el.getElementsByTagName('data') + + if data_el: + child_els = data_el[0].childNodes + cludes = [] + for child_el in child_els: + if child_el.nodeType != child_el.ELEMENT_NODE: + continue + if child_el.tagName not in ('include', 'exclude'): + continue + cludes.append(parse_clude(child_el)) + cludes.append({ 'type' : 'exclude', 'path' : '', 'glob' : '', 'regexp' : '.*' }) + else: + cludes = [ + { 'type' : 'exclude', 'path' : '/dev/', 'glob' : None, 'regexp' : None }, + { 'type' : 'exclude', 'path' : '/media/', 'glob' : None, 'regexp' : None }, + { 'type' : 'exclude', 'path' : '/mnt/', 'glob' : None, 'regexp' : None }, + { 'type' : 'exclude', 'path' : '/net/', 'glob' : None, 'regexp' : None }, + { 'type' : 'exclude', 'path' : '/proc/', 'glob' : None, 'regexp' : None }, + { 'type' : 'exclude', 'path' : '/sys/', 'glob' : None, 'regexp' : None }, + { 'type' : 'exclude', 'path' : '/tmp/', 'glob' : None, 'regexp' : None }, + { 'type' : 'include', 'path' : '/', 'glob' : None, 'regexp' : None }, + ] - child_els = data_el[0].childNodes - cludes = [] - for child_el in child_els: - if child_el.nodeType != child_el.ELEMENT_NODE: - continue - if child_el.tagName not in ('include', 'exclude'): - continue - cludes.append(parse_clude(child_el)) - cludes.append({ 'type' : 'exclude', 'path' : '', 'glob' : '', 'regexp' : '.*' }) - return { 'id': id, 'host' : host, 'user' : user, 'key_ctrl' : key_ctrl, 'key_data' : key_data, 'dir' : dir, 'retention' : retention, 'dumps' : dumps, 'snaps' : snaps, 'cludes' : cludes} This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <di...@us...> - 2007-01-25 04:09:20
|
Revision: 288 http://safekeep.svn.sourceforge.net/safekeep/?rev=288&view=rev Author: dimi Date: 2007-01-24 20:09:17 -0800 (Wed, 24 Jan 2007) Log Message: ----------- If the backup.log exists, mark current possition and dump starting from the marker only Modified Paths: -------------- safekeep/trunk/safekeep Modified: safekeep/trunk/safekeep =================================================================== --- safekeep/trunk/safekeep 2007-01-24 19:58:01 UTC (rev 287) +++ safekeep/trunk/safekeep 2007-01-25 04:09:17 UTC (rev 288) @@ -1,7 +1,7 @@ #!/usr/bin/python import getopt, os, os.path, popen2, re, sys -import commands, tempfile, traceback +import commands, tempfile, time, traceback import xml.dom.minidom import socket, smtplib @@ -46,11 +46,16 @@ else: print >> sys.stderr, msg -def info_file(file): +def info_file(file, marker=None): info('## File: ' + file) fin = open(file, 'r') try: for line in fin.readlines(): + if marker: + if line.startswith(marker): + marker = None + else: + continue info(line.rstrip()) finally: fin.close() @@ -554,10 +559,16 @@ else: rdiff_logpre = [] + backup_log = os.path.join(rdiff_logdir, 'backup.log') + if os.path.isfile(backup_log): + backup_marker = '=== Backup session on %s ===' % time.asctime() + else: + backup_marker = None + do_server_rdiff(cfg, bdir) if os.path.isdir(rdiff_logdir): - info_file(os.path.join(rdiff_logdir, 'backup.log')) + info_file(backup_log, backup_marker) rdiff_logpost = os.listdir(rdiff_logdir) for lfn in rdiff_logpost: if lfn.startswith('session_statistics.') and lfn.endswith('.data') and lfn not in rdiff_logpre: This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <st...@us...> - 2007-01-25 14:51:07
|
Revision: 292 http://safekeep.svn.sourceforge.net/safekeep/?rev=292&view=rev Author: stelian Date: 2007-01-25 06:50:51 -0800 (Thu, 25 Jan 2007) Log Message: ----------- Fix 'safekeep -k --deploy' problem. Modified Paths: -------------- safekeep/trunk/safekeep Modified: safekeep/trunk/safekeep =================================================================== --- safekeep/trunk/safekeep 2007-01-25 04:57:07 UTC (rev 291) +++ safekeep/trunk/safekeep 2007-01-25 14:50:51 UTC (rev 292) @@ -612,10 +612,10 @@ break elif action is 'deploy': info('%s: Key do not exist, generating it now: %s' % (id, privatekeyfile)) - cmd = 'ssh-keygen -q -b 1024 -t dsa -N "" -C "SafeKeep auto generated key at %s@%s" -f %s' % \ + gencmd = 'ssh-keygen -q -b 1024 -t dsa -N "" -C "SafeKeep auto generated key at %s@%s" -f %s' % \ (os.getlogin(), os.uname()[1], privatekeyfile) - debug(cmd) - if os.system(cmd): + debug(gencmd) + if os.system(gencmd): error('%s: Failed to generate key %s. Skipping client.' % (id, privatekeyfile)) break if not os.path.isfile(publickeyfile): This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <di...@us...> - 2007-01-25 16:46:27
|
Revision: 293 http://safekeep.svn.sourceforge.net/safekeep/?rev=293&view=rev Author: dimi Date: 2007-01-25 08:46:22 -0800 (Thu, 25 Jan 2007) Log Message: ----------- Use os.environ['LOGNAME'] instead of os.getlogin() to avoid errors when the controlling terminal goes missing (http://docs.python.org/lib/os-procinfo.html) Modified Paths: -------------- safekeep/trunk/safekeep Modified: safekeep/trunk/safekeep =================================================================== --- safekeep/trunk/safekeep 2007-01-25 14:50:51 UTC (rev 292) +++ safekeep/trunk/safekeep 2007-01-25 16:46:22 UTC (rev 293) @@ -613,7 +613,7 @@ elif action is 'deploy': info('%s: Key do not exist, generating it now: %s' % (id, privatekeyfile)) gencmd = 'ssh-keygen -q -b 1024 -t dsa -N "" -C "SafeKeep auto generated key at %s@%s" -f %s' % \ - (os.getlogin(), os.uname()[1], privatekeyfile) + (os.environ['LOGNAME'], os.uname()[1], privatekeyfile) debug(gencmd) if os.system(gencmd): error('%s: Failed to generate key %s. Skipping client.' % (id, privatekeyfile)) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <di...@us...> - 2007-01-25 18:36:36
|
Revision: 294 http://safekeep.svn.sourceforge.net/safekeep/?rev=294&view=rev Author: dimi Date: 2007-01-25 10:36:32 -0800 (Thu, 25 Jan 2007) Log Message: ----------- According to the FHS (http://www.pathname.com/fhs/), we can also exclude the following dirs: /var/cache /var/lock /var/run /var/tmp Modified Paths: -------------- safekeep/trunk/safekeep Modified: safekeep/trunk/safekeep =================================================================== --- safekeep/trunk/safekeep 2007-01-25 16:46:22 UTC (rev 293) +++ safekeep/trunk/safekeep 2007-01-25 18:36:32 UTC (rev 294) @@ -204,14 +204,18 @@ cludes.append({ 'type' : 'exclude', 'path' : '', 'glob' : '', 'regexp' : '.*' }) else: cludes = [ - { 'type' : 'exclude', 'path' : '/dev/', 'glob' : None, 'regexp' : None }, - { 'type' : 'exclude', 'path' : '/media/', 'glob' : None, 'regexp' : None }, - { 'type' : 'exclude', 'path' : '/mnt/', 'glob' : None, 'regexp' : None }, - { 'type' : 'exclude', 'path' : '/net/', 'glob' : None, 'regexp' : None }, - { 'type' : 'exclude', 'path' : '/proc/', 'glob' : None, 'regexp' : None }, - { 'type' : 'exclude', 'path' : '/sys/', 'glob' : None, 'regexp' : None }, - { 'type' : 'exclude', 'path' : '/tmp/', 'glob' : None, 'regexp' : None }, - { 'type' : 'include', 'path' : '/', 'glob' : None, 'regexp' : None }, + { 'type' : 'exclude', 'path' : '/dev/', 'glob' : None, 'regexp' : None }, + { 'type' : 'exclude', 'path' : '/media/', 'glob' : None, 'regexp' : None }, + { 'type' : 'exclude', 'path' : '/mnt/', 'glob' : None, 'regexp' : None }, + { 'type' : 'exclude', 'path' : '/net/', 'glob' : None, 'regexp' : None }, + { 'type' : 'exclude', 'path' : '/proc/', 'glob' : None, 'regexp' : None }, + { 'type' : 'exclude', 'path' : '/sys/', 'glob' : None, 'regexp' : None }, + { 'type' : 'exclude', 'path' : '/tmp/', 'glob' : None, 'regexp' : None }, + { 'type' : 'exclude', 'path' : '/var/cache', 'glob' : None, 'regexp' : None }, + { 'type' : 'exclude', 'path' : '/var/lock', 'glob' : None, 'regexp' : None }, + { 'type' : 'exclude', 'path' : '/var/run', 'glob' : None, 'regexp' : None }, + { 'type' : 'exclude', 'path' : '/var/tmp', 'glob' : None, 'regexp' : None }, + { 'type' : 'include', 'path' : '/', 'glob' : None, 'regexp' : None }, ] return { 'id': id, 'host' : host, 'user' : user, 'key_ctrl' : key_ctrl, 'key_data' : key_data, This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <di...@us...> - 2007-01-26 03:56:41
|
Revision: 295 http://safekeep.svn.sourceforge.net/safekeep/?rev=295&view=rev Author: dimi Date: 2007-01-25 19:56:40 -0800 (Thu, 25 Jan 2007) Log Message: ----------- Reorganize the help message for clarity Modified Paths: -------------- safekeep/trunk/safekeep Modified: safekeep/trunk/safekeep =================================================================== --- safekeep/trunk/safekeep 2007-01-25 18:36:32 UTC (rev 294) +++ safekeep/trunk/safekeep 2007-01-26 03:56:40 UTC (rev 295) @@ -735,24 +735,30 @@ ###################################################################### def usage(): - print 'usage: %s <mode> [options]' % (sys.argv[0]) - print ' %s [-k|--keys] [--status|--print|--deploy] [clientid1 [clientid2] ...]' % (sys.argv[0]) + print 'usage: %s [-s|--server] [common options] [server options]' % (sys.argv[0]) + print ' %s [-c|--client] [common options]' % (sys.argv[0]) + print ' %s [-k|--keys] [common options] [keys options] [clientid1 [clientid2] ...]' % (sys.argv[0]) + print print 'mode selection (pick one):' print '-s, --server launch in server mode (default)' print '-c, --client launch in client mode' - print '-k, --keys manage SSH keys' + print '-k, --keys launch in keys management mode' + print + print 'common options:' print '-h, --help show this help message and exit' + print '-q, --quiet decreases the verbosity level' + print '-v, --verbose increases the verbosity level' print '-V, --version show the version number and exit' print - print 'options:' + print 'keys options:' + print '--status display the key status for the clients (default)' + print '--print display the authorization keys' + print '--deploy deploy the authorization keys' + print + print 'server options:' print '-C, --cfg=FILE|DIR use the given configuration file/directory' print '-e, --email=EMAIL send results by email (can appear multiple times)' print '-m, --smtp=SMTP SMTP server to use when sending mails (default: built-in SMTP)' - print '--status display the key status for the clients (keys mode only, default)' - print '--print display the authorization keys (keys mode only)' - print '--deploy deploy the authorization keys (keys mode only)' - print '-q, --quiet decreases the verbosity level' - print '-v, --verbose increases the verbosity level' def main(): try: This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <st...@us...> - 2007-01-26 11:04:59
|
Revision: 298 http://safekeep.svn.sourceforge.net/safekeep/?rev=298&view=rev Author: stelian Date: 2007-01-26 03:04:57 -0800 (Fri, 26 Jan 2007) Log Message: ----------- Fix backup.log marker logic. Modified Paths: -------------- safekeep/trunk/safekeep Modified: safekeep/trunk/safekeep =================================================================== --- safekeep/trunk/safekeep 2007-01-26 04:27:04 UTC (rev 297) +++ safekeep/trunk/safekeep 2007-01-26 11:04:57 UTC (rev 298) @@ -54,8 +54,7 @@ if marker: if line.startswith(marker): marker = None - else: - continue + continue info(line.rstrip()) finally: fin.close() @@ -566,6 +565,9 @@ backup_log = os.path.join(rdiff_logdir, 'backup.log') if os.path.isfile(backup_log): backup_marker = '=== Backup session on %s ===' % time.asctime() + fbm = open(backup_log, 'a') + fbm.write(backup_marker + '\n') + fbm.close() else: backup_marker = None This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <di...@us...> - 2007-01-26 16:26:21
|
Revision: 299 http://safekeep.svn.sourceforge.net/safekeep/?rev=299&view=rev Author: dimi Date: 2007-01-26 08:26:12 -0800 (Fri, 26 Jan 2007) Log Message: ----------- Be a little more careful when accessing environment variables, provide fallbacks in case they are not defined Modified Paths: -------------- safekeep/trunk/safekeep Modified: safekeep/trunk/safekeep =================================================================== --- safekeep/trunk/safekeep 2007-01-26 11:04:57 UTC (rev 298) +++ safekeep/trunk/safekeep 2007-01-26 16:26:12 UTC (rev 299) @@ -100,6 +100,11 @@ if path.startswith('/'): return root + path return os.path.join(root, path) +def getenv(var, defval=None): + val = os.environ.get(var) + if val is None: return defval + return val + ###################################################################### # Configuration file parser ###################################################################### @@ -163,10 +168,11 @@ host = user = key_ctrl = key_data = None if host and not user: user = 'root' + home = getenv('HOME', '/root') if host and not key_ctrl: - key_ctrl = os.path.join(os.environ['HOME'], '.ssh', 'safekeep-server-ctrl-key') + key_ctrl = os.path.join(home, '.ssh', 'safekeep-server-ctrl-key') if host and not key_data: - key_data = os.path.join(os.environ['HOME'], '.ssh', 'safekeep-server-data-key') + key_data = os.path.join(home, '.ssh', 'safekeep-server-data-key') repo_el = backup_el.getElementsByTagName('repo') dir = None @@ -619,7 +625,7 @@ if deploy: info('%s: Key do not exist, generating it now: %s' % (id, privatekeyfile)) gencmd = 'ssh-keygen -q -b 1024 -t dsa -N "" -C "SafeKeep auto generated key at %s@%s" -f %s' % \ - (os.environ['LOGNAME'], os.uname()[1], privatekeyfile) + (getenv('LOGNAME', 'root'), os.uname()[1], privatekeyfile) debug(gencmd) if os.system(gencmd): error('%s: Failed to generate key %s. Skipping client.' % (id, privatekeyfile)) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <di...@us...> - 2007-01-26 16:32:15
|
Revision: 300 http://safekeep.svn.sourceforge.net/safekeep/?rev=300&view=rev Author: dimi Date: 2007-01-26 08:32:02 -0800 (Fri, 26 Jan 2007) Log Message: ----------- Teach usage() to exit if need be, simplify the code a bit. Modified Paths: -------------- safekeep/trunk/safekeep Modified: safekeep/trunk/safekeep =================================================================== --- safekeep/trunk/safekeep 2007-01-26 16:26:12 UTC (rev 299) +++ safekeep/trunk/safekeep 2007-01-26 16:32:02 UTC (rev 300) @@ -740,7 +740,7 @@ # Main routine ###################################################################### -def usage(): +def usage(exitcode=None): print 'usage: %s [--server] [common options] [server options]' % (sys.argv[0]) print ' %s --client [common options]' % (sys.argv[0]) print ' %s --keys [common options] [keys options] [clientid1 [clientid2] ...]' % (sys.argv[0]) @@ -765,6 +765,7 @@ print '-C, --cfg=FILE|DIR use the given configuration file/directory' print '-e, --email=EMAIL send results by email (can appear multiple times)' print '-m, --smtp=SMTP SMTP server to use when sending mails (default: built-in SMTP)' + if exitcode is not None: sys.exit(exitcode) def main(): try: @@ -774,8 +775,8 @@ 'quiet', 'server', 'smtp=', 'status', 'verbose', 'version']) except getopt.GetoptError: - usage() - sys.exit(2) + usage(2) + mode = 'server' email = [] smtp = '' @@ -791,8 +792,7 @@ elif o in ('-e', '--email'): email.append(a) elif o in ('-h', '--help'): - usage() - sys.exit() + usage(0) elif o in ('-m', '--smtp'): smtp = a elif o in ('--server', ): This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <di...@us...> - 2007-01-26 16:33:23
|
Revision: 301 http://safekeep.svn.sourceforge.net/safekeep/?rev=301&view=rev Author: dimi Date: 2007-01-26 08:33:10 -0800 (Fri, 26 Jan 2007) Log Message: ----------- Allow only one mode at a time. Modified Paths: -------------- safekeep/trunk/safekeep Modified: safekeep/trunk/safekeep =================================================================== --- safekeep/trunk/safekeep 2007-01-26 16:32:02 UTC (rev 300) +++ safekeep/trunk/safekeep 2007-01-26 16:33:10 UTC (rev 301) @@ -796,10 +796,13 @@ elif o in ('-m', '--smtp'): smtp = a elif o in ('--server', ): + if mode: usage(2) mode = 'server' elif o in ('--client', ): + if mode: usage(2) mode = 'client' elif o in ('--keys', ): + if mode: usage(2) mode = 'keys' elif o in ('--status', ): keys_status = True This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <di...@us...> - 2007-01-26 16:48:19
|
Revision: 302 http://safekeep.svn.sourceforge.net/safekeep/?rev=302&view=rev Author: dimi Date: 2007-01-26 08:47:13 -0800 (Fri, 26 Jan 2007) Log Message: ----------- Default to server mode only at the end. Small cleanups. Modified Paths: -------------- safekeep/trunk/safekeep Modified: safekeep/trunk/safekeep =================================================================== --- safekeep/trunk/safekeep 2007-01-26 16:33:10 UTC (rev 301) +++ safekeep/trunk/safekeep 2007-01-26 16:47:13 UTC (rev 302) @@ -777,7 +777,7 @@ except getopt.GetoptError: usage(2) - mode = 'server' + mode = None email = [] smtp = '' cfglocs = [] @@ -820,19 +820,21 @@ if len(cfglocs) == 0: cfglocs.append(config_dir) + if mode is None: + mode = 'server' cfgs = parse_locs(cfglocs) try: global is_client, verbosity_level - if mode == 'server': + if mode is 'server': is_client = False verbosity_level = 1 + verbosity do_server(cfgs) - elif mode == 'client': + elif mode is 'client': is_client = True verbosity_level = 3 + verbosity do_client() - elif mode == 'keys': + elif mode is 'keys': is_client = False verbosity_level = 1 + verbosity if not keys_status and not keys_print and not keys_deploy: This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <di...@us...> - 2007-01-26 18:10:40
|
Revision: 303 http://safekeep.svn.sourceforge.net/safekeep/?rev=303&view=rev Author: dimi Date: 2007-01-26 10:10:35 -0800 (Fri, 26 Jan 2007) Log Message: ----------- Transform the list of configurations into a dictionary. It should make it easier to look through the known ids. Modified Paths: -------------- safekeep/trunk/safekeep Modified: safekeep/trunk/safekeep =================================================================== --- safekeep/trunk/safekeep 2007-01-26 16:47:13 UTC (rev 302) +++ safekeep/trunk/safekeep 2007-01-26 18:10:35 UTC (rev 303) @@ -243,7 +243,7 @@ else: print >> sys.stderr, 'Inaccessible configuration, ignoring:', cfg - cfgs = [] + cfgs = {} for filepath in cfgfiles: filename = os.path.splitext(os.path.basename(filepath))[0] @@ -257,7 +257,7 @@ finally: dom.unlink() cfg['text'] = cfg_str - cfgs.append(cfg) + cfgs[cfg['id']] = cfg return cfgs @@ -527,7 +527,7 @@ def do_server(cfgs): debug("Do server main loop") - for cfg in cfgs: + for cfg in cfgs.itervalues(): if cfg['host']: if not os.path.isfile(cfg['key_ctrl']): warn('Client %(id)s missing ctrl key %(key_ctrl)s, skipping' % cfg) @@ -598,7 +598,7 @@ def do_keys(cfgs, ids, status, dump, deploy): matches = [] - for cfg in cfgs: + for cfg in cfgs.itervalues(): id = cfg['id'] if ids and id not in ids: continue info('Handling keys for client: %s' % id) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <di...@us...> - 2007-01-26 18:19:03
|
Revision: 304 http://safekeep.svn.sourceforge.net/safekeep/?rev=304&view=rev Author: dimi Date: 2007-01-26 10:18:57 -0800 (Fri, 26 Jan 2007) Log Message: ----------- Validate arguments as clientIDs where appropriate Modified Paths: -------------- safekeep/trunk/safekeep Modified: safekeep/trunk/safekeep =================================================================== --- safekeep/trunk/safekeep 2007-01-26 18:10:35 UTC (rev 303) +++ safekeep/trunk/safekeep 2007-01-26 18:18:57 UTC (rev 304) @@ -818,12 +818,24 @@ print 'safekeep', VERSION return + if mode is None: + mode = 'server' if len(cfglocs) == 0: cfglocs.append(config_dir) - if mode is None: - mode = 'server' + cfgs = parse_locs(cfglocs) - cfgs = parse_locs(cfglocs) + if mode is 'client': + if len(args) > 0: usage(2) + else: + ok = True + for arg in args: + if arg in cfgs: continue + error('Unknown client ID: %s' % arg) + if os.path.isfile(arg): + error('It appears to be a file, configuration files are passed via the -C/--cfg switch.') + ok = False + if not ok: sys.exit(2) + try: global is_client, verbosity_level if mode is 'server': This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <di...@us...> - 2007-01-26 18:27:06
|
Revision: 305 http://safekeep.svn.sourceforge.net/safekeep/?rev=305&view=rev Author: dimi Date: 2007-01-26 10:27:05 -0800 (Fri, 26 Jan 2007) Log Message: ----------- Complain if inappropriate options are used in selected mode Modified Paths: -------------- safekeep/trunk/safekeep Modified: safekeep/trunk/safekeep =================================================================== --- safekeep/trunk/safekeep 2007-01-26 18:18:57 UTC (rev 304) +++ safekeep/trunk/safekeep 2007-01-26 18:27:05 UTC (rev 305) @@ -820,6 +820,13 @@ if mode is None: mode = 'server' + + if mode is not 'keys' and (keys_status or keys_print or keys_deploy): + usage(2) + + if mode is not 'server' and (cfglocs or email or smtp): + usage(2) + if len(cfglocs) == 0: cfglocs.append(config_dir) cfgs = parse_locs(cfglocs) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <di...@us...> - 2007-01-26 18:40:15
|
Revision: 306 http://safekeep.svn.sourceforge.net/safekeep/?rev=306&view=rev Author: dimi Date: 2007-01-26 10:40:11 -0800 (Fri, 26 Jan 2007) Log Message: ----------- Add support for filtering by client-ids in server mode Modified Paths: -------------- safekeep/trunk/safekeep Modified: safekeep/trunk/safekeep =================================================================== --- safekeep/trunk/safekeep 2007-01-26 18:27:05 UTC (rev 305) +++ safekeep/trunk/safekeep 2007-01-26 18:40:11 UTC (rev 306) @@ -525,9 +525,13 @@ if server_major != client_major: raise Exception('Incompatible protocols: %s <> %s' % (PROTOCOL, client_protocol)) -def do_server(cfgs): +def do_server(cfgs, ids): debug("Do server main loop") for cfg in cfgs.itervalues(): + id = cfg['id'] + if ids and id not in ids: continue + info('Server backup starting for client: %s' % id) + if cfg['host']: if not os.path.isfile(cfg['key_ctrl']): warn('Client %(id)s missing ctrl key %(key_ctrl)s, skipping' % cfg) @@ -540,8 +544,6 @@ if cfg['retention'] and os.path.isdir(rdiff_logdir): do_server_data_cleanup(cfg) - debug('Do server backup [' + cfg['id'] + ']') - if cfg['host']: cmd = 'ssh -T -i %(key_ctrl)s -l %(user)s %(host)s' % cfg else: @@ -554,7 +556,7 @@ client_versions = do_server_getanswer(cout) do_server_compat(client_versions) - cin.write('CONFIG: %d: %s\n' % (len(cfg['text'].splitlines()), cfg['id'])) + cin.write('CONFIG: %d: %s\n' % (len(cfg['text'].splitlines()), id)) cin.write(cfg['text'] + '\n') cin.flush() do_server_getanswer(cout) @@ -592,7 +594,7 @@ cin.flush() do_server_getanswer(cout) - debug('Server backup [' + cfg['id'] + '] done') + debug('Server backup done for client: %s' % id) debug('Server backup done') @@ -741,9 +743,9 @@ ###################################################################### def usage(exitcode=None): - print 'usage: %s [--server] [common options] [server options]' % (sys.argv[0]) + print 'usage: %s [--server] [common options] [server options] <client-id>*' % (sys.argv[0]) print ' %s --client [common options]' % (sys.argv[0]) - print ' %s --keys [common options] [keys options] [clientid1 [clientid2] ...]' % (sys.argv[0]) + print ' %s --keys [common options] [keys options] <client-id>*' % (sys.argv[0]) print print 'mode selection (pick one):' print '--server launch in server mode (default)' @@ -848,7 +850,7 @@ if mode is 'server': is_client = False verbosity_level = 1 + verbosity - do_server(cfgs) + do_server(cfgs, args) elif mode is 'client': is_client = True verbosity_level = 3 + verbosity This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <di...@us...> - 2007-01-26 19:03:53
|
Revision: 307 http://safekeep.svn.sourceforge.net/safekeep/?rev=307&view=rev Author: dimi Date: 2007-01-26 11:03:51 -0800 (Fri, 26 Jan 2007) Log Message: ----------- Cleanup code, we check now the arguments ahead of time. Modified Paths: -------------- safekeep/trunk/safekeep Modified: safekeep/trunk/safekeep =================================================================== --- safekeep/trunk/safekeep 2007-01-26 18:40:11 UTC (rev 306) +++ safekeep/trunk/safekeep 2007-01-26 19:03:51 UTC (rev 307) @@ -599,12 +599,10 @@ debug('Server backup done') def do_keys(cfgs, ids, status, dump, deploy): - matches = [] for cfg in cfgs.itervalues(): id = cfg['id'] if ids and id not in ids: continue info('Handling keys for client: %s' % id) - matches.append(id) if not cfg['host']: info('%s: Client is local, it needs no keys' % id) continue @@ -679,9 +677,6 @@ if pipe.close(): error('Failed to deliver the keys to the client') - for id in ids: - if id not in matches: - error('No client with id \'%s\'' % id) # parses authozied_keys, see sshd(8) man page for details def parse_authorized_keys(keystext): This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <di...@us...> - 2007-01-26 20:35:49
|
Revision: 309 http://safekeep.svn.sourceforge.net/safekeep/?rev=309&view=rev Author: dimi Date: 2007-01-26 12:35:46 -0800 (Fri, 26 Jan 2007) Log Message: ----------- Less confusing name Modified Paths: -------------- safekeep/trunk/safekeep Modified: safekeep/trunk/safekeep =================================================================== --- safekeep/trunk/safekeep 2007-01-26 20:28:01 UTC (rev 308) +++ safekeep/trunk/safekeep 2007-01-26 20:35:46 UTC (rev 309) @@ -152,11 +152,11 @@ raise ConfigException('Empty ' + clude_el.tagName) return { 'type' : clude_el.tagName, 'path' : path, 'glob' : glob, 'regexp' : regexp } -def parse_config(backup_el, filename): +def parse_config(backup_el, dflt_id): if backup_el.tagName != 'backup': raise ConfigException('Invalid config file, the top level element must be <backup>') id = backup_el.getAttribute('id') - if not id: id = filename + if not id: id = dflt_id host_el = backup_el.getElementsByTagName('host') if host_el: This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <di...@us...> - 2007-01-26 22:17:04
|
Revision: 315 http://safekeep.svn.sourceforge.net/safekeep/?rev=315&view=rev Author: dimi Date: 2007-01-26 14:17:02 -0800 (Fri, 26 Jan 2007) Log Message: ----------- Protect against duplicated client IDs Modified Paths: -------------- safekeep/trunk/safekeep Modified: safekeep/trunk/safekeep =================================================================== --- safekeep/trunk/safekeep 2007-01-26 22:04:13 UTC (rev 314) +++ safekeep/trunk/safekeep 2007-01-26 22:17:02 UTC (rev 315) @@ -257,6 +257,8 @@ finally: dom.unlink() cfg['text'] = cfg_str + if cfg['id'] in cfgs: + raise ConfigException('Duplicate client ID: %s' % cfg['id']) cfgs[cfg['id']] = cfg return cfgs This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <di...@us...> - 2007-01-26 23:25:39
|
Revision: 317 http://safekeep.svn.sourceforge.net/safekeep/?rev=317&view=rev Author: dimi Date: 2007-01-26 15:25:37 -0800 (Fri, 26 Jan 2007) Log Message: ----------- Use the standard os.getenv() instead our ad-hoc version Modified Paths: -------------- safekeep/trunk/safekeep Modified: safekeep/trunk/safekeep =================================================================== --- safekeep/trunk/safekeep 2007-01-26 23:16:44 UTC (rev 316) +++ safekeep/trunk/safekeep 2007-01-26 23:25:37 UTC (rev 317) @@ -100,11 +100,6 @@ if path.startswith('/'): return root + path return os.path.join(root, path) -def getenv(var, defval=None): - val = os.environ.get(var) - if val is None: return defval - return val - ###################################################################### # Configuration file parser ###################################################################### @@ -168,7 +163,7 @@ host = user = key_ctrl = key_data = None if host and not user: user = 'root' - home = getenv('HOME', '/root') + home = os.getenv('HOME', '/root') if host and not key_ctrl: key_ctrl = os.path.join(home, '.ssh', 'safekeep-server-ctrl-key') if host and not key_data: @@ -627,7 +622,7 @@ if deploy: info('%s: Key do not exist, generating it now: %s' % (id, privatekeyfile)) gencmd = 'ssh-keygen -q -b 1024 -t dsa -N "" -C "SafeKeep auto generated key at %s@%s" -f %s' % \ - (getenv('LOGNAME', 'root'), os.uname()[1], privatekeyfile) + (os.getenv('LOGNAME', 'root'), os.uname()[1], privatekeyfile) debug(gencmd) if os.system(gencmd): error('%s: Failed to generate key %s. Skipping client.' % (id, privatekeyfile)) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <st...@us...> - 2007-01-28 23:23:47
|
Revision: 322 http://safekeep.svn.sourceforge.net/safekeep/?rev=322&view=rev Author: stelian Date: 2007-01-28 15:23:45 -0800 (Sun, 28 Jan 2007) Log Message: ----------- List the options in the same order as the modes. Modified Paths: -------------- safekeep/trunk/safekeep Modified: safekeep/trunk/safekeep =================================================================== --- safekeep/trunk/safekeep 2007-01-27 18:13:37 UTC (rev 321) +++ safekeep/trunk/safekeep 2007-01-28 23:23:45 UTC (rev 322) @@ -757,14 +757,14 @@ print '-v, --verbose increases the verbosity level' print '-V, --version show the version number and exit' print + print 'server options:' + print '-e, --email=EMAIL send results by email (can appear multiple times)' + print '-s, --smtp=SMTP SMTP server to use when sending mails (default: sendmail)' + print print 'keys options:' print '--status display the key status for the clients (default)' print '--print display the authorization keys' print '--deploy deploy the authorization keys' - print - print 'server options:' - print '-e, --email=EMAIL send results by email (can appear multiple times)' - print '-s, --smtp=SMTP SMTP server to use when sending mails (default: sendmail)' if exitcode is not None: sys.exit(exitcode) def main(): This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <st...@us...> - 2007-01-28 23:34:53
|
Revision: 323 http://safekeep.svn.sourceforge.net/safekeep/?rev=323&view=rev Author: stelian Date: 2007-01-28 15:34:41 -0800 (Sun, 28 Jan 2007) Log Message: ----------- Let the user know we're excluding some files because of wrong suffix. Modified Paths: -------------- safekeep/trunk/safekeep Modified: safekeep/trunk/safekeep =================================================================== --- safekeep/trunk/safekeep 2007-01-28 23:23:45 UTC (rev 322) +++ safekeep/trunk/safekeep 2007-01-28 23:34:41 UTC (rev 323) @@ -236,6 +236,7 @@ if os.path.isdir(cfg): for ent in os.listdir(cfg): if not ent.endswith(config_ext): + print >> sys.stderr, 'Ignoring file %s not ending in %s' % (os.path.join(cfg, ent), config_ext) continue filepath = os.path.join(cfg, ent) if not os.path.isfile(filepath): This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <di...@us...> - 2007-01-29 01:31:17
|
Revision: 324 http://safekeep.svn.sourceforge.net/safekeep/?rev=324&view=rev Author: dimi Date: 2007-01-28 17:31:16 -0800 (Sun, 28 Jan 2007) Log Message: ----------- "Stelian Pop" <st...@la...> Invoke remote command explicitly in case the wrong SSH key is used with the client. Modified Paths: -------------- safekeep/trunk/safekeep Modified: safekeep/trunk/safekeep =================================================================== --- safekeep/trunk/safekeep 2007-01-28 23:34:41 UTC (rev 323) +++ safekeep/trunk/safekeep 2007-01-29 01:31:16 UTC (rev 324) @@ -551,7 +551,7 @@ do_server_data_cleanup(cfg) if cfg['host']: - cmd = 'ssh -T -i %(key_ctrl)s -l %(user)s %(host)s' % cfg + cmd = 'ssh -T -i %(key_ctrl)s -l %(user)s %(host)s safekeep --client' % cfg else: cmd = 'safekeep --client' debug('Run [' + cmd + ']') This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <di...@us...> - 2007-01-29 05:22:38
|
Revision: 325 http://safekeep.svn.sourceforge.net/safekeep/?rev=325&view=rev Author: dimi Date: 2007-01-28 21:22:36 -0800 (Sun, 28 Jan 2007) Log Message: ----------- Exclude unneeded stuff from named's chroot. No need to include /, it's implicit in rdiff-backup. Modified Paths: -------------- safekeep/trunk/safekeep Modified: safekeep/trunk/safekeep =================================================================== --- safekeep/trunk/safekeep 2007-01-29 01:31:16 UTC (rev 324) +++ safekeep/trunk/safekeep 2007-01-29 05:22:36 UTC (rev 325) @@ -212,18 +212,21 @@ cludes.append({ 'type' : 'exclude', 'path' : '', 'glob' : '', 'regexp' : '.*' }) else: cludes = [ - { 'type' : 'exclude', 'path' : '/dev/', 'glob' : None, 'regexp' : None }, - { 'type' : 'exclude', 'path' : '/media/', 'glob' : None, 'regexp' : None }, - { 'type' : 'exclude', 'path' : '/mnt/', 'glob' : None, 'regexp' : None }, - { 'type' : 'exclude', 'path' : '/net/', 'glob' : None, 'regexp' : None }, - { 'type' : 'exclude', 'path' : '/proc/', 'glob' : None, 'regexp' : None }, - { 'type' : 'exclude', 'path' : '/sys/', 'glob' : None, 'regexp' : None }, - { 'type' : 'exclude', 'path' : '/tmp/', 'glob' : None, 'regexp' : None }, - { 'type' : 'exclude', 'path' : '/var/cache', 'glob' : None, 'regexp' : None }, - { 'type' : 'exclude', 'path' : '/var/lock', 'glob' : None, 'regexp' : None }, - { 'type' : 'exclude', 'path' : '/var/run', 'glob' : None, 'regexp' : None }, - { 'type' : 'exclude', 'path' : '/var/tmp', 'glob' : None, 'regexp' : None }, - { 'type' : 'include', 'path' : '/', 'glob' : None, 'regexp' : None }, + { 'type' : 'exclude', 'path' : '/dev/', 'glob' : None, 'regexp' : None }, + { 'type' : 'exclude', 'path' : '/media/', 'glob' : None, 'regexp' : None }, + { 'type' : 'exclude', 'path' : '/mnt/', 'glob' : None, 'regexp' : None }, + { 'type' : 'exclude', 'path' : '/net/', 'glob' : None, 'regexp' : None }, + { 'type' : 'exclude', 'path' : '/proc/', 'glob' : None, 'regexp' : None }, + { 'type' : 'exclude', 'path' : '/sys/', 'glob' : None, 'regexp' : None }, + { 'type' : 'exclude', 'path' : '/tmp/', 'glob' : None, 'regexp' : None }, + { 'type' : 'exclude', 'path' : '/var/cache', 'glob' : None, 'regexp' : None }, + { 'type' : 'exclude', 'path' : '/var/lock', 'glob' : None, 'regexp' : None }, + { 'type' : 'exclude', 'path' : '/var/named/dev', 'glob' : None, 'regexp' : None }, + { 'type' : 'exclude', 'path' : '/var/named/proc', 'glob' : None, 'regexp' : None }, + { 'type' : 'exclude', 'path' : '/var/named/var/run', 'glob' : None, 'regexp' : None }, + { 'type' : 'exclude', 'path' : '/var/named/var/tmp', 'glob' : None, 'regexp' : None }, + { 'type' : 'exclude', 'path' : '/var/run', 'glob' : None, 'regexp' : None }, + { 'type' : 'exclude', 'path' : '/var/tmp', 'glob' : None, 'regexp' : None }, ] return { 'id': id, 'host' : host, 'user' : user, 'key_ctrl' : key_ctrl, 'key_data' : key_data, This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <di...@us...> - 2007-01-29 05:40:06
|
Revision: 326 http://safekeep.svn.sourceforge.net/safekeep/?rev=326&view=rev Author: dimi Date: 2007-01-28 21:40:03 -0800 (Sun, 28 Jan 2007) Log Message: ----------- A more compact representation for the excludes Modified Paths: -------------- safekeep/trunk/safekeep Modified: safekeep/trunk/safekeep =================================================================== --- safekeep/trunk/safekeep 2007-01-29 05:22:36 UTC (rev 325) +++ safekeep/trunk/safekeep 2007-01-29 05:40:03 UTC (rev 326) @@ -211,23 +211,11 @@ cludes.append(parse_clude(child_el)) cludes.append({ 'type' : 'exclude', 'path' : '', 'glob' : '', 'regexp' : '.*' }) else: - cludes = [ - { 'type' : 'exclude', 'path' : '/dev/', 'glob' : None, 'regexp' : None }, - { 'type' : 'exclude', 'path' : '/media/', 'glob' : None, 'regexp' : None }, - { 'type' : 'exclude', 'path' : '/mnt/', 'glob' : None, 'regexp' : None }, - { 'type' : 'exclude', 'path' : '/net/', 'glob' : None, 'regexp' : None }, - { 'type' : 'exclude', 'path' : '/proc/', 'glob' : None, 'regexp' : None }, - { 'type' : 'exclude', 'path' : '/sys/', 'glob' : None, 'regexp' : None }, - { 'type' : 'exclude', 'path' : '/tmp/', 'glob' : None, 'regexp' : None }, - { 'type' : 'exclude', 'path' : '/var/cache', 'glob' : None, 'regexp' : None }, - { 'type' : 'exclude', 'path' : '/var/lock', 'glob' : None, 'regexp' : None }, - { 'type' : 'exclude', 'path' : '/var/named/dev', 'glob' : None, 'regexp' : None }, - { 'type' : 'exclude', 'path' : '/var/named/proc', 'glob' : None, 'regexp' : None }, - { 'type' : 'exclude', 'path' : '/var/named/var/run', 'glob' : None, 'regexp' : None }, - { 'type' : 'exclude', 'path' : '/var/named/var/tmp', 'glob' : None, 'regexp' : None }, - { 'type' : 'exclude', 'path' : '/var/run', 'glob' : None, 'regexp' : None }, - { 'type' : 'exclude', 'path' : '/var/tmp', 'glob' : None, 'regexp' : None }, - ] + path_xcludes = [ '/dev/', '/media/', '/mnt/', '/net/', '/proc/', '/sys/', + '/tmp/', '/var/cache', '/var/lock', '/var/run', '/var/tmp', + '/var/named/chroot/dev', '/var/named/chroot/proc', + '/var/named/chroot/var/run', '/var/named/chroot/var/tmp' ] + cludes = [{ 'type' : 'exclude', 'path' : path, 'glob' : None, 'regexp' : None } for path in path_xcludes] return { 'id': id, 'host' : host, 'user' : user, 'key_ctrl' : key_ctrl, 'key_data' : key_data, 'dir' : dir, 'retention' : retention, 'dumps' : dumps, 'snaps' : snaps, This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <di...@us...> - 2007-01-29 17:22:16
|
Revision: 327 http://safekeep.svn.sourceforge.net/safekeep/?rev=327&view=rev Author: dimi Date: 2007-01-29 09:22:11 -0800 (Mon, 29 Jan 2007) Log Message: ----------- Ignode /selinux/ too. Modified Paths: -------------- safekeep/trunk/safekeep Modified: safekeep/trunk/safekeep =================================================================== --- safekeep/trunk/safekeep 2007-01-29 05:40:03 UTC (rev 326) +++ safekeep/trunk/safekeep 2007-01-29 17:22:11 UTC (rev 327) @@ -211,7 +211,7 @@ cludes.append(parse_clude(child_el)) cludes.append({ 'type' : 'exclude', 'path' : '', 'glob' : '', 'regexp' : '.*' }) else: - path_xcludes = [ '/dev/', '/media/', '/mnt/', '/net/', '/proc/', '/sys/', + path_xcludes = [ '/dev/', '/media/', '/mnt/', '/net/', '/proc/', '/selinux/', '/sys/', '/tmp/', '/var/cache', '/var/lock', '/var/run', '/var/tmp', '/var/named/chroot/dev', '/var/named/chroot/proc', '/var/named/chroot/var/run', '/var/named/chroot/var/tmp' ] This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |