]> git.sur5r.net Git - openldap/blob - clients/ud/ud.h
Some minor bugs for dntest ""
[openldap] / clients / ud / ud.h
1 /* $OpenLDAP$ */
2 /*
3  * Copyright 1998-2000 The OpenLDAP Foundation, All Rights Reserved.
4  * COPYING RESTRICTIONS APPLY, see COPYRIGHT file
5  */
6 /*
7  * Copyright (c) 1991, 1992, 1993 
8  * Regents of the University of Michigan.  All rights reserved.
9  *
10  * Redistribution and use in source and binary forms are permitted
11  * provided that this notice is preserved and that due credit is given
12  * to the University of Michigan at Ann Arbor. The name of the University
13  * may not be used to endorse or promote products derived from this
14  * software without specific prior written permission. This software
15  * is provided ``as is'' without express or implied warranty.
16  */
17
18 #define MAX_VALUES      1000
19
20 /*****************************************************************************
21  **
22  **             Limits which ud imposes.  Also subject to change.
23  **
24  *****************************************************************************/
25  
26 /*
27  *  Names are parsed somewhat like 'awk' parses them.  This is the
28  *  maximum number of components we store away.
29  *
30  *  The isnamesepartor() macro should return TRUE if x is equal to one of the
31  *  characters that delimits name fields.  The ignorechar() macro should
32  *  return TRUE if it is equal to a character that should be ignored when
33  *  parsing names.
34  */
35 #define MAX_NAME_COMPS          8
36 #define isnamesepartor(x)       (isspace((unsigned char) (x)))
37 #define isignorechar(x)         (((x) == '.') || ((x) == '_'))
38
39 /*
40  *  Quite often a search will turn up more than one match.  When it does we
41  *  print out a list of the matches, and ask the user to select the one that
42  *  s/he wants.  This defines how many we will save and show.
43  */
44 #define MAX_NUM_NAMES           128
45
46 /*
47  *  When a user displays a group, we will automatically print out this many
48  *  members and subscribers.  If the number is greater than this, we will
49  *  prompt the user before printing them.
50  */
51 #define TOO_MANY_TO_PRINT       16
52
53 /*
54  *  This is the default size of a tty if we can't figure out the actual size.
55  */
56 #define DEFAULT_TTY_HEIGHT      24
57 #define DEFAULT_TTY_WIDTH       80
58
59 /*
60  *  The number of attributes we know about must be less than this number.
61  *  Don't add lots of attributes to the list in globals.c without checking
62  *  this number too.
63  */
64 #define MAX_ATTRS       64
65
66 /*****************************************************************************
67  **
68  **             No user servicable parts beyond this point.
69  **
70  *****************************************************************************/
71
72 /*
73  *  Generic buffer sizes.
74  */
75 #define SMALL_BUF_SIZE           16
76 #define MED_BUF_SIZE            128
77 #define LARGE_BUF_SIZE          512
78
79 /*
80  *  Used to specify the operation in x_group().
81  */
82 #define G_JOIN          0
83 #define G_RESIGN        1
84
85 /*
86  *  TRUE and FALSE - just in case we need them.
87  */
88 #ifndef TRUE
89 #define TRUE  1
90 #define FALSE 0
91 #endif
92
93 /*
94  *  Bound status.
95  */
96 #define UD_NOT_BOUND    0       /* bound only as the default defined above */
97 #define UD_BOUND        1       /* bound as an actual Directory entity */
98
99 /* 
100  *  Debug masks.
101  */
102 #define D_TRACE         0x0001
103 #define D_FIND          0x0002
104 #define D_GROUPS        0x0004
105 #define D_MODIFY        0x0008
106 #define D_PARSE         0x0010
107 #define D_PRINT         0x0020
108 #define D_AUTHENTICAT   0x0040
109 #define D_INITIALIZE    0x0080
110
111 /*
112  *  Used in the flags field of an attribute structure.
113  */
114 #define ATTR_FLAG_NONE          0x0000
115 #define ATTR_FLAG_PERSON        0x0001
116 #define ATTR_FLAG_GROUP         0x0002
117 #define ATTR_FLAG_PERSON_MOD    0x0010
118 #define ATTR_FLAG_GROUP_MOD     0x0020
119 #define ATTR_FLAG_MAY_EDIT      0x0040
120 #define ATTR_FLAG_SEARCH        0x0100
121 #define ATTR_FLAG_READ          0x0200
122 #define ATTR_FLAG_IS_A_DATE     0x0800
123 #define ATTR_FLAG_IS_A_DN       0x1000
124 #define ATTR_FLAG_IS_A_URL      0x2000
125 #define ATTR_FLAG_IS_A_BOOL     0x4000
126 #define ATTR_FLAG_IS_MULTILINE  0x8000
127
128 LDAP_BEGIN_DECL
129
130 /*
131  *  These are the structures we use when parsing an answer we get from the LDAP
132  *  server.
133  */
134 struct attribute {
135         char *quipu_name;
136         char *output_string;
137         void (*mod_func) LDAP_P(( char *who, int attr_idx ));
138         unsigned short flags;
139         int number_of_values;
140         char **values;
141 };
142
143 struct entry {
144         char may_join;
145         int  subscriber_count;
146         char *DN;
147         char *name;
148         struct attribute attrs[MAX_ATTRS];
149 };
150
151
152
153 /*
154  * Variables
155  */
156
157 /* in globals.c: */
158 extern struct attribute attrlist[];/* complete list of attrs */
159 /* in main.c: */
160 extern char copyright[];
161 extern char *default_bind_object;
162 extern char *bound_dn;
163 extern char *group_base;
164 extern char *search_base;       /* search base */
165 extern int lpp;
166 extern int verbose;             /* verbose mode flag */
167 extern int col_size;
168 extern int bind_status;
169 extern LDAP *ld;                /* our ldap descriptor */
170 extern LDAPFiltDesc *lfdp;      /* LDAP filter descriptor */
171 #ifdef DEBUG
172 extern int debug;               /* debug flag */
173 #endif
174 /* in print.c: */
175 extern struct entry Entry;
176 extern int      dmsize[];
177 /* in version.c: */
178 extern char Version[];
179
180
181 /*
182  * Functions
183  */
184
185 /* in auth.c: */
186 int  auth       LDAP_P(( char *who, int implicit ));
187
188 /* in edit.c: */
189 void edit       LDAP_P(( char *who ));
190
191 /* in find.c: */
192 int  vrfy       LDAP_P(( char *dn ));
193 LDAPMessage *find       LDAP_P(( char *who, int quiet ));
194 int  pick_one   LDAP_P(( int i ));
195 void print_list LDAP_P(( LDAPMessage *list, char **names, int *matches ));
196 int  find_all_subscribers       LDAP_P(( char **sub, char *group ));
197 char *fetch_boolean_value       LDAP_P(( char *who, struct attribute attr ));
198
199 /* in globals.c: */
200
201 /* in group.c: */
202 void add_group  LDAP_P(( char *name ));
203 void remove_group       LDAP_P(( char *name ));
204 void x_group    LDAP_P(( int action, char *name ));
205 void bulk_load  LDAP_P(( char *group ));
206 void purge_group        LDAP_P(( char *group ));
207 void tidy_up    LDAP_P(( void ));
208 void mod_addrDN LDAP_P(( char *group, int offset ));
209 int  my_ldap_modify_s   LDAP_P(( LDAP *ldap, char *group, LDAPMod **mods ));
210 void list_groups        LDAP_P(( char *who ));
211 void list_memberships   LDAP_P(( char *who ));
212
213 /* in help.c: */
214 void print_help LDAP_P(( char *s ));
215
216 /* in main.c: */
217 #ifdef DEBUG
218 #endif
219
220 void do_commands        LDAP_P(( void )) LDAP_GCCATTR((noreturn));
221 void status     LDAP_P(( void ));
222 void change_base        LDAP_P(( int type, char **base, char *s ));
223 void initialize_client  LDAP_P(( void ));
224 RETSIGTYPE  attn        LDAP_P(( int sig ));
225 #if !defined(NO_TERMCAP) && defined(TIOCGWINSZ)
226 RETSIGTYPE  chwinsz     LDAP_P(( int sig ));
227 #endif
228
229 /* in mod.c: */
230 void modify     LDAP_P(( char *who ));
231 void change_field       LDAP_P(( char *who, int attr_idx ));
232 char *get_value LDAP_P(( char *id, char *prompt ));
233 void set_boolean        LDAP_P(( char *who, int attr_idx ));
234 #ifdef UOFM
235 void set_updates        LDAP_P(( char *who, int dummy ));
236 #endif
237 void print_mod_list     LDAP_P(( int group ));
238 int  perform_action     LDAP_P(( char *choice, char *dn, int group ));
239 void mod_perror LDAP_P(( LDAP *ld ));
240
241 /* in print.c: */
242 void parse_answer       LDAP_P(( LDAPMessage *s ));
243 void add_value  LDAP_P(( struct attribute *attr, LDAPMessage *ep, char *ap ));
244 void print_an_entry     LDAP_P(( void ));
245 void print_values       LDAP_P(( struct attribute A ));
246 void print_DN   LDAP_P(( struct attribute A ));
247 void clear_entry        LDAP_P(( void ));
248 int  attr_to_index      LDAP_P(( char *s ));
249 void initialize_attribute_strings       LDAP_P(( void ));
250 void print_URL  LDAP_P(( struct attribute A ));
251 void print_one_URL      LDAP_P(( char *s, int l_lead, char *tag, int u_lead ));
252
253 /* in util.c: */
254 void printbase  LDAP_P(( char *lead, char *s ));
255 void fetch_buffer       LDAP_P(( char *buffer, int length, FILE *where ));
256 void fatal      LDAP_P(( char *s )) LDAP_GCCATTR((noreturn));
257 int  isgroup    LDAP_P(( void ));
258 void format     LDAP_P(( char *str, int width, int lead ));
259 void format2    LDAP_P(( char *s, char *ft, char *t, int fi, int i, int w ));
260 char *strip_ignore_chars        LDAP_P(( char *cp ));
261 char *code_to_str       LDAP_P(( int i ));
262 char *friendly_name     LDAP_P(( char *s ));
263 #ifdef UOFM
264 int  isauniqname        LDAP_P(( char *s ));
265 #endif
266 int  isadn      LDAP_P(( char *s ));
267 char *my_ldap_dn2ufn    LDAP_P(( char *s ));
268 int  isaurl     LDAP_P(( char *s ));
269 int  isadate    LDAP_P(( char *s ));
270 void *Malloc    LDAP_P(( unsigned int size ));
271 void Free       LDAP_P(( void *ptr ));
272 char *nextstr   LDAP_P(( char *s ));
273 void free_mod_struct    LDAP_P(( LDAPMod *modp ));
274 void StrFreeDup LDAP_P(( char **ptr, char *new_value ));
275 int  confirm_action     LDAP_P(( char *msg ));
276
277 LDAP_END_DECL