summary | 
shortlog | 
log | 
commit | commitdiff | 
tree
raw | 
patch | 
inline | side by side (from parent 1: 
2258ef0)
 
exrex uses generators, so this saves memory as we don't have to store
the whole list of results anymore.
While at it refactor things a little bit so to pass the number of
elements to the crackpop() function too.
 __author_info = "Antonio Ospite"
 
 
 __author_info = "Antonio Ospite"
 
 
+# returns a tuple: (num_passwords, passwords)
+# where passwords is an iterable type
 def generate_passwords(password_pattern, dry_run=False):
 def generate_passwords(password_pattern, dry_run=False):
-    passwords = list(exrex.generate(password_pattern))
+    num_passwords = exrex.count(password_pattern)
+    passwords = exrex.generate(password_pattern)
-        print "Generated %d passwords." % len(passwords)
+        print "Generated %d passwords." % num_passwords
         for p in passwords:
             print p
         for p in passwords:
             print p
+    return (num_passwords, passwords)
+# the passwords parameter is a tuple: (n, L)
+# where L is an iterable type and n is the number of elements in L
 def crackpop(host, port, ssl, user, passwords):
     if ssl:
         pop3_connect = poplib.POP3_SSL
     else:
         pop3_connect = poplib.POP3
 
 def crackpop(host, port, ssl, user, passwords):
     if ssl:
         pop3_connect = poplib.POP3_SSL
     else:
         pop3_connect = poplib.POP3
 
-    print "Testing %d passwords." % len(passwords)
-    for p in passwords:
+    print "Testing %d passwords." % passwords[0]
+    for p in passwords[1]:
         # TODO maybe the same connection can be reused for more than one try,
         # but some logic needs to be added to detect the maximum allowed
         # authentication attempts or a disconnection from the server.
         # TODO maybe the same connection can be reused for more than one try,
         # but some logic needs to be added to detect the maximum allowed
         # authentication attempts or a disconnection from the server.