]> git.sur5r.net Git - openldap/blobdiff - servers/slapd/config.h
fix previous commit
[openldap] / servers / slapd / config.h
index acc04f7a933681ea5c5bab0200ca9c9c69ae5162..be90c5c2d32267119a3776328388ebfab63af7a9 100644 (file)
@@ -1,5 +1,4 @@
 /* config.h - configuration abstraction structure */
-
 /* $OpenLDAP$ */
 /* This work is part of OpenLDAP Software <http://www.openldap.org/>.
  *
  * <http://www.OpenLDAP.org/license.html>.
  */
 
-typedef struct config_table_s {
+typedef struct ConfigTable {
        char *name;
+       char *what;
        int min_args;
        int max_args;
        int length;
-       char *what;
-       unsigned long arg_type;
+       unsigned int arg_type;
        void *arg_item;
        char *attribute;
        AttributeDescription *ad;
        void *notify;
 } ConfigTable;
 
-#define ARGS_USERLAND  0x0000ffff
-#define ARGS_TYPES     0x00ff0000
-#define ARGS_POINTER   0x001f0000
-#define ARGS_NUMERIC   0x000f0000
-#define ARG_INT                0x00010000
-#define ARG_LONG       0x00020000
-#define ARG_BER_LEN_T  0x00040000
-#define ARG_ON_OFF     0x00080000
-#define ARG_STRING     0x00100000
-#define ARG_BERVAL     0x00200000      /* XXX not yet */
-#define ARG_EXISTS     0x00400000      /* XXX not yet */
-#define ARG_IGNORED    0x00800000
+typedef enum {
+       Cft_Abstract = 0,
+       Cft_Global,
+       Cft_Schema,
+       Cft_Backend,
+       Cft_Database,
+       Cft_Overlay,
+       Cft_Include,
+       Cft_Module
+} ConfigType;
+
+#define ARGS_USERLAND  0x00000fff
+#define ARGS_TYPES     0x000ff000
+#define ARGS_POINTER   0x0003f000
+#define ARGS_NUMERIC   0x0000f000
+#define ARG_INT                0x00001000
+#define ARG_LONG       0x00002000
+#define ARG_BER_LEN_T  0x00004000
+#define ARG_ON_OFF     0x00008000
+#define ARG_STRING     0x00010000
+#define ARG_BERVAL     0x00020000
+#define ARG_DN         0x00040000
+#define ARG_IGNORED    0x00080000
 
-#define ARGS_SYNTAX    0xff000000
-#define ARG_DB         0x01000000
-#define ARG_PRE_DB     0x02000000
-#define ARG_PAREN      0x04000000
-#define ARG_NONZERO    0x08000000
-#define ARG_UNIQUE     0x10000000      /* XXX not yet */
-#define ARG_SPECIAL    0x20000000      /* one special case */
+#define ARGS_SYNTAX    0xfff00000
+#define ARG_PRE_BI     0x00100000
+#define ARG_PRE_DB     0x00200000
+#define ARG_DB         0x00400000      /* Only applies to DB */
+#define ARG_MAY_DB     0x00800000      /* May apply to DB */
+#define ARG_PAREN      0x01000000
+#define ARG_NONZERO    0x02000000
+#define ARG_UNIQUE     0x10000000
+#define ARG_MUTEX      0x20000000      /* modify in single-thread mode */
 #define ARG_OFFSET     0x40000000
 #define ARG_MAGIC      0x80000000
 
 #define ARG_BAD_CONF   0xdead0000      /* overload return values */
 #define ARG_UNKNOWN    0xc0de0000
 
+extern ConfigTable config_back_cf_table[];
+
+typedef struct ConfigOCs {
+       char *def;
+       ConfigType cft;
+       ObjectClass **oc;
+#if 0
+       BI_op_add *add;         /* optional, add-specific processing */
+       BI_op_delete *del;      /* mandatory, delete implementation */
+       BI_op_modify *mod;      /* optional, mod-specific */
+       BI_op_modrdn *ren;      /* optional, modrdn... */
+#endif
+} ConfigOCs;
+
 typedef struct config_args_s {
        int argc;
        char **argv;
        int argv_size;
        char *line;
+       char *tline;
        const char *fname;
        unsigned long lineno;
        char log[PATH_MAX + STRLENOF(": line 18446744073709551615") + 1];
        int depth;
-       int value_int;   /* parsed first val */
-       long value_long; /* for simple cases */
-       ber_len_t value_ber_t;
-       char *value_string;
-       int emit;       /* emit instead of setting */
+       /* parsed first val for simple cases */
+       union {
+               int v_int;
+               long v_long;
+               ber_len_t v_ber_t;
+               char *v_string;
+               struct berval v_bv;
+               struct {
+                       struct berval vdn_dn;
+                       struct berval vdn_ndn;
+               } v_dn;
+       } values;
+       /* return values for emit mode */
+       BerVarray rvalue_vals;
+       BerVarray rvalue_nvals;
+#define        SLAP_CONFIG_EMIT        0x2000  /* emit instead of set */
+#define SLAP_CONFIG_ADD                0x4000  /* config file add vs LDAP add */
+       int op;
        int type;       /* ConfigTable.arg_type & ARGS_USERLAND */
        BackendDB *be;
        BackendInfo *bi;
+       void *private;  /* anything */
 } ConfigArgs;
 
+#define value_int values.v_int
+#define value_long values.v_long
+#define value_ber_t values.v_ber_t
+#define value_string values.v_string
+#define value_bv values.v_bv
+#define value_dn values.v_dn.vdn_dn
+#define value_ndn values.v_dn.vdn_ndn
+
 typedef int (ConfigDriver)(ConfigArgs *c);
+
+int config_register_schema(ConfigTable *ct, ConfigOCs *co);
+int config_get_vals(ConfigTable *ct, ConfigArgs *c);
+int config_add_vals(ConfigTable *ct, ConfigArgs *c);
+ConfigTable * config_find_keyword(ConfigTable *ct, ConfigArgs *c);