Example #1
0
 def _get(self, bucket, src, dst, src_size=-1, src_etag=''):
     if self._exclude(src): return
     headers = {}
     try:
         size = os.path.getsize(dst)
         if self.opts.ignore: return
         buf = open(dst).read()
         etags = [ md5.md5(buf).hexdigest() ]
         if src_size != size:
             if os.path.splitext(dst)[1].lower() not in self.compressed_exts:
                 etags.append(md5.md5(self._gzip_string(buf)).hexdigest())
         if src_etag in etags:
             return
         headers['If-None-Match'] = etags
     except OSError:
         pass
     r = self.conn.get(bucket, src, headers)
     if r.http_response.status == 200:
         if self.opts.verbose:
             print dst
         buf = r.object.data
         if r.http_response.getheader('content-encoding', '') == 'gzip':
             buf = gzip.GzipFile(fileobj=cStringIO.StringIO(buf)).read()
         f = open(dst, 'wb'); f.write(buf); f.close()
         self._fix_attrs(dst, r.object.metadata)
     elif r.http_response.status != 304:
         self._perror(r)
Example #2
0
 def test_invite_freelancer(self):
     
     self.job_id     = "2"
     self.job_name   = "nombre"
     self.code       = md5.md5(self.job_id).hexdigest()
     
     job = Job(id=self.job_id,offer=self.user, code=self.code)
     job.save()
     c   = Classification.objects.get(id=1)  
     jc  = Job_classification(job=job,classification=c) 
     jc.save()
     
     
     email = "*****@*****.**"
     u2    = User(first_name=self.first_name, email=email,username=email, last_name=self.last_name)
     u2.set_password(self.password)
     u2.save()           
     
     freelancer = Freelancer(user=u2,web_site=self.web_site, address=self.address, phone=self.phone, country=self.country, city=self.city)
     freelancer.save()
     
     s_id = '3'
     service = Job(id=s_id, offer=u2,_type='1',state=1,code=md5.md5(s_id).hexdigest())
     service.save()
     
     job_s = Job_classification(classification=c, job=service) 
     job_s.save()
     
     response = self.client.get('/invite_freelancers/'+self.code)
     self.assertEqual(len(response.context['freelancers']),1)
Example #3
0
 def _put(self, bucket, filename, key, etag=''):
     headers = {}
     st = os.lstat(filename)
     if not stat.S_ISREG(st[stat.ST_MODE]):
         print >>sys.stderr, 'skipping non-file', filename
         return
     if not st[stat.ST_SIZE]:
         return
     obj = S3.S3Object(open(filename).read(), metadata={
         'mode':str(stat.S_IMODE(st[stat.ST_MODE])),
         'uid':str(st[stat.ST_UID]), 'gid':str(st[stat.ST_GID]),
         'atime':str(st[stat.ST_ATIME]), 'mtime':str(st[stat.ST_MTIME]),
         })
     etags = [ md5.md5(obj.data).hexdigest() ]
     if self.opts.compress:
         ext = os.path.splitext(filename)[1].lower()
         if ext not in self.compressed_exts:
             obj.data = self._gzip_string(obj.data)
             headers['Content-Encoding'] = 'gzip'
             etags.append(md5.md5(obj.data).hexdigest())
     if etag not in etags:
         if self.opts.verbose:
             print key
         r = self.conn.put(bucket, key, obj, headers=headers)
         if r.http_response.status != 200:
             self._perror(r)
 def setUp(self):
     self.cmd = Object(**{
         "deviceConfig":   Object(**{
             "device": "localhost",
             "lastmodeltime": "lastmodeltime"
         }),
         "command":        "command",
         "component":      "url_" + md5("defunct").hexdigest().strip(),
         "includeRegex":   ".*defunct.*",
         "excludeRegex":   "nothing",
         "replaceRegex":   ".*",
         "replacement":    "defunct",
         "primaryUrlPath": "url",
         "displayName":    "defunct process set",
         "eventKey":       "bar",
         "severity":       1,
         "generatedId":    "url_" + md5("defunct").hexdigest().strip(),
         "points": [
             Object(**{
                 "id": "cpu_cpu",
                 "data": {
                     "id": "url_defunct",
                     "alertOnRestart": False,
                     "failSeverity": 0
                 }
             })
         ]
     })
     self.cmd.result = Object(**{"exitCode": 0})
Example #5
0
def get_gavatar_url(email, size=80, default_image=3, rating=0, extension=".png",default_url = None,force_default=False):
    if default_image not in DEFAULT_IMAGE_DICT and default_url is None:
        default_image = 3
    if rating not in RATING_DICT:
        rating = 0
    email = str(email).lower().strip()
    if default_url :
        if force_default:
            return GRAVATAR_PREFIX + md5.md5(email).hexdigest() + extension + \
                   "?s=" + str(size) + \
                   "&r=" + RATING_DICT[rating] + \
                   "&" + urllib.urlencode({'d':default_url}) + \
                   "&f=y"
        else :
            return GRAVATAR_PREFIX + md5.md5(email).hexdigest() + extension + \
                   "?s=" + str(size) + \
                   "&r=" + RATING_DICT[rating] + \
                   "&" + urllib.urlencode({'d':default_url})
    else :
        if force_default:
            return GRAVATAR_PREFIX + md5.md5(email).hexdigest() + extension + \
                   "?s=" + str(size) + \
                   "&r=" + RATING_DICT[rating] + \
                   "&d=" + DEFAULT_IMAGE_DICT[default_image] + \
                   "&f=y"
        else :
            return GRAVATAR_PREFIX + md5.md5(email).hexdigest() + extension + \
                   "?s=" + str(size) + \
                   "&r=" + RATING_DICT[rating] + \
                   "&d=" + DEFAULT_IMAGE_DICT[default_image]
Example #6
0
def user_edit_password():
    form = EditPasswordForm()
    if form.validate_on_submit():
        username = session["name"]
        op = form.originPassword.data
        if not db.user.find_and_modify(
                query={
                    "name": username,
                    "password": binary.Binary(md5.md5(op).digest())
                },
                update={
                    "$set": {
                        "password":
                        binary.Binary(md5.md5(form.newPassword.data).digest())
                    }
                },
        ):
            return u"密码错误, 就是不对"
        else:
            return u"修改成功, 自己刷新回去吧"
    return render_template_string(
        "{% from 'form_macro.html' import render_errors %}\
        <form method='post' action={{ url_for('user.user_edit_password') }} >\
        {{ form.hidden_tag() }} \
        {{ form.originPassword.label }}\
        {{ form.originPassword }} {{ render_errors(form.originPassword) }} <br>\
        {{ form.newPassword.label }}\
        {{ form.newPassword }} {{ render_errors(form.newPassword) }}<br>\
        {{ form.rePassword.label }}\
        {{ form.rePassword }} {{ render_errors(form.rePassword) }} <br>\
        {{ form.submit }} \
        </form>",
        form=form)
Example #7
0
    def compute_encryption_key(self, password = ""):
	"""Algorithm 3.2. Compute the key used to decode strings
	   and streams. Returns None if the user password does not
	   pass the simple password test."""

	password = (password + self.PasswordPad)[:32]
	m = md5.md5()
	m.update(password)
	m.update(self.O)
	P = struct.pack("<L", self.P)
	m.update(P)
	m.update(self.id1)
	x = m.digest()
	if self.R == 3:
	    for i in range(50):
		x = md5.md5(x).digest()
        key = x[:self.Length]

	#-- if this key is right, then ecrypting the pad string will
	#   yield the U value.
	Ucheck = RC4(key).crypt(self.PasswordPad)
	if Ucheck != self.U:
	    # try skipping steps 3 4 and 5.
	    key = md5.md5(password).digest()[:5]
	    Ucheck = RC4(key).crypt(self.PasswordPad)
	    if Ucheck != self.U:
		return None
	return key
Example #8
0
def main():
    args = parser.parse_args()
    logging.basicConfig(level=LEVELS[args.verbosity])
    srcs = set(get_files(args.source, excludes=args.excludes))
    dsts = set(get_files(args.dest, excludes=args.excludes))
    for extra in dsts - srcs:
        dst = os.path.join(args.dest, extra)
        logger.info("del {}".format(dst))
        os.unlink(dst)
    for common in srcs & dsts:
        src = os.path.join(args.source, common)
        dst = os.path.join(args.dest, common)
        src_sig = md5.md5(open(src, "rb").read()).hexdigest()
        dst_sig = md5.md5(open(dst, "rb").read()).hexdigest()
        if src_sig != dst_sig:
            logger.info("{} X-> {}".format(src, dst))
            logger.debug("{} vs {}".format(src_sig, dst_sig))
            os.unlink(dst)
            shutil.copy2(
                src,
                dst,
            )
    for tocreate in srcs - dsts:
        src = os.path.join(args.source, tocreate)
        dst = os.path.join(args.dest, tocreate)
        logger.info("{} -> {}".format(src, dst))
        directory = os.path.dirname(dst)
        if not os.path.exists(directory):
            os.makedirs(directory)
        shutil.copy2(
            src,
            dst,
        )
Example #9
0
def check_flags(host):
    # Check the public flags
    results = {}

    # Check the web flag
    try:
        lighttpd_flag = requests.get("http://%s" % host, timeout=2).text
        web_hash = md5.md5(lighttpd_flag).hexdigest()
        results['web'] = web_hash == "fa477c36d6c52d52bbd9b6af7df708fa"
    except:
        results['web'] = False

    # Check the ftp flag
    try:
        ftp_conn = FTP(host, user="******", passwd="password", timeout=2)
        ss = StringIO.StringIO()
        ftp_conn.retrbinary("RETR file", ss.write)
        ftp_hash = md5.md5(ss.getvalue()).hexdigest()
        ss.close()
        results['ftp'] = ftp_hash == "4d91498a12508cd7f51fe6d5265ee521"
    except:
        results['ftp'] = False

    log.info("Flags for %s: web is %s | ftp is %s." % (host,
        "unmodified" if results['web'] else "modified",
        "unmodified" if results['ftp'] else "modified"))
    return results
Example #10
0
    def process_response(self, request, response):
        if response['Content-Type'].startswith('text/html') and settings.CACHE_BACKEND not in ['', None, 'dummy:///']:
            soup = BeautifulSoup(response.content)
            head = soup.head

            #[script.extract() for script in head.findAll(lambda x: x.name == 'script' and 'src' in dict(x.attrs) and x['src'].startswith(settings.MEDIA_URL) )]
            #[css.extract() for css in head.findAll(lambda x: x.name == 'link' and 'href' in dict(x.attrs) and x['href'].startswith(settings.MEDIA_URL) )]
            
            scripts = head.findAll(lambda x: x.name == 'script' and 'src' in dict(x.attrs) and x['src'].startswith(settings.MEDIA_URL) )
            css = head.findAll(lambda x: x.name == 'link' and 'href' in dict(x.attrs) and x['href'].startswith(settings.MEDIA_URL) )

            script_sources = [x['src'] for x in scripts]
            new_script = md5(boundary.join(script_sources)).hexdigest()
            cache.set(new_script, script_sources)
            [x.extract() for x in scripts]

            css_sources = [x['href'] for x in css]
            new_css = md5(boundary.join(css_sources)).hexdigest()
            cache.set(new_css, css_sources)
            [x.extract() for x in css]

            tag = Tag(soup, "script", [("type", "text/javascript"), ("src", reverse('cached_asset', kwargs={'asset':new_script+".js"}) )])
            head.insert(0, tag)
            tag = Tag(soup, "link", [("type", "text/css"), ("href", reverse('cached_asset', kwargs={'asset':new_css+".css"})), ('rel', 'stylesheet')])
            head.insert(0, tag)
            response.content = soup.prettify()
        return response
Example #11
0
def main():
	print " "
	resp = raw_input("Choose your encode: ")
	print " "
	if resp == "md5":
		for _ in range(100):
			print " "
			md5()
	elif resp == "base64":
		for _ in range(100):
			print " "
			base()
	elif resp == "hex":
		for _ in range(100):
			print " "
			hexa()
	elif resp == "url":
		pr = "----URL+ENCODER----"
		print pr.center(80, ' ')
		for _ in range(100):
			print " "
			urlenc()
	elif resp == "top":
			main()
	else:
		print "Bad input."
		sys.exit()
Example #12
0
def login(request, error=''):
	if checkLogin(request):
		return HttpResponseRedirect("/wm/index")
	elif request.method == "POST":
		lF = loginForm(request.POST)
		if lF.is_valid():
			data = lF.cleaned_data
			try:
				u = User.objects.get(stuNum=data['stuNum'], erase=0)
			except User.DoesNotExist:
				errorList = "用户名错误"
				lF = loginForm()
				return render_to_response("wm/login.html", {"form": lF,"error":errorList,}, context_instance=RequestContext(request))
			if u.password == md5(md5(data['password']).hexdigest()+u.salt).hexdigest():
				request.session['user'] = u
				request.session.set_expiry(0)
				return HttpResponseRedirect("/wm/index/")
			else:
				errorList = "密码错误"
				return render_to_response("wm/login.html", {"form": lF,"error":errorList,}, context_instance=RequestContext(request))
		else:
			return HttpResponseRedirect("/wm/login")
	else:
		lF = loginForm()
		return render_to_response("wm/login.html", {"form": lF,"error":error,}, context_instance=RequestContext(request))
Example #13
0
def mine_presents(key):
    hash = md5(key + str(0))
    count = 0
    while not hash.hexdigest()[:6] == '000000':
        count += 1
        hash = md5(key + str(count))
    return count, hash.hexdigest()
def localize_image(path, out_dir):
    new_path = out_dir + "/" + os.path.basename(path)

    if path.startswith("http://") or path.startswith("https://"):
        local_name = "/tmp/pic_" + os.path.basename(path).replace("/", "")
        with open(local_name, "wb") as f:
            f.write(Downloader().download(path))
        path = local_name

    if not os.path.exists(path):
        return path

    if os.path.exists(new_path):
        path_md5 = md5(open(path).read()).hexdigest()
        new_path_md5 = md5(open(new_path).read()).hexdigest()

        if path_md5 != new_path_md5:
            while os.path.exists(new_path):
                suffix = new_path.rsplit(".", 1)[1]
                new_path = md5(os.path.basename(new_path)).hexdigest()
                new_path = out_dir + "/" + new_path + "." + suffix

    if not os.path.exists(new_path):
        if path.startswith("http://") or path.startswith("https://"):
            with open(new_path, "wb") as f:
                f.write(Downloader().download(path))
        else:
            shutil.copy(path, new_path)

    return "./" + os.path.basename(new_path)
Example #15
0
 def handle(self, *args, **options):
     while True:
         username = raw_input('请输入用户名(至少5位字符):')
         if len(username.decode('utf8')) > 4:
             break
         else:
             self.stdout.write(u'============输入的用户名无效,请重新输入============')
     
     while True:
         pwd = getpass.getpass('请输入密码(至少5位字符):')
         if len(pwd.decode('utf8')) > 4:
             break
         else:
             self.stdout.write(u'============输入的密码无效,请重新输入============')
     
     import md5
     from django.contrib.auth.models import User
     
     md5_pwd = md5.md5(md5.md5(pwd).hexdigest()).hexdigest()
     try:
         User.objects.create_superuser(username, None, md5_pwd)
         self.stdout.write(u'============管理员%s创建成功============'%username)
     except:
         self.stdout.write(u'============用户名已存在============')
     
     print 'exit.'
Example #16
0
def join():
    if not request.values['name'] or not request.values['email'] or not request.values['password'] or not request.values['password1']:
        flash('Invalid')
        return redirect(url_for('index'))
    
    else:
        password = md5.md5(request.values['password']).hexdigest()
        password1 = md5.md5(request.values['password1']).hexdigest()
        
        if password != password1:
            flash('Password not matched')
            return redirect(url_for('join'))
        else:
            email = request.values['email']
            confirm_email = User1.query.filter_by(email = email).first()
        
            if confirm_email:
                flash('E-mail already exists')
                return redirect(url_for('join'))
            else:
                email = request.values['email']
                name = request.values['name']
                new_account = User1(email,name,password)
                db.session.add(new_account)
                db.session.commit()
  
    flash('New entry was successfully posted')
    return redirect(url_for('index'))
Example #17
0
 def compute(
     self, 
     ha1, 
     username, 
     response, 
     method,
     path, 
     nonce, 
     nc,
     cnonce,
     qop
 ):
     """Computes the authentication, raises error if unsuccessful """
     if not ha1:
         return self.build_authentication()
     ha2 = md5.md5('%s:%s' % (method,path)).hexdigest()
     if qop:
         chk = "%s:%s:%s:%s:%s:%s" % (ha1,nonce,nc,cnonce,qop,ha2)
     else:
         chk = "%s:%s:%s" % (ha1,nonce,ha2)
     if response != md5.md5(chk).hexdigest():
         if nonce in self.nonce:
             del self.nonce[nonce]
         return self.build_authentication()
     pnc = self.nonce.get(nonce,'00000000')
     if nc <= pnc:
         if nonce in self.nonce:
             del self.nonce[nonce]
         return self.build_authentication(stale = True)
     self.nonce[nonce] = nc
     return username
