From 5e7336fcf1d43cd980857496273613f490bbd18b Mon Sep 17 00:00:00 2001 From: Kurt Zeilenga Date: Sat, 13 Oct 2001 01:25:09 +0000 Subject: [PATCH] Move saucer to the Attic. Has not been updated to support LDAPv3. --- configure.in | 2 - contrib/Makefile.in | 7 - contrib/README | 6 - contrib/saucer/Makefile.in | 23 - contrib/saucer/README | 49 --- contrib/saucer/main.c | 752 --------------------------------- contrib/saucer/sample.saucerrc | 2 - contrib/saucer/saucer.1 | 186 -------- 8 files changed, 1027 deletions(-) delete mode 100644 contrib/Makefile.in delete mode 100644 contrib/saucer/Makefile.in delete mode 100644 contrib/saucer/README delete mode 100644 contrib/saucer/main.c delete mode 100644 contrib/saucer/sample.saucerrc delete mode 100644 contrib/saucer/saucer.1 diff --git a/configure.in b/configure.in index 45a25be9e7..db4b6ea9f1 100644 --- a/configure.in +++ b/configure.in @@ -2657,8 +2657,6 @@ servers/slapd/tools/Makefile:build/top.mk:servers/slapd/tools/Makefile.in \ servers/slurpd/Makefile:build/top.mk:servers/slurpd/Makefile.in:build/srv.mk \ tests/Makefile:build/top.mk:tests/Makefile.in:build/dir.mk \ tests/progs/Makefile:build/top.mk:tests/progs/Makefile.in:build/rules.mk \ -contrib/Makefile:build/top.mk:contrib/Makefile.in:build/dir.mk \ -contrib/saucer/Makefile:build/top.mk:contrib/saucer/Makefile.in:build/rules.mk \ ,[ date > stamp-h echo Please \"make depend\" to build dependencies diff --git a/contrib/Makefile.in b/contrib/Makefile.in deleted file mode 100644 index 74b14db7d4..0000000000 --- a/contrib/Makefile.in +++ /dev/null @@ -1,7 +0,0 @@ -# $OpenLDAP$ -## Copyright 1998-2000 The OpenLDAP Foundation, All Rights Reserved. -## COPYING RESTRICTIONS APPLY, See COPYRIGHT file -## -## contrib Makefile.in for OpenLDAP - -SUBDIRS= saucer web_ldap diff --git a/contrib/README b/contrib/README index 308f4208ae..431d2690cd 100644 --- a/contrib/README +++ b/contrib/README @@ -14,12 +14,6 @@ Current contributions: ldaptcl TCL API from NeoSoft - saucer - General purpose command-line LDAP client, modeled - after ISODE's DISH (DIrectory SHell) client. - Contributed by Eric Rosenquist. See saucer/README - and its man page for more information. - Please submit your contributions using the OpenLDAP Issue Tracking System . diff --git a/contrib/saucer/Makefile.in b/contrib/saucer/Makefile.in deleted file mode 100644 index ca810b5672..0000000000 --- a/contrib/saucer/Makefile.in +++ /dev/null @@ -1,23 +0,0 @@ -PROGRAMS= saucer - -SRCS= main.c -OBJS= main.o - -LDAP_INCDIR= ../../include -LDAP_LIBDIR= ../../libraries - -READLINE_LIBS = @READLINE_LIBS@ - -XLIBS = -lldap -llber -llutil -XXLIBS = $(SECURITY_LIBS) $(LUTIL_LIBS) $(READLINE_LIBS) $(TERMCAP_LIBS) - -MANDIR=$(mandir)/man1 - -saucer: ${OBJS} $(LDAP_LIBDEPEND) - $(LTLINK) -o $@ $(OBJS) $(LIBS) - -install-local: $(PROGRAMS) FORCE - -$(MKDIR) $(DESTDIR)$(bindir) - $(LTINSTALL) $(INSTALLFLAGS) -m 755 saucer $(DESTDIR)$(bindir) - -$(MKDIR) $(DESTDIR)$(MANDIR) - $(INSTALL) $(INSTALLFLAGS) -m 644 $(srcdir)/saucer.1 $(DESTDIR)$(MANDIR)/saucer.1 diff --git a/contrib/saucer/README b/contrib/saucer/README deleted file mode 100644 index bb9f438db2..0000000000 --- a/contrib/saucer/README +++ /dev/null @@ -1,49 +0,0 @@ -This directory contains a set of files that build a simple LDAP client -program. The program is command-line oriented and uses a syntax and -command set roughly similar to ISODE's DISH program, hence it is -named "saucer" (i.e. a very small "dish" :-) - -To build saucer, you must first build OpenLDAP, and then say - cd contrib/saucer - make depend - make -You can then install it by doing an "su" and typing "make install". -This will copy the binary to the directory you specified for LDAP -binaries, and the man page will be placed in the appropriate man -directory. - -If you wish saucer to use GNU Readline, you must have set CPPFLAGS and -LDFLAGS so that and -lreadline will be found when -you configured OpenLDAP, e.g. - env CPPFLAGS="-I/usr/gnu/include" LDFLAGS="-L/usr/gnu/lib" ./configure - - -Saucer runs from the Unix command line with the following arguments: - - saucer [-h host] [-p portnumber] [-u 'X500UserName'] - [-c credentials] [-d debug-level] - -If no options are given, saucer will attempt to connect to an LDAP -daemon on the local host and default port (389), and will attempt to -bind anonymously. - -Typing "help" at saucer's command prompt will yield: - -saucer dn=> help -Supported commands are: - help - list - moveto - quit - search - set - show - -You can get syntactical help for a command by typing "help ". -Detailed instructions are available from the saucer man page. - -Any comments or questions should be directed to: - - Eric.Rosenquist@strataware.com - -or to an OpenLDAP mailinglist, see . diff --git a/contrib/saucer/main.c b/contrib/saucer/main.c deleted file mode 100644 index f736a70a21..0000000000 --- a/contrib/saucer/main.c +++ /dev/null @@ -1,752 +0,0 @@ -/* - * Copyright (c) 1994, Strata Software Limited, Ottawa, Ontario, Canada. - * All rights reserved. - * - * Redistribution and use in source and binary forms are permitted - * provided that this notice is preserved and that due credit is given - * to Eric Rosenquist and Strata Software Limited. The SSL name - * may not be used to endorse or promote products derived from this - * software without specific prior written permission. This software - * is provided "as is" without express or implied warranty. - * - * - * 'saucer' LDAP command-line client source code. - * - * Author: Eric Rosenquist, 1994. - * - * 07-Mar-1999 readline support added: O. Steffensen (oddbjorn@tricknology.org) - */ - -#include "portable.h" - -#include - -#include - -#ifdef HAVE_READLINE -# include -# ifdef HAVE_READLINE_HISTORY_H -# include -# endif -#endif - -#include -#include -#include - -#include -#include -#include - -#define DN_MAXLEN 4096 - -typedef struct { - const char *cmd; - int (*func) (char **, int); - const char *help_msg; -} CMDTABLE; - -typedef enum { - CMD_HELP, - CMD_LIST, - CMD_MOVETO, - CMD_QUIT, - CMD_SEARCH, - CMD_SET, - CMD_SHOW -} COMMAND; - -char *attrs_null[] = { "0.10", NULL }; -char *credentials; -char default_dn[DN_MAXLEN]; -char *hostname = "127.0.0.1"; -LDAP *ld; -extern char *optarg; -extern int opterr; -extern int optind; -int option; -int portnum = LDAP_PORT; -char *progname; -char true_filter[] = "(objectClass=*)"; /* Always succeeds */ -char *username; - -int cmd_help(char **cmdargv, int cmdargc); -int cmd_list(char **cmdargv, int cmdargc); -int cmd_moveto(char **cmdargv, int cmdargc); -int cmd_quit(char **cmdargv, int cmdargc); -int cmd_search(char **cmdargv, int cmdargc); -int cmd_set(char **cmdargv, int cmdargc); -int cmd_show(char **cmdargv, int cmdargc); - -int bind_user(void); -void display_search_results(LDAPMessage *result); -int do_command(char *cmd); -void do_commands(FILE *file); -int is_whitespace(register char *s); -char *make_dn(char *dn, int relative); -void show_syntax(unsigned int cmdnum); -char *skip_to_char(register char *s, register int c); -char *skip_to_whitespace(register char *s); -char *skip_whitespace(register char *s); -int table_lookup(const char *, const char *const *, int); -FILE *user_tailor(void); - -static const char *const binary_attrs[] = { - "audio", "jpegPhoto", "personalSignature", "photo" -}; - -const CMDTABLE cmdtable[] = { - "help" , cmd_help , "[command]", - "list" , cmd_list , "[RDN-or-DN] [-absolute]", - "moveto", cmd_moveto, "[RDN-or-DN] [-absolute]", - "quit" , cmd_quit , "", - "search", cmd_search, " [-object RDN-or-DN] [-absolute]\n\t\t[-scope base|onelevel|subtree]", - "set" , cmd_set , "[-aliasderef never|search|find|always] [-sizelimit N] [-timelimit seconds]", - "show" , cmd_show , "[RDN-or-DN] [-absolute]" -}; - - -int bind_user(void) -{ - if (ldap_simple_bind_s(ld, username, credentials) != LDAP_SUCCESS) { - ldap_perror(ld, progname); - return 0; - } - if (username) - printf("Bound to ldap server as `%s' (%s authentication)\n", username, - credentials ? "simple" : "no"); - else - puts("Bound anonymously to ldap server"); - - return 1; -} - -int cmd_help(char **cmdargv, int cmdargc) -{ - unsigned int i; - - if (cmdargc == 2) { - for (i = 0; i < sizeof(cmdtable) / sizeof(cmdtable[0]); i++) - if (strncasecmp(cmdargv[1], cmdtable[i].cmd, strlen(cmdargv[1])) == 0) { - show_syntax(i); - return 0; - } - cmdargc = 1; /* Command not found - make it display the list of commands */ - } - - if (cmdargc == 1) { - puts("\nType 'help ' for help on a particular command.\n\n" - "Supported commands are:"); - for (i = 0; i < sizeof(cmdtable) / sizeof(cmdtable[0]); i++) - printf(" %s\n", cmdtable[i].cmd); - puts("\nArguments to commands are separated by whitespace. Single (')\n" - "or double (\") quotes must be used around arguments that contain\n" - "embedded whitespace characters.\n"); - } else - show_syntax(CMD_HELP); - - return 0; -} - -int cmd_list(char **cmdargv, int cmdargc) -{ - char *dn = NULL; - int errflag = 0; - int i; - static const char *const opts[] = { "absolute" }; - int relative = 1; - LDAPMessage *result; - - for (i = 1; i < cmdargc; i++) { - if (cmdargv[i][0] == '-') { - switch (table_lookup(cmdargv[i] + 1, opts, sizeof(opts) / sizeof(opts[0]))) { - case 0: - relative = 0; - break; - default: - errflag = 1; - } - } else { - if (dn) - errflag = 1; - else - dn = cmdargv[i]; - } - } - - if (errflag) { - show_syntax(CMD_LIST); - return 0; - } - - if (ldap_search(ld, make_dn(dn, relative), LDAP_SCOPE_ONELEVEL, - true_filter, attrs_null, 1) == -1) { - ldap_perror(ld, progname); - return 0; - } - - if (ldap_result(ld, LDAP_RES_ANY, 1, (struct timeval *)0, &result) == -1) { - ldap_perror(ld, progname); - return 0; - } - - display_search_results(result); - - return 0; -} - -int cmd_moveto(char **cmdargv, int cmdargc) -{ - char *dn = NULL; - int errflag = 0; - char **exploded_dn; - int i; - static const char *const opts[] = { "absolute" }; - int relative = 1; - - for (i = 1; i < cmdargc; i++) { - if (cmdargv[i][0] == '-') { - switch (table_lookup(cmdargv[i] + 1, opts, sizeof(opts) / sizeof(opts[0]))) { - case 0: - relative = 0; - break; - default: - errflag = 1; - } - } else { - if (dn) - errflag = 1; - else - dn = cmdargv[i]; - } - } - - if (errflag) { - show_syntax(CMD_MOVETO); - return 0; - } - - if (dn) { - if (is_whitespace(dn)) - default_dn[0] = 0; - else { - if (strcmp(dn, "..") == 0) { - /* Move up one level */ - if (exploded_dn = ldap_explode_dn(default_dn, 0)) { - if (exploded_dn[0]) { - char **rdn; - - default_dn[0] = 0; - for (rdn = exploded_dn + 1; *rdn; rdn++) { - if (default_dn[0]) - strcat(default_dn, ", "); - strcat(default_dn, *rdn); - } - } - ldap_value_free(exploded_dn); - } - } else { - /* Use ldap_explode_dn() to parse the string & test its syntax */ - if (exploded_dn = ldap_explode_dn(dn, 1)) { - if (relative && !is_whitespace(default_dn)) { - char buf[DN_MAXLEN]; - - strcpy(default_dn, strcat(strcat(strcpy(buf, dn), ", "), default_dn)); - } else - strcpy(default_dn, dn); - ldap_value_free(exploded_dn); - } else - puts("Invalid distinguished name."); - } - } - } - - printf("Distinguished name suffix is `%s'\n", default_dn); - - return 0; -} - -int cmd_quit(char **cmdargv, int cmdargc) -{ - return 1; -} - -int cmd_search(char **cmdargv, int cmdargc) -{ - char *dn = NULL; - int errflag = 0; - char *filter = NULL; - int i, j; - static const char *const opts[] = { "absolute", "object", "scope" }; - int relative = 1; - LDAPMessage *result; - static const char *const scope_opts[]= { "base","onelevel","subtree" }; - static const int scope_vals[] = { LDAP_SCOPE_BASE, LDAP_SCOPE_ONELEVEL, LDAP_SCOPE_SUBTREE }; - static int search_scope = LDAP_SCOPE_ONELEVEL; - - for (i = 1; i < cmdargc; i++) { - if (cmdargv[i][0] == '-') { - switch (table_lookup(cmdargv[i] + 1, opts, sizeof(opts) / sizeof(opts[0]))) { - case 0: - relative = 0; - break; - case 1: - if (++i < cmdargc) - dn = cmdargv[i]; - else - errflag = 1; - break; - case 2: - if ((++i < cmdargc) && - (j = table_lookup(cmdargv[i], scope_opts, sizeof(scope_opts) / sizeof(scope_opts[0]))) >= 0) - search_scope = scope_vals[j]; - else - errflag = 1; - break; - default: - errflag = 1; - } - } else { - if (filter) - errflag = 1; - else - filter = cmdargv[i]; - } - } - - if (errflag || !filter) { - show_syntax(CMD_SEARCH); - return 0; - } - - if (ldap_search(ld, make_dn(dn, relative), search_scope, filter, attrs_null, 0) == -1) { - ldap_perror(ld, progname); - return 0; - } - - if (ldap_result(ld, LDAP_RES_ANY, 1, (struct timeval *)0, &result) == -1) { - ldap_perror(ld, progname); - return 0; - } - - display_search_results(result); - - return 0; -} - -int cmd_set(char **cmdargv, int cmdargc) -{ - static const char *const alias_opts[] = { - "never", "search", "find", "always" - }; - int errflag = 0; - int i, j; - static const char *const opts[] = { - "aliasderef", "sizelimit", "timelimit" - }; - - for (i = 1; i < cmdargc; i++) { - if (cmdargv[i][0] == '-') { - switch (table_lookup(cmdargv[i] + 1, opts, sizeof(opts) / sizeof(opts[0]))) { - case 0: - if ((++i < cmdargc) && - (j = table_lookup(cmdargv[i], alias_opts, sizeof(alias_opts) / sizeof(alias_opts[0]))) >= 0) - ldap_set_option(ld, LDAP_OPT_DEREF, &j); - else - errflag = 1; - break; - case 1: - if (++i < cmdargc) { - j = atoi(cmdargv[i]); - ldap_set_option(ld, LDAP_OPT_SIZELIMIT, &j); - } else - errflag = 1; - break; - case 2: - if (++i < cmdargc) { - j = atoi(cmdargv[i]); - ldap_set_option(ld, LDAP_OPT_TIMELIMIT, &j); - } else - errflag = 1; - break; - default: - errflag = 1; - } - } else - errflag = 1; - } - - if (errflag) - show_syntax(CMD_SET); - else { - int opt_a, opt_s, opt_t; - ldap_get_option(ld, LDAP_OPT_DEREF, &opt_a); - ldap_get_option(ld, LDAP_OPT_SIZELIMIT, &opt_s); - ldap_get_option(ld, LDAP_OPT_TIMELIMIT, &opt_t); - printf("Alias dereferencing is %s, Sizelimit is %d entr%s, Timelimit is %d second%s.\n", - alias_opts[opt_a], - opt_s, opt_s == 1 ? "y" : "ies", - opt_t, opt_t == 1 ? "" : "s"); - } - - return 0; -} - -int cmd_show(char **cmdargv, int cmdargc) -{ - char *dn = NULL; - int errflag = 0; - int i; - static const char *const opts[] = { "absolute" }; - int relative = 1; - LDAPMessage *result; - - for (i = 1; i < cmdargc; i++) { - if (cmdargv[i][0] == '-') { - switch (table_lookup(cmdargv[i] + 1, opts, sizeof(opts) / sizeof(opts[0]))) { - case 0: - relative = 0; - break; - default: - errflag = 1; - } - } else { - if (dn) - errflag = 1; - else - dn = cmdargv[i]; - } - } - - if (errflag) { - show_syntax(CMD_SHOW); - return 0; - } - - if (ldap_search(ld, make_dn(dn, relative), LDAP_SCOPE_BASE, true_filter, NULL, 0) == -1) { - ldap_perror(ld, progname); - return 0; - } - - if (ldap_result(ld, LDAP_RES_ANY, 1, (struct timeval *)0, &result) == -1) { - ldap_perror(ld, progname); - return 0; - } - - display_search_results(result); - - return 0; -} - -void display_search_results(LDAPMessage *result) -{ - BerElement *cookie; - int i; - LDAPMessage *entry; - int maxname; - char *s; - - for (entry = ldap_first_entry(ld, result); entry; entry = ldap_next_entry(ld, entry)) { - if (s = ldap_get_dn(ld, entry)) { - printf(" %s\n", s); - ldap_memfree(s); - } - - /* Make one pass to calculate the length of the longest attribute name */ - maxname = 0; - for (s = ldap_first_attribute(ld, entry, &cookie); s; s = ldap_next_attribute(ld, entry, cookie)) - if ((i = strlen(s)) > maxname) - maxname = i; - - /* Now print the attributes and values */ - for (s = ldap_first_attribute(ld, entry, &cookie); s; s = ldap_next_attribute(ld, entry, cookie)) { - char **values; - - if (table_lookup(s, binary_attrs, sizeof(binary_attrs) / sizeof(binary_attrs[0])) >= 0) - continue; /* Skip this attribute - it's binary */ - - printf(" %-*s - ", maxname, s); - - /* Now print each of the values for the given attribute */ - if (values = ldap_get_values(ld, entry, s)) { - char **val; - - for (val = values; *val; ) { - char *nl; - char *v = *val; - - /* Watch out for values that have embedded \n characters */ - while (nl = strchr(v, '\n')) { - *nl = 0; - puts(v); - v = nl + 1; - if (*v) - printf(" %*s", maxname + 3, ""); - } - if (*v) - puts(v); - if (*++val) - printf(" %*s", maxname + 3, ""); - } - ldap_value_free(values); - } else - putchar('\n'); - } - } - - if (ldap_result2error(ld, result, 0)) - ldap_perror(ld, progname); -} - -int do_command(char *cmd) -{ - char *cmdargv[128]; - int cmdargc = 0; - int i; - - /* Tokenize the input command, allowing for quoting */ - for (;;) { - cmd = skip_whitespace(cmd); - if (!cmd || !*cmd) - break; /* end of input */ - - cmdargv[cmdargc++] = cmd; - if (*cmd == '\'' || *cmd == '"') { - cmdargv[cmdargc - 1]++; /* Skip over the opening quote */ - cmd = skip_to_char(cmd + 1, *cmd); - if (!cmd || !*cmd) { - puts("Command is missing a trailing quote"); - return 0; - } - *cmd++ = 0; - } else { - cmd = skip_to_whitespace(cmd); - if (cmd && *cmd) - *cmd++ = 0; - } - } - -#ifdef DEBUG - printf("cmdargc = %d\n", cmdargc); - for (i = 0; i < cmdargc; i++) - puts(cmdargv[i]); -#endif - - if (cmdargv[0][0] == '?') - return cmd_help(cmdargv, cmdargc); - - for (i = 0; i < sizeof(cmdtable) / sizeof(cmdtable[0]); i++) - if (strncasecmp(cmdargv[0], cmdtable[i].cmd, strlen(cmdargv[0])) == 0) - return (*cmdtable[i].func)(cmdargv, cmdargc); - - if (!is_whitespace(cmdargv[0])) { - printf("Unrecognized command - %s\n", cmdargv[0]); - cmd_help(cmdargv, 1); - } - - return 0; -} - -void do_commands(FILE *file) -{ - char cmd_buf[BUFSIZ]; - int tty = isatty(fileno(file)); - char *buf = cmd_buf; - int status; - - for (;;) { - if (tty) - { - char prompt[40]; - sprintf(prompt, (strlen(default_dn) < 18 - ? "saucer dn=%s> " - : "saucer dn=%.15s..> "), default_dn); -#ifndef HAVE_READLINE - fputs (prompt, stdout); -#else - buf = readline (prompt); - if (!buf) - break; - add_history (buf); -#endif - } -#ifdef HAVE_READLINE - else -#endif - { - if (!fgets(cmd_buf, sizeof(cmd_buf), file)) - break; - } - - status = do_command(buf); -#ifdef HAVE_READLINE - if (tty) - free(buf); -#endif - if (status) - break; - } -} - -int is_whitespace(register char *s) -{ - if (!s) - return 1; - - while (*s && isspace((unsigned char) *s)) - ++s; - - return !*s; -} - -int main(int argc, char **argv) -{ - int error_flag = 0; - int tmp; - FILE *rc; - - progname = argv[0]; - while ((option = getopt(argc, argv, "h:p:u:c:d:")) != EOF) - switch (option) { - case 'c': - credentials = optarg; - break; - case 'd': -#ifdef LDAP_DEBUG - tmp = atoi(optarg); - ber_set_option(NULL, LBER_OPT_DEBUG_LEVEL, &tmp); - ldap_set_option(NULL, LDAP_OPT_DEBUG_LEVEL, &tmp); -#endif - break; - case 'h': - hostname = optarg; - break; - case 'p': - portnum = atoi(optarg); - break; - case 'u': - username = optarg; - break; - case '?': - error_flag = 1; - } - - if (error_flag) { - fprintf(stderr, "usage: %s [-h host] [-p portnumber] [-u X500UserName]\n\t[-c credentials] [-d debug-level]\n", - progname); - exit( EXIT_FAILURE ); - } - - rc = user_tailor(); - - if (!(ld = ldap_init(hostname, portnum))) { - fprintf(stderr, "%s: unable to initialize LDAP session (%s:%d)\n", - progname, hostname, portnum); - exit( EXIT_FAILURE ); - } - - if (!bind_user()) - return 1; - - if (rc) { - do_commands(rc); - fclose(rc); - } - do_commands(stdin); - - ldap_unbind(ld); - - return 0; -} - -char *make_dn(char *dn, int relative) -{ - static char dn_buf[DN_MAXLEN]; - - if (!dn) - dn = ""; - - if (!default_dn[0] || !relative) - return dn; - - if (!dn[0]) - return default_dn; - - return strcat(strcat(strcpy(dn_buf, dn), ", "), default_dn); -} - -void show_syntax(unsigned int cmdnum) -{ - printf("Syntax: %s %s\n", cmdtable[cmdnum].cmd, cmdtable[cmdnum].help_msg); -} - -char *skip_to_char(register char *s, register int c) -{ - if (!s) - return s; - - while (*s && *s != c) - ++s; - - return s; -} - -char *skip_to_whitespace(register char *s) -{ - if (!s) - return s; - - while (*s && !isspace((unsigned char) *s)) - ++s; - - return s; -} - -char *skip_whitespace(register char *s) -{ - if (!s) - return s; - - while (*s && isspace((unsigned char) *s)) - ++s; - - return s; -} - -int table_lookup(const char *word, const char *const *table, int table_count) -{ - register int i; - int wordlen; - - if (!word || !*word) - return -1; - - wordlen = strlen(word); - - for (i = 0; i < table_count; i++) - if (strncasecmp(word, table[i], wordlen) == 0) - return i; - return -1; -} - -FILE *user_tailor(void) -{ - char rcfile[BUFSIZ]; - - rcfile[0] = 0; - -#ifdef unix - { -#include - struct passwd *pwent; - - if (pwent = getpwuid(getuid())) - strcat(strcpy(rcfile, pwent->pw_dir), "/"); - strcat(rcfile, ".saucerrc"); - } -#else - strcpy(rcfile, "saucer.rc"); -#endif - - return fopen(rcfile, "r"); -} diff --git a/contrib/saucer/sample.saucerrc b/contrib/saucer/sample.saucerrc deleted file mode 100644 index b3d2e47623..0000000000 --- a/contrib/saucer/sample.saucerrc +++ /dev/null @@ -1,2 +0,0 @@ -set -aliasderef always -sizelimit 25 -timelimit 30 -moveto "o=Enterprise Solutions Limited, c=CA" diff --git a/contrib/saucer/saucer.1 b/contrib/saucer/saucer.1 deleted file mode 100644 index 5a5dde103c..0000000000 --- a/contrib/saucer/saucer.1 +++ /dev/null @@ -1,186 +0,0 @@ -.TH SAUCER 1 "March 1999" "OpenLDAP" -.UC 6 -.SH NAME -saucer \- interactive X.500 Directory client program -.SH SYNOPSIS -\fBsaucer\fR [-h \fIhost\fR] [-p \fIportnumber\fR] [-u \fIX500UserName\fR] -[-c \fIcredentials\fR] [-d \fIdebug-level\fR] -.SH DESCRIPTION -\fIsaucer\fR is used to navigate and perform searches on an X.500 -Directory via the Lightweight Directory Access Protocol (LDAP). -.SH OPTIONS -.TP 5 -.B \-h hostname -Used to specify the name or IP number of an LDAP host to which saucer -should connect. If this flag is omitted, \fI127.0.0.1\fR is used. -.TP 5 -.B \-p portnumber -Used to specify the TCP port number of the LDAP daemon on the server -host. If this flag is omitted, the LDAP default port number -(\fI389\fR) is used. -.TP 5 -.B \-u X500UserName -Specifies the X.500 name to be used when binding to the directory -server. It must be in the form specified by RFC 1485, for example: - -\fB"cn=George Castanza, o=Vandelay Industries, c=US"\fR - -Don't forget to put quotes around the name if it contains blanks. -.TP 5 -.B \-c credentials -Specifies the credentials, i.e. the password, to be used when binding -to the directory server. If this flag is omitted but a name is given -with the \fB-u\fR flag, an unauthenticated bind will be attempted. If -neither flag is given, an anonymous bind will be attempted. -.TP 5 -.B \-d debug-level -Sets the LDAP debug mask to the numeric value specified. This flag is -only used if saucer was compiled with the LDAP_DEBUG flag. -.SH COMMANDS -\fIsaucer\fR commands consist of a keyword followed by zero or more -arguments. Commands and arguments can be shortened to any number of -characters; the entered text is matched against the available keywords -in ascending alphabetical order. For example, entering the command -\fB"s"\fR will be interpreted by \fIsaucer\fR as the \fBsearch\fR -command, and \fB"sh"\fR will be interpreted as the \fBshow\fR command. -The \fBset\fR command cannot be abbreviated since both \fB"s"\fR and -\fB"se"\fR will be interpreted as the \fBsearch\fR command. - -Arguments to commands are separated by whitespace (blanks or tabs), so -any values that contain whitespace (such as X.500 names) need to be -enclosed in single or double quotes. - -Arguments can be entered in any order. If the same argument appears -more than once in a command, the last value is used and the others are -ignored. - -Directory names are by default assumed to be relative to the -\fIcurrent location\fR, which is set with the \fBmoveto\fR command. -All commands that accept a directory name have an optional -\fI-absolute\fR flag which causes \fIsaucer\fR to interpret the name -as a complete X.500 name rather than one that is relative to the -current location. -.SS "help [command]" -Provides brief online help giving the available commands and their syntax. - -If \fIcommand\fR is specified, the syntax for the command is shown. -``help'' by itself simply provides a list of the available commands. -.SS "list [RDN/DN] [-absolute]" -Displays the names of a directory node's subordinates. - -If an \fIRDN/DN\fR is given, it specifies the entry whose subordinates -are to be listed. In its absence, the current location (see the -\fBmoveto\fR command) is used. The \fI-absolute\fR argument controls -whether the \fIRDN/DN\fR is a complete directory name or is relative -to the current location. -.SS "moveto [RDN/DN] [-absolute]" -Displays or modifies \fIsaucer\fR's \fIcurrent location\fR in the -directory. Without arguments, the current location is displayed. -If an \fIRDN/DN\fR is given, the current location is modified -and the new value is displayed. - -The \fI-absolute\fR flag causes \fIsaucer\fR to treat the entered -\fIRDN/DN\fR as a complete directory name and to use it as the -new current location. Without the \fI-absolute\fR flag, the -name is assumed to be relative to the previous location. - -The special value \fB".."\fR is recognized by \fIsaucer\fR as a -valid name and causes the current location to be moved one level -up (towards the root) in the directory. -.SS quit -Unbinds from the directory and exits \fIsaucer\fR. -.SS "search [-object RDN/DN] [-absolute] [-scope ]" -Searches the directory for entries which match the \fI\fR -expression. For more information on the syntax of the \fI\fR -argument, see "RFC 1588 - A String Representation of LDAP Search -Filters". - -If the \fI-object\fR argument is used, it specifies the base of the -directory search. In its absence, the current location (see the -\fBmoveto\fR command) is used as the search base. The \fI-absolute\fR -argument controls whether the \fIRDN/DN\fR given with the -\fI-object\fR flag is a complete directory name or is relative to the -current location. - -The \fI-scope\fR argument controls the depth of the search. It -accepts one of the keywords \fIbase\fR, \fIonelevel\fR, or -\fIsubtree\fR to search within the base object, its immediate -children, or all of its subordinates respectively. The search depth -is preserved across commands, so subsequent searches will use the -previously entered depth setting if a new one is not given. -\fISaucer\fR defaults to a \fIonelevel\fR search depth at startup. -.SS "set [-aliasderef ] [-sizelimit N] [-timelimit seconds]" -Displays or modifies settings which apply to all directory operations -issued by \fIsaucer\fR. Without arguments, the current settings are -displayed. If options are given, the settings are changed and the new -values are displayed. - -The \fI-aliasderef \fR argument controls how the directory -handles alias entries that it encounters. The value of \fI\fR -must be one of \fInever\fR, \fIsearch\fR, \fIfind\fR, or \fIalways\fR. - -A value of \fInever\fR tells the directory not to follow through any -aliases it encounters. - -A value of \fIfind\fR tells the directory to follow through an alias -if it occurs as the base of a \fBlist\fR, \fBsearch\fR, or \fBshow\fR -command. - -A value of \fIsearch\fR tells the directory to follow through an alias -when performing a \fBsearch\fR command. In other words, when -performing a search, the attributes of the entry an alias points to -will be tested against the filter expression rather than the alias -itself. - -A value of \fIalways\fR combines the meanings of the \fIfind\fR and -\fIsearch\fR values, i.e., aliases are always dereferenced before -being acted upon. - -The \fI-sizelimit N\fR argument sets the maximum number of entries -that will be returned by directory for \fBlist\fR and \fBsearch\fR -commands to \fIN\fR. The directory server itself may impose a limit, -in which case the lesser of the two limits is used. A value of -\fI0\fR may be used to request as many entries as possible. - -The \fI-timelimit seconds\fR argument sets the maximum amount of time -allowed for a \fBlist\fR, \fBsearch\fR, or \fBshow\fR command. Note -that this value is simply passed to the directory server, so the -enforcement of the time limit is up to the server. A value of \fI0\fR -may be used to request no time limit. -.SS "show [RDN/DN] [-absolute]" -Displays the attributes of a directory entry. - -If an \fIRDN/DN\fR is given, it specifies the entry whose attributes -are to be shown. In its absence, the current location (see the -\fBmoveto\fR command) is used. The \fI-absolute\fR argument controls -whether the \fIRDN/DN\fR is a complete directory name or is relative -to the current location. - -The attributes \fIaudio\fR, \fIjpegPhoto\fR, \fIpersonalSignature\fR, -and \fIphoto\fR are known by \fIsaucer\fR to be binary values and are -therefore not displayed. Other attributes which have binary encodings -will be displayed by \fIsaucer\fR and will probably appear as garbage -on the screen. -.SH FILES -~/.saucerrc The saucer startup command file. -.SH "SEE ALSO" -ldap(3), RFC 1485, RFC 1588 -.SH DIAGNOSTICS -\fIsaucer\fR uses the ldap_perror() routine to print a message -whenever an error is returned by the Directory server or the LDAP -library. -.SH "TO DO" -The new LDAP 3.1 ldap_XXX2text() routines should be used instead of -the code built into saucer. - -The ability to read the X500UserName and credentials from the -~/.saucerrc file should be added. There should also be a way to have -saucer prompt the user for their password. - -Attribute types which are binary are hard-coded into saucer. Ideally -saucer should also try to detect which ones aren't displayable at -runtime. -.SH AUTHOR -Eric Rosenquist, Enterprise Solutions Limited. -.br -Eric.Rosenquist@esltd.com -- 2.39.5