pwd_init.c 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359
  1. /** BEGIN COPYRIGHT BLOCK
  2. * Copyright (C) 2001 Sun Microsystems, Inc. Used by permission.
  3. * Copyright (C) 2005 Red Hat, Inc.
  4. * All rights reserved.
  5. *
  6. * License: GPL (version 3 or any later version).
  7. * See LICENSE for details.
  8. * END COPYRIGHT BLOCK **/
  9. #ifdef HAVE_CONFIG_H
  10. # include <config.h>
  11. #endif
  12. #include <stdio.h>
  13. #include <string.h>
  14. #include <sys/types.h>
  15. #include "pwdstorage.h"
  16. static Slapi_PluginDesc sha_pdesc = { "sha-password-storage-scheme", VENDOR, DS_PACKAGE_VERSION, "Secure Hashing Algorithm (SHA)" };
  17. static Slapi_PluginDesc ssha_pdesc = { "ssha-password-storage-scheme", VENDOR, DS_PACKAGE_VERSION, "Salted Secure Hashing Algorithm (SSHA)" };
  18. static Slapi_PluginDesc sha256_pdesc = { "sha256-password-storage-scheme", VENDOR, DS_PACKAGE_VERSION, "Secure Hashing Algorithm (SHA256)" };
  19. static Slapi_PluginDesc ssha256_pdesc = { "ssha256-password-storage-scheme", VENDOR, DS_PACKAGE_VERSION, "Salted Secure Hashing Algorithm (SSHA256)" };
  20. static Slapi_PluginDesc sha384_pdesc = { "sha384-password-storage-scheme", VENDOR, DS_PACKAGE_VERSION, "Secure Hashing Algorithm (SHA384)" };
  21. static Slapi_PluginDesc ssha384_pdesc = { "ssha384-password-storage-scheme", VENDOR, DS_PACKAGE_VERSION, "Salted Secure Hashing Algorithm (SSHA384)" };
  22. static Slapi_PluginDesc sha512_pdesc = { "sha512-password-storage-scheme", VENDOR, DS_PACKAGE_VERSION, "Secure Hashing Algorithm (SHA512)" };
  23. static Slapi_PluginDesc ssha512_pdesc = { "ssha512-password-storage-scheme", VENDOR, DS_PACKAGE_VERSION, "Salted Secure Hashing Algorithm (SSHA512)" };
  24. static Slapi_PluginDesc crypt_pdesc = { "crypt-password-storage-scheme", VENDOR, DS_PACKAGE_VERSION, "Unix crypt algorithm (CRYPT)" };
  25. static Slapi_PluginDesc clear_pdesc = { "clear-password-storage-scheme", VENDOR, DS_PACKAGE_VERSION, "No encryption (CLEAR)" };
  26. static Slapi_PluginDesc ns_mta_md5_pdesc = { "NS-MTA-MD5-password-storage-scheme", VENDOR, DS_PACKAGE_VERSION, "Netscape MD5 (NS-MTA-MD5)" };
  27. static Slapi_PluginDesc md5_pdesc = { "md5-password-storage-scheme", VENDOR, DS_PACKAGE_VERSION, "MD5 hash algorithm (MD5)" };
  28. static Slapi_PluginDesc smd5_pdesc = { "smd5-password-storage-scheme", VENDOR, DS_PACKAGE_VERSION, "Salted MD5 hash algorithm (SMD5)" };
  29. static Slapi_PluginDesc pbkdf2_sha256_pdesc = { "pbkdf2-sha256-password-storage-scheme", VENDOR, DS_PACKAGE_VERSION, "Salted PBKDF2 SHA256 hash algorithm (PBKDF2_SHA256)" };
  30. static char *plugin_name = "NSPwdStoragePlugin";
  31. int
  32. sha_pwd_storage_scheme_init( Slapi_PBlock *pb )
  33. {
  34. int rc;
  35. slapi_log_err(SLAPI_LOG_PLUGIN, plugin_name, "=> sha_pwd_storage_scheme_init\n" );
  36. rc = slapi_pblock_set( pb, SLAPI_PLUGIN_VERSION,
  37. (void *) SLAPI_PLUGIN_VERSION_01 );
  38. rc |= slapi_pblock_set( pb, SLAPI_PLUGIN_DESCRIPTION,
  39. (void *)&sha_pdesc );
  40. rc |= slapi_pblock_set( pb, SLAPI_PLUGIN_PWD_STORAGE_SCHEME_ENC_FN,
  41. (void *) sha1_pw_enc);
  42. rc |= slapi_pblock_set( pb, SLAPI_PLUGIN_PWD_STORAGE_SCHEME_CMP_FN,
  43. (void *) sha1_pw_cmp );
  44. rc |= slapi_pblock_set( pb, SLAPI_PLUGIN_PWD_STORAGE_SCHEME_NAME,
  45. "SHA" );
  46. slapi_log_err(SLAPI_LOG_PLUGIN, plugin_name, "<= sha_pwd_storage_scheme_init %d\n\n", rc );
  47. return( rc );
  48. }
  49. int
  50. ssha_pwd_storage_scheme_init( Slapi_PBlock *pb )
  51. {
  52. int rc;
  53. slapi_log_err(SLAPI_LOG_PLUGIN, plugin_name, "=> ssha_pwd_storage_scheme_init\n" );
  54. rc = slapi_pblock_set( pb, SLAPI_PLUGIN_VERSION,
  55. (void *) SLAPI_PLUGIN_VERSION_01 );
  56. rc |= slapi_pblock_set( pb, SLAPI_PLUGIN_DESCRIPTION,
  57. (void *)&ssha_pdesc );
  58. rc |= slapi_pblock_set( pb, SLAPI_PLUGIN_PWD_STORAGE_SCHEME_ENC_FN,
  59. (void *) salted_sha1_pw_enc );
  60. rc |= slapi_pblock_set( pb, SLAPI_PLUGIN_PWD_STORAGE_SCHEME_CMP_FN,
  61. (void *) sha1_pw_cmp );
  62. rc |= slapi_pblock_set( pb, SLAPI_PLUGIN_PWD_STORAGE_SCHEME_NAME,
  63. "SSHA" );
  64. slapi_log_err(SLAPI_LOG_PLUGIN, plugin_name, "<= ssha_pwd_storage_scheme_init %d\n\n", rc );
  65. return( rc );
  66. }
  67. int
  68. sha256_pwd_storage_scheme_init( Slapi_PBlock *pb )
  69. {
  70. int rc;
  71. slapi_log_err(SLAPI_LOG_PLUGIN, plugin_name, "=> sha256_pwd_storage_scheme_init\n" );
  72. rc = slapi_pblock_set( pb, SLAPI_PLUGIN_VERSION,
  73. (void *) SLAPI_PLUGIN_VERSION_01 );
  74. rc |= slapi_pblock_set( pb, SLAPI_PLUGIN_DESCRIPTION,
  75. (void *)&sha256_pdesc );
  76. rc |= slapi_pblock_set( pb, SLAPI_PLUGIN_PWD_STORAGE_SCHEME_ENC_FN,
  77. (void *) sha256_pw_enc);
  78. rc |= slapi_pblock_set( pb, SLAPI_PLUGIN_PWD_STORAGE_SCHEME_CMP_FN,
  79. (void *) sha256_pw_cmp );
  80. rc |= slapi_pblock_set( pb, SLAPI_PLUGIN_PWD_STORAGE_SCHEME_NAME,
  81. "SHA256" );
  82. slapi_log_err(SLAPI_LOG_PLUGIN, plugin_name, "<= sha256_pwd_storage_scheme_init %d\n\n", rc );
  83. return( rc );
  84. }
  85. int
  86. ssha256_pwd_storage_scheme_init( Slapi_PBlock *pb )
  87. {
  88. int rc;
  89. slapi_log_err(SLAPI_LOG_PLUGIN, plugin_name, "=> ssha256_pwd_storage_scheme_init\n" );
  90. rc = slapi_pblock_set( pb, SLAPI_PLUGIN_VERSION,
  91. (void *) SLAPI_PLUGIN_VERSION_01 );
  92. rc |= slapi_pblock_set( pb, SLAPI_PLUGIN_DESCRIPTION,
  93. (void *)&ssha256_pdesc );
  94. rc |= slapi_pblock_set( pb, SLAPI_PLUGIN_PWD_STORAGE_SCHEME_ENC_FN,
  95. (void *) salted_sha256_pw_enc );
  96. rc |= slapi_pblock_set( pb, SLAPI_PLUGIN_PWD_STORAGE_SCHEME_CMP_FN,
  97. (void *) sha256_pw_cmp );
  98. rc |= slapi_pblock_set( pb, SLAPI_PLUGIN_PWD_STORAGE_SCHEME_NAME,
  99. "SSHA256" );
  100. slapi_log_err(SLAPI_LOG_PLUGIN, plugin_name, "<= ssha256_pwd_storage_scheme_init %d\n\n", rc );
  101. return( rc );
  102. }
  103. int
  104. sha384_pwd_storage_scheme_init( Slapi_PBlock *pb )
  105. {
  106. int rc;
  107. slapi_log_err(SLAPI_LOG_PLUGIN, plugin_name, "=> sha384_pwd_storage_scheme_init\n" );
  108. rc = slapi_pblock_set( pb, SLAPI_PLUGIN_VERSION,
  109. (void *) SLAPI_PLUGIN_VERSION_01 );
  110. rc |= slapi_pblock_set( pb, SLAPI_PLUGIN_DESCRIPTION,
  111. (void *)&sha384_pdesc );
  112. rc |= slapi_pblock_set( pb, SLAPI_PLUGIN_PWD_STORAGE_SCHEME_ENC_FN,
  113. (void *) sha384_pw_enc);
  114. rc |= slapi_pblock_set( pb, SLAPI_PLUGIN_PWD_STORAGE_SCHEME_CMP_FN,
  115. (void *) sha384_pw_cmp );
  116. rc |= slapi_pblock_set( pb, SLAPI_PLUGIN_PWD_STORAGE_SCHEME_NAME,
  117. "SHA384" );
  118. slapi_log_err(SLAPI_LOG_PLUGIN, plugin_name, "<= sha384_pwd_storage_scheme_init %d\n\n", rc );
  119. return( rc );
  120. }
  121. int
  122. ssha384_pwd_storage_scheme_init( Slapi_PBlock *pb )
  123. {
  124. int rc;
  125. slapi_log_err(SLAPI_LOG_PLUGIN, plugin_name, "=> ssha384_pwd_storage_scheme_init\n" );
  126. rc = slapi_pblock_set( pb, SLAPI_PLUGIN_VERSION,
  127. (void *) SLAPI_PLUGIN_VERSION_01 );
  128. rc |= slapi_pblock_set( pb, SLAPI_PLUGIN_DESCRIPTION,
  129. (void *)&ssha384_pdesc );
  130. rc |= slapi_pblock_set( pb, SLAPI_PLUGIN_PWD_STORAGE_SCHEME_ENC_FN,
  131. (void *) salted_sha384_pw_enc );
  132. rc |= slapi_pblock_set( pb, SLAPI_PLUGIN_PWD_STORAGE_SCHEME_CMP_FN,
  133. (void *) sha384_pw_cmp );
  134. rc |= slapi_pblock_set( pb, SLAPI_PLUGIN_PWD_STORAGE_SCHEME_NAME,
  135. "SSHA384" );
  136. slapi_log_err(SLAPI_LOG_PLUGIN, plugin_name, "<= ssha384_pwd_storage_scheme_init %d\n\n", rc );
  137. return( rc );
  138. }
  139. int
  140. sha512_pwd_storage_scheme_init( Slapi_PBlock *pb )
  141. {
  142. int rc;
  143. slapi_log_err(SLAPI_LOG_PLUGIN, plugin_name, "=> sha512_pwd_storage_scheme_init\n" );
  144. rc = slapi_pblock_set( pb, SLAPI_PLUGIN_VERSION,
  145. (void *) SLAPI_PLUGIN_VERSION_01 );
  146. rc |= slapi_pblock_set( pb, SLAPI_PLUGIN_DESCRIPTION,
  147. (void *)&sha512_pdesc );
  148. rc |= slapi_pblock_set( pb, SLAPI_PLUGIN_PWD_STORAGE_SCHEME_ENC_FN,
  149. (void *) sha512_pw_enc);
  150. rc |= slapi_pblock_set( pb, SLAPI_PLUGIN_PWD_STORAGE_SCHEME_CMP_FN,
  151. (void *) sha512_pw_cmp );
  152. rc |= slapi_pblock_set( pb, SLAPI_PLUGIN_PWD_STORAGE_SCHEME_NAME,
  153. "SHA512" );
  154. slapi_log_err(SLAPI_LOG_PLUGIN, plugin_name, "<= sha512_pwd_storage_scheme_init %d\n\n", rc );
  155. return( rc );
  156. }
  157. int
  158. ssha512_pwd_storage_scheme_init( Slapi_PBlock *pb )
  159. {
  160. int rc;
  161. slapi_log_err(SLAPI_LOG_PLUGIN, plugin_name, "=> ssha512_pwd_storage_scheme_init\n" );
  162. rc = slapi_pblock_set( pb, SLAPI_PLUGIN_VERSION,
  163. (void *) SLAPI_PLUGIN_VERSION_01 );
  164. rc |= slapi_pblock_set( pb, SLAPI_PLUGIN_DESCRIPTION,
  165. (void *)&ssha512_pdesc );
  166. rc |= slapi_pblock_set( pb, SLAPI_PLUGIN_PWD_STORAGE_SCHEME_ENC_FN,
  167. (void *) salted_sha512_pw_enc );
  168. rc |= slapi_pblock_set( pb, SLAPI_PLUGIN_PWD_STORAGE_SCHEME_CMP_FN,
  169. (void *) sha512_pw_cmp );
  170. rc |= slapi_pblock_set( pb, SLAPI_PLUGIN_PWD_STORAGE_SCHEME_NAME,
  171. "SSHA512" );
  172. slapi_log_err(SLAPI_LOG_PLUGIN, plugin_name, "<= ssha512_pwd_storage_scheme_init %d\n\n", rc );
  173. return( rc );
  174. }
  175. int
  176. crypt_pwd_storage_scheme_init( Slapi_PBlock *pb )
  177. {
  178. int rc;
  179. slapi_log_err(SLAPI_LOG_PLUGIN, plugin_name, "=> crypt_pwd_storage_scheme_init\n" );
  180. rc = slapi_pblock_set( pb, SLAPI_PLUGIN_VERSION,
  181. (void *) SLAPI_PLUGIN_VERSION_01 );
  182. rc |= slapi_pblock_set( pb, SLAPI_PLUGIN_DESCRIPTION,
  183. (void *)&crypt_pdesc );
  184. rc |= slapi_pblock_set( pb, SLAPI_PLUGIN_START_FN, (void*)&crypt_start);
  185. rc |= slapi_pblock_set( pb, SLAPI_PLUGIN_CLOSE_FN, (void*)&crypt_close);
  186. rc |= slapi_pblock_set( pb, SLAPI_PLUGIN_PWD_STORAGE_SCHEME_ENC_FN,
  187. (void *) crypt_pw_enc );
  188. rc |= slapi_pblock_set( pb, SLAPI_PLUGIN_PWD_STORAGE_SCHEME_CMP_FN,
  189. (void *) crypt_pw_cmp );
  190. rc |= slapi_pblock_set( pb, SLAPI_PLUGIN_PWD_STORAGE_SCHEME_NAME,
  191. "CRYPT" );
  192. slapi_log_err(SLAPI_LOG_PLUGIN, plugin_name, "<= crypt_pwd_storage_scheme_init %d\n\n", rc );
  193. return( rc );
  194. }
  195. int
  196. clear_pwd_storage_scheme_init( Slapi_PBlock *pb )
  197. {
  198. int rc;
  199. slapi_log_err(SLAPI_LOG_PLUGIN, plugin_name, "=> clear_pwd_storage_scheme_init\n" );
  200. rc = slapi_pblock_set( pb, SLAPI_PLUGIN_VERSION,
  201. (void *) SLAPI_PLUGIN_VERSION_01 );
  202. rc |= slapi_pblock_set( pb, SLAPI_PLUGIN_DESCRIPTION,
  203. (void *)&clear_pdesc );
  204. rc |= slapi_pblock_set( pb, SLAPI_PLUGIN_PWD_STORAGE_SCHEME_ENC_FN,
  205. (void *) clear_pw_enc );
  206. rc |= slapi_pblock_set( pb, SLAPI_PLUGIN_PWD_STORAGE_SCHEME_CMP_FN,
  207. (void *) clear_pw_cmp );
  208. rc |= slapi_pblock_set( pb, SLAPI_PLUGIN_PWD_STORAGE_SCHEME_NAME,
  209. "CLEAR" );
  210. slapi_log_err(SLAPI_LOG_PLUGIN, plugin_name, "<= clear_pwd_storage_scheme_init %d\n\n", rc );
  211. return( rc );
  212. }
  213. int
  214. ns_mta_md5_pwd_storage_scheme_init( Slapi_PBlock *pb )
  215. {
  216. int rc;
  217. slapi_log_err(SLAPI_LOG_PLUGIN, plugin_name, "=> ns_mta_md5_pwd_storage_scheme_init\n" );
  218. rc = slapi_pblock_set( pb, SLAPI_PLUGIN_VERSION,
  219. (void *) SLAPI_PLUGIN_VERSION_01 );
  220. rc |= slapi_pblock_set( pb, SLAPI_PLUGIN_DESCRIPTION,
  221. (void *)&ns_mta_md5_pdesc );
  222. rc |= slapi_pblock_set( pb, SLAPI_PLUGIN_PWD_STORAGE_SCHEME_ENC_FN,
  223. (void *) NULL );
  224. rc |= slapi_pblock_set( pb, SLAPI_PLUGIN_PWD_STORAGE_SCHEME_CMP_FN,
  225. (void *) ns_mta_md5_pw_cmp );
  226. rc |= slapi_pblock_set( pb, SLAPI_PLUGIN_PWD_STORAGE_SCHEME_NAME,
  227. "NS-MTA-MD5" );
  228. slapi_log_err(SLAPI_LOG_PLUGIN, plugin_name, "<= ns_mta_md5_pwd_storage_scheme_init %d\n\n", rc );
  229. return( rc );
  230. }
  231. int
  232. md5_pwd_storage_scheme_init( Slapi_PBlock *pb )
  233. {
  234. int rc;
  235. slapi_log_err(SLAPI_LOG_PLUGIN, plugin_name, "=> md5_pwd_storage_scheme_init\n" );
  236. rc = slapi_pblock_set( pb, SLAPI_PLUGIN_VERSION,
  237. (void *) SLAPI_PLUGIN_VERSION_01 );
  238. rc |= slapi_pblock_set( pb, SLAPI_PLUGIN_DESCRIPTION,
  239. (void *)&md5_pdesc );
  240. rc |= slapi_pblock_set( pb, SLAPI_PLUGIN_PWD_STORAGE_SCHEME_ENC_FN,
  241. (void *) md5_pw_enc );
  242. rc |= slapi_pblock_set( pb, SLAPI_PLUGIN_PWD_STORAGE_SCHEME_CMP_FN,
  243. (void *) md5_pw_cmp );
  244. rc |= slapi_pblock_set( pb, SLAPI_PLUGIN_PWD_STORAGE_SCHEME_NAME,
  245. "MD5" );
  246. slapi_log_err(SLAPI_LOG_PLUGIN, plugin_name, "<= md5_pwd_storage_scheme_init %d\n\n", rc );
  247. return( rc );
  248. }
  249. int
  250. smd5_pwd_storage_scheme_init( Slapi_PBlock *pb )
  251. {
  252. int rc;
  253. slapi_log_err(SLAPI_LOG_PLUGIN, plugin_name, "=> smd5_pwd_storage_scheme_init\n" );
  254. rc = slapi_pblock_set( pb, SLAPI_PLUGIN_VERSION,
  255. (void *) SLAPI_PLUGIN_VERSION_01 );
  256. rc |= slapi_pblock_set( pb, SLAPI_PLUGIN_DESCRIPTION,
  257. (void *)&smd5_pdesc );
  258. rc |= slapi_pblock_set( pb, SLAPI_PLUGIN_PWD_STORAGE_SCHEME_ENC_FN,
  259. (void *) smd5_pw_enc );
  260. rc |= slapi_pblock_set( pb, SLAPI_PLUGIN_PWD_STORAGE_SCHEME_CMP_FN,
  261. (void *) smd5_pw_cmp );
  262. rc |= slapi_pblock_set( pb, SLAPI_PLUGIN_PWD_STORAGE_SCHEME_NAME,
  263. "SMD5" );
  264. slapi_log_err(SLAPI_LOG_PLUGIN, plugin_name, "<= smd5_pwd_storage_scheme_init %d\n\n", rc );
  265. return( rc );
  266. }
  267. int
  268. pbkdf2_sha256_pwd_storage_scheme_init(Slapi_PBlock *pb)
  269. {
  270. int rc;
  271. slapi_log_err(SLAPI_LOG_PLUGIN, plugin_name, "=> pbkdf2_sha256_pwd_storage_scheme_init\n");
  272. rc = slapi_pblock_set(pb, SLAPI_PLUGIN_VERSION, (void *) SLAPI_PLUGIN_VERSION_01);
  273. rc |= slapi_pblock_set(pb, SLAPI_PLUGIN_DESCRIPTION, (void *)&pbkdf2_sha256_pdesc);
  274. rc |= slapi_pblock_set(pb, SLAPI_PLUGIN_PWD_STORAGE_SCHEME_ENC_FN, (void *)pbkdf2_sha256_pw_enc);
  275. rc |= slapi_pblock_set(pb, SLAPI_PLUGIN_PWD_STORAGE_SCHEME_CMP_FN, (void *)pbkdf2_sha256_pw_cmp);
  276. rc |= slapi_pblock_set(pb, SLAPI_PLUGIN_PWD_STORAGE_SCHEME_NAME, PBKDF2_SHA256_SCHEME_NAME);
  277. slapi_log_err(SLAPI_LOG_PLUGIN, plugin_name, "<= pbkdf2_sha256_pwd_storage_scheme_init %d\n", rc);
  278. return rc;
  279. }