]> granicus.if.org Git - p11-kit/commitdiff
trust: Simplify the check for the magic
authorDaiki Ueno <dueno@redhat.com>
Thu, 18 May 2017 12:27:36 +0000 (14:27 +0200)
committerDaiki Ueno <ueno@gnu.org>
Thu, 18 May 2017 12:42:15 +0000 (14:42 +0200)
Instead of reusing the CKA_X_GENERATED attribute, check the file
contents directly in the caller side.

trust/parser.c
trust/persist.c
trust/persist.h

index abe86fc3d7b8494612acbc9a51e394f0ad2892b3..f92cdc91df5a17fe8116450ceb76b9802d6e320b 100644 (file)
@@ -630,11 +630,10 @@ p11_parser_format_persist (p11_parser *parser,
 
        ret = p11_persist_read (parser->persist, parser->basename, data, length, objects);
        if (ret) {
+               if (!p11_persist_is_generated (data, length))
+                       modifiablev = CK_FALSE;
                for (i = 0; i < objects->num; i++) {
-                       CK_BBOOL generatedv;
-                       attrs = objects->elem[i];
-                       if (p11_attrs_find_bool (attrs, CKA_X_GENERATED, &generatedv) && generatedv)
-                               attrs = p11_attrs_build (attrs, &modifiable, NULL);
+                       attrs = p11_attrs_build (objects->elem[i], &modifiable, NULL);
                        sink_object (parser, attrs);
                }
        }
index 928260e43437499c318207a1c9fb17a25cd627af..887b316c8d965e7a28e5ff1499946f1104cca353 100644 (file)
@@ -70,6 +70,16 @@ p11_persist_magic (const unsigned char *data,
        return (strnstr ((char *)data, "[" PERSIST_HEADER "]", length) != NULL);
 }
 
+bool
+p11_persist_is_generated (const unsigned char *data,
+                         size_t length)
+{
+       static const char comment[] =
+               "# This file has been auto-generated and written by p11-kit.";
+       return length >= sizeof (comment) - 1 &&
+               memcmp ((const char *)data, comment, sizeof (comment) - 1) == 0;
+}
+
 p11_persist *
 p11_persist_new (void)
 {
@@ -631,9 +641,6 @@ p11_persist_read (p11_persist *persist,
        CK_ATTRIBUTE *attrs;
        bool failed;
        bool skip;
-       CK_BBOOL generatedv = CK_FALSE;
-       CK_ATTRIBUTE generated = { CKA_X_GENERATED, &generatedv, sizeof (generatedv) };
-       static const char comment[] = "# This file has been auto-generated and written by p11-kit.";
 
        return_val_if_fail (persist != NULL, false);
        return_val_if_fail (objects != NULL, false);
@@ -642,10 +649,6 @@ p11_persist_read (p11_persist *persist,
        attrs = NULL;
        failed = false;
 
-       if (length >= sizeof (comment) - 1 &&
-           memcmp ((const char *)data, comment, sizeof (comment) - 1) == 0)
-               generatedv = CK_TRUE;
-
        p11_lexer_init (&lexer, filename, (const char *)data, length);
        while (p11_lexer_next (&lexer, &failed)) {
                switch (lexer.tok_type) {
@@ -657,7 +660,7 @@ p11_persist_read (p11_persist *persist,
                                p11_lexer_msg (&lexer, "unrecognized or invalid section header");
                                skip = true;
                        } else {
-                               attrs = p11_attrs_build (NULL, &generated, NULL);
+                               attrs = p11_attrs_build (NULL, NULL);
                                return_val_if_fail (attrs != NULL, false);
                                skip = false;
                        }
index 0ef142c04810b6b61a3d2763ad75d70ddcc97a69..6344e4efa13dec43501d4c49b8ed2d8ad4c554a6 100644 (file)
@@ -60,4 +60,7 @@ bool             p11_persist_write  (p11_persist *persist,
 
 void             p11_persist_free   (p11_persist *persist);
 
+bool             p11_persist_is_generated (const unsigned char *data,
+                                          size_t length);
+
 #endif /* P11_PERSIST_H_ */