]> git.sur5r.net Git - openldap/blobdiff - servers/slapd/config.c
ITS#4587: selfwrite access is broken
[openldap] / servers / slapd / config.c
index 5e57b2703c761b02cd543e5edc8da3b6549316e9..5146a85c5a4e0a5cfaceb6bd8d46f2b2cc877e7b 100644 (file)
@@ -2,7 +2,7 @@
 /* $OpenLDAP$ */
 /* This work is part of OpenLDAP Software <http://www.openldap.org/>.
  *
- * Copyright 1998-2005 The OpenLDAP Foundation.
+ * Copyright 1998-2006 The OpenLDAP Foundation.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -192,7 +192,7 @@ int config_check_vals(ConfigTable *Conf, ConfigArgs *c, int check_only ) {
                iarg = 0; larg = 0; barg = 0;
                switch(arg_type & ARGS_NUMERIC) {
                        case ARG_INT:
-                               if ( lutil_atoi( &iarg, c->argv[1] ) != 0 ) {
+                               if ( lutil_atoix( &iarg, c->argv[1], 0 ) != 0 ) {
                                        snprintf( c->msg, sizeof( c->msg ),
                                                "<%s> unable to parse \"%s\" as int",
                                                c->argv[0], c->argv[1] );
@@ -202,7 +202,7 @@ int config_check_vals(ConfigTable *Conf, ConfigArgs *c, int check_only ) {
                                }
                                break;
                        case ARG_LONG:
-                               if ( lutil_atol( &larg, c->argv[1] ) != 0 ) {
+                               if ( lutil_atolx( &larg, c->argv[1], 0 ) != 0 ) {
                                        snprintf( c->msg, sizeof( c->msg ),
                                                "<%s> unable to parse \"%s\" as long",
                                                c->argv[0], c->argv[1] );
@@ -213,7 +213,7 @@ int config_check_vals(ConfigTable *Conf, ConfigArgs *c, int check_only ) {
                                break;
                        case ARG_BER_LEN_T: {
                                unsigned long   l;
-                               if ( lutil_atoul( &l, c->argv[1] ) != 0 ) {
+                               if ( lutil_atoulx( &l, c->argv[1], 0 ) != 0 ) {
                                        snprintf( c->msg, sizeof( c->msg ),
                                                "<%s> unable to parse \"%s\" as ber_len_t",
                                                c->argv[0], c->argv[1] );
@@ -628,6 +628,7 @@ config_parse_vals(ConfigTable *ct, ConfigArgs *c, int valx)
        }
        rc = config_check_vals( ct, c, 1 );
        ch_free( c->tline );
+       c->tline = NULL;
 
        if ( rc )
                rc = LDAP_CONSTRAINT_VIOLATION;
@@ -1496,6 +1497,8 @@ int config_generic_wrapper( Backend *be, const char *fname, int lineno,
        c.argc = argc;
        c.argv = argv;
        c.valx = -1;
+       c.line = line;
+       c.op = SLAP_CONFIG_ADD;
        snprintf( c.log, sizeof( c.log ), "%s: line %d", fname, lineno );
 
        rc = SLAP_CONF_UNKNOWN;