rootdn_plugin_test.py 26 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745
  1. # --- BEGIN COPYRIGHT BLOCK ---
  2. # Copyright (C) 2016 Red Hat, Inc.
  3. # All rights reserved.
  4. #
  5. # License: GPL (version 3 or any later version).
  6. # See LICENSE for details.
  7. # --- END COPYRIGHT BLOCK ---
  8. #
  9. import logging
  10. import socket
  11. import pytest
  12. from lib389.tasks import *
  13. from lib389.tools import DirSrvTools
  14. from lib389.topologies import topology_st
  15. logging.getLogger(__name__).setLevel(logging.DEBUG)
  16. log = logging.getLogger(__name__)
  17. PLUGIN_DN = 'cn=' + PLUGIN_ROOTDN_ACCESS + ',cn=plugins,cn=config'
  18. USER1_DN = 'uid=user1,' + DEFAULT_SUFFIX
  19. def test_rootdn_init(topology_st):
  20. '''
  21. Initialize our setup to test the ROot DN Access Control Plugin
  22. Test the following access control type:
  23. - Allowed IP address *
  24. - Denied IP address *
  25. - Specific time window
  26. - Days allowed access
  27. - Allowed host *
  28. - Denied host *
  29. * means mulitple valued
  30. '''
  31. log.info('Initializing root DN test suite...')
  32. #
  33. # Set an aci so we can modify the plugin after we deny the Root DN
  34. #
  35. ACI = ('(target ="ldap:///cn=config")(targetattr = "*")(version 3.0' +
  36. ';acl "all access";allow (all)(userdn="ldap:///anyone");)')
  37. try:
  38. topology_st.standalone.modify_s(DN_CONFIG, [(ldap.MOD_ADD, 'aci', ACI)])
  39. except ldap.LDAPError as e:
  40. log.fatal('test_rootdn_init: Failed to add aci to config: error ' +
  41. e.message['desc'])
  42. assert False
  43. #
  44. # Create a user to modify the config
  45. #
  46. try:
  47. topology_st.standalone.add_s(Entry((USER1_DN, {'objectclass': "top extensibleObject".split(),
  48. 'uid': 'user1',
  49. 'userpassword': PASSWORD})))
  50. except ldap.LDAPError as e:
  51. log.fatal('test_rootdn_init: Failed to add test user ' + USER1_DN + ': error ' +
  52. e.message['desc'])
  53. assert False
  54. #
  55. # Enable dynamic plugins
  56. #
  57. try:
  58. topology_st.standalone.modify_s(DN_CONFIG, [(ldap.MOD_REPLACE, 'nsslapd-dynamic-plugins', 'on')])
  59. except ldap.LDAPError as e:
  60. log.fatal('test_rootdn_init: Failed to set dynamic plugins: error ' + e.message['desc'])
  61. assert False
  62. #
  63. # Enable the plugin (aftewr enabling dynamic plugins)
  64. #
  65. topology_st.standalone.plugins.enable(PLUGIN_ROOTDN_ACCESS)
  66. log.info('test_rootdn_init: Initialized root DN test suite.')
  67. def test_rootdn_access_specific_time(topology_st):
  68. '''
  69. Test binding inside and outside of a specific time
  70. '''
  71. log.info('Running test_rootdn_access_specific_time...')
  72. # Get the current time, and bump it ahead twohours
  73. current_hour = time.strftime("%H")
  74. if int(current_hour) > 12:
  75. open_time = '0200'
  76. close_time = '0400'
  77. else:
  78. open_time = '1600'
  79. close_time = '1800'
  80. try:
  81. topology_st.standalone.modify_s(PLUGIN_DN, [(ldap.MOD_ADD, 'rootdn-open-time', open_time),
  82. (ldap.MOD_ADD, 'rootdn-close-time', close_time)])
  83. except ldap.LDAPError as e:
  84. log.fatal('test_rootdn_access_specific_time: Failed to set (blocking) open/close times: error ' +
  85. e.message['desc'])
  86. assert False
  87. #
  88. # Bind as Root DN - should fail
  89. #
  90. try:
  91. topology_st.standalone.simple_bind_s(DN_DM, PASSWORD)
  92. succeeded = True
  93. except ldap.LDAPError as e:
  94. succeeded = False
  95. if succeeded:
  96. log.fatal('test_rootdn_access_specific_time: Root DN was incorrectly able to bind')
  97. assert False
  98. #
  99. # Set config to allow the entire day
  100. #
  101. try:
  102. topology_st.standalone.simple_bind_s(USER1_DN, PASSWORD)
  103. except ldap.LDAPError as e:
  104. log.fatal('test_rootdn_access_specific_time: test_rootdn: failed to bind as user1')
  105. assert False
  106. try:
  107. topology_st.standalone.modify_s(PLUGIN_DN, [(ldap.MOD_REPLACE, 'rootdn-open-time', '0000'),
  108. (ldap.MOD_REPLACE, 'rootdn-close-time', '2359')])
  109. except ldap.LDAPError as e:
  110. log.fatal('test_rootdn_access_specific_time: Failed to set (open) open/close times: error ' +
  111. e.message['desc'])
  112. assert False
  113. try:
  114. topology_st.standalone.simple_bind_s(DN_DM, PASSWORD)
  115. except ldap.LDAPError as e:
  116. log.fatal('test_rootdn_access_specific_time: Root DN bind failed unexpectedly failed: error ' +
  117. e.message['desc'])
  118. assert False
  119. #
  120. # Cleanup - undo the changes we made so the next test has a clean slate
  121. #
  122. try:
  123. topology_st.standalone.modify_s(PLUGIN_DN, [(ldap.MOD_DELETE, 'rootdn-open-time', None),
  124. (ldap.MOD_DELETE, 'rootdn-close-time', None)])
  125. except ldap.LDAPError as e:
  126. log.fatal('test_rootdn_access_specific_time: Failed to delete open and close time: error ' +
  127. e.message['desc'])
  128. assert False
  129. try:
  130. topology_st.standalone.simple_bind_s(DN_DM, PASSWORD)
  131. except ldap.LDAPError as e:
  132. log.fatal('test_rootdn_access_specific_time: Root DN bind failed unexpectedly failed: error ' +
  133. e.message['desc'])
  134. assert False
  135. log.info('test_rootdn_access_specific_time: PASSED')
  136. def test_rootdn_access_day_of_week(topology_st):
  137. '''
  138. Test the days of week feature
  139. '''
  140. log.info('Running test_rootdn_access_day_of_week...')
  141. days = ('Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat')
  142. day = int(time.strftime("%w", time.gmtime()))
  143. if day == 6:
  144. # Handle the roll over from Saturday into Sunday
  145. deny_days = days[1] + ', ' + days[2]
  146. allow_days = days[6] + ',' + days[0]
  147. elif day > 3:
  148. deny_days = days[0] + ', ' + days[1]
  149. allow_days = days[day] + ',' + days[day - 1]
  150. else:
  151. deny_days = days[4] + ',' + days[5]
  152. allow_days = days[day] + ',' + days[day + 1]
  153. log.info('Today: ' + days[day])
  154. log.info('Allowed days: ' + allow_days)
  155. log.info('Deny days: ' + deny_days)
  156. #
  157. # Set the deny days
  158. #
  159. try:
  160. topology_st.standalone.modify_s(PLUGIN_DN, [(ldap.MOD_REPLACE, 'rootdn-days-allowed',
  161. deny_days)])
  162. except ldap.LDAPError as e:
  163. log.fatal('test_rootdn_access_day_of_week: Failed to set the deny days: error ' +
  164. e.message['desc'])
  165. assert False
  166. #
  167. # Bind as Root DN - should fail
  168. #
  169. try:
  170. topology_st.standalone.simple_bind_s(DN_DM, PASSWORD)
  171. succeeded = True
  172. except ldap.LDAPError as e:
  173. succeeded = False
  174. if succeeded:
  175. log.fatal('test_rootdn_access_day_of_week: Root DN was incorrectly able to bind')
  176. assert False
  177. #
  178. # Set the allow days
  179. #
  180. try:
  181. topology_st.standalone.simple_bind_s(USER1_DN, PASSWORD)
  182. except ldap.LDAPError as e:
  183. log.fatal('test_rootdn_access_day_of_week: : failed to bind as user1')
  184. assert False
  185. try:
  186. topology_st.standalone.modify_s(PLUGIN_DN, [(ldap.MOD_REPLACE, 'rootdn-days-allowed',
  187. allow_days)])
  188. except ldap.LDAPError as e:
  189. log.fatal('test_rootdn_access_day_of_week: Failed to set the deny days: error ' +
  190. e.message['desc'])
  191. assert False
  192. try:
  193. topology_st.standalone.simple_bind_s(DN_DM, PASSWORD)
  194. except ldap.LDAPError as e:
  195. log.fatal('test_rootdn_access_day_of_week: Root DN bind failed unexpectedly failed: error ' +
  196. e.message['desc'])
  197. assert False
  198. #
  199. # Cleanup - undo the changes we made so the next test has a clean slate
  200. #
  201. try:
  202. topology_st.standalone.modify_s(PLUGIN_DN, [(ldap.MOD_DELETE, 'rootdn-days-allowed', None)])
  203. except ldap.LDAPError as e:
  204. log.fatal('test_rootdn_access_day_of_week: Failed to set rootDN plugin config: error ' +
  205. e.message['desc'])
  206. assert False
  207. try:
  208. topology_st.standalone.simple_bind_s(DN_DM, PASSWORD)
  209. except ldap.LDAPError as e:
  210. log.fatal('test_rootdn_access_day_of_week: Root DN bind failed unexpectedly failed: error ' +
  211. e.message['desc'])
  212. assert False
  213. log.info('test_rootdn_access_day_of_week: PASSED')
  214. def test_rootdn_access_denied_ip(topology_st):
  215. '''
  216. Test denied IP feature - we can just test denying 127.0.01
  217. '''
  218. log.info('Running test_rootdn_access_denied_ip...')
  219. try:
  220. topology_st.standalone.modify_s(PLUGIN_DN, [(ldap.MOD_REPLACE,
  221. 'rootdn-deny-ip',
  222. '127.0.0.1'),
  223. (ldap.MOD_ADD,
  224. 'rootdn-deny-ip',
  225. '::1')])
  226. except ldap.LDAPError as e:
  227. log.fatal('test_rootdn_access_denied_ip: Failed to set rootDN plugin config: error ' +
  228. e.message['desc'])
  229. assert False
  230. #
  231. # Bind as Root DN - should fail
  232. #
  233. try:
  234. topology_st.standalone.simple_bind_s(DN_DM, PASSWORD)
  235. succeeded = True
  236. except ldap.LDAPError as e:
  237. succeeded = False
  238. if succeeded:
  239. log.fatal('test_rootdn_access_denied_ip: Root DN was incorrectly able to bind')
  240. assert False
  241. #
  242. # Change the denied IP so root DN succeeds
  243. #
  244. try:
  245. topology_st.standalone.simple_bind_s(USER1_DN, PASSWORD)
  246. except ldap.LDAPError as e:
  247. log.fatal('test_rootdn_access_denied_ip: : failed to bind as user1')
  248. assert False
  249. try:
  250. topology_st.standalone.modify_s(PLUGIN_DN, [(ldap.MOD_REPLACE, 'rootdn-deny-ip', '255.255.255.255')])
  251. except ldap.LDAPError as e:
  252. log.fatal('test_rootdn_access_denied_ip: Failed to set rootDN plugin config: error ' +
  253. e.message['desc'])
  254. assert False
  255. try:
  256. topology_st.standalone.simple_bind_s(DN_DM, PASSWORD)
  257. except ldap.LDAPError as e:
  258. log.fatal('test_rootdn_access_denied_ip: Root DN bind failed unexpectedly failed: error ' +
  259. e.message['desc'])
  260. assert False
  261. #
  262. # Cleanup - undo the changes we made so the next test has a clean slate
  263. #
  264. try:
  265. topology_st.standalone.modify_s(PLUGIN_DN, [(ldap.MOD_DELETE, 'rootdn-deny-ip', None)])
  266. except ldap.LDAPError as e:
  267. log.fatal('test_rootdn_access_denied_ip: Failed to set rootDN plugin config: error ' +
  268. e.message['desc'])
  269. assert False
  270. try:
  271. topology_st.standalone.simple_bind_s(DN_DM, PASSWORD)
  272. except ldap.LDAPError as e:
  273. log.fatal('test_rootdn_access_denied_ip: Root DN bind failed unexpectedly failed: error ' +
  274. e.message['desc'])
  275. assert False
  276. log.info('test_rootdn_access_denied_ip: PASSED')
  277. def test_rootdn_access_denied_host(topology_st):
  278. '''
  279. Test denied Host feature - we can just test denying localhost
  280. '''
  281. log.info('Running test_rootdn_access_denied_host...')
  282. hostname = socket.gethostname()
  283. localhost = DirSrvTools.getLocalhost()
  284. try:
  285. topology_st.standalone.modify_s(PLUGIN_DN, [(ldap.MOD_ADD,
  286. 'rootdn-deny-host',
  287. hostname)])
  288. topology_st.standalone.modify_s(PLUGIN_DN, [(ldap.MOD_ADD,
  289. 'rootdn-deny-host',
  290. localhost)])
  291. except ldap.LDAPError as e:
  292. log.fatal('test_rootdn_access_denied_host: Failed to set deny host: error ' +
  293. e.message['desc'])
  294. assert False
  295. #
  296. # Bind as Root DN - should fail
  297. #
  298. try:
  299. topology_st.standalone.simple_bind_s(DN_DM, PASSWORD)
  300. succeeded = True
  301. except ldap.LDAPError as e:
  302. succeeded = False
  303. if succeeded:
  304. log.fatal('test_rootdn_access_denied_host: Root DN was incorrectly able to bind')
  305. assert False
  306. #
  307. # Change the denied host so root DN succeeds
  308. #
  309. try:
  310. topology_st.standalone.simple_bind_s(USER1_DN, PASSWORD)
  311. except ldap.LDAPError as e:
  312. log.fatal('test_rootdn_access_denied_host: : failed to bind as user1')
  313. assert False
  314. try:
  315. topology_st.standalone.modify_s(PLUGIN_DN, [(ldap.MOD_REPLACE, 'rootdn-deny-host', 'i.dont.exist.com')])
  316. except ldap.LDAPError as e:
  317. log.fatal('test_rootdn_access_denied_host: Failed to set rootDN plugin config: error ' +
  318. e.message['desc'])
  319. assert False
  320. try:
  321. topology_st.standalone.simple_bind_s(DN_DM, PASSWORD)
  322. except ldap.LDAPError as e:
  323. log.fatal('test_rootdn_access_denied_host: Root DN bind failed unexpectedly failed: error ' +
  324. e.message['desc'])
  325. assert False
  326. #
  327. # Cleanup - undo the changes we made so the next test has a clean slate
  328. #
  329. try:
  330. topology_st.standalone.modify_s(PLUGIN_DN, [(ldap.MOD_DELETE, 'rootdn-deny-host', None)])
  331. except ldap.LDAPError as e:
  332. log.fatal('test_rootdn_access_denied_host: Failed to set rootDN plugin config: error ' +
  333. e.message['desc'])
  334. assert False
  335. try:
  336. topology_st.standalone.simple_bind_s(DN_DM, PASSWORD)
  337. except ldap.LDAPError as e:
  338. log.fatal('test_rootdn_access_denied_host: Root DN bind failed unexpectedly failed: error ' +
  339. e.message['desc'])
  340. assert False
  341. log.info('test_rootdn_access_denied_host: PASSED')
  342. def test_rootdn_access_allowed_ip(topology_st):
  343. '''
  344. Test allowed ip feature
  345. '''
  346. log.info('Running test_rootdn_access_allowed_ip...')
  347. #
  348. # Set allowed host to an unknown host - blocks the Root DN
  349. #
  350. try:
  351. topology_st.standalone.modify_s(PLUGIN_DN, [(ldap.MOD_REPLACE, 'rootdn-allow-ip', '255.255.255.255')])
  352. except ldap.LDAPError as e:
  353. log.fatal('test_rootdn_access_allowed_ip: Failed to set allowed host: error ' +
  354. e.message['desc'])
  355. assert False
  356. #
  357. # Bind as Root DN - should fail
  358. #
  359. try:
  360. topology_st.standalone.simple_bind_s(DN_DM, PASSWORD)
  361. succeeded = True
  362. except ldap.LDAPError as e:
  363. succeeded = False
  364. if succeeded:
  365. log.fatal('test_rootdn_access_allowed_ip: Root DN was incorrectly able to bind')
  366. assert False
  367. #
  368. # Allow localhost
  369. #
  370. try:
  371. topology_st.standalone.simple_bind_s(USER1_DN, PASSWORD)
  372. except ldap.LDAPError as e:
  373. log.fatal('test_rootdn_access_allowed_ip: : failed to bind as user1')
  374. assert False
  375. try:
  376. topology_st.standalone.modify_s(PLUGIN_DN, [(ldap.MOD_REPLACE, 'rootdn-allow-ip', '127.0.0.1'),
  377. (ldap.MOD_ADD, 'rootdn-allow-ip', '::1')])
  378. except ldap.LDAPError as e:
  379. log.fatal('test_rootdn_access_allowed_ip: Failed to set allowed host: error ' +
  380. e.message['desc'])
  381. assert False
  382. try:
  383. topology_st.standalone.simple_bind_s(DN_DM, PASSWORD)
  384. except ldap.LDAPError as e:
  385. log.fatal('test_rootdn_access_allowed_ip: Root DN bind failed unexpectedly failed: error ' +
  386. e.message['desc'])
  387. assert False
  388. #
  389. # Cleanup - undo everything we did so the next test has a clean slate
  390. #
  391. try:
  392. topology_st.standalone.modify_s(PLUGIN_DN, [(ldap.MOD_DELETE, 'rootdn-allow-ip', None)])
  393. except ldap.LDAPError as e:
  394. log.fatal('test_rootdn_access_allowed_ip: Failed to delete(rootdn-allow-ip): error ' +
  395. e.message['desc'])
  396. assert False
  397. try:
  398. topology_st.standalone.simple_bind_s(DN_DM, PASSWORD)
  399. except ldap.LDAPError as e:
  400. log.fatal('test_rootdn_access_allowed_ip: Root DN bind failed unexpectedly failed: error ' +
  401. e.message['desc'])
  402. assert False
  403. log.info('test_rootdn_access_allowed_ip: PASSED')
  404. def test_rootdn_access_allowed_host(topology_st):
  405. '''
  406. Test allowed ip feature
  407. '''
  408. log.info('Running test_rootdn_access_allowed_host...')
  409. #
  410. # Set allowed host to an unknown host - blocks the Root DN
  411. #
  412. try:
  413. topology_st.standalone.modify_s(PLUGIN_DN, [(ldap.MOD_REPLACE, 'rootdn-allow-host', 'i.dont.exist.com')])
  414. except ldap.LDAPError as e:
  415. log.fatal('test_rootdn_access_allowed_host: Failed to set allowed host: error ' +
  416. e.message['desc'])
  417. assert False
  418. #
  419. # Bind as Root DN - should fail
  420. #
  421. try:
  422. topology_st.standalone.simple_bind_s(DN_DM, PASSWORD)
  423. succeeded = True
  424. except ldap.LDAPError as e:
  425. succeeded = False
  426. if succeeded:
  427. log.fatal('test_rootdn_access_allowed_host: Root DN was incorrectly able to bind')
  428. assert False
  429. #
  430. # Allow localhost
  431. #
  432. try:
  433. topology_st.standalone.simple_bind_s(USER1_DN, PASSWORD)
  434. except ldap.LDAPError as e:
  435. log.fatal('test_rootdn_access_allowed_host: : failed to bind as user1')
  436. assert False
  437. hostname = socket.gethostname()
  438. localhost = DirSrvTools.getLocalhost()
  439. try:
  440. topology_st.standalone.modify_s(PLUGIN_DN, [(ldap.MOD_ADD,
  441. 'rootdn-allow-host',
  442. localhost)])
  443. topology_st.standalone.modify_s(PLUGIN_DN, [(ldap.MOD_ADD,
  444. 'rootdn-allow-host',
  445. hostname)])
  446. except ldap.LDAPError as e:
  447. log.fatal('test_rootdn_access_allowed_host: Failed to set allowed host: error ' +
  448. e.message['desc'])
  449. assert False
  450. try:
  451. topology_st.standalone.simple_bind_s(DN_DM, PASSWORD)
  452. except ldap.LDAPError as e:
  453. log.fatal('test_rootdn_access_allowed_host: Root DN bind failed unexpectedly failed: error ' +
  454. e.message['desc'])
  455. assert False
  456. #
  457. # Cleanup - undo everything we did so the next test has a clean slate
  458. #
  459. try:
  460. topology_st.standalone.modify_s(PLUGIN_DN, [(ldap.MOD_DELETE, 'rootdn-allow-host', None)])
  461. except ldap.LDAPError as e:
  462. log.fatal('test_rootdn_access_allowed_host: Failed to delete(rootdn-allow-host): error ' +
  463. e.message['desc'])
  464. assert False
  465. try:
  466. topology_st.standalone.simple_bind_s(DN_DM, PASSWORD)
  467. except ldap.LDAPError as e:
  468. log.fatal('test_rootdn_access_allowed_host: Root DN bind failed unexpectedly failed: error ' +
  469. e.message['desc'])
  470. assert False
  471. log.info('test_rootdn_access_allowed_host: PASSED')
  472. def test_rootdn_config_validate(topology_st):
  473. '''
  474. Test configuration validation
  475. test single valued attributes: rootdn-open-time,
  476. rootdn-close-time,
  477. rootdn-days-allowed
  478. '''
  479. log.info('Running test_rootdn_config_validate...')
  480. #
  481. # Test rootdn-open-time
  482. #
  483. try:
  484. topology_st.standalone.modify_s(PLUGIN_DN, [(ldap.MOD_REPLACE, 'rootdn-open-time', '0000')])
  485. log.fatal('test_rootdn_config_validate: Incorrectly allowed to just add "rootdn-open-time" ')
  486. assert False
  487. except ldap.LDAPError:
  488. pass
  489. try:
  490. topology_st.standalone.modify_s(PLUGIN_DN, [(ldap.MOD_ADD, 'rootdn-open-time', '0000'),
  491. (ldap.MOD_ADD, 'rootdn-open-time', '0001')])
  492. log.fatal('test_rootdn_config_validate: Incorrectly allowed to add multiple "rootdn-open-time"')
  493. assert False
  494. except ldap.LDAPError:
  495. pass
  496. try:
  497. topology_st.standalone.modify_s(PLUGIN_DN, [(ldap.MOD_REPLACE, 'rootdn-open-time', '-1'),
  498. (ldap.MOD_REPLACE, 'rootdn-close-time', '0000')])
  499. log.fatal('test_rootdn_config_validate: Incorrectly allowed to add invalid "rootdn-open-time: -1"')
  500. assert False
  501. except ldap.LDAPError:
  502. pass
  503. try:
  504. topology_st.standalone.modify_s(PLUGIN_DN, [(ldap.MOD_REPLACE, 'rootdn-open-time', '2400'),
  505. (ldap.MOD_REPLACE, 'rootdn-close-time', '0000')])
  506. log.fatal('test_rootdn_config_validate: Incorrectly allowed to add invalid "rootdn-open-time: 2400"')
  507. assert False
  508. except ldap.LDAPError:
  509. pass
  510. try:
  511. topology_st.standalone.modify_s(PLUGIN_DN, [(ldap.MOD_REPLACE, 'rootdn-open-time', 'aaaaa'),
  512. (ldap.MOD_REPLACE, 'rootdn-close-time', '0000')])
  513. log.fatal('test_rootdn_config_validate: Incorrectly allowed to add invalid "rootdn-open-time: aaaaa"')
  514. assert False
  515. except ldap.LDAPError:
  516. pass
  517. #
  518. # Test rootdn-close-time
  519. #
  520. try:
  521. topology_st.standalone.modify_s(PLUGIN_DN, [(ldap.MOD_REPLACE, 'rootdn-close-time', '0000')])
  522. log.fatal('test_rootdn_config_validate: Incorrectly allowed to add just "rootdn-close-time"')
  523. assert False
  524. except ldap.LDAPError:
  525. pass
  526. try:
  527. topology_st.standalone.modify_s(PLUGIN_DN, [(ldap.MOD_ADD, 'rootdn-close-time', '0000'),
  528. (ldap.MOD_ADD, 'rootdn-close-time', '0001')])
  529. log.fatal('test_rootdn_config_validate: Incorrectly allowed to add multiple "rootdn-open-time"')
  530. assert False
  531. except ldap.LDAPError:
  532. pass
  533. try:
  534. topology_st.standalone.modify_s(PLUGIN_DN, [(ldap.MOD_REPLACE, 'rootdn-open-time', '0000'),
  535. (ldap.MOD_REPLACE, 'rootdn-close-time', '-1')])
  536. log.fatal('test_rootdn_config_validate: Incorrectly allowed to add invalid "rootdn-close-time: -1"')
  537. assert False
  538. except ldap.LDAPError:
  539. pass
  540. try:
  541. topology_st.standalone.modify_s(PLUGIN_DN, [(ldap.MOD_REPLACE, 'rootdn-open-time', '0000'),
  542. (ldap.MOD_REPLACE, 'rootdn-close-time', '2400')])
  543. log.fatal('test_rootdn_config_validate: Incorrectly allowed to add invalid "rootdn-close-time: 2400"')
  544. assert False
  545. except ldap.LDAPError:
  546. pass
  547. try:
  548. topology_st.standalone.modify_s(PLUGIN_DN, [(ldap.MOD_REPLACE, 'rootdn-open-time', '0000'),
  549. (ldap.MOD_REPLACE, 'rootdn-close-time', 'aaaaa')])
  550. log.fatal('test_rootdn_config_validate: Incorrectly allowed to add invalid "rootdn-close-time: aaaaa"')
  551. assert False
  552. except ldap.LDAPError:
  553. pass
  554. #
  555. # Test days allowed
  556. #
  557. try:
  558. topology_st.standalone.modify_s(PLUGIN_DN, [(ldap.MOD_ADD, 'rootdn-days-allowed', 'Mon'),
  559. (ldap.MOD_ADD, 'rootdn-days-allowed', 'Tue')])
  560. log.fatal('test_rootdn_config_validate: Incorrectly allowed to add two "rootdn-days-allowed"')
  561. assert False
  562. except ldap.LDAPError:
  563. pass
  564. try:
  565. topology_st.standalone.modify_s(PLUGIN_DN, [(ldap.MOD_REPLACE, 'rootdn-days-allowed', 'Mon1')])
  566. log.fatal('test_rootdn_config_validate: Incorrectly allowed to add invalid "rootdn-days-allowed: Mon1"')
  567. assert False
  568. except ldap.LDAPError:
  569. pass
  570. try:
  571. topology_st.standalone.modify_s(PLUGIN_DN, [(ldap.MOD_REPLACE, 'rootdn-days-allowed', 'Tue, Mon1')])
  572. log.fatal('test_rootdn_config_validate: Incorrectly allowed to add invalid "rootdn-days-allowed: Tue, Mon1"')
  573. assert False
  574. except ldap.LDAPError:
  575. pass
  576. try:
  577. topology_st.standalone.modify_s(PLUGIN_DN, [(ldap.MOD_REPLACE, 'rootdn-days-allowed', 'm111m')])
  578. log.fatal('test_rootdn_config_validate: Incorrectly allowed to add invalid "rootdn-days-allowed: 111"')
  579. assert False
  580. except ldap.LDAPError:
  581. pass
  582. try:
  583. topology_st.standalone.modify_s(PLUGIN_DN, [(ldap.MOD_REPLACE, 'rootdn-days-allowed', 'Gur')])
  584. log.fatal('test_rootdn_config_validate: Incorrectly allowed to add invalid "rootdn-days-allowed: Gur"')
  585. assert False
  586. except ldap.LDAPError:
  587. pass
  588. #
  589. # Test allow ips
  590. #
  591. try:
  592. topology_st.standalone.modify_s(PLUGIN_DN, [(ldap.MOD_REPLACE, 'rootdn-allow-ip', '12.12.Z.12')])
  593. log.fatal('test_rootdn_config_validate: Incorrectly allowed to add invalid "rootdn-allow-ip: 12.12.Z.12"')
  594. assert False
  595. except ldap.LDAPError:
  596. pass
  597. #
  598. # Test deny ips
  599. #
  600. try:
  601. topology_st.standalone.modify_s(PLUGIN_DN, [(ldap.MOD_REPLACE, 'rootdn-deny-ip', '12.12.Z.12')])
  602. log.fatal('test_rootdn_config_validate: Incorrectly allowed to add invalid "rootdn-deny-ip: 12.12.Z.12"')
  603. assert False
  604. except ldap.LDAPError:
  605. pass
  606. #
  607. # Test allow hosts
  608. #
  609. try:
  610. topology_st.standalone.modify_s(PLUGIN_DN, [(ldap.MOD_REPLACE, 'rootdn-allow-host', 'host._.com')])
  611. log.fatal('test_rootdn_config_validate: Incorrectly allowed to add invalid "rootdn-allow-host: host._.com"')
  612. assert False
  613. except ldap.LDAPError:
  614. pass
  615. #
  616. # Test deny hosts
  617. #
  618. try:
  619. topology_st.standalone.modify_s(PLUGIN_DN, [(ldap.MOD_REPLACE, 'rootdn-deny-host', 'host.####.com')])
  620. log.fatal('test_rootdn_config_validate: Incorrectly allowed to add invalid "rootdn-deny-host: host.####.com"')
  621. assert False
  622. except ldap.LDAPError:
  623. pass
  624. log.info('test_rootdn_config_validate: PASSED')
  625. if __name__ == '__main__':
  626. # Run isolated
  627. # -s for DEBUG mode
  628. CURRENT_FILE = os.path.realpath(__file__)
  629. pytest.main("-s %s" % CURRENT_FILE)