ces.c 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168
  1. /** BEGIN COPYRIGHT BLOCK
  2. * Copyright 2001 Sun Microsystems, Inc.
  3. * Portions copyright 1999, 2001-2003 Netscape Communications Corporation.
  4. * All rights reserved.
  5. * END COPYRIGHT BLOCK **/
  6. /* ces.c - caseexactstring syntax routines */
  7. #include <stdio.h>
  8. #include <string.h>
  9. #include <sys/types.h>
  10. #include "syntax.h"
  11. static int ces_filter_ava( Slapi_PBlock *pb, struct berval *bvfilter,
  12. Slapi_Value **bvals, int ftype, Slapi_Value **retVal );
  13. static int ces_filter_sub( Slapi_PBlock *pb, char *initial, char **any,
  14. char *final, Slapi_Value **bvals );
  15. static int ces_values2keys( Slapi_PBlock *pb, Slapi_Value **val,
  16. Slapi_Value ***ivals, int ftype );
  17. static int ces_assertion2keys_ava( Slapi_PBlock *pb, Slapi_Value *val,
  18. Slapi_Value ***ivals, int ftype );
  19. static int ces_assertion2keys_sub( Slapi_PBlock *pb, char *initial, char **any,
  20. char *final, Slapi_Value ***ivals );
  21. static int ces_compare(struct berval *v1, struct berval *v2);
  22. /* the first name is the official one from RFC 2252 */
  23. static char *ia5_names[] = { "IA5String", "ces", "caseexactstring",
  24. IA5STRING_SYNTAX_OID, 0 };
  25. /* the first name is the official one from RFC 2252 */
  26. static char *uri_names[] = { "URI", "1.3.6.1.4.1.4401.1.1.1",0};
  27. static Slapi_PluginDesc ia5_pdesc = { "ces-syntax", PLUGIN_MAGIC_VENDOR_STR,
  28. PRODUCTTEXT, "caseExactString attribute syntax plugin" };
  29. static Slapi_PluginDesc uri_pdesc = { "uri-syntax", PLUGIN_MAGIC_VENDOR_STR,
  30. PRODUCTTEXT, "uri attribute syntax plugin" };
  31. /*
  32. * register_ces_like_plugin(): register all items for a cis-like plugin.
  33. */
  34. static int
  35. register_ces_like_plugin( Slapi_PBlock *pb, Slapi_PluginDesc *pdescp,
  36. char **names, char *oid )
  37. {
  38. int rc, flags;
  39. rc = slapi_pblock_set( pb, SLAPI_PLUGIN_VERSION,
  40. (void *) SLAPI_PLUGIN_VERSION_01 );
  41. rc |= slapi_pblock_set( pb, SLAPI_PLUGIN_DESCRIPTION,
  42. (void *) pdescp );
  43. rc |= slapi_pblock_set( pb, SLAPI_PLUGIN_SYNTAX_FILTER_AVA,
  44. (void *) ces_filter_ava );
  45. rc |= slapi_pblock_set( pb, SLAPI_PLUGIN_SYNTAX_FILTER_SUB,
  46. (void *) ces_filter_sub );
  47. rc |= slapi_pblock_set( pb, SLAPI_PLUGIN_SYNTAX_VALUES2KEYS,
  48. (void *) ces_values2keys );
  49. rc |= slapi_pblock_set( pb, SLAPI_PLUGIN_SYNTAX_ASSERTION2KEYS_AVA,
  50. (void *) ces_assertion2keys_ava );
  51. rc |= slapi_pblock_set( pb, SLAPI_PLUGIN_SYNTAX_ASSERTION2KEYS_SUB,
  52. (void *) ces_assertion2keys_sub );
  53. flags = SLAPI_PLUGIN_SYNTAX_FLAG_ORDERING;
  54. rc |= slapi_pblock_set( pb, SLAPI_PLUGIN_SYNTAX_FLAGS,
  55. (void *) &flags );
  56. rc |= slapi_pblock_set( pb, SLAPI_PLUGIN_SYNTAX_NAMES,
  57. (void *) names );
  58. rc |= slapi_pblock_set( pb, SLAPI_PLUGIN_SYNTAX_OID,
  59. (void *) oid );
  60. rc |= slapi_pblock_set( pb, SLAPI_PLUGIN_SYNTAX_COMPARE,
  61. (void *) ces_compare );
  62. return( rc );
  63. }
  64. int
  65. ces_init( Slapi_PBlock *pb )
  66. {
  67. int rc;
  68. LDAPDebug( LDAP_DEBUG_PLUGIN, "=> ces_init\n", 0, 0, 0 );
  69. rc = register_ces_like_plugin(pb,&ia5_pdesc,ia5_names,IA5STRING_SYNTAX_OID);
  70. LDAPDebug( LDAP_DEBUG_PLUGIN, "<= ces_init %d\n", rc, 0, 0 );
  71. return( rc );
  72. }
  73. int
  74. uri_init( Slapi_PBlock *pb )
  75. {
  76. int rc;
  77. LDAPDebug( LDAP_DEBUG_PLUGIN, "=> uri_init\n", 0, 0, 0 );
  78. rc = register_ces_like_plugin(pb,&uri_pdesc,uri_names,
  79. "1.3.6.1.4.1.4401.1.1.1");
  80. LDAPDebug( LDAP_DEBUG_PLUGIN, "<= uri_init %d\n", rc, 0, 0 );
  81. return( rc );
  82. }
  83. static int
  84. ces_filter_ava(
  85. Slapi_PBlock *pb,
  86. struct berval *bvfilter,
  87. Slapi_Value **bvals,
  88. int ftype,
  89. Slapi_Value **retVal
  90. )
  91. {
  92. return( string_filter_ava( bvfilter, bvals, SYNTAX_CES, ftype,
  93. retVal) );
  94. }
  95. static int
  96. ces_filter_sub(
  97. Slapi_PBlock *pb,
  98. char *initial,
  99. char **any,
  100. char *final,
  101. Slapi_Value **bvals
  102. )
  103. {
  104. return( string_filter_sub( pb, initial, any, final, bvals, SYNTAX_CES ) );
  105. }
  106. static int
  107. ces_values2keys(
  108. Slapi_PBlock *pb,
  109. Slapi_Value **vals,
  110. Slapi_Value ***ivals,
  111. int ftype
  112. )
  113. {
  114. return( string_values2keys( pb, vals, ivals, SYNTAX_CES, ftype ) );
  115. }
  116. static int
  117. ces_assertion2keys_ava(
  118. Slapi_PBlock *pb,
  119. Slapi_Value *val,
  120. Slapi_Value ***ivals,
  121. int ftype
  122. )
  123. {
  124. return(string_assertion2keys_ava( pb, val, ivals, SYNTAX_CES, ftype ));
  125. }
  126. static int
  127. ces_assertion2keys_sub(
  128. Slapi_PBlock *pb,
  129. char *initial,
  130. char **any,
  131. char *final,
  132. Slapi_Value ***ivals
  133. )
  134. {
  135. return( string_assertion2keys_sub( pb, initial, any, final, ivals,
  136. SYNTAX_CES ) );
  137. }
  138. static int ces_compare(
  139. struct berval *v1,
  140. struct berval *v2
  141. )
  142. {
  143. return value_cmp(v1,v2,SYNTAX_CES,3 /* Normalise both values */);
  144. }