samba-tool: Fix the domain account policy max_pwd_age calculation
authorAmitay Isaacs <amitay@gmail.com>
Wed, 16 Nov 2011 22:34:57 +0000 (09:34 +1100)
committerAmitay Isaacs <amitay@gmail.com>
Fri, 18 Nov 2011 03:38:27 +0000 (14:38 +1100)
Windows sets maxPwdAge to -0x8000000000000000 when maximum password
age is set to 0 days.

source4/scripting/python/samba/netcmd/domain.py

index f1ebf7e2bad933213f9f26c084e493b3c0f89b7e..9f77820855f92404c3e881ef28fe0362db538530 100644 (file)
@@ -386,7 +386,10 @@ class cmd_domain_passwordsettings(Command):
             cur_min_pwd_len = int(res[0]["minPwdLength"][0])
             # ticks -> days
             cur_min_pwd_age = int(abs(int(res[0]["minPwdAge"][0])) / (1e7 * 60 * 60 * 24))
-            cur_max_pwd_age = int(abs(int(res[0]["maxPwdAge"][0])) / (1e7 * 60 * 60 * 24))
+            if int(res[0]["maxPwdAge"][0]) == -0x8000000000000000:
+                cur_max_pwd_age = 0
+            else:
+                cur_max_pwd_age = int(abs(int(res[0]["maxPwdAge"][0])) / (1e7 * 60 * 60 * 24))
         except Exception, e:
             raise CommandError("Could not retrieve password properties!", e)
 
@@ -482,7 +485,10 @@ class cmd_domain_passwordsettings(Command):
                     raise CommandError("Maximum password age must be in the range of 0 to 999!")
 
                 # days -> ticks
-                max_pwd_age_ticks = -int(max_pwd_age * (24 * 60 * 60 * 1e7))
+                if max_pwd_age == 0:
+                    max_pwd_age_ticks = -0x8000000000000000
+                else:
+                    max_pwd_age_ticks = -int(max_pwd_age * (24 * 60 * 60 * 1e7))
 
                 m["maxPwdAge"] = ldb.MessageElement(str(max_pwd_age_ticks),
                   ldb.FLAG_MOD_REPLACE, "maxPwdAge")