]> git.sur5r.net Git - openldap/blobdiff - servers/slapd/config.c
ITS#6222 dncachesize defaults to 0 == unlimited
[openldap] / servers / slapd / config.c
index 2dfa57f5e66ccdc7786df417168c42a06ab0e1ec..dc9a2748709d5e6fb8890f42dff28f6924c1922f 100644 (file)
@@ -62,7 +62,9 @@ slap_mask_t           global_allows = 0;
 slap_mask_t            global_disallows = 0;
 int            global_gentlehup = 0;
 int            global_idletimeout = 0;
+int            global_writetimeout = 0;
 char   *global_host = NULL;
+struct berval global_host_bv = BER_BVNULL;
 char   *global_realm = NULL;
 char   *sasl_host = NULL;
 char           **default_passwd_hash = NULL;
@@ -126,6 +128,7 @@ int config_check_vals(ConfigTable *Conf, ConfigArgs *c, int check_only ) {
        int rc, arg_user, arg_type, arg_syn, iarg;
        unsigned uiarg;
        long larg;
+       unsigned long ularg;
        ber_len_t barg;
        
        if(Conf->arg_type == ARG_IGNORED) {
@@ -143,7 +146,7 @@ int config_check_vals(ConfigTable *Conf, ConfigArgs *c, int check_only ) {
        }
        if(Conf->min_args && (c->argc < Conf->min_args)) {
                snprintf( c->cr_msg, sizeof( c->cr_msg ), "<%s> missing <%s> argument",
-                       c->argv[0], Conf->what );
+                       c->argv[0], Conf->what ? Conf->what : "" );
                Debug(LDAP_DEBUG_CONFIG|LDAP_DEBUG_NONE, "%s: keyword %s\n", c->log, c->cr_msg, 0 );
                return(ARG_BAD_CONF);
        }
@@ -214,6 +217,16 @@ int config_check_vals(ConfigTable *Conf, ConfigArgs *c, int check_only ) {
                        ch_free( c->value_ndn.bv_val );
                        ch_free( c->value_dn.bv_val );
                }
+       } else if(arg_type == ARG_ATDESC) {
+               const char *text = NULL;
+               c->value_ad = NULL;
+               rc = slap_str2ad( c->argv[1], &c->value_ad, &text );
+               if ( rc != LDAP_SUCCESS ) {
+                       snprintf( c->cr_msg, sizeof( c->cr_msg ), "<%s> invalid AttributeDescription %d (%s)",
+                               c->argv[0], rc, text );
+                       Debug(LDAP_DEBUG_CONFIG|LDAP_DEBUG_NONE, "%s: %s\n" , c->log, c->cr_msg, 0);
+                       return(ARG_BAD_CONF);
+               }
        } else {        /* all numeric */
                int j;
                iarg = 0; larg = 0; barg = 0;
@@ -248,6 +261,16 @@ int config_check_vals(ConfigTable *Conf, ConfigArgs *c, int check_only ) {
                                        return(ARG_BAD_CONF);
                                }
                                break;
+                       case ARG_ULONG:
+                               if ( lutil_atoulx( &ularg, c->argv[1], 0 ) != 0 ) {
+                                       snprintf( c->cr_msg, sizeof( c->cr_msg ),
+                                               "<%s> unable to parse \"%s\" as unsigned long",
+                                               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_BER_LEN_T: {
                                unsigned long   l;
                                if ( lutil_atoulx( &l, c->argv[1], 0 ) != 0 ) {
@@ -296,6 +319,7 @@ int config_check_vals(ConfigTable *Conf, ConfigArgs *c, int check_only ) {
                        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_ULONG:         c->value_ulong = ularg;         break;
                        case ARG_BER_LEN_T:     c->value_ber_t = barg;          break;
                }
        }
@@ -347,6 +371,7 @@ int config_set_vals(ConfigTable *Conf, ConfigArgs *c) {
                        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_ULONG:         *(unsigned long*)ptr = c->value_ulong;                  break;
                        case ARG_BER_LEN_T:     *(ber_len_t*)ptr = c->value_ber_t;                      break;
                        case ARG_STRING: {
                                char *cc = *(char**)ptr;
@@ -364,6 +389,9 @@ int config_set_vals(ConfigTable *Conf, ConfigArgs *c) {
                        case ARG_BERVAL:
                                *(struct berval *)ptr = c->value_bv;
                                break;
+                       case ARG_ATDESC:
+                               *(AttributeDescription **)ptr = c->value_ad;
+                               break;
                }
        return(0);
 }
@@ -434,6 +462,7 @@ config_get_vals(ConfigTable *cf, ConfigArgs *c)
                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_ULONG: c->value_ulong = *(unsigned long *)ptr; break;
                case ARG_BER_LEN_T:     c->value_ber_t = *(ber_len_t *)ptr; break;
                case ARG_STRING:
                        if ( *(char **)ptr )
@@ -441,6 +470,8 @@ config_get_vals(ConfigTable *cf, ConfigArgs *c)
                        break;
                case ARG_BERVAL:
                        ber_dupbv( &c->value_bv, (struct berval *)ptr ); break;
+               case ARG_ATDESC:
+                       c->value_ad = *(AttributeDescription **)ptr; break;
                }
        }
        if ( cf->arg_type & ARGS_TYPES) {
@@ -450,6 +481,7 @@ config_get_vals(ConfigTable *cf, ConfigArgs *c)
                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_ULONG: bv.bv_len = snprintf(bv.bv_val, sizeof( c->log ), "%lud", c->value_ulong); 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",
                        c->value_int ? "TRUE" : "FALSE"); break;
@@ -467,6 +499,13 @@ config_get_vals(ConfigTable *cf, ConfigArgs *c)
                                return 1;
                        }
                        break;
+               case ARG_ATDESC:
+                       if ( c->value_ad ) {
+                               bv = c->value_ad->ad_cname;
+                       } else {
+                               return 1;
+                       }
+                       break;
                default:
                        bv.bv_val = NULL;
                        break;