Example #18
0
    def handshake(self, username, password, version):

        self.username = username
        self.password = password

        timestamp = str(int(time.time()))
        auth = self.hexify(md5.md5(password).digest())
        auth = self.hexify(md5.md5(auth + timestamp).digest())
        req = "/?hs=true&p=1.2&c=" + self.clientid + "&v=" + self.clientversion + "&u=" + username + "&t=" + timestamp + "&a=" + auth

        s = httpclient.httpclient(self.handshakeurl)
        s.req(req)
        reslines = string.split(s.response, "\n")

        if self.debug:
            print "audioscrobbler: handshake " + reslines[0]

        if reslines[0] != "OK":
            print "audioscrobbler: Handshake error:"
            print repr(s.response)
            return True

        self.session = reslines[1]
        self.nowplayingurl = reslines[2]
        self.submiturl = reslines[3]
        return False
Example #19
0
def _md5crypt(password, the_hash):
    magic, salt = the_hash[1:].split('$')[:2]
    magic = '$' + magic + '$'
    # /* The password first, since that is what is most unknown */ /* Then our magic string */ /* Then the raw salt */
    m = md5.new()
    m.update(password + magic + salt)

    # /* Then just as many characters of the MD5(pw,salt,pw) */
    mixin = md5.md5(password + salt + password).digest()
    for i in range(0, len(password)):
        m.update(mixin[i % 16])

    # /* Then something really weird... */
    # Also really broken, as far as I can tell.  -m
    i = len(password)
    while i:
        if i & 1:
            m.update('\x00')
        else:
            m.update(password[0])
        i >>= 1

    final = m.digest()

    # /* and now, just to make sure things don't run too fast */
    for i in range(1000):
        m2 = md5.md5()
        if i & 1:
            m2.update(password)
        else:
            m2.update(final)

        if i % 3:
            m2.update(salt)

        if i % 7:
            m2.update(password)

        if i & 1:
            m2.update(final)
        else:
            m2.update(password)

        final = m2.digest()

    # This is the bit that uses to64() in the original code.

    itoa64 = './0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'

    rearranged = ''
    for a, b, c in ((0, 6, 12), (1, 7, 13), (2, 8, 14), (3, 9, 15), (4, 10, 5)):
        v = ord(final[a]) << 16 | ord(final[b]) << 8 | ord(final[c])
        for i in range(4):
            rearranged += itoa64[v & 0x3f]; v >>= 6

    v = ord(final[11])
    for i in range(2):
        rearranged += itoa64[v & 0x3f]; v >>= 6

    return magic + salt + '$' + rearranged
Example #20
0
def reg_new(**argd):
    rec = {
      # --------------------------------------------------------- Required to create a new record
        'dob.day'          : argd.get("dob.day", ""),
        'dob.month'        : argd.get("dob.month", ""),
        'dob.year'         : argd.get("dob.year", ""),
        'email'            : argd.get("email", ""),
        'password'         : argd.get("password", ""),
        'passwordtwo'      : argd.get("passwordtwo", ""),
        'screenname'       : argd.get("screenname", ""),
        'side'             : argd.get("side", ""),
    }
    # --------------------------------------------------------- Sprinkle with default metadata
    rec["confirmed"] = False
    rec["confirmationcode"] = generate_confirmation_code()
    rec["personrecord"] = ""

    # -------------------------------------------- Validations... (lots of these)

    validate_record(rec) # Seperated out to a seperate function to make logic clearer

    # ---------------------------------------------------------  TRANSFORMS FOR STORAGE
    #    One way hash for security reasons before storage
    #    NOTE: This means we always check the digest, not the value
    #          This also means we can do a password reset, not a password reminder
    #
    if rec["password"] != "":
        rec["password"] = md5.md5(rec["password"]).hexdigest()

    if rec["passwordtwo"] != "":
        rec["passwordtwo"] = md5.md5(rec["passwordtwo"]).hexdigest()

    # --------------------------------------------------------- Actual storage
    stored_rec = Registrations.new_record(rec)
    return stored_rec
Example #21
0
def DigestCalcResponse(
    HA1,
    pszNonce,
    pszNonceCount,
    pszCNonce,
    pszQop,
    pszMethod,
    pszDigestUri,
    pszHEntity,
):
    m = md5.md5()
    m.update(pszMethod)
    m.update(":")
    m.update(pszDigestUri)
    if pszQop == "auth-int":
        m.update(":")
        m.update(pszHEntity)
    HA2 = m.digest().encode('hex')
    
    m = md5.md5()
    m.update(HA1)
    m.update(":")
    m.update(pszNonce)
    m.update(":")
    if pszNonceCount and pszCNonce: # pszQop:
        m.update(pszNonceCount)
        m.update(":")
        m.update(pszCNonce)
        m.update(":")
        m.update(pszQop)
        m.update(":")
    m.update(HA2)
    hash = m.digest().encode('hex')
    return hash
def botlist_uuid(*args):
  """
    Generates a universally unique ID.
    Any arguments only create more randomness.
  """
  t = long( time.time() * 1000 )
  r = long( random.random()*100000000000000000L )
  try:
    a = socket.gethostbyname( socket.gethostname() )
  except:
    # if we can't get a network address, just imagine one
    a = random.random()*100000000000000000L

  # Extra protection, additional unique md5 call
  t2 = long( time.time() * 1000 )
  r2 = long( random.random()*100000000000000000L )
	
  data = str(t)+' '+str(r)+' '+str(a)+' '+str(args)
  data = md5.md5(data).hexdigest()

  # Additional
  data2 = str(t2)+' '+str(r2)+' '+str(a)+' '+str(args)
  data2 = md5.md5(data2).hexdigest()

  # Final result
  uuid_data = "%s%s" % (data, data2)  
  return uuid_data[0:42]
Example #23
0
def bootstrap(username, password, tracks):
    timestamp = str(int(time.time()))
    auth = md5(md5(password).hexdigest() + timestamp).hexdigest()
    authlower = md5(md5(password).hexdigest().lower() + timestamp).hexdigest().lower()

    buffer = StringIO()
    buffer.write("--AaB03x\r\n")
    buffer.write("content-disposition: form-data; name=\"agency\"\r\n")
    buffer.write("\r\n")
    buffer.write("0\r\n")
    buffer.write("--AaB03x\r\n")
    buffer.write("content-disposition: form-data; name=\"bootstrap\"; filename=\"iTunes_bootstrap.xml.gz\"\r\n")
    buffer.write("Content-Transfer-Encoding: binary\r\n")
    buffer.write("\r\n")
    zip = gzip.GzipFile("iTunes_bootstrap.xml", "w", 6, buffer)
    zip.write("<?xml version=\"1.0\" encoding=\"utf-8\"?>\n")
    zip.write("<bootstrap version=\"1.0\" product=\"iTunes\">\n")
    for track in tracks:
        zip.write(track_template % track)
    zip.write("</bootstrap>\n")
    zip.close()
    buffer.write("\r\n")
    buffer.write("--AaB03x--")
    buffer.seek(0)

    url_template = "http://bootstrap.last.fm/bootstrap/index.php?user=%(username)s&time=%(timestamp)s&auth=%(auth)s&authlower=%(authlower)s"
    url = url_template % {'username': username, 'timestamp': timestamp, 'auth': auth, 'authlower': authlower}

    headers = {"Content-type": "multipart/form-data, boundary=AaB03x", "Cache-Control": "no-cache", "Accept": "*/*"}

    urllib2.urlopen(urllib2.Request(url, buffer.read(), headers))
Example #24
0
def test_more():
    "Test cases without known digest result."

    cases = (
        "123",
        "1234",
        "12345",
        "123456",
        "1234567",
        "12345678",
        "123456789 123456789 123456789 ",
        "123456789 123456789 ",
        "123456789 123456789 1",
        "123456789 123456789 12",
        "123456789 123456789 123",
        "123456789 123456789 1234",
        "123456789 123456789 123456789 1",
        "123456789 123456789 123456789 12",
        "123456789 123456789 123456789 123",
        "123456789 123456789 123456789 1234",
        "123456789 123456789 123456789 12345",
        "123456789 123456789 123456789 123456",
        "123456789 123456789 123456789 1234567",
        "123456789 123456789 123456789 12345678",
    )

    for input in cases:
        d = rmd5.RMD5(input)
        assert d.hexdigest() == md5.md5(input).hexdigest()
        assert d.digest() == md5.md5(input).digest()
Example #25
0
 def encrypt(self, user_pwd, owner_pwd = None, use_128bit = True):
     import time, random
     if owner_pwd == None:
         owner_pwd = user_pwd
     if use_128bit:
         V = 2
         rev = 3
         keylen = 128 / 8
     else:
         V = 1
         rev = 2
         keylen = 40 / 8
     P = -1
     O = ByteStringObject(_alg33(owner_pwd, user_pwd, rev, keylen))
     ID_1 = md5(repr(time.time())).digest()
     ID_2 = md5(repr(random.random())).digest()
     self._ID = ArrayObject((ByteStringObject(ID_1), ByteStringObject(ID_2)))
     if rev == 2:
         U, key = _alg34(user_pwd, O, P, ID_1)
     else:
         assert rev == 3
         U, key = _alg35(user_pwd, rev, keylen, O, P, ID_1, False)
     encrypt = DictionaryObject()
     encrypt[NameObject('/Filter')] = NameObject('/Standard')
     encrypt[NameObject('/V')] = NumberObject(V)
     if V == 2:
         encrypt[NameObject('/Length')] = NumberObject(keylen * 8)
     encrypt[NameObject('/R')] = NumberObject(rev)
     encrypt[NameObject('/O')] = ByteStringObject(O)
     encrypt[NameObject('/U')] = ByteStringObject(U)
     encrypt[NameObject('/P')] = NumberObject(P)
     self._encrypt = self._addObject(encrypt)
     self._encrypt_key = key
    def testWrite(self):
        ftp_server_from = "stage.mozilla.org/firefox"
        ftp_server_to = "stage.mozilla.org/firefox"
        self.uvc.product = "Firefox"
        self.uvc.platform = "Linux_x86-gcc3"
        self.uvc.channel = "betatest"
        self.uvc.aus_server = "https://aus4.mozilla.org"
        self.uvc.to = "/firefox/4.0rc2.tar.bz2"
        self.uvc.addRelease("4.0", build_id="888",
                            locales=("af", "de", "en-US", "ja", "zh-TW"),
                            patch_types=("partial", "complete"),
                            from_path="/firefox/4.0rc1.tar.bz2",
                            ftp_server_from=ftp_server_from,
                            ftp_server_to=ftp_server_to,
                            mar_channel_IDs="firefox-mozilla-beta")
        self.uvc.addRelease("4.0b12", build_id="777",
                            locales=["af", "en-US"],
                            from_path="/firefox/4.0b12.tar.bz2",
                            ftp_server_from=ftp_server_from,
                            ftp_server_to=ftp_server_to)
        self.uvc.addRelease("4.0b12", build_id="777",
                            locales=("de", "ja", "zh-TW"),
                            ftp_server_from=ftp_server_from,
                            ftp_server_to=ftp_server_to)
        self.uvc.addRelease("3.7a1", build_id="666", locales=("en-US",),
                            ftp_server_from=ftp_server_from,
                            ftp_server_to=ftp_server_to)

        self.uvc.write(self.tmpfile)
        self.tmpfile.close()
        self.assertEquals(md5(open(self.config).read()).hexdigest(),
                          md5(open(self.tmpfilename).read()).hexdigest())
Example #27
0
def upload(imap, src, err, time_fields, f, message_digests, mbox_hash):
    print >> sys.stderr, "Counting the mailbox (it could take a while for the large one)."

    p = Progress(len(src))
    for i, msg in src.iteritems():
        try:
            msg_hash = md5.md5(msg.as_string()).hexdigest()
            print md5.md5(msg.as_string()).hexdigest()

            p.begin(msg, f)
            # check if the hash combo already exists, if it is, don't reupload
            if mbox_hash + msg_hash in message_digests:
                print >> f, "message already uploaded"
                p.endNg("Already Uploaded", f)
                continue
            r, r2 = imap.upload(msg.get_delivery_time(time_fields), msg.as_string(), 3)

            if r != "OK":
                raise Exception(r2[0])  # FIXME: Should use custom class
            p.endOk(f)
            message_digests.add(mbox_hash + msg_hash)
            continue
        except socket.error, e:
            p.endNg("Socket error: " + str(e), f)
        except Exception, e:
            p.endNg(e, f)
Example #28
0
    def atest_insert_transaction(self):
	"""
	stress test, used to find out how much network latency
	affects performance using transactions.
	"""
	n = 100
	ng = 100
	ngc = 100
	l = []
	#print redis_transaction.commit_manually(using = 'native')
	#print transaction.commit_manually()
	with redis_transaction.commit_manually(using = 'native'):
		print "begin"
		for i in range(n):
			tit = md5(str(random.random())+str(i)).hexdigest()
			l.append(tit)
			Post.objects.create(
					title = tit,
					text = " ".join(
							[md5(
								str(random.random())+\
								str(t)+\
								str(i)).hexdigest() for t in range(20)]
							)
					)
		redis_transaction.commit()
	for i in range(ng):
		p = Post.objects.get(title = l[random.randint(0,n-1)] )
	for i in range(ngc):
		Post.objects.filter(title__contains = l[random.randint(0,n-1)])
Example #29
0
 def get_auth_response(self, http_method, fullpath, username, nonce, realm, qop, cnonce, nc):
     """
     Returns the server-computed digest response key.
     
     http_method:
         The request method, e.g. GET
     username:
         The user to be authenticated
     fullpath:
         The absolute URI to be accessed by the user
     nonce:
         A server-specified data string which should be 
         uniquely generated each time a 401 response is made
     realm:
         A string to be displayed to users so they know which 
         username and password to use
     qop:
         Indicates the "quality of protection" values supported 
         by the server.  The value "auth" indicates authentication.
     cnonce:
         An opaque quoted string value provided by the client 
         and used by both client and server to avoid chosen 
         plaintext attacks, to provide mutual authentication, 
         and to provide some message integrity protection.
     nc:
         Hexadecimal request counter
     """
     ha1 = self.authfunc(realm, username)
     ha2 = md5.md5('%s:%s' % (http_method, fullpath)).hexdigest()
     if qop:
         chk = "%s:%s:%s:%s:%s:%s" % (ha1, nonce, nc, cnonce, qop, ha2)
     else:
         chk = "%s:%s:%s" % (ha1, nonce, ha2)
     computed_response = md5.md5(chk).hexdigest()
     return computed_response
def create_disambiguated_record_for_block(block):
    grant_assignee_inserts = []
    app_assignee_inserts = []
    patentassignee_inserts = []
    applicationassignee_inserts = []
    grant_rawassignee_updates = []
    app_rawassignee_updates = []
    ra_objs = [uuid_to_object[uuid] for uuid in block]
    # vote on the disambiguated assignee parameters
    freq = defaultdict(Counter)
    param = {}

    for ra in ra_objs:
        for k,v in ra.summarize.items():
            if not v:
                v = ''
            param[k] = v

    if not param.has_key('organization'):
        param['organization'] = ''
    if not param.has_key('type'):
        param['type'] = ''
    if not param.has_key('name_last'):
        param['name_last'] = ''
    if not param.has_key('name_first'):
        param['name_first'] = ''
    if not param.has_key('residence'):
        param['residence'] = ''
    if not param.has_key('nationality'):
        param['nationality'] = ''
    if param.has_key('type'):
        if not param['type'].isdigit():
            param['type'] = ''

    # create persistent identifier
    if param["organization"]:
        param["id"] = md5.md5(unidecode(param["organization"])).hexdigest()
    elif param["name_last"]:
        param["id"] = md5.md5(unidecode(param["name_last"]+param["name_first"])).hexdigest()
    else:
        param["id"] = md5.md5('').hexdigest()


    grant_assignee_inserts.append(param)
    app_assignee_inserts.append(param)

    # inserts for patent_assignee and appliation_assignee tables
    patents = filter(lambda x: x, map(lambda x: getattr(x,'patent_id',None), ra_objs))
    patentassignee_inserts.extend({'patent_id': x, 'assignee_id': param['id']} for x in patents)
    applications = filter(lambda x: x, map(lambda x: getattr(x,'application_id',None), ra_objs))
    applicationassignee_inserts.extend([{'application_id': x, 'assignee_id': param['id']} for x in applications])

    # update statements for rawassignee tables
    for ra in ra_objs:
        if isgrant(ra):
            grant_rawassignee_updates.append({'pk': ra.uuid, 'update': param['id']})
        else:
            app_rawassignee_updates.append({'pk': ra.uuid, 'update': param['id']})
    return grant_assignee_inserts, app_assignee_inserts, patentassignee_inserts, applicationassignee_inserts, grant_rawassignee_updates, app_rawassignee_updates
Example #31
0
 def _createNonce(self):
     return md5.md5("%d:%s" % (time.time(), self.realm)).hexdigest()
