activeldap3 1.2.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (443) hide show
  1. data/.gitignore +6 -0
  2. data/CHANGES +691 -0
  3. data/COPYING +340 -0
  4. data/LICENSE +58 -0
  5. data/README +154 -0
  6. data/Rakefile +121 -0
  7. data/TODO +32 -0
  8. data/activeldap3.gemspec +18 -0
  9. data/benchmark/bench-al.rb +263 -0
  10. data/benchmark/config.yaml.sample +5 -0
  11. data/examples/al-admin/README +182 -0
  12. data/examples/al-admin/Rakefile +16 -0
  13. data/examples/al-admin/app/controllers/account_controller.rb +60 -0
  14. data/examples/al-admin/app/controllers/application_controller.rb +46 -0
  15. data/examples/al-admin/app/controllers/attributes_controller.rb +17 -0
  16. data/examples/al-admin/app/controllers/directory_controller.rb +49 -0
  17. data/examples/al-admin/app/controllers/object_classes_controller.rb +17 -0
  18. data/examples/al-admin/app/controllers/syntaxes_controller.rb +17 -0
  19. data/examples/al-admin/app/controllers/users_controller.rb +66 -0
  20. data/examples/al-admin/app/controllers/welcome_controller.rb +12 -0
  21. data/examples/al-admin/app/helpers/account_helper.rb +2 -0
  22. data/examples/al-admin/app/helpers/application_helper.rb +46 -0
  23. data/examples/al-admin/app/helpers/attributes_helper.rb +15 -0
  24. data/examples/al-admin/app/helpers/directory_helper.rb +7 -0
  25. data/examples/al-admin/app/helpers/object_classes_helper.rb +10 -0
  26. data/examples/al-admin/app/helpers/syntaxes_helper.rb +10 -0
  27. data/examples/al-admin/app/helpers/url_helper.rb +17 -0
  28. data/examples/al-admin/app/helpers/users_helper.rb +17 -0
  29. data/examples/al-admin/app/helpers/welcome_helper.rb +2 -0
  30. data/examples/al-admin/app/models/entry.rb +23 -0
  31. data/examples/al-admin/app/models/ldap_user.rb +58 -0
  32. data/examples/al-admin/app/models/user.rb +91 -0
  33. data/examples/al-admin/app/views/_entry/_attributes_information.html.erb +29 -0
  34. data/examples/al-admin/app/views/_entry/_entry.html.erb +15 -0
  35. data/examples/al-admin/app/views/_schema/_aliases.html.erb +7 -0
  36. data/examples/al-admin/app/views/_switcher/_after.html.erb +2 -0
  37. data/examples/al-admin/app/views/_switcher/_before.html.erb +5 -0
  38. data/examples/al-admin/app/views/account/login.html.erb +26 -0
  39. data/examples/al-admin/app/views/account/sign_up.html.erb +29 -0
  40. data/examples/al-admin/app/views/attributes/_attributes.html.erb +19 -0
  41. data/examples/al-admin/app/views/attributes/_detail.html.erb +29 -0
  42. data/examples/al-admin/app/views/attributes/index.html.erb +3 -0
  43. data/examples/al-admin/app/views/attributes/show.html.erb +31 -0
  44. data/examples/al-admin/app/views/directory/_tree.html.erb +10 -0
  45. data/examples/al-admin/app/views/directory/_tree_view_js.html.erb +25 -0
  46. data/examples/al-admin/app/views/directory/index.html.erb +13 -0
  47. data/examples/al-admin/app/views/directory/populate.html.erb +2 -0
  48. data/examples/al-admin/app/views/layouts/_footer.html.erb +11 -0
  49. data/examples/al-admin/app/views/layouts/_header_menu.html.erb +10 -0
  50. data/examples/al-admin/app/views/layouts/_main_menu.html.erb +18 -0
  51. data/examples/al-admin/app/views/layouts/application.html.erb +57 -0
  52. data/examples/al-admin/app/views/object_classes/_attributes.html.erb +28 -0
  53. data/examples/al-admin/app/views/object_classes/_object_classes.html.erb +19 -0
  54. data/examples/al-admin/app/views/object_classes/index.html.erb +3 -0
  55. data/examples/al-admin/app/views/object_classes/show.html.erb +39 -0
  56. data/examples/al-admin/app/views/syntaxes/_detail.html.erb +14 -0
  57. data/examples/al-admin/app/views/syntaxes/_syntaxes.html.erb +19 -0
  58. data/examples/al-admin/app/views/syntaxes/index.html.erb +3 -0
  59. data/examples/al-admin/app/views/syntaxes/show.html.erb +22 -0
  60. data/examples/al-admin/app/views/users/_attributes_update_form.html.erb +42 -0
  61. data/examples/al-admin/app/views/users/_form.html.erb +13 -0
  62. data/examples/al-admin/app/views/users/_object_classes_update_form.html.erb +46 -0
  63. data/examples/al-admin/app/views/users/_password_change_form.html.erb +20 -0
  64. data/examples/al-admin/app/views/users/edit.html.erb +15 -0
  65. data/examples/al-admin/app/views/users/index.html.erb +10 -0
  66. data/examples/al-admin/app/views/users/show.html.erb +11 -0
  67. data/examples/al-admin/app/views/welcome/index.html.erb +13 -0
  68. data/examples/al-admin/config.ru +7 -0
  69. data/examples/al-admin/config/boot.rb +110 -0
  70. data/examples/al-admin/config/database.yml.example +19 -0
  71. data/examples/al-admin/config/environment.rb +73 -0
  72. data/examples/al-admin/config/environments/development.rb +17 -0
  73. data/examples/al-admin/config/environments/production.rb +24 -0
  74. data/examples/al-admin/config/environments/test.rb +22 -0
  75. data/examples/al-admin/config/initializers/exception_notifier.rb +2 -0
  76. data/examples/al-admin/config/initializers/fast_gettext.rb +3 -0
  77. data/examples/al-admin/config/initializers/inflections.rb +10 -0
  78. data/examples/al-admin/config/initializers/mime_types.rb +5 -0
  79. data/examples/al-admin/config/initializers/session_store.rb +23 -0
  80. data/examples/al-admin/config/ldap.yml.example +21 -0
  81. data/examples/al-admin/config/routes.rb +58 -0
  82. data/examples/al-admin/db/migrate/001_create_users.rb +16 -0
  83. data/examples/al-admin/doc/README_FOR_APP +2 -0
  84. data/examples/al-admin/lib/authenticated_system.rb +124 -0
  85. data/examples/al-admin/lib/authenticated_test_helper.rb +113 -0
  86. data/examples/al-admin/lib/ldap_test_helper.rb +38 -0
  87. data/examples/al-admin/lib/tasks/testing.rake +10 -0
  88. data/examples/al-admin/po/en/al-admin.po +343 -0
  89. data/examples/al-admin/po/ja/al-admin.po +343 -0
  90. data/examples/al-admin/po/nl/al-admin.po +380 -0
  91. data/examples/al-admin/public/.htaccess +40 -0
  92. data/examples/al-admin/public/404.html +30 -0
  93. data/examples/al-admin/public/500.html +30 -0
  94. data/examples/al-admin/public/dispatch.cgi +10 -0
  95. data/examples/al-admin/public/dispatch.fcgi +24 -0
  96. data/examples/al-admin/public/dispatch.rb +10 -0
  97. data/examples/al-admin/public/favicon.ico +0 -0
  98. data/examples/al-admin/public/images/active-ldap.svg +6351 -0
  99. data/examples/al-admin/public/images/al-admin.png +0 -0
  100. data/examples/al-admin/public/images/al-admin.svg +6371 -0
  101. data/examples/al-admin/public/images/header-background.png +0 -0
  102. data/examples/al-admin/public/images/header-background.svg +99 -0
  103. data/examples/al-admin/public/images/rails.png +0 -0
  104. data/examples/al-admin/public/images/spinelz/accordion_tab_left_active.gif +0 -0
  105. data/examples/al-admin/public/images/spinelz/accordion_tab_left_inactive.gif +0 -0
  106. data/examples/al-admin/public/images/spinelz/accordion_tab_middle_active.gif +0 -0
  107. data/examples/al-admin/public/images/spinelz/accordion_tab_middle_inactive.gif +0 -0
  108. data/examples/al-admin/public/images/spinelz/accordion_tab_right_active.gif +0 -0
  109. data/examples/al-admin/public/images/spinelz/accordion_tab_right_inactive.gif +0 -0
  110. data/examples/al-admin/public/images/spinelz/balloon_back.gif +0 -0
  111. data/examples/al-admin/public/images/spinelz/balloon_bottom_left.gif +0 -0
  112. data/examples/al-admin/public/images/spinelz/balloon_bottom_middle.gif +0 -0
  113. data/examples/al-admin/public/images/spinelz/balloon_bottom_right.gif +0 -0
  114. data/examples/al-admin/public/images/spinelz/balloon_left_down_arrow.gif +0 -0
  115. data/examples/al-admin/public/images/spinelz/balloon_left_up_arrow.gif +0 -0
  116. data/examples/al-admin/public/images/spinelz/balloon_middle_left.gif +0 -0
  117. data/examples/al-admin/public/images/spinelz/balloon_middle_right.gif +0 -0
  118. data/examples/al-admin/public/images/spinelz/balloon_right_down_arrow.gif +0 -0
  119. data/examples/al-admin/public/images/spinelz/balloon_right_up_arrow.gif +0 -0
  120. data/examples/al-admin/public/images/spinelz/balloon_top_left.gif +0 -0
  121. data/examples/al-admin/public/images/spinelz/balloon_top_middle.gif +0 -0
  122. data/examples/al-admin/public/images/spinelz/balloon_top_right.gif +0 -0
  123. data/examples/al-admin/public/images/spinelz/barchart_h.gif +0 -0
  124. data/examples/al-admin/public/images/spinelz/barchart_v.gif +0 -0
  125. data/examples/al-admin/public/images/spinelz/button.gif +0 -0
  126. data/examples/al-admin/public/images/spinelz/calendar_default_handler.gif +0 -0
  127. data/examples/al-admin/public/images/spinelz/calendar_delete.gif +0 -0
  128. data/examples/al-admin/public/images/spinelz/calendar_next.gif +0 -0
  129. data/examples/al-admin/public/images/spinelz/calendar_next_second.gif +0 -0
  130. data/examples/al-admin/public/images/spinelz/calendar_pre.gif +0 -0
  131. data/examples/al-admin/public/images/spinelz/calendar_pre_second.gif +0 -0
  132. data/examples/al-admin/public/images/spinelz/calendar_private_icon.gif +0 -0
  133. data/examples/al-admin/public/images/spinelz/calendar_schedule.gif +0 -0
  134. data/examples/al-admin/public/images/spinelz/calender_back.gif +0 -0
  135. data/examples/al-admin/public/images/spinelz/calender_back_second.gif +0 -0
  136. data/examples/al-admin/public/images/spinelz/datepicker2_back.gif +0 -0
  137. data/examples/al-admin/public/images/spinelz/datepicker2_back_second.gif +0 -0
  138. data/examples/al-admin/public/images/spinelz/datepicker2_next.gif +0 -0
  139. data/examples/al-admin/public/images/spinelz/datepicker2_next_second.gif +0 -0
  140. data/examples/al-admin/public/images/spinelz/datepicker2_pre.gif +0 -0
  141. data/examples/al-admin/public/images/spinelz/datepicker2_pre_second.gif +0 -0
  142. data/examples/al-admin/public/images/spinelz/datepicker_back.gif +0 -0
  143. data/examples/al-admin/public/images/spinelz/datepicker_back_second.gif +0 -0
  144. data/examples/al-admin/public/images/spinelz/datepicker_next.gif +0 -0
  145. data/examples/al-admin/public/images/spinelz/datepicker_next_second.gif +0 -0
  146. data/examples/al-admin/public/images/spinelz/datepicker_pre.gif +0 -0
  147. data/examples/al-admin/public/images/spinelz/datepicker_pre_second.gif +0 -0
  148. data/examples/al-admin/public/images/spinelz/grid_down.gif +0 -0
  149. data/examples/al-admin/public/images/spinelz/grid_state.gif +0 -0
  150. data/examples/al-admin/public/images/spinelz/grid_up.gif +0 -0
  151. data/examples/al-admin/public/images/spinelz/icon_day.gif +0 -0
  152. data/examples/al-admin/public/images/spinelz/icon_month.gif +0 -0
  153. data/examples/al-admin/public/images/spinelz/icon_week.gif +0 -0
  154. data/examples/al-admin/public/images/spinelz/menubar_back.gif +0 -0
  155. data/examples/al-admin/public/images/spinelz/menubar_subcontents_back.gif +0 -0
  156. data/examples/al-admin/public/images/spinelz/navPanel_tab_left_active.gif +0 -0
  157. data/examples/al-admin/public/images/spinelz/navPanel_tab_left_inactive.gif +0 -0
  158. data/examples/al-admin/public/images/spinelz/navPanel_tab_middle_active.gif +0 -0
  159. data/examples/al-admin/public/images/spinelz/navPanel_tab_middle_inactive.gif +0 -0
  160. data/examples/al-admin/public/images/spinelz/navPanel_tab_right_active.gif +0 -0
  161. data/examples/al-admin/public/images/spinelz/navPanel_tab_right_inactive.gif +0 -0
  162. data/examples/al-admin/public/images/spinelz/select_date.gif +0 -0
  163. data/examples/al-admin/public/images/spinelz/selectabletable_selected.gif +0 -0
  164. data/examples/al-admin/public/images/spinelz/sideBarBox_about.gif +0 -0
  165. data/examples/al-admin/public/images/spinelz/sideBarBox_menu.gif +0 -0
  166. data/examples/al-admin/public/images/spinelz/sideBarBox_sample.gif +0 -0
  167. data/examples/al-admin/public/images/spinelz/sideBarBox_tabBottomActive.gif +0 -0
  168. data/examples/al-admin/public/images/spinelz/sideBarBox_tabBottomInactive.gif +0 -0
  169. data/examples/al-admin/public/images/spinelz/sideBarBox_tabMiddleActive.gif +0 -0
  170. data/examples/al-admin/public/images/spinelz/sideBarBox_tabMiddleActive2.gif +0 -0
  171. data/examples/al-admin/public/images/spinelz/sideBarBox_tabMiddleInactive.gif +0 -0
  172. data/examples/al-admin/public/images/spinelz/sideBarBox_tabMiddleInactive2.gif +0 -0
  173. data/examples/al-admin/public/images/spinelz/sideBarBox_tabTopActive.gif +0 -0
  174. data/examples/al-admin/public/images/spinelz/sideBarBox_tabTopInactive.gif +0 -0
  175. data/examples/al-admin/public/images/spinelz/sideBarBox_tabbar.gif +0 -0
  176. data/examples/al-admin/public/images/spinelz/sortableTable_down.gif +0 -0
  177. data/examples/al-admin/public/images/spinelz/sortableTable_normal.gif +0 -0
  178. data/examples/al-admin/public/images/spinelz/sortableTable_up.gif +0 -0
  179. data/examples/al-admin/public/images/spinelz/switcher_close.gif +0 -0
  180. data/examples/al-admin/public/images/spinelz/switcher_open.gif +0 -0
  181. data/examples/al-admin/public/images/spinelz/tabBox_close.gif +0 -0
  182. data/examples/al-admin/public/images/spinelz/tabBox_tabLeftActive.gif +0 -0
  183. data/examples/al-admin/public/images/spinelz/tabBox_tabLeftInactive.gif +0 -0
  184. data/examples/al-admin/public/images/spinelz/tabBox_tabMiddleActive.gif +0 -0
  185. data/examples/al-admin/public/images/spinelz/tabBox_tabMiddleInactive.gif +0 -0
  186. data/examples/al-admin/public/images/spinelz/tabBox_tabRightActive.gif +0 -0
  187. data/examples/al-admin/public/images/spinelz/tabBox_tabRightInactive.gif +0 -0
  188. data/examples/al-admin/public/images/spinelz/tab_bar.gif +0 -0
  189. data/examples/al-admin/public/images/spinelz/table_back.gif +0 -0
  190. data/examples/al-admin/public/images/spinelz/timepicker_clock.gif +0 -0
  191. data/examples/al-admin/public/images/spinelz/toolbar_close.gif +0 -0
  192. data/examples/al-admin/public/images/spinelz/toolbar_left.gif +0 -0
  193. data/examples/al-admin/public/images/spinelz/toolbar_max.gif +0 -0
  194. data/examples/al-admin/public/images/spinelz/toolbar_middle.gif +0 -0
  195. data/examples/al-admin/public/images/spinelz/toolbar_min.gif +0 -0
  196. data/examples/al-admin/public/images/spinelz/toolbar_next.gif +0 -0
  197. data/examples/al-admin/public/images/spinelz/toolbar_right.gif +0 -0
  198. data/examples/al-admin/public/images/spinelz/treeview_dir.gif +0 -0
  199. data/examples/al-admin/public/images/spinelz/treeview_file.gif +0 -0
  200. data/examples/al-admin/public/images/spinelz/treeview_group.gif +0 -0
  201. data/examples/al-admin/public/images/spinelz/treeview_group_special.gif +0 -0
  202. data/examples/al-admin/public/images/spinelz/treeview_state.gif +0 -0
  203. data/examples/al-admin/public/images/spinelz/treeview_user.gif +0 -0
  204. data/examples/al-admin/public/images/spinelz/window_bottom_left.gif +0 -0
  205. data/examples/al-admin/public/images/spinelz/window_bottom_middle.gif +0 -0
  206. data/examples/al-admin/public/images/spinelz/window_bottom_right.gif +0 -0
  207. data/examples/al-admin/public/images/spinelz/window_close.gif +0 -0
  208. data/examples/al-admin/public/images/spinelz/window_max.gif +0 -0
  209. data/examples/al-admin/public/images/spinelz/window_middle_left.gif +0 -0
  210. data/examples/al-admin/public/images/spinelz/window_middle_right.gif +0 -0
  211. data/examples/al-admin/public/images/spinelz/window_min.gif +0 -0
  212. data/examples/al-admin/public/images/spinelz/window_top_left.gif +0 -0
  213. data/examples/al-admin/public/images/spinelz/window_top_middle.gif +0 -0
  214. data/examples/al-admin/public/images/spinelz/window_top_right.gif +0 -0
  215. data/examples/al-admin/public/javascripts/application.js +2 -0
  216. data/examples/al-admin/public/javascripts/controls.js +963 -0
  217. data/examples/al-admin/public/javascripts/dragdrop.js +973 -0
  218. data/examples/al-admin/public/javascripts/effects.js +1128 -0
  219. data/examples/al-admin/public/javascripts/prototype.js +4320 -0
  220. data/examples/al-admin/public/javascripts/spinelz/accordion.js +185 -0
  221. data/examples/al-admin/public/javascripts/spinelz/ajaxHistory.js +157 -0
  222. data/examples/al-admin/public/javascripts/spinelz/balloon.js +287 -0
  223. data/examples/al-admin/public/javascripts/spinelz/barchart.js +524 -0
  224. data/examples/al-admin/public/javascripts/spinelz/calendar.js +3012 -0
  225. data/examples/al-admin/public/javascripts/spinelz/colorpicker.js +128 -0
  226. data/examples/al-admin/public/javascripts/spinelz/datepicker.js +438 -0
  227. data/examples/al-admin/public/javascripts/spinelz/grid.js +1391 -0
  228. data/examples/al-admin/public/javascripts/spinelz/grid_resizeEx.js +100 -0
  229. data/examples/al-admin/public/javascripts/spinelz/grid_sortabletableEx.js +129 -0
  230. data/examples/al-admin/public/javascripts/spinelz/inplaceEditorEx.js +148 -0
  231. data/examples/al-admin/public/javascripts/spinelz/menubar.js +232 -0
  232. data/examples/al-admin/public/javascripts/spinelz/navPanel.js +170 -0
  233. data/examples/al-admin/public/javascripts/spinelz/selectableTable.js +433 -0
  234. data/examples/al-admin/public/javascripts/spinelz/sideBarBox.js +282 -0
  235. data/examples/al-admin/public/javascripts/spinelz/sideBarBox_effects.js +83 -0
  236. data/examples/al-admin/public/javascripts/spinelz/sortableTable.js +270 -0
  237. data/examples/al-admin/public/javascripts/spinelz/switcher.js +78 -0
  238. data/examples/al-admin/public/javascripts/spinelz/tabBox.js +469 -0
  239. data/examples/al-admin/public/javascripts/spinelz/timepicker.js +384 -0
  240. data/examples/al-admin/public/javascripts/spinelz/toolbar.js +152 -0
  241. data/examples/al-admin/public/javascripts/spinelz/treeview.js +703 -0
  242. data/examples/al-admin/public/javascripts/spinelz/window.js +641 -0
  243. data/examples/al-admin/public/javascripts/spinelz/window_resizeEx.js +130 -0
  244. data/examples/al-admin/public/javascripts/spinelz_lib/builder.js +131 -0
  245. data/examples/al-admin/public/javascripts/spinelz_lib/controls.js +835 -0
  246. data/examples/al-admin/public/javascripts/spinelz_lib/dragdrop.js +944 -0
  247. data/examples/al-admin/public/javascripts/spinelz_lib/effects.js +1090 -0
  248. data/examples/al-admin/public/javascripts/spinelz_lib/json.js +139 -0
  249. data/examples/al-admin/public/javascripts/spinelz_lib/prototype.js +2515 -0
  250. data/examples/al-admin/public/javascripts/spinelz_lib/resize.js +215 -0
  251. data/examples/al-admin/public/javascripts/spinelz_lib/scriptaculous.js +51 -0
  252. data/examples/al-admin/public/javascripts/spinelz_lib/slider.js +278 -0
  253. data/examples/al-admin/public/javascripts/spinelz_lib/spinelz_util.js +1266 -0
  254. data/examples/al-admin/public/javascripts/spinelz_lib/unittest.js +564 -0
  255. data/examples/al-admin/public/robots.txt +1 -0
  256. data/examples/al-admin/public/stylesheets/account.css +41 -0
  257. data/examples/al-admin/public/stylesheets/attributes.css +1 -0
  258. data/examples/al-admin/public/stylesheets/base.css +104 -0
  259. data/examples/al-admin/public/stylesheets/detail.css +36 -0
  260. data/examples/al-admin/public/stylesheets/directory.css +22 -0
  261. data/examples/al-admin/public/stylesheets/object-classes.css +6 -0
  262. data/examples/al-admin/public/stylesheets/rails.css +35 -0
  263. data/examples/al-admin/public/stylesheets/spinelz/accordion.css +59 -0
  264. data/examples/al-admin/public/stylesheets/spinelz/balloon.css +151 -0
  265. data/examples/al-admin/public/stylesheets/spinelz/calendar.css +564 -0
  266. data/examples/al-admin/public/stylesheets/spinelz/datepicker.css +175 -0
  267. data/examples/al-admin/public/stylesheets/spinelz/grid.css +137 -0
  268. data/examples/al-admin/public/stylesheets/spinelz/menubar.css +78 -0
  269. data/examples/al-admin/public/stylesheets/spinelz/modal.css +22 -0
  270. data/examples/al-admin/public/stylesheets/spinelz/navPanel.css +58 -0
  271. data/examples/al-admin/public/stylesheets/spinelz/selectableTable.css +28 -0
  272. data/examples/al-admin/public/stylesheets/spinelz/sideBarBox.css +82 -0
  273. data/examples/al-admin/public/stylesheets/spinelz/sortableTable.css +51 -0
  274. data/examples/al-admin/public/stylesheets/spinelz/switcher.css +23 -0
  275. data/examples/al-admin/public/stylesheets/spinelz/tabBox.css +94 -0
  276. data/examples/al-admin/public/stylesheets/spinelz/timepicker.css +508 -0
  277. data/examples/al-admin/public/stylesheets/spinelz/toolbar.css +82 -0
  278. data/examples/al-admin/public/stylesheets/spinelz/treeview.css +121 -0
  279. data/examples/al-admin/public/stylesheets/spinelz/window.css +140 -0
  280. data/examples/al-admin/public/stylesheets/structure.css +81 -0
  281. data/examples/al-admin/public/stylesheets/syntaxes.css +1 -0
  282. data/examples/al-admin/public/stylesheets/users.css +13 -0
  283. data/examples/al-admin/public/stylesheets/welcome.css +0 -0
  284. data/examples/al-admin/script/about +3 -0
  285. data/examples/al-admin/script/console +3 -0
  286. data/examples/al-admin/script/dbconsole +3 -0
  287. data/examples/al-admin/script/destroy +3 -0
  288. data/examples/al-admin/script/generate +3 -0
  289. data/examples/al-admin/script/performance/benchmarker +3 -0
  290. data/examples/al-admin/script/performance/profiler +3 -0
  291. data/examples/al-admin/script/performance/request +3 -0
  292. data/examples/al-admin/script/plugin +3 -0
  293. data/examples/al-admin/script/process/inspector +3 -0
  294. data/examples/al-admin/script/process/reaper +3 -0
  295. data/examples/al-admin/script/process/spawner +3 -0
  296. data/examples/al-admin/script/runner +3 -0
  297. data/examples/al-admin/script/server +3 -0
  298. data/examples/al-admin/test/fixtures/users.yml +9 -0
  299. data/examples/al-admin/test/functional/account_controller_test.rb +12 -0
  300. data/examples/al-admin/test/functional/attributes_controller_test.rb +8 -0
  301. data/examples/al-admin/test/functional/directory_controller_test.rb +8 -0
  302. data/examples/al-admin/test/functional/object_classes_controller_test.rb +8 -0
  303. data/examples/al-admin/test/functional/syntaxes_controller_test.rb +8 -0
  304. data/examples/al-admin/test/functional/users_controller_test.rb +8 -0
  305. data/examples/al-admin/test/functional/welcome_controller_test.rb +8 -0
  306. data/examples/al-admin/test/integration/sign_up_test.rb +44 -0
  307. data/examples/al-admin/test/run-test.sh +3 -0
  308. data/examples/al-admin/test/test_helper.rb +52 -0
  309. data/examples/al-admin/test/unit/user_test.rb +12 -0
  310. data/examples/al-admin/vendor/plugins/exception_notification/README +111 -0
  311. data/examples/al-admin/vendor/plugins/exception_notification/init.rb +1 -0
  312. data/examples/al-admin/vendor/plugins/exception_notification/lib/exception_notifiable.rb +99 -0
  313. data/examples/al-admin/vendor/plugins/exception_notification/lib/exception_notifier.rb +66 -0
  314. data/examples/al-admin/vendor/plugins/exception_notification/lib/exception_notifier_helper.rb +78 -0
  315. data/examples/al-admin/vendor/plugins/exception_notification/test/exception_notifier_helper_test.rb +61 -0
  316. data/examples/al-admin/vendor/plugins/exception_notification/test/test_helper.rb +7 -0
  317. data/examples/al-admin/vendor/plugins/exception_notification/views/exception_notifier/_backtrace.rhtml +1 -0
  318. data/examples/al-admin/vendor/plugins/exception_notification/views/exception_notifier/_environment.rhtml +7 -0
  319. data/examples/al-admin/vendor/plugins/exception_notification/views/exception_notifier/_inspect_model.rhtml +16 -0
  320. data/examples/al-admin/vendor/plugins/exception_notification/views/exception_notifier/_request.rhtml +4 -0
  321. data/examples/al-admin/vendor/plugins/exception_notification/views/exception_notifier/_session.rhtml +2 -0
  322. data/examples/al-admin/vendor/plugins/exception_notification/views/exception_notifier/_title.rhtml +3 -0
  323. data/examples/al-admin/vendor/plugins/exception_notification/views/exception_notifier/exception_notification.rhtml +6 -0
  324. data/examples/config.yaml.example +5 -0
  325. data/examples/example.der +0 -0
  326. data/examples/example.jpg +0 -0
  327. data/examples/groupadd +41 -0
  328. data/examples/groupdel +35 -0
  329. data/examples/groupls +49 -0
  330. data/examples/groupmod +42 -0
  331. data/examples/lpasswd +55 -0
  332. data/examples/objects/group.rb +13 -0
  333. data/examples/objects/ou.rb +4 -0
  334. data/examples/objects/user.rb +20 -0
  335. data/examples/ouadd +38 -0
  336. data/examples/useradd +45 -0
  337. data/examples/useradd-binary +53 -0
  338. data/examples/userdel +34 -0
  339. data/examples/userls +50 -0
  340. data/examples/usermod +42 -0
  341. data/examples/usermod-binary-add +50 -0
  342. data/examples/usermod-binary-add-time +54 -0
  343. data/examples/usermod-binary-del +48 -0
  344. data/examples/usermod-lang-add +43 -0
  345. data/lib/active_ldap.rb +105 -0
  346. data/lib/active_ldap/action_controller/ldap_benchmarking.rb +55 -0
  347. data/lib/active_ldap/acts/tree.rb +75 -0
  348. data/lib/active_ldap/adapter/base.rb +705 -0
  349. data/lib/active_ldap/adapter/jndi.rb +184 -0
  350. data/lib/active_ldap/adapter/jndi_connection.rb +185 -0
  351. data/lib/active_ldap/adapter/ldap.rb +290 -0
  352. data/lib/active_ldap/adapter/ldap_ext.rb +105 -0
  353. data/lib/active_ldap/adapter/net_ldap.rb +309 -0
  354. data/lib/active_ldap/adapter/net_ldap_ext.rb +23 -0
  355. data/lib/active_ldap/association/belongs_to.rb +47 -0
  356. data/lib/active_ldap/association/belongs_to_many.rb +58 -0
  357. data/lib/active_ldap/association/children.rb +21 -0
  358. data/lib/active_ldap/association/collection.rb +105 -0
  359. data/lib/active_ldap/association/has_many.rb +31 -0
  360. data/lib/active_ldap/association/has_many_utils.rb +44 -0
  361. data/lib/active_ldap/association/has_many_wrap.rb +62 -0
  362. data/lib/active_ldap/association/proxy.rb +107 -0
  363. data/lib/active_ldap/associations.rb +202 -0
  364. data/lib/active_ldap/attributes.rb +184 -0
  365. data/lib/active_ldap/base.rb +1594 -0
  366. data/lib/active_ldap/callbacks.rb +52 -0
  367. data/lib/active_ldap/command.rb +49 -0
  368. data/lib/active_ldap/compatible.rb +44 -0
  369. data/lib/active_ldap/configuration.rb +147 -0
  370. data/lib/active_ldap/connection.rb +294 -0
  371. data/lib/active_ldap/distinguished_name.rb +291 -0
  372. data/lib/active_ldap/entry_attribute.rb +78 -0
  373. data/lib/active_ldap/escape.rb +12 -0
  374. data/lib/active_ldap/get_text.rb +9 -0
  375. data/lib/active_ldap/get_text/parser.rb +161 -0
  376. data/lib/active_ldap/get_text_fallback.rb +60 -0
  377. data/lib/active_ldap/get_text_support.rb +20 -0
  378. data/lib/active_ldap/helper.rb +92 -0
  379. data/lib/active_ldap/human_readable.rb +132 -0
  380. data/lib/active_ldap/ldap_error.rb +74 -0
  381. data/lib/active_ldap/ldif.rb +930 -0
  382. data/lib/active_ldap/object_class.rb +95 -0
  383. data/lib/active_ldap/operations.rb +610 -0
  384. data/lib/active_ldap/populate.rb +53 -0
  385. data/lib/active_ldap/railtie.rb +31 -0
  386. data/lib/active_ldap/schema.rb +699 -0
  387. data/lib/active_ldap/schema/syntaxes.rb +417 -0
  388. data/lib/active_ldap/timeout.rb +75 -0
  389. data/lib/active_ldap/timeout_stub.rb +17 -0
  390. data/lib/active_ldap/user_password.rb +92 -0
  391. data/lib/active_ldap/validations.rb +229 -0
  392. data/lib/active_ldap/xml.rb +122 -0
  393. data/po/en/active-ldap.po +4029 -0
  394. data/po/ja/active-ldap.po +4060 -0
  395. data/rails_generators/model_active_ldap/USAGE +17 -0
  396. data/rails_generators/model_active_ldap/model_active_ldap_generator.rb +69 -0
  397. data/rails_generators/model_active_ldap/templates/model_active_ldap.rb +3 -0
  398. data/rails_generators/model_active_ldap/templates/unit_test.rb +8 -0
  399. data/rails_generators/scaffold_active_ldap/scaffold_active_ldap_generator.rb +7 -0
  400. data/rails_generators/scaffold_active_ldap/templates/ldap.yml +18 -0
  401. data/test/al-test-utils.rb +439 -0
  402. data/test/command.rb +112 -0
  403. data/test/config.yaml.sample +6 -0
  404. data/test/fixtures/lower_case_object_class_schema.rb +802 -0
  405. data/test/run-test.rb +44 -0
  406. data/test/test_acts_as_tree.rb +60 -0
  407. data/test/test_adapter.rb +121 -0
  408. data/test/test_associations.rb +664 -0
  409. data/test/test_attributes.rb +117 -0
  410. data/test/test_base.rb +1177 -0
  411. data/test/test_base_per_instance.rb +61 -0
  412. data/test/test_bind.rb +62 -0
  413. data/test/test_callback.rb +37 -0
  414. data/test/test_configuration.rb +40 -0
  415. data/test/test_connection.rb +82 -0
  416. data/test/test_connection_per_class.rb +112 -0
  417. data/test/test_connection_per_dn.rb +112 -0
  418. data/test/test_dn.rb +172 -0
  419. data/test/test_find.rb +176 -0
  420. data/test/test_groupadd.rb +50 -0
  421. data/test/test_groupdel.rb +46 -0
  422. data/test/test_groupls.rb +107 -0
  423. data/test/test_groupmod.rb +51 -0
  424. data/test/test_ldif.rb +1891 -0
  425. data/test/test_load.rb +133 -0
  426. data/test/test_lpasswd.rb +75 -0
  427. data/test/test_object_class.rb +74 -0
  428. data/test/test_reflection.rb +182 -0
  429. data/test/test_schema.rb +559 -0
  430. data/test/test_syntax.rb +383 -0
  431. data/test/test_user.rb +217 -0
  432. data/test/test_user_password.rb +101 -0
  433. data/test/test_useradd-binary.rb +62 -0
  434. data/test/test_useradd.rb +57 -0
  435. data/test/test_userdel.rb +48 -0
  436. data/test/test_userls.rb +91 -0
  437. data/test/test_usermod-binary-add-time.rb +65 -0
  438. data/test/test_usermod-binary-add.rb +64 -0
  439. data/test/test_usermod-binary-del.rb +66 -0
  440. data/test/test_usermod-lang-add.rb +60 -0
  441. data/test/test_usermod.rb +58 -0
  442. data/test/test_validation.rb +274 -0
  443. metadata +502 -0
