Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

2409 lines
42 KiB

  1. //+-------------------------------------------------------------------------
  2. //
  3. // Microsoft Windows
  4. // Copyright (C) Microsoft Corporation, 1992 - 2000
  5. //
  6. // File: addtable.cpp
  7. //
  8. // Contents: Defines a table which contains the classes which can be
  9. // created through dsadd.exe
  10. //
  11. // History: 22-Sep-2000 JeffJon Created
  12. //
  13. //
  14. //--------------------------------------------------------------------------
  15. #include "pch.h"
  16. #include "cstrings.h"
  17. #include "addtable.h"
  18. #include "usage.h"
  19. //+-------------------------------------------------------------------------
  20. // Parser table
  21. //--------------------------------------------------------------------------
  22. ARG_RECORD DSADD_COMMON_COMMANDS[] =
  23. {
  24. COMMON_COMMANDS
  25. //
  26. // c Continue
  27. //
  28. 0,(PWSTR)c_sz_arg1_com_continue,
  29. ID_ARG2_NULL, NULL,
  30. ARG_TYPE_BOOL, ARG_FLAG_OPTIONAL,
  31. (CMD_TYPE)_T(""),
  32. 0, NULL,
  33. //
  34. // objecttype
  35. //
  36. 0,(LPWSTR)c_sz_arg1_com_objecttype,
  37. ID_ARG2_NULL,NULL,
  38. ARG_TYPE_STR, ARG_FLAG_REQUIRED|ARG_FLAG_NOFLAG|ARG_FLAG_STDIN,
  39. 0,
  40. 0, NULL,
  41. //
  42. // description
  43. //
  44. 0, (PWSTR)c_sz_arg1_com_description,
  45. ID_ARG2_NULL, NULL,
  46. ARG_TYPE_STR, ARG_FLAG_OPTIONAL,
  47. 0,
  48. 0, NULL,
  49. ARG_TERMINATOR
  50. };
  51. ARG_RECORD DSADD_USER_COMMANDS[]=
  52. {
  53. //
  54. // objectDN
  55. //
  56. 0,(LPWSTR)c_sz_arg1_com_objectDN,
  57. ID_ARG2_NULL,NULL,
  58. ARG_TYPE_STR, ARG_FLAG_REQUIRED|ARG_FLAG_NOFLAG|ARG_FLAG_DN|ARG_FLAG_STDIN,
  59. 0,
  60. 0, NULL,
  61. //
  62. // samid sAMAccountName
  63. //
  64. 0, (PWSTR)g_pszArg1UserSAM,
  65. ID_ARG2_NULL, NULL,
  66. ARG_TYPE_STR, ARG_FLAG_OPTIONAL,
  67. 0,
  68. 0, NULL,
  69. //
  70. // upn
  71. //
  72. 0, (PWSTR)g_pszArg1UserUPN,
  73. ID_ARG2_NULL, NULL,
  74. ARG_TYPE_STR, ARG_FLAG_OPTIONAL,
  75. 0,
  76. 0, NULL,
  77. //
  78. // fn. FirstName
  79. //
  80. 0, (PWSTR)g_pszArg1UserFirstName,
  81. ID_ARG2_NULL, NULL,
  82. ARG_TYPE_STR, ARG_FLAG_OPTIONAL,
  83. 0,
  84. 0, NULL,
  85. //
  86. // mi Middle Initial
  87. //
  88. 0, (PWSTR)g_pszArg1UserMiddleInitial,
  89. ID_ARG2_NULL, NULL,
  90. ARG_TYPE_STR, ARG_FLAG_OPTIONAL,
  91. 0,
  92. 0, NULL,
  93. //
  94. // ln LastName
  95. //
  96. 0, (PWSTR)g_pszArg1UserLastName,
  97. ID_ARG2_NULL, NULL,
  98. ARG_TYPE_STR, ARG_FLAG_OPTIONAL,
  99. 0,
  100. 0, NULL,
  101. //
  102. // display DisplayName
  103. //
  104. 0, (PWSTR)g_pszArg1UserDisplayName,
  105. ID_ARG2_NULL, NULL,
  106. ARG_TYPE_STR, ARG_FLAG_OPTIONAL,
  107. 0,
  108. 0, NULL,
  109. //
  110. // empid Employee ID
  111. //
  112. 0, (PWSTR)g_pszArg1UserEmpID,
  113. ID_ARG2_NULL, NULL,
  114. ARG_TYPE_STR, ARG_FLAG_OPTIONAL,
  115. 0,
  116. 0, NULL,
  117. //
  118. // pwd Password
  119. //
  120. 0, (PWSTR)g_pszArg1UserPassword,
  121. ID_ARG2_NULL, NULL,
  122. ARG_TYPE_PASSWORD, ARG_FLAG_OPTIONAL,
  123. 0,
  124. 0, ValidateUserPassword,
  125. //
  126. // memberOf MemberOf
  127. //
  128. 0, (PWSTR)g_pszArg1UserMemberOf,
  129. ID_ARG2_NULL, NULL,
  130. ARG_TYPE_MSZ, ARG_FLAG_OPTIONAL|ARG_FLAG_DN,
  131. 0,
  132. 0, NULL,
  133. //
  134. // office Office Location
  135. //
  136. 0, (PWSTR)g_pszArg1UserOffice,
  137. ID_ARG2_NULL, NULL,
  138. ARG_TYPE_STR, ARG_FLAG_OPTIONAL,
  139. 0,
  140. 0, NULL,
  141. //
  142. // tel Telephone
  143. //
  144. 0, (PWSTR)g_pszArg1UserTelephone,
  145. ID_ARG2_NULL, NULL,
  146. ARG_TYPE_STR, ARG_FLAG_OPTIONAL,
  147. 0,
  148. 0, NULL,
  149. //
  150. // email E-mail
  151. //
  152. 0, (PWSTR)g_pszArg1UserEmail,
  153. ID_ARG2_NULL, NULL,
  154. ARG_TYPE_STR, ARG_FLAG_OPTIONAL,
  155. 0,
  156. 0, NULL,
  157. //
  158. // hometel Home Telephone
  159. //
  160. 0, (PWSTR)g_pszArg1UserHomeTelephone,
  161. ID_ARG2_NULL, NULL,
  162. ARG_TYPE_STR, ARG_FLAG_OPTIONAL,
  163. 0,
  164. 0, NULL,
  165. //
  166. // pager Pager number
  167. //
  168. 0, (PWSTR)g_pszArg1UserPagerNumber,
  169. ID_ARG2_NULL, NULL,
  170. ARG_TYPE_STR, ARG_FLAG_OPTIONAL,
  171. 0,
  172. 0, NULL,
  173. //
  174. // mobile Mobile Telephone Number
  175. //
  176. 0, (PWSTR)g_pszArg1UserMobileNumber,
  177. ID_ARG2_NULL, NULL,
  178. ARG_TYPE_STR, ARG_FLAG_OPTIONAL,
  179. 0,
  180. 0, NULL,
  181. //
  182. // fax Fax Number
  183. //
  184. 0, (PWSTR)g_pszArg1UserFaxNumber,
  185. ID_ARG2_NULL, NULL,
  186. ARG_TYPE_STR, ARG_FLAG_OPTIONAL,
  187. 0,
  188. 0, NULL,
  189. //
  190. // iptel IP Telephone
  191. //
  192. 0, (PWSTR)g_pszArg1UserIPTel,
  193. ID_ARG2_NULL, NULL,
  194. ARG_TYPE_STR, ARG_FLAG_OPTIONAL,
  195. 0,
  196. 0, NULL,
  197. //
  198. // webpg Web Page
  199. //
  200. 0, (PWSTR)g_pszArg1UserWebPage,
  201. ID_ARG2_NULL, NULL,
  202. ARG_TYPE_STR, ARG_FLAG_OPTIONAL,
  203. 0,
  204. 0, NULL,
  205. //
  206. // title Title
  207. //
  208. 0, (PWSTR)g_pszArg1UserTitle,
  209. ID_ARG2_NULL, NULL,
  210. ARG_TYPE_STR, ARG_FLAG_OPTIONAL,
  211. 0,
  212. 0, NULL,
  213. //
  214. // dept Department
  215. //
  216. 0, (PWSTR)g_pszArg1UserDepartment,
  217. ID_ARG2_NULL, NULL,
  218. ARG_TYPE_STR, ARG_FLAG_OPTIONAL,
  219. 0,
  220. 0, NULL,
  221. //
  222. // company Company
  223. //
  224. 0, (PWSTR)g_pszArg1UserCompany,
  225. ID_ARG2_NULL, NULL,
  226. ARG_TYPE_STR, ARG_FLAG_OPTIONAL,
  227. 0,
  228. 0, NULL,
  229. //
  230. // mgr Manager
  231. //
  232. 0, (PWSTR)g_pszArg1UserManager,
  233. ID_ARG2_NULL, NULL,
  234. ARG_TYPE_STR, ARG_FLAG_OPTIONAL|ARG_FLAG_DN,
  235. 0,
  236. 0, NULL,
  237. //
  238. // hmdir Home Directory
  239. //
  240. 0, (PWSTR)g_pszArg1UserHomeDirectory,
  241. ID_ARG2_NULL, NULL,
  242. ARG_TYPE_STR, ARG_FLAG_OPTIONAL,
  243. 0,
  244. 0, NULL,
  245. //
  246. // hmdrv Home Drive
  247. //
  248. 0, (PWSTR)g_pszArg1UserHomeDrive,
  249. ID_ARG2_NULL, NULL,
  250. ARG_TYPE_STR, ARG_FLAG_OPTIONAL,
  251. 0,
  252. 0, NULL,
  253. //
  254. // profile Profile path
  255. //
  256. 0, (PWSTR)g_pszArg1UserProfilePath,
  257. ID_ARG2_NULL, NULL,
  258. ARG_TYPE_STR, ARG_FLAG_OPTIONAL,
  259. 0,
  260. 0, NULL,
  261. //
  262. // loscr Script path
  263. //
  264. 0, (PWSTR)g_pszArg1UserScriptPath,
  265. ID_ARG2_NULL, NULL,
  266. ARG_TYPE_STR, ARG_FLAG_OPTIONAL,
  267. 0,
  268. 0, NULL,
  269. //
  270. // mustchpwd Must Change Password at next logon
  271. //
  272. 0, (PWSTR)g_pszArg1UserMustChangePwd,
  273. ID_ARG2_NULL, NULL,
  274. ARG_TYPE_STR, ARG_FLAG_OPTIONAL,
  275. 0,
  276. 0, ValidateYesNo,
  277. //
  278. // canchpwd Can Change Password
  279. //
  280. 0, (PWSTR)g_pszArg1UserCanChangePwd,
  281. ID_ARG2_NULL, NULL,
  282. ARG_TYPE_STR, ARG_FLAG_OPTIONAL,
  283. 0,
  284. 0, ValidateYesNo,
  285. //
  286. // reversiblepwd Password stored with reversible encryption
  287. //
  288. 0, (PWSTR)g_pszArg1UserReversiblePwd,
  289. ID_ARG2_NULL, NULL,
  290. ARG_TYPE_STR, ARG_FLAG_OPTIONAL,
  291. 0,
  292. 0, ValidateYesNo,
  293. //
  294. // pwdneverexpires Password never expires
  295. //
  296. 0, (PWSTR)g_pszArg1UserPwdNeverExpires,
  297. ID_ARG2_NULL, NULL,
  298. ARG_TYPE_STR, ARG_FLAG_OPTIONAL,
  299. 0,
  300. 0, ValidateYesNo,
  301. //
  302. // acctexpires Account Expires
  303. //
  304. 0, (PWSTR)g_pszArg1UserAccountExpires,
  305. ID_ARG2_NULL, NULL,
  306. ARG_TYPE_INTSTR, ARG_FLAG_OPTIONAL,
  307. 0,
  308. 0, ValidateNever,
  309. //
  310. // Password Not Required - There is actually
  311. // no switch for this but the table entry is
  312. // required so that we can set this value
  313. // to a default
  314. //
  315. 0, 0,
  316. ID_ARG2_NULL, NULL,
  317. ARG_TYPE_STR, ARG_FLAG_OPTIONAL,
  318. 0,
  319. 0, 0,
  320. //
  321. // disabled Disable Account
  322. //
  323. 0, (PWSTR)g_pszArg1UserDisableAccount,
  324. ID_ARG2_NULL, NULL,
  325. ARG_TYPE_STR, ARG_FLAG_OPTIONAL,
  326. 0,
  327. 0, ValidateYesNo,
  328. ARG_TERMINATOR
  329. };
  330. ARG_RECORD DSADD_COMPUTER_COMMANDS[]=
  331. {
  332. //
  333. // objectDN
  334. //
  335. 0,(LPWSTR)c_sz_arg1_com_objectDN,
  336. ID_ARG2_NULL,NULL,
  337. ARG_TYPE_STR, ARG_FLAG_REQUIRED|ARG_FLAG_NOFLAG|ARG_FLAG_DN|ARG_FLAG_STDIN,
  338. 0,
  339. 0, NULL,
  340. //
  341. // samname
  342. //
  343. 0, (PWSTR)g_pszArg1ComputerSAMName,
  344. ID_ARG2_NULL, NULL,
  345. ARG_TYPE_STR, ARG_FLAG_OPTIONAL,
  346. 0,
  347. 0, NULL,
  348. //
  349. // loc Location
  350. //
  351. 0, (PWSTR)g_pszArg1ComputerLocation,
  352. ID_ARG2_NULL, NULL,
  353. ARG_TYPE_STR, ARG_FLAG_OPTIONAL,
  354. 0,
  355. 0, NULL,
  356. //
  357. // disabled
  358. //
  359. 0, (PWSTR)g_pszArg1ComputerMemberOf,
  360. ID_ARG2_NULL, NULL,
  361. ARG_TYPE_MSZ, ARG_FLAG_OPTIONAL|ARG_FLAG_DN,
  362. 0,
  363. 0, NULL,
  364. ARG_TERMINATOR,
  365. };
  366. ARG_RECORD DSADD_OU_COMMANDS[]=
  367. {
  368. //
  369. // objectDN
  370. //
  371. 0,(LPWSTR)c_sz_arg1_com_objectDN,
  372. ID_ARG2_NULL,NULL,
  373. ARG_TYPE_STR, ARG_FLAG_REQUIRED|ARG_FLAG_NOFLAG|ARG_FLAG_DN|ARG_FLAG_STDIN,
  374. 0,
  375. 0, NULL,
  376. ARG_TERMINATOR,
  377. };
  378. ARG_RECORD DSADD_GROUP_COMMANDS[]=
  379. {
  380. //
  381. // objectDN
  382. //
  383. 0,(LPWSTR)c_sz_arg1_com_objectDN,
  384. ID_ARG2_NULL,NULL,
  385. ARG_TYPE_STR, ARG_FLAG_REQUIRED|ARG_FLAG_NOFLAG|ARG_FLAG_DN|ARG_FLAG_STDIN,
  386. 0,
  387. 0, NULL,
  388. //
  389. // samname
  390. //
  391. 0, (PWSTR)g_pszArg1GroupSAMName,
  392. ID_ARG2_NULL, NULL,
  393. ARG_TYPE_STR, ARG_FLAG_OPTIONAL,
  394. 0,
  395. 0, NULL,
  396. //
  397. // secgrp Security enabled
  398. //
  399. 0, (PWSTR)g_pszArg1GroupSec,
  400. ID_ARG2_NULL, NULL,
  401. ARG_TYPE_STR, ARG_FLAG_OPTIONAL,
  402. 0,
  403. 0, ValidateYesNo,
  404. //
  405. // scope Group scope (local/global/universal)
  406. //
  407. 0, (PWSTR)g_pszArg1GroupScope,
  408. ID_ARG2_NULL, NULL,
  409. ARG_TYPE_STR, ARG_FLAG_OPTIONAL,
  410. 0,
  411. 0, ValidateGroupScope,
  412. //
  413. // memberof MemberOf
  414. //
  415. 0, (PWSTR)g_pszArg1GroupMemberOf,
  416. ID_ARG2_NULL, NULL,
  417. ARG_TYPE_MSZ, ARG_FLAG_OPTIONAL|ARG_FLAG_DN,
  418. 0,
  419. 0, NULL,
  420. //
  421. // members Members of the group
  422. //
  423. 0, (PWSTR)g_pszArg1GroupMembers,
  424. ID_ARG2_NULL, NULL,
  425. ARG_TYPE_MSZ, ARG_FLAG_OPTIONAL|ARG_FLAG_DN,
  426. 0,
  427. 0, NULL,
  428. ARG_TERMINATOR,
  429. };
  430. ARG_RECORD DSADD_CONTACT_COMMANDS[]=
  431. {
  432. //
  433. // objectDN
  434. //
  435. 0,(LPWSTR)c_sz_arg1_com_objectDN,
  436. ID_ARG2_NULL,NULL,
  437. ARG_TYPE_STR, ARG_FLAG_REQUIRED|ARG_FLAG_NOFLAG|ARG_FLAG_DN|ARG_FLAG_STDIN,
  438. 0,
  439. 0, NULL,
  440. //
  441. // fn. FirstName
  442. //
  443. 0, (PWSTR)g_pszArg1UserFirstName,
  444. ID_ARG2_NULL, NULL,
  445. ARG_TYPE_STR, ARG_FLAG_OPTIONAL,
  446. 0,
  447. 0, NULL,
  448. //
  449. // mi Middle Initial
  450. //
  451. 0, (PWSTR)g_pszArg1UserMiddleInitial,
  452. ID_ARG2_NULL, NULL,
  453. ARG_TYPE_STR, ARG_FLAG_OPTIONAL,
  454. 0,
  455. 0, NULL,
  456. //
  457. // ln LastName
  458. //
  459. 0, (PWSTR)g_pszArg1UserLastName,
  460. ID_ARG2_NULL, NULL,
  461. ARG_TYPE_STR, ARG_FLAG_OPTIONAL,
  462. 0,
  463. 0, NULL,
  464. //
  465. // display DisplayName
  466. //
  467. 0, (PWSTR)g_pszArg1UserDisplayName,
  468. ID_ARG2_NULL, NULL,
  469. ARG_TYPE_STR, ARG_FLAG_OPTIONAL,
  470. 0,
  471. 0, NULL,
  472. //
  473. // office Office Location
  474. //
  475. 0, (PWSTR)g_pszArg1UserOffice,
  476. ID_ARG2_NULL, NULL,
  477. ARG_TYPE_STR, ARG_FLAG_OPTIONAL,
  478. 0,
  479. 0, NULL,
  480. //
  481. // tel Telephone
  482. //
  483. 0, (PWSTR)g_pszArg1UserTelephone,
  484. ID_ARG2_NULL, NULL,
  485. ARG_TYPE_STR, ARG_FLAG_OPTIONAL,
  486. 0,
  487. 0, NULL,
  488. //
  489. // email E-mail
  490. //
  491. 0, (PWSTR)g_pszArg1UserEmail,
  492. ID_ARG2_NULL, NULL,
  493. ARG_TYPE_STR, ARG_FLAG_OPTIONAL,
  494. 0,
  495. 0, NULL,
  496. //
  497. // hometel Home Telephone
  498. //
  499. 0, (PWSTR)g_pszArg1UserHomeTelephone,
  500. ID_ARG2_NULL, NULL,
  501. ARG_TYPE_STR, ARG_FLAG_OPTIONAL,
  502. 0,
  503. 0, NULL,
  504. //
  505. // iptel IP Telephone
  506. //
  507. 0, (PWSTR)g_pszArg1UserIPTel,
  508. ID_ARG2_NULL, NULL,
  509. ARG_TYPE_STR, ARG_FLAG_OPTIONAL,
  510. 0,
  511. 0, NULL,
  512. //
  513. // pager Pager number
  514. //
  515. 0, (PWSTR)g_pszArg1UserPagerNumber,
  516. ID_ARG2_NULL, NULL,
  517. ARG_TYPE_STR, ARG_FLAG_OPTIONAL,
  518. 0,
  519. 0, NULL,
  520. //
  521. // mobile Mobile Telephone Number
  522. //
  523. 0, (PWSTR)g_pszArg1UserMobileNumber,
  524. ID_ARG2_NULL, NULL,
  525. ARG_TYPE_STR, ARG_FLAG_OPTIONAL,
  526. 0,
  527. 0, NULL,
  528. //
  529. // fax Fax Number
  530. //
  531. 0, (PWSTR)g_pszArg1UserFaxNumber,
  532. ID_ARG2_NULL, NULL,
  533. ARG_TYPE_STR, ARG_FLAG_OPTIONAL,
  534. 0,
  535. 0, NULL,
  536. //
  537. // title Title
  538. //
  539. 0, (PWSTR)g_pszArg1UserTitle,
  540. ID_ARG2_NULL, NULL,
  541. ARG_TYPE_STR, ARG_FLAG_OPTIONAL,
  542. 0,
  543. 0, NULL,
  544. //
  545. // dept Department
  546. //
  547. 0, (PWSTR)g_pszArg1UserDepartment,
  548. ID_ARG2_NULL, NULL,
  549. ARG_TYPE_STR, ARG_FLAG_OPTIONAL,
  550. 0,
  551. 0, NULL,
  552. //
  553. // company Company
  554. //
  555. 0, (PWSTR)g_pszArg1UserCompany,
  556. ID_ARG2_NULL, NULL,
  557. ARG_TYPE_STR, ARG_FLAG_OPTIONAL,
  558. 0,
  559. 0, NULL,
  560. ARG_TERMINATOR,
  561. };
  562. ARG_RECORD DSADD_QUOTA_COMMANDS[]=
  563. {
  564. //
  565. // partitionDN
  566. //
  567. 0,(PWSTR)g_pszArg1QuotaPart,
  568. ID_ARG2_NULL,NULL,
  569. ARG_TYPE_STR, ARG_FLAG_REQUIRED|ARG_FLAG_DN|ARG_FLAG_STDIN,
  570. 0,
  571. 0, NULL,
  572. //
  573. // rdn
  574. //
  575. 0, (PWSTR)g_pszArg1QuotaRDN,
  576. ID_ARG2_NULL, NULL,
  577. ARG_TYPE_STR, ARG_FLAG_OPTIONAL,
  578. 0,
  579. 0, NULL,
  580. //
  581. // acct
  582. //
  583. 0, (PWSTR)g_pszArg1QuotaAcct,
  584. ID_ARG2_NULL, NULL,
  585. ARG_TYPE_STR, ARG_FLAG_REQUIRED,
  586. 0,
  587. 0, NULL,
  588. //
  589. // qlimit
  590. //
  591. 0, (PWSTR)g_pszArg1QuotaQLimit,
  592. ID_ARG2_NULL, NULL,
  593. ARG_TYPE_INT, ARG_FLAG_REQUIRED,
  594. 0,
  595. 0, NULL,
  596. ARG_TERMINATOR
  597. };
  598. /*
  599. ARG_RECORD DSADD_SUBNET_COMMANDS[]=
  600. {
  601. //
  602. // objectDN
  603. //
  604. 0,(LPWSTR)c_sz_arg1_com_objectDN,
  605. ID_ARG2_NULL,NULL,
  606. ARG_TYPE_STR, ARG_FLAG_REQUIRED|ARG_FLAG_NOFLAG|ARG_FLAG_DN|ARG_FLAG_STDIN,
  607. 0,
  608. 0, NULL,
  609. //name_or_objectdn
  610. IDS_ARG1_SUBNET_NAME_OR_OBJECTDN, NULL,
  611. ID_ARG2_NULL, NULL,
  612. ARG_TYPE_MSZ, ARG_FLAG_REQUIRED|ARG_FLAG_NOFLAG,
  613. 0,
  614. 0, NULL,
  615. //name
  616. IDS_ARG1_SUBNET_NAME, NULL,
  617. ID_ARG2_NULL, NULL,
  618. ARG_TYPE_STR, ARG_FLAG_OPTIONAL,
  619. 0,
  620. 0, NULL,
  621. //desc
  622. IDS_ARG1_SUBNET_DESC, NULL,
  623. ID_ARG2_NULL, NULL,
  624. ARG_TYPE_STR, ARG_FLAG_OPTIONAL,
  625. 0,
  626. 0, NULL,
  627. //site
  628. IDS_ARG1_SUBNET_SITE, NULL,
  629. ID_ARG2_NULL, NULL,
  630. ARG_TYPE_STR, ARG_FLAG_OPTIONAL,
  631. 0,
  632. 0, NULL,
  633. ARG_TERMINATOR,
  634. };
  635. ARG_RECORD DSADD_SITE_COMMANDS[]=
  636. {
  637. //
  638. // objectDN
  639. //
  640. 0,(LPWSTR)c_sz_arg1_com_objectDN,
  641. ID_ARG2_NULL,NULL,
  642. ARG_TYPE_STR, ARG_FLAG_REQUIRED|ARG_FLAG_NOFLAG|ARG_FLAG_DN|ARG_FLAG_STDIN,
  643. 0,
  644. 0, NULL,
  645. //name_or_objectdn
  646. IDS_ARG1_SITE_NAME_OR_OBJECTDN, NULL,
  647. ID_ARG2_NULL, NULL,
  648. ARG_TYPE_MSZ, ARG_FLAG_REQUIRED|ARG_FLAG_NOFLAG,
  649. 0,
  650. 0, NULL,
  651. //name
  652. IDS_ARG1_SITE_NAME, NULL,
  653. ID_ARG2_NULL, NULL,
  654. ARG_TYPE_STR, ARG_FLAG_OPTIONAL,
  655. 0,
  656. 0, NULL,
  657. //desc
  658. IDS_ARG1_SITE_DESC, NULL,
  659. ID_ARG2_NULL, NULL,
  660. ARG_TYPE_STR, ARG_FLAG_OPTIONAL,
  661. 0,
  662. 0, NULL,
  663. //autotopology
  664. IDS_ARG1_SITE_AUTOTOPOLOGY, NULL,
  665. ID_ARG2_NULL, NULL,
  666. ARG_TYPE_STR, ARG_FLAG_OPTIONAL,
  667. 0,
  668. 0, NULL,
  669. ARG_TERMINATOR,
  670. };
  671. ARG_RECORD DSADD_SLINK_COMMANDS[]=
  672. {
  673. //
  674. // objectDN
  675. //
  676. 0,(LPWSTR)c_sz_arg1_com_objectDN,
  677. ID_ARG2_NULL,NULL,
  678. ARG_TYPE_STR, ARG_FLAG_REQUIRED|ARG_FLAG_NOFLAG|ARG_FLAG_DN|ARG_FLAG_STDIN,
  679. 0,
  680. 0, NULL,
  681. //name_or_objectdn
  682. IDS_ARG1_SLINK_NAME_OR_OBJECTDN, NULL,
  683. ID_ARG2_NULL, NULL,
  684. ARG_TYPE_MSZ, ARG_FLAG_REQUIRED|ARG_FLAG_NOFLAG,
  685. 0,
  686. 0, NULL,
  687. //ip
  688. IDS_ARG1_SLINK_IP, NULL,
  689. ID_ARG2_NULL, NULL,
  690. ARG_TYPE_STR, ARG_FLAG_OPTIONAL,
  691. 0,
  692. 0, NULL,
  693. //smtp
  694. IDS_ARG1_SLINK_SMTP, NULL,
  695. ID_ARG2_NULL, NULL,
  696. ARG_TYPE_STR, ARG_FLAG_OPTIONAL,
  697. 0,
  698. 0, NULL,
  699. //name
  700. IDS_ARG1_SLINK_NAME, NULL,
  701. ID_ARG2_NULL, NULL,
  702. ARG_TYPE_STR, ARG_FLAG_OPTIONAL,
  703. 0,
  704. 0, NULL,
  705. //addsite
  706. IDS_ARG1_SLINK_ADDSITE, NULL,
  707. ID_ARG2_NULL, NULL,
  708. ARG_TYPE_STR, ARG_FLAG_OPTIONAL,
  709. 0,
  710. 0, NULL,
  711. //rmsite
  712. IDS_ARG1_SLINK_RMSITE, NULL,
  713. ID_ARG2_NULL, NULL,
  714. ARG_TYPE_STR, ARG_FLAG_OPTIONAL,
  715. 0,
  716. 0, NULL,
  717. //cost
  718. IDS_ARG1_SLINK_COST, NULL,
  719. ID_ARG2_NULL, NULL,
  720. ARG_TYPE_STR, ARG_FLAG_OPTIONAL,
  721. 0,
  722. 0, NULL,
  723. //repint
  724. IDS_ARG1_SLINK_REPINT, NULL,
  725. ID_ARG2_NULL, NULL,
  726. ARG_TYPE_STR, ARG_FLAG_OPTIONAL,
  727. 0,
  728. 0, NULL,
  729. //desc
  730. IDS_ARG1_SLINK_DESC, NULL,
  731. ID_ARG2_NULL, NULL,
  732. ARG_TYPE_STR, ARG_FLAG_OPTIONAL,
  733. 0,
  734. 0, NULL,
  735. //autobacksync
  736. IDS_ARG1_SLINK_AUTOBACKSYNC, NULL,
  737. ID_ARG2_NULL, NULL,
  738. ARG_TYPE_STR, ARG_FLAG_OPTIONAL,
  739. 0,
  740. 0, NULL,
  741. //notify
  742. IDS_ARG1_SLINK_NOTIFY, NULL,
  743. ID_ARG2_NULL, NULL,
  744. ARG_TYPE_STR, ARG_FLAG_OPTIONAL,
  745. 0,
  746. 0, NULL,
  747. ARG_TERMINATOR,
  748. };
  749. ARG_RECORD DSADD_SLINKBR_COMMANDS[]=
  750. {
  751. //
  752. // objectDN
  753. //
  754. 0,(LPWSTR)c_sz_arg1_com_objectDN,
  755. ID_ARG2_NULL,NULL,
  756. ARG_TYPE_STR, ARG_FLAG_REQUIRED|ARG_FLAG_NOFLAG|ARG_FLAG_DN|ARG_FLAG_STDIN,
  757. 0,
  758. 0, NULL,
  759. //name_or_objectdn
  760. IDS_ARG1_SLINKBR_NAME_OR_OBJECTDN, NULL,
  761. ID_ARG2_NULL, NULL,
  762. ARG_TYPE_MSZ, ARG_FLAG_REQUIRED|ARG_FLAG_NOFLAG,
  763. 0,
  764. 0, NULL,
  765. //ip
  766. IDS_ARG1_SLINKBR_IP, NULL,
  767. ID_ARG2_NULL, NULL,
  768. ARG_TYPE_STR, ARG_FLAG_OPTIONAL,
  769. 0,
  770. 0, NULL,
  771. //smtp
  772. IDS_ARG1_SLINKBR_SMTP, NULL,
  773. ID_ARG2_NULL, NULL,
  774. ARG_TYPE_STR, ARG_FLAG_OPTIONAL,
  775. 0,
  776. 0, NULL,
  777. //name
  778. IDS_ARG1_SLINKBR_NAME, NULL,
  779. ID_ARG2_NULL, NULL,
  780. ARG_TYPE_STR, ARG_FLAG_OPTIONAL,
  781. 0,
  782. 0, NULL,
  783. //addslink
  784. IDS_ARG1_SLINKBR_ADDSLINK, NULL,
  785. ID_ARG2_NULL, NULL,
  786. ARG_TYPE_STR, ARG_FLAG_OPTIONAL,
  787. 0,
  788. 0, NULL,
  789. //rmslink
  790. IDS_ARG1_SLINKBR_RMSLINK, NULL,
  791. ID_ARG2_NULL, NULL,
  792. ARG_TYPE_STR, ARG_FLAG_OPTIONAL,
  793. 0,
  794. 0, NULL,
  795. //desc
  796. IDS_ARG1_SLINKBR_DESC, NULL,
  797. ID_ARG2_NULL, NULL,
  798. ARG_TYPE_STR, ARG_FLAG_OPTIONAL,
  799. 0,
  800. 0, NULL,
  801. ARG_TERMINATOR,
  802. };
  803. ARG_RECORD DSADD_CONN_COMMANDS[]=
  804. {
  805. //
  806. // objectDN
  807. //
  808. 0,(LPWSTR)c_sz_arg1_com_objectDN,
  809. ID_ARG2_NULL,NULL,
  810. ARG_TYPE_STR, ARG_FLAG_REQUIRED|ARG_FLAG_NOFLAG|ARG_FLAG_DN|ARG_FLAG_STDIN,
  811. 0,
  812. 0, NULL,
  813. //name_or_objectdn
  814. IDS_ARG1_CONN_NAME_OR_OBJECTDN, NULL,
  815. ID_ARG2_NULL, NULL,
  816. ARG_TYPE_MSZ, ARG_FLAG_REQUIRED|ARG_FLAG_NOFLAG,
  817. 0,
  818. 0, NULL,
  819. //transport
  820. IDS_ARG1_CONN_TRANSPORT, NULL,
  821. ID_ARG2_NULL, NULL,
  822. ARG_TYPE_STR, ARG_FLAG_OPTIONAL,
  823. 0,
  824. 0, NULL,
  825. //enabled
  826. IDS_ARG1_CONN_ENABLED, NULL,
  827. ID_ARG2_NULL, NULL,
  828. ARG_TYPE_STR, ARG_FLAG_OPTIONAL,
  829. 0,
  830. 0, NULL,
  831. //desc
  832. IDS_ARG1_CONN_DESC, NULL,
  833. ID_ARG2_NULL, NULL,
  834. ARG_TYPE_STR, ARG_FLAG_OPTIONAL,
  835. 0,
  836. 0, NULL,
  837. //manual
  838. IDS_ARG1_CONN_MANUAL, NULL,
  839. ID_ARG2_NULL, NULL,
  840. ARG_TYPE_STR, ARG_FLAG_OPTIONAL,
  841. 0,
  842. 0, NULL,
  843. //autobacksync
  844. IDS_ARG1_CONN_AUTOBACKSYNC, NULL,
  845. ID_ARG2_NULL, NULL,
  846. ARG_TYPE_STR, ARG_FLAG_OPTIONAL,
  847. 0,
  848. 0, NULL,
  849. //notify
  850. IDS_ARG1_CONN_NOTIFY, NULL,
  851. ID_ARG2_NULL, NULL,
  852. ARG_TYPE_STR, ARG_FLAG_OPTIONAL,
  853. 0,
  854. 0, NULL,
  855. ARG_TERMINATOR,
  856. };
  857. ARG_RECORD DSADD_SERVER_COMMANDS[]=
  858. {
  859. //
  860. // objectDN
  861. //
  862. 0,(LPWSTR)c_sz_arg1_com_objectDN,
  863. ID_ARG2_NULL,NULL,
  864. ARG_TYPE_STR, ARG_FLAG_REQUIRED|ARG_FLAG_NOFLAG|ARG_FLAG_DN|ARG_FLAG_STDIN,
  865. 0,
  866. 0, NULL,
  867. //name_or_objectdn
  868. IDS_ARG1_SERVER_NAME_OR_OBJECTDN, NULL,
  869. ID_ARG2_NULL, NULL,
  870. ARG_TYPE_MSZ, ARG_FLAG_REQUIRED|ARG_FLAG_NOFLAG,
  871. 0,
  872. 0, NULL,
  873. //name
  874. IDS_ARG1_SERVER_NAME, NULL,
  875. ID_ARG2_NULL, NULL,
  876. ARG_TYPE_STR, ARG_FLAG_OPTIONAL,
  877. 0,
  878. 0, NULL,
  879. //desc
  880. IDS_ARG1_SERVER_DESC, NULL,
  881. ID_ARG2_NULL, NULL,
  882. ARG_TYPE_STR, ARG_FLAG_OPTIONAL,
  883. 0,
  884. 0, NULL,
  885. //autotopology
  886. IDS_ARG1_SERVER_AUTOTOPOLOGY, NULL,
  887. ID_ARG2_NULL, NULL,
  888. ARG_TYPE_STR, ARG_FLAG_OPTIONAL,
  889. 0,
  890. 0, NULL,
  891. ARG_TERMINATOR,
  892. };
  893. */
  894. //+-------------------------------------------------------------------------
  895. // Attributes
  896. //--------------------------------------------------------------------------
  897. //
  898. // Description
  899. //
  900. DSATTRIBUTEDESCRIPTION description =
  901. {
  902. {
  903. L"description",
  904. ADS_ATTR_UPDATE,
  905. ADSTYPE_CASE_IGNORE_STRING,
  906. NULL,
  907. 0
  908. },
  909. 0
  910. };
  911. DSATTRIBUTETABLEENTRY descriptionEntry =
  912. {
  913. L"description",
  914. eCommDescription,
  915. DS_ATTRIBUTE_ONCREATE,
  916. &description,
  917. FillAttrInfoFromObjectEntry,
  918. NULL
  919. };
  920. //
  921. // UPN
  922. //
  923. DSATTRIBUTEDESCRIPTION upn =
  924. {
  925. {
  926. L"userPrincipalName",
  927. ADS_ATTR_UPDATE,
  928. ADSTYPE_CASE_IGNORE_STRING,
  929. NULL,
  930. 0
  931. },
  932. 0
  933. };
  934. DSATTRIBUTETABLEENTRY upnUserEntry =
  935. {
  936. L"userPrincipalName",
  937. eUserUpn,
  938. DS_ATTRIBUTE_ONCREATE | DS_ATTRIBUTE_NOT_REUSABLE,
  939. &upn,
  940. FillAttrInfoFromObjectEntry,
  941. NULL
  942. };
  943. //
  944. // First name
  945. //
  946. DSATTRIBUTEDESCRIPTION firstName =
  947. {
  948. {
  949. L"givenName",
  950. ADS_ATTR_UPDATE,
  951. ADSTYPE_CASE_IGNORE_STRING,
  952. NULL,
  953. 0
  954. },
  955. 0
  956. };
  957. DSATTRIBUTETABLEENTRY firstNameUserEntry =
  958. {
  959. L"givenName",
  960. eUserFn,
  961. DS_ATTRIBUTE_ONCREATE,
  962. &firstName,
  963. FillAttrInfoFromObjectEntry,
  964. NULL
  965. };
  966. DSATTRIBUTETABLEENTRY firstNameContactEntry =
  967. {
  968. L"givenName",
  969. eContactFn,
  970. DS_ATTRIBUTE_ONCREATE,
  971. &firstName,
  972. FillAttrInfoFromObjectEntry,
  973. NULL
  974. };
  975. //
  976. // Middle Initial
  977. //
  978. DSATTRIBUTEDESCRIPTION middleInitial =
  979. {
  980. {
  981. L"initials",
  982. ADS_ATTR_UPDATE,
  983. ADSTYPE_CASE_IGNORE_STRING,
  984. NULL,
  985. 0
  986. },
  987. 0
  988. };
  989. DSATTRIBUTETABLEENTRY middleInitialUserEntry =
  990. {
  991. L"initials",
  992. eUserMi,
  993. DS_ATTRIBUTE_ONCREATE,
  994. &middleInitial,
  995. FillAttrInfoFromObjectEntry,
  996. NULL
  997. };
  998. DSATTRIBUTETABLEENTRY middleInitialContactEntry =
  999. {
  1000. L"initials",
  1001. eContactMi,
  1002. DS_ATTRIBUTE_ONCREATE,
  1003. &middleInitial,
  1004. FillAttrInfoFromObjectEntry,
  1005. NULL
  1006. };
  1007. //
  1008. // Last name
  1009. //
  1010. DSATTRIBUTEDESCRIPTION lastName =
  1011. {
  1012. {
  1013. L"sn",
  1014. ADS_ATTR_UPDATE,
  1015. ADSTYPE_CASE_IGNORE_STRING,
  1016. NULL,
  1017. 0
  1018. },
  1019. 0
  1020. };
  1021. DSATTRIBUTETABLEENTRY lastNameUserEntry =
  1022. {
  1023. L"sn",
  1024. eUserLn,
  1025. DS_ATTRIBUTE_ONCREATE,
  1026. &lastName,
  1027. FillAttrInfoFromObjectEntry,
  1028. NULL
  1029. };
  1030. DSATTRIBUTETABLEENTRY lastNameContactEntry =
  1031. {
  1032. L"sn",
  1033. eContactLn,
  1034. DS_ATTRIBUTE_ONCREATE,
  1035. &lastName,
  1036. FillAttrInfoFromObjectEntry,
  1037. NULL
  1038. };
  1039. //
  1040. // Display name
  1041. //
  1042. DSATTRIBUTEDESCRIPTION displayName =
  1043. {
  1044. {
  1045. L"displayName",
  1046. ADS_ATTR_UPDATE,
  1047. ADSTYPE_CASE_IGNORE_STRING,
  1048. NULL,
  1049. 0
  1050. },
  1051. 0
  1052. };
  1053. DSATTRIBUTETABLEENTRY displayNameUserEntry =
  1054. {
  1055. L"displayName",
  1056. eUserDisplay,
  1057. DS_ATTRIBUTE_ONCREATE,
  1058. &displayName,
  1059. FillAttrInfoFromObjectEntry,
  1060. NULL
  1061. };
  1062. DSATTRIBUTETABLEENTRY displayNameContactEntry =
  1063. {
  1064. L"displayName",
  1065. eContactDisplay,
  1066. DS_ATTRIBUTE_ONCREATE,
  1067. &displayName,
  1068. FillAttrInfoFromObjectEntry,
  1069. NULL
  1070. };
  1071. //
  1072. // Employee ID
  1073. //
  1074. DSATTRIBUTEDESCRIPTION employeeID =
  1075. {
  1076. {
  1077. L"employeeID",
  1078. ADS_ATTR_UPDATE,
  1079. ADSTYPE_CASE_IGNORE_STRING,
  1080. NULL,
  1081. 0
  1082. },
  1083. 0
  1084. };
  1085. DSATTRIBUTETABLEENTRY employeeIDUserEntry =
  1086. {
  1087. L"employeeID",
  1088. eUserEmpID,
  1089. DS_ATTRIBUTE_ONCREATE,
  1090. &employeeID,
  1091. FillAttrInfoFromObjectEntry,
  1092. NULL
  1093. };
  1094. //
  1095. // Password
  1096. //
  1097. DSATTRIBUTEDESCRIPTION password =
  1098. {
  1099. {
  1100. NULL,
  1101. ADS_ATTR_UPDATE,
  1102. ADSTYPE_INVALID,
  1103. NULL,
  1104. 0
  1105. },
  1106. 0
  1107. };
  1108. DSATTRIBUTETABLEENTRY passwordUserEntry =
  1109. {
  1110. L"password",
  1111. eUserPwd,
  1112. DS_ATTRIBUTE_POSTCREATE | DS_ATTRIBUTE_NOT_REUSABLE,
  1113. &password,
  1114. ResetUserPassword,
  1115. NULL
  1116. };
  1117. //
  1118. // Office
  1119. //
  1120. DSATTRIBUTEDESCRIPTION office =
  1121. {
  1122. {
  1123. L"physicalDeliveryOfficeName",
  1124. ADS_ATTR_UPDATE,
  1125. ADSTYPE_CASE_IGNORE_STRING,
  1126. NULL,
  1127. 0
  1128. },
  1129. 0
  1130. };
  1131. DSATTRIBUTETABLEENTRY officeUserEntry =
  1132. {
  1133. L"physicalDeliveryOfficeName",
  1134. eUserOffice,
  1135. DS_ATTRIBUTE_ONCREATE,
  1136. &office,
  1137. FillAttrInfoFromObjectEntry,
  1138. NULL
  1139. };
  1140. DSATTRIBUTETABLEENTRY officeContactEntry =
  1141. {
  1142. L"physicalDeliveryOfficeName",
  1143. eContactOffice,
  1144. DS_ATTRIBUTE_ONCREATE,
  1145. &office,
  1146. FillAttrInfoFromObjectEntry,
  1147. NULL
  1148. };
  1149. //
  1150. // Telephone
  1151. //
  1152. DSATTRIBUTEDESCRIPTION telephone =
  1153. {
  1154. {
  1155. L"telephoneNumber",
  1156. ADS_ATTR_UPDATE,
  1157. ADSTYPE_CASE_IGNORE_STRING,
  1158. NULL,
  1159. 0
  1160. },
  1161. 0
  1162. };
  1163. DSATTRIBUTETABLEENTRY telephoneUserEntry =
  1164. {
  1165. L"telephoneNumber",
  1166. eUserTel,
  1167. DS_ATTRIBUTE_ONCREATE,
  1168. &telephone,
  1169. FillAttrInfoFromObjectEntry,
  1170. NULL
  1171. };
  1172. DSATTRIBUTETABLEENTRY telephoneContactEntry =
  1173. {
  1174. L"telephoneNumber",
  1175. eContactTel,
  1176. DS_ATTRIBUTE_ONCREATE,
  1177. &telephone,
  1178. FillAttrInfoFromObjectEntry,
  1179. NULL
  1180. };
  1181. //
  1182. // Email
  1183. //
  1184. DSATTRIBUTEDESCRIPTION email =
  1185. {
  1186. {
  1187. L"mail",
  1188. ADS_ATTR_UPDATE,
  1189. ADSTYPE_CASE_IGNORE_STRING,
  1190. NULL,
  1191. 0
  1192. },
  1193. 0
  1194. };
  1195. DSATTRIBUTETABLEENTRY emailUserEntry =
  1196. {
  1197. L"mail",
  1198. eUserEmail,
  1199. DS_ATTRIBUTE_ONCREATE,
  1200. &email,
  1201. FillAttrInfoFromObjectEntry,
  1202. NULL
  1203. };
  1204. DSATTRIBUTETABLEENTRY emailContactEntry =
  1205. {
  1206. L"mail",
  1207. eContactEmail,
  1208. DS_ATTRIBUTE_ONCREATE,
  1209. &email,
  1210. FillAttrInfoFromObjectEntry,
  1211. NULL
  1212. };
  1213. //
  1214. // Home Telephone
  1215. //
  1216. DSATTRIBUTEDESCRIPTION homeTelephone =
  1217. {
  1218. {
  1219. L"homePhone",
  1220. ADS_ATTR_UPDATE,
  1221. ADSTYPE_CASE_IGNORE_STRING,
  1222. NULL,
  1223. 0
  1224. },
  1225. 0
  1226. };
  1227. DSATTRIBUTETABLEENTRY homeTelephoneUserEntry =
  1228. {
  1229. L"homePhone",
  1230. eUserHometel,
  1231. DS_ATTRIBUTE_ONCREATE,
  1232. &homeTelephone,
  1233. FillAttrInfoFromObjectEntry,
  1234. NULL
  1235. };
  1236. DSATTRIBUTETABLEENTRY homeTelephoneContactEntry =
  1237. {
  1238. L"homePhone",
  1239. eContactHometel,
  1240. DS_ATTRIBUTE_ONCREATE,
  1241. &homeTelephone,
  1242. FillAttrInfoFromObjectEntry,
  1243. NULL
  1244. };
  1245. //
  1246. // Pager
  1247. //
  1248. DSATTRIBUTEDESCRIPTION pager =
  1249. {
  1250. {
  1251. L"pager",
  1252. ADS_ATTR_UPDATE,
  1253. ADSTYPE_CASE_IGNORE_STRING,
  1254. NULL,
  1255. 0
  1256. },
  1257. 0
  1258. };
  1259. DSATTRIBUTETABLEENTRY pagerUserEntry =
  1260. {
  1261. L"pager",
  1262. eUserPager,
  1263. DS_ATTRIBUTE_ONCREATE,
  1264. &pager,
  1265. FillAttrInfoFromObjectEntry,
  1266. NULL
  1267. };
  1268. DSATTRIBUTETABLEENTRY pagerContactEntry =
  1269. {
  1270. L"pager",
  1271. eContactPager,
  1272. DS_ATTRIBUTE_ONCREATE,
  1273. &pager,
  1274. FillAttrInfoFromObjectEntry,
  1275. NULL
  1276. };
  1277. //
  1278. // Mobile phone
  1279. //
  1280. DSATTRIBUTEDESCRIPTION mobile =
  1281. {
  1282. {
  1283. L"mobile",
  1284. ADS_ATTR_UPDATE,
  1285. ADSTYPE_CASE_IGNORE_STRING,
  1286. NULL,
  1287. 0
  1288. },
  1289. 0
  1290. };
  1291. DSATTRIBUTETABLEENTRY mobileUserEntry =
  1292. {
  1293. L"mobile",
  1294. eUserMobile,
  1295. DS_ATTRIBUTE_ONCREATE,
  1296. &mobile,
  1297. FillAttrInfoFromObjectEntry,
  1298. NULL
  1299. };
  1300. DSATTRIBUTETABLEENTRY mobileContactEntry =
  1301. {
  1302. L"mobile",
  1303. eContactMobile,
  1304. DS_ATTRIBUTE_ONCREATE,
  1305. &mobile,
  1306. FillAttrInfoFromObjectEntry,
  1307. NULL
  1308. };
  1309. //
  1310. // Fax
  1311. //
  1312. DSATTRIBUTEDESCRIPTION fax =
  1313. {
  1314. {
  1315. L"facsimileTelephoneNumber",
  1316. ADS_ATTR_UPDATE,
  1317. ADSTYPE_CASE_IGNORE_STRING,
  1318. NULL,
  1319. 0
  1320. },
  1321. 0
  1322. };
  1323. DSATTRIBUTETABLEENTRY faxUserEntry =
  1324. {
  1325. L"facsimileTelephoneNumber",
  1326. eUserFax,
  1327. DS_ATTRIBUTE_ONCREATE,
  1328. &fax,
  1329. FillAttrInfoFromObjectEntry,
  1330. NULL
  1331. };
  1332. DSATTRIBUTETABLEENTRY faxContactEntry =
  1333. {
  1334. L"facsimileTelephoneNumber",
  1335. eContactFax,
  1336. DS_ATTRIBUTE_ONCREATE,
  1337. &fax,
  1338. FillAttrInfoFromObjectEntry,
  1339. NULL
  1340. };
  1341. //
  1342. // Title
  1343. //
  1344. DSATTRIBUTEDESCRIPTION title =
  1345. {
  1346. {
  1347. L"title",
  1348. ADS_ATTR_UPDATE,
  1349. ADSTYPE_CASE_IGNORE_STRING,
  1350. NULL,
  1351. 0
  1352. },
  1353. 0
  1354. };
  1355. DSATTRIBUTETABLEENTRY titleUserEntry =
  1356. {
  1357. L"title",
  1358. eUserTitle,
  1359. DS_ATTRIBUTE_ONCREATE,
  1360. &title,
  1361. FillAttrInfoFromObjectEntry,
  1362. NULL
  1363. };
  1364. DSATTRIBUTETABLEENTRY titleContactEntry =
  1365. {
  1366. L"title",
  1367. eContactTitle,
  1368. DS_ATTRIBUTE_ONCREATE,
  1369. &title,
  1370. FillAttrInfoFromObjectEntry,
  1371. NULL
  1372. };
  1373. //
  1374. // Department
  1375. //
  1376. DSATTRIBUTEDESCRIPTION department =
  1377. {
  1378. {
  1379. L"department",
  1380. ADS_ATTR_UPDATE,
  1381. ADSTYPE_CASE_IGNORE_STRING,
  1382. NULL,
  1383. 0
  1384. },
  1385. 0
  1386. };
  1387. DSATTRIBUTETABLEENTRY departmentUserEntry =
  1388. {
  1389. L"department",
  1390. eUserDept,
  1391. DS_ATTRIBUTE_ONCREATE,
  1392. &department,
  1393. FillAttrInfoFromObjectEntry,
  1394. NULL
  1395. };
  1396. DSATTRIBUTETABLEENTRY departmentContactEntry =
  1397. {
  1398. L"department",
  1399. eContactDept,
  1400. DS_ATTRIBUTE_ONCREATE,
  1401. &department,
  1402. FillAttrInfoFromObjectEntry,
  1403. NULL
  1404. };
  1405. //
  1406. // Company
  1407. //
  1408. DSATTRIBUTEDESCRIPTION company =
  1409. {
  1410. {
  1411. L"company",
  1412. ADS_ATTR_UPDATE,
  1413. ADSTYPE_CASE_IGNORE_STRING,
  1414. NULL,
  1415. 0
  1416. },
  1417. 0
  1418. };
  1419. DSATTRIBUTETABLEENTRY companyUserEntry =
  1420. {
  1421. L"company",
  1422. eUserCompany,
  1423. DS_ATTRIBUTE_ONCREATE,
  1424. &company,
  1425. FillAttrInfoFromObjectEntry,
  1426. NULL
  1427. };
  1428. DSATTRIBUTETABLEENTRY companyContactEntry =
  1429. {
  1430. L"company",
  1431. eContactCompany,
  1432. DS_ATTRIBUTE_ONCREATE,
  1433. &company,
  1434. FillAttrInfoFromObjectEntry,
  1435. NULL
  1436. };
  1437. //
  1438. // Web Page
  1439. //
  1440. DSATTRIBUTEDESCRIPTION webPage =
  1441. {
  1442. {
  1443. L"wwwHomePage",
  1444. ADS_ATTR_UPDATE,
  1445. ADSTYPE_CASE_IGNORE_STRING,
  1446. NULL,
  1447. 0
  1448. },
  1449. 0
  1450. };
  1451. DSATTRIBUTETABLEENTRY webPageUserEntry =
  1452. {
  1453. L"wwwHomePage",
  1454. eUserWebPage,
  1455. DS_ATTRIBUTE_ONCREATE,
  1456. &webPage,
  1457. FillAttrInfoFromObjectEntry,
  1458. NULL
  1459. };
  1460. //
  1461. // IP Phone
  1462. //
  1463. DSATTRIBUTEDESCRIPTION ipPhone =
  1464. {
  1465. {
  1466. L"ipPhone",
  1467. ADS_ATTR_UPDATE,
  1468. ADSTYPE_CASE_IGNORE_STRING,
  1469. NULL,
  1470. 0
  1471. },
  1472. 0
  1473. };
  1474. DSATTRIBUTETABLEENTRY ipPhoneUserEntry =
  1475. {
  1476. L"ipPhone",
  1477. eUserIPPhone,
  1478. DS_ATTRIBUTE_ONCREATE,
  1479. &ipPhone,
  1480. FillAttrInfoFromObjectEntry,
  1481. NULL
  1482. };
  1483. DSATTRIBUTETABLEENTRY ipPhoneContactEntry =
  1484. {
  1485. L"ipPhone",
  1486. eContactIPPhone,
  1487. DS_ATTRIBUTE_ONCREATE,
  1488. &ipPhone,
  1489. FillAttrInfoFromObjectEntry,
  1490. NULL
  1491. };
  1492. //
  1493. // Script Path
  1494. //
  1495. DSATTRIBUTEDESCRIPTION scriptPath =
  1496. {
  1497. {
  1498. L"scriptPath",
  1499. ADS_ATTR_UPDATE,
  1500. ADSTYPE_CASE_IGNORE_STRING,
  1501. NULL,
  1502. 0
  1503. },
  1504. 0
  1505. };
  1506. DSATTRIBUTETABLEENTRY scriptPathUserEntry =
  1507. {
  1508. L"scriptPath",
  1509. eUserScriptPath,
  1510. DS_ATTRIBUTE_ONCREATE,
  1511. &scriptPath,
  1512. FillAttrInfoFromObjectEntry,
  1513. NULL
  1514. };
  1515. //
  1516. // Home Directory
  1517. //
  1518. DSATTRIBUTEDESCRIPTION homeDirectory =
  1519. {
  1520. {
  1521. L"homeDirectory",
  1522. ADS_ATTR_UPDATE,
  1523. ADSTYPE_CASE_IGNORE_STRING,
  1524. NULL,
  1525. 0
  1526. },
  1527. 0
  1528. };
  1529. DSATTRIBUTETABLEENTRY homeDirectoryUserEntry =
  1530. {
  1531. L"homeDirectory",
  1532. eUserHomeDir,
  1533. DS_ATTRIBUTE_ONCREATE,
  1534. &homeDirectory,
  1535. FillAttrInfoFromObjectEntry,
  1536. NULL
  1537. };
  1538. //
  1539. // Home Drive
  1540. //
  1541. DSATTRIBUTEDESCRIPTION homeDrive =
  1542. {
  1543. {
  1544. L"homeDrive",
  1545. ADS_ATTR_UPDATE,
  1546. ADSTYPE_CASE_IGNORE_STRING,
  1547. NULL,
  1548. 0
  1549. },
  1550. 0
  1551. };
  1552. DSATTRIBUTETABLEENTRY homeDriveUserEntry =
  1553. {
  1554. L"homeDrive",
  1555. eUserHomeDrive,
  1556. DS_ATTRIBUTE_ONCREATE,
  1557. &homeDrive,
  1558. FillAttrInfoFromObjectEntry,
  1559. NULL
  1560. };
  1561. //
  1562. // Profile Path
  1563. //
  1564. DSATTRIBUTEDESCRIPTION profilePath =
  1565. {
  1566. {
  1567. L"profilePath",
  1568. ADS_ATTR_UPDATE,
  1569. ADSTYPE_CASE_IGNORE_STRING,
  1570. NULL,
  1571. 0
  1572. },
  1573. 0
  1574. };
  1575. DSATTRIBUTETABLEENTRY profilePathUserEntry =
  1576. {
  1577. L"profilePath",
  1578. eUserProfilePath,
  1579. DS_ATTRIBUTE_ONCREATE,
  1580. &profilePath,
  1581. FillAttrInfoFromObjectEntry,
  1582. NULL
  1583. };
  1584. //
  1585. // pwdLastSet
  1586. //
  1587. DSATTRIBUTEDESCRIPTION pwdLastSet =
  1588. {
  1589. {
  1590. L"pwdLastSet",
  1591. ADS_ATTR_UPDATE,
  1592. ADSTYPE_LARGE_INTEGER,
  1593. NULL,
  1594. 0
  1595. },
  1596. 0
  1597. };
  1598. DSATTRIBUTETABLEENTRY mustChangePwdUserEntry =
  1599. {
  1600. L"pwdLastSet",
  1601. eUserMustchpwd,
  1602. DS_ATTRIBUTE_POSTCREATE | DS_ATTRIBUTE_NOT_REUSABLE,
  1603. &pwdLastSet,
  1604. SetMustChangePwd,
  1605. NULL
  1606. };
  1607. //
  1608. // accountExpires
  1609. //
  1610. DSATTRIBUTEDESCRIPTION accountExpires =
  1611. {
  1612. {
  1613. L"accountExpires",
  1614. ADS_ATTR_UPDATE,
  1615. ADSTYPE_LARGE_INTEGER,
  1616. NULL,
  1617. 0
  1618. },
  1619. 0
  1620. };
  1621. DSATTRIBUTETABLEENTRY accountExpiresUserEntry =
  1622. {
  1623. L"accountExpires",
  1624. eUserAcctexpires,
  1625. DS_ATTRIBUTE_ONCREATE,
  1626. &accountExpires,
  1627. AccountExpires,
  1628. NULL
  1629. };
  1630. //
  1631. // user account control
  1632. //
  1633. DSATTRIBUTEDESCRIPTION userAccountControl =
  1634. {
  1635. {
  1636. L"userAccountControl",
  1637. ADS_ATTR_UPDATE,
  1638. ADSTYPE_INTEGER,
  1639. NULL,
  1640. 0
  1641. },
  1642. 0
  1643. };
  1644. DSATTRIBUTETABLEENTRY pwdNotReqdUserEntry =
  1645. {
  1646. L"userAccountControl",
  1647. eUserPwdNotReqd,
  1648. DS_ATTRIBUTE_POSTCREATE | DS_ATTRIBUTE_NOT_REUSABLE | DS_ATTRIBUTE_REQUIRED,
  1649. &userAccountControl,
  1650. PasswordNotRequired,
  1651. NULL
  1652. };
  1653. DSATTRIBUTETABLEENTRY disableUserEntry =
  1654. {
  1655. L"userAccountControl",
  1656. eUserDisabled,
  1657. DS_ATTRIBUTE_POSTCREATE | DS_ATTRIBUTE_NOT_REUSABLE | DS_ATTRIBUTE_REQUIRED,
  1658. &userAccountControl,
  1659. DisableAccount,
  1660. NULL
  1661. };
  1662. DSATTRIBUTETABLEENTRY pwdNeverExpiresUserEntry =
  1663. {
  1664. L"userAccountControl",
  1665. eUserPwdneverexpires,
  1666. DS_ATTRIBUTE_POSTCREATE | DS_ATTRIBUTE_NOT_REUSABLE,
  1667. &userAccountControl,
  1668. PwdNeverExpires,
  1669. NULL
  1670. };
  1671. DSATTRIBUTETABLEENTRY reverisblePwdUserEntry =
  1672. {
  1673. L"userAccountControl",
  1674. eUserReversiblePwd,
  1675. DS_ATTRIBUTE_POSTCREATE | DS_ATTRIBUTE_NOT_REUSABLE,
  1676. &userAccountControl,
  1677. ReversiblePwd,
  1678. NULL
  1679. };
  1680. DSATTRIBUTETABLEENTRY accountTypeComputerEntry =
  1681. {
  1682. L"userAccountControl",
  1683. 0,
  1684. DS_ATTRIBUTE_ONCREATE | DS_ATTRIBUTE_REQUIRED,
  1685. &userAccountControl,
  1686. SetComputerAccountType,
  1687. 0
  1688. };
  1689. DSATTRIBUTETABLEENTRY disableComputerEntry =
  1690. {
  1691. L"userAccountControl",
  1692. NULL, // does not have a cooresponding command line switch
  1693. DS_ATTRIBUTE_ONCREATE | DS_ATTRIBUTE_NOT_REUSABLE | DS_ATTRIBUTE_REQUIRED,
  1694. &userAccountControl,
  1695. DisableAccount,
  1696. NULL
  1697. };
  1698. //
  1699. // SAM Account Name
  1700. //
  1701. DSATTRIBUTEDESCRIPTION samAccountName =
  1702. {
  1703. {
  1704. L"sAMAccountName",
  1705. ADS_ATTR_UPDATE,
  1706. ADSTYPE_CASE_IGNORE_STRING,
  1707. NULL,
  1708. 0
  1709. },
  1710. 0
  1711. };
  1712. DSATTRIBUTETABLEENTRY samNameGroupEntry =
  1713. {
  1714. L"sAMAccountName",
  1715. eGroupSamname,
  1716. DS_ATTRIBUTE_ONCREATE | DS_ATTRIBUTE_NOT_REUSABLE | DS_ATTRIBUTE_REQUIRED,
  1717. &samAccountName,
  1718. BuildGroupSAMName,
  1719. NULL
  1720. };
  1721. DSATTRIBUTETABLEENTRY samNameUserEntry =
  1722. {
  1723. L"sAMAccountName",
  1724. eUserSam,
  1725. DS_ATTRIBUTE_ONCREATE | DS_ATTRIBUTE_NOT_REUSABLE | DS_ATTRIBUTE_REQUIRED,
  1726. &samAccountName,
  1727. BuildUserSAMName,
  1728. NULL
  1729. };
  1730. DSATTRIBUTETABLEENTRY samNameComputerEntry =
  1731. {
  1732. L"sAMAccountName",
  1733. eComputerSamname,
  1734. DS_ATTRIBUTE_ONCREATE | DS_ATTRIBUTE_NOT_REUSABLE | DS_ATTRIBUTE_REQUIRED,
  1735. &samAccountName,
  1736. BuildComputerSAMName,
  1737. NULL
  1738. };
  1739. //
  1740. // Manager
  1741. //
  1742. DSATTRIBUTEDESCRIPTION manager =
  1743. {
  1744. {
  1745. L"manager",
  1746. ADS_ATTR_UPDATE,
  1747. ADSTYPE_CASE_IGNORE_STRING,
  1748. NULL,
  1749. 0
  1750. },
  1751. 0
  1752. };
  1753. DSATTRIBUTETABLEENTRY managerUserEntry =
  1754. {
  1755. L"manager",
  1756. eUserManager,
  1757. DS_ATTRIBUTE_ONCREATE,
  1758. &manager,
  1759. FillAttrInfoFromObjectEntry,
  1760. NULL
  1761. };
  1762. //
  1763. // Group Type
  1764. //
  1765. DSATTRIBUTEDESCRIPTION groupType =
  1766. {
  1767. {
  1768. L"groupType",
  1769. ADS_ATTR_UPDATE,
  1770. ADSTYPE_INTEGER,
  1771. NULL,
  1772. 0
  1773. },
  1774. 0
  1775. };
  1776. DSATTRIBUTETABLEENTRY groupScopeTypeEntry =
  1777. {
  1778. L"groupType",
  1779. eGroupScope,
  1780. DS_ATTRIBUTE_ONCREATE,
  1781. &groupType,
  1782. SetGroupScope,
  1783. NULL
  1784. };
  1785. DSATTRIBUTETABLEENTRY groupSecurityTypeEntry =
  1786. {
  1787. L"groupType",
  1788. eGroupSecgrp,
  1789. DS_ATTRIBUTE_ONCREATE,
  1790. &groupType,
  1791. SetGroupSecurity,
  1792. NULL
  1793. };
  1794. //
  1795. // Add Group Members
  1796. //
  1797. DSATTRIBUTEDESCRIPTION groupMembers =
  1798. {
  1799. {
  1800. L"member",
  1801. ADS_ATTR_UPDATE,
  1802. ADSTYPE_DN_STRING,
  1803. NULL,
  1804. 0
  1805. },
  1806. 0
  1807. };
  1808. DSATTRIBUTETABLEENTRY membersGroupEntry =
  1809. {
  1810. L"member",
  1811. eGroupMembers,
  1812. DS_ATTRIBUTE_POSTCREATE,
  1813. &groupMembers,
  1814. ModifyGroupMembers,
  1815. NULL
  1816. };
  1817. //
  1818. // Add object to another group
  1819. //
  1820. DSATTRIBUTETABLEENTRY memberOfUserEntry =
  1821. {
  1822. L"member",
  1823. eUserMemberOf,
  1824. DS_ATTRIBUTE_POSTCREATE | DS_ATTRIBUTE_NOT_REUSABLE,
  1825. &groupMembers,
  1826. MakeMemberOf,
  1827. NULL
  1828. };
  1829. DSATTRIBUTETABLEENTRY memberOfComputerEntry =
  1830. {
  1831. L"member",
  1832. eComputerMemberOf,
  1833. DS_ATTRIBUTE_POSTCREATE | DS_ATTRIBUTE_NOT_REUSABLE,
  1834. &groupMembers,
  1835. MakeMemberOf,
  1836. NULL
  1837. };
  1838. DSATTRIBUTETABLEENTRY memberOfGroupEntry =
  1839. {
  1840. L"member",
  1841. eGroupMemberOf,
  1842. DS_ATTRIBUTE_POSTCREATE | DS_ATTRIBUTE_NOT_REUSABLE,
  1843. &groupMembers,
  1844. MakeMemberOf,
  1845. NULL
  1846. };
  1847. //
  1848. // User Can Change Password
  1849. //
  1850. DSATTRIBUTETABLEENTRY canChangePwdUserEntry =
  1851. {
  1852. NULL,
  1853. eUserCanchpwd,
  1854. DS_ATTRIBUTE_POSTCREATE | DS_ATTRIBUTE_NOT_REUSABLE,
  1855. NULL,
  1856. SetCanChangePassword,
  1857. NULL
  1858. };
  1859. //
  1860. // Location
  1861. //
  1862. DSATTRIBUTEDESCRIPTION location =
  1863. {
  1864. {
  1865. L"location",
  1866. ADS_ATTR_UPDATE,
  1867. ADSTYPE_CASE_IGNORE_STRING,
  1868. NULL,
  1869. 0
  1870. },
  1871. 0
  1872. };
  1873. DSATTRIBUTETABLEENTRY locationComputerEntry =
  1874. {
  1875. L"location",
  1876. eComputerLocation,
  1877. DS_ATTRIBUTE_ONCREATE,
  1878. &location,
  1879. FillAttrInfoFromObjectEntry,
  1880. NULL
  1881. };
  1882. ////
  1883. //// rdn
  1884. ////
  1885. //DSATTRIBUTEDESCRIPTION rdn =
  1886. //{
  1887. // {
  1888. // L"cn",
  1889. // ADS_ATTR_UPDATE,
  1890. // ADSTYPE_CASE_IGNORE_STRING,
  1891. // NULL,
  1892. // 0
  1893. // },
  1894. // 0
  1895. //};
  1896. //
  1897. //DSATTRIBUTETABLEENTRY rdnQuotaEntry =
  1898. //{
  1899. // L"rdn",
  1900. // eQuotaRDN,
  1901. // DS_ATTRIBUTE_ONCREATE,
  1902. // &rdn,
  1903. // FillAttrInfoFromObjectEntry,
  1904. // NULL
  1905. //};
  1906. //
  1907. // acct
  1908. //
  1909. DSATTRIBUTEDESCRIPTION acct =
  1910. {
  1911. {
  1912. L"msDS-QuotaTrustee",
  1913. ADS_ATTR_UPDATE,
  1914. ADSTYPE_OCTET_STRING,
  1915. NULL,
  1916. 0
  1917. },
  1918. 0
  1919. };
  1920. DSATTRIBUTETABLEENTRY acctQuotaEntry =
  1921. {
  1922. L"acct",
  1923. eQuotaAcct,
  1924. DS_ATTRIBUTE_ONCREATE,
  1925. &acct,
  1926. SetAccountEntry,
  1927. NULL
  1928. };
  1929. //
  1930. // qlimit
  1931. //
  1932. DSATTRIBUTEDESCRIPTION qlimit =
  1933. {
  1934. {
  1935. L"msDS-QuotaAmount",
  1936. ADS_ATTR_UPDATE,
  1937. ADSTYPE_INTEGER,
  1938. NULL,
  1939. 0
  1940. },
  1941. 0
  1942. };
  1943. DSATTRIBUTETABLEENTRY qlimitQuotaEntry =
  1944. {
  1945. L"qlimit",
  1946. eQuotaQlimit,
  1947. DS_ATTRIBUTE_ONCREATE,
  1948. &qlimit,
  1949. FillAttrInfoFromObjectEntry,
  1950. NULL
  1951. };
  1952. //+-------------------------------------------------------------------------
  1953. // Objects
  1954. //--------------------------------------------------------------------------
  1955. //
  1956. // Organizational Unit
  1957. //
  1958. PDSATTRIBUTETABLEENTRY OUAttributeTable[] =
  1959. {
  1960. &descriptionEntry
  1961. };
  1962. DSOBJECTTABLEENTRY g_OUObjectEntry =
  1963. {
  1964. L"organizationalUnit",
  1965. g_pszOU,
  1966. DSADD_OU_COMMANDS,
  1967. USAGE_DSADD_OU,
  1968. sizeof(OUAttributeTable)/sizeof(PDSATTRIBUTETABLEENTRY),
  1969. OUAttributeTable
  1970. };
  1971. //
  1972. // User
  1973. //
  1974. PDSATTRIBUTETABLEENTRY UserAttributeTable[] =
  1975. {
  1976. &descriptionEntry,
  1977. &samNameUserEntry,
  1978. &upnUserEntry,
  1979. &firstNameUserEntry,
  1980. &middleInitialUserEntry,
  1981. &lastNameUserEntry,
  1982. &displayNameUserEntry,
  1983. &employeeIDUserEntry,
  1984. &passwordUserEntry,
  1985. &memberOfUserEntry,
  1986. &officeUserEntry,
  1987. &telephoneUserEntry,
  1988. &emailUserEntry,
  1989. &homeTelephoneUserEntry,
  1990. &pagerUserEntry,
  1991. &mobileUserEntry,
  1992. &faxUserEntry,
  1993. &ipPhoneUserEntry,
  1994. &webPageUserEntry,
  1995. &titleUserEntry,
  1996. &departmentUserEntry,
  1997. &companyUserEntry,
  1998. &managerUserEntry,
  1999. &homeDirectoryUserEntry,
  2000. &homeDriveUserEntry,
  2001. &profilePathUserEntry,
  2002. &scriptPathUserEntry,
  2003. &canChangePwdUserEntry,
  2004. &mustChangePwdUserEntry,
  2005. &reverisblePwdUserEntry,
  2006. &pwdNeverExpiresUserEntry,
  2007. &accountExpiresUserEntry,
  2008. &pwdNotReqdUserEntry,
  2009. &disableUserEntry,
  2010. };
  2011. DSOBJECTTABLEENTRY g_UserObjectEntry =
  2012. {
  2013. L"user",
  2014. g_pszUser,
  2015. DSADD_USER_COMMANDS,
  2016. USAGE_DSADD_USER,
  2017. sizeof(UserAttributeTable)/sizeof(PDSATTRIBUTETABLEENTRY),
  2018. UserAttributeTable
  2019. };
  2020. //
  2021. // Contact
  2022. //
  2023. PDSATTRIBUTETABLEENTRY ContactAttributeTable[] =
  2024. {
  2025. &descriptionEntry,
  2026. &firstNameContactEntry,
  2027. &middleInitialContactEntry,
  2028. &lastNameContactEntry,
  2029. &displayNameContactEntry,
  2030. &officeContactEntry,
  2031. &telephoneContactEntry,
  2032. &emailContactEntry,
  2033. &homeTelephoneContactEntry,
  2034. &ipPhoneContactEntry,
  2035. &pagerContactEntry,
  2036. &mobileContactEntry,
  2037. &faxContactEntry,
  2038. &titleContactEntry,
  2039. &departmentContactEntry,
  2040. &companyContactEntry
  2041. };
  2042. DSOBJECTTABLEENTRY g_ContactObjectEntry =
  2043. {
  2044. L"contact",
  2045. g_pszContact,
  2046. DSADD_CONTACT_COMMANDS,
  2047. USAGE_DSADD_CONTACT,
  2048. sizeof(ContactAttributeTable)/sizeof(PDSATTRIBUTETABLEENTRY),
  2049. ContactAttributeTable
  2050. };
  2051. //
  2052. // Computer
  2053. //
  2054. PDSATTRIBUTETABLEENTRY ComputerAttributeTable[] =
  2055. {
  2056. &descriptionEntry,
  2057. &samNameComputerEntry,
  2058. &locationComputerEntry,
  2059. &memberOfComputerEntry,
  2060. &accountTypeComputerEntry,
  2061. &disableComputerEntry
  2062. };
  2063. DSOBJECTTABLEENTRY g_ComputerObjectEntry =
  2064. {
  2065. L"computer",
  2066. g_pszComputer,
  2067. DSADD_COMPUTER_COMMANDS,
  2068. USAGE_DSADD_COMPUTER,
  2069. sizeof(ComputerAttributeTable)/sizeof(PDSATTRIBUTETABLEENTRY),
  2070. ComputerAttributeTable
  2071. };
  2072. //
  2073. // Group
  2074. //
  2075. PDSATTRIBUTETABLEENTRY GroupAttributeTable[] =
  2076. {
  2077. &descriptionEntry,
  2078. &samNameGroupEntry,
  2079. &groupScopeTypeEntry,
  2080. &groupSecurityTypeEntry,
  2081. &memberOfGroupEntry,
  2082. &membersGroupEntry,
  2083. };
  2084. DSOBJECTTABLEENTRY g_GroupObjectEntry =
  2085. {
  2086. L"group",
  2087. g_pszGroup,
  2088. DSADD_GROUP_COMMANDS,
  2089. USAGE_DSADD_GROUP,
  2090. sizeof(GroupAttributeTable)/sizeof(PDSATTRIBUTETABLEENTRY),
  2091. GroupAttributeTable
  2092. };
  2093. //
  2094. // Quota
  2095. //
  2096. PDSATTRIBUTETABLEENTRY QuotaAttributeTable[] =
  2097. {
  2098. &descriptionEntry,
  2099. &acctQuotaEntry,
  2100. &qlimitQuotaEntry
  2101. };
  2102. DSOBJECTTABLEENTRY g_QuotaObjectEntry =
  2103. {
  2104. L"msDS-QuotaControl",
  2105. g_pszQuota,
  2106. DSADD_QUOTA_COMMANDS,
  2107. USAGE_DSADD_QUOTA,
  2108. sizeof(QuotaAttributeTable)/sizeof(PDSATTRIBUTETABLEENTRY),
  2109. QuotaAttributeTable
  2110. };
  2111. //+-------------------------------------------------------------------------
  2112. // Object Table
  2113. //--------------------------------------------------------------------------
  2114. PDSOBJECTTABLEENTRY g_DSObjectTable[] =
  2115. {
  2116. &g_OUObjectEntry,
  2117. &g_UserObjectEntry,
  2118. &g_ContactObjectEntry,
  2119. &g_ComputerObjectEntry,
  2120. &g_GroupObjectEntry,
  2121. &g_QuotaObjectEntry,
  2122. NULL
  2123. };
  2124. //
  2125. //Usage Tables
  2126. //
  2127. UINT USAGE_DSADD[] =
  2128. {
  2129. USAGE_DSADD_DESCRIPTION,
  2130. USAGE_DSADD_REMARKS,
  2131. USAGE_DSADD_SEE_ALSO,
  2132. USAGE_END,
  2133. };
  2134. UINT USAGE_DSADD_OU[] =
  2135. {
  2136. USAGE_DSADD_OU_DESCRIPTION,
  2137. USAGE_DSADD_OU_SYNTAX,
  2138. USAGE_DSADD_OU_PARAMETERS,
  2139. USAGE_DSADD_OU_REMARKS,
  2140. USAGE_DSADD_OU_SEE_ALSO,
  2141. USAGE_END,
  2142. };
  2143. UINT USAGE_DSADD_USER[] =
  2144. {
  2145. USAGE_DSADD_USER_DESCRIPTION,
  2146. USAGE_DSADD_USER_SYNTAX,
  2147. USAGE_DSADD_USER_PARAMETERS,
  2148. USAGE_DSADD_USER_REMARKS,
  2149. USAGE_DSADD_USER_SEE_ALSO,
  2150. USAGE_END,
  2151. };
  2152. UINT USAGE_DSADD_CONTACT[] =
  2153. {
  2154. USAGE_DSADD_CONTACT_DESCRIPTION,
  2155. USAGE_DSADD_CONTACT_SYNTAX,
  2156. USAGE_DSADD_CONTACT_REMARKS,
  2157. USAGE_DSADD_CONTACT_SEE_ALSO,
  2158. USAGE_END,
  2159. };
  2160. UINT USAGE_DSADD_COMPUTER[] =
  2161. {
  2162. USAGE_DSADD_COMPUTER_DESCRIPTION,
  2163. USAGE_DSADD_COMPUTER_SYNTAX,
  2164. USAGE_DSADD_COMPUTER_PARAMETERS,
  2165. USAGE_DSADD_COMPUTER_REMARKS,
  2166. USAGE_DSADD_COMPUTER_SEE_ALSO,
  2167. USAGE_END,
  2168. };
  2169. UINT USAGE_DSADD_GROUP[] =
  2170. {
  2171. USAGE_DSADD_GROUP_DESCRIPTION,
  2172. USAGE_DSADD_GROUP_SYNTAX,
  2173. USAGE_DSADD_GROUP_PARAMETERS,
  2174. USAGE_DSADD_GROUP_REMARKS,
  2175. USAGE_DSADD_GROUP_SEE_ALSO,
  2176. USAGE_END,
  2177. };
  2178. UINT USAGE_DSADD_QUOTA[] =
  2179. {
  2180. USAGE_DSADD_QUOTA_DESCRIPTION,
  2181. USAGE_DSADD_QUOTA_SYNTAX,
  2182. USAGE_DSADD_QUOTA_PARAMETERS,
  2183. USAGE_DSADD_QUOTA_REMARKS,
  2184. USAGE_DSADD_QUOTA_SEE_ALSO,
  2185. USAGE_END,
  2186. };