Example #32
0
def run(verbose=1):
    if sys.platform[0:4] == 'java':
        impl = 'Jython'
    else:
        impl = 'Python'
    verStr = '%d.%d' % (sys.version_info[0:2])
    if ACCEL:
        accelStr = 'with _rl_accel'
    else:
        accelStr = 'without _rl_accel'
    print 'Benchmark of %s %s %s' % (impl, verStr, accelStr)

    started = time.time()
    canv = canvas.Canvas('odyssey.pdf', invariant=1)
    canv.setPageCompression(1)
    drawPageFrame(canv)

    #do some title page stuff
    canv.setFont("Times-Bold", 36)
    canv.drawCentredString(0.5 * A4[0], 7 * inch, "Homer's Odyssey")

    canv.setFont("Times-Bold", 18)
    canv.drawCentredString(0.5 * A4[0], 5 * inch,
                           "Translated by Samuel Burton")

    canv.setFont("Times-Bold", 12)
    tx = canv.beginText(left_margin, 3 * inch)
    tx.textLine(
        "This is a demo-cum-benchmark for PDFgen.  It renders the complete text of Homer's Odyssey"
    )
    tx.textLine(
        "from a text file.  On my humble P266, it does 77 pages per secondwhile creating a 238 page"
    )
    tx.textLine(
        "document.  If it is asked to computer text metrics, measuring the width of each word as "
    )
    tx.textLine(
        "one would for paragraph wrapping, it still manages 22 pages per second."
    )
    tx.textLine("")
    tx.textLine("Andy Robinson, Robinson Analytics Ltd.")
    canv.drawText(tx)

    canv.showPage()
    #on with the text...
    drawPageFrame(canv)

    canv.setFont('Times-Roman', 12)
    tx = canv.beginText(left_margin, top_margin - 0.5 * inch)

    for fn in ('odyssey.full.txt', 'odyssey.txt'):
        if os.path.isfile(fn):
            break

    data = open(fn, 'r').readlines()
    for line in data:
        #this just does it the fast way...
        tx.textLine(line.rstrip())

        #page breaking
        y = tx.getY()  #get y coordinate
        if y < bottom_margin + 0.5 * inch:
            canv.drawText(tx)
            canv.showPage()
            drawPageFrame(canv)
            canv.setFont('Times-Roman', 12)
            tx = canv.beginText(left_margin, top_margin - 0.5 * inch)

            #page
            pg = canv.getPageNumber()
            if verbose and pg % 10 == 0:
                print 'formatted page %d' % canv.getPageNumber()

    if tx:
        canv.drawText(tx)
        canv.showPage()
        drawPageFrame(canv)

    if verbose:
        print 'about to write to disk...'

    canv.save()

    finished = time.time()
    elapsed = finished - started
    pages = canv.getPageNumber() - 1
    speed = pages / elapsed
    fileSize = os.stat('odyssey.pdf')[6] / 1024
    print '%d pages in %0.2f seconds = %0.2f pages per second, file size %d kb' % (
        pages, elapsed, speed, fileSize)
    import md5
    print 'file digest: %s' % md5.md5(open('odyssey.pdf',
                                           'rb').read()).hexdigest()
Example #33
0
def md5Bytes(bytes):
    d = md5.md5()
    d.update(bytes)
    return d.hexdigest()
def uuid3(namespace, name):
    """Generate a UUID from the MD5 hash of a namespace UUID and a name."""
    import md5
    hash = md5.md5(namespace.bytes + name).digest()
    return UUID(bytes=hash[:16], version=3)
Example #35
0
	def add(self, data, media_type):
		"""
		This method will attempt to store this image on distributed nodes, ensuring that
		each media file has at least 2 copies on the system

		@param data: Raw binary meda data
		@type data: String

		@param media_type: Unknown
		@type media_type: Unknown
		
		@return: added media
		@rtype: List
		
		"""
		if isinstance(data, xmlrpclib.Binary):
			data = data.data # looks strange, but that's how xmlrpc works :)

		id = md5(data).hexdigest()
		size = len(data)
		self.log.debug("add for %s [%d bytes] was called" % (id, size))

		@stack
		def check_exists(result):
			if result[0] == 0:
				if not result[1]:
					return self._find_suitable_storage_targets(id, data, self._cfg_default_distribution_total)
				else:
					return 0
			else:
				raise errors.APIError(result[1])

		@stack
		def insert_txn(txn, host, id):
			txn.execute("""
				INSERT INTO
					storage_assignments (
						hostname,
						media_id
					) VALUES (%s, %s)
				""", (host, id))

			txn._connection.commit()
			self.log.debug("done inserting image")
			return 0

		@stack
		def handle_path(result):
			if result[0] != 0:
				raise errors.APIError(result[1])
			path = result[1]
			self.log.debug("calling _write_binary(%s.jpg)" % path)
			return self._write_binary("%s.jpg" % path, data)
			
		@stack
		def main_inserts(result):
			if result[0] != 0:
				self.log.warning("Error getting storage_targets: %s" % result[1])
				raise errors.APIError(result[1])

			nodes = result[1]
			self.log.debug("Got %s nodes back from _find_suitable()" % pformat(nodes))
			dl = []
			for n in nodes:
				self.log.debug("getting path for image %s, node %s" % (id, n))
				d2 = self._make_media_path(id, n)
				d2.addCallback(handle_path)
				d2.addCallback(lambda _: dl.append(self.app.db.runInteraction(insert_txn, n, id, host=n)))
				dl.append(d2)
			d_list = DeferredList(dl, fireOnOneErrback=1)
			d_list.addCallback(lambda _: 0)
			return d_list

		d = self.binary_exists(id)
		d.addCallback(check_exists)
		d.addCallback(main_inserts)
		d.addErrback(lambda failure: (-1, failure.getErrorMessage()))
		return d
Example #36
0
 def test_file(self):
     print
     print "-"*60
     print "MODE: Useradd"
     print "-"*60
     for _user in self._users:
         self.assertTrue(
             self.op.user_add(_user, self._users[_user])
         )
         self.assertTrue(
             self.op.user_query("one", _user).passwd == self._users[_user]
         )
     print
     print "-"*60
     print "TEST: Files Put"
     print "-"*60
     for _user in self._files:
         _fname = self._files[_user]
         _cont = self._conts[_fname]
         _md5 = md5(_cont).hexdigest()
         self.assertTrue(
             self.op.file_put(_user, _fname, _cont)
         )
         self.assertTrue(
             self.op.file_query("one", _user, _fname).md5 == _md5
         )
         self.assertIsNotNone(
             self.op.pull_query("first", _md5)
         )
     print
     print "-"*60
     print "TEST: Files Get"
     print "-"*60
     for _user in self._files:
         _fname = self._files[_user]
         _cont = self._conts[_fname]
         self.assertEqual(
             self.op.file_get(_user, _fname), _cont
         )
     print
     print "-"*60
     print "TEST: Files Del"
     print "-"*60
     _user = "******"
     _fname = self._files[_user]
     _cont = self._conts[_fname]
     _md5 = md5(_cont).hexdigest()
     self.assertTrue(
         self.op.file_del(_user, _fname)
     )
     self.assertIsNotNone(
         self.op.pull_query("first", _md5)
     )
     _user = "******"
     _fname = self._files[_user]
     _cont = self._conts[_fname]
     _md5 = md5(_cont).hexdigest()
     self.assertTrue(
         self.op.file_del(_user, _fname)
     )
     self.assertIsNone(
         self.op.pull_query("first", _md5)
     )
     _user = "******"
     _fname = self._files[_user]
     _cont = self._conts[_fname]
     _md5 = md5(_cont).hexdigest()
     self.assertTrue(
         self.op.file_del(_user, _fname)
     )
     self.assertIsNone(
         self.op.pull_query("first", _md5)
     )
Example #37
0
def H(b1, b2, c):
    return md5("".join([hex(i).replace("0x", "") for i in [b1, b2, c]]))
Example #38
0
 def encode(self, password):
     return md5.md5(password + self.salt).hexdigest()
Example #39
0
def md5hash(s):
    import md5
    return md5.md5(s).hexdigest()
Example #40
0
 def _cache_key(self, for_=''):
     """Key used to identify in cache"""
     return md5(
         'token:%s:%s:%s:%s' %
         (self.service_email, self.scope, self.email, for_)).hexdigest()
Example #41
0
def calchash(code, length):
    # calculates and returns length character of hash
    md5sum = md5.md5(code)
    return md5sum.hexdigest()[0:length]
Example #42
0
    dtEpochTime = timeStringToDatetime(line)

#add offset
if (subOffset):
    oCurrentTime = dtCurrentTime - timedelta(
        days=offsetDays, minutes=offsetMinutes, seconds=offsetseconds)
else:
    oCurrentTime = dtCurrentTime - timedelta(
        days=offsetDays, minutes=offsetMinutes, seconds=offsetseconds)

#calculate the time difference
timeDifference = oCurrentTime - dtEpochTime

#convert the timedelta to an integer time difference in seconds
timeDifferenceInSeconds = 86400 * timeDifference.days + timeDifference.seconds

#applies daylight savings (if one time xor the other time is in dst)
if (DSTApplies(dtEpochTime, dtCurrentTime)):
    timeDifferenceInSeconds -= 3600

#rounds the time down to the nearest divisibility by 60
usableTimeDifference = timeDifferenceInSeconds - timeDifferenceInSeconds % 60

#digest this usableTime difference twice
digestedTime = md5.md5(md5.md5(
    str(usableTimeDifference)).hexdigest()).hexdigest()

#takes the first two alphabetic characters starting from the left and the first two numeric starting from the right to get the code
code = digestedTimeDifferenceToCode(digestedTime)
print(code)
Example #43
0
    def _create(self):
        if self.open():
            self.run("drop user '%s'@'localhost'" % MYSQL_USER)
            self.run("drop database %s" % DATABASE)
            self.run("create database %s" % DATABASE)
            self.run("create user '%s'@'localhost' IDENTIFIED BY '%s'" % (MYSQL_USER,MYSQL_PASSWORD))
            self.run("grant all on "+DATABASE+".* to '%s'@'localhost'" % MYSQL_USER)
            self.run("flush privileges")
            self.run("use %s" % DATABASE)

            self.run(self.tb_sets._create())
            self._sets_add('server','version','2.0')
            self._sets_add('server','server_port','10110')
            self._sets_add('server','dtprint_ip','localhost')
            self._sets_add('server','dtprint_port','10111')
            self._sets_add('server','backoffice_ip','IceServ')
            self._sets_add('server','backservice_port','10100')
            self._sets_add('server','bonus_port','7172')
            self._sets_add('server','dtprint_passwd','dtpadm')
            self._sets_add('server','regid','beerkem')
            self._sets_add('server','egais_ip','localhost')
            self._sets_add('server','regpassword','766766')
            self._sets_add('server','temperature','0')
            self._sets_add('server','upgrade','0')
            self._sets_add('server','prize_port','7174')

            self._sets_add('client','timeout_ping','15')
            self._sets_add('client','timeout_query','60')
            self._sets_add('client','css','default')
            self._sets_add('client','scale_prefix','21')
            self._sets_add('client','user_prefix','111')
            self._sets_add('client','discount_prefix','222')
            self._sets_add('client','bonus_prefix','777')
            self._sets_add('client','site','site')

            self._sets_add('magazine','texthead','')
            self._sets_add('magazine','textfoot','')
            self._sets_add('magazine','orgname','')
            self._sets_add('magazine','placename','')
            self._sets_add('magazine','inn','4205183793')
            self._sets_add('magazine','kpp','420501001')
            self._sets_add('magazine','logo','')
            self._sets_add('magazine','idplace','1')
            self._sets_add('magazine','nkassa','1')
            self._sets_add('magazine','calcost','0')
            self._sets_add('magazine','pricenum','0')
            self._sets_add('magazine','messagetype','default')
            self._sets_add('magazine','begin_time','06:00:00')
            self._sets_add('magazine','action','0')
            self._sets_add('magazine','sets','0')
            self._sets_add('magazine','nofiscal_proc','0')
            
            self._sets_add('device','dev_scanner','')
            self._sets_add('device','d_name','None')
            self._sets_add('device','d_speed','8')
            self._sets_add('device','d_devtype','KKM_FPRINT')
            self._sets_add('device','d_printsh','1')
            self._sets_add('device','d_autonull','1')
            self._sets_add('device','d_autobox','1')
            self._sets_add('device','d_summertm','1')
            self._sets_add('device','d_autocut','1')
            self._sets_add('device','d_ignore','0')
            self._sets_add('device','d_ncheck','1')

            self.run(self.tb_trsc_hd._create())
            self.run(self.tb_trsc_ct._create())
            self.run(self.tb_price._create())
            self.run(self.tb_price_shk._create())
            self.run(self.tb_discount._create())
            self.run(self.tb_check_head._create())
            self.run(self.tb_check_cont._create())
            self.run(self.tb_users._create())
            self.run(self.tb_types._create())
            self.run(self.tb_Zet._create())
            self.run(self.tb_Zet_cont._create())
            self.run(self.tb_egais_places._create())
            self.run(self.tb_egais_ostat._create())
            self.run(self.tb_egais_docs_hd._create())
            self.run(self.tb_egais_docs_ct._create())
            self.run(self.tb_egais_docs_need._create())
            self.run(self.tb_actions_hd._create())
            self.run(self.tb_tlist._create())

            self._types_add('us',10,u'Продавец')
            self._types_add('us',50,u'Кассир')
            self._types_add('us',100,u'Админ')

            self._user_add(['admin' ,md5("678543").hexdigest(),TYPE_USER['ADMIN']])
            self._user_add(['kassir',md5("766766").hexdigest(),TYPE_USER['KASSIR']])
            self._user_add(['seller',md5("111").hexdigest()   ,TYPE_USER['SELLER']])
            print "created database"
        else:
            print "error.not_open"
Example #44
0
def init(web):
    User(login='******',
         password=md5('admin1234').hexdigest(),
         codename='admin',
         role='admin').save()
    return " Todo listo !!!"
Example #45
0
 def H(self, data):
     return md5.md5(data).hexdigest()
