3 * Copyright 1998-2000 The OpenLDAP Foundation, All Rights Reserved.
4 * COPYING RESTRICTIONS APPLY, see COPYRIGHT file
7 * Copyright (c) 1992, 1993 Regents of the University of Michigan.
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.
22 #include <ac/stdlib.h>
26 #include <ac/signal.h>
27 #include <ac/string.h>
28 #include <ac/termios.h>
30 #include <ac/unistd.h>
34 #include "ldap_defaults.h"
38 printbase( char *lead, char *s )
45 printf("->printbase(%s, %s)\n", lead, s);
52 printf("%sroot\n", lead);
56 rdns = ldap_explode_dn(s, TRUE);
58 printf("%s", friendly_name(*cp));
67 ldap_value_free(rdns);
72 fetch_buffer( char *buffer, int length, FILE *where )
79 printf("->fetch_buffer(%x, %d, %x)\n", buffer, length, where);
82 * Fetch a buffer and strip off any leading or trailing non-printing
83 * characters, namely newlines and carriage returns.
85 if (fgets(buffer, length, where) == NULL) {
87 errno = 0; /* so fatal() doesn't bitch */
90 for (i = strlen(buffer) - 1;
91 i >= 0 && !isprint((unsigned char) buffer[i]); i--)
95 while ( *p != '\0' ) {
96 if ( isprint( (unsigned char) *p )) {
99 AC_MEMCPY( p, p + 1, strlen( p + 1 ) + 1 );
110 #ifdef LDAP_API_FEATURE_X_OPENLDAP_V2_KBIND
113 exit( EXIT_FAILURE );
125 printf("->isgroup()\n");
127 if ((i = attr_to_index("objectClass")) == -1)
129 vp = Entry.attrs[i].values;
130 for (i = 0; *vp != NULL; vp++) {
133 if (debug & D_GROUPS)
134 printf("class #%1d: (%s)\n", i, *vp);
136 if (!strcmp(*vp, "rfc822MailGroup"))
143 * Print out the string 's' on a field of 'width' chracters. Each line
144 * should be indented 'lead' characters.
147 format( char *str, int width, int lead )
149 char *s, *original, *leader = "";
154 printf("->format(%s, %d, %d)\n", str, width, lead);
157 fprintf(stderr, " Cannot format (%s, %d, %d)\n", str, width, lead);
161 leader = (char *) Malloc((unsigned) (lead + 1));
162 (void) memset(leader, ' ', lead);
163 *(leader + lead) = '\0';
167 * Some compilers get really unhappy with this function since it
168 * fiddles around with the first argument, which could be a string
169 * constant. We do a strdup() here so we can do whatever the hell
172 s = original = strdup(str);
174 if (((int) strlen(s) + lead) < width) {
175 printf("%s%s\n", leader, s);
181 cp = s + width - lead;
182 while (!isspace((unsigned char)*cp) && (cp != s))
185 while (isspace((unsigned char)*s))
187 printf("%s%s\n", leader, s);
193 * Print out the string 's' on a field of 'width' chracters. The first line
194 * should be indented 'first_indent' spaces, then followed by 'first_tag',
195 * and then followed by the first line of 's'. Subsequent lines should be
196 * indented 'indent' spaces, then followed by 'tag', and then followed by
197 * subsequent lines of 's'.
212 if (first_tag == NULL)
218 printf("format2(\"%s\", \"%s\", \"%s\", %1d, %1d, %1d)\n", s,
219 first_tag, tag, first_indent, indent, width);
222 /* make sure the indents are sane */
223 if ((first_indent >= width) || (indent >= width)) {
224 fprintf(stderr, " Cannot format: indent too large\n");
228 /* make the indentations */
229 if (first_indent > 0) {
230 fi = (char *) Malloc((unsigned) (first_indent + 1));
231 (void) memset(fi, ' ', first_indent);
232 *(fi + first_indent) = '\0';
237 i = (char *) Malloc((unsigned) (indent + 1));
238 (void) memset(i, ' ', indent);
239 *(i + indent) = '\0';
244 /* now do the first line */
245 if (((int) strlen(s) + (int) strlen(first_tag) + first_indent) < width) {
246 printf("%s%s%s\n", fi, first_tag, s);
254 * 's' points to the beginning of the string we want to print.
255 * We point 'cp' to the end of the maximum amount of text we
256 * can print (i.e., total width less the indentation and the
257 * length of the tag). Once we have set 'cp' initially we
258 * back it up to the first space character.
260 cp = s + width - first_indent - strlen(first_tag);
261 while (!isspace((unsigned char)*cp) && (cp != s))
265 * Once there, we change that space character to a null, print the
266 * string, and then restore the space character.
270 printf("%s%s%s\n", fi, first_tag, s);
274 * Since 'cp' may have been set to a space initially (and so no
275 * back-tracking was performed), it could have a space after it
276 * as well. We should gobble up all of these since we don't want
277 * unexpected leading blanks.
279 for (s = cp + 1; isspace((unsigned char)*s); s++)
282 /* now do all of the other lines */
284 if (((int) strlen(s) + (int) strlen(tag) + indent) < width) {
285 printf("%s%s%s\n", i, tag, s);
291 cp = s + width - indent - strlen(tag);
292 while (!isspace((unsigned char)*cp) && (cp != s))
296 printf("%s%s%s\n", i, tag, s);
298 *cp = c; /* don't mess up 's' */
303 #define OUT_OF_QUOTE 1
306 strip_ignore_chars( char *cp )
308 int had_a_comma = FALSE;
309 int flag = OUT_OF_QUOTE;
310 register char *rcp, *cp1;
315 printf("strip_ignore_chars(%s)\n", cp);
317 for (rcp = cp; *rcp != '\0'; rcp++)
318 if (isignorechar(*rcp) || (*rcp == '"'))
323 cp1 = tmp = (char *) Malloc((unsigned) strlen(cp));
324 for (rcp = cp; *rcp != '\0'; rcp++) {
325 /* toss quotes and flip the flag */
327 flag = OUT_OF_QUOTE - flag;
328 else if (isignorechar(*rcp)) {
329 if (flag == OUT_OF_QUOTE)
334 else if (*rcp == ',') {
343 /* re-quote the name if it had a comma in it */
344 if (had_a_comma == TRUE) {
345 rcp = cp1 = (char *) Malloc((unsigned) (strlen(tmp) + 3));
360 case LDAP_MOD_ADD : return("ADD");
361 case LDAP_MOD_DELETE : return("DELETE");
362 case LDAP_MOD_REPLACE : return("REPLACE");
363 default : return("?????");
368 friendly_name( char *s )
370 static LDAPFriendlyMap *map = NULL;
373 cp = ldap_friendly_name(FRIENDLYFILE, s, &map);
381 /* return TRUE if s has the syntax of a uniqname */
383 isauniqname( char *s )
387 if ((i < 3) || (i > 8)) /* uniqnames are 3-8 chars */
389 if (!isalpha((unsigned char)*s)) /* uniqnames begin with a letter */
391 for ( ; *s != '\0'; s++) /* uniqnames are alphanumeric */
392 if (!isalnum((unsigned char)*s))
398 /* return TRUE if this attribute should be printed as a DN */
404 for (i = 0; attrlist[i].quipu_name != NULL; i++)
405 if (!strcasecmp(s, attrlist[i].quipu_name))
407 if (attrlist[i].flags & ATTR_FLAG_IS_A_DN)
413 my_ldap_dn2ufn( char *s )
417 static char short_DN[BUFSIZ];
419 if (strstr(s, UD_BASE) == NULL)
420 return(ldap_dn2ufn(s));
421 cpp = ldap_explode_dn(s, TRUE);
422 sprintf(short_DN, "%s, %s", *cpp, *(cpp + 1));
423 ldap_value_free(cpp);
426 return(ldap_dn2ufn(s));
430 /* return TRUE if this attribute should be printed as a URL */
436 for (i = 0; attrlist[i].quipu_name != NULL; i++)
437 if (!strcasecmp(s, attrlist[i].quipu_name))
439 if (attrlist[i].flags & ATTR_FLAG_IS_A_URL)
444 /* return TRUE if this attribute should be printed as a date and time */
450 for (i = 0; attrlist[i].quipu_name != NULL; i++)
451 if (!strcasecmp(s, attrlist[i].quipu_name))
453 if (attrlist[i].flags & ATTR_FLAG_IS_A_DATE)
459 Malloc( unsigned int size )
463 void_ptr = (void *) malloc(size);
464 if (void_ptr == NULL) {
466 exit( EXIT_FAILURE );
481 while (isspace((unsigned char) *s) && (*s != '\0'))
491 free_mod_struct( LDAPMod *modp )
493 if (modp->mod_values != NULL)
494 (void) ldap_value_free(modp->mod_values);
495 Free(modp->mod_type);
500 StrFreeDup( char **ptr, char *new_value )
504 if (new_value == NULL)
507 *ptr = strdup(new_value);
512 confirm_action( char *msg )
514 char tmp[SMALL_BUF_SIZE];
519 format( msg, 75, 2 );
522 printf("\n Is this OK? ");
525 fetch_buffer(tmp, sizeof(tmp), stdin);
528 ( !strncasecmp(tmp, "YES", i) || !strncasecmp(tmp, "OK", i)));