]> the.earth.li Git - onak.git/blobdiff - sixdegrees.c
Fix handling of other signature requirement
[onak.git] / sixdegrees.c
index 738f6264b6c1c17c8f1e959ceb27f4a805147181..f7f15200dd0d7b424276e10f9dd90ceb2c02b301 100644 (file)
@@ -13,8 +13,7 @@
  * more details.
  *
  * You should have received a copy of the GNU General Public License along with
- * this program; if not, write to the Free Software Foundation, Inc., 51
- * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * this program.  If not, see <https://www.gnu.org/licenses/>.
  */
 
 #include <getopt.h>
@@ -30,7 +29,8 @@
 #include "onak-conf.h"
 #include "stats.h"
 
-unsigned long countdegree(struct stats_key *have, bool sigs, int maxdegree)
+unsigned long countdegree(struct onak_dbctx *dbctx,
+               struct stats_key *have, bool sigs, int maxdegree)
 {
        unsigned long     count = 0, curdegree = 0;
        struct ll        *curll, *nextll, *sigll, *tmp;
@@ -43,7 +43,7 @@ unsigned long countdegree(struct stats_key *have, bool sigs, int maxdegree)
 
        while (curll != NULL && curdegree <= maxdegree) {
                if (sigs) {
-                       sigll = config.dbbackend->cached_getkeysigs(
+                       sigll = dbctx->cached_getkeysigs(dbctx,
                                ((struct stats_key *)
                                curll->object)->keyid);
                } else {
@@ -89,21 +89,21 @@ unsigned long countdegree(struct stats_key *have, bool sigs, int maxdegree)
        return count;
 }
 
-void sixdegrees(uint64_t keyid)
+void sixdegrees(struct onak_dbctx *dbctx, uint64_t keyid)
 {
        struct stats_key *keyinfo;
        int loop;
        long degree;
        char *uid;
 
-       config.dbbackend->cached_getkeysigs(keyid);
+       dbctx->cached_getkeysigs(dbctx, keyid);
 
        if ((keyinfo = findinhash(keyid)) == NULL) {
                printf("Couldn't find key 0x%016" PRIX64 ".\n", keyid);
                return;
        }
 
-       uid = config.dbbackend->keyid2uid(keyinfo->keyid);
+       uid = dbctx->keyid2uid(dbctx, keyinfo->keyid);
        printf("Six degrees for 0x%016" PRIX64 " (%s):\n", keyinfo->keyid,
                        uid);
        free(uid);
@@ -118,16 +118,16 @@ void sixdegrees(uint64_t keyid)
         * if it's signed by the key we're looking at.
         */
        initcolour(false);
-       degree = countdegree(keyinfo, true, 7);
+       countdegree(dbctx, keyinfo, true, 7);
 
        puts("\t\tSigned by\t\tSigns");
        for (loop = 1; loop < 7; loop++) {
                initcolour(false);
-               degree = countdegree(keyinfo, true, loop);
+               degree = countdegree(dbctx, keyinfo, true, loop);
                printf("Degree %d:\t%8ld", loop, degree);
 
                initcolour(false);
-               degree = countdegree(keyinfo, false, loop);
+               degree = countdegree(dbctx, keyinfo, false, loop);
                printf("\t\t%8ld\n", degree);
        }
 }
@@ -136,11 +136,15 @@ int main(int argc, char *argv[])
 {
        int optchar;
        char *configfile = NULL;
-       uint64_t keyid = 0x2DA8B985;
+       uint64_t keyid = 0x94FA372B2DA8B985;
+       struct onak_dbctx *dbctx;
 
        while ((optchar = getopt(argc, argv, "c:")) != -1 ) {
                switch (optchar) {
                case 'c':
+                       if (configfile != NULL) {
+                               free(configfile);
+                       }
                        configfile = strdup(optarg);
                        break;
                }
@@ -151,12 +155,17 @@ int main(int argc, char *argv[])
        }
 
        readconfig(configfile);
+       free(configfile);
        initlogthing("sixdegrees", config.logfile);
-       config.dbbackend->initdb(true);
-       inithash();
-       sixdegrees(config.dbbackend->getfullkeyid(keyid));
-       destroyhash();
-       config.dbbackend->cleanupdb();
+       dbctx = config.dbinit(config.backend, true);
+       if (dbctx != NULL) {
+               inithash();
+               sixdegrees(dbctx, keyid);
+               destroyhash();
+               dbctx->cleanupdb(dbctx);
+       } else {
+               fprintf(stderr, "Couldn't initialize key database.\n");
+       }
        cleanuplogthing();
        cleanupconfig();