]> git.ipfire.org Git - thirdparty/libsolv.git/commitdiff
Make sure the product file comes from /etc/products.d for the fallback product search
authorMichael Schroeder <mls@suse.de>
Fri, 23 Mar 2018 11:00:00 +0000 (12:00 +0100)
committerMichael Schroeder <mls@suse.de>
Fri, 23 Mar 2018 11:00:00 +0000 (12:00 +0100)
src/linkedpkg.c

index 635e69b82c2b8222c6a79a06c0f8848c59e82f15..5912f98cf2cd082b77fc41ecf967db9e420199d3 100644 (file)
@@ -192,16 +192,25 @@ find_product_link(Pool *pool, Solvable *s, Id *reqidp, Queue *qr, Id *prvidp, Qu
       /* oh no! Look up reference file */
       Dataiterator di;
       const char *refbasename = solvable_lookup_str(s, PRODUCT_REFERENCEFILE);
-      dataiterator_init(&di, pool, s->repo, 0, SOLVABLE_FILELIST, refbasename, SEARCH_STRING);
-      while (dataiterator_step(&di))
-       queue_push(qr, di.solvid);
-      dataiterator_free(&di);
-      if (qp)
+      if (refbasename)
        {
-         dataiterator_init(&di, pool, s->repo, 0, PRODUCT_REFERENCEFILE, refbasename, SEARCH_STRING);
+         dataiterator_init(&di, pool, s->repo, 0, SOLVABLE_FILELIST, refbasename, SEARCH_STRING);
          while (dataiterator_step(&di))
-           queue_push(qp, di.solvid);
+           {
+             if (di.key->type != REPOKEY_TYPE_DIRSTRARRAY)
+               continue;
+             if (strcmp(repodata_dir2str(di.data, di.kv.id, 0), "/etc/products.d") != 0)
+               continue;
+             queue_push(qr, di.solvid);
+           }
          dataiterator_free(&di);
+         if (qp)
+           {
+             dataiterator_init(&di, pool, s->repo, 0, PRODUCT_REFERENCEFILE, refbasename, SEARCH_STRING);
+             while (dataiterator_step(&di))
+               queue_push(qp, di.solvid);
+             dataiterator_free(&di);
+           }
        }
     }
   else if (qp)