Example #46
0
def audit(arg):
    II1iII1i, oO0oIIII = arg
    Oo0oO0oo0oO00 = "\x12\x01\x00\x2f\x00\x00\x01\x00\x00\x00\x1a\x00\x06\x01\x00\x20\x00\x01\x02\x00\x21\x00\x01\x03\x00\x22\x00\x04\x04\x00\x26\x00\x01\xff\x09\x00\x00\x00\x00\x00\x01\x00\xb8\x0d\x00\x00\x01"
    try:
        i111I = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        i111I.settimeout(10)
        i111I.connect((II1iII1i, oO0oIIII))
        i111I.send(Oo0oO0oo0oO00)
        II1Ii1iI1i = i111I.recv(1024)
        i111I.close()
        for iiI1iIiI in range(len(II1Ii1iI1i)):
            if II1Ii1iI1i[iiI1iIiI] == "\xff":
                break

        OOo = int(binascii.b2a_hex(II1Ii1iI1i[iiI1iIiI + 1]), 16)
        Ii1IIii11 = int(binascii.b2a_hex(II1Ii1iI1i[iiI1iIiI + 2]), 16)
        Oooo0000 = int(binascii.b2a_hex(II1Ii1iI1i[iiI1iIiI + 3]), 16) * 256 + int(
            binascii.b2a_hex(II1Ii1iI1i[iiI1iIiI + 4]), 16)
        if Ii1IIii11 < 10:
            i11 = "%d.%02d.%d" % (OOo, Ii1IIii11, Oooo0000)
        else:
            i11 = "%d.%d.%d" % (OOo, Ii1IIii11, Oooo0000)
        hash = md5.md5(i11).hexdigest()

        I11 = {"8d060b11b24c3bfd26e273af79c92736": "Microsoft SQL Server 2012 SP1 (CU1)",
               "1e85aae0472507861d9d1ad5bc3eb47d": "Microsoft SQL Server 2012 SP1",
               "360b72f9ca12d7e9f67fb645af858fc5": "Microsoft SQL Server 2012 SP1 CTP4",
               "1f780b0e5fe4ce33dd2b6cbad946cb45": "Microsoft SQL Server 2012 SP1 CTP3",
               "8a0897d1f592b12a37db0643fc1932c6": "Microsoft SQL Server 2012 SP0 (CU4)",
               "ad3643e933c8c2417a413b9566af19ac": "Microsoft SQL Server 2012 SP0 (MS12-070)",
               "e095f75fc751dfe06111d6a6682f6843": "Microsoft SQL Server 2012 SP0 (CU3)",
               "b0ae2cff7220c039a75d7beaad18226c": "Microsoft SQL Server 2012 SP0 (CU2)",
               "6414925bf11f886351c68d08df6e1081": "Microsoft SQL Server 2012 SP0 (CU1)",
               "358d235773fdb35f23f5d412f1e3ebba": "Microsoft SQL Server 2012 SP0 (MS12-070)",
               "a2fd5707de641bc98b391ba1c5b677f7": "Microsoft SQL Server 2012 SP0 (KB2685308)",
               "23101c72ea8af9e228f2efab2736725e": "Microsoft SQL Server 2012 RTM",
               "4311e96155da9eacb8c09ce7633d1404": "Microsoft SQL Server 2012 RC1",
               "06b1ab494e5a80b80f828ae9b52cb93f": "Microsoft SQL Server 2012 RC0",
               "6cbcb0157951be0e75414d2e1787d69c": "Microsoft SQL Server 2012 (Codename Denali) CTP3",
               "63012c2c0f8952b0dc463aae94e2abca": "Microsoft SQL Server 2012 (Codename Denali) CTP1",
               "64f5b2db697eb49204d5a2eb19f16e00": "Microsoft SQL Server 2008 R2 SP1 (CU4)",
               "f065cc37d0696671dc515306f9148614": "Microsoft SQL Server 2008 R2 SP1 (CU3)",
               "690484ee6341b4cb52a7301112a3ab29": "Microsoft SQL Server 2008 R2 SP1 (KB2606883)",
               "17cc65f2ee9feed0af1f416301654d4b": "Microsoft SQL Server 2008 R2 SP1 (CU2)",
               "4632bd58825d7f4388450c7f659d5b9f": "Microsoft SQL Server 2008 R2 SP1 (CU1)",
               "963b608a4c7162f7bc5a3c28cb96aec2": "Microsoft SQL Server 2008 R2 SP1",
               "5e8010f1265d0097c2c4af37364d6bd2": "Microsoft SQL Server 2008 R2 (CU10)",
               "15b33728e6c21d283e59f8572b9b3636": "Microsoft SQL Server 2008 R2 (CU9)",
               "8f30cf502441b84ebf051d2b42164cc5": "Microsoft SQL Server 2008 R2 (KB2574699)",
               "38ea6ea8709c555ba60e00a6b1247b44": "Microsoft SQL Server 2008 R2 (CU8)",
               "33024d578dc00a6b7f50e1235f116dca": "Microsoft SQL Server 2008 R2 QFE (MS11-049)",
               "0a0d1d2770251c6c0cdf574b0cd364fd": "Microsoft SQL Server 2008 R2 (CU7)",
               "1a4c0860e8a66cc2ef413784d4d6794a": "Microsoft SQL Server 2008 R2 (KB2520808)",
               "48f99e6be573eb1ebb3031f919f25d4c": "Microsoft SQL Server 2008 R2 (CU6)",
               "848348e42584b1c6898c194ed1860943": "Microsoft SQL Server 2008 R2 (CU5)",
               "ca755ee5bbd552b30d3a7397e175d9fe": "Microsoft SQL Server 2008 R2 (CU4)",
               "704e4ddc791359e3910060e049b4e83f": "Microsoft SQL Server 2008 R2 (CU3)",
               "b9aaacbf927bd4397f2aa1daf7aa03a0": "Microsoft SQL Server 2008 R2 (CU2)",
               "74546c9676d47dcfddf88656da2ab112": "Microsoft SQL Server 2008 R2 (CU1)",
               "f1b448887fa7234e82c3ecbfbb2bae5c": "Microsoft SQL Server 2008 R2 GDR (MS11-049)",
               "a49c50d890d04e856398de3408e7d1a6": "Microsoft SQL Server 2008 R2 RTM",
               "0ee4471cd15b028dd78db7c81189dab2": "Microsoft SQL Server 2008 R2 November CTP Release",
               "3c57c657e7f3e8722e8f591d830b7c56": "Microsoft SQL Server 2008 R2 August CTP Release",
               "9ae4012b68e50ae961e1d247766d2ef6": "Microsoft SQL Server 2008 SP3 (CU2)",
               "5734dfe6d6012930af14589e9f0540ef": "Microsoft SQL Server 2008 SP3 (CU1)",
               "52f132a12b67f5ed824f2f572fe6e4db": "Microsoft SQL Server 2008 SP3",
               "5bdf46feebdb5af03712c747344c7b63": "Microsoft SQL Server 2008 SP3 CTP",
               "4ff03bc78eeed7e3d51e20af52293d66": "Microsoft SQL Server 2008 SP2 (CU7)",
               "d988eee7b0efe06eb3ff88d020646048": "Microsoft SQL Server 2008 SP2 (CU6)",
               "f1be19ad8f86b319709a3b307badeacb": "Microsoft SQL Server 2008 SP2 (CU5)",
               "a1bfe250e8ee1c1ed78861a1e33918b6": "Microsoft SQL Server 2008 SP2 (CU4)",
               "04e03afb7f4b1e6197e756fd993cd74b": "Microsoft SQL Server 2008 SP2 (CU3)",
               "caee40f76bc139ca1c759ebacdd7f889": "Microsoft SQL Server 2008 SP2 (CU2)",
               "828eb15c52e0c058d2c6d6d21d5f5d14": "Microsoft SQL Server 2008 SP2 (CU1)",
               "18acf41d55d21a0be65784425429316e": "Microsoft SQL Server 2008 SP2",
               "cb3d82b09dbb307296fc563c44ab444e": "Microsoft SQL Server 2008 SP1 (CU16)",
               "cfece6d95c446d11ef011ab07e8c6509": "Microsoft SQL Server 2008 SP1 (CU15)",
               "57722a5109f3055406d1a27c2d0caa9e": "Microsoft SQL Server 2008 SP1 (CU14)",
               "332cba967dccccf2594c7820cd8cafcd": "Microsoft SQL Server 2008 SP1 (CU13)",
               "27da5dd190501f0b2a0f6d21873b88b5": "Microsoft SQL Server 2008 SP1 (CU12)",
               "fff730ed78542e1bb27cbc32eaccb8de": "Microsoft SQL Server 2008 SP1 (CU11)",
               "627c84cf18f97ead90510e6cb208ea22": "Microsoft SQL Server 2008 SP1 (CU10)",
               "ed23cc958659fdee5cf25892808ea26c": "Microsoft SQL Server 2008 SP1 (CU9)",
               "cf46591bcecc57c734a74e35c1c1028a": "Microsoft SQL Server 2008 SP1 (CU8)",
               "e149e263c4bbe6532cf9984ed6de9865": "Microsoft SQL Server 2008 SP1 (CU7)",
               "505a2aa33afa94df84e09eccb4a535fd": "Microsoft SQL Server 2008 SP1 (CU6)",
               "e567f75258707297eaa457cca8633864": "Microsoft SQL Server 2008 SP1 (CU5)",
               "ba59ea730e20860e279aa5dbe8b3ec75": "Microsoft SQL Server 2008 SP1 (CU4)",
               "5dbd3c6a977c3fa2fa9c22ae70170ee5": "Microsoft SQL Server 2008 SP1 (CU3)",
               "3b43f1466177a085f706f71803ac94d1": "Microsoft SQL Server 2008 SP1 (CU2)",
               "8b9a3956c6381cd57c0656303ddc42d2": "Microsoft SQL Server 2008 SP1+Q970507",
               "1677d463a4fea05ed658f41f81a55a9c": "Microsoft SQL Server 2008 SP1 (CU1)",
               "d5c2694a118124bf29e3cc191ae91d08": "Microsoft SQL Server 2008 SP1",
               "337187ef8e5d93d235d1d01a797e33df": "Microsoft SQL Server 2008 SP0 (CU6)",
               "20f7d10f4e9fecd21a627e7de887a9ec": "Microsoft SQL Server 2008 SP0 (CU4)",
               "23186630cf4e890f34cc5d933fcce19b": "Microsoft SQL Server 2008 SP0 (CU3)",
               "e98fda7ab94c7d3568701599451212e0": "Microsoft SQL Server 2008 SP0+Q958186",
               "022e0d46903f5fab7a524d3f7b229775": "Microsoft SQL Server 2008 SP0+Q958611",
               "02af41567dde84ca70ff66edb1d8f8ad": "Microsoft SQL Server 2008 SP0+Q956718",
               "5cd5ec07cfd55ca330ad279be169c72b": "Microsoft SQL Server 2008 RTM",
               "c4c318405fd33930ff823fb0eb442aff": "Microsoft SQL Server 2008 February CTP Release",
               "6d93932497bbe70ef0934a7689d83086": "Microsoft SQL Server 2008 July CTP Release",
               "120c439d8686e3823f60bf13ff1618b1": "Microsoft SQL Server 2008 June CTP Release",
               "8989604a4d0d0cd2929f4688014c70e4": "Microsoft SQL Server 2005 SP3+Q972511",
               "84c98592d4300f7509d7e54f51a8981a": "Microsoft SQL Server 2005 SP3+Q970279",
               "ad5ff968c1b9dda11aae5c78e8af51df": "Microsoft SQL Server 2005 SP3+Q971409",
               "af174f77f96902a0ff3f8d26b37dfba0": "Microsoft SQL Server 2005 SP3+Q967909",
               "ad6cd4d37ca911cea517636eeb88edd3": "Microsoft SQL Server 2005 SP3+Q967101",
               "86b20a798d903c2cfaa1039877f77a43": "Microsoft SQL Server 2005 SP3+Q961930",
               "8efe34797e646384bb36f80c6d8fb907": "Microsoft SQL Server 2005 SP3+Q959195",
               "109c5a102e7e11e15882fd545eae502b": "Microsoft SQL Server 2005 SP3+Q970892 (MS09-062)",
               "80ab3f7e6e2fc4eda42bfc8c37b8ce11": "Microsoft SQL Server 2005 SP3+Q955706",
               "3e8cd13548ce3e36bb1b884b6dd1fe27": "Microsoft SQL Server 2005 SP2+Q970278",
               "7494f59279e6d897e3ff53416ccf7084": "Microsoft SQL Server 2005 SP2+Q948567/961648",
               "5cb4a5543e78d6b9fac189efb7671229": "Microsoft SQL Server 2005 SP2+Q967908",
               "5b25efc579cb28b0ec3d533f9f630749": "Microsoft SQL Server 2005 SP2+Q969142",
               "6fc1d52fd82041321844b41664436135": "Microsoft SQL Server 2005 SP2+Q962970",
               "a2c0e8587e24a2452daab63c4251c43e": "Microsoft SQL Server 2005 SP2+Q960090",
               "a745aa5bf2cfd7f7e8b18033819ef96d": "Microsoft SQL Server 2005 SP2+Q962209",
               "d5f0143887cd5253b66c631b6738027d": "Microsoft SQL Server 2005 SP2+Q961479/961648",
               "513966802cc43d511fb8fd20d2122ed1": "Microsoft SQL Server 2005 SP2+Q958735",
               "e7c4c038ab64df5622deb1c779fa605e": "Microsoft SQL Server 2005 SP2+Q959132",
               "2ea960bdbf5cb015662f4ea9ad07424b": "Microsoft SQL Server 2005 SP2+Q956854",
               "d63d79f9660e38595de921ce02e43000": "Microsoft SQL Server 2005 SP2+Q956889",
               "b9bb259b4b5cdb812e5bd990254d51b8": "Microsoft SQL Server 2005 SP2+Q937137",
               "566cff48f7f43c171fa8c09b9846c65d": "Microsoft SQL Server 2005 SP2+Q953752/953607",
               "6f63aeb7eee837fab68ff6aad133a889": "Microsoft SQL Server 2005 SP2+Q955754",
               "a5f6a8e939d8a1610d0390c146ebdbf3": "Microsoft SQL Server 2005 SP2+Q954950",
               "295fb038c107543ea51341b46535cc94": "Microsoft SQL Server 2005 SP2+Q954669/954831",
               "4efcac093a5e7b8b63f696723deb40d8": "Microsoft SQL Server 2005 SP2+Q951217",
               "e9133fe4eb1ddb3ccbab3d88934e6ba1": "Microsoft SQL Server 2005 SP2+Q954054",
               "6e3f86fd8c3e4eb8979c7e0770f5afba": "Microsoft SQL Server 2005 SP2+Q952330",
               "ebe2d577493b9fb159d4192bf394beb8": "Microsoft SQL Server 2005 SP2+Q951190",
               "01b9bb77608afc92e6172514cb145070": "Microsoft SQL Server 2005 SP2+Q951204",
               "ef149b3b3ad5472c2df3b4edfa063609": "Microsoft SQL Server 2005 SP2+Q949095",
               "24f91be8935e2d3e15064075cbb42dba": "Microsoft SQL Server 2005 SP2+Q950189",
               "c3618ebe137c5203c4174224f27b3408": "Microsoft SQL Server 2005 SP2+Q941203/948108 (QFE)",
               "fc441e4682a7d47f569da3f9e03f31be": "Microsoft SQL Server 2005 SP2+Q949959",
               "895f7cfd66b9100c9418ca518e29b6ec": "Microsoft SQL Server 2005 SP2+Q949687/949595",
               "b1d333aa8fb5ee04767c3568e3807cf1": "Microsoft SQL Server 2005 SP2+Q949199",
               "9adf9cdd238f9b9e0d3a4018e8f2a81e": "Microsoft SQL Server 2005 SP2+Q946608",
               "fe0bcddcc5e1a4a49124f919af9fafed": "Microsoft SQL Server 2005 SP2+Q947463",
               "383403ee163110a2a9c9b94fe124a474": "Microsoft SQL Server 2005 SP2+Q945640/945641/947196/947197",
               "be68eb4fd1537b3388de0ad81cf15d6d": "Microsoft SQL Server 2005 SP2+Q942908/945442/945443/945916/944358",
               "2fbdce27c31680d90ee92cc063d4cf9f": "Microsoft SQL Server 2005 SP2+Q941450",
               "74f157271f429ecaca8c5f198a965f51": "Microsoft SQL Server 2005 SP2 (SQLHF Bug #50002118)",
               "6bf3f5c5de51d6594a2fd98b896ffa1c": "Microsoft SQL Server 2005 SP2+Q944902",
               "0e812541afe474254339c3af96446da9": "Microsoft SQL Server 2005 SP2+Q944677",
               "4fdbd9243dcf244c8d664c67389c58c6": "Microsoft SQL Server 2005 SP2 (SQLHF Bug #50001708/50001999)",
               "33b41efda1c6a38518deb13ff6d4de28": "Microsoft SQL Server 2005 SP2 (SQLHF Bug #50001951/50001993/50001997/50001998/50002000)",
               "24825e627c9e8cc4d34b233773be226d": "Microsoft SQL Server 2005 SP2+Q941450",
               "41d0513b6b0feca4f1469a25de2808d8": "Microsoft SQL Server 2005 SP2 (SQLHF Bug #50001812)",
               "13043a580d36cc7ee27cf70f62cfb13e": "Microsoft SQL Server 2005 SP2+Q940933",
               "7f3fdebdaf5faa33c716652a13f3bd61": "Microsoft SQL Server 2005 SP2+Q939562",
               "b5551f8ac21788c7baeff9f4f6e6b183": "Microsoft SQL Server 2005 SP2+Q940128",
               "ca887907d5067455638715dc2da49e37": "Microsoft SQL Server 2005 SP2+Q939942",
               "6aeed6620db64b9f2c86b087ae18a344": "Microsoft SQL Server 2005 SP2+Q938243",
               "2f49464f9532d97d0f9e21e176246bc3": "Microsoft SQL Server 2005 SP2 (SQLHF Bug #50001193/5001352)",
               "9dd676f1588aaafe21430f56220a4a3f": "Microsoft SQL Server 2005 SP2+Q939563/939285",
               "43280890cbcb7b7e921f8a4cc8e311d6": "Microsoft SQL Server 2005 SP2+Q936305/938825",
               "cdb60569c6d262f3d91d96d68d9791b3": "Microsoft SQL Server 2005 SP2+Q937745",
               "96a1b4fba14cc44b6def723cd2a64baa": "Microsoft SQL Server 2005 SP2+Q937041/937033",
               "b63bd6c22eda8b00fa36b3fcc1fcbb8a": "Microsoft SQL Server 2005 SP2+Q936185/934734",
               "038c761623b443d27f46524c3a7f1926": "Microsoft SQL Server 2005 SP2+Q932610/935360/935922",
               "6cc017b596fe7eb219e0a860932d1eb4": "Microsoft SQL Server 2005 SP2+Q935356/933724",
               "7c0738011de825e89842872114564773": "Microsoft SQL Server 2005 SP2+Q934459",
               "27901da618d1abdc696118687df37aa2": "Microsoft SQL Server 2005 SP2+Q934226",
               "34b018f22c83fee6530aee0205430e67": "Microsoft SQL Server 2005 SP2+Q933549 /933766/933808/933724/932115/933499",
               "bdb6d99287fe9d68af70c33f56a6ff98": "Microsoft SQL Server 2005 SP2+Q934106/934109/934188",
               "5de0d3cfa6811b4f83551e1d370da09b": "Microsoft SQL Server 2005 SP2+Q933564",
               "03386e2326ebdb050aee82ec26d54832": "Microsoft SQL Server 2005 SP2+Q933097",
               "d60509949815f01c070b492929af11a3": "Microsoft SQL Server 2005 SP2+Q960089",
               "3ba7ee59a54388d34bf7f1f3bacaf1c4": "Microsoft SQL Server 2005 SP2+Q954606",
               "2fe641ba73872fef03e26acecfe0f5ee": "Microsoft SQL Server 2005 SP2+Q941203/948109",
               "0f93d879e086a0a2878db1b976fdc8a3": "Microsoft SQL Server 2005 SP2+Q934458",
               "63ad294e19c72cddbcfc59c426d44a1b": "Microsoft SQL Server 2005 SP2+Q933508",
               "b238f1b90b2f361cc53597b2dc638f74": "Microsoft SQL Server 2005 SP2+Q933508",
               "bb6d39e75c3275a4899dc3b9f2306aa6": "Microsoft SQL Server 2005 SP2 RTM Fixed",
               "749c9b2c2ee2396633262833c738c6c9": "Microsoft SQL Server 2005 SP2 December CTP Release",
               "682c4ed44ed213d75cade8d2bf82a1f6": "Microsoft SQL Server 2005 SP2 November CTP Release",
               "ed85fc173e3d8a36029c6880f9a5b7e2": "Microsoft SQL Server 2005 SP1+Q929376",
               "dc2761ffee92eba9f2eb26b1b2d99602": "Microsoft SQL Server 2005 SP1+Q948344",
               "211f012b66a03d6691cd0bff2f9e1d22": "Microsoft SQL Server 2005 SP1+Q933573",
               "5acf25b8a69ee9e3d8475015d3e85c64": "Microsoft SQL Server 2005 SP1+Q944968",
               "807f4ec4c9b9aa171c75a4accaabab31": "Microsoft SQL Server 2005 SP1+Q943389/943388",
               "b66a849fc84ed4f1dc24b3d060a5f8ed": "Microsoft SQL Server 2005 SP1+Q940961",
               "12b557c20f220d053b5d80f8a73e990c": "Microsoft SQL Server 2005 SP1+Q940719",
               "7d0cbe9133b31242f957be4bf7dcd20c": "Microsoft SQL Server 2005 SP1+Q940287/940286",
               "a93a2b07da49575c3d862519cbd10cfd": "Microsoft SQL Server 2005 SP1+Q937343",
               "30c8011092ff16fdf47f1418b0332f25": "Microsoft SQL Server 2005 SP1+Q933499/937545",
               "d49e9741de96eee1163140d95faa9684": "Microsoft SQL Server 2005 SP1+Q937277",
               "ba83fd160b3ba37cb6d9cfbf3fd90137": "Microsoft SQL Server 2005 SP1+Q934812",
               "edbc9b3bd8f240a9550bcedc6a343527": "Microsoft SQL Server 2005 SP1+Q936179",
               "a1f66f07a0590e465eb46d66b497ec6e": "Microsoft SQL Server 2005 SP1+Q935446",
               "21fe0b74defbcc5859fa8a9ed6b116d3": "Microsoft SQL Server 2005 SP1+Q934066/933265",
               "c283e1efefbb37a2360136f2b2a85920": "Microsoft SQL Server 2005 SP1+Q933762/934065/934065",
               "040fe51ef37d4f3f1f5f6b38a24229bf": "Microsoft SQL Server 2005 SP1+Q932990/933519",
               "7f9100bbbae191ba1662e63e440d35de": "Microsoft SQL Server 2005 SP1+Q932393",
               "04fe531d8c04fab3b5922991e71342fb": "Microsoft SQL Server 2005 SP1+Q931593",
               "cb23cc0d927f0fea4b42aa14027aae00": "Microsoft SQL Server 2005 SP1+Q931329/932115",
               "34f054012b0f353a2c44b45116c69696": "Microsoft SQL Server 2005 SP1+Q931843/931843",
               "c34dfe7fb594940baca44f8bca53caf1": "Microsoft SQL Server 2005 SP1+Q931821",
               "d8845210a844aa79e926385781d386af": "Microsoft SQL Server 2005 SP1+Q931666",
               "d14287b31c398b82d5d8e97fc995b8cf": "Microsoft SQL Server 2005 SP1+Q929240/930505/930775",
               "a40ea79fbc28722b859a25ff5ced82d5": "Microsoft SQL Server 2005 SP1+Q930283/930284",
               "5d753acdf3f92a2cb635d710cebf90aa": "Microsoft SQL Server 2005 SP1+Q929278",
               "89e025c7db6feefec8118e9fe46ae7f2": "Microsoft SQL Server 2005 SP1+Q929179/929404",
               "d4e4e6f22a9f816b47fca8ca5498e7ad": "Microsoft SQL Server 2005 SP1+Q928394/928372/928789",
               "300923586b4c0e3f024c25bdc8cb0403": "Microsoft SQL Server 2005 SP1+Q928539/928083/928537",
               "c7004c3f9355cbf84d9284831d244838": "Microsoft SQL Server 2005 SP1+Q927643",
               "57cbdeaa93d18671bf0b7fb2f30c2521": "Microsoft SQL Server 2005 SP1+Q927289",
               "4d8a54483104170ece3e0ad5466673c9": "Microsoft SQL Server 2005 SP1+Q926773/926611/924808/925277/926612/924807/924686",
               "1693d799b78f143171a16c241cad2706": "Microsoft SQL Server 2005 SP1+Q926285/926335/926024",
               "ad76d69daa71d858295463d43b8969d2": "Microsoft SQL Server 2005 SP1+Q926240",
               "5dbd4ab0278aadadafa65d6e03e04132": "Microsoft SQL Server 2005 SP1+Q925744",
               "69f6f4434c1cdd351d3f0787da729b53": "Microsoft SQL Server 2005 SP1+Q924954/925335",
               "c8a854536e5278340ff54ff15d8f762f": "Microsoft SQL Server 2005 SP1+Q925135",
               "f29b61669cf292583822ba2d5a99022c": "Microsoft SQL Server 2005 SP1+Q925227",
               "d32d3c8eabbdfd159abb34f657879d27": "Microsoft SQL Server 2005 SP1+Q925153",
               "9df776e7b08002f18f32c068250c575d": "Microsoft SQL Server 2005 SP1+Q923849",
               "19a8b28ba93c452de5ee6a444a5fb4a3": "Microsoft SQL Server 2005 SP1+Q929404/924291",
               "c45f25ddf2df7ff53105066742c4f158": "Microsoft SQL Server 2005 SP1+Q923624/923605",
               "90b2d6102b549d19ded6262684ba9d4b": "Microsoft SQL Server 2005 SP1+Q923296/922594",
               "d2a7046acb5933b692c1ef7823226225": "Microsoft SQL Server 2005 SP1+Q922578/922438/921536/922579/920794",
               "7c0027068bab5143dc7ecdd9c68505b4": "Microsoft SQL Server 2005 SP1+Q922063",
               "ec1890c4b20c4380c0e5d995d4a3eb61": "Microsoft SQL Server 2005 SP1+Q920974/921295",
               "58dd5672b8acba1b9f3dee56bfbb5c5e": "Microsoft SQL Server 2005 SP1+Q919636/918832/919775",
               "debc00ed3ccb4b6d22e4f36e4a2e247e": "Microsoft SQL Server 2005 SP1+Q919611",
               "c42f33ad78d89734f01988e8c3485b37": "Microsoft SQL Server 2005 SP1+Q919224",
               "ff46f90098657ef9462183c65e985f9e": "Microsoft SQL Server 2005 SP1+.NET Patch",
               "45cadfbc320ea8d059398b0d7bcf3940": "Microsoft SQL Server 2005 SP1 RTM",
               "5ed2c8ff2453361fc6813c115a37d532": "Microsoft SQL Server 2005 SP1 CTP",
               "f06e25cac6907075a4c349f0d2cc0507": "Microsoft SQL Server 2005 SP1 Beta",
               "b2a538474eb68862549b46f7f1b08829": "Microsoft SQL Server 2005 SP0+Q932556",
               "af5835d5b31aa1e940a6f6e42c74dd18": "Microsoft SQL Server 2005 SP0+Q926493",
               "55368a3eedc0e021dd46434433595ae5": "Microsoft SQL Server 2005 SP0+Q926292",
               "6df6307d137f71525f22d59492c6a696": "Microsoft SQL Server 2005 SP0+Q922804",
               "1d87b14183c6548da00c9a87494d5f40": "Microsoft SQL Server 2005 SP0+Q917887/921106",
               "62b944471248dd6881e54cc629354b9b": "Microsoft SQL Server 2005 SP0+Q918276",
               "dbab590252c6ae350a9bc20aa7ff8027": "Microsoft SQL Server 2005 SP0+Q917905/919193",
               "7fb3285c5aa23410f293e9540959fc5f": "Microsoft SQL Server 2005 SP0+Q917888/917971",
               "0ed0f8dac184279d360c451498ba6140": "Microsoft SQL Server 2005 SP0+Q917738",
               "8953c247aa439bd924d1b5cf1596a95f": "Microsoft SQL Server 2005 SP0+Q917824",
               "a0ed6b35ccc3277306cdc2b320fc17de": "Microsoft SQL Server 2005 SP0+Q917016",
               "34c9c15d5565a8edf5d9b9126e5c7997": "Microsoft SQL Server 2005 SP0+Q916706",
               "339d41f65fb7dc86aaf8ec521c06cad9": "Microsoft SQL Server 2005 SP0+Q916086",
               "d0b8b5ba5d4f73b7a0c3b97d022f9cea": "Microsoft SQL Server 2005 SP0+Q916046",
               "0513ee8564d88342e21334c6e6baac86": "Microsoft SQL Server 2005 SP0+Q915918",
               "83f673bceda45b50690e9361ab5079c7": "Microsoft SQL Server 2005 SP0+Q915112/915306/915307/915308",
               "365e5867e44bbbfd75455dcb27899253": "Microsoft SQL Server 2005 SP0+Q913494",
               "80b4e818dc3834cccf636a5d1acba15c": "Microsoft SQL Server 2005 SP0+Q912472/913371/913941",
               "7a95f97cabca3d1a79be780c722eba5b": "Microsoft SQL Server 2005 SP0+Q912471",
               "2dfe55643687817480801ba2df89af61": "Microsoft SQL Server 2005 SP0+Q911662",
               "5c1ae183089e8551e524d6aa61e15786": "Microsoft SQL Server 2005 SP0+Q915793",
               "ab13210d3c275f1f5f51b58917880e83": "Microsoft SQL Server 2005 SP0+Q910416",
               "180209d4f976e6256afd3d11eab21881": "Microsoft SQL Server 2005 SP0+Q932557",
               "74dd03f53875926337e03308b6d9c1b4": "Microsoft SQL Server 2005 RTM",
               "a55053abe8197bbc7d4515896ab328d2": "Microsoft SQL Server 2005 September CTP Release",
               "e138673dbba7a5c8f81479de6d72ff2c": "Microsoft SQL Server 2005 June CTP Release",
               "08736341e8a0d8c567b724edf2b1af3b": "Microsoft SQL Server 2005 April CTP Release",
               "32054b12be1c6df74821d8ff07492a11": "Microsoft SQL Server 2005 March CTP Release",
               "df6f8bce0469ad67035db826792d516b": "Microsoft SQL Server 2005 December CTP Release",
               "04dba07526224ebc5ca070d9db41e9f6": "Microsoft SQL Server 2005 October CTP Release",
               "f6956a2c5d910d9b5ecc6ef8c69fe1a1": "Microsoft SQL Server 2005 Internal Build (?)",
               "cf3cfee8fe1bf593f8a346c4ddb1ea5e": "Microsoft SQL Server 2005 Beta 2",
               "bf1cc6be113f870f1bff996e0df7ca03": "Microsoft SQL Server 2005 Internal Build (?)",
               "3b6d25cb3020824f0ae4b6a98b8ef008": "Microsoft SQL Server 2005 Internal Build (?)",
               "b4ced29e8ee2510ad0d93264d23fba75": "Microsoft SQL Server 2005 Express Edition Tech Preview",
               "148ab7ef6fe8065734b39cadcd00c542": "Microsoft SQL Server 2005 Internet Build (IDW4)",
               "7cb7b1d5499d49eb00e1d59858c10ff7": "Microsoft SQL Server 2005 Internet Build (IDW3)",
               "e1f79ede783ae7f63203902743d5054a": "Microsoft SQL Server 2005 Internet Build (IDW2)",
               "441e4bdd7654296e6552c00cdcd430f4": "Microsoft SQL Server 2005 Internet Build (IDW)",
               "f994815c3f2694e5f85286c6b03cd06a": "Microsoft SQL Server 2005 Internal Build (?)",
               "c4931953a77436e4779508204d572744": "Microsoft SQL Server 2005 Beta 1",
               "9c06d6ab148792f83c1f940a5c481db3": "Microsoft SQL Server 2000 SP4+Q971524",
               "d9940f11b8f9ad794f85a02524838d99": "Microsoft SQL Server 2000 SP4+Q941203/948111",
               "2af392701a43433e8d75938f012b5508": "Microsoft SQL Server 2000 SP4+Q946584",
               "1bc44ef5c46df35fa2b373849a33e52d": "Microsoft SQL Server 2000 SP4+Q944985",
               "96e46b8a7aa0714ed7eca709e6daf2d1": "Microsoft SQL Server 2000 SP4+Q939317",
               "e8aa875e5ede62bb7c26c3627a5335b8": "Microsoft SQL Server 2000 SP4+Q936232",
               "20cb55f5b6f96d033931e059ed096ef7": "Microsoft SQL Server 2000 SP4+Q935950",
               "d0bd8d93ed7fae6832d820222124d0ad": "Microsoft SQL Server 2000 SP4+Q935465",
               "9e225c8ad386a35aa2f8168174f0e405": "Microsoft SQL Server 2000 SP4+Q933573",
               "7da482c778197df0591b9c7ba271ccde": "Microsoft SQL Server 2000 SP4+Q934203",
               "e88dd049edeec1334d232a8a7f172f8e": "Microsoft SQL Server 2000 SP4+Q929131/932686/932674",
               "83d55f654bd80dd4334015909889dfb9": "Microsoft SQL Server 2000 SP4",
               "b1430d2806fa07d13b62d6c3a1c8885c": "Microsoft SQL Server 2000 SP4+Q899761/935897",
               "7b8bea9fcab8f21a0c1846a0be250399": "Microsoft SQL Server 2000 SP4",
               "aa66173e2f4beb22d79506411667eaac": "Microsoft SQL Server 2000 SP4+Q931932",
               "695cfb74f1ce88f35cc03f312143a27a": "Microsoft SQL Server 2000 SP4+Q929440/929131",
               "3172ab0dbc42c026d3008dcd4a7d606f": "Microsoft SQL Server 2000 SP4+Q928568",
               "8ff18432ba933b57c748fc288ee2fa25": "Microsoft SQL Server 2000 SP4+Q928079",
               "3b6fe08b6b8ac00daa7d6e91f3ee6e15": "Microsoft SQL Server 2000 SP4+Q927186",
               "5bb8d5ab1b18fed0b42125afd249f924": "Microsoft SQL Server 2000 SP4+Q925684/925732",
               "2fff9bf920d5350df656d5c13cac86b3": "Microsoft SQL Server 2000 SP4+Q925678/925419",
               "8725bd02682859df7228e9f9340dec46": "Microsoft SQL Server 2000 SP4",
               "3c6f2b9d3d0dc6ef55f4c63357a119d6": "Microsoft SQL Server 2000 SP4+Q925297",
               "976a22e431b51b6e4f79de7fa07ab97a": "Microsoft SQL Server 2000 SP4+Q924664",
               "cd5ec1db116c6e1d95d97897e02bc743": "Microsoft SQL Server 2000 SP4",
               "1624d981efa13866b9e71b8061bec6a9": "Microsoft SQL Server 2000 SP4+Q924662/923563/923327/923796",
               "13898528d4683cdd9591875ae819da26": "Microsoft SQL Server 2000 SP4+Q923797",
               "0179aff63a9489cdd9ef841d3b5494fd": "Microsoft SQL Server 2000 SP4+Q923344",
               "1641d7cab5075a0f35d66f7d17bc4343": "Microsoft SQL Server 2000 SP4",
               "f3125c4259b0ad558770fc38eca63f30": "Microsoft SQL Server 2000 SP4",
               "4c73b851a37594d2d3ff3489a5b42f54": "Microsoft SQL Server 2000 SP4+Q920930",
               "7d08187e20ce5bec8412b16cea874d25": "Microsoft SQL Server 2000 SP4",
               "06b489f9c178a289fc7baa1a267eecda": "Microsoft SQL Server 2000 SP4+Q919221",
               "aed8eb308dc6f48327f4b2543ab2f553": "Microsoft SQL Server 2000 SP4+Q919133/919068/919399",
               "1e57b73c07e57164cf246613016b31f5": "Microsoft SQL Server 2000 SP4+Q919165",
               "949087541e3afe30a92fb52c6edc91a7": "Microsoft SQL Server 2000 SP4+Q917972/917565",
               "28c236770f38c2b2c7b3269897641956": "Microsoft SQL Server 2000 SP4+Q917606",
               "54a9e766f863c3df7f3dc1986fd69d55": "Microsoft SQL Server 2000 SP4+Q916698/916950",
               "e5d20eb6aec23b0f5b8794a6fb886a60": "Microsoft SQL Server 2000 SP4",
               "cb2a4274338bc1669bf4b2dd720e4f55": "Microsoft SQL Server 2000 SP4+Q916652/913438",
               "12e23766a9903757393d51121ca785be": "Microsoft SQL Server 2000 SP4+916287/914384/898709/915065/915340",
               "29cfc25a7826f5ee8e6b37e1faf70c1d": "Microsoft SQL Server 2000 SP4",
               "6e336bf9234a2f8ffb26683a19531933": "Microsoft SQL Server 2000 SP4",
               "563bafc6e4f5bf11f8ed460f6bacbe09": "Microsoft SQL Server 2000 SP4",
               "817615392c8c7cbb282bcf96763ebb89": "Microsoft SQL Server 2000 SP4+Q913684 (64-bit)",
               "45e6827a8d55ef2af86142f4a9452c71": "Microsoft SQL Server 2000 SP4",
               "6dd851d35505d3d626cd899ddeeceeef": "Microsoft SQL Server 2000 SP4+Q911678/922579",
               "3d9c7fc1f8153fd2f030ea271bb2ef4d": "Microsoft SQL Server 2000 SP4+Q910707",
               "2c6de8d59f442d1d239b8392e447e3dc": "Microsoft SQL Server 2000 SP4+Q909369",
               "6b0c980cbb6357414776dcedd4b9c12a": "Microsoft SQL Server 2000 SP4+Q907813",
               "792bdb660fa9878f7ac16041d0b88cea": "Microsoft SQL Server 2000 SP4+Q921293",
               "6e8153945216c7c00d3d9a55cb79499f": "Microsoft SQL Server 2000 SP4+Q909734",
               "d76843017acb57ae1ac660c548fcee24": "Microsoft SQL Server 2000 SP4",
               "8246465981546932efcae109be0d5fbe": "Microsoft SQL Server 2000 SP4+Q904660",
               "c72939b430f41809dbd4b637dea0ef76": "Microsoft SQL Server 2000 SP4+Q907250",
               "f7997d85c617e8b6b58e8c7b62d12571": "Microsoft SQL Server 2000 SP4+Q906790",
               "ea50ed28e41bb538de852364c8f63c52": "Microsoft SQL Server 2000 SP4+Q903742/904244",
               "b8c4252b5268a455ea5be4934796d2c2": "Microsoft SQL Server 2000 SP4+Q899430/899431/900390/900404/901212/902150/902955",
               "4873c8a54dfed6850570d1450adf14e1": "Microsoft SQL Server 2000 SP4+Q899410",
               "97871b3e6a08772c8d91d1fc33363804": "Microsoft SQL Server 2000 SP4",
               "f28440eb00580ac2fb816e6dd81d4f47": "Microsoft SQL Server 2000 SP4+Q826906/836651",
               "dbfcd5997ac28d826aaf4e9e7914ac97": "Microsoft SQL Server 2000 GDR SP4+Q941203/948110",
               "23ec3ff66c1800735f5b6baa2a483055": "Microsoft SQL Server 2000 SP4+Q899761",
               "cef2efdc1d7fe6763821c4c83f955a4a": "Microsoft SQL Server 2000 SP4",
               "bf3d933134ff0291ceb921eaf300e1f7": "Microsoft SQL Server 2000 SP4 Beta",
               "14a4b505bf15719571d05466cfb80fc6": "Microsoft SQL Server 2000 SP3+Q899410",
               "b85df1617a47264bc4cf23bf5313fcec": "Microsoft SQL Server 2000 SP3+Q930484",
               "155308c30b4ec6a15fca7de1f6ef4c00": "Microsoft SQL Server 2000 SP3+Q929410",
               "3d27feda127adc9c0f60dfb71d5ae86d": "Microsoft SQL Server 2000 SP3+Q917593",
               "99d9bb4f3b2e25d5ee032e43aab83e35": "Microsoft SQL Server 2000 SP3+Q915328",
               "511d0bf0e696c0a9f90c403a414a9925": "Microsoft SQL Server 2000 SP3+Q902852",
               "85fa39c1f5a29f4c6f2237ef040275de": "Microsoft SQL Server 2000 SP3+Q900416",
               "863b1709aaf4addbe359be0aecaa441c": "Microsoft SQL Server 2000 SP3+Q899428/899430",
               "545f2fc692e3559168d8c5b541f1f4cf": "Microsoft SQL Server 2000 SP3+Q898709",
               "dd4cad7b5563632c33dc4ea30b1bda4a": "Microsoft SQL Server 2000 SP3+Q887700",
               "91a685ca7920a8e2d42a45dbac182a2c": "Microsoft SQL Server 2000 SP3+Q896985",
               "c91ceaf0a4685672eca12c497dc3f0e5": "Microsoft SQL Server 2000 SP3+Q897572",
               "02c363b38ff917a2bf85a9ef3c6b9682": "Microsoft SQL Server 2000 SP3+Q896425",
               "dcdc9fdffad23c34e0bc6c8010ca8f39": "Microsoft SQL Server 2000 SP3+Q895123/187",
               "0354509565ad24faa47236b36715778f": "Microsoft SQL Server 2000 SP3+Q891866",
               "49b59d1c2b196cba51eaf0f26a2669dd": "Microsoft SQL Server 2000 SP3+Q894257",
               "bb29ac0ec7af53e35a246c1a8c0971d5": "Microsoft SQL Server 2000 SP3+Q893312",
               "329bf3062dbbeb087df696f323a81a54": "Microsoft SQL Server 2000 SP3+Q892923",
               "246548bc901dc2f22ae11fe615e3bf51": "Microsoft SQL Server 2000 SP3+Q892205",
               "6ee37d17719edd2909da543965cb8b0c": "Microsoft SQL Server 2000 SP3+Q891585",
               "c21550190cd6f4fef5ef3f3168b5c11d": "Microsoft SQL Server 2000 SP3+Q891311",
               "abc8c4ae0c53539c7b4bbd22affc0b33": "Microsoft SQL Server 2000 SP3+Q891017/891268",
               "21e4ffd1ca0f402b7497a6eeb2f42be5": "Microsoft SQL Server 2000 SP3+Q890942/768/767",
               "35d4a4596e208c832c80409b21aa15d8": "Microsoft SQL Server 2000 SP3+Q890925/888444/890742",
               "0a04fbd23bfd4301224c587c1b10b877": "Microsoft SQL Server 2000 SP3+Q889314",
               "db87459da44149b724cf7dc98ea7a854": "Microsoft SQL Server 2000 SP3+Q890200",
               "ab6fc3a3565a396b1a654f6f0b8aeac0": "Microsoft SQL Server 2000 SP3+Q889166",
               "b2d0c946993e599c1fd75eac48f86e1f": "Microsoft SQL Server 2000 SP3+Q889239",
               "1fb416297d3c46ee0f9b156ac2161c13": "Microsoft SQL Server 2000 SP3+Q887974",
               "d74e31ef5e8ed0380aa86cbba7d7454f": "Microsoft SQL Server 2000 SP3+Q888007",
               "85191180a1ed7d473b312bb21253c5d4": "Microsoft SQL Server 2000 SP3+Q884554",
               "959e85dd0f07ab61ce76e688fec54865": "Microsoft SQL Server 2000 SP3+Q885290",
               "34636c96d04096e0fc0f80b30f912cda": "Microsoft SQL Server 2000 SP3+Q872842",
               "91750489a03aeb1eddd714be321dd55e": "Microsoft SQL Server 2000 SP3+Q878501",
               "a8eb15523282e4f2f390b09942d9e9a6": "Microsoft SQL Server 2000 SP3+Q883415",
               "639315a644f9f953bfde0293ab44ee43": "Microsoft SQL Server 2000 SP3+Q873446",
               "d183e99afad930748f1723a0361c43ea": "Microsoft SQL Server 2000 SP3+Q878500",
               "76997a9fdc8fac6dc1223646ea79133f": "Microsoft SQL Server 2000 SP3+Q870994",
               "692d2835fb1e2eecf100ccd8d8bc487f": "Microsoft SQL Server 2000 SP3+Q867798",
               "db559b450028b6de61a7af91c3ffd424": "Microsoft SQL Server 2000 SP3+Q843282",
               "181fab6d35f826a4842ba17d57748c7d": "Microsoft SQL Server 2000 SP3+Q867878/867879/867880",
               "b303da0076e8ae00e309d0060bd3fd21": "Microsoft SQL Server 2000 SP3+Q843266",
               "3c6c96db722aeb4af970d1086821ec71": "Microsoft SQL Server 2000 SP3+Q843263",
               "bc59c19754ba6b45941f0a2730072787": "Microsoft SQL Server 2000 SP3+Q839280",
               "860a010707c5c1bed7b35143ca2bbb49": "Microsoft SQL Server 2000 SP3+Q841776",
               "5b7447e0961958d919e2d05df8342a04": "Microsoft SQL Server 2000 SP3+Q841627",
               "b8f551b5383f52d5e34250309420b29e": "Microsoft SQL Server 2000 SP3+Q841401",
               "1a2d7f95c1477c943ca79976b1e398dc": "Microsoft SQL Server 2000 SP3+Q841404",
               "b9db757a415276c9a105b94e9b8a8179": "Microsoft SQL Server 2000 SP3+Q840856",
               "16eb6f3240eb291f3ee0bcedd6b7e926": "Microsoft SQL Server 2000 SP3+Q839529",
               "0006bfe1b084f7de4a9597348cdf85f8": "Microsoft SQL Server 2000 SP3+Q839589",
               "214c16c244d8f5cc26f78a91a0600655": "Microsoft SQL Server 2000 SP3+Q839688",
               "e25a4ad12b6c1fb079cd32ac0eaf9158": "Microsoft SQL Server 2000 SP3+Q839523",
               "2c38fbbce9af744a87acd22b93a7e66c": "Microsoft SQL Server 2000 SP3+Q838460",
               "c48102a39c959f8fe55ac5d6eafb9563": "Microsoft SQL Server 2000 SP3+Q837970",
               "b90c267361c5e51ecfd9e8f375afc74b": "Microsoft SQL Server 2000 SP3+Q837957",
               "70a4034cb904d61eb766d095d54b8c99": "Microsoft SQL Server 2000 SP3+Q317989",
               "d10ca517eabbd398f7e088b15b1480f6": "Microsoft SQL Server 2000 SP3+Q837401",
               "5ad4e7c15750d9bedeb83e9155a1a456": "Microsoft SQL Server 2000 SP3+Q836651",
               "240d4ee87cf33bab6e85d0fa86c432fc": "Microsoft SQL Server 2000 SP3+Q837957",
               "a34dcd903ad479749c20bd19a21039dc": "Microsoft SQL Server 2000 SP3+Q834798",
               "b267075e4156bc8f70bc16a28c4054b6": "Microsoft SQL Server 2000 SP3+Q834290",
               "022b2e52fc875b6bbbb1b77b5532e7a6": "Microsoft SQL Server 2000 SP3+Q834453",
               "5e9e3430c257571e6b80f18fe2a5163f": "Microsoft SQL Server 2000 SP3+Q833710",
               "84aa6f2ed3d4e12cded4270aa3d81c20": "Microsoft SQL Server 2000 SP3+Q836141",
               "8b378b7aa850a1722203ceb466ed49a0": "Microsoft SQL Server 2000 SP3+Q832977",
               "1bf33b89ea85377b95dd10b2da95f297": "Microsoft SQL Server 2000 SP3+Q831950",
               "be32b6c980c0b1562c27aff4807d9639": "Microsoft SQL Server 2000 SP3+Q830912/831997/831999",
               "76610ef6ac2c6d2ff4790e0ca49b557e": "Microsoft SQL Server 2000 SP3+Q830887",
               "1f8d28ea21e0388c9d3ea36da652124f": "Microsoft SQL Server 2000 SP3+Q830767/830860",
               "1f20c0b03aad43758772b8f733bbac36": "Microsoft SQL Server 2000 SP3+Q830262",
               "9804bfcc55c1e2621983b475a8195132": "Microsoft SQL Server 2000 SP3+Q830588",
               "06d68ec4409efb9f7c9bd5023f2fbd1f": "Microsoft SQL Server 2000 SP3+Q830366",
               "c851ac35fa3372e702c8a76f8cfccea4": "Microsoft SQL Server 2000 SP3+Q830366",
               "b32b859c43a7d78fc52a439014dc294e": "Microsoft SQL Server 2000 SP3+Q830395/828945",
               "2f415d0d1fab1a9252aff9893f341b4b": "Microsoft SQL Server 2000 SP3+Q829205/829444",
               "a0eefb0a7a5683744f8696ce062280d8": "Microsoft SQL Server 2000 SP3+Q821334",
               "b9b4405689b7e3e91994d210b37f178c": "Microsoft SQL Server 2000 SP3+Q828637",
               "3563b592de9fa2caf222c49c52cb2826": "Microsoft SQL Server 2000 SP3+Q828017/827714/828308",
               "93a0b0382df938de832eed9ad36aac44": "Microsoft SQL Server 2000 SP3+Q828096",
               "b2f0d7795d67194e80021cfc8a2ada39": "Microsoft SQL Server 2000 SP3+Q828699",
               "b85cc7ed6e5c25420055f3ac5e6caf52": "Microsoft SQL Server 2000 SP3+Q830466/827954",
               "5c9d7da06bc9a1303e9036c0815c66ea": "Microsoft SQL Server 2000 SP3+Q826754",
               "4f2134b917da528f2c941f43f51a75dd": "Microsoft SQL Server 2000 SP3+Q826860/826815/826906",
               "23b43db6d31e8fd05027ab5c9c1ca866": "Microsoft SQL Server 2000 SP3+Q826822",
               "8e6c6d1c321af7ab0a5e1ebc06533443": "Microsoft SQL Server 2000 SP3+Q826433",
               "01689e6944f3586650fc839a09daced5": "Microsoft SQL Server 2000 SP3+Q826364/825854",
               "98bb46bd84bd1cecbb384f727c6f8872": "Microsoft SQL Server 2000 SP3+Q826080",
               "894e28560c520d1d39149a196f4949be": "Microsoft SQL Server 2000 SP3+Q825043",
               "ff85c3550c2ecb4878ff5ec3e69ea87f": "Microsoft SQL Server 2000 SP3+Q825225",
               "e2e149490297f10c6b6d4b76f6fc7498": "Microsoft SQL Server 2000 SP3+Q319477/319477",
               "a5b445f71f2a377474f2a36a744bfaff": "Microsoft SQL Server 2000 SP3+Q823877/824027/820788",
               "13c808e0bc046e0a5b8ffba069d64392": "Microsoft SQL Server 2000 SP3+Q821741/548/740/823514",
               "41eb61cbf4f70426af3988bc13ebc7a3": "Microsoft SQL Server 2000 SP3+Q826161",
               "ef4ee2dc2944c7e49664190dd153c471": "Microsoft SQL Server 2000 SP3+Q821277/337/818388/826161/821280",
               "ee826f8c465082b0f65a68da80de0375": "Microsoft SQL Server 2000 SP3+Q818766",
               "2d00ea780d8c2cdab739927428d3ad20": "Microsoft SQL Server 2000 SP3+Q819662",
               "c9140148cf12e80a2d07f3e94361f712": "Microsoft SQL Server 2000 SP3+Q819248/819662/818897",
               "aafc5dc78cb99cfad3eeba64a81a55e8": "Microsoft SQL Server 2000 SP3+Q818899",
               "cc36a5cdcf5f6bad0793c6a1cef22225": "Microsoft SQL Server 2000 SP3+Q818729",
               "d6f81b1a05e71ef0f2324555538a0462": "Microsoft SQL Server 2000 SP3+Q818540",
               "95cd165871c34f0b6546f6a7a0908b75": "Microsoft SQL Server 2000 SP3+Q818414/097/188",
               "099ff23250cf7a978a1ffe0ae8fba8ce": "Microsoft SQL Server 2000 SP3+Q817464",
               "350b6acd994ec368ca7880f2a230763a": "Microsoft SQL Server 2000 SP3+Q817464/813524/816440/817709",
               "4ef91c8af147277ccddad0793e2df2c7": "Microsoft SQL Server 2000 SP3+Q815249",
               "a4f8992973bcf888e98558f346570b4a": "Microsoft SQL Server 2000 SP3+Q817081",
               "a865be163ac9e48eb3dc3d92062c8615": "Microsoft SQL Server 2000 SP3+Q816840",
               "23c03c930097c999c545e213141e8973": "Microsoft SQL Server 2000 SP3+Q816985",
               "3e5bb714b7f121821370ee5ffb7f5e81": "Microsoft SQL Server 2000 SP3+Q815057",
               "ff84e7f07707dd6a8a96fc046b4dd188": "Microsoft SQL Server 2000 SP3+Q816084/810185",
               "0aab6fdd38e11578d69480ad546c0326": "Microsoft SQL Server 2000 SP3+Q814035",
               "d40385b15d7177701d1ccc373efa45d9": "Microsoft SQL Server 2000 SP3+Unidentified",
               "159e3c5927bd9649d84780b4df3a070a": "Microsoft SQL Server 2000 SP3+Q815115",
               "fa17e88fec36a7c405e3ed1fc7825775": "Microsoft SQL Server 2000 SP3+Q814889/93",
               "3f6a9680c981963533775e7cb4fb5562": "Microsoft SQL Server 2000 SP3a",
               "0a6d937b45a604f18764b791b3c9ff78": "Microsoft SQL Server 2000 SP3+Q810163/688/811611/813769/813759/812995/814665/460/813494",
               "a8a83b959f9b1b220b4decf7fd9ee371": "Microsoft SQL Server 2000 SP3+Q814113",
               "7b138e234394abb63ae7a991499216ac": "Microsoft SQL Server 2000 SP3+Q814032",
               "058637f3667bd3ef051d584889fc9dba": "Microsoft SQL Server 2000 SP3",
               "5ab9146359684369c4114b03e0d815f3": "Microsoft SQL Server 2000 SP2+Q818406/763",
               "6c706cca15b9b60eddae305be01046e7": "Microsoft SQL Server 2000 SP2+Q818096",
               "ee654d46c89d2f08facceda961fe747c": "Microsoft SQL Server 2000 SP2+Q816937",
               "673be5f4da93443c31d7cd53f01a3b1c": "Microsoft SQL Server 2000 SP2+Q81488",
               "ba0504a7001a8108d93812e21d214fc3": "Microsoft SQL Server 2000 SP2+Q813759",
               "6a1cd5d7804ffc0d8fdd4c5dde2c2e7c": "Microsoft SQL Server 2000 SP2+Q813769",
               "0fd59864f667ff86c862d240ea6b826d": "Microsoft SQL Server 2000 SP2+Q814460",
               "897258fe6bd5d27f6123090a557a7096": "Microsoft SQL Server 2000 SP2+Q812995/813494",
               "38f3d112f9d5741cf2c9bf10ab4c92aa": "Microsoft SQL Server 2000 SP2+Q812798",
               "a6fb9afd2d1728fdf8534fdbafd701c9": "Microsoft SQL Server 2000 SP2+Q812250/812393",
               "5469a8df4be4fb456220da13a94e985a": "Microsoft SQL Server 2000 SP2+Q811703",
               "ffa6512a511c80dbf82de3622ae2c75b": "Microsoft SQL Server 2000 SP2+Q810688/811611",
               "5f83dae13d17a9c921316c16e423625f": "Microsoft SQL Server 2000 SP2+Q811478",
               "f2d152848b751aa88274c514372b77bf": "Microsoft SQL Server 2000 SP2+Q811205",
               "31e67644ea06b479f854b4835455a7e4": "Microsoft SQL Server 2000 SP2+Q811052",
               "9b4cfbde55a1d2bfbd0c8e5c283ebb6b": "Microsoft SQL Server 2000 SP2+Q810920",
               "b094477c0115f62dc436a50ba29c70d7": "Microsoft SQL Server 2000 SP2+Q810526",
               "e75f77b61a0b50648d6ba4450c5f134e": "Microsoft SQL Server 2000 SP2+Q328551",
               "b4ce52ccffa3c71a30432e98f5c1dd23": "Microsoft SQL Server 2000 SP2+Q810026/810163",
               "6f8dadb61ac2804e3e077a4812b29a16": "Microsoft SQL Server 2000 SP2+Q810072",
               "e7dc54156ac1ebe11e5c56d47dda26c2": "Microsoft SQL Server 2000 SP2+Q810052/10",
               "24469c51c3a693ec3ce4d87c775bbb4b": "Microsoft SQL Server 2000 SP2+Q331885/965/968",
               "2a851042673090a8633c172e88dee95c": "Microsoft SQL Server 2000 SP2+Q330212",
               "35da1ac0bf89a0c4b90ef95bc79e9efd": "Microsoft SQL Server 2000 SP2+Q311104",
               "080caa480a46dab28516b2db1ff566f9": "Microsoft SQL Server 2000 SP2+Q329499",
               "cfc5eb9f37d286cabc2d0f6c88a7e2d7": "Microsoft SQL Server 2000 SP2+Q329487",
               "998f7167442e8bea95a65d20b7ab828d": "Microsoft SQL Server 2000 SP2+Q316333",
               "7edde13fda78609894b4da3f2b0185e9": "Microsoft SQL Server 2000 SP2+Q319851",
               "1d4ce7e2a9b9a4cbd657c58310e911eb": "Microsoft SQL Server 2000 SP2+Q316333",
               "6b619a027826a16268fb2f31ae5401d1": "Microsoft SQL Server 2000 SP2+Q328354",
               "d16f90cc9ff29222c668a5982fab7c2d": "Microsoft SQL Server 2000 SP2+8/14 fix",
               "c21324924cee3e170cd4c855b49627b0": "Microsoft SQL Server 2000 SP2+8/8 fix",
               "8f278410e502b8222a60f8877749bc12": "Microsoft SQL Server 2000 SP2+Q326999",
               "70a3b5a45d1215c72895fdf00c2d67c5": "Microsoft SQL Server 2000 SP2+7/24 fix",
               "ca31d287989f63f5f3bd5663ad194fc9": "Microsoft SQL Server 2000 SP2+Q810010?",
               "6525824de7fa2d7726e3d6a2039b7d51": "Microsoft SQL Server 2000 SP2+Q322853",
               "c529c7d89207dbe6a25170d1f7a5ff84": "Microsoft SQL Server 2000 SP2+Q324186",
               "071832bf16697c87322ccd80b2ab9d5d": "Microsoft SQL Server 2000 SP2+Q319507",
               "d53856b75e4748a06cfa6547bc4102e5": "Microsoft SQL Server 2000 SP2+3/29 fix",
               "c941921ca2a5344528955a5a50d87a57": "Microsoft SQL Server 2000 SP2+Q319869",
               "09066a6827f422a90520447d6261c1f6": "Microsoft SQL Server 2000 SP2+Q319477/319477",
               "2fd5a25ae8451cfad649b26616c3de52": "Microsoft SQL Server 2000 SP2+Q317979/318045",
               "3a47ee1b989aa62e041bbbf11cc0a64b": "Microsoft SQL Server 2000 SP2+1/29 fix",
               "a3069d793fd4898da4a6cc49ec9854bc": "Microsoft SQL Server 2000 SP2+Q314003/315395",
               "ae52459c92280b7076ff08f9f7faa612": "Microsoft SQL Server 2000 SP2+Q313002/5",
               "3a458aa61576dd6a1ca99080c24f51c0": "Microsoft SQL Server 2000 SP2",
               "3048436d9ea777ec672fc6f9b780108f": "Microsoft SQL Server 2000 SP2 Beta",
               "c3ea9d182af9828988511d958e0086d9": "Microsoft SQL Server 2000 SP1+1/29 fix",
               "4a16d6cb6d89eb887f4d4cadb29a719f": "Microsoft SQL Server 2000 SP1+Q315395",
               "7004fe830c8cd373dae8388c1fa7b428": "Microsoft SQL Server 2000 SP1+Q314003",
               "0cae5ce9142488b3841ceaab2f58e82c": "Microsoft SQL Server 2000 SP1+Q313302",
               "edee44c8e3eae46d42a59484da947bf8": "Microsoft SQL Server 2000 SP1+Q313005",
               "0c45d8573d7b54c690a92136903c1fee": "Microsoft SQL Server 2000 SP1+Q308547",
               "1b2b700f8e526f1b97d83a347f36e6d9": "Microsoft SQL Server 2000 SP1+Q307540/307655",
               "cc88239fcfb4331414cc061c5114de2c": "Microsoft SQL Server 2000 SP1+Q307538",
               "e2136ebf1cd70d40581495bf56a7f839": "Microsoft SQL Server 2000 SP1+Q304850",
               "6a2c92b72ffa1ebba460db3d27dc1fd3": "Microsoft SQL Server 2000 SP1",
               "0dc5c170558a5bc398944b9b2b3df1d5": "Microsoft SQL Server 2000 SP1 Beta",
               "c8fd50fd3e6988f8221f36652bbdfd92": "Microsoft SQL Server 2000 RTMa",
               "8fb5d6ffd5472d7955a1476f233f40cd": "Microsoft SQL Server 2000 SP0+Q299717",
               "fc4476a573fcc069b9cce75b85877598": "Microsoft SQL Server 2000 SP0+Q297209",
               "18325f49fcae057ac9fd5869bcaa9195": "Microsoft SQL Server 2000 SP0+Q300194",
               "bb546ab5fa68d71a3a8004576824c0fe": "Microsoft SQL Server 2000 SP0+Q291683",
               "af806b08a75eada023b793e5b1c79fa1": "Microsoft SQL Server 2000 SP0+Q288122",
               "22bb4a2333ae5ebc6e5c0987b08a2586": "Microsoft SQL Server 2000 SP0+Q285290",
               "9ba705874f98e6b8bd161c92143482aa": "Microsoft SQL Server 2000 SP0+Q282416",
               "295532fd25f6beb75fc8195c89ed2dba": "Microsoft SQL Server 2000 SP0+Q282279",
               "158b240bc68d63b55243f85d10226da2": "Microsoft SQL Server 2000 SP0+Q278239",
               "9380fd5719359992f214f9731c0e2f15": "Microsoft SQL Server 2000 SP0+Q281663",
               "72d486b18ed156b579bea1e6b9f81d4e": "Microsoft SQL Server 2000 SP0+Q28038",
               "ad2c9bf960a790f810d95fa75e9feb41": "Microsoft SQL Server 2000 SP0+Q281769",
               "b79829600c8bdd43137dc7e9f7875b89": "Microsoft SQL Server 2000 SP0+Q279183",
               "b265dc593bfd5517b188efc778075d00": "Microsoft SQL Server 2000 SP0+Q279293/279296",
               "e47ca0e5eed687725830ac79321a7c81": "Microsoft SQL Server 2000 SP0+Q276329",
               "3330f495e92b55cd2025c998c9ea4eed": "Microsoft SQL Server 2000 SP0+Q275900",
               "ccef653f625d0c24c3d39d771fff59b0": "Microsoft SQL Server 2000 SP0+Q274330",
               "1a5770255650633f3b8ca0d57de97961": "Microsoft SQL Server 2000 SP0+Q274329",
               "c45684e3ad99cca2d9f170078fa27758": "Microsoft SQL Server 2000 RTM",
               "fea8c83e635f80fe764f2b4a3e35f77c": "Microsoft SQL Server 2000 Gold",
               "3e240f428c04e8dc9ac70b90c60a4757": "Microsoft SQL Server 2000 Beta 2",
               "ea0b8449c9cdb6003133bac0bf2cc6de": "Microsoft SQL Server 2000 EAP5",
               "85e833abba2f2348edcbe15a7ecdbd60": "Microsoft SQL Server 2000 EAP4"}

        os_version = {"11": "Microsoft SQL Server 2012",
                      "10": "Microsoft SQL Server 2008",
                      "9": "Microsoft SQL Server 2005",
                      "8": "Microsoft SQL Server 2000",
                      "7": "Microsoft SQL Server 7"}
        if hash in I11:
            i11 = I11[hash]
        elif str(OOo) in os_version:
            i11 = os_version[str(OOo)]
        security_note(i11)
    except:
        pass
