]> git.sur5r.net Git - openldap/blobdiff - servers/slapd/back-tcl/tcl_config.c
#include <ac/string.h> to get strcasecmp().
[openldap] / servers / slapd / back-tcl / tcl_config.c
index 196b2d639e4b09d49cd91b66d407892acbb4dc64..f7ceed9a661fbf2a49c4d642f4a92fdbc114f5a1 100644 (file)
@@ -1,5 +1,5 @@
-/*
- * config.c - tcl backend configuration file routine
+/* $OpenLDAP$ */
+/* config.c - tcl backend configuration file routine
  *
  * Copyright 1999, Ben Collins <bcollins@debian.org>, All rights reserved.
  *
 
 struct i_info *global_i;
 
-int tcl_back_db_config (
+int
+tcl_back_db_config (
        BackendDB * bd,
-       char *fname,
+       const char *fname,
        int lineno,
        int argc,
        char **argv
 )
 {
        struct tclinfo *ti = (struct tclinfo *) bd->be_private;
-       int script_loaded = 0;
 
        if (ti == NULL) {
-               fprintf (stderr, "%s: line %d: tcl backend info is null!\n", fname,
+               fprintf (stderr,
+                       "%s: line %d: tcl backend info is null!\n", fname,
                        lineno);
-               exit (1);
+               return (1);
        }
        if (ti->ti_ii == NULL) {
                ti->ti_ii = global_i;
@@ -41,179 +42,140 @@ int tcl_back_db_config (
        /* Script to load */
        if (strcasecmp (argv[0], "scriptpath") == 0) {
                if (argc < 2) {
-                       Debug (LDAP_DEBUG_ANY,
+                       Debug (LDAP_DEBUG_CONFIG,
                                "%s: line %d: missing script in \"scriptpath <script>\" line\n",
                                fname, lineno, 0);
-                       exit (1);
+                       return (1);
                }
-               ti->script_path = (char *) strdup (argv[1]);
+               ber_str2bv( argv[1], 0, 1, &ti->ti_script_path );
 
-       /* use local interpreter */
+               /* use local interpreter */
        } else if (strcasecmp (argv[0], "tclrealm") == 0) {
                struct i_info *ii;
 
                if (argc < 2) {
-                       Debug (LDAP_DEBUG_ANY,
+                       Debug (LDAP_DEBUG_CONFIG,
                                "%s: line %d: missing script in \"tclrealm <name>\" line\n",
                                fname, lineno, 0);
-                       exit (1);
+                       return (1);
                }
                ti->ti_ii = NULL;
 
                ii = global_i;
+               /* Try to see if it already exists */
                do {
                        if (ii != NULL && !strcasecmp (ii->name, argv[1]))
-                       ti->ti_ii = ii;
+                               ti->ti_ii = ii;
                        if (ii->next != NULL)
-                       ii = ii->next;
+                               ii = ii->next;
                } while (ii->next != NULL);
 
                if (ti->ti_ii == NULL) {        /* we need to make a new one */
-                       ii->next = (struct i_info *) ch_malloc (sizeof (struct i_info));
+                       ii->next = (struct i_info *) ch_malloc
+                               (sizeof (struct i_info));
 
                        ii->next->count = 0;
-                       ii->next->name = (char *) strdup (argv[1]);
+                       ii->next->name = (char *) ch_strdup (argv[1]);
+                       ii->next->interp = NULL;
                        ii->next->next = NULL;
-                       ii->next->interp = Tcl_CreateInterp ();
-                       Tcl_Init (ii->next->interp);
-                       ti->ti_ii = ii;
+                       ti->ti_ii = ii->next;
                }
 
-       /* proc for binds */
+               /* proc for binds */
        } else if (strcasecmp (argv[0], "bind") == 0) {
                if (argc < 2) {
-                       Debug (LDAP_DEBUG_ANY,
+                       Debug (LDAP_DEBUG_CONFIG,
                                "%s: line %d: missing proc in \"bind <proc>\" line\n",
                                fname, lineno, 0);
-                       exit (1);
+                       return (1);
                }
-               ti->ti_bind = (char *) strdup (argv[1]);
+               ber_str2bv( argv[1], 0, 1, &ti->ti_bind );
 
-       /* proc for unbinds */
+               /* proc for unbinds */
        } else if (strcasecmp (argv[0], "unbind") == 0) {
                if (argc < 2) {
-                       Debug (LDAP_DEBUG_ANY,
-                       "%s: line %d: missing proc in \"unbind <proc>\" line\n",
-                       fname, lineno, 0);
-                       exit (1);
+                       Debug (LDAP_DEBUG_CONFIG,
+                               "%s: line %d: missing proc in \"unbind <proc>\" line\n",
+                               fname, lineno, 0);
+                       return (1);
                }
-               ti->ti_unbind = (char *) strdup (argv[1]);
+               ber_str2bv( argv[1], 0, 1, &ti->ti_unbind );
 
-       /* proc for search */
+               /* proc for search */
        } else if (strcasecmp (argv[0], "search") == 0) {
                if (argc < 2) {
-                       Debug (LDAP_DEBUG_ANY,
+                       Debug (LDAP_DEBUG_CONFIG,
                                "%s: line %d: missing proc in \"search <proc>\" line\n",
                                fname, lineno, 0);
-                       exit (1);
+                       return (1);
                }
-               ti->ti_search = (char *) strdup (argv[1]);
+               ber_str2bv( argv[1], 0, 1, &ti->ti_search );
 
-       /* proc for compares */
+               /* proc for compares */
        } else if (strcasecmp (argv[0], "compare") == 0) {
                if (argc < 2) {
-                       Debug (LDAP_DEBUG_ANY,
+                       Debug (LDAP_DEBUG_CONFIG,
                                "%s: line %d: missing proc in \"compare <proc>\" line\n",
                                fname, lineno, 0);
-                       exit (1);
+                       return (1);
                }
-               ti->ti_compare = (char *) strdup (argv[1]);
+               ber_str2bv( argv[1], 0, 1, &ti->ti_compare );
 
-       /* proc for modify */
+               /* proc for modify */
        } else if (strcasecmp (argv[0], "modify") == 0) {
                if (argc < 2) {
-                       Debug (LDAP_DEBUG_ANY,
+                       Debug (LDAP_DEBUG_CONFIG,
                                "%s: line %d: missing proc in \"modify <proc>\" line\n",
                                fname, lineno, 0);
-                       exit (1);
+                       return (1);
                }
-               ti->ti_modify = (char *) strdup (argv[1]);
+               ber_str2bv( argv[1], 0, 1, &ti->ti_modify );
 
-       /* proc for modrdn */
+               /* proc for modrdn */
        } else if (strcasecmp (argv[0], "modrdn") == 0) {
                if (argc < 2) {
-                       Debug (LDAP_DEBUG_ANY,
+                       Debug (LDAP_DEBUG_CONFIG,
                                "%s: line %d: missing proc in \"modrdn <proc>\" line\n",
                                fname, lineno, 0);
-                       exit (1);
+                       return (1);
                }
-               ti->ti_modrdn = (char *) strdup (argv[1]);
+               ber_str2bv( argv[1], 0, 1, &ti->ti_modrdn );
 
-       /* proc for add */
+               /* proc for add */
        } else if (strcasecmp (argv[0], "add") == 0) {
                if (argc < 2) {
-                       Debug (LDAP_DEBUG_ANY,
+                       Debug (LDAP_DEBUG_CONFIG,
                                "%s: line %d: missing proc in \"add <proc>\" line\n",
                                fname, lineno, 0);
-                       exit (1);
+                       return (1);
                }
-               ti->ti_add = (char *) strdup (argv[1]);
+               ber_str2bv( argv[1], 0, 1, &ti->ti_add );
 
-       /* proc for delete */
+               /* proc for delete */
        } else if (strcasecmp (argv[0], "delete") == 0) {
                if (argc < 2) {
-                       Debug (LDAP_DEBUG_ANY,
+                       Debug (LDAP_DEBUG_CONFIG,
                                "%s: line %d: missing proc in \"delete <proc>\" line\n",
                                fname, lineno, 0);
-                       exit (1);
+                       return (1);
                }
-               ti->ti_delete = (char *) strdup (argv[1]);
+               ber_str2bv( argv[1], 0, 1, &ti->ti_delete );
 
-       /* proc for abandon */
+               /* proc for abandon */
        } else if (strcasecmp (argv[0], "abandon") == 0) {
                if (argc < 2) {
-                       Debug (LDAP_DEBUG_ANY,
+                       Debug (LDAP_DEBUG_CONFIG,
                                "%s: line %d: missing proc in \"abandon <proc>\" line\n",
                                fname, lineno, 0);
-                       exit (1);
+                       return (1);
                }
-               ti->ti_search = (char *) strdup (argv[1]);
+               ber_str2bv( argv[1], 0, 1, &ti->ti_abandon );
 
        } else {
-               fprintf (stderr,
-                       "Unknown tcl backend config: %s\n", argv[0]);
-               exit (1);
+               Debug (LDAP_DEBUG_CONFIG,
+                       "Unknown tcl backend config: %s\n", argv[0], 0, 0);
+               return (1);
        }
 
        return 0;
 }
-
-int tcl_back_db_open (
-       BackendDB * bd
-)
-{
-       struct tclinfo *ti = (struct tclinfo *) bd->be_private;
-
-       /* raise that count for the interpreter */
-       ti->ti_ii->count++;
-
-       /* now let's (try to) load the script */
-       readtclscript (ti->script_path, ti->ti_ii->interp);
-
-       /* Intall the debug command */
-       Tcl_CreateCommand( ti->ti_ii->interp, "ldap:debug", &tcl_ldap_debug,
-       NULL, NULL);
-
-       return 0;
-}
-
-void readtclscript (char *script, Tcl_Interp * my_tcl)
-{
-       int code;
-       FILE *f;
-       f = fopen (script, "r");
-       if (f == NULL) {
-               Debug (LDAP_DEBUG_ANY, "Could not open scriptpath %s\n", script,
-                       0, 0);
-               exit (1);
-       }
-       fclose (f);
-       code = Tcl_EvalFile (my_tcl, script);
-       if (code != TCL_OK) {
-               Debug (LDAP_DEBUG_ANY, "%s: %s\n", script,
-                       Tcl_GetVar (my_tcl, "errorInfo", TCL_GLOBAL_ONLY), 0);
-               Debug (LDAP_DEBUG_ANY, "%s: error at line\n", script,
-                       my_tcl->errorLine, 0);
-               exit (1);
-       }
-}