ovs-vsctl: Do not allow record names to be abbreviated.
[sliver-openvswitch.git] / utilities / ovs-vsctl.c
index d9d3b63..0f86231 100644 (file)
@@ -1968,8 +1968,7 @@ get_table(const char *table_name)
 
 static const struct ovsdb_idl_row *
 get_row_by_id(struct vsctl_context *ctx, const struct vsctl_table_class *table,
-              const struct vsctl_row_id *id, const char *record_id,
-              bool partial_match_ok)
+              const struct vsctl_row_id *id, const char *record_id)
 {
     const struct ovsdb_idl_row *referrer, *final;
 
@@ -1987,35 +1986,24 @@ get_row_by_id(struct vsctl_context *ctx, const struct vsctl_table_class *table,
         }
     } else {
         const struct ovsdb_idl_row *row;
-        unsigned int best_score = 0;
 
         referrer = NULL;
         for (row = ovsdb_idl_first_row(ctx->idl, id->table);
-             row != NULL && best_score != UINT_MAX;
+             row != NULL;
              row = ovsdb_idl_next_row(row))
         {
             const struct ovsdb_datum *name;
 
             name = ovsdb_idl_get(row, id->name_column,
                                  OVSDB_TYPE_STRING, OVSDB_TYPE_VOID);
-            if (name->n == 1) {
-                unsigned int score;
-
-                score = (partial_match_ok
-                         ? score_partial_match(name->keys[0].string, record_id)
-                         : !strcmp(name->keys[0].string, record_id));
-                if (score > best_score) {
-                    referrer = row;
-                    best_score = score;
-                } else if (score == best_score) {
-                    referrer = NULL;
+            if (name->n == 1 && !strcmp(name->keys[0].string, record_id)) {
+                if (referrer) {
+                    vsctl_fatal("multiple rows in %s match \"%s\"",
+                                table->class->name, record_id);
                 }
+                referrer = row;
             }
         }
-        if (best_score && !referrer) {
-            vsctl_fatal("multiple rows in %s match \"%s\"",
-                        table->class->name, record_id);
-        }
     }
     if (!referrer) {
         return NULL;
@@ -2039,9 +2027,8 @@ get_row_by_id(struct vsctl_context *ctx, const struct vsctl_table_class *table,
 }
 
 static const struct ovsdb_idl_row *
-get_row__(struct vsctl_context *ctx,
-          const struct vsctl_table_class *table, const char *record_id,
-          bool partial_match_ok)
+get_row (struct vsctl_context *ctx,
+         const struct vsctl_table_class *table, const char *record_id)
 {
     const struct ovsdb_idl_row *row;
     struct uuid uuid;
@@ -2052,8 +2039,7 @@ get_row__(struct vsctl_context *ctx,
         int i;
 
         for (i = 0; i < ARRAY_SIZE(table->row_ids); i++) {
-            row = get_row_by_id(ctx, table, &table->row_ids[i], record_id,
-                                partial_match_ok);
+            row = get_row_by_id(ctx, table, &table->row_ids[i], record_id);
             if (row) {
                 break;
             }
@@ -2062,13 +2048,6 @@ get_row__(struct vsctl_context *ctx,
     return row;
 }
 
-static const struct ovsdb_idl_row *
-get_row(struct vsctl_context *ctx,
-        const struct vsctl_table_class *table, const char *record_id)
-{
-    return get_row__(ctx, table, record_id, true);
-}
-
 static const struct ovsdb_idl_row *
 must_get_row(struct vsctl_context *ctx,
              const struct vsctl_table_class *table, const char *record_id)
@@ -2744,7 +2723,7 @@ cmd_wait_until(struct vsctl_context *ctx)
 
     table = get_table(table_name);
 
-    row = get_row__(ctx, table, record_id, false);
+    row = get_row(ctx, table, record_id);
     if (!row) {
         ctx->try_again = true;
         return;