disptmpl.h 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380
  1. /** BEGIN COPYRIGHT BLOCK
  2. * This Program is free software; you can redistribute it and/or modify it under
  3. * the terms of the GNU General Public License as published by the Free Software
  4. * Foundation; version 2 of the License.
  5. *
  6. * This Program is distributed in the hope that it will be useful, but WITHOUT
  7. * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
  8. * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
  9. *
  10. * You should have received a copy of the GNU General Public License along with
  11. * this Program; if not, write to the Free Software Foundation, Inc., 59 Temple
  12. * Place, Suite 330, Boston, MA 02111-1307 USA.
  13. *
  14. * In addition, as a special exception, Red Hat, Inc. gives You the additional
  15. * right to link the code of this Program with code not covered under the GNU
  16. * General Public License ("Non-GPL Code") and to distribute linked combinations
  17. * including the two, subject to the limitations in this paragraph. Non-GPL Code
  18. * permitted under this exception must only link to the code of this Program
  19. * through those well defined interfaces identified in the file named EXCEPTION
  20. * found in the source code files (the "Approved Interfaces"). The files of
  21. * Non-GPL Code may instantiate templates or use macros or inline functions from
  22. * the Approved Interfaces without causing the resulting work to be covered by
  23. * the GNU General Public License. Only Red Hat, Inc. may make changes or
  24. * additions to the list of Approved Interfaces. You must obey the GNU General
  25. * Public License in all respects for all of the Program code and other code used
  26. * in conjunction with the Program except the Non-GPL Code covered by this
  27. * exception. If you modify this file, you may extend this exception to your
  28. * version of the file, but you are not obligated to do so. If you do not wish to
  29. * provide this exception without modification, you must delete this exception
  30. * statement from your version and license this file solely under the GPL without
  31. * exception.
  32. *
  33. *
  34. * Copyright (C) 2001 Sun Microsystems, Inc. Used by permission.
  35. * Copyright (C) 2005 Red Hat, Inc.
  36. * All rights reserved.
  37. * END COPYRIGHT BLOCK **/
  38. /*
  39. * Copyright (c) 1993, 1994 Regents of the University of Michigan.
  40. * All rights reserved.
  41. *
  42. * Redistribution and use in source and binary forms are permitted
  43. * provided that this notice is preserved and that due credit is given
  44. * to the University of Michigan at Ann Arbor. The name of the University
  45. * may not be used to endorse or promote products derived from this
  46. * software without specific prior written permission. This software
  47. * is provided ``as is'' without express or implied warranty.
  48. *
  49. * disptmpl.h: display template library defines
  50. * 7 March 1994 by Mark C Smith
  51. */
  52. #ifndef _DISPTMPL_H
  53. #define _DISPTMPL_H
  54. #ifdef __cplusplus
  55. extern "C" {
  56. #endif
  57. /* calling conventions used by library */
  58. #ifndef LDAP_CALL
  59. #if defined( _WINDOWS ) || defined( _WIN32 )
  60. #define LDAP_C __cdecl
  61. #ifndef _WIN32
  62. #define __stdcall _far _pascal
  63. #define LDAP_CALLBACK _loadds
  64. #else
  65. #define LDAP_CALLBACK
  66. #endif /* _WIN32 */
  67. #define LDAP_PASCAL __stdcall
  68. #define LDAP_CALL LDAP_PASCAL
  69. #else /* _WINDOWS */
  70. #define LDAP_C
  71. #define LDAP_CALLBACK
  72. #define LDAP_PASCAL
  73. #define LDAP_CALL
  74. #endif /* _WINDOWS */
  75. #endif /* LDAP_CALL */
  76. #define LDAP_TEMPLATE_VERSION 1
  77. /*
  78. * general types of items (confined to most significant byte)
  79. */
  80. #define LDAP_SYN_TYPE_TEXT 0x01000000L
  81. #define LDAP_SYN_TYPE_IMAGE 0x02000000L
  82. #define LDAP_SYN_TYPE_BOOLEAN 0x04000000L
  83. #define LDAP_SYN_TYPE_BUTTON 0x08000000L
  84. #define LDAP_SYN_TYPE_ACTION 0x10000000L
  85. /*
  86. * syntax options (confined to second most significant byte)
  87. */
  88. #define LDAP_SYN_OPT_DEFER 0x00010000L
  89. /*
  90. * display template item syntax ids (defined by common agreement)
  91. * these are the valid values for the ti_syntaxid of the tmplitem
  92. * struct (defined below). A general type is encoded in the
  93. * most-significant 8 bits, and some options are encoded in the next
  94. * 8 bits. The lower 16 bits are reserved for the distinct types.
  95. */
  96. #define LDAP_SYN_CASEIGNORESTR ( 1 | LDAP_SYN_TYPE_TEXT )
  97. #define LDAP_SYN_MULTILINESTR ( 2 | LDAP_SYN_TYPE_TEXT )
  98. #define LDAP_SYN_DN ( 3 | LDAP_SYN_TYPE_TEXT )
  99. #define LDAP_SYN_BOOLEAN ( 4 | LDAP_SYN_TYPE_BOOLEAN )
  100. #define LDAP_SYN_JPEGIMAGE ( 5 | LDAP_SYN_TYPE_IMAGE )
  101. #define LDAP_SYN_JPEGBUTTON ( 6 | LDAP_SYN_TYPE_BUTTON | LDAP_SYN_OPT_DEFER )
  102. #define LDAP_SYN_FAXIMAGE ( 7 | LDAP_SYN_TYPE_IMAGE )
  103. #define LDAP_SYN_FAXBUTTON ( 8 | LDAP_SYN_TYPE_BUTTON | LDAP_SYN_OPT_DEFER )
  104. #define LDAP_SYN_AUDIOBUTTON ( 9 | LDAP_SYN_TYPE_BUTTON | LDAP_SYN_OPT_DEFER )
  105. #define LDAP_SYN_TIME ( 10 | LDAP_SYN_TYPE_TEXT )
  106. #define LDAP_SYN_DATE ( 11 | LDAP_SYN_TYPE_TEXT )
  107. #define LDAP_SYN_LABELEDURL ( 12 | LDAP_SYN_TYPE_TEXT )
  108. #define LDAP_SYN_SEARCHACTION ( 13 | LDAP_SYN_TYPE_ACTION )
  109. #define LDAP_SYN_LINKACTION ( 14 | LDAP_SYN_TYPE_ACTION )
  110. #define LDAP_SYN_ADDDNACTION ( 15 | LDAP_SYN_TYPE_ACTION )
  111. #define LDAP_SYN_VERIFYDNACTION ( 16 | LDAP_SYN_TYPE_ACTION )
  112. #define LDAP_SYN_RFC822ADDR ( 17 | LDAP_SYN_TYPE_TEXT )
  113. /*
  114. * handy macros
  115. */
  116. #define LDAP_GET_SYN_TYPE( syid ) ((syid) & 0xFF000000L )
  117. #define LDAP_GET_SYN_OPTIONS( syid ) ((syid) & 0x00FF0000L )
  118. /*
  119. * display options for output routines (used by entry2text and friends)
  120. */
  121. /*
  122. * use calculated label width (based on length of longest label in
  123. * template) instead of contant width
  124. */
  125. #define LDAP_DISP_OPT_AUTOLABELWIDTH 0x00000001L
  126. #define LDAP_DISP_OPT_HTMLBODYONLY 0x00000002L
  127. /*
  128. * perform search actions (applies to ldap_entry2text_search only)
  129. */
  130. #define LDAP_DISP_OPT_DOSEARCHACTIONS 0x00000002L
  131. /*
  132. * include additional info. relevant to "non leaf" entries only
  133. * used by ldap_entry2html and ldap_entry2html_search to include "Browse"
  134. * and "Move Up" HREFs
  135. */
  136. #define LDAP_DISP_OPT_NONLEAF 0x00000004L
  137. /*
  138. * display template item options (may not apply to all types)
  139. * if this bit is set in ti_options, it applies.
  140. */
  141. #define LDAP_DITEM_OPT_READONLY 0x00000001L
  142. #define LDAP_DITEM_OPT_SORTVALUES 0x00000002L
  143. #define LDAP_DITEM_OPT_SINGLEVALUED 0x00000004L
  144. #define LDAP_DITEM_OPT_HIDEIFEMPTY 0x00000008L
  145. #define LDAP_DITEM_OPT_VALUEREQUIRED 0x00000010L
  146. #define LDAP_DITEM_OPT_HIDEIFFALSE 0x00000020L /* booleans only */
  147. /*
  148. * display template item structure
  149. */
  150. struct ldap_tmplitem {
  151. unsigned long ti_syntaxid;
  152. unsigned long ti_options;
  153. char *ti_attrname;
  154. char *ti_label;
  155. char **ti_args;
  156. struct ldap_tmplitem *ti_next_in_row;
  157. struct ldap_tmplitem *ti_next_in_col;
  158. void *ti_appdata;
  159. };
  160. #define NULLTMPLITEM ((struct ldap_tmplitem *)0)
  161. #define LDAP_SET_TMPLITEM_APPDATA( ti, datap ) \
  162. (ti)->ti_appdata = (void *)(datap)
  163. #define LDAP_GET_TMPLITEM_APPDATA( ti, type ) \
  164. (type)((ti)->ti_appdata)
  165. #define LDAP_IS_TMPLITEM_OPTION_SET( ti, option ) \
  166. (((ti)->ti_options & option ) != 0 )
  167. /*
  168. * object class array structure
  169. */
  170. struct ldap_oclist {
  171. char **oc_objclasses;
  172. struct ldap_oclist *oc_next;
  173. };
  174. #define NULLOCLIST ((struct ldap_oclist *)0)
  175. /*
  176. * add defaults list
  177. */
  178. struct ldap_adddeflist {
  179. int ad_source;
  180. #define LDAP_ADSRC_CONSTANTVALUE 1
  181. #define LDAP_ADSRC_ADDERSDN 2
  182. char *ad_attrname;
  183. char *ad_value;
  184. struct ldap_adddeflist *ad_next;
  185. };
  186. #define NULLADLIST ((struct ldap_adddeflist *)0)
  187. /*
  188. * display template global options
  189. * if this bit is set in dt_options, it applies.
  190. */
  191. /*
  192. * users should be allowed to try to add objects of these entries
  193. */
  194. #define LDAP_DTMPL_OPT_ADDABLE 0x00000001L
  195. /*
  196. * users should be allowed to do "modify RDN" operation of these entries
  197. */
  198. #define LDAP_DTMPL_OPT_ALLOWMODRDN 0x00000002L
  199. /*
  200. * this template is an alternate view, not a primary view
  201. */
  202. #define LDAP_DTMPL_OPT_ALTVIEW 0x00000004L
  203. /*
  204. * display template structure
  205. */
  206. struct ldap_disptmpl {
  207. char *dt_name;
  208. char *dt_pluralname;
  209. char *dt_iconname;
  210. unsigned long dt_options;
  211. char *dt_authattrname;
  212. char *dt_defrdnattrname;
  213. char *dt_defaddlocation;
  214. struct ldap_oclist *dt_oclist;
  215. struct ldap_adddeflist *dt_adddeflist;
  216. struct ldap_tmplitem *dt_items;
  217. void *dt_appdata;
  218. struct ldap_disptmpl *dt_next;
  219. };
  220. #define NULLDISPTMPL ((struct ldap_disptmpl *)0)
  221. #define LDAP_SET_DISPTMPL_APPDATA( dt, datap ) \
  222. (dt)->dt_appdata = (void *)(datap)
  223. #define LDAP_GET_DISPTMPL_APPDATA( dt, type ) \
  224. (type)((dt)->dt_appdata)
  225. #define LDAP_IS_DISPTMPL_OPTION_SET( dt, option ) \
  226. (((dt)->dt_options & option ) != 0 )
  227. #define LDAP_TMPL_ERR_VERSION 1
  228. #define LDAP_TMPL_ERR_MEM 2
  229. #define LDAP_TMPL_ERR_SYNTAX 3
  230. #define LDAP_TMPL_ERR_FILE 4
  231. /*
  232. * buffer size needed for entry2text and vals2text
  233. */
  234. #define LDAP_DTMPL_BUFSIZ 8192
  235. typedef int (*writeptype)( void *writeparm, char *p, int len );
  236. LDAP_API(int)
  237. LDAP_CALL
  238. ldap_init_templates( char *file, struct ldap_disptmpl **tmpllistp );
  239. LDAP_API(int)
  240. LDAP_CALL
  241. ldap_init_templates_buf( char *buf, long buflen,
  242. struct ldap_disptmpl **tmpllistp );
  243. LDAP_API(void)
  244. LDAP_CALL
  245. ldap_free_templates( struct ldap_disptmpl *tmpllist );
  246. LDAP_API(struct ldap_disptmpl *)
  247. LDAP_CALL
  248. ldap_first_disptmpl( struct ldap_disptmpl *tmpllist );
  249. LDAP_API(struct ldap_disptmpl *)
  250. LDAP_CALL
  251. ldap_next_disptmpl( struct ldap_disptmpl *tmpllist,
  252. struct ldap_disptmpl *tmpl );
  253. LDAP_API(struct ldap_disptmpl *)
  254. LDAP_CALL
  255. ldap_name2template( char *name, struct ldap_disptmpl *tmpllist );
  256. LDAP_API(struct ldap_disptmpl *)
  257. LDAP_CALL
  258. ldap_oc2template( char **oclist, struct ldap_disptmpl *tmpllist );
  259. LDAP_API(char **)
  260. LDAP_CALL
  261. ldap_tmplattrs( struct ldap_disptmpl *tmpl, char **includeattrs, int exclude,
  262. unsigned long syntaxmask );
  263. LDAP_API(struct ldap_tmplitem *)
  264. LDAP_CALL
  265. ldap_first_tmplrow( struct ldap_disptmpl *tmpl );
  266. LDAP_API(struct ldap_tmplitem *)
  267. LDAP_CALL
  268. ldap_next_tmplrow( struct ldap_disptmpl *tmpl, struct ldap_tmplitem *row );
  269. LDAP_API(struct ldap_tmplitem *)
  270. LDAP_CALL
  271. ldap_first_tmplcol( struct ldap_disptmpl *tmpl, struct ldap_tmplitem *row );
  272. LDAP_API(struct ldap_tmplitem *)
  273. LDAP_CALL
  274. ldap_next_tmplcol( struct ldap_disptmpl *tmpl, struct ldap_tmplitem *row,
  275. struct ldap_tmplitem *col );
  276. LDAP_API(int)
  277. LDAP_CALL
  278. ldap_entry2text( LDAP *ld, char *buf, LDAPMessage *entry,
  279. struct ldap_disptmpl *tmpl, char **defattrs, char ***defvals,
  280. writeptype writeproc, void *writeparm, char *eol, int rdncount,
  281. unsigned long opts );
  282. LDAP_API(int)
  283. LDAP_CALL
  284. ldap_vals2text( LDAP *ld, char *buf, char **vals, char *label, int labelwidth,
  285. unsigned long syntaxid, writeptype writeproc, void *writeparm,
  286. char *eol, int rdncount );
  287. LDAP_API(int)
  288. LDAP_CALL
  289. ldap_entry2text_search( LDAP *ld, char *dn, char *base, LDAPMessage *entry,
  290. struct ldap_disptmpl *tmpllist, char **defattrs, char ***defvals,
  291. writeptype writeproc, void *writeparm, char *eol, int rdncount,
  292. unsigned long opts );
  293. LDAP_API(int)
  294. LDAP_CALL
  295. ldap_entry2html( LDAP *ld, char *buf, LDAPMessage *entry,
  296. struct ldap_disptmpl *tmpl, char **defattrs, char ***defvals,
  297. writeptype writeproc, void *writeparm, char *eol, int rdncount,
  298. unsigned long opts, char *urlprefix, char *base );
  299. LDAP_API(int)
  300. LDAP_CALL
  301. ldap_vals2html( LDAP *ld, char *buf, char **vals, char *label, int labelwidth,
  302. unsigned long syntaxid, writeptype writeproc, void *writeparm,
  303. char *eol, int rdncount, char *urlprefix );
  304. LDAP_API(int)
  305. LDAP_CALL
  306. ldap_entry2html_search( LDAP *ld, char *dn, char *base, LDAPMessage *entry,
  307. struct ldap_disptmpl *tmpllist, char **defattrs, char ***defvals,
  308. writeptype writeproc, void *writeparm, char *eol, int rdncount,
  309. unsigned long opts, char *urlprefix );
  310. LDAP_API(char *)
  311. LDAP_CALL
  312. ldap_tmplerr2string( int err );
  313. #ifdef __cplusplus
  314. }
  315. #endif
  316. #endif /* _DISPTMPL_H */