mirror of
https://github.com/vitalif/viewvc-4intranet
synced 2019-04-16 04:14:59 +03:00
Compare commits
2 Commits
Author | SHA1 | Date | |
---|---|---|---|
![]() |
c0c7a33aa5 | ||
![]() |
fd44add349 |
22
CHANGES
22
CHANGES
@@ -1,3 +1,25 @@
|
|||||||
|
Version 0.9.4 (released 17-Aug-2005)
|
||||||
|
|
||||||
|
* security fix: omit forbidden/hidden modules from query results.
|
||||||
|
|
||||||
|
Version 0.9.3 (released 17-May-2005)
|
||||||
|
|
||||||
|
* security fix: disallow bad "content-type" input [CAN-2004-1062]
|
||||||
|
* security fix: disallow bad "sortby" and "cvsroot" input [CAN-2002-0771]
|
||||||
|
* security fix: omit forbidden/hidden modules from tarballs [CAN-2004-0915]
|
||||||
|
|
||||||
|
Version 0.9.2 (released 15-Jan-2001)
|
||||||
|
|
||||||
|
* fix redirects to Attic for diffs
|
||||||
|
* fix diffs that have no changes (causing an infinite loop)
|
||||||
|
|
||||||
|
Version 0.9.1 (released 26-Dec-2001)
|
||||||
|
|
||||||
|
* fix a problem with some syntax in ndiff.py which isn't compatible
|
||||||
|
with Python 1.5.2 (causing problems at install time)
|
||||||
|
* remove a debug statement left in the code which continues to
|
||||||
|
append lines to /tmp/log
|
||||||
|
|
||||||
Version 0.9 (released 23-Dec-2001)
|
Version 0.9 (released 23-Dec-2001)
|
||||||
|
|
||||||
* create templates for the rest of the pages: markup pages, graphs,
|
* create templates for the rest of the pages: markup pages, graphs,
|
||||||
|
@@ -295,6 +295,12 @@ def build_commit(desc, files):
|
|||||||
ob.desc = ' '
|
ob.desc = ' '
|
||||||
|
|
||||||
for commit in files:
|
for commit in files:
|
||||||
|
dir_parts = filter(None, string.split(commit.GetDirectory(), '/'))
|
||||||
|
if dir_parts \
|
||||||
|
and ((dir_parts[0] == 'CVSROOT' and cfg.options.hide_cvsroot) \
|
||||||
|
or cfg.is_forbidden(dir_parts[0])):
|
||||||
|
continue
|
||||||
|
|
||||||
ctime = commit.GetTime()
|
ctime = commit.GetTime()
|
||||||
if not ctime:
|
if not ctime:
|
||||||
ctime = " ";
|
ctime = " ";
|
||||||
|
@@ -25,7 +25,7 @@
|
|||||||
# -----------------------------------------------------------------------
|
# -----------------------------------------------------------------------
|
||||||
#
|
#
|
||||||
|
|
||||||
__version__ = '1.0-dev'
|
__version__ = '0.9.4'
|
||||||
|
|
||||||
#########################################################################
|
#########################################################################
|
||||||
#
|
#
|
||||||
@@ -248,9 +248,10 @@ def redirect(location):
|
|||||||
sys.exit(0)
|
sys.exit(0)
|
||||||
|
|
||||||
def error(msg, status='500 Internal Server Error'):
|
def error(msg, status='500 Internal Server Error'):
|
||||||
|
print 'Content-type: text/html'
|
||||||
print 'Status:', status
|
print 'Status:', status
|
||||||
print
|
print
|
||||||
print msg
|
print cgi.escape(msg)
|
||||||
sys.exit(0)
|
sys.exit(0)
|
||||||
|
|
||||||
def generate_page(request, tname, data):
|
def generate_page(request, tname, data):
|
||||||
@@ -1105,7 +1106,8 @@ def view_directory(request):
|
|||||||
view_tag = query_dict.get('only_with_tag')
|
view_tag = query_dict.get('only_with_tag')
|
||||||
hideattic = int(query_dict.get('hideattic')) ### watch for errors in int()?
|
hideattic = int(query_dict.get('hideattic')) ### watch for errors in int()?
|
||||||
sortby = query_dict.get('sortby', 'file')
|
sortby = query_dict.get('sortby', 'file')
|
||||||
|
if not re.match('^[a-z]+$', sortby):
|
||||||
|
raise 'illegal value for sortby parameter'
|
||||||
search_re = query_dict.get('search')
|
search_re = query_dict.get('search')
|
||||||
|
|
||||||
# Search current directory
|
# Search current directory
|
||||||
@@ -1841,8 +1843,8 @@ def process_checkout(full_name, where, query_dict, default_mime_type):
|
|||||||
|
|
||||||
mime_type = query_dict.get('content-type')
|
mime_type = query_dict.get('content-type')
|
||||||
if mime_type:
|
if mime_type:
|
||||||
### validate it?
|
if not re.match('^[-_.a-zA-Z0-9/]+$', mime_type):
|
||||||
pass
|
raise 'illegal value for content-type parameter'
|
||||||
else:
|
else:
|
||||||
mime_type = default_mime_type
|
mime_type = default_mime_type
|
||||||
|
|
||||||
@@ -2184,6 +2186,8 @@ class DiffSource:
|
|||||||
self.left = None
|
self.left = None
|
||||||
self.right = None
|
self.right = None
|
||||||
self.state = 'no-changes'
|
self.state = 'no-changes'
|
||||||
|
self.left_col = [ ]
|
||||||
|
self.right_col = [ ]
|
||||||
|
|
||||||
def __getitem__(self, idx):
|
def __getitem__(self, idx):
|
||||||
if idx == self.idx:
|
if idx == self.idx:
|
||||||
@@ -2199,7 +2203,6 @@ class DiffSource:
|
|||||||
if item:
|
if item:
|
||||||
self.idx = idx
|
self.idx = idx
|
||||||
self.last = item
|
self.last = item
|
||||||
open('/tmp/log','a').write('idx=%d item=%s\n' % (idx,vars(item)))
|
|
||||||
return item
|
return item
|
||||||
|
|
||||||
def _get_row(self):
|
def _get_row(self):
|
||||||
@@ -2214,9 +2217,10 @@ class DiffSource:
|
|||||||
self.save_line = None
|
self.save_line = None
|
||||||
else:
|
else:
|
||||||
line = self.fp.readline()
|
line = self.fp.readline()
|
||||||
|
|
||||||
if not line:
|
if not line:
|
||||||
if self.state == 'no-changes':
|
if self.state == 'no-changes':
|
||||||
self.state == 'done'
|
self.state = 'done'
|
||||||
return _item(type='no-changes')
|
return _item(type='no-changes')
|
||||||
|
|
||||||
# see if there are lines to flush
|
# see if there are lines to flush
|
||||||
@@ -2450,6 +2454,9 @@ def generate_tarball(out, relative, directory, tag, stack=[]):
|
|||||||
for file, pathname, isdir in get_file_data(directory):
|
for file, pathname, isdir in get_file_data(directory):
|
||||||
if pathname == _UNREADABLE_MARKER:
|
if pathname == _UNREADABLE_MARKER:
|
||||||
continue
|
continue
|
||||||
|
if (file == 'CVSROOT' and cfg.options.hide_cvsroot) \
|
||||||
|
or cfg.is_forbidden(file):
|
||||||
|
continue
|
||||||
if isdir:
|
if isdir:
|
||||||
subdirs.append(file)
|
subdirs.append(file)
|
||||||
else:
|
else:
|
||||||
@@ -2607,10 +2614,12 @@ def main():
|
|||||||
else:
|
else:
|
||||||
# if the file is in the Attic, then redirect
|
# if the file is in the Attic, then redirect
|
||||||
idx = string.rfind(full_name, '/')
|
idx = string.rfind(full_name, '/')
|
||||||
attic_name = full_name[:idx] + '/Attic' + full_name[idx:] + ',v'
|
attic_name = full_name[:idx] + '/Attic' + full_name[idx:]
|
||||||
if os.path.isfile(attic_name):
|
if os.path.isfile(attic_name + ',v') or \
|
||||||
|
full_name[-5:] == '.diff' and os.path.isfile(attic_name[:-5] + ',v'):
|
||||||
idx = string.rfind(url, '/')
|
idx = string.rfind(url, '/')
|
||||||
redirect(url[:idx] + '/Attic' + url[idx:])
|
redirect(url[:idx] + '/Attic' + url[idx:] + \
|
||||||
|
'?' + compat.urlencode(query_dict))
|
||||||
|
|
||||||
error('%s: unknown location' % request.url, '404 Not Found')
|
error('%s: unknown location' % request.url, '404 Not Found')
|
||||||
|
|
||||||
|
@@ -13,7 +13,7 @@
|
|||||||
</td>
|
</td>
|
||||||
<td align=center valign=top bgcolor="white" width="1%">
|
<td align=center valign=top bgcolor="white" width="1%">
|
||||||
<b>Quickstart:</b>
|
<b>Quickstart:</b>
|
||||||
<a href="viewcvs-0.9.tar.gz">download</a>
|
<a href="viewcvs-0.9.4.tar.gz">download</a>
|
||||||
</td>
|
</td>
|
||||||
<td width="1%"><a href="http://sourceforge.net/"><img border=0
|
<td width="1%"><a href="http://sourceforge.net/"><img border=0
|
||||||
src="http://sourceforge.net/sflogo.php?group_id=18760&type=1"></a><br><a href="http://sourceforge.net/projects/viewcvs/">ViewCVS project page</a>
|
src="http://sourceforge.net/sflogo.php?group_id=18760&type=1"></a><br><a href="http://sourceforge.net/projects/viewcvs/">ViewCVS project page</a>
|
||||||
@@ -210,10 +210,10 @@
|
|||||||
The software is available for download:
|
The software is available for download:
|
||||||
</p>
|
</p>
|
||||||
<blockquote>
|
<blockquote>
|
||||||
<a href="viewcvs-0.9.tar.gz">Version 0.9 of ViewCVS as a gzipped
|
<a href="viewcvs-0.9.4.tar.gz">Version 0.9.4 of ViewCVS as a gzipped
|
||||||
tar</a>
|
tar</a>
|
||||||
<br>
|
<br>
|
||||||
<a href="viewcvs-0.9.zip">Version 0.9 of ViewCVS as a ZIP
|
<a href="viewcvs-0.9.4.zip">Version 0.9.4 of ViewCVS as a ZIP
|
||||||
file</a>
|
file</a>
|
||||||
</blockquote>
|
</blockquote>
|
||||||
<p>
|
<p>
|
||||||
@@ -299,7 +299,7 @@
|
|||||||
<address><a href="mailto:viewcvs@lyra.org">ViewCVS Users Group</a></address>
|
<address><a href="mailto:viewcvs@lyra.org">ViewCVS Users Group</a></address>
|
||||||
<!-- Created: Fri Dec 3 02:51:37 PST 1999 -->
|
<!-- Created: Fri Dec 3 02:51:37 PST 1999 -->
|
||||||
<!-- hhmts start -->
|
<!-- hhmts start -->
|
||||||
Last modified: Sun Dec 23 03:23:09 PST 2001
|
Last modified: Tue Jan 15 01:51:03 PST 2002
|
||||||
<!-- hhmts end -->
|
<!-- hhmts end -->
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
Reference in New Issue
Block a user