Index: src/configfile-glue.c
===================================================================
--- src/configfile-glue.c	(revision 2540)
+++ src/configfile-glue.c	(working copy)
@@ -116,6 +116,36 @@
 				return -1;
 			}
 			break;
+		case T_CONFIG_INT:
+			switch(du->type) {
+			case TYPE_INTEGER: {
+				data_integer *di = (data_integer *)du;
+
+				*((unsigned int *)(cv[i].destination)) = di->value;
+				break;
+			}
+			case TYPE_STRING: {
+				data_string *ds = (data_string *)du;
+
+				if (ds->value->ptr && *ds->value->ptr) {
+					char *e;
+					long l = strtol(ds->value->ptr, &e, 10);
+					if (e != ds->value->ptr && !*e && l >=0 && l <= 4294967295) {
+						*((unsigned int *)(cv[i].destination)) = l;
+						break;
+
+					}
+				}
+
+				log_error_write(srv, __FILE__, __LINE__, "ssb", "got a string but expected an int:", cv[i].key, ds->value);
+
+				return -1;
+			}
+			default:
+				log_error_write(srv, __FILE__, __LINE__, "ssds", "unexpected type for key:", cv[i].key, du->type, "expected a integer, range 0 ... 4294967295");
+				return -1;
+			}
+			break;
 		case T_CONFIG_BOOLEAN:
 			if (du->type == TYPE_STRING) {
 				data_string *ds = (data_string *)du;
Index: src/base.h
===================================================================
--- src/base.h	(revision 2540)
+++ src/base.h	(working copy)
@@ -84,6 +84,7 @@
 typedef enum { T_CONFIG_UNSET,
 		T_CONFIG_STRING,
 		T_CONFIG_SHORT,
+		T_CONFIG_INT,
 		T_CONFIG_BOOLEAN,
 		T_CONFIG_ARRAY,
 		T_CONFIG_LOCAL,
