|
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.
|