48 lines
1.7 KiB
Text
48 lines
1.7 KiB
Text
|
This utility is a wrapper for the md5(3), sha1(3) and rmd160(3)
|
||
|
routines.
|
||
|
|
||
|
It is remarkably similar to the digest package, except that it
|
||
|
can recursively checksum directory trees.
|
||
|
|
||
|
While a simple checksum on a tar file is usually satisfactory, once
|
||
|
said archive has been extracted, it is virtually impossible to
|
||
|
repackage the extracted tree in a form that can yield a repeatable
|
||
|
checksum. To be specific, changes in timestamps and ownership, and
|
||
|
changes in file ordering within directories can affect the checksum of
|
||
|
the archive, while not really impacting the actual code at all.
|
||
|
|
||
|
The algorithm used to checksum a directory in this implementation is
|
||
|
as follows:
|
||
|
|
||
|
cd into directory
|
||
|
initialize MASTER_HASH
|
||
|
walk directory tree, sorting all entries
|
||
|
foreach entry
|
||
|
if it is a directory:
|
||
|
skip it if it is named "RCS", "CVS", or "SCCS"
|
||
|
initialize SLAVE_HASH
|
||
|
add the string "d " into SLAVE_HASH
|
||
|
add the pathname of the directory into SLAVE_HASH
|
||
|
finish SLAVE_HASH
|
||
|
fold the hexified SLAVE_HASH result into MASTER_HASH
|
||
|
if it is a file:
|
||
|
initialize SLAVE_HASH
|
||
|
add the string "f " into SLAVE_HASH
|
||
|
add the pathname of the file into SLAVE_HASH
|
||
|
finish SLAVE_HASH
|
||
|
fold the hexified SLAVE_HASH result into MASTER_HASH
|
||
|
initialize SLAVE_HASH
|
||
|
add the contents of the file into SLAVE_HASH
|
||
|
finish SLAVE_HASH
|
||
|
fold the hexified SLAVE_HASH result into MASTER_HASH
|
||
|
if it is a symbolic link
|
||
|
initialize SLAVE_HASH
|
||
|
add the string "l " into SLAVE_HASH
|
||
|
add the pathname of the link into SLAVE_HASH
|
||
|
finish SLAVE_HASH
|
||
|
fold the hexified SLAVE_HASH result into MASTER_HASH
|
||
|
initialize SLAVE_HASH
|
||
|
add the contents of the link into SLAVE_HASH
|
||
|
finish SLAVE_HASH
|
||
|
fold the hexified SLAVE_HASH result into MASTER_HASH
|