Changeset 232
- Timestamp:
- 04/28/11 12:45:10 (14 years ago)
- Files:
-
- 10 edited
Legend:
- Unmodified
- Added
- Removed
-
SConstruct
r226 r232 1 import sys 2 import os 3 1 4 cflags = '-std=gnu99 -pedantic -Wall -D_FILE_OFFSET_BITS=64 -DREGFI_WIN32' 2 5 3 libiconv_path=' win32/libiconv/'4 libpthreads_path=' win32/libpthreads/'6 libiconv_path='.export/win32/libiconv/' 7 libpthreads_path='.export/win32/libpthreads/' 5 8 libpthread_name='pthreadGC2' 6 libtalloc_path=' win32/libtalloc/'9 libtalloc_path='.export/win32/libtalloc/' 7 10 8 source_targets=(' reglookup-src-trunk.tar.gz',)9 win32_targets=(' reglookup-win32-trunk.zip',)10 doc_targets=(' reglookup-doc-trunk.tar.gz',)11 all_targets = source_targets+win32_targets+doc_targets 11 source_targets=('src-trunk',) 12 win32_targets=('win32-trunk',) 13 doc_targets=('doc-trunk',) 14 all_targets = source_targets+win32_targets+doc_targets 12 15 13 def target2version(target): 16 17 18 def parse_target(target): 14 19 chunks = target.split('-') 15 if len(chunks) != 3:20 if len(chunks) != 2: 16 21 return None 17 return chunks [2].split('.')[0]22 return chunks 18 23 19 24 def version2input(version): … … 24 29 25 30 26 source_cmds='''27 rm -rf . release;28 svn export svn+ssh://sentinelchicken.org/home/projects/subversion/reglookup/$SOURCE .release/%s;29 cd .release/%s && sconsdoc30 cd .release && tar cf %s.tar %s && gzip -9 %s.tar; 31 mv .release/%s.tar.gz . && rm -rf .release 31 export_cmds=''' 32 rm -rf .export 33 svn export --depth files svn+ssh://sentinelchicken.org/home/projects/subversion/reglookup .export 34 svn export svn+ssh://sentinelchicken.org/home/projects/subversion/reglookup/doc .export/doc 35 svn export svn+ssh://sentinelchicken.org/home/projects/subversion/reglookup/win32 .export/win32 36 svn export svn+ssh://sentinelchicken.org/home/projects/subversion/reglookup/%s .export/%s 32 37 ''' 33 38 39 version_cmds=''' 40 echo 'REGFI_VERSION="%s"' > .export/%s/regfi_version.py 41 ''' 42 43 cleanup_cmds=''' 44 rm -rf .export 45 ''' 46 47 source_cmds=''' 48 cd %s && scons doc 49 mv %s %s && tar cf %s.tar %s && gzip -9 %s.tar; 50 '''+cleanup_cmds 51 34 52 win32_cmds=''' 35 rm -rf .release &&mkdir -p .release/%s/python/pyregfi53 mkdir -p .release/%s/python/pyregfi 36 54 cp %s/src/*.exe .release/%s 37 55 … … 39 57 cp %s/python/pyregfi/*.py .release/%s/python/pyregfi 40 58 41 cp win32/libiconv/bin/*.dll win32/libpthreads/bin/*.dllwin32/libtalloc/bin/*.dll trunk/lib/*.dll .release/%s59 cp .export/win32/libiconv/bin/*.dll .export/win32/libpthreads/bin/*.dll .export/win32/libtalloc/bin/*.dll trunk/lib/*.dll .release/%s 42 60 cd .release && zip -r %s.zip %s 43 61 mv .release/%s.zip . && rm -rf .release 44 ''' 62 '''+cleanup_cmds 45 63 46 64 doc_cmds=''' 47 rm -rf .release; 48 svn export svn+ssh://sentinelchicken.org/home/projects/subversion/reglookup/ .release; 49 cd .release && doxygen Doxyfile.regfi 50 cd .release && doxygen Doxyfile.pyregfi 51 mv .release/doc .release/%s 52 cd .release && tar cf %s.tar %s && gzip -9 %s.tar; 53 mv .release/%s.tar.gz . && rm -rf .release 54 ''' 65 cd .export && doxygen Doxyfile.regfi 66 cd .export && doxygen Doxyfile.pyregfi 67 mv .export/doc .export/%s 68 cd .export && tar cf %s.tar %s && gzip -9 %s.tar 69 mv .export/%s.tar.gz . 70 '''+cleanup_cmds 55 71 56 72 def generate_cmds(source, target, env, for_signature): 57 73 ret_val = '' 74 input_prefix = str(source[0])+'/' 75 58 76 for t in target: 59 t = str(t) 60 t_base = t.split('.tar.gz')[0].split('.zip')[0] 61 if t in source_targets: 62 ret_val += source_cmds % (t_base,t_base,t_base, 63 t_base,t_base,t_base) 64 elif t in win32_targets: 65 version = target2version(t) 66 input_prefix = version2input(version) 77 ttype,version = parse_target(str(t)) 78 t_base = 'reglookup-%s-%s' % (ttype, version) 67 79 80 if ttype == 'src': 81 ret_val += source_cmds % (input_prefix, input_prefix, t_base, t_base, t_base, t_base) 82 elif ttype == 'win32': 68 83 env['platform']='cygwin' 69 84 env['CC']='i586-mingw32msvc-cc' … … 122 137 123 138 ret_val += win32_cmds % (t_base,input_prefix,t_base,input_prefix, 124 t_base,input_prefix, 125 t_base,t_base,t_base,t_base ,t_base)139 t_base,input_prefix,t_base, 140 t_base,t_base,t_base,t_base) 126 141 127 elif t in doc_targets:142 elif ttype == 'doc': 128 143 ret_val += doc_cmds % (t_base,t_base,t_base,t_base,t_base) 129 144 … … 131 146 132 147 133 134 148 release_builder = Builder(generator = generate_cmds, 135 suffix = ' .tar.gz',149 suffix = '', 136 150 src_suffix = '', 137 prefix='reglookup-') 138 151 prefix='') 139 152 140 153 env = Environment() 154 env['ENV']['SSH_AGENT_PID'] = os.environ['SSH_AGENT_PID'] 155 env['ENV']['SSH_AUTH_SOCK'] = os.environ['SSH_AUTH_SOCK'] 141 156 env['BUILDERS']['Release'] = release_builder 142 157 … … 145 160 146 161 for target in COMMAND_LINE_TARGETS: 147 AlwaysBuild(target)148 162 if target not in all_targets: 149 163 print('ERROR: cannot build "%s". Acceptable targets: %s' 150 164 % (target, repr(all_targets))) 151 break 152 env.Release(target, Dir(version2input(target2version(target)))) 165 sys.exit(1) 166 AlwaysBuild(target) 167 ttype,version = parse_target(target) 168 169 i = version2input(version) 170 env.Execute(export_cmds % (i, i)) 171 if version != 'trunk': 172 env.Execute(version_cmds % (version, i)) 173 env.Release(target, Dir('.export/'+i)) 153 174 154 175 Default(None) -
doc/TODO
r221 r232 38 38 39 39 - Grep through the source for 'XXX', and you'll find more. 40 41 42 43 1.0 RELEASE 44 =========== 45 46 Add fields/methods for accessing security descriptors in pyregfi 47 48 Key caching 49 50 Add function to obtain path list from iterator 51 52 convert MTIME structure to uint64_t if possible 53 54 investigate why file descriptors can't be directly used in Windows 55 56 Fill in and update remaining regfi/pyregfi API documentation 57 58 Possible debian package build rules 59 60 Testing 61 Full diffs 62 regfi and pyregfi threading 63 valgrind in multiple scenarios for reglookup, reglookup-recover 64 -
test/pyregfi-smoketest.py
r228 r232 10 10 11 11 12 pyregfi. SetLogMask((pyregfi.LOG_TYPES.INFO, pyregfi.LOG_TYPES.WARN, pyregfi.LOG_TYPES.ERROR))12 pyregfi.setLogMask((pyregfi.LOG_TYPES.INFO, pyregfi.LOG_TYPES.WARN, pyregfi.LOG_TYPES.ERROR)) 13 13 14 14 # Uses the HiveIterator to walk all keys … … 262 262 t(hive, fh) 263 263 print("##END %s; runtime=%f; messages:" % (tstr, time.time() - teststart)) 264 print(pyregfi. GetLogMessages())264 print(pyregfi.getLogMessages()) 265 265 print 266 266 sys.stdout.flush() -
trunk/SConstruct
r225 r232 1 1 import sys 2 2 import os 3 from regfi_version import REGFI_VERSION 3 4 4 5 cflags = '-std=gnu99 -pedantic -Wall -D_FILE_OFFSET_BITS=64 -fvisibility=hidden' 6 cflags += ' -DREGFI_VERSION=\'"%s"\'' % REGFI_VERSION 5 7 cflags += ' -ggdb' 6 8 -
trunk/include/regfi.h
r228 r232 79 79 #include <range_list.h> 80 80 #include <lru_cache.h> 81 82 /* Library version can be overridden at build time */ 83 #ifndef REGFI_VERSION 84 #define REGFI_VERSION "trunk" 85 #endif 81 86 82 87 /* GCC-specific macro for library exports */ -
trunk/python/pyregfi/__init__.py
r228 r232 189 189 # should be reported to the user. Failure to retrieve these could result in 190 190 # excessive memory consumption. 191 def GetLogMessages():191 def getLogMessages(): 192 192 msgs = regfi.regfi_log_get_str() 193 193 if not msgs: … … 206 206 # Example: 207 207 # @code 208 # SetLogMask((LOG_TYPES.ERROR, LOG_TYPES.WARN, LOG_TYPES.INFO))208 # setLogMask((LOG_TYPES.ERROR, LOG_TYPES.WARN, LOG_TYPES.INFO)) 209 209 # @endcode 210 210 # … … 212 212 # For more information, see @ref regfi_log_set_mask. 213 213 # 214 def SetLogMask(log_types):214 def setLogMask(log_types): 215 215 mask = 0 216 216 for m in log_types: … … 219 219 220 220 221 ## Opens a file as a registry hive 222 # 223 # @param path The file path of a hive, as one would provide to the 224 # open() built-in 225 # 226 # @return A new Hive instance 227 def openHive(path): 228 fh = open(path, 'rb') 229 return Hive(fh) 230 231 221 232 ## Abstract class for most objects returned by the library 222 233 class _StructureWrapper(object): … … 228 239 raise Exception("Could not create _StructureWrapper," 229 240 + " hive is NULL. Current log:\n" 230 + GetLogMessages())241 + getLogMessages()) 231 242 if not base: 232 243 raise Exception("Could not create _StructureWrapper," 233 244 + " base is NULL. Current log:\n" 234 + GetLogMessages())245 + getLogMessages()) 235 246 self._hive = hive 236 247 self._base = base … … 297 308 if not key: 298 309 raise Exception("Could not create _GenericList; key is NULL." 299 + "Current log:\n" + GetLogMessages())310 + "Current log:\n" + getLogMessages()) 300 311 301 312 if not regfi.regfi_reference_record(key._hive.file, key._base): 302 313 raise Exception("Could not create _GenericList; memory error." 303 + "Current log:\n" + GetLogMessages())314 + "Current log:\n" + getLogMessages()) 304 315 self._key_base = key._base 305 316 self._length = self._fetch_num(self._key_base) … … 650 661 minor_version = 5 651 662 652 # XXX: Possibly add a second or factory function which opens a653 # hive file for you654 655 663 ## Constructor 664 # 665 # Initialize a new Hive based on a Python file object. To open a file by 666 # path, see @ref openHive. 656 667 # 657 668 # @param fh A Python file object. The constructor first looks for a valid … … 660 671 # access. 661 672 # 662 # @note Supplied file must be seekable 673 # @note Supplied file must be seekable. Do not perform any operation on 674 # the provided file object while a Hive is using it. Do not 675 # construct multiple Hive instances from the same file object. 676 # If a file must be accessed by separate code and pyregfi 677 # simultaneously, use a separate file descriptor. Hives are 678 # thread-safe, so multiple threads may use a single Hive object. 663 679 def __init__(self, fh): 664 680 # The fileno method may not exist, or it may throw an exception … … 678 694 # XXX: switch to non-generic exception 679 695 raise Exception("Could not open registry file. Current log:\n" 680 + GetLogMessages())696 + getLogMessages()) 681 697 else: 682 698 fh.seek(0) … … 689 705 # XXX: switch to non-generic exception 690 706 raise Exception("Could not open registry file. Current log:\n" 691 + GetLogMessages())707 + getLogMessages()) 692 708 693 709 … … 753 769 if not self._iter: 754 770 raise Exception("Could not create iterator. Current log:\n" 755 + GetLogMessages())771 + getLogMessages()) 756 772 self._hive = hive 757 773 self._lock = threading.RLock() … … 797 813 self._lock.release() 798 814 raise Exception('Error traversing iterator downward.'+ 799 ' Current log:\n'+ GetLogMessages())815 ' Current log:\n'+ getLogMessages()) 800 816 801 817 regfi.regfi_iterator_first_subkey(self._iter) … … 977 993 if not result: 978 994 # XXX: Use non-generic exception 979 raise Exception('Could not locate path.\n'+ GetLogMessages())995 raise Exception('Could not locate path.\n'+getLogMessages()) 980 996 981 997 -
trunk/regfi_version.py
r231 r232 1 2 1 SVN_REV = "$Rev$" 3 REGFI_VERSION = "svn-%s" % SVN_REV.split(' ')[ 2]2 REGFI_VERSION = "svn-%s" % SVN_REV.split(' ')[1] -
trunk/src/common.c
r219 r232 3 3 * XXX: This should be converted to a proper library. 4 4 * 5 * Copyright (C) 2005-2008 Timothy D. Morgan5 * Copyright (C) 2005-2008,2011 Timothy D. Morgan 6 6 * Copyright (C) 2002 Richard Sharpe, rsharpe@richardsharpe.com 7 7 * … … 28 28 const char* subfield_special_chars = ",\"\\|"; 29 29 const char* common_special_chars = ",\"\\"; 30 31 #define REGLOOKUP_VERSION "0.1?.0"32 30 33 31 #define REGLOOKUP_EXIT_OK 0 -
trunk/src/reglookup-recover.c
r228 r232 336 336 { 337 337 fprintf(stderr, "Usage: reglookup-recover [options] <REGISTRY_FILE>\n"); 338 fprintf(stderr, "Version: %s\n", REG LOOKUP_VERSION);338 fprintf(stderr, "Version: %s\n", REGFI_VERSION); 339 339 fprintf(stderr, "Options:\n"); 340 340 fprintf(stderr, "\t-v\t sets verbose mode.\n"); -
trunk/src/reglookup.c
r228 r232 551 551 " [-p <PATH_FILTER>] [-t <TYPE_FILTER>]" 552 552 " <REGISTRY_FILE>\n"); 553 fprintf(stderr, "Version: %s\n", REG LOOKUP_VERSION);553 fprintf(stderr, "Version: %s\n", REGFI_VERSION); 554 554 fprintf(stderr, "Options:\n"); 555 555 fprintf(stderr, "\t-v\t sets verbose mode.\n");
Note: See TracChangeset
for help on using the changeset viewer.