Example #47
0
 def gen_seed(self):
     # Return a base64-encoded (kinda ... strip the '==\n' from the
     # end) MD5 hash of sorted tree listing.
     self.allfiles.sort()
     return base64.encodestring(md5.md5(''.join(
         self.allfiles)).digest())[:-3]
Example #48
0
def get_gravatar(email):
    import md5
    return "https://secure.gravatar.com/avatar/{hash}?d=retro".format(
        hash=md5.md5(email).hexdigest())
Example #49
0
    def goPartExcel(self):
        import xlwt, random, md5, mimetypes, os
        filename = xlwt.Workbook()
        sheet = filename.add_sheet("%s" % self.navTitle)
        txt_center = xlwt.XFStyle()
        txt_center.alignment.horz = xlwt.Alignment.HORZ_CENTER
        txt_left = xlwt.XFStyle()
        txt_left.alignment.horz = xlwt.Alignment.HORZ_LEFT
        txt_right = xlwt.XFStyle()
        txt_right.alignment.horz = xlwt.Alignment.HORZ_RIGHT

        sheet.col(0).width = 256 * 20
        sheet.col(1).width = 256 * 20
        sheet.col(2).width = 256 * 20
        sheet.col(3).width = 256 * 20
        sheet.col(4).width = 256 * 20
        sheet.col(5).width = 256 * 20
        sheet.col(6).width = 256 * 20
        sheet.col(7).width = 256 * 20
        sheet.col(8).width = 256 * 20
        sheet.col(9).width = 256 * 20
        sheet.col(10).width = 256 * 20
        sheet.col(11).width = 256 * 20
        sheet.col(12).width = 256 * 20

        #第一行
        sheet.write(0, 0, "红包单号", txt_center)
        sheet.write(0, 1, "红包类型", txt_center)
        sheet.write(0, 2, "货号", txt_center)
        sheet.write(0, 3, "条码", txt_center)
        sheet.write(0, 4, "红包名称", txt_center)
        sheet.write(0, 5, "面值/价值", txt_center)
        sheet.write(0, 6, "数量", txt_center)
        sheet.write(0, 7, "会员姓名", txt_center)
        sheet.write(0, 8, "会员卡号", txt_center)
        sheet.write(0, 9, "电话号码", txt_center)
        sheet.write(0, 10, "红包时间", txt_center)
        sheet.write(0, 11, "过期时间", txt_center)
        sheet.write(0, 12, "红包状态", txt_center)

        PL, L = self.dl.mRight()

        i = 0
        for e in L:
            sheet.write(i + 1, 0, e[0], txt_left)
            sheet.write(i + 1, 1, e[1], txt_left)
            sheet.write(i + 1, 2, e[2], txt_left)
            sheet.write(i + 1, 3, e[3], txt_center)
            sheet.write(i + 1, 4, e[4], txt_left)
            sheet.write(i + 1, 5, e[5], txt_right)
            sheet.write(i + 1, 6, e[6], txt_right)
            sheet.write(i + 1, 7, e[7], txt_left)
            sheet.write(i + 1, 8, e[8], txt_right)
            sheet.write(i + 1, 9, e[9], txt_center)
            sheet.write(i + 1, 10, str(e[10]), txt_center)
            sheet.write(i + 1, 11, str(e[11]), txt_center)
            if e[12] == 1:
                e10 = "已使用"
            elif e[12] == 2:
                e10 = "已过期"
            else:
                e10 = "未使用"
            sheet.write(i + 1, 12, e10, txt_center)
            i += 1

        filePATH = r"D:/webpy/data/hjnwx/excel/%s.xls" % (md5.md5(
            "%s" % random.random()).hexdigest())
        filename.save(filePATH)

        from flask import make_response
        file = open(filePATH, 'rb').read()
        response = make_response(file)
        response.headers['content-type'] = mimetypes.guess_type(filePATH)[0]
        response.headers['content-length'] = os.stat(filePATH)[6]

        filename = "%s%s.xls" % (self.navTitle, self.dl.getdate)
        response.headers[
            'Content-Disposition'] = "attachment; filename=%s" % filename.encode(
                "gbk")
        os.remove(filePATH)
        return response
