Skip to content

ADUserServices overview

ADUserServices is a single-class ASMX web service that provisions, unlocks, deletes, and modifies Active Directory user accounts in the external domain (external.saif.com), manages group membership there, and answers read-only queries about user attributes and group/resource membership in both the external domain and the internal domain (corp.saif.com).

Project shape

Aspect Finding
Evidence this is a web service clsADUserServices.asmx marker file (src\ADUserServices\clsADUserServices.asmx)
Project type GUIDs {349c5851-65df-11da-9384-00065b846f21}, {F184B08F-C81C-45F6-A57F-5ABD9991F28F} (src\ADUserServices\ADUserServices.vbproj)
WebForms artifacts present None — no .aspx or .ascx file exists anywhere in the project
Conclusion Classic ASMX web service — not a WebForms application

Purpose

  • Add, modify, unlock, and delete AD user accounts in the external domain, and add/remove those accounts from AD groups*, per the object description embedded in the codebehind's header comment (clsADUserServices.asmx.vb).
  • Answer directory read queries (email, fax number, printer attribute, last logon, group and resource membership) for callers, spanning both the internal and external domains depending on the operation.
  • Serve as the IP allow-list gate (CheckAccess) that the eight mutating operations consult before acting.

Business context

The header comment in the codebehind states this object "provides maintenance to AD user accounts in the external domain from web calls," while AD maintenance for the internal domain is stated to be handled elsewhere ("managed in batch by clDirectoryEntry in SAIF.Business.Security") — a system outside this repository and not further described here. If this service were unavailable, callers would lose the ability to provision, unlock, or delete external-domain AD accounts, manage their group memberships, and query AD attributes over SOAP.

Attribute Value
Business domain Active Directory user and group account maintenance (external domain) and directory attribute lookup (internal and external domains)
Owning team Not determined from source
Data ownership Active Directory user and group objects in external.saif.com (writes); read-only attribute and membership queries against external.saif.com and corp.saif.com
Criticality Not determined from source

SOAP namespace

Aspect Finding
Declared namespace http://tempuri.org/
Declared on ADUserServices.clsADUserServices (src\ADUserServices\clsADUserServices.asmx.vb:38)
Default scaffolding value Yes — matches the Visual Studio/framework default
Wire impact The namespace qualifies every request and response element and every SOAP action (e.g. http://tempuri.org/GetUserEmail); changing it breaks every existing caller

This is a flagged, non-negotiable finding. The service ships with the bare template default namespace rather than an organization- or service-specific value. Because the namespace still matches the unmodified default*, this deployed service shares it with every other unmodified-default ASMX service, creating collision risk if two such services are ever proxied into the same consumer project. See Tech debt (TD-01, HIGH).

Capability summary

Capability Service class Operations Description
Account provisioning and lifecycle clsADUserServices AddUser, DeleteUser, UnlockAccount, ChangeUserAccount Create, delete, unlock, and modify external-domain AD user accounts
Password management clsADUserServices ChangeUserPassword, ChangeUserPasswordOrGetException Reset an external-domain account password, with a sentinel-response variant and a faulting variant
Group membership management clsADUserServices AddUserToGroup, DeleteUserFromGroup Grant or revoke external-domain AD group membership
Directory attribute and membership queries clsADUserServices DoesUserExist, DoesUserHaveResource, GetUserEmail, GetUserGroups, GetUserResources, GetUserFAX, GetUserLastLogon, GetUserPrinter, IsUserInGroup Read-only lookups of AD attributes and group/resource membership across the internal and external domains
Access control primitive clsADUserServices CheckAccess Evaluates the caller's IP against the allow-list and reports the decision; also the gate consulted by the mutating operations
Contract scaffolding clsADUserServices HelloWorld Constant-string diagnostic operation left on the published contract

Message format

Aspect Finding
Message encoding Protocol/binding availability is unknown — no <protocols> element is declared in Web.config and no WSDL is checked into the repository, so which SOAP binding is actually published is not evidenced and the ASMX/SoapExtensionReflector framework default applies**
Serializer XmlSerializer (ASMX default)
Binding style Document/Literal (ASMX default; no explicit SoapDocumentMethod overrides found)
WSI conformance WsiProfiles.BasicProfile1_1
Metadata document clsADUserServices.asmx?wsdl
Script-callable surface Not applicable — ScriptService is commented out

Non-documented artifacts

  • Visual Studio web-project template scaffolding — My Project\Application.myapp, Application.Designer.vb, Resources.resx/Resources.Designer.vb, Settings.settings/Settings.Designer.vb, AssemblyInfo.vb, and My Project\MyExtensions\MyWebExtension.vb (the generated, empty MyWebServices group) are generated designer files with no authored content and are excluded from this document set.

Note: Statements marked with * were inferred from code structure, naming conventions, or contextual evidence where direct confirmation was not available in source artifacts. Statements marked with ** could not be confirmed; treat as unknown until verified.

Sources

  • src\ADUserServices\clsADUserServices.asmx.vb
  • src\ADUserServices\clsADUserServices.asmx
  • src\ADUserServices\ADUserServices.vbproj
  • .saifdocgen\state\runs\20260922-101326-aduserservices\analysis\aduserservices-analysis.md