@@ -0,0 +1,17 @@
1
+ Description:
2
+ The model_active_ldap generator creates stubs for a new model.
3
+
4
+ The generator takes a model name as its argument. The model name may be given in CamelCase or under_score and
5
+ should not be suffixed with 'Model'.
6
+
7
+ The generator creates a model class in app/models, a test suite in test/unit, and test fixtures in
8
+ test/fixtures/singular_name.yml. It will not create a migration.
9
+
10
+ Examples:
11
+ ./script/generate model_active_ldap user
12
+
13
+ This will create a User model:
14
+ Model: app/models/user.rb
15
+ Test: test/unit/user_test.rb
16
+ Fixtures: test/fixtures/users.yml
17
+
@@ -0,0 +1,69 @@
1
+ require 'active_ldap'
2
+
3
+ class ModelActiveLdapGenerator < Rails::Generator::NamedBase
4
+ include ActiveLdap::GetTextSupport
5
+
6
+ default_options :dn_attribute => "cn", :classes => nil
7
+
8
+ def manifest
9
+ record do |m|
10
+ # Check for class naming collisions.
11
+ m.class_collisions class_path, class_name, "#{class_name}Test"
12
+
13
+ # Model and test directories.
14
+ m.directory File.join('app/models', class_path)
15
+ m.directory File.join('test/unit', class_path)
16
+
17
+ # Model class and unit test.
18
+ m.template('model_active_ldap.rb',
19
+ File.join('app/models', class_path, "#{file_name}.rb"),
20
+ :assigns => {:ldap_mapping => ldap_mapping})
21
+ m.template('unit_test.rb',
22
+ File.join('test/unit', class_path, "#{file_name}_test.rb"))
23
+ end
24
+ end
25
+
26
+ private
27
+ def add_options!(opt)
28
+ opt.separator ''
29
+ opt.separator 'Options:'
30
+ opt.on("--dn-attribute=ATTRIBUTE",
31
+ _("Use ATTRIBUTE as default DN attribute for " \
32
+ "instances of this model"),
33
+ _("(default: %s)") % default_options[:dn_attribute]) do |attribute|
34
+ options[:dn_attribute] = attribute
35
+ end
36
+
37
+ opt.on("--prefix=PREFIX",
38
+ _("Use PREFIX as prefix for this model"),
39
+ _("(default: %s)") % "ou=Names") do |prefix|
40
+ options[:prefix] = prefix
41
+ end
42
+
43
+ opt.on("--classes=CLASS,CLASS,...",
44
+ Array,
45
+ "Use CLASSES as required objectClass for instances of this model",
46
+ "(default: %s)" % default_options[:classes]) do |classes|
47
+ options[:classes] = classes
48
+ end
49
+ end
50
+
51
+ def prefix
52
+ options[:prefix] || default_prefix
53
+ end
54
+
55
+ def default_prefix
56
+ "ou=#{name.demodulize.pluralize}"
57
+ end
58
+
59
+ def ldap_mapping(indent=' ')
60
+ mapping = "ldap_mapping "
61
+ mapping_options = [":dn_attribute => #{options[:dn_attribute].dump}"]
62
+ mapping_options << ":prefix => #{prefix.dump}"
63
+ if options[:classes]
64
+ mapping_options << ":classes => #{options[:classes].inspect}"
65
+ end
66
+ mapping_options = mapping_options.join(",\n#{indent}#{' ' * mapping.size}")
67
+ "#{indent}#{mapping}#{mapping_options}"
68
+ end
69
+ end
@@ -0,0 +1,3 @@
1
+ class <%= class_name %> < ActiveLdap::Base
2
+ <%= ldap_mapping %>
3
+ end
@@ -0,0 +1,8 @@
1
+ require 'test_helper'
2
+
3
+ class <%= class_name %>Test < Test::Unit::TestCase
4
+ # Replace this with your real tests.
5
+ def test_truth
6
+ assert true
7
+ end
8
+ end
@@ -0,0 +1,7 @@
1
+ class ScaffoldActiveLdapGenerator < Rails::Generator::Base
2
+ def manifest
3
+ record do |m|
4
+ m.template("ldap.yml", File.join("config", "ldap.yml"))
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,18 @@
1
+ development:
2
+ host: 127.0.0.1
3
+ base: dc=devel,dc=local,dc=net
4
+ bind_dn: cn=admin,dc=local,dc=net
5
+ password: secret
6
+
7
+ test:
8
+ host: 127.0.0.1
9
+ base: dc=test,dc=local,dc=net
10
+ bind_dn: cn=admin,dc=local,dc=net
11
+ password: secret
12
+
13
+ production:
14
+ host: 127.0.0.1
15
+ method: :tls
16
+ base: dc=production,dc=local,dc=net
17
+ bind_dn: cn=admin,dc=local,dc=net
18
+ password: secret
@@ -0,0 +1,439 @@
1
+ require 'test/unit'
2
+
3
+ require 'erb'
4
+ require 'yaml'
5
+ require 'socket'
6
+ require 'rbconfig'
7
+ require 'tempfile'
8
+
9
+ require 'active_ldap'
10
+
11
+ require File.join(File.expand_path(File.dirname(__FILE__)), "command")
12
+
13
+ LDAP_ENV = "test" unless defined?(LDAP_ENV)
14
+
15
+ module AlTestUtils
16
+ def self.included(base)
17
+ base.class_eval do
18
+ include ActiveLdap::GetTextSupport
19
+ include Utilities
20
+ include Assertions
21
+ include Config
22
+ include Connection
23
+ include Populate
24
+ include TemporaryEntry
25
+ include CommandSupport
26
+ include MockLogger
27
+ end
28
+ end
29
+
30
+ module Utilities
31
+ def dn(string)
32
+ ActiveLdap::DN.parse(string)
33
+ end
34
+ end
35
+
36
+ module Assertions
37
+ def assert_true(actual, *args)
38
+ assert_equal(true, actual, *args)
39
+ end
40
+
41
+ def assert_false(actual, *args)
42
+ assert_equal(false, actual, *args)
43
+ end
44
+ end
45
+
46
+ module Config
47
+ def setup
48
+ super
49
+ @base_dir = File.expand_path(File.dirname(__FILE__))
50
+ @top_dir = File.expand_path(File.join(@base_dir, ".."))
51
+ @example_dir = File.join(@top_dir, "examples")
52
+ @fixtures_dir = File.join(@base_dir, "fixtures")
53
+ @config_file = File.join(@base_dir, "config.yaml")
54
+ ActiveLdap::Base.configurations = read_config
55
+ end
56
+
57
+ def teardown
58
+ super
59
+ end
60
+
61
+ def current_configuration
62
+ ActiveLdap::Base.configurations[LDAP_ENV]
63
+ end
64
+
65
+ def read_config
66
+ unless File.exist?(@config_file)
67
+ raise "config file for testing doesn't exist: #{@config_file}"
68
+ end
69
+ erb = ERB.new(File.read(@config_file))
70
+ erb.filename = @config_file
71
+ config = YAML.load(erb.result)
72
+ _adapter = adapter
73
+ config.each do |key, value|
74
+ value[:adapter] = _adapter if _adapter
75
+ end
76
+ config
77
+ end
78
+
79
+ def adapter
80
+ ENV["ACTIVE_LDAP_TEST_ADAPTER"]
81
+ end
82
+
83
+ def fixture(*components)
84
+ File.join(@fixtures_dir, *components)
85
+ end
86
+ end
87
+
88
+ module ExampleFile
89
+ def certificate_path
90
+ File.join(@example_dir, 'example.der')
91
+ end
92
+
93
+ @@certificate = nil
94
+ def certificate
95
+ return @@certificate if @@certificate
96
+ if File.exists?(certificate_path)
97
+ @@certificate = read_binary_file(certificate_path)
98
+ return @@certificate
99
+ end
100
+
101
+ require 'openssl'
102
+ rsa = OpenSSL::PKey::RSA.new(512)
103
+ comment = "Generated by Ruby/OpenSSL"
104
+
105
+ cert = OpenSSL::X509::Certificate.new
106
+ cert.version = 3
107
+ cert.serial = 0
108
+ subject = [["OU", "test"],
109
+ ["CN", Socket.gethostname]]
110
+ name = OpenSSL::X509::Name.new(subject)
111
+ cert.subject = name
112
+ cert.issuer = name
113
+ cert.not_before = Time.now
114
+ cert.not_after = Time.now + (365*24*60*60)
115
+ cert.public_key = rsa.public_key
116
+
117
+ ef = OpenSSL::X509::ExtensionFactory.new(nil, cert)
118
+ ef.issuer_certificate = cert
119
+ cert.extensions = [
120
+ ef.create_extension("basicConstraints","CA:FALSE"),
121
+ ef.create_extension("keyUsage", "keyEncipherment"),
122
+ ef.create_extension("subjectKeyIdentifier", "hash"),
123
+ ef.create_extension("extendedKeyUsage", "serverAuth"),
124
+ ef.create_extension("nsComment", comment),
125
+ ]
126
+ aki = ef.create_extension("authorityKeyIdentifier",
127
+ "keyid:always,issuer:always")
128
+ cert.add_extension(aki)
129
+ cert.sign(rsa, OpenSSL::Digest::SHA1.new)
130
+
131
+ @@certificate = cert.to_der
132
+ @@certificate
133
+ end
134
+
135
+ def jpeg_photo_path
136
+ File.join(@example_dir, 'example.jpg')
137
+ end
138
+
139
+ def jpeg_photo
140
+ read_binary_file(jpeg_photo_path)
141
+ end
142
+
143
+ def read_binary_file(path)
144
+ File.open(path, "rb") do |input|
145
+ input.set_encoding("ascii-8bit") if input.respond_to?(:set_encoding)
146
+ input.read
147
+ end
148
+ end
149
+ end
150
+
151
+ module Connection
152
+ def setup
153
+ super
154
+ ActiveLdap::Base.setup_connection
155
+ end
156
+
157
+ def teardown
158
+ ActiveLdap::Base.remove_active_connections!
159
+ super
160
+ end
161
+ end
162
+
163
+ module Populate
164
+ def setup
165
+ @dumped_data = nil
166
+ super
167
+ begin
168
+ @dumped_data = ActiveLdap::Base.dump(:scope => :sub)
169
+ rescue ActiveLdap::ConnectionError
170
+ end
171
+ ActiveLdap::Base.delete_all(nil, :scope => :sub)
172
+ populate
173
+ end
174
+
175
+ def teardown
176
+ if @dumped_data
177
+ ActiveLdap::Base.setup_connection
178
+ ActiveLdap::Base.delete_all(nil, :scope => :sub)
179
+ ActiveLdap::Base.load(@dumped_data)
180
+ end
181
+ super
182
+ end
183
+
184
+ def populate
185
+ populate_base
186
+ populate_ou
187
+ populate_user_class
188
+ populate_group_class
189
+ populate_associations
190
+ populate_get_text_fix
191
+ end
192
+
193
+ def populate_base
194
+ ActiveLdap::Populate.ensure_base
195
+ end
196
+
197
+ def ou_class(prefix="")
198
+ ou_class = Class.new(ActiveLdap::Base)
199
+ ou_class.ldap_mapping(:dn_attribute => "ou",
200
+ :prefix => prefix,
201
+ :classes => ["top", "organizationalUnit"])
202
+ ou_class
203
+ end
204
+
205
+ def dc_class(prefix="")
206
+ dc_class = Class.new(ActiveLdap::Base)
207
+ dc_class.ldap_mapping(:dn_attribute => "dc",
208
+ :prefix => prefix,
209
+ :classes => ["top", "dcObject", "organization"])
210
+ dc_class
211
+ end
212
+
213
+ def entry_class(prefix="")
214
+ entry_class = Class.new(ActiveLdap::Base)
215
+ entry_class.ldap_mapping(:prefix => prefix,
216
+ :scope => :sub,
217
+ :classes => ["top"])
218
+ entry_class.dn_attribute = nil
219
+ entry_class
220
+ end
221
+
222
+ def populate_ou
223
+ %w(Users Groups).each do |name|
224
+ make_ou(name)
225
+ end
226
+ end
227
+
228
+ def make_ou(name)
229
+ ActiveLdap::Populate.ensure_ou(name)
230
+ end
231
+
232
+ def make_dc(name)
233
+ ActiveLdap::Populate.ensure_dc(name)
234
+ end
235
+
236
+ def populate_user_class
237
+ @user_class = Class.new(ActiveLdap::Base)
238
+ @user_class_classes = ["posixAccount", "person"]
239
+ @user_class.ldap_mapping :dn_attribute => "uid",
240
+ :prefix => "ou=Users",
241
+ :scope => :sub,
242
+ :classes => @user_class_classes
243
+ end
244
+
245
+ def populate_group_class
246
+ @group_class = Class.new(ActiveLdap::Base)
247
+ @group_class.ldap_mapping :prefix => "ou=Groups",
248
+ :scope => :sub,
249
+ :classes => ["posixGroup"]
250
+ end
251
+
252
+ def populate_associations
253
+ @user_class.belongs_to :groups, :many => "memberUid"
254
+ @user_class.belongs_to :primary_group,
255
+ :foreign_key => "gidNumber",
256
+ :primary_key => "gidNumber"
257
+ @group_class.has_many :members, :wrap => "memberUid"
258
+ @group_class.has_many :primary_members,
259
+ :foreign_key => "gidNumber",
260
+ :primary_key => "gidNumber"
261
+ @user_class.set_associated_class(:groups, @group_class)
262
+ @user_class.set_associated_class(:primary_group, @group_class)
263
+ @group_class.set_associated_class(:members, @user_class)
264
+ @group_class.set_associated_class(:primary_members, @user_class)
265
+ end
266
+
267
+ def populate_get_text_fix
268
+ return if ActiveLdap.get_text_supported?
269
+
270
+ def @user_class.name
271
+ "User"
272
+ end
273
+
274
+ def @group_class.name
275
+ "Group"
276
+ end
277
+ end
278
+ end
279
+
280
+ module TemporaryEntry
281
+ include ExampleFile
282
+
283
+ def setup
284
+ super
285
+ @user_index = 0
286
+ @group_index = 0
287
+ end
288
+
289
+ def make_temporary_user(config={})
290
+ @user_index += 1
291
+ uid = config[:uid] || "temp-user#{@user_index}"
292
+ ensure_delete_user(uid) do
293
+ password = config[:password] || "password#{@user_index}"
294
+ uid_number = config[:uid_number] || default_uid
295
+ gid_number = config[:gid_number] || default_gid
296
+ home_directory = config[:home_directory] || "/nonexistent"
297
+ see_also = config[:see_also]
298
+ _wrap_assertion do
299
+ assert(!@user_class.exists?(uid))
300
+ assert_raise(ActiveLdap::EntryNotFound) do
301
+ @user_class.find(uid).dn
302
+ end
303
+ user = @user_class.new(uid)
304
+ assert(user.new_entry?)
305
+ user.cn = user.uid
306
+ user.sn = user.uid
307
+ user.uid_number = uid_number
308
+ user.gid_number = gid_number
309
+ user.home_directory = home_directory
310
+ user.user_password = ActiveLdap::UserPassword.ssha(password)
311
+ user.see_also = see_also
312
+ unless config[:simple]
313
+ user.add_class('shadowAccount', 'inetOrgPerson',
314
+ 'organizationalPerson')
315
+ user.user_certificate = certificate
316
+ user.jpeg_photo = jpeg_photo
317
+ end
318
+ user.save
319
+ assert(!user.new_entry?)
320
+ yield(@user_class.find(user.uid), password)
321
+ end
322
+ end
323
+ end
324
+
325
+ def make_temporary_group(config={})
326
+ @group_index += 1
327
+ cn = config[:cn] || "temp-group#{@group_index}"
328
+ ensure_delete_group(cn) do
329
+ gid_number = config[:gid_number] || default_gid
330
+ _wrap_assertion do
331
+ assert(!@group_class.exists?(cn))
332
+ assert_raise(ActiveLdap::EntryNotFound) do
333
+ @group_class.find(cn)
334
+ end
335
+ group = @group_class.new(cn)
336
+ assert(group.new_entry?)
337
+ group.gid_number = gid_number
338
+ assert(group.save)
339
+ assert(!group.new_entry?)
340
+ yield(@group_class.find(group.cn))
341
+ end
342
+ end
343
+ end
344
+
345
+ def ensure_delete_user(uid)
346
+ yield(uid)
347
+ ensure
348
+ if @user_class.exists?(uid)
349
+ @user_class.search(:value => uid) do |dn, attribute|
350
+ @user_class.remove_connection(dn)
351
+ @user_class.delete(dn)
352
+ end
353
+ end
354
+ end
355
+
356
+ def ensure_delete_group(cn)
357
+ yield(cn)
358
+ ensure
359
+ @group_class.delete(cn) if @group_class.exists?(cn)
360
+ end
361
+
362
+ def default_uid
363
+ "10000#{@user_index}"
364
+ end
365
+
366
+ def default_gid
367
+ "10000#{@group_index}"
368
+ end
369
+ end
370
+
371
+ module CommandSupport
372
+ def setup
373
+ super
374
+ @fakeroot = "fakeroot"
375
+ @ruby = File.join(::Config::CONFIG["bindir"],
376
+ ::Config::CONFIG["RUBY_INSTALL_NAME"])
377
+ @top_dir = File.expand_path(File.join(File.dirname(__FILE__), ".."))
378
+ @examples_dir = File.join(@top_dir, "examples")
379
+ @lib_dir = File.join(@top_dir, "lib")
380
+ @ruby_args = [
381
+ "-I", @examples_dir,
382
+ "-I", @lib_dir,
383
+ ]
384
+ end
385
+
386
+ def run_command(*args, &block)
387
+ file = Tempfile.new("al-command-support")
388
+ file.open
389
+ file.puts(ActiveLdap::Base.configurations["test"].to_yaml)
390
+ file.close
391
+ run_ruby(*[@command, "--config", file.path, *args], &block)
392
+ end
393
+
394
+ def run_ruby(*ruby_args, &block)
395
+ args = [@ruby, *@ruby_args]
396
+ args.concat(ruby_args)
397
+ Command.run(*args, &block)
398
+ end
399
+
400
+ def run_ruby_with_fakeroot(*ruby_args, &block)
401
+ args = [@fakeroot, @ruby, *@ruby_args]
402
+ args.concat(ruby_args)
403
+ Command.run(*args, &block)
404
+ end
405
+ end
406
+
407
+ module MockLogger
408
+ def make_mock_logger
409
+ logger = Object.new
410
+ class << logger
411
+ def messages(type)
412
+ @messages ||= {}
413
+ @messages[type] ||= []
414
+ @messages[type]
415
+ end
416
+
417
+ def info(content=nil)
418
+ messages(:info) << (block_given? ? yield : content)
419
+ end
420
+ def warn(content=nil)
421
+ messages(:warn) << (block_given? ? yield : content)
422
+ end
423
+ def error(content=nil)
424
+ messages(:error) << (block_given? ? yield : content)
425
+ end
426
+ end
427
+ logger
428
+ end
429
+
430
+ def with_mock_logger
431
+ original_logger = ActiveLdap::Base.logger
432
+ mock_logger = make_mock_logger
433
+ ActiveLdap::Base.logger = mock_logger
434
+ yield(mock_logger)
435
+ ensure
436
+ ActiveLdap::Base.logger = original_logger
437
+ end
438
+ end
439
+ end