首页 > 编程开发 > 通过Web方式修改域账户密码的ASP核心代码

通过Web方式修改域账户密码的ASP核心代码

2013年4月11日 发表评论 阅读评论

下面是通过Web方式修改用户密码的核心代码:

  1. <%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%>  
  2. <%  
  3. On Error resume next  
  4. const df_domain_name="test.com" 
  5. dim domain, acct, posbs, posat, username, pUser, root  
  6. dim upn_name  
  7.  
  8. acct=Request("acct")  
  9.  
  10. upn_name = "" 
  11. domain = df_domain_name  
  12.  
  13. '检查账号名的格式是否为xx@test.com、test.com\xx  
  14. '尝试从账号里面提取域名  
  15. posbs = Instr(1,acct,"\" )  
  16. posat = Instr(1,acct,"@" )  
  17. if posbs > 0 then  
  18.     domain = Left(acct,posbs-1)  
  19.     username = Right(acct,len(acct) - posbs)  
  20. elseif posat > 0 then  
  21.     upn_name = acct  
  22.     domain = Right(upn_name, len(upn_name) - posat)  
  23.     username = Left(upn_name, posat-1)  
  24. else      
  25.     username = acct  
  26.     set nw = Server.CreateObject("WScript.Network")  
  27.     domain = nw.Computername  
  28. end if   
  29.  
  30. '检查账户名是否包含无效字符  
  31. if IsInvalidUsername(username) = true then  
  32.     Response.Write("域账号无效!")  
  33.     Response.End 
  34. end if  
  35.  
  36. '检查域名是否包含无效字  
  37. if IsInvalidDomainname(domain) = true then  
  38.     Response.Write("域名无效!")  
  39.     Response.End 
  40. end if    
  41.  
  42. if upn_name = "" then  
  43.     set pUser = GetObject("WinNT://" & domain & "/" & username & ",user")  
  44.     if Not IsObject(pUser) then  
  45.         set root = GetObject("WinNT:")  
  46.         set pUser = root.OpenDSObject("WinNT://" & domain & "/" & username & ",user", username, Request("old"),1)  
  47.         Response.Write "<!--OpenDSObject call-->" 
  48.     end if  
  49.  
  50.     if Not IsObject(pUser) then  
  51.         set pUser = Server.CreateObject("IIS.PwdChg")  
  52.         pUser.Domain = domain  
  53.         pUser.User = username  
  54.     end if  
  55. else  
  56.     set pUser = Server.CreateObject("IIS.PwdChg")  
  57.     if Not IsObject(pUser) then  
  58.         set pUser = GetObject("WinNT://" & domain & "/" & username & ",user")  
  59.         if Not IsObject(pUser) then  
  60.             set root = GetObject("WinNT:")  
  61.             set pUser = root.OpenDSObject("WinNT://" & domain & "/" & username & ",user", username, Request("old"),1)  
  62.             Response.Write "<!--OpenDSObject call-->" 
  63.         end if  
  64.     else  
  65.         pUser.Domain = domain  
  66.         pUser.User = username  
  67.         pUser.UPN = upn_name  
  68.     end if  
  69. end if  
  70.  
  71. if Not IsObject(pUser) then  
  72.     if err.number = -2147024843 then  
  73.         Response.Write("指定的域或帐户不存")  
  74.     else   
  75.         if err.description <> "" then  
  76.             Response.Write("出错了:"& err.description)  
  77.         else  
  78.             Response.Write("错误号码:"& err.number)  
  79.         end if  
  80.     end if  
  81.     Response.End 
  82. end if  
  83.  
  84. err.Clear  
  85. pUser.ChangePassword Request("old"), Request("new")  
  86.  
  87. if err.number <> 0 then  
  88.     if err.number = -2147024810 then  
  89.         Response.Write("您输入的用户名或密码无效,请重新输入!")   
  90.     elseif err.number = -2147022651 then  
  91.         Response.Write("密码太短,或不满足密码唯一性限制,不能使用以前的12次历史密码。")  
  92.     else  
  93.         Response.Write("错误号码:" & err.number)  
  94.     end if  
  95.     Response.End 
  96. else  
  97.     Response.Write("密码修改成功!")  
  98. end if   
  99.  
  100. function IsInvalidUsername(username)  
  101.     dim re  
  102.     set re = new RegExp  
  103.     re.Pattern = "[/\\""\[\]:<>\+=;,@]"  
  104.     IsInvalidUsername =  re.Test(username)  
  105. end function  
  106.  
  107. function IsInvalidDomainname(domainname)  
  108.     dim re  
  109.     set re = new RegExp  
  110.     re.Pattern = "[/\\""\[\]:<>\+=;,@!#$%^&\(\)\{\}\|~]"  
  111.     IsInvalidDomainName =  re.Test(domainname)  
  112. end function  
  113. %>  
分类: 编程开发 标签: , ,
  1. 本文目前尚无任何评论.
  1. 本文目前尚无任何 trackbacks 和 pingbacks.