ovsdb: Require database, table, column names to be valid identifiers.
authorBen Pfaff <blp@nicira.com>
Fri, 20 Nov 2009 00:48:12 +0000 (16:48 -0800)
committerBen Pfaff <blp@nicira.com>
Fri, 20 Nov 2009 00:48:12 +0000 (16:48 -0800)
Database, table, and column names have always been required by the OVSDB
specification to be identifiers (e.g. valid C identifiers), but this has
never been enforced.

This commit adds enforcement and fixes one instance of an invalid column
name in the vswitch schema.

lib/ovsdb-parser.c
lib/ovsdb-parser.h
ovsdb/ovsdb.c
ovsdb/table.c
vswitchd/vswitch.ovsschema

index 5419467..2a4c3d9 100644 (file)
@@ -41,8 +41,8 @@ ovsdb_parser_init(struct ovsdb_parser *parser, const struct json *json,
     }
 }
 
-static bool
-is_id(const char *string)
+bool
+ovsdb_parser_is_id(const char *string)
 {
     unsigned char c;
 
@@ -83,7 +83,7 @@ ovsdb_parser_member(struct ovsdb_parser *parser, const char *name,
     if ((value->type >= 0 && value->type < JSON_N_TYPES
          && types & (1u << value->type))
         || (types & OP_ID && value->type == JSON_STRING
-            && is_id(value->u.string)))
+            && ovsdb_parser_is_id(value->u.string)))
     {
         svec_add(&parser->used, name);
         return value;
index 6a3e32d..6efa0a7 100644 (file)
@@ -71,4 +71,6 @@ struct ovsdb_error *ovsdb_parser_get_error(const struct ovsdb_parser *);
 struct ovsdb_error *ovsdb_parser_finish(struct ovsdb_parser *)
     WARN_UNUSED_RESULT;
 
+bool ovsdb_parser_is_id(const char *string);
+
 #endif /* ovsdb-parser.h */
index 4d5f1c5..27254e6 100644 (file)
@@ -107,6 +107,8 @@ ovsdb_schema_from_json(struct json *json, struct ovsdb_schema **schemap)
         if (node->name[0] == '_') {
             error = ovsdb_syntax_error(json, NULL, "names beginning with "
                                        "\"_\" are reserved");
+        } else if (!ovsdb_parser_is_id(node->name)) {
+            error = ovsdb_syntax_error(json, NULL, "name must be a valid id");
         } else {
             error = ovsdb_table_schema_from_json(node->data, node->name,
                                                  &table);
index d017a6b..b520580 100644 (file)
@@ -111,6 +111,8 @@ ovsdb_table_schema_from_json(const struct json *json, const char *name,
         if (node->name[0] == '_') {
             error = ovsdb_syntax_error(json, NULL, "names beginning with "
                                        "\"_\" are reserved");
+        } else if (!ovsdb_parser_is_id(node->name)) {
+            error = ovsdb_syntax_error(json, NULL, "name must be a valid id");
         } else {
             error = ovsdb_column_from_json(node->data, node->name, &column);
         }
index f4c63fb..3f32d7a 100644 (file)
             "certificate": {
                 "comment": "Name of a PEM file containing a certificate, signed by the certificate authority (CA) used by the controller and manager, that certifies the switch's private key, identifying a trustworthy switch.",
                 "type": "string"},
-            "ca-cert": {
+            "ca_cert": {
                 "comment": "Name of a PEM file containing the CA certificate used to verify that the switch is connected to a trustworthy controller.",
                 "type": "string"}}}}}