]> granicus.if.org Git - p11-kit/commitdiff
trust: If token path is a file, don't try loading subdirectories
authorStef Walter <stef@thewalter.net>
Wed, 3 Jul 2013 10:46:41 +0000 (12:46 +0200)
committerStef Walter <stef@thewalter.net>
Wed, 3 Jul 2013 11:14:45 +0000 (13:14 +0200)
trust/token.c

index cbb522ef69f13e6bc78457a7027b9521baead92a..6b88fc604beb82c28ccc75220653b1c307e261f4 100644 (file)
@@ -293,7 +293,8 @@ loader_load_directory (p11_token *token,
 
 static int
 loader_load_path (p11_token *token,
-                  const char *path)
+                  const char *path,
+                  bool *is_dir)
 {
        p11_dictiter iter;
        p11_dict *present;
@@ -312,6 +313,8 @@ loader_load_path (p11_token *token,
        }
 
        if (S_ISDIR (sb.st_mode)) {
+               *is_dir = true;
+               ret = 0;
 
                /* All the files we know about at this path */
                present = p11_dict_new (p11_dict_str_hash, p11_dict_str_equal, NULL, NULL);
@@ -342,6 +345,7 @@ loader_load_path (p11_token *token,
                loader_was_loaded (token, path, &sb);
 
        } else {
+               *is_dir = false;
                ret = loader_load_file (token, path, &sb);
        }
 
@@ -377,19 +381,22 @@ int
 p11_token_load (p11_token *token)
 {
        int total = 0;
+       bool is_dir;
        int ret;
 
-       ret = loader_load_path (token, token->path);
+       ret = loader_load_path (token, token->path, &is_dir);
        return_val_if_fail (ret >= 0, -1);
        total += ret;
 
-       ret = loader_load_path (token, token->anchors);
-       return_val_if_fail (ret >= 0, -1);
-       total += ret;
+       if (is_dir) {
+               ret = loader_load_path (token, token->anchors, &is_dir);
+               return_val_if_fail (ret >= 0, -1);
+               total += ret;
 
-       ret = loader_load_path (token, token->blacklist);
-       return_val_if_fail (ret >= 0, -1);
-       total += ret;
+               ret = loader_load_path (token, token->blacklist, &is_dir);
+               return_val_if_fail (ret >= 0, -1);
+               total += ret;
+       }
 
        return total;
 }