Microsoft KB Archive/157714

From BetaArchive Wiki

Article ID: 157714

Article Last Modified on 7/15/2004



APPLIES TO

  • Microsoft Visual SourceSafe 5.0 Standard Edition
  • Microsoft Visual SourceSafe 6.0 Standard Edition
  • Microsoft Visual SourceSafe 4.0 Standard Edition
  • Microsoft Visual SourceSafe 4.0 Standard Edition
  • Microsoft Visual SourceSafe 4.0a
  • Microsoft Visual SourceSafe 4.0a
  • Microsoft SourceSafe
  • Microsoft SourceSafe
  • Microsoft SourceSafe
  • Microsoft Visual SourceSafe 2005 Standard Edition
  • Microsoft SourceSafe
  • Microsoft SourceSafe
  • Microsoft SourceSafe
  • Microsoft SourceSafe
  • Microsoft SourceSafe
  • Microsoft SourceSafe
  • Microsoft SourceSafe
  • Microsoft SourceSafe
  • Microsoft Visual SourceSafe 2005 Standard Edition
  • Microsoft SourceSafe
  • Microsoft SourceSafe
  • Microsoft SourceSafe
  • Microsoft Visual SourceSafe 3.01
  • Microsoft Visual SourceSafe 3.02
  • Microsoft Visual SourceSafe 3.04
  • Microsoft Visual SourceSafe 3.1 Standard Edition



This article was previously published under Q157714

SUMMARY

When files are added to Visual SourceSafe, the file names are "mangled" and placed into the database. There is no documentation on how SourceSafe knows to place files in the appropriate data sub-directory.

MORE INFORMATION

SourceSafe translates all files and projects into a corresponding "internal" file number. The name of the file, TBAAAAAA for instance, represents the actual file number.

How to Find File Number

SourceSafe uses base-26 math (left to right) to get the file number. The letter maps to a number where A=0 and Z=25. Take the actual file name and break the letters down to a series of multiples using the base of 26. For example, the file number for TBAAAAAA may be found by:

   T = 19 * 26^0 = 19
   B = 1  * 26^1 = 26
   A = 0  * 26^2 =  0
   A = 0  * 26^3 =  0
   A = 0  * 26^4 =  0
   A = 0  * 26^5 =  0
   A = 0  * 26^6 =  0
   A = 0  * 26^7 =  0
           TOTAL = 45
                

Therefore, the file number of TBAAAAAA is 45. By using a file number rather than a name, SourceSafe gains several advantages:

  • SourceSafe can store long filenames on 16-bit systems. Using the NAMES.DAT file, SourceSafe can take the long name and store it while a short name is generated for 16-bit platforms.
  • SourceSafe can distribute files among the data subdirectories equally. This prevents scenarios where, for example, the Z subdirectory holds 0% of the database files and the M directory holds 23% of the database files.
  • Hashing the filename adds to the security of the system by making the DATA directory a black box to users.
  • SourceSafe can handle cross-platform naming conventions. On UNIX, SourceSafe and SOURCESAFE are two different files, and on NT these are the same file. Hashing the name allows SourceSafe to store the file case independently of the server operating system.

How SourceSafe Finds Next File

In the DATA directory, there is a text file called AAAAAAAA.CNT. The contents of this file consist of the last filename that was added in the database. When a new project or file is added, SourceSafe opens this file and adds one (1) to the file number. This new file is then generated in the SourceSafe database. It is possible to put something like ZZZZZAAA in the AAAAAAAAA.CNT file. SourceSafe will add 1 to this file number and write the new file in the database. If a user is unaware of this and continues to use SourceSafe and add files or projects, ANALYZE may not be able to run and the database will not be able to be repaired. Because all read/write users need read/write access to this file, a malicious user can cause some serious database problems that may not be detected until it is too late.

If AAAAAAAA.CNT is Set Incorrectly

If the file in AAAAAAAA.CNT is incorrect, then SourceSafe will try the next file number until it is able to create the new file. Obviously, SourceSafe will be much slower when creating files or projects but there will be no data loss. If the file is missing for some reason, create a new AAAAAAAA.CNT file and put AAAAAAAA as the only text in the file. SourceSafe will start writing files in the first available open file number.

Keywords: kbinfo KB157714