]> the.earth.li Git - onak.git/blobdiff - wotsap.c
Fix handling of other signature requirement
[onak.git] / wotsap.c
index 66dc94699d2dc12150e541b543b0e6e12c3d47c3..8996c9b2d11549ba8e9f7ff93177b8776db4e5e4 100644 (file)
--- a/wotsap.c
+++ b/wotsap.c
@@ -19,8 +19,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>
 #include <string.h>
 #include <arpa/inet.h>
 
+#include "build-config.h"
+
 #include "hash.h"
 #include "log.h"
 #include "onak-conf.h"
 #include "stats.h"
-#include "version.h"
 
 static struct ll *sortkeyll(struct ll *keys)
 {
@@ -84,12 +84,16 @@ static void wotsap(struct onak_dbctx *dbctx, uint64_t keyid, char *dir)
 
        /* Length of dir + "/" + "signatures" + NUL */
        tmppath = malloc(strlen(dir) + 12);
+       if (tmppath == NULL) {
+               fprintf(stderr, "Couldn't allocate memory for directory\n");
+               goto err;
+       }
 
        sprintf(tmppath, "%s/WOTVERSION", dir);
        file = fopen(tmppath, "w");
        if (file == NULL) {
                fprintf(stderr, "Couldn't open %s\n", tmppath);
-               return;
+               goto err;
        }
        fprintf(file, "0.2\n");
        fclose(file);
@@ -98,7 +102,7 @@ static void wotsap(struct onak_dbctx *dbctx, uint64_t keyid, char *dir)
        file = fopen(tmppath, "w");
        if (file == NULL) {
                fprintf(stderr, "Couldn't open %s\n", tmppath);
-               return;
+               goto err;
        }
        fprintf(file, "This is a Web of Trust archive.\n");
        fprintf(file, "The file format is documented at:\n");
@@ -110,21 +114,20 @@ static void wotsap(struct onak_dbctx *dbctx, uint64_t keyid, char *dir)
        names = fopen(tmppath, "w");
        if (names == NULL) {
                fprintf(stderr, "Couldn't open %s\n", tmppath);
-               return;
+               goto err;
        }
        sprintf(tmppath, "%s/keys", dir);
        keys = fopen(tmppath, "wb");
        if (keys == NULL) {
                fprintf(stderr, "Couldn't open %s\n", tmppath);
-               return;
+               goto err;
        }
        sprintf(tmppath, "%s/signatures", dir);
        sigs = fopen(tmppath, "wb");
        if (sigs == NULL) {
                fprintf(stderr, "Couldn't open %s\n", tmppath);
-               return;
+               goto err;
        }
-       free(tmppath);
 
        dbctx->cached_getkeysigs(dbctx, keyid);
        curkey = findinhash(keyid);
@@ -180,13 +183,15 @@ static void wotsap(struct onak_dbctx *dbctx, uint64_t keyid, char *dir)
        fclose(sigs);
        fclose(keys);
        fclose(names);
+err:
+       free(tmppath);
 }
 
 int main(int argc, char *argv[])
 {
        int optchar;
        char *configfile = NULL, *dir = NULL;
-       uint64_t keyid = 0x2DA8B985;
+       uint64_t keyid = 0x94FA372B2DA8B985;
        struct onak_dbctx *dbctx;
 
        while ((optchar = getopt(argc, argv, "c:")) != -1 ) {
@@ -203,11 +208,10 @@ int main(int argc, char *argv[])
 
        readconfig(configfile);
        initlogthing("wotsap", config.logfile);
-       dbctx = config.dbinit(true);
+       dbctx = config.dbinit(config.backend, true);
        if (dbctx != NULL) {
                inithash();
-               wotsap(dbctx, dbctx->getfullkeyid(dbctx, keyid),
-                       dir ? dir : ".");
+               wotsap(dbctx, keyid, dir ? dir : ".");
                destroyhash();
                dbctx->cleanupdb(dbctx);
        } else {
@@ -215,4 +219,5 @@ int main(int argc, char *argv[])
        }
        cleanuplogthing();
        cleanupconfig();
+       free(configfile);
 }