]> git.sur5r.net Git - openldap/commitdiff
parse unsigned as unsigned (ITS#5122)
authorPierangelo Masarati <ando@openldap.org>
Tue, 4 Sep 2007 19:32:54 +0000 (19:32 +0000)
committerPierangelo Masarati <ando@openldap.org>
Tue, 4 Sep 2007 19:32:54 +0000 (19:32 +0000)
servers/slapd/back-bdb/back-bdb.h
servers/slapd/back-bdb/config.c
servers/slapd/config.c
servers/slapd/config.h

index 51edd51c0be372cf94374e4c79fdf6a0e78f2d76..369085005b63da88324acdd1a2ddc0c9bf56a3cf 100644 (file)
@@ -150,10 +150,10 @@ typedef struct bdb_cache {
        EntryInfo       *c_lruhead;     /* lru - add accessed entries here */
        EntryInfo       *c_lrutail;     /* lru - rem lru entries from here */
        EntryInfo       c_dntree;
-       int             c_maxsize;
+       unsigned        c_maxsize;
        int             c_cursize;
-       int             c_minfree;
-       int             c_eimax;
+       unsigned        c_minfree;
+       unsigned        c_eimax;
        int             c_eiused;       /* EntryInfo's in use */
        int             c_leaves;       /* EntryInfo leaf nodes */
        int             c_purging;
@@ -220,7 +220,7 @@ struct bdb_info {
 
        ID                      bi_lastid;
        ldap_pvt_thread_mutex_t bi_lastid_mutex;
-       int             bi_idl_cache_max_size;
+       unsigned        bi_idl_cache_max_size;
        int             bi_idl_cache_size;
        Avlnode         *bi_idl_tree;
        bdb_idl_cache_entry_t   *bi_idl_lru_head;
index b21087a22354e909d86dc9c7e996fd660cfb52e5..3844629cb4bf734c70b38a190a55726586a55a87 100644 (file)
@@ -55,12 +55,12 @@ static ConfigTable bdbcfg[] = {
                        "DESC 'Directory for database content' "
                        "EQUALITY caseIgnoreMatch "
                        "SYNTAX OMsDirectoryString SINGLE-VALUE )", NULL, NULL },
-       { "cachefree", "size", 2, 2, 0, ARG_INT|ARG_OFFSET,
+       { "cachefree", "size", 2, 2, 0, ARG_UINT|ARG_OFFSET,
                (void *)offsetof(struct bdb_info, bi_cache.c_minfree),
                "( OLcfgDbAt:1.11 NAME 'olcDbCacheFree' "
                        "DESC 'Number of extra entries to free when max is reached' "
                        "SYNTAX OMsInteger SINGLE-VALUE )", NULL, NULL },
-       { "cachesize", "size", 2, 2, 0, ARG_INT|ARG_OFFSET,
+       { "cachesize", "size", 2, 2, 0, ARG_UINT|ARG_OFFSET,
                (void *)offsetof(struct bdb_info, bi_cache.c_maxsize),
                "( OLcfgDbAt:1.1 NAME 'olcDbCacheSize' "
                        "DESC 'Entry cache size in entries' "
@@ -86,13 +86,13 @@ static ConfigTable bdbcfg[] = {
                "( OLcfgDbAt:1.5 NAME 'olcDbDirtyRead' "
                "DESC 'Allow reads of uncommitted data' "
                "SYNTAX OMsBoolean SINGLE-VALUE )", NULL, NULL },
-       { "dncachesize", "size", 2, 2, 0, ARG_INT|ARG_OFFSET,
+       { "dncachesize", "size", 2, 2, 0, ARG_UINT|ARG_OFFSET,
                (void *)offsetof(struct bdb_info, bi_cache.c_eimax),
                "( OLcfgDbAt:1.12 NAME 'olcDbDNcacheSize' "
                        "DESC 'DN cache size' "
                        "SYNTAX OMsInteger SINGLE-VALUE )", NULL, NULL },
-       { "idlcachesize", "size", 2, 2, 0, ARG_INT|ARG_OFFSET,
-               (void *)offsetof(struct bdb_info,bi_idl_cache_max_size),
+       { "idlcachesize", "size", 2, 2, 0, ARG_UINT|ARG_OFFSET,
+               (void *)offsetof(struct bdb_info, bi_idl_cache_max_size),
                "( OLcfgDbAt:1.6 NAME 'olcDbIDLcacheSize' "
                "DESC 'IDL cache size in IDLs' "
                "SYNTAX OMsInteger SINGLE-VALUE )", NULL, NULL },
@@ -119,7 +119,7 @@ static ConfigTable bdbcfg[] = {
                bdb_cf_gen, "( OLcfgDbAt:1.9 NAME 'olcDbSearchStack' "
                "DESC 'Depth of search stack in IDLs' "
                "SYNTAX OMsInteger SINGLE-VALUE )", NULL, NULL },
-       { "shm_key", "key", 2, 2, 0, ARG_INT|ARG_OFFSET,
+       { "shm_key", "key", 2, 2, 0, ARG_LONG|ARG_OFFSET,
                (void *)offsetof(struct bdb_info, bi_shm_key), 
                "( OLcfgDbAt:1.10 NAME 'olcDbShmKey' "
                "DESC 'Key for shared memory region' "
index d6655a78a01eda9113da6bec7324067e48a03e77..2bcc5e47f3aab434152fdd532718e69df4ad02f8 100644 (file)
@@ -124,6 +124,7 @@ ConfigTable *config_find_keyword(ConfigTable *Conf, ConfigArgs *c) {
 
 int config_check_vals(ConfigTable *Conf, ConfigArgs *c, int check_only ) {
        int rc, arg_user, arg_type, arg_syn, iarg;
+       unsigned uiarg;
        long larg;
        ber_len_t barg;
        
@@ -227,6 +228,16 @@ int config_check_vals(ConfigTable *Conf, ConfigArgs *c, int check_only ) {
                                        return(ARG_BAD_CONF);
                                }
                                break;
+                       case ARG_UINT:
+                               if ( lutil_atoux( &uiarg, c->argv[1], 0 ) != 0 ) {
+                                       snprintf( c->cr_msg, sizeof( c->cr_msg ),
+                                               "<%s> unable to parse \"%s\" as unsigned int",
+                                               c->argv[0], c->argv[1] );
+                                       Debug(LDAP_DEBUG_CONFIG|LDAP_DEBUG_NONE, "%s: %s\n",
+                                               c->log, c->cr_msg, 0);
+                                       return(ARG_BAD_CONF);
+                               }
+                               break;
                        case ARG_LONG:
                                if ( lutil_atolx( &larg, c->argv[1], 0 ) != 0 ) {
                                        snprintf( c->cr_msg, sizeof( c->cr_msg ),
@@ -283,6 +294,7 @@ int config_check_vals(ConfigTable *Conf, ConfigArgs *c, int check_only ) {
                switch(arg_type) {
                        case ARG_ON_OFF:
                        case ARG_INT:           c->value_int = iarg;            break;
+                       case ARG_UINT:          c->value_uint = uiarg;          break;
                        case ARG_LONG:          c->value_long = larg;           break;
                        case ARG_BER_LEN_T:     c->value_ber_t = barg;          break;
                }
@@ -333,6 +345,7 @@ int config_set_vals(ConfigTable *Conf, ConfigArgs *c) {
                switch(arg_type & ARGS_TYPES) {
                        case ARG_ON_OFF:
                        case ARG_INT:           *(int*)ptr = c->value_int;                      break;
+                       case ARG_UINT:          *(unsigned*)ptr = c->value_uint;                        break;
                        case ARG_LONG:          *(long*)ptr = c->value_long;                    break;
                        case ARG_BER_LEN_T:     *(ber_len_t*)ptr = c->value_ber_t;                      break;
                        case ARG_STRING: {
@@ -419,6 +432,7 @@ config_get_vals(ConfigTable *cf, ConfigArgs *c)
                switch(cf->arg_type & ARGS_TYPES) {
                case ARG_ON_OFF:
                case ARG_INT:   c->value_int = *(int *)ptr; break;
+               case ARG_UINT:  c->value_uint = *(unsigned *)ptr; break;
                case ARG_LONG:  c->value_long = *(long *)ptr; break;
                case ARG_BER_LEN_T:     c->value_ber_t = *(ber_len_t *)ptr; break;
                case ARG_STRING:
@@ -434,6 +448,7 @@ config_get_vals(ConfigTable *cf, ConfigArgs *c)
                bv.bv_val = c->log;
                switch(cf->arg_type & ARGS_TYPES) {
                case ARG_INT: bv.bv_len = snprintf(bv.bv_val, sizeof( c->log ), "%d", c->value_int); break;
+               case ARG_UINT: bv.bv_len = snprintf(bv.bv_val, sizeof( c->log ), "%u", c->value_uint); break;
                case ARG_LONG: bv.bv_len = snprintf(bv.bv_val, sizeof( c->log ), "%ld", c->value_long); break;
                case ARG_BER_LEN_T: bv.bv_len = snprintf(bv.bv_val, sizeof( c->log ), "%ld", c->value_ber_t); break;
                case ARG_ON_OFF: bv.bv_len = snprintf(bv.bv_val, sizeof( c->log ), "%s",
index be5e2925a8ddce6b9fafd463f817004f124d6865..3664adcb82086866ab10d7bfca0986ddbe6e3bdc 100644 (file)
@@ -55,6 +55,7 @@ typedef enum {
 #define ARG_STRING     0x00005000
 #define ARG_BERVAL     0x00006000
 #define ARG_DN         0x00007000
+#define ARG_UINT       0x00008000
 
 #define ARGS_SYNTAX    0xffff0000
 #define ARG_IGNORED    0x00080000
@@ -128,6 +129,7 @@ typedef struct config_args_s {
        /* parsed first val for simple cases */
        union {
                int v_int;
+               unsigned v_uint;
                long v_long;
                ber_len_t v_ber_t;
                char *v_string;
@@ -159,6 +161,7 @@ typedef struct config_args_s {
 #define CONFIG_ONLINE_ADD(ca)  (!((ca)->lineno))
 
 #define value_int values.v_int
+#define value_uint values.v_uint
 #define value_long values.v_long
 #define value_ber_t values.v_ber_t
 #define value_string values.v_string