Example #50
0
def cts_upload(instance, filename):
    h = md5.md5('%s_%s' % (instance.cts.student.pk, filename)).hexdigest()
    return 'course_task_solutions_files/%s/%s/%s_%s' % (instance.cts.task.pk, instance.cts.student.pk, h, filename)
Example #51
0
 def md5_hex(data):
     hash = md5.md5()
     hash.update(data)
     hash.digest()
     return hash.hexdigest()
Example #52
0
 def count_hash_sums(self):
     f = open('neobug/' + self.url)
     self.md5sum = md5(f.read()).hexdigest()
     self.sha1sum = sha(f.read()).hexdigest()
     self.save()
    # TODO: There is more data on this page that will not be parsed for the time being.
    # This includes opening times and facilities

    #page_soup = BeautifulSoup(urllib2.urlopen(more_info_url),convertEntities=BeautifulStoneSoup.HTML_ENTITIES)
    #address = ''.join(page_soup.find('strong', text="Address:").next.findAll(text=True))
    #post_code = address.split(',')[-1].strip()
    #address = ', '.join([s.strip() for s in address.split(',')[:-1]])

    # Ugly use of .next.next here to skip over a spurious <br>
    #cleaned_data['babychanging'] = ('Yes' in page_soup.find('strong', text="Baby changing facilities:").next.next)
    #cleaned_data['disabled'] = ('Yes' in page_soup.find('strong', text="Disabled facilities:").next.next)
    #cleaned_data['opening'] = page_soup.find('strong', text="Hours of operation:").next.next

    #cleaned_data['postcode'] = post_code
    #cleaned_data['address'] = address
    cleaned_data['toilet_id'] = md5.md5(toilet_name +
                                        ' Brighton and Hove').hexdigest()

    scraperwiki.sqlite.save(unique_keys=['toilet_id'], data=cleaned_data)
    import urllib2
import re
import md5

from BeautifulSoup import BeautifulSoup, BeautifulStoneSoup

import scraperwiki

KML_URL = "http://www.brighton-hove.gov.uk/downloads/bhcc/openData/mapFiles/PublicToiletsKML.kml"
ONS_CODE = "E06000043"

soup = BeautifulStoneSoup(urllib2.urlopen(KML_URL))
for toilet in soup.findAll('placemark'):
Example #54
0
def md5sum(t):
    return md5.md5(t).hexdigest()
Example #55
0
def link_devel_products(logger, event_queue, package, package_path,
                        devel_manifest_path, source_devel_path,
                        dest_devel_path, metadata_path, prebuild):
    """Link files from an isolated devel space into a merged one.

    This creates directories and symlinks in a merged devel space to a
    package's linked devel space.
    """

    # Create the devel manifest path if necessary
    mkdir_p(devel_manifest_path)

    # Construct manifest file path
    devel_manifest_file_path = os.path.join(devel_manifest_path,
                                            DEVEL_MANIFEST_FILENAME)

    # Pair of source/dest files or directories
    products = list()
    # List of files to clean
    files_to_clean = []
    # List of files that collide
    files_that_collide = []

    # Select the blacklist
    blacklist = DEVEL_LINK_PREBUILD_BLACKLIST if prebuild else DEVEL_LINK_BLACKLIST

    # Gather all of the files in the devel space
    for source_path, dirs, files in os.walk(source_devel_path):
        # compute destination path
        dest_path = os.path.join(
            dest_devel_path, os.path.relpath(source_path, source_devel_path))

        # create directories in the destination develspace
        for dirname in dirs:
            source_dir = os.path.join(source_path, dirname)
            dest_dir = os.path.join(dest_path, dirname)

            if os.path.islink(source_dir):
                # Store the source/dest pair
                products.append((source_dir, dest_dir))

                if os.path.exists(dest_dir):
                    if os.path.realpath(dest_dir) != os.path.realpath(
                            source_dir):
                        files_that_collide.append(dest_dir)
                    else:
                        logger.out('Linked: ({}, {})'.format(
                            source_dir, dest_dir))
                else:
                    # Create a symlink
                    logger.out('Symlinking %s' % (dest_dir))
                    try:
                        os.symlink(source_dir, dest_dir)
                    except OSError:
                        logger.err(
                            'Could not create symlink `{}` referencing `{}`'.
                            format(dest_dir, source_dir))
                        raise
            else:
                if not os.path.exists(dest_dir):
                    # Create the dest directory if it doesn't exist
                    os.mkdir(dest_dir)
                elif not os.path.isdir(dest_dir):
                    logger.err(
                        'Error: Cannot create directory: {}'.format(dest_dir))
                    return -1

        # create symbolic links from the source to the dest
        for filename in files:

            # Don't link files on the blacklist unless this is a prebuild package
            if os.path.relpath(os.path.join(source_path, filename),
                               source_devel_path) in blacklist:
                continue

            source_file = os.path.join(source_path, filename)
            dest_file = os.path.join(dest_path, filename)

            # Store the source/dest pair
            products.append((source_file, dest_file))

            # Check if the symlink exists
            if os.path.exists(dest_file):
                if os.path.realpath(dest_file) != os.path.realpath(
                        source_file):
                    # Compute hashes for colliding files
                    source_hash = md5(
                        open(os.path.realpath(source_file),
                             "rb").read()).hexdigest()
                    dest_hash = md5(
                        open(os.path.realpath(dest_file),
                             "rb").read()).hexdigest()
                    # If the link links to a different file, report a warning and increment
                    # the collision counter for this path
                    if dest_hash != source_hash:
                        logger.err(
                            'Warning: Cannot symlink from %s to existing file %s'
                            % (source_file, dest_file))
                        logger.err(
                            'Warning: Source hash: {}'.format(source_hash))
                        logger.err('Warning: Dest hash: {}'.format(dest_hash))
                    # Increment link collision counter
                    files_that_collide.append(dest_file)
                else:
                    logger.out('Linked: ({}, {})'.format(
                        source_file, dest_file))
            else:
                # Create the symlink
                logger.out('Symlinking %s' % (dest_file))
                try:
                    os.symlink(source_file, dest_file)
                except OSError:
                    logger.err(
                        'Could not create symlink `{}` referencing `{}`'.
                        format(dest_file, source_file))
                    raise

    # Load the old list of symlinked files for this package
    if os.path.exists(devel_manifest_file_path):
        with open(devel_manifest_file_path, 'r') as devel_manifest:
            manifest_reader = csv.reader(devel_manifest,
                                         delimiter=' ',
                                         quotechar='"')
            # Skip the package source directory
            devel_manifest.readline()
            # Read the previously-generated products
            for source_file, dest_file in manifest_reader:
                # print('Checking (%s, %s)' % (source_file, dest_file))
                if (source_file, dest_file) not in products:
                    # Clean the file or decrement the collision count
                    logger.out('Cleaning: (%s, %s)' % (source_file, dest_file))
                    files_to_clean.append(dest_file)

    # Remove all listed symlinks and empty directories which have been removed
    # after this build, and update the collision file
    try:
        clean_linked_files(logger,
                           event_queue,
                           metadata_path,
                           files_that_collide,
                           files_to_clean,
                           dry_run=False)
    except:  # noqa: E722
        # Silencing E722 here since we immediately re-raise the exception.
        logger.err('Could not clean linked files.')
        raise

    # Save the list of symlinked files
    with open(devel_manifest_file_path, 'w') as devel_manifest:
        # Write the path to the package source directory
        devel_manifest.write('%s\n' % package_path)
        # Write all the products
        manifest_writer = csv.writer(devel_manifest,
                                     delimiter=' ',
                                     quotechar='"')
        for source_file, dest_file in products:
            manifest_writer.writerow([source_file, dest_file])

    return 0
Example #56
0
def get_gravatar_url(email):
    return "https://secure.gravatar.com/avatar/{hash}?d=mm&s=200".format(
        hash=md5.md5(email).hexdigest())
Example #57
0
#!/usr/bin/env python

import sys
import md5

for fn in sys.argv[1:]:
    print "Doing", fn

    f = open(fn)
    b = f.read()
    f.close()

    m = md5.md5(b)

    fout = open(fn + ".md5", "w")
    fout.write(m.hexdigest() + "\n")
    fout.close()
Example #58
0
    def log_exception(d, daystring):
        exc_desc = d['exception_desc']
        exc_type = d['exception_type']

        exc_str = "%s: %s" % (exc_type, exc_desc)

        add_timestamps(d)

        tb = []

        key_material = exc_type
        pretty_lines = []

        make_lock_seen = False
        flaky_db_seen = False

        for tpl in d['traceback']:
            tb.append(tpl)
            filename, lineno, funcname, text = tpl
            if text is None:
                pass
            elif (text.startswith("with g.make_lock(")
                  or text.startswith("with make_lock(")):
                make_lock_seen = True
            elif (text.startswith(
                    "(ProgrammingError) server closed the connection")):
                flaky_db_seen = True
            key_material += "%s %s " % (filename, funcname)
            pretty_lines.append("%s:%s: %s()" % (filename, lineno, funcname))
            pretty_lines.append("    %s" % text)

        if exc_desc.startswith("QueuePool limit of size"):
            fingerprint = "QueuePool_overflow"
        elif exc_desc.startswith("error 2 from memcached_get: HOSTNAME "):
            fingerprint = "memcache_suckitude"
        elif exc_type == "TimeoutExpired" and make_lock_seen:
            fingerprint = "make_lock_timeout"
        elif exc_desc.startswith("(OperationalError) FATAL: the database " +
                                 "system is in recovery mode"):
            fingerprint = "recovering_db"
        elif exc_desc.startswith("(OperationalError) could not connect " +
                                 "to server"):
            fingerprint = "unconnectable_db"
        elif exc_desc.startswith("(OperationalError) server closed the " +
                                 "connection unexpectedly"):
            fingerprint = "flaky_db_op"
        elif exc_type == "ProgrammingError" and flaky_db_seen:
            fingerprint = "flaky_db_prog"
            # SQLAlchemy includes the entire query in the exception
            # description which can sometimes be gigantic, in the case of
            # SELECTs. Get rid of it.
            select_pos = exc_str.find("SELECT")
            if select_pos > 0:
                exc_str = exc_str[pos]
        elif exc_type == "NoServerAvailable":
            fingerprint = "cassandra_suckitude"
        else:
            fingerprint = md5(key_material).hexdigest()

        nickname_key = "error_nickname-" + fingerprint
        status_key = "error_status-" + fingerprint

        nickname = g.hardcache.get(nickname_key)

        if nickname is None:
            nickname = '"%s" Exception' % randword().capitalize()
            news = ("A new kind of thing just happened! " +
                    "I'm going to call it a %s\n\n" % nickname)

            news += "Where and when: %s\n\n" % d['occ']
            news += "Traceback:\n"
            news += "\n".join(pretty_lines)
            news += exc_str
            news += "\n"

            emailer.nerds_email(news, "Exception Watcher")

            g.hardcache.set(nickname_key, nickname, 86400 * 365)
            g.hardcache.set(status_key, "new", 86400)

        if g.hardcache.get(status_key) == "fixed":
            g.hardcache.set(status_key, "new", 86400)
            news = "This was marked as fixed: %s\n" % nickname
            news += "But it just occurred, so I'm marking it new again."
            emailer.nerds_email(news, "Exception Watcher")

        err_key = "-".join(["error", daystring, fingerprint])

        existing = g.hardcache.get(err_key)

        if not existing:
            existing = dict(exception=exc_str, traceback=tb, occurrences=[])

        limited_append(existing['occurrences'], d['occ'])

        g.hardcache.set(err_key, existing, 7 * 86400)

        streamlog("%s [X] %-70s" % (d['hms'], nickname), verbose)
Example #59
0
    def save(self):
        try:
            if 'pos' in request.params and 'zoomlevel' in request.params:
                save_merc_x, save_merc_y = [
                    int(x) for x in request.params['pos'].split(",")
                ]
                save_zoom = int(request.params['zoomlevel'])
                pos = mapper.merc2latlon((save_merc_x, save_merc_y), save_zoom)
                self.set_pos_zoom(pos, save_zoom)

            wps = self.get_waypoints(request.params)

            oldname = request.params.get('oldtripname', '')
            tripname = request.params.get('tripname', '')
            if tripsharing.sharing_active():
                #Can't rename trips while tripsharing is active!
                tripname = session['current_trip']
                if oldname != session['current_trip']:
                    #In some strange way a non-tripsharing oldname appeared in the post. This
                    #means that something has gone awry. Don't save!
                    print "Bad trip oldname while tripsharing active!"
                    return "notok"

            if 'showarea' in request.params and request.params['showarea']:
                sha = request.params['showarea']
                if (sha == '.'):
                    session['showarea'] = ''
                    session['showarea_id'] = ''
                    session['showtrack'] = None
                else:
                    session['showarea'] = sha
                    session['showarea_id'] = md5(
                        sha.encode('utf8')).hexdigest()
                    session['showtrack'] = None

            session['mapvariant'] = request.params.get('mapvariant',
                                                       'airspace')

            #print "Req:",request.params
            oldtrip = None
            if not oldname.strip():
                oldname = tripname
            oldtrips = meta.Session.query(Trip).filter(
                sa.and_(Trip.user == tripuser(), Trip.trip == oldname)).all()
            if len(oldtrips) == 1:
                oldtrip = oldtrips[0]
            if oldtrip:
                trip = oldtrip
                if trip.trip != tripname:
                    if tripsharing.sharing_active():
                        #attempt to rename someone elses trip! Can't be allowed! set tripname to old name
                        print "Attempt to rename trip while viewing shared trip (tripsharing)"
                        return "notok"
                    else:
                        trip.trip = self.get_free_tripname(tripname)
                if session[
                        'current_trip'] != trip.trip and tripsharing.sharing_active(
                        ):
                    #internal error if we get here - the earlier test for current_trip not changing failed.
                    print "Unexpected tripsharing error #2"
                    return "notok"

                session['current_trip'] = trip.trip
            else:
                if tripsharing.sharing_active():
                    #we use sharing, but the shared trip can't be found!
                    print "Tripsharing active, but named trip didn't exist (deleted, probably)"
                    return "notok"
                tripname = self.get_free_tripname(tripname)
                trip = Trip(tripuser(), tripname)
                acs = meta.Session.query(Aircraft).filter(
                    sa.and_(Aircraft.user == tripuser())).all()
                if len(acs):
                    trip.aircraft = acs[0].aircraft

                meta.Session.add(trip)
                session['current_trip'] = tripname

            oldwps = set([(wp.id)
                          for wp in meta.Session.query(Waypoint).filter(
                              sa.and_(Waypoint.user == tripuser(),
                                      Waypoint.trip == trip.trip)).all()])

            newwps = set(wps.keys())
            #print "NEW WPS",wps
            removed = oldwps.difference(newwps)
            added = newwps.difference(oldwps)
            updated = newwps.intersection(oldwps)

            print "Removed: ", removed

            addedwps = added
            removedwps = removed
            updatedwps = updated
            ordering2wpid = dict()
            for remord in removed:
                meta.Session.query(Waypoint).filter(
                    sa.and_(Waypoint.user == tripuser(),
                            Waypoint.trip == trip.trip,
                            Waypoint.id == remord)).delete()
                #print "\n\n====DELETING!=====\n%s\n\n"%(rem,)
            resultant_by_order = dict()
            resultant_id2order = dict()
            waypointlink = dict()
            for add in added:
                wp = wps[add]
                waypoint = Waypoint(tripuser(), trip.trip, wp['pos'],
                                    int(wp['id']), int(wp['ordering']),
                                    wp['name'], wp['altitude'])
                resultant_by_order[int(wp['ordering'])] = waypoint
                resultant_id2order[int(wp['id'])] = wp['ordering']
                #print "\n\n====ADDING!=====\n%s %s %s\n\n"%(waypoint.id,waypoint.pos,waypoint.waypoint)
                meta.Session.add(waypoint)
            for upd in updated:
                wp = wps[upd]
                us = meta.Session.query(Waypoint).filter(
                    sa.and_(Waypoint.user == tripuser(),
                            Waypoint.trip == trip.trip,
                            Waypoint.id == upd)).all()
                if len(us) > 0:
                    u = us[0]
                    prevpos = mapper.from_str(u.pos)
                    newpos = mapper.from_str(wp['pos'])
                    approxdist = (prevpos[0] - newpos[0])**2 + (prevpos[1] -
                                                                newpos[1])**2
                    if approxdist > (
                            1.0 / 36000.0
                    )**2:  #if moved more than 0.1 arc-second, otherwise leave be.
                        u.pos = wp['pos']
                        print "Waypoint %d moved! (%f deg)" % (
                            u.id, math.sqrt(approxdist))
                    else:
                        print "Waypoint %d has only moved a little (%f deg)" % (
                            u.id, math.sqrt(approxdist))

                    u.waypoint = wp['name']
                    assert u.id == int(wp['id'])
                    u.ordering = wp['ordering']
                    u.altitude = wp['altitude']
                    resultant_by_order[int(wp['ordering'])] = u
                    resultant_id2order[int(wp['id'])] = wp['ordering']
                    #print "\n\n====UPDATING!=====\n%s %s %s\n\n"%(u.id,u.pos,u.waypoint)

            #print "Resultant by ordering: %s"%(resultant_by_order,)
            seq = list(sorted(resultant_by_order.items()))
            newroutes = set()
            for (ord1, waypoint1), (ord2, waypoint2) in zip(seq[:-1], seq[1:]):
                if not int(ord1) + 1 == int(ord2):
                    print "Waypoints %s and %s not consecutive (#%d, #%d)" % (
                        waypoint1, waypoint2, int(ord1), int(ord2))
                assert int(ord1) + 1 == int(ord2)
                newroutes.add((waypoint1.id, waypoint2.id))

            oldrouteobjs = list(
                meta.Session.query(Route).filter(
                    sa.and_(Route.user == tripuser(),
                            Route.trip == trip.trip)).all())
            oldroutes = set([(route.waypoint1, route.waypoint2)
                             for route in oldrouteobjs])
            prevalts = dict()
            for rt in oldrouteobjs:
                prevalts[(rt.a.id, +1)] = rt.altitude
                prevalts[(rt.b.id, -1)] = rt.altitude

            #Routes:
            removed = oldroutes.difference(newroutes)
            added = newroutes.difference(oldroutes)
            updated = newroutes.intersection(oldroutes)
            print "Removed routes:", removed
            print "Added routes:", added
            print "Kept routes: ", updated
            for rem1, rem2 in removed:
                meta.Session.query(Route).filter(
                    sa.and_(Route.user == tripuser(), Route.trip == trip.trip,
                            Route.waypoint1 == rem1,
                            Route.waypoint2 == rem2)).delete()
            sel_acs = meta.Session.query(Aircraft).filter(
                sa.and_(Aircraft.aircraft == trip.aircraft,
                        Aircraft.user == tripuser())).all()
            if len(sel_acs):
                tas = sel_acs[0].cruise_speed
            else:
                tas = 75
            for a1, a2 in added:
                cruisealt = ""
                a = None
                if a1 in addedwps:
                    startord = resultant_id2order.get(int(a1), 0)
                elif a2 in addedwps:
                    startord = resultant_id2order.get(int(a2), 0)
                else:
                    startord = resultant_id2order.get(int(a1), 0)

                print "Ordering of new wp: %d is %d" % (a1, startord)
                num_waypoints = len(resultant_by_order)

                def searchpattern(begin, num):
                    assert begin >= 0 and begin < num
                    down = begin - 1
                    up = begin + 1
                    while True:
                        work = False
                        if down >= 0:
                            yield down
                            down -= 1
                            work = True
                        if up < num:
                            yield up
                            up += 1
                            work = True
                        if not work: break

                for wpord in searchpattern(startord, num_waypoints):
                    wp = resultant_by_order.get(wpord, None)
                    print "Searchpattern visiting order: %d" % (wpord, )
                    if wp:
                        if wpord < startord:
                            cruisealt = prevalts.get((wp.id, +1), '')
                            print "Looking for alt previously after wp %d, got: %s" % (
                                wp.id, cruisealt)
                        else:
                            cruisealt = prevalts.get((wp.id, -1), '')
                            print "Looking for alt previously before wp %d, got: %s" % (
                                wp.id, cruisealt)
                        if cruisealt != "": break
                if cruisealt == "":
                    cruisealt = "1500"
                r = Route(tripuser(), trip.trip, a1, a2, 0, 0, tas, None,
                          cruisealt)
                meta.Session.add(r)

            session.save()

            meta.Session.flush()
            meta.Session.commit()

            ret = json.dumps([tripname])
            print "mapview returning json:", ret
            return ret
        except Exception, cause:
            #print line number and stuff as well
            print cause
            #TODO: ONLY FOR TESTING!!!!
            raise
            return "notok"
Example #60
0
 def generate_key(room, user):
     key = '%s:%s' % (str(room), str(user))
     return md5.md5(key).hexdigest()