]> the.earth.li Git - onak.git/blobdiff - sixdegrees.c
Fix compilation with later versions of Nettle
[onak.git] / sixdegrees.c
index 9b13cfbca08cafa38ac094aeec1ee9897fcb4694..f7f15200dd0d7b424276e10f9dd90ceb2c02b301 100644 (file)
@@ -1,24 +1,36 @@
 /*
  * sixdegrees.c - List the size of the six degrees of trust away from a key.
- * 
- * Jonathan McDowell <noodles@earth.li>
  *
- * Copyright 2001-2002 Project Purple.
+ * Copyright 2001-2002 Jonathan McDowell <noodles@earth.li>
  *
- * $Id: sixdegrees.c,v 1.4 2003/06/04 20:57:12 noodles Exp $
+ * This program is free software: you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the Free
+ * Software Foundation; version 2 of the License.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program.  If not, see <https://www.gnu.org/licenses/>.
  */
 
+#include <getopt.h>
 #include <stdio.h>
 #include <stdlib.h>
+#include <string.h>
 
 #include "hash.h"
 #include "keydb.h"
 #include "keystructs.h"
 #include "ll.h"
+#include "log.h"
 #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;
@@ -31,7 +43,8 @@ unsigned long countdegree(struct stats_key *have, bool sigs, int maxdegree)
 
        while (curll != NULL && curdegree <= maxdegree) {
                if (sigs) {
-                       sigll = cached_getkeysigs(((struct stats_key *)
+                       sigll = dbctx->cached_getkeysigs(dbctx,
+                               ((struct stats_key *)
                                curll->object)->keyid);
                } else {
                        sigll = NULL;
@@ -76,22 +89,23 @@ 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;
 
-       cached_getkeysigs(keyid);
+       dbctx->cached_getkeysigs(dbctx, keyid);
 
        if ((keyinfo = findinhash(keyid)) == NULL) {
-               printf("Couldn't find key 0x%llX.\n", keyid);
+               printf("Couldn't find key 0x%016" PRIX64 ".\n", keyid);
                return;
        }
 
-       uid = keyid2uid(keyinfo->keyid);
-       printf("Six degrees for 0x%llX (%s):\n", keyinfo->keyid, uid);
+       uid = dbctx->keyid2uid(dbctx, keyinfo->keyid);
+       printf("Six degrees for 0x%016" PRIX64 " (%s):\n", keyinfo->keyid,
+                       uid);
        free(uid);
        uid = NULL;
 
@@ -104,34 +118,55 @@ 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);
        }
 }
 
 int main(int argc, char *argv[])
 {
-       uint64_t keyid = 0x5B430367;
+       int optchar;
+       char *configfile = NULL;
+       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;
+               }
+       }
 
-       if (argc == 2) {
-               keyid = strtoll(argv[1], NULL, 16);
+       if (optind < argc) {
+               keyid = strtoll(argv[optind], NULL, 16);
        }
 
-       readconfig();
-       initdb();
-       inithash();
-       sixdegrees(getfullkeyid(keyid));
-       destroyhash();
-       cleanupdb();
+       readconfig(configfile);
+       free(configfile);
+       initlogthing("sixdegrees", config.logfile);
+       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();
 
        return 0;