Subversion Repositories pub

Compare Revisions

No changes between revisions

Ignore whitespace Rev 130 → Rev 131

/relevation/trunk/relevation
File deleted
Property changes:
Deleted: svn:executable
Deleted: svn:keywords
-Rev Id Date
\ No newline at end of property
/relevation/trunk/LICENSE
0,0 → 1,24
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
are met:
1. Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
3. Neither the name of the University nor the names of its contributors
may be used to endorse or promote products derived from this software
without specific prior written permission.
.
THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
SUCH DAMAGE.
 
/relevation/trunk/debian
0,0 → 1,0
link upstream.debian/
Property changes:
Added: svn:special
+*
\ No newline at end of property
/relevation/trunk/CHANGELOG
0,0 → 1,14
0.2.0 (2011-06-27) (unreleased)
- Allow multiple queries in one run
- Consider positional arguments as queries
- Feedback enhancements
- Added Makefile for installation
- Added --help and --version
- Added debian packaging
- Handle input errors more gracefully
- Added manpage
- GNU-style getopt
 
0.1.0 (2011-06-24) (internal)
- Initial proof of concept
 
/relevation/trunk/relevation.1
0,0 → 1,61
.TH "RELEVATION" "1"
.SH "NAME"
relevation \(em command-line searcher for \fBRevelation\fP files
.SH "SYNOPSIS"
.PP
\fBrelevation\fR\fB \-f \fI/path/to/file.\fR\fP\fB \-p \fIpassword\fR\fP [\fBsearch string\fP]
.SH "DESCRIPTION"
.PP
Access and print or search passwords in a \fBRevelation\fP password
file.
.PP
Only read access is provided, to edit the files \fBRevelation\fP must be used.
.PP
With a search string, only entries that match the search string in any
of its fields will be printed.
.PP
When no search string is provided the whole, unencrypted, XML file will be
printed.
.SH "OPTIONS"
.PP
This program follows the usual command line syntax,
with long options starting with two dashes (`\-'). A summary of
options is included below. For a complete description, see the
\fBInfo\fP files.
.IP "\fB-f \fIfile.revelation\fR\fP, \fB\-\-file=\fIfile.revelation\fR\fP " 10
File name of the \fBrevelation\fR file (the file
containing the list of stored credentials).
.IP "\fB-p \fIpassword\fR\fP, \fB\-\-password=\fIpassword\fR\fP " 10
Decryption password.
.IP "\fB-a\fP, \fB\-\-ask, \fB-0\fP, \fB\-\-stdin\fP\fP " 10
Ask interactively for password.
.IP "" 10
When \fB-a\fP or \fB\-\-ask\fP is used a prompt will be printed.
.IP "" 10
Use either one of this variants or \fB\-\-password\fP.
.IP "\fB-i\fP, \fB\-\-case-insensitive\fP " 10
When searching for text, disregard case.
.IP "" 10
This is the default behaviour.
.IP "" 10
If the search string contains special/non-English characters this is
likely to fail.
.IP "\fB-c\fP, \fB\-\-case-sensitive\fP " 10
When searching for text, obey case.
.IP "\fB-s \fIsearch string\fR\fP, \fB\-\-search=\fIsearch string\fR\fP, \fB\fIsearch string\fR\fP " 10
Search the file for a pice of text. All fields will be searched.
.IP "\fB-h\fP, \fB\-\-help\fP " 10
Show summary of options.
.IP "\fB\-\-version\fP " 10
Show version of program.
.SH "SEE ALSO"
.PP
revelation (1)
.SH "AUTHOR"
.PP
This manual page was written by Toni Corvera outlyer@gmail.com.
Permission is
granted to copy, distribute and/or modify this document under
the terms of a BSD 3-clause license.
.\" created by instant / docbook-to-man, Mon 27 Jun 2011, 04:51
/relevation/trunk/manpage.sgml
0,0 → 1,185
<!doctype refentry PUBLIC "-//OASIS//DTD DocBook V4.1//EN" [
 
<!--
This file is derived from Debian's template for added manpages.
 
Process this file with docbook-to-man to generate an nroff manual
page: `docbook-to-man manpage.sgml > manpage.1'. You may view
the manual page with: `docbook-to-man manpage.sgml | nroff -man |
less'. A typical entry in a Makefile or Makefile.am is:
 
manpage.1: manpage.sgml
docbook-to-man $< > $@
-->
 
<!-- Fill in your name for FIRSTNAME and SURNAME. -->
<!ENTITY dhfirstname "<firstname>Toni</firstname>">
<!ENTITY dhsurname "<surname>Corvera</surname>">
<!-- Please adjust the date whenever revising the manpage. -->
<!ENTITY dhdate "<date>June 27, 2011</date>">
<!-- SECTION should be 1-8, maybe w/ subsection other parameters are
allowed: see man(7), man(1). -->
<!ENTITY dhsection "<manvolnum>1</manvolnum>">
<!ENTITY dhemail "<email>outlyer@gmail.com</email>">
<!ENTITY dhusername "Toni Corvera">
<!ENTITY dhucpackage "<refentrytitle>RELEVATION</refentrytitle>">
<!ENTITY dhpackage "relevation">
]>
 
<refentry>
<refentryinfo>
<address>
&dhemail;
</address>
<author>
&dhfirstname;
&dhsurname;
</author>
<copyright>
<year>2003</year>
<holder>&dhusername;</holder>
</copyright>
&dhdate;
</refentryinfo>
<refmeta>
&dhucpackage;
 
&dhsection;
</refmeta>
<refnamediv>
<refname>&dhpackage;</refname>
 
<refpurpose>command-line searcher for <application>Revelation</application> files</refpurpose>
</refnamediv>
<refsynopsisdiv>
<cmdsynopsis>
<command>&dhpackage;</command>
<option> -f <replaceable>/path/to/file.</replaceable></option>
 
<option> -p <replaceable>password</replaceable></option>
 
<arg><option>search string</option></arg>
</cmdsynopsis>
</refsynopsisdiv>
<refsect1>
<title>DESCRIPTION</title>
 
<para>Access and print or search passwords in a <application>Revelation</application> password
file.</para>
 
<para>Only read access is provided, to edit the files <application>Revelation</application>
must be used.</para>
 
<para>With a search string, only entries that match the search string in any
of its fields will be printed.</para>
 
<para>When no search string is provided the whole, unencrypted, XML file will be
printed.</para>
 
</refsect1>
<refsect1>
<title>OPTIONS</title>
 
<para>This program follows the usual &gnu; command line syntax,
with long options starting with two dashes (`-'). A summary of
options is included below. For a complete description, see the
<application>Info</application> files.</para>
 
<variablelist>
<varlistentry>
<term><option>-f <replaceable>file.revelation</replaceable></option>, <option>--file=<replaceable>file.revelation</replaceable></option>
</term>
<listitem>
<para>File name of the <command>revelation</command> file (the file
containing the list of stored credentials).</para>
</listitem>
</varlistentry>
<varlistentry>
<term><option>-p <replaceable>password</replaceable></option>, <option>--password=<replaceable>password</replaceable></option>
</term>
<listitem>
<para>Decryption password.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><option>-a</option>, <option>--ask, <option>-0</option>, <option>--stdin</option></option>
</term>
<listitem>
<para>Ask interactively for password.</para>
<para>When <option>-a</option> or <option>--ask</option> is used a prompt will be printed.</para>
<para>Use either one of this variants or <option>--password</option>.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><option>-i</option>, <option>--case-insensitive</option>
</term>
<listitem>
<para>When searching for text, disregard case.</para>
<para>This is the default behaviour.</para>
<para>If the search string contains special/non-English characters this is
likely to fail.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><option>-c</option>, <option>--case-sensitive</option>
</term>
<listitem>
<para>When searching for text, obey case.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><option>-s <replaceable>search string</replaceable></option>, <option>--search=<replaceable>search string</replaceable></option>, <option><replaceable>search string</replaceable></option>
</term>
<listitem>
<para>Search the file for a pice of text. All fields will be searched.</para>
</listitem>
</varlistentry>
 
<varlistentry>
<term><option>-h</option>, <option>--help</option>
</term>
<listitem>
<para>Show summary of options.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><option>--version</option>
</term>
<listitem>
<para>Show version of program.</para>
</listitem>
</varlistentry>
</variablelist>
</refsect1>
<refsect1>
<title>SEE ALSO</title>
 
<para>revelation (1)</para>
</refsect1>
<refsect1>
<title>AUTHOR</title>
 
<para>This manual page was written by &dhusername; &dhemail;.
Permission is
granted to copy, distribute and/or modify this document under
the terms of a BSD 3-clause license.
</para>
</refsect1>
</refentry>
 
<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:2
sgml-indent-data:t
sgml-parent-document:nil
sgml-default-dtd-file:nil
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
-->
/relevation/trunk/Makefile
0,0 → 1,32
 
prefix:=/usr/local
DESTDIR:=
 
PKG=relevation
VERSION=$(shell echo -e 'import relevation\nprint relevation.__version__' | python -)
PKGVER=$(PKG)-$(VERSION)
 
 
all: $(PKG).1
 
clean:
-$(RM) $(PKG).pyc
 
install:
install -D -m755 $(PKG).py $(DESTDIR)$(prefix)/bin/$(PKG)
install -D -m644 $(PKG).1 $(DESTDIR)$(prefix)/share/man/man1/$(PKG).1
 
uninstall:
-$(RM) $(DESTDIR)$(prefix)/$(PKG)
-rmdir --parents $(DESTDIR)$(prefix)/bin
 
$(PKG).1: manpage.sgml
docbook-to-man $< > $@
 
TAR_EXCLUDES=--exclude=debian --exclude-vcs --exclude=$(PKGVER) --exclude=*.pyo --exclude=*.pyc
dist: clean
-$(RM) $(PKGVER).tar.gz
-mkdir $(PKGVER)
tar c . $(TAR_EXCLUDES) | ( cd $(PKGVER) && tar x )
tar zcvf $(PKGVER).tar.gz $(PKGVER)
-$(RM) -r $(PKGVER)
/relevation/trunk/relevation.py
0,0 → 1,203
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
 
"""
Relevation Password Printer
a command line interface to Revelation Password Manager.
 
This program is published under a BSD 3-clause license,
the full license text is included in a separate file.
 
Code based on Revelation's former BTS (no longer online, not archived?):
(ref1) code:
http://oss.wired-networks.net/bugzilla/attachment.cgi?id=13&action=view
(ref2) bug report:
http://oss.wired-networks.net/bugzilla/show_bug.cgi?id=111
-> http://web.archive.org/http://oss.wired-networks.net/bugzilla/show_bug.cgi?id=111
(ref3) http://docs.python.org/library/zlib.html
"""
import getopt
import libxml2
import os
import sys
import zlib
from Crypto.Cipher import AES
 
 
__author__ = 'Toni Corvera'
__date__ = '$Date$'
__revision__ = '$Rev$'
__version_info__ = ( 0, 2, 0 )
__version__ = '.'.join(map(str, __version_info__))
RELEASE=True
 
def usage(channel):
def p(s):
channel.write(s)
p('%s {-f passwordfile} {-p password | -0} search [search2] [...]\n' % sys.argv[0])
p('\nOptions:\n')
p(' -f <FILE>, --file=<FILE> Revelation password file\n')
p(' -p <PASS>, --password=<PASS> Master password\n')
p(' -s <SEARCH>, --search=<SEARCH> Search for string\n')
p(' -i, --case-insensitive Case insensitive search [default]\n')
p(' -c, --case-sensitive Case sensitive search\n')
p(' -a, --ask Interactively ask for password.\n')
p(' Note it will be displayed in clear as you\n')
p(' type it.\n')
p(' -0, --stdin Read password from standard input\n')
p(' -h, --help Print help (this message).\n')
p(' --version Print the program\'s version information.\n')
p('\n')
 
def search(xmldata, search, caseInsensitive=True):
doc = libxml2.parseDoc(xmldata)
ctxt = doc.xpathNewContext()
commonXPath = '//revelationdata//entry[@type!="folder"]//text()'
caseSensitiveXPath = '[contains(., "%s")]/../..' % search
caseInsensitiveXPath = '[contains(translate(., "ABCDEFGHIJKLMNOPQRSTUVWXYZ", "abcdefghijklmnopqrstuvwxyz"), "%s")]/../..' % search
if caseInsensitive:
xpath = commonXPath + caseInsensitiveXPath
else:
xpath = commonXPath + caseSensitiveXPath
res = ctxt.xpathEval(xpath)
print '-> Search "%s": ' % search,
if not len(res):
print 'No results'
sys.exit(80)
print '%d matches' % len(res)
tagnames ={ 'generic-url': 'Url:',
'generic-username': 'Username:',
'generic-password': 'Password:',
'generic-email': 'Email:',
'generic-hostname': 'Hostname:',
}
for x in res:
print '- * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - '
print ''
for attr in x.properties: # Is it accessible directly?
if attr.name == 'type':
print 'Type:',attr.children
for chld in x.children:
n = chld.name
val = chld.content
if n == 'name':
print 'Name:',val
elif n == 'description':
print 'Description:',val
elif n == 'field':
for attr in chld.properties:
if attr.name == 'id':
idv = attr.content
if idv in tagnames:
idv = tagnames[idv]
print idv,chld.content
print ''
# / for chld in x.children
nr = len(res)
plural = ''
if nr > 1:
plural = 's'
sys.stderr.write('<- (end of %d result%s for "%s")\n\n' % ( nr, plural, search ))
doc.freeDoc()
ctxt.xpathFreeContext()
 
def main():
datafile = None
password = None
searches = []
caseInsensitive = True
 
sys.stderr.write('Relevation v%s, (c) 2011 Toni Corvera\n\n' % __version__)
try:
# gnu_getopt requires py >= 2.3
ops, args = getopt.gnu_getopt(sys.argv[1:], 'f:p:s:0ciah',
[ 'file=', 'password=', 'search=', 'stdin',
'case-sensitive', 'case-insensitive', 'ask',
'help', 'version' ])
except getopt.GetoptError, err:
print str(err)
usage(sys.stderr)
sys.exit(os.EX_USAGE)
if args:
searches = args
 
if ( '-h', '' ) in ops or ( '--help', '' ) in ops:
usage(sys.stdout)
sys.exit(os.EX_OK)
if ( '--version', '' ) in ops:
release=''
if not RELEASE:
release=' [DEBUG]'
print 'Relevation version %s%s' % ( __version__, release )
print 'Python version %s' % sys.version
sys.exit(os.EX_OK)
 
for opt, arg in ops:
if opt in ( '-f', '--file' ):
datafile = arg
elif opt in ( '-p', '--password' ):
password = arg
elif opt in ( '-a', '--ask', '-0', '--stdin' ):
if opt in ( '-a', '--ask' ):
sys.stderr.write('File password: ')
password = sys.stdin.readline()
password = password[:-1]
elif opt in ( '-s', '--search' ):
searches.append(arg)
elif opt in ( '-i', '--case-insensitive' ):
caseInsensitive = True
elif opt in ( '-c', '--case-sensitive' ):
caseInsensitive = False
else:
sys.stderr.write('Unhandled option: %s\n' % opt)
assert False, "internal error parsing options"
if not datafile or not password:
usage(sys.stderr)
if not datafile:
sys.stderr.write('Input password filename is required\n')
if not password:
sys.stderr.write('Password is required\n')
sys.exit(os.EX_USAGE)
# Encrypted data
f = None
try:
if not os.access(datafile, os.R_OK):
raise IOError('File \'%s\' not accessible' % datafile)
f = open(datafile, "rb")
data = f.read()
finally:
if f:
f.close()
# Pad password
password += (chr(0) * (32 - len(password)))
# Data IV
c = AES.new(password)
iv = c.decrypt(data[12:28])
# Decrypt. Decrypted data is compressed
c = AES.new(password, AES.MODE_CBC, iv)
cleardata_gz = c.decrypt(data[28:])
# Length of data padding
padlen = ord(cleardata_gz[-1])
# Decompress actual data (15 is wbits [ref3] DON'T CHANGE, 2**15 is the (initial) buf size)
xmldata = zlib.decompress(cleardata_gz[:-padlen], 15, 2**15)
if not searches:
print xmldata
sys.exit(os.EX_OK)
for s in searches:
search(xmldata, s, caseInsensitive)
 
if __name__ == '__main__':
try:
main()
except libxml2.parserError as e:
sys.stderr.write('XML parsing error\n')
if not RELEASE:
traceback.print_exc()
sys.exit(os.EX_DATAERR)
except IOError as e:
if not RELEASE:
traceback.print_exc()
sys.stderr.write(str(e)+"\n")
sys.exit(os.EX_IOERR)
 
# vim:set ts=4 et ai fileencoding=utf-8: #
Property changes:
Added: svn:executable
Added: svn:keywords
+Rev Id Date
\ No newline at end of property
/relevation/trunk/upstream.debian/docs
--- upstream.debian/control (nonexistent)
+++ upstream.debian/control (revision 131)
@@ -0,0 +1,19 @@
+Source: relevation
+Section: contrib/utils
+Priority: extra
+Maintainer: Toni Corvera <outlyer@gmail.com>
+Build-Depends: debhelper (>= 7.0.50~)
+Standards-Version: 3.9.1
+Homepage: http://p.outlyer.net/relevation/
+#Vcs-Git: git://git.debian.org/collab-maint/relevation.git
+#Vcs-Browser: http://git.debian.org/?p=collab-maint/relevation.git;a=summary
+
+Package: relevation
+Architecture: all
+Depends: ${shlibs:Depends}, ${misc:Depends}, python (>= 2.3), python-libxml2, python-crypto
+Recommends: revelation
+Description: Command-line interface to query Revelation files
+ This is a command-line tool capable of retrieving passwords from
+ a Revelation password file.
+ .
+ Please note files can only be searched, not edited with this tool.
/relevation/trunk/upstream.debian/README.source
0,0 → 1,7
relevation for Debian
---------------------
 
The upstream source includes a default set of Debian
packaging scripts in the upstream.debian/ directory (linked
by default as debian/ to allow direct construction of the package)
 
/relevation/trunk/upstream.debian/source/format
0,0 → 1,0
3.0 (quilt)
/relevation/trunk/upstream.debian/compat
0,0 → 1,0
7
/relevation/trunk/upstream.debian/changelog
0,0 → 1,5
relevation (0.2-upstream.1) unstable; urgency=low
 
* Initial release
 
-- Toni Corvera <outlyer@gmail.com> Mon, 27 Jun 2011 01:44:10 +0200
/relevation/trunk/upstream.debian/copyright
0,0 → 1,37
Format: http://dep.debian.net/deps/dep5
Upstream-Name: relevation
Source: http://p.outlyer.net/revelation/
 
Files: *
Copyright: 2011 Toni Corvera <outlyer@gmail.com>
License: BSD-3-Clause
 
Files: debian/*
Copyright: 2011 Toni Corvera <outlyer@gmail.com>
License: BSD-3-Clause
 
License: BSD-3-Clause
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
are met:
1. Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
3. Neither the name of the University nor the names of its contributors
may be used to endorse or promote products derived from this software
without specific prior written permission.
.
THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
SUCH DAMAGE.
 
/relevation/trunk/upstream.debian/rules
0,0 → 1,17
#!/usr/bin/make -f
# -*- makefile -*-
# Sample debian/rules that uses debhelper.
# This file was originally written by Joey Hess and Craig Small.
# As a special exception, when this file is copied by dh-make into a
# dh-make output file, you may use that output file without restriction.
# This special exception was added by Craig Small in version 0.37 of dh-make.
 
# Uncomment this to turn on verbose mode.
#export DH_VERBOSE=1
 
%:
dh $@
 
override_dh_auto_install:
$(MAKE) DESTDIR=$(CURDIR)/debian/relevation prefix=/usr install
 
Property changes:
Added: svn:executable
+*
\ No newline at end of property
/relevation/trunk/upstream.debian/README.Debian
0,0 → 1,8
relevation for Debian
---------------------
 
This package is derived from the upstream tarball's Debian
packaging scripts. Those are not written by a Debian developer
so they may inadvertently break packaging rules or conventions.
 
-- Toni Corvera <outlyer@gmail.com> Mon, 27 Jun 2011 01:44:10 +0200
/relevation/trunk/.
Property changes:
Added: svn:mergeinfo
Merged /relevation/branches/0.2:r122-130