Mercurial > illumos > onarm
annotate usr/src/cmd/ldap/common/tmpltest.c @ 4:1a15d5aaf794
synchronized with onnv_86 (6202) in onnv-gate
author | Koji Uno <koji.uno@sun.com> |
---|---|
date | Mon, 31 Aug 2009 14:38:03 +0900 |
parents | c9caec207d52 |
children |
rev | line source |
---|---|
0 | 1 /* |
2 * | |
3 * Portions Copyright 1998 Sun Microsystems, Inc. All rights reserved. | |
4 * Use is subject to license terms. | |
5 * | |
6 */ | |
4
1a15d5aaf794
synchronized with onnv_86 (6202) in onnv-gate
Koji Uno <koji.uno@sun.com>
parents:
0
diff
changeset
|
7 #pragma ident "%Z%%M% %I% %E% SMI" |
0 | 8 #include <stdio.h> |
9 #include <sys/types.h> | |
10 #include "lber.h" | |
11 #include "ldap.h" | |
12 #include "disptmpl.h" | |
13 #include "srchpref.h" | |
14 | |
15 #ifdef MACOS | |
16 #include <stdlib.h> | |
17 #include <console.h> | |
18 #endif /* MACOS */ | |
19 | |
20 #ifdef NEEDPROTOS | |
21 void dump_tmpl( struct ldap_disptmpl *tmpl ); | |
22 void dump_srchpref( struct ldap_searchobj *sp ); | |
23 #else /* NEEDPROTOS */ | |
24 void dump_tmpl(); | |
25 void dump_srchpref(); | |
26 #endif /* NEEDPROTOS */ | |
27 | |
28 | |
29 #define NULLSTRINGIFNULL( s ) ( s == NULL ? "(null)" : s ) | |
30 | |
31 | |
32 int | |
33 main( int argc, char **argv ) | |
34 { | |
35 struct ldap_disptmpl *templates, *dtp; | |
36 struct ldap_searchobj *so, *sop; | |
37 int err; | |
38 | |
39 #ifdef MACOS | |
40 ccommand( &argv ); | |
41 for ( argc = 0; argv[ argc ] != NULL; ++argc ) { | |
42 ; | |
43 } | |
44 cshow( stdout ); | |
45 #endif /* MACOS */ | |
46 | |
47 if (( err = ldap_init_templates( "ldaptemplates.conf", &templates )) | |
48 != 0 ) { | |
49 fprintf( stderr, "ldap_init_templates failed (%d)\n", err ); | |
50 exit( 1 ); | |
51 } | |
52 | |
53 if (( err = ldap_init_searchprefs( "ldapsearchprefs.conf", &so )) | |
54 != 0 ) { | |
55 fprintf( stderr, "ldap_init_searchprefs failed (%d)\n", err ); | |
56 exit( 1 ); | |
57 } | |
58 | |
59 if ( argc == 1 ) { | |
60 printf( "*** Display Templates:\n" ); | |
61 for ( dtp = ldap_first_disptmpl( templates ); dtp != NULLDISPTMPL; | |
62 dtp = ldap_next_disptmpl( templates, dtp )) { | |
63 dump_tmpl( dtp ); | |
64 printf( "\n\n" ); | |
65 } | |
66 | |
67 printf( "\n\n*** Search Objects:\n" ); | |
68 for ( sop = ldap_first_searchobj( so ); sop != NULLSEARCHOBJ; | |
69 sop = ldap_next_searchobj( so, sop )) { | |
70 dump_srchpref( sop ); | |
71 printf( "\n\n" ); | |
72 } | |
73 | |
74 } else { | |
75 if (( dtp = ldap_oc2template( ++argv, templates )) == NULL ) { | |
76 fprintf( stderr, "no matching template found\n" ); | |
77 } else { | |
78 dump_tmpl( dtp ); | |
79 } | |
80 } | |
81 | |
82 | |
83 ldap_free_templates( templates ); | |
84 ldap_free_searchprefs( so ); | |
85 | |
86 exit( 0 ); | |
87 } | |
88 | |
89 | |
90 static char *syn_name[] = { | |
91 "?", "CIS", "MLS", "DN", "BOOL", "JPEG", "JPEGBTN", "FAX", "FAXBTN", | |
92 "AUDIOBTN", "TIME", "DATE", "URL", "SEARCHACT", "LINKACT", "ADDDNACT", | |
93 "VERIFYACT", | |
94 }; | |
95 | |
96 static char *syn_type[] = { | |
97 "?", "txt", "img", "?", "bool", "?", "?", "?", "btn", | |
98 "?", "?", "?", "?", "?", "?", "?", | |
99 "action", "?" | |
100 }; | |
101 | |
102 static char *includeattrs[] = { "objectClass", "sn", NULL }; | |
103 | |
104 static char *item_opts[] = { | |
105 "ro", "sort", "1val", "hide", "required", "hideiffalse", NULL | |
106 }; | |
107 | |
108 static unsigned long item_opt_vals[] = { | |
109 LDAP_DITEM_OPT_READONLY, LDAP_DITEM_OPT_SORTVALUES, | |
110 LDAP_DITEM_OPT_SINGLEVALUED, LDAP_DITEM_OPT_HIDEIFEMPTY, | |
111 LDAP_DITEM_OPT_VALUEREQUIRED, LDAP_DITEM_OPT_HIDEIFFALSE, | |
112 }; | |
113 | |
114 | |
115 void | |
116 dump_tmpl( struct ldap_disptmpl *tmpl ) | |
117 { | |
118 struct ldap_tmplitem *rowp, *colp; | |
119 int i, rowcnt, colcnt; | |
120 char **fetchattrs; | |
121 struct ldap_oclist *ocp; | |
122 struct ldap_adddeflist *adp; | |
123 | |
124 printf( "** Template \"%s\" (plural \"%s\", icon \"%s\")\n", | |
125 NULLSTRINGIFNULL( tmpl->dt_name ), | |
126 NULLSTRINGIFNULL( tmpl->dt_pluralname ), | |
127 NULLSTRINGIFNULL( tmpl->dt_iconname )); | |
128 | |
129 printf( "object class list:\n" ); | |
130 for ( ocp = tmpl->dt_oclist; ocp != NULL; ocp = ocp->oc_next ) { | |
131 for ( i = 0; ocp->oc_objclasses[ i ] != NULL; ++i ) { | |
132 printf( "%s%s", i == 0 ? " " : " & ", | |
133 NULLSTRINGIFNULL( ocp->oc_objclasses[ i ] )); | |
134 } | |
135 putchar( '\n' ); | |
136 } | |
137 putchar( '\n' ); | |
138 | |
139 printf( "template options: " ); | |
140 if ( tmpl->dt_options == 0L ) { | |
141 printf( "NONE\n" ); | |
142 } else { | |
143 printf( "%s %s %s\n", LDAP_IS_DISPTMPL_OPTION_SET( tmpl, | |
144 LDAP_DTMPL_OPT_ADDABLE ) ? "addable" : "", | |
145 LDAP_IS_DISPTMPL_OPTION_SET( tmpl, LDAP_DTMPL_OPT_ALLOWMODRDN ) | |
146 ? "modrdn" : "", | |
147 LDAP_IS_DISPTMPL_OPTION_SET( tmpl, LDAP_DTMPL_OPT_ALTVIEW ) | |
148 ? "altview" : "" ); | |
149 } | |
150 | |
151 printf( "authenticate as attribute: %s\n", tmpl->dt_authattrname != NULL ? | |
152 tmpl->dt_authattrname : "<default>" ); | |
153 | |
154 printf( "default RDN attribute: %s\n", tmpl->dt_defrdnattrname != NULL ? | |
155 tmpl->dt_defrdnattrname : "NONE" ); | |
156 | |
157 printf( "default add location: %s\n", tmpl->dt_defaddlocation != NULL ? | |
158 tmpl->dt_defaddlocation : "NONE" ); | |
159 | |
160 printf( "\nnew entry value default rules:\n" ); | |
161 for ( adp = tmpl->dt_adddeflist; adp != NULL; adp = adp->ad_next ) { | |
162 if ( adp->ad_source == LDAP_ADSRC_CONSTANTVALUE ) { | |
163 printf( " attribute %s <-- constant value \"%s\"\n", | |
164 NULLSTRINGIFNULL( adp->ad_attrname), | |
165 NULLSTRINGIFNULL( adp->ad_value )); | |
166 } else { | |
167 printf( " attribute %s <-- adder's DN\n", | |
168 NULLSTRINGIFNULL( adp->ad_attrname )); | |
169 } | |
170 } | |
171 putchar( '\n' ); | |
172 | |
173 printf( "\nfetch attributes & values:\n" ); | |
174 if (( fetchattrs = ldap_tmplattrs( tmpl, includeattrs, 1, | |
175 LDAP_SYN_OPT_DEFER )) == NULL ) { | |
176 printf( " <none>\n" ); | |
177 } else { | |
178 for ( i = 0; fetchattrs[ i ] != NULL; ++i ) { | |
179 printf( " %s\n", fetchattrs[ i ] ); | |
180 free( fetchattrs[ i ] ); | |
181 } | |
182 free( (char *)fetchattrs ); | |
183 } | |
184 | |
185 printf( "\nfetch attributes only:\n" ); | |
186 if (( fetchattrs = ldap_tmplattrs( tmpl, NULL, 0, | |
187 LDAP_SYN_OPT_DEFER )) == NULL ) { | |
188 printf( " <none>\n" ); | |
189 } else { | |
190 for ( i = 0; fetchattrs[ i ] != NULL; ++i ) { | |
191 printf( " %s\n", fetchattrs[ i ] ); | |
192 free( fetchattrs[ i ] ); | |
193 } | |
194 free( (char *)fetchattrs ); | |
195 } | |
196 | |
197 printf( "\ntemplate items:\n" ); | |
198 rowcnt = 0; | |
199 for ( rowp = ldap_first_tmplrow( tmpl ); rowp != NULLTMPLITEM; | |
200 rowp = ldap_next_tmplrow( tmpl, rowp )) { | |
201 ++rowcnt; | |
202 colcnt = 0; | |
203 for ( colp = ldap_first_tmplcol( tmpl, rowp ); colp != NULLTMPLITEM; | |
204 colp = ldap_next_tmplcol( tmpl, rowp, colp )) { | |
205 ++colcnt; | |
206 printf( " %2d-%d: %s (%s%s", rowcnt, colcnt, | |
207 syn_name[ colp->ti_syntaxid & 0x0000FFFF ], | |
208 syn_type[ LDAP_GET_SYN_TYPE( colp->ti_syntaxid ) >> 24 ], | |
209 (( LDAP_GET_SYN_OPTIONS( colp->ti_syntaxid ) & | |
210 LDAP_SYN_OPT_DEFER ) != 0 ) ? ",defer" : "" ); | |
211 | |
212 for ( i = 0; item_opts[ i ] != NULL; ++i ) { | |
213 if ( LDAP_IS_TMPLITEM_OPTION_SET( colp, item_opt_vals[ i ] )) { | |
214 printf( ",%s", NULLSTRINGIFNULL( item_opts[ i ] )); | |
215 } | |
216 } | |
217 | |
218 printf( "), %s, %s", NULLSTRINGIFNULL( colp->ti_attrname ), | |
219 NULLSTRINGIFNULL( colp->ti_label )); | |
220 if ( colp->ti_args != NULL ) { | |
221 printf( ",args=" ); | |
222 for ( i = 0; colp->ti_args[ i ] != NULL; ++i ) { | |
223 printf( "<%s>", NULLSTRINGIFNULL( colp->ti_args[ i ] )); | |
224 } | |
225 } | |
226 | |
227 putchar( '\n' ); | |
228 } | |
229 } | |
230 } | |
231 | |
232 | |
233 void | |
234 dump_srchpref( struct ldap_searchobj *so ) | |
235 { | |
236 int i; | |
237 struct ldap_searchattr *sa; | |
238 struct ldap_searchmatch *sm; | |
239 | |
240 printf( "Object type prompt: %s\n", | |
241 NULLSTRINGIFNULL( so->so_objtypeprompt )); | |
242 printf( "Options: %s\n", | |
243 LDAP_IS_SEARCHOBJ_OPTION_SET( so, LDAP_SEARCHOBJ_OPT_INTERNAL ) ? | |
244 "internal" : "NONE" ); | |
245 printf( "Prompt: %s\n", NULLSTRINGIFNULL( so->so_prompt )); | |
246 printf( "Scope: " ); | |
247 switch ( so->so_defaultscope ) { | |
248 case LDAP_SCOPE_BASE: | |
249 printf( "LDAP_SCOPE_BASE" ); | |
250 break; | |
251 case LDAP_SCOPE_ONELEVEL: | |
252 printf( "LDAP_SCOPE_ONELEVEL" ); | |
253 break; | |
254 case LDAP_SCOPE_SUBTREE: | |
255 printf( "LDAP_SCOPE_SUBTREE" ); | |
256 break; | |
257 default: | |
258 printf("*** unknown!" ); | |
259 } | |
260 puts( "\n" ); | |
261 printf( "Filter prefix: %s\n", | |
262 NULLSTRINGIFNULL( so->so_filterprefix )); | |
263 printf( "Filter tag: %s\n", | |
264 NULLSTRINGIFNULL( so->so_filtertag )); | |
265 printf( "Default select attr: %s\n", | |
266 NULLSTRINGIFNULL( so->so_defaultselectattr )); | |
267 printf( "Default select text: %s\n", | |
268 NULLSTRINGIFNULL( so->so_defaultselecttext )); | |
269 printf( "Searchable attributes ---- \n" ); | |
270 for ( sa = so->so_salist; sa != NULL; sa = sa->sa_next ) { | |
271 printf( " Label: %s\n", NULLSTRINGIFNULL( sa->sa_attrlabel )); | |
272 printf( " Attribute: %s\n", NULLSTRINGIFNULL( sa->sa_attr )); | |
273 printf( " Select attr: %s\n", NULLSTRINGIFNULL( sa->sa_selectattr )); | |
274 printf( " Select text: %s\n", NULLSTRINGIFNULL( sa->sa_selecttext )); | |
275 printf( " Match types ---- \n" ); | |
276 for ( i = 0, sm = so->so_smlist; sm != NULL; i++, sm = sm->sm_next ) { | |
277 if (( sa->sa_matchtypebitmap >> i ) & 1 ) { | |
278 printf( " %s (%s)\n", | |
279 NULLSTRINGIFNULL( sm->sm_matchprompt ), | |
280 NULLSTRINGIFNULL( sm->sm_filter )); | |
281 } | |
282 } | |
283 } | |
284 } |