main/sorcery: Don't fail object set creation from JSON if field fails
authorMatt Jordan <mjordan@digium.com>
Wed, 8 Jul 2015 21:28:13 +0000 (16:28 -0500)
committerMatt Jordan <mjordan@digium.com>
Sun, 12 Jul 2015 23:11:05 +0000 (18:11 -0500)
Some individual fields may fail their conversion due to their default
values being invalid for their custom handlers. In particular,
configuration values that depend on others being enabled (and thus have
an empty default value) are notorious for tripping this routine up. An
example of this are any of the DTLS options for endpoints. Any of the
DTLS options will fail to be applied (as DTLS is not enabled), causing
the entire object set to be aborted.

This patch makes it so that we log a debug message when skipping a
field, and rumble on anyway.

ASTERISK-25238

Change-Id: I0bea13de79f66bf9f9ae6ece0e94a2dc1c026a76

main/sorcery.c

index 790e782..6d24b14 100644 (file)
@@ -1600,10 +1600,13 @@ struct ast_json *ast_sorcery_objectset_json_create(const struct ast_sorcery *sor
                        char *buf = NULL;
                        struct ast_json *value = NULL;
 
-                       if ((res = object_field->handler(object, object_field->args, &buf))
+                       if (object_field->handler(object, object_field->args, &buf)
                                || !(value = ast_json_string_create(buf))
                                || ast_json_object_set(json, object_field->name, value)) {
-                               res = -1;
+                               ast_free(buf);
+                               ast_debug(5, "Skipping field '%s' for object type '%s'\n",
+                                       object_field->name, object_type->name);
+                               continue;
                        }
 
                        ast_free(buf);