summaryrefslogtreecommitdiff
path: root/lib/thandy
diff options
context:
space:
mode:
Diffstat (limited to 'lib/thandy')
-rw-r--r--lib/thandy/ClientCLI.py3
-rw-r--r--lib/thandy/ServerCLI.py2
-rw-r--r--lib/thandy/download.py2
-rw-r--r--lib/thandy/encodeToXML.py5
-rw-r--r--lib/thandy/formats.py24
-rw-r--r--lib/thandy/keys.py5
-rw-r--r--lib/thandy/packagesys/ExePackages.py4
-rw-r--r--lib/thandy/packagesys/PackageDB.py6
-rw-r--r--lib/thandy/packagesys/PackageSystem.py6
-rw-r--r--lib/thandy/packagesys/RPMPackages.py4
-rw-r--r--lib/thandy/repository.py17
-rw-r--r--lib/thandy/socksurls.py2
-rw-r--r--lib/thandy/util.py2
13 files changed, 29 insertions, 53 deletions
diff --git a/lib/thandy/ClientCLI.py b/lib/thandy/ClientCLI.py
index 14a149a..1994049 100644
--- a/lib/thandy/ClientCLI.py
+++ b/lib/thandy/ClientCLI.py
@@ -32,7 +32,7 @@ class ControlLogFormatter:
thandy.util.formatLogString(m))
def formatException(self, exc_info):
- return repr(traceback.print_exception())
+ return repr(traceback.format_exception(*exc_info))
class RegularLogFilter:
def filter(self, record):
@@ -76,7 +76,6 @@ def update(args):
use_packagesys = True
install = False
socksPort = None
- logLevel = logging.INFO
forceCheck = False
for o, v in options:
diff --git a/lib/thandy/ServerCLI.py b/lib/thandy/ServerCLI.py
index aa39aa1..d9c0f04 100644
--- a/lib/thandy/ServerCLI.py
+++ b/lib/thandy/ServerCLI.py
@@ -144,7 +144,7 @@ def timestamp(args):
try:
bObj = snarfObj(fn)
except (ValueError, OSError, IOError), e:
- print "(Couldn't read bundle-like %s)"%fn
+ print "(Couldn't read bundle-like %s: %s)"%(fn, e)
continue
try:
_, r, _ = thandy.formats.checkSignedObj(bObj)
diff --git a/lib/thandy/download.py b/lib/thandy/download.py
index 1d969e5..f715a23 100644
--- a/lib/thandy/download.py
+++ b/lib/thandy/download.py
@@ -4,11 +4,9 @@ import httplib
import logging
import os
import Queue
-import random
import sys
import threading
import time
-import traceback
import urllib2
import thandy.util
diff --git a/lib/thandy/encodeToXML.py b/lib/thandy/encodeToXML.py
index 4387c88..c563d77 100644
--- a/lib/thandy/encodeToXML.py
+++ b/lib/thandy/encodeToXML.py
@@ -1,6 +1,7 @@
# Copyright 2008 The Tor Project, Inc. See LICENSE for licensing information.
import re
+import thandy
def xml_str_encoder(s):
s = s.replace("&", "&")
@@ -23,7 +24,7 @@ def isAsciiName(s):
"""
return re.match(r'^[A-Za-z\_\:][A-Za-z0-9\_\:\-\.]*$', s) != None
-def _encodeToXML(obj, outf, indent=0):
+def _encodeToXML(obj, outf):
if isinstance(obj, basestring):
outf(xml_str_encoder(obj))
elif obj is True:
@@ -35,7 +36,6 @@ def _encodeToXML(obj, outf, indent=0):
elif isinstance(obj, (int,long)):
outf(str(obj))
elif isinstance(obj, (tuple, list)):
- istr = " "*indent
outf("<list>\n")
for item in obj:
outf("<item>")
@@ -62,6 +62,7 @@ def encodeToXML(obj, outf=None):
"""Convert a json-encodable object to a quick-and-dirty XML equivalent."""
result = None
if outf == None:
+ result = []
outf = result.append
_encodeToXML(obj, outf)
diff --git a/lib/thandy/formats.py b/lib/thandy/formats.py
index f87128b..b82bf05 100644
--- a/lib/thandy/formats.py
+++ b/lib/thandy/formats.py
@@ -141,7 +141,7 @@ def checkSignatures(signed, keyDB, role=None, path=None):
except thandy.UnknownMethod:
continue
- if result == True:
+ if result:
if role is not None:
for r,p in key.getRoles():
if r == role and rolePathMatches(p, path):
@@ -326,7 +326,7 @@ def parseTime(s):
try:
return calendar.timegm(time.strptime(s, "%Y-%m-%d %H:%M:%S"))
except ValueError:
- raise thandy.FormatError("Malformed time %r", s)
+ raise thandy.FormatException("Malformed time %r", s)
def formatBase64(h):
"""Return the base64 encoding of h with whitespace and = signs omitted."""
@@ -343,12 +343,12 @@ def parseBase64(s):
try:
return binascii.a2b_base64(s)
except binascii.Error:
- raise thandy.FormatError("Invalid base64 encoding")
+ raise thandy.FormatException("Invalid base64 encoding")
def parseHash(s):
h = parseBase64(s)
if len(h) != Crypto.Hash.SHA256.digest_size:
- raise thandy.FormatError("Bad hash length")
+ raise thandy.FormatException("Bad hash length")
return h
S = thandy.checkJson
@@ -533,11 +533,6 @@ class Key:
keytype = obj['_keytype']
if keytype == 'rsa':
return Key(thandy.keys.RSAKey.fromJSon(obj))
-
- if typeattr == 'rsa':
- key = thandy.keys.RSAKey.fromSExpression(sexpr)
- if key is not None:
- return Key(key)
else:
return None
@@ -547,10 +542,10 @@ class Key:
def getKeyID(self):
return self.key.getKeyID()
- def sign(self, sexpr=None, digest=None):
- return self.key.sign(sexpr, digest=digest)
+ def sign(self, obj=None, digest=None):
+ return self.key.sign(obj, digest=digest)
- def checkSignature(self, method, data, signatute):
+ def checkSignature(self, method, data, signature):
ok = self.key.checkSignature(method, data, signature)
# XXXX CACHE HERE.
return ok
@@ -651,7 +646,7 @@ def readConfigFile(fname, needKeys=(), optKeys=(), preload={}):
try:
result[k] = parsed[k]
except KeyError:
- raise thandy.FormatError("Missing value for %s in %s"%k,fname)
+ raise thandy.FormatException("Missing value for %s in %s"%k,fname)
for k in optKeys:
try:
@@ -916,8 +911,7 @@ def checkSignedObj(obj, keydb=None):
role = 'package'
path = obj['signed']['location']
else:
- print tp
- raise "Foo"
+ raise ValueError("Unkown signed object type %r"%tp)
ss = None
if keydb is not None:
diff --git a/lib/thandy/keys.py b/lib/thandy/keys.py
index 56273e8..211150a 100644
--- a/lib/thandy/keys.py
+++ b/lib/thandy/keys.py
@@ -5,7 +5,6 @@ import Crypto.PublicKey.RSA
import Crypto.Hash.SHA256
import Crypto.Cipher.AES
-import cPickle as pickle
import binascii
import logging
import os
@@ -24,7 +23,7 @@ class PublicKey:
self._roles = []
def format(self):
raise NotImplemented()
- def sign(self, data):
+ def sign(self, data=None, digest=None):
# returns a list of method,signature tuples.
raise NotImplemented()
def checkSignature(self, method, data, signature):
@@ -213,7 +212,7 @@ class RSAKey(PublicKey):
def checkSignature(self, method, sig, obj=None, digest=None):
assert _xor(obj == None, digest == None)
if method != "sha256-pkcs1":
- raise UnknownMethod(method)
+ raise thandy.UnknownMethod(method)
if digest == None:
digest = thandy.formats.getDigest(obj)
sig = base64ToInt(sig)
diff --git a/lib/thandy/packagesys/ExePackages.py b/lib/thandy/packagesys/ExePackages.py
index 59be63e..1928ef3 100644
--- a/lib/thandy/packagesys/ExePackages.py
+++ b/lib/thandy/packagesys/ExePackages.py
@@ -36,8 +36,8 @@ class CommandInstaller(PS.Installer):
def __repr__(self):
parts = [ "CommandInstaller(%r, %r" %(self._relPath,
self._installCommand) ]
- if self.removeCommand:
- parts.append(", %r"%self.removeCommand)
+ if self._removeCommand:
+ parts.append(", %r"%self._removeCommand)
parts.append(")")
return "".join(parts)
diff --git a/lib/thandy/packagesys/PackageDB.py b/lib/thandy/packagesys/PackageDB.py
index 94a5ad9..7420868 100644
--- a/lib/thandy/packagesys/PackageDB.py
+++ b/lib/thandy/packagesys/PackageDB.py
@@ -42,7 +42,7 @@ class SimplePackageDB:
return self._db.get('pi_%s'%str(package))
def getManifest(self, package):
- return self._db.get('mf_%'%str(package), {})
+ return self._db.get('mf_%s'%str(package), {})
def removeAll(self, package):
for template in ["pv_%s", "ip_%s", "mf_%s"]:
@@ -59,7 +59,7 @@ def getPackageDBInstance():
fname = thandy.util.userFilename("db/packages")
logging.info("Opening package database in %s", fname)
_DB_INSTANCE = SimplePackageDB(fname)
- return _DB_INSTANCEx
+ return _DB_INSTANCE
class _DBMixin:
def setDB(self, db):
@@ -110,7 +110,7 @@ class DBChecker(PS.Checker, _DBMixin):
return [ self.getDB().getCurVersion(self._name) ]
def isInstalled(self):
- return self._version in self.getInstalledVersions(transaction)
+ return self._version in self.getInstalledVersions()
class DBInstaller(PS.Installer, _DBMixin):
def __init__(self, name, version, relPath, installer):
diff --git a/lib/thandy/packagesys/PackageSystem.py b/lib/thandy/packagesys/PackageSystem.py
index a521ca8..41d75e5 100644
--- a/lib/thandy/packagesys/PackageSystem.py
+++ b/lib/thandy/packagesys/PackageSystem.py
@@ -124,7 +124,7 @@ class PackageItem:
def setTransaction(self, transaction):
"""Set the transaction context for this item to 'transaction'.
"""
- if self._cheker is not None:
+ if self._checker is not None:
self._checker.setTransaction(transaction)
if self._installer is not None:
self._installer.setTransaction(transaction)
@@ -174,12 +174,12 @@ class Checker:
installed. Version types are item-dependent: a tuple or a
string is most common.
"""
- raise NotImplemented
+ raise NotImplemented()
def isInstalled(self):
"""Return true iff this particular version of this item is installed.
"""
- raise NotImplemented
+ raise NotImplemented()
class Installer:
"""Abstract base class. An Installer knows how to install or remove an
diff --git a/lib/thandy/packagesys/RPMPackages.py b/lib/thandy/packagesys/RPMPackages.py
index c710b8d..2c793e3 100644
--- a/lib/thandy/packagesys/RPMPackages.py
+++ b/lib/thandy/packagesys/RPMPackages.py
@@ -106,7 +106,7 @@ def checkRPMInstall(name, version, ts=None):
for fname, flags, md5sum in zip(h['filenames'], h['fileflags'], h['filemd5s']):
haveMD5 = fileMD5(fname)
if not haveMD5:
- if flags & RPMFILE_MISSINGOK:
+ if (flags & rpm.RPMFILE_MISSINGOK):
logging.info("%s is missing or unreadable from %s %s; "
"that's ok.", fname, name, h['version'])
else:
@@ -118,7 +118,7 @@ def checkRPMInstall(name, version, ts=None):
fname, name, h['version'])
else:
# file changed. If it's not configuration, that's a problem.
- if not flags & RPMFILE_CONFIG:
+ if not (flags & rpm.RPMFILE_CONFIG):
logging.warn("%s changed from installed version of %s %s",
fname, name, h['version'])
all_ok = False
diff --git a/lib/thandy/repository.py b/lib/thandy/repository.py
index bce79fb..6d1ece3 100644
--- a/lib/thandy/repository.py
+++ b/lib/thandy/repository.py
@@ -8,7 +8,6 @@ json = thandy.util.importJSON()
import logging
import os
-import threading
import time
MAX_TIMESTAMP_AGE = 3*60*60
@@ -90,20 +89,6 @@ class RepositoryFile:
self._main_obj = main_obj
self._mtime = mtime
- def _save(self, content=None):
- """Helper: Flush this object's contents to disk."""
- if content == None:
- content = sexpr.encode
-
- signed_obj,main_obj = self._checkContent(content)
-
- fname = self.getPath()
- thandy.util.replaceFile(fname, contents)
-
- self._signed_obj = signed_obj
- self._main_obj = main_obj
- self._mtime = time.time()
-
def _checkContent(self, content):
"""Helper. Check whether 'content' matches SIGNED_SCHEMA, and
self._schema (as appropraite). Return a tuple of the
@@ -279,7 +264,7 @@ class LocalRepository:
needRole='bundle')
return pkg
- def getRequestedFile(self, relPath, pkgSystems=None):
+ def getRequestedFile(self, relPath):
"""DOCDOC"""
for f in self._metaFiles:
if f.getRelativePath() == relPath:
diff --git a/lib/thandy/socksurls.py b/lib/thandy/socksurls.py
index d035a6c..ee556ab 100644
--- a/lib/thandy/socksurls.py
+++ b/lib/thandy/socksurls.py
@@ -70,7 +70,7 @@ class SocksHTTPConnection(httplib.HTTPConnection):
class SocksHTTPSConnection(httplib.HTTPSConnection):
def connect(self):
socket = socks_connect(self.host, self.port)
- ssl = socket.ssl(sock, None, None)
+ ssl = socket.ssl(socket, None, None)
self.sock = socket.FakeSocket(socket, ssl)
# URL handlers for HTTP and HTTPS urls that use socks instead of direct
diff --git a/lib/thandy/util.py b/lib/thandy/util.py
index e9db10a..90f251f 100644
--- a/lib/thandy/util.py
+++ b/lib/thandy/util.py
@@ -191,7 +191,7 @@ def getRegistryValue(keyname):
try:
settings = _winreg.OpenKey(base, key)
return _winreg.QueryValueEx(settings, value)[0]
- except (WindowsError, ValueError, TypeError):
+ except (OSError, ValueError, TypeError):
return None
finally:
if settings is not None: