| diff --git Makefile Makefile |
| index 2748ac8..cf3292a 100644 |
| --- Makefile |
| +++ Makefile |
| @@ -13,37 +13,48 @@ |
| # |
| |
| # Subdirectories we build in |
| -TOPSUBDIRS = doc/manpages doc/technical csrc schema javasrc apps `cat local.subdirs 2>/dev/null || :` |
| +TOPSUBDIRS = doc/manpages doc/technical csrc schema `cat local.subdirs 2>/dev/null || :` |
| # Packing list for packaging |
| PACKLIST = Makefile README LICENSE NEWS NOTICES configure doc/index.txt $(TOPSUBDIRS) android experiments |
| BLDMSG = printf '=== %s ' 'Building $@ in' && pwd |
| |
| +# Include build parameters |
| +include csrc/conf.mk |
| + |
| default all: _always |
| for i in $(TOPSUBDIRS); do \ |
| (cd "$$i" && pwd && $(MAKE) $@) || exit 1; \ |
| done |
| - (cd csrc/lib && { test -f "$$HOME/.ccnx/.ccnx_keystore" || $(MAKE) test; }; ) |
| + if [ "x$(BUILD_JAVA)" = "xtrue" ]; then \ |
| + (cd javasrc && $(MAKE) $@); \ |
| + if [ "x$(BUILD_APPS)" = "xtrue" ]; then \ |
| + (cd apps && $(MAKE) $@); \ |
| + fi; \ |
| + fi |
| mkdir -p ./lib ./bin |
| test -d ./include || ln -s ./csrc/include |
| (cd csrc && $(MAKE) install INSTALL_BASE=`pwd`/..) |
| - (cd javasrc && $(MAKE) install INSTALL_BASE=`pwd`/..) |
| - (cd apps && $(MAKE) install INSTALL_BASE=`pwd`/..) |
| + if [ "x$(BUILD_JAVA)" = "xtrue" ]; then \ |
| + (cd javasrc && $(MAKE) install INSTALL_BASE=`pwd`/..); \ |
| + if [ "x$(BUILD_APPS)" = "xtrue" ]; then \ |
| + (cd apps && $(MAKE) install INSTALL_BASE=`pwd`/..); \ |
| + fi ;\ |
| + fi |
| |
| clean depend test check shared: _always |
| - for i in $(TOPSUBDIRS); do \ |
| + for i in $(TOPSUBDIRS) javasrc apps; do \ |
| (cd "$$i" && pwd && $(MAKE) $@) || exit 1; \ |
| done |
| @rm -f _always |
| |
| testinstall install uninstall: _always |
| - IB=`[ -z '$(INSTALL_BASE)' ] && grep ^INSTALL_BASE csrc/conf.mk 2>/dev/null | sed -e 's/ //g' || echo INSTALL_BASE=$(INSTALL_BASE)`; \ |
| - for i in $(TOPSUBDIRS); do \ |
| - (cd "$$i" && pwd && $(MAKE) $$IB $@) || exit 1; \ |
| + for i in $(TOPSUBDIRS) javasrc apps; do \ |
| + (cd "$$i" && pwd && $(MAKE) $@) || exit 1; \ |
| done |
| @rm -f _always |
| |
| documentation dist-docs: _always |
| - for i in $(TOPSUBDIRS) android; do \ |
| + for i in $(TOPSUBDIRS) javasrc apps android; do \ |
| (cd "$$i" && pwd && $(MAKE) $@) || exit 1; \ |
| done |
| @rm -f _always |
| diff --git apps/Makefile apps/Makefile |
| index acc347c..f0d8638 100644 |
| --- apps/Makefile |
| +++ apps/Makefile |
| @@ -19,7 +19,7 @@ |
| |
| SUBDIRS = HttpProxy ccnChat ccnFileProxy `cat local.subdirs 2>/dev/null || :` |
| MAKEF = -f ../conf.mk -f dir.mk -f ../subr.mk $(PASSTHRU) |
| -PASSTHRU = `[ -z '$(INSTALL_BASE)' ] || echo INSTALL_BASE=$(INSTALL_BASE)` |
| +PASSTHRU = `[ -z '$(INSTALL_BASE)' ] || echo INSTALL_BASE=$(DESTDIR)$(INSTALL_BASE)` |
| CFLAGS = -g |
| CSRCDIR = ../csrc |
| |
| diff --git apps/java.mk apps/java.mk |
| index df9358e..d1cf718 100644 |
| --- apps/java.mk |
| +++ apps/java.mk |
| @@ -12,28 +12,22 @@ |
| # FOR A PARTICULAR PURPOSE. |
| # |
| |
| +include ../conf.mk |
| + |
| ANT = `command -v ant || echo echo SKIPPING ant` |
| LIBS = $(JAR) |
| WHINE = sh -c "type $(ANT) 2>/dev/null || \ |
| echo Skipping java build in $$(pwd -L) - \ |
| $(ANT) is not installed; " |
| -# Default, the top-level Makefile default target will |
| -# call the install target here but override INSTALL_BASE |
| -# with dir in the source tree |
| -INSTALL_LIB = $(INSTALL_BASE)/lib |
| -INSTALL_BIN = $(INSTALL_BASE)/bin |
| -INSTALL = cp |
| -CP = cp |
| -LS = /bin/ls |
| |
| default all: jar |
| check: test |
| |
| install: |
| @test -f $(JAR) && $(MAKE) real_install \ |
| - INSTALL_BASE=$(INSTALL_BASE) \ |
| - INSTALL_LIB=$(INSTALL_LIB) \ |
| - INSTALL_BIN=$(INSTALL_BIN) || $(WARN_NO_INSTALL) |
| + INSTALL_BASE=$(DESTDIR)$(INSTALL_BASE) \ |
| + INSTALL_LIB=$(DESTDIR)$(INSTALL_LIB) \ |
| + INSTALL_BIN=$(DESTDIR)$(INSTALL_BIN) || $(WARN_NO_INSTALL) |
| |
| real_install: _always |
| test -d $(INSTALL_LIB) |
| @@ -43,8 +37,8 @@ real_install: _always |
| $(CP) -R tools/. $(INSTALL_BIN) |
| |
| uninstall: |
| - for i in $(LIBS) ""; do test -z "$$i" || rm -f $(INSTALL_LIB)/`basename $$i`; done |
| - for i in `$(LS) tools` "" ; do test -z "$$i" || rm -f $(INSTALL_BIN)/`basename $$i`; done |
| + for i in $(LIBS) ""; do test -z "$$i" || rm -f $(DESTDIR)$(INSTALL_LIB)/`basename $$i`; done |
| + for i in `$(LS) tools` "" ; do test -z "$$i" || rm -f $(DESTDIR)$(INSTALL_BIN)/`basename $$i`; done |
| |
| # Use ant to actually do the work for these targets |
| jar test: _always |
| diff --git csrc/ccnd/ccnd-init-keystore-helper.sh csrc/ccnd/ccnd-init-keystore-helper.sh |
| deleted file mode 100755 |
| index ede0153..0000000 |
| --- csrc/ccnd/ccnd-init-keystore-helper.sh |
| +++ /dev/null |
| @@ -1,47 +0,0 @@ |
| -#!/bin/sh |
| -# ccnd/ccnd-init-keystore-helper.sh |
| -# |
| -# Part of the CCNx distribution. |
| -# |
| -# Copyright (C) 2009 Palo Alto Research Center, Inc. |
| -# |
| -# This work is free software; you can redistribute it and/or modify it under |
| -# the terms of the GNU General Public License version 2 as published by the |
| -# Free Software Foundation. |
| -# This work 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. |
| -# |
| -: ${RSA_KEYSIZE:=1024} |
| -exec >&2 |
| -Fail () { |
| - echo '*** Failed' "$*" |
| - exit 1 |
| -} |
| -cd `dirname "$1"` || Fail bad setup |
| -umask 077 |
| -trap 'rm -f *.pem openssl.cnf p' 0 |
| -cat <<EOF >openssl.cnf |
| -# This is not really relevant because we're not sending cert requests anywhere, |
| -# but openssl req can refuse to go on if it has no config file. |
| -[ req ] |
| -distinguished_name = req_distinguished_name |
| -[ req_distinguished_name ] |
| -countryName = Country Name (2 letter code) |
| -countryName_default = AU |
| -countryName_min = 2 |
| -countryName_max = 2 |
| -EOF |
| -openssl req -config openssl.cnf \ |
| - -newkey rsa:$RSA_KEYSIZE \ |
| - -x509 \ |
| - -keyout private_key.pem \ |
| - -out certout.pem \ |
| - -subj /CN="CCND-internal" \ |
| - -nodes || Fail openssl req |
| -openssl pkcs12 -export \ |
| - -name "CCND" \ |
| - -out "$1" \ |
| - -in certout.pem \ |
| - -inkey private_key.pem \ |
| - -password file:p || Fail openssl pkcs12 |
| diff --git csrc/ccnd/dir.mk csrc/ccnd/dir.mk |
| index 72c8438..2ec0946 100644 |
| --- csrc/ccnd/dir.mk |
| +++ csrc/ccnd/dir.mk |
| @@ -15,7 +15,7 @@ |
| LDLIBS = -L$(CCNLIBDIR) $(MORE_LDLIBS) -lccn |
| CCNLIBDIR = ../lib |
| |
| -INSTALLED_PROGRAMS = ccnd ccndsmoketest ccnd-init-keystore-helper |
| +INSTALLED_PROGRAMS = ccnd ccndsmoketest |
| PROGRAMS = $(INSTALLED_PROGRAMS) |
| DEBRIS = anything.ccnb contentobjecthash.ccnb contentmishash.ccnb \ |
| contenthash.ccnb |
| @@ -24,7 +24,7 @@ BROKEN_PROGRAMS = |
| CSRC = ccnd_main.c ccnd.c ccnd_msg.c ccnd_stats.c ccnd_internal_client.c ccndsmoketest.c |
| HSRC = ccnd_private.h |
| SCRIPTSRC = testbasics fortunes.ccnb contentobjecthash.ref anything.ref \ |
| - ccnd-init-keystore-helper.sh minsuffix.ref |
| + minsuffix.ref |
| |
| default: $(PROGRAMS) |
| |
| @@ -40,10 +40,6 @@ ccnd: $(CCND_OBJ) ccnd_built.sh |
| ccnd_built.sh: |
| touch ccnd_built.sh |
| |
| -ccnd-init-keystore-helper: ccnd-init-keystore-helper.sh |
| - sed -e 's@/bin/sh@'`which sh`'@g' ccnd-init-keystore-helper.sh > $@ |
| - chmod +x $@ |
| - |
| ccndsmoketest: ccndsmoketest.o |
| $(CC) $(CFLAGS) -o $@ ccndsmoketest.o $(LDLIBS) |
| |
| diff --git csrc/configure csrc/configure |
| index 962d76a..e838792 100755 |
| --- csrc/configure |
| +++ csrc/configure |
| @@ -39,16 +39,22 @@ TryAppend "`uname -sr | sed -e 's/ /-/g'`" |
| TryAppend "local" |
| TryScript "`uname`" "$@" |
| TryScript "local" "$@" |
| -ProvideDefault CPREFLAGS = -I../include |
| -ProvideDefault PCAP_PROGRAMS = ccndumppcap |
| -ProvideDefault RESOLV_LIBS = -lresolv |
| +ProvideDefault CC = ${CC:=cc} |
| +ProvideDefault CPREFLAGS = -I../include ${CFLAGS:-} |
| +ProvideDefault PCAP_PROGRAMS = ${PCAP_PROGRAMS:-ccndumppcap} |
| +ProvideDefault RESOLV_LIBS = ${RESOLV_LIBS:--lresolv} |
| ProvideDefault INSTALL_BASE = ${INSTALL_BASE:-/usr/local} |
| -ProvideDefault INSTALL_INCLUDE = '$(INSTALL_BASE)/include' |
| -ProvideDefault INSTALL_LIB = '$(INSTALL_BASE)/lib' |
| -ProvideDefault INSTALL_BIN = '$(INSTALL_BASE)/bin' |
| -ProvideDefault INSTALL = install |
| -ProvideDefault RM = rm -f |
| -ProvideDefault SH = /bin/sh |
| +ProvideDefault INSTALL_INCLUDE = ${INSTALL_INCLUDE:-\$(INSTALL_BASE)/include} |
| +ProvideDefault INSTALL_LIB = ${INSTALL_LIB:-\$(INSTALL_BASE)/lib} |
| +ProvideDefault INSTALL_BIN = ${INSTALL_BIN:-\$(INSTALL_BASE)/bin} |
| +ProvideDefault INSTALL = ${INSTALL:-install} |
| +ProvideDefault CP = ${CP:-cp} |
| +ProvideDefault RM = ${RM:-rm -f} |
| +ProvideDefault SH = ${SH:-/bin/sh} |
| +ProvideDefault LS = ${LS:-/bin/ls} |
| + |
| +ProvideDefault BUILD_JAVA = ${BUILD_JAVA:-true} |
| +ProvideDefault BUILD_APPS = ${BUILD_APPS:-true} |
| |
| echo ============= conf.mk =============>&2 |
| cat conf.mk >&2 |
| diff --git csrc/include/ccn/ccn.h csrc/include/ccn/ccn.h |
| index 548d5d4..22990fb 100644 |
| --- csrc/include/ccn/ccn.h |
| +++ csrc/include/ccn/ccn.h |
| @@ -911,7 +911,7 @@ int ccn_encode_StatusResponse(struct ccn_charbuf *buf, |
| * error encountered during a call using the given handle. |
| * ccn_seterror records error info, ccn_geterror gets it. |
| */ |
| -void ccn_perror(struct ccn *h, const char *s); |
| +void ccn_perror(struct ccn *h, const char *s, ...); |
| int ccn_seterror(struct ccn *h, int error_code); |
| int ccn_geterror(struct ccn *h); |
| |
| diff --git csrc/lib/ccn_client.c csrc/lib/ccn_client.c |
| index 606fd36..35f2b43 100644 |
| --- csrc/lib/ccn_client.c |
| +++ csrc/lib/ccn_client.c |
| @@ -163,9 +163,12 @@ tv_earlier(const struct timeval *a, const struct timeval *b) |
| * where available. |
| */ |
| void |
| -ccn_perror(struct ccn *h, const char *s) |
| +ccn_perror(struct ccn *h, const char *s, ...) |
| { |
| const char *dlm = ": "; |
| + va_list ap; |
| + va_start(ap, s); |
| + |
| if (s == NULL) { |
| if (h->err > 0) |
| s = strerror(h->err); |
| @@ -173,8 +176,10 @@ ccn_perror(struct ccn *h, const char *s) |
| dlm = s = ""; |
| } |
| // XXX - time stamp |
| - fprintf(stderr, "ccn_client.c:%d[%d] - error %d%s%s\n", |
| - h->errline, (int)getpid(), h->err, dlm, s); |
| + fprintf(stderr, "ccn_client.c:%d[%d] - error %d%s", |
| + h->errline, (int)getpid(), h->err, dlm); |
| + vfprintf(stderr, s, ap); |
| + fprintf(stderr, "\n"); |
| } |
| |
| static int |
| @@ -2562,6 +2567,62 @@ ccn_get_public_key(struct ccn *h, |
| return(res); |
| } |
| |
| +int |
| +ccn_load_key_or_create(struct ccn *h, |
| + const char *keystore, |
| + struct ccn_charbuf *default_pubid, |
| + size_t key_size) |
| +{ |
| + const char *password = NULL; |
| + int res = 0; |
| + |
| + password = getenv ("CCNX_KEYSTORE_PASSWORD"); |
| + if (password == 0) { |
| + password = "Th1s1sn0t8g00dp8ssw0rd."; |
| + } |
| + |
| + res = ccn_load_private_key(h, |
| + keystore, |
| + password, |
| + default_pubid); |
| + |
| + if (res != 0 || default_pubid->length != key_size) { |
| + // two cases, either file exists and we password is wrong or file does not exist |
| + |
| + if (access (keystore, R_OK) == 0) { |
| + ccn_perror (h, "Keystore file [%s] exists, but private key cannot be loaded. " |
| + "Check if CCNX_KEYSTORE_PASSWORD is set to a correct password, " |
| + "otherwise remove [%s] and it will be automatically created.", |
| + keystore, keystore); |
| + res = NOTE_ERR (h, -1); |
| + return res; |
| + } |
| + |
| + ccn_perror (h, "Keystore [%s] does not exist and will be automatically created", keystore); |
| + |
| + res = ccn_keystore_file_init ((char*)keystore, (char*)password, |
| + "ccnxuser", 0, 3650); // create a key valid for 10 years |
| + if (res != 0) { |
| + ccn_perror (h, "Cannot create keystore [%s]", keystore); |
| + res = NOTE_ERRNO (h); |
| + return res; |
| + } |
| + |
| + res = ccn_load_private_key(h, |
| + keystore, |
| + password, |
| + default_pubid); |
| + if (res != 0 || default_pubid->length != key_size) { |
| + // this definitely should not happen |
| + ccn_perror (h, "Cannot load keystore [%s] just after it has been created", keystore); |
| + res = NOTE_ERRNO (h); |
| + return res; |
| + } |
| + } |
| + |
| + return res; |
| +} |
| + |
| /** |
| * This is mostly for use within the library, |
| * but may be useful for some clients. |
| @@ -2582,6 +2643,7 @@ ccn_chk_signing_params(struct ccn *h, |
| int i; |
| int conflicting; |
| int needed; |
| + struct stat sb; |
| |
| if (params != NULL) |
| *result = *params; |
| @@ -2607,23 +2669,57 @@ ccn_chk_signing_params(struct ccn *h, |
| temp = ccn_charbuf_create(); |
| if (default_pubid == NULL || temp == NULL) |
| return(NOTE_ERRNO(h)); |
| + |
| + res = -1; |
| + |
| + // check CCNX_DIR |
| ccnx_dir = getenv("CCNX_DIR"); |
| - if (ccnx_dir == NULL || ccnx_dir[0] == 0) { |
| - home = getenv("HOME"); |
| - if (home == NULL) |
| - home = ""; |
| + if (ccnx_dir != NULL && ccnx_dir[0] != 0) { |
| + ccn_charbuf_reset(temp); |
| + ccn_charbuf_putf(temp, "%s/.ccnx_keystore", ccnx_dir); |
| + |
| + res = ccn_load_key_or_create (h, |
| + ccn_charbuf_as_string (temp), |
| + default_pubid, |
| + sizeof(result->pubid)); |
| + } |
| + |
| + if (res < 0) { |
| + // check HOME |
| + home = getenv("HOME"); |
| + if (home != NULL) { |
| + // step 1. Check if home directory exists |
| + ccn_charbuf_reset(temp); |
| + ccn_charbuf_putf(temp, "%s/.ccnx", home); |
| + |
| + res = stat (ccn_charbuf_as_string (temp), &sb); |
| + if (res != 0 || !(sb.st_mode & S_IFDIR)) |
| + { |
| + res = mkdir (ccn_charbuf_as_string (temp), S_IRWXU); |
| + if (res != 0) |
| + { |
| + ccn_perror (h, "Failed to create directory [%s]", ccn_charbuf_as_string (temp)); |
| + } |
| + } |
| + |
| + ccn_charbuf_reset(temp); |
| ccn_charbuf_putf(temp, "%s/.ccnx/.ccnx_keystore", home); |
| + |
| + res = ccn_load_key_or_create (h, |
| + ccn_charbuf_as_string (temp), |
| + default_pubid, |
| + sizeof(result->pubid)); |
| + } |
| } |
| - else |
| - ccn_charbuf_putf(temp, "%s/.ccnx_keystore", ccnx_dir); |
| - res = ccn_load_private_key(h, |
| - ccn_charbuf_as_string(temp), |
| - "Th1s1sn0t8g00dp8ssw0rd.", |
| - default_pubid); |
| - if (res == 0 && default_pubid->length == sizeof(result->pubid)) { |
| + |
| + if (res == 0) { |
| h->default_pubid = default_pubid; |
| default_pubid = NULL; |
| } |
| + else { |
| + ccn_perror(h, "Fail to load private key from keystore"); |
| + res = NOTE_ERRNO (h); |
| + } |
| } |
| if (h->default_pubid == NULL) |
| res = NOTE_ERRNO(h); |
| diff --git csrc/lib/ccn_initkeystore.sh csrc/lib/ccn_initkeystore.sh |
| deleted file mode 100755 |
| index 12bc9e3..0000000 |
| --- csrc/lib/ccn_initkeystore.sh |
| +++ /dev/null |
| @@ -1,51 +0,0 @@ |
| -#!/bin/sh |
| -# lib/ccn_initkeystore.sh |
| -# |
| -# Part of the CCNx distribution. |
| -# |
| -# Copyright (C) 2009-2010 Palo Alto Research Center, Inc. |
| -# |
| -# This work is free software; you can redistribute it and/or modify it under |
| -# the terms of the GNU General Public License version 2 as published by the |
| -# Free Software Foundation. |
| -# This work 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. |
| -# |
| -# Create a ccn keystore without relying on java |
| -: ${RSA_KEYSIZE:=1024} |
| -: ${CCN_USER:=`id -n -u`} |
| -Fail () { |
| - echo '*** Failed' "$*" |
| - exit 1 |
| -} |
| -test -d .ccnx && rm -rf .ccnx |
| -test $RSA_KEYSIZE -ge 512 || Fail \$RSA_KEYSIZE too small to sign CCN content |
| -(umask 077 && mkdir .ccnx) || Fail $0 Unable to create .ccnx directory |
| -cd .ccnx |
| -umask 077 |
| -# Set a trap to cleanup on the way out |
| -trap 'rm -f *.pem openssl.cnf' 0 |
| -cat <<EOF >openssl.cnf |
| -# This is not really relevant because we're not sending cert requests anywhere, |
| -# but openssl req can refuse to go on if it has no config file. |
| -[ req ] |
| -distinguished_name = req_distinguished_name |
| -[ req_distinguished_name ] |
| -countryName = Country Name (2 letter code) |
| -countryName_default = AU |
| -countryName_min = 2 |
| -countryName_max = 2 |
| -EOF |
| -openssl req -config openssl.cnf \ |
| - -newkey rsa:$RSA_KEYSIZE \ |
| - -x509 \ |
| - -keyout private_key.pem \ |
| - -out certout.pem \ |
| - -subj /CN="$CCN_USER" \ |
| - -nodes || Fail openssl req |
| -openssl pkcs12 -export -name "ccnxuser" \ |
| - -out .ccnx_keystore \ |
| - -in certout.pem \ |
| - -inkey private_key.pem \ |
| - -password pass:'Th1s1sn0t8g00dp8ssw0rd.' || Fail openssl pkcs12 |
| diff --git csrc/lib/dir.mk csrc/lib/dir.mk |
| index 6489299..c03316d 100644 |
| --- csrc/lib/dir.mk |
| +++ csrc/lib/dir.mk |
| @@ -21,7 +21,6 @@ PROGRAMS = hashtbtest skel_decode_test \ |
| |
| BROKEN_PROGRAMS = |
| DEBRIS = ccn_verifysig _bt_* |
| -SCRIPTSRC = ccn_initkeystore.sh |
| CSRC = ccn_bloom.c \ |
| ccn_btree.c ccn_btree_content.c ccn_btree_store.c \ |
| ccn_buf_decoder.c ccn_buf_encoder.c ccn_bulkdata.c \ |
| @@ -56,28 +55,28 @@ default all: dtag_check lib $(PROGRAMS) |
| # Don't try to build shared libs right now. |
| # all: shlib |
| |
| -all: basicparsetest ccn_verifysig |
| +# all: basicparsetest ccn_verifysig |
| |
| install: install_headers |
| install_headers: |
| - @test -d $(INSTALL_INCLUDE) || (echo $(INSTALL_INCLUDE) does not exist. Please mkdir -p $(INSTALL_INCLUDE) if this is what you intended. && exit 2) |
| - mkdir -p $(INSTALL_INCLUDE)/ccn |
| + @test -d $(DESTDIR)$(INSTALL_INCLUDE) || (echo $(DESTDIR)$(INSTALL_INCLUDE) does not exist. Please mkdir -p $(DESTDIR)$(INSTALL_INCLUDE) if this is what you intended. && exit 2) |
| + mkdir -p $(DESTDIR)$(INSTALL_INCLUDE)/ccn |
| for i in `cd ../include/ccn && echo *.h`; do \ |
| - cmp -s ../include/ccn/$$i $(INSTALL_INCLUDE)/ccn/$$i || \ |
| - cp ../include/ccn/$$i $(INSTALL_INCLUDE)/ccn/$$i || \ |
| + cmp -s ../include/ccn/$$i $(DESTDIR)$(INSTALL_INCLUDE)/ccn/$$i || \ |
| + cp ../include/ccn/$$i $(DESTDIR)$(INSTALL_INCLUDE)/ccn/$$i || \ |
| exit 1; \ |
| done |
| |
| uninstall: uninstall_headers |
| uninstall_headers: |
| - test -L $(INSTALL_INCLUDE)/ccn && $(RM) $(INSTALL_INCLUDE)/ccn ||: |
| - test -L $(INSTALL_INCLUDE) || $(RM) -r $(INSTALL_INCLUDE)/ccn |
| + test -L $(DESTDIR)$(INSTALL_INCLUDE)/ccn && $(RM) $(DESTDIR)$(INSTALL_INCLUDE)/ccn ||: |
| + test -L $(DESTDIR)$(INSTALL_INCLUDE) || $(RM) -r $(DESTDIR)$(INSTALL_INCLUDE)/ccn |
| |
| shlib: $(SHLIBNAME) |
| |
| lib: libccn.a |
| |
| -test: default keystore_check encodedecodetest ccnbtreetest |
| +test: default encodedecodetest ccnbtreetest |
| ./encodedecodetest -o /dev/null |
| ./ccnbtreetest |
| ./ccnbtreetest - < q.dat |
| @@ -86,14 +85,6 @@ test: default keystore_check encodedecodetest ccnbtreetest |
| dtag_check: _always |
| @./gen_dtag_table 2>/dev/null | diff - ccn_dtag_table.c | grep '^[<]' >/dev/null && echo '*** Warning: ccn_dtag_table.c may be out of sync with tagnames.cvsdict' || : |
| |
| -keystore_check: ccn_initkeystore.sh |
| - test -f "$$HOME/.ccnx/.ccnx_keystore" || $(MAKE) -f dir.mk new_keystore |
| - |
| -new_keystore: |
| - @echo === CCNx Keystore not found in your home directory |
| - @echo === I will create one for you now '(^C to abort)' |
| - sleep 1 && sh ccn_initkeystore.sh && sleep 3 && mv .ccnx "$$HOME" |
| - |
| libccn.a: $(LIB_OBJS) |
| ar crus $@ $(LIB_OBJS) |
| |
| @@ -113,7 +104,7 @@ skel_decode_test: skel_decode_test.o |
| basicparsetest: basicparsetest.o libccn.a |
| $(CC) $(CFLAGS) -o $@ basicparsetest.o $(LDLIBS) $(OPENSSL_LIBS) -lcrypto |
| |
| -encodedecodetest: encodedecodetest.o |
| +encodedecodetest: encodedecodetest.o libccn.a |
| $(CC) $(CFLAGS) -o $@ encodedecodetest.o $(LDLIBS) $(OPENSSL_LIBS) -lcrypto |
| |
| ccn_digest.o: |
| @@ -149,16 +140,16 @@ ccn_fetch.o: |
| ccn_verifysig.o: |
| $(CC) $(CFLAGS) $(OPENSSL_CFLAGS) -c ccn_verifysig.c |
| |
| -ccn_verifysig: ccn_verifysig.o |
| +ccn_verifysig: ccn_verifysig.o libccn.a |
| $(CC) $(CFLAGS) -o $@ ccn_verifysig.o $(LDLIBS) $(OPENSSL_LIBS) -lcrypto |
| |
| signbenchtest.o: |
| $(CC) $(CFLAGS) $(OPENSSL_CFLAGS) -c signbenchtest.c |
| |
| -signbenchtest: signbenchtest.o |
| +signbenchtest: signbenchtest.o libccn.a |
| $(CC) $(CFLAGS) -o $@ signbenchtest.o $(LDLIBS) $(OPENSSL_LIBS) -lcrypto |
| |
| -ccndumppcap: ccndumppcap.o |
| +ccndumppcap: ccndumppcap.o libccn.a |
| $(CC) $(CFLAGS) -o $@ ccndumppcap.o $(LDLIBS) $(OPENSSL_LIBS) -lcrypto -lpcap |
| |
| ccnbtreetest.o: |
| diff --git csrc/lib/encodedecodetest.c csrc/lib/encodedecodetest.c |
| index be6a853..09e02ea 100644 |
| --- csrc/lib/encodedecodetest.c |
| +++ csrc/lib/encodedecodetest.c |
| @@ -210,17 +210,19 @@ main (int argc, char *argv[]) { |
| NULL}; |
| struct path * cur_path = NULL; |
| struct ccn_keystore *keystore = ccn_keystore_create(); |
| - char *home = getenv("HOME"); |
| - char *keystore_suffix = "/.ccnx/.ccnx_keystore"; |
| char *keystore_name = NULL; |
| + char *keystore_password = NULL; |
| |
| int i; |
| |
| - while ((i = getopt(argc, argv, "k:o:")) != -1) { |
| + while ((i = getopt(argc, argv, "k:p:o:")) != -1) { |
| switch (i) { |
| case 'k': |
| keystore_name = optarg; |
| break; |
| + case 'p': |
| + keystore_password = optarg; |
| + break; |
| case 'o': |
| outname = optarg; |
| break; |
| @@ -231,21 +233,38 @@ main (int argc, char *argv[]) { |
| } |
| |
| |
| - if (keystore_name == NULL && home == NULL) { |
| - printf("Unable to determine home directory for keystore\n"); |
| - exit(1); |
| - } |
| if (keystore_name == NULL) { |
| - keystore_name = calloc(1, strlen(home) + strlen(keystore_suffix) + 1); |
| - strcat(keystore_name, home); |
| - strcat(keystore_name, keystore_suffix); |
| + keystore_name = tmpnam (NULL); // should be ok, there is just single thread |
| } |
| |
| - if (0 != ccn_keystore_init(keystore, keystore_name, "Th1s1sn0t8g00dp8ssw0rd.")) { |
| - printf("Failed to initialize keystore\n"); |
| - exit(1); |
| + if (keystore_password == NULL) { |
| + keystore_password = "Th1s1sn0t8g00dp8ssw0rd."; |
| } |
| |
| + res = ccn_keystore_init (keystore, keystore_name, keystore_password); |
| + if (res != 0) |
| + { |
| + printf ("Initializing keystore in %s\n", keystore_name); |
| + |
| + res = ccn_keystore_file_init (keystore_name, keystore_password, |
| + "ccnxuser", 0, 3650); // create a key valid for 10 years |
| + if (res != 0) { |
| + fprintf (stderr, "Cannot create keystore [%s]", keystore_name); |
| + return res; |
| + } |
| + |
| + // init again |
| + res = ccn_keystore_init(keystore, keystore_name, keystore_password); |
| + if (res != 0) { |
| + printf("Failed to initialize keystore\n"); |
| + exit(1); |
| + } |
| + } |
| + |
| + |
| + |
| + |
| + |
| printf("Creating signed_info\n"); |
| res = ccn_signed_info_create(signed_info, |
| /*pubkeyid*/ccn_keystore_public_key_digest(keystore), |
| diff --git csrc/subr.mk csrc/subr.mk |
| index e24c230..3361a49 100644 |
| --- csrc/subr.mk |
| +++ csrc/subr.mk |
| @@ -31,20 +31,20 @@ $(OBJDIR)/dir.mk: dir.mk |
| cp -p dir.mk $(OBJDIR)/dir.mk |
| |
| install_libs: $(LIBS) |
| - @test -d $(INSTALL_LIB) || (echo $(INSTALL_LIB) does not exist. Please mkdir -p $(INSTALL_LIB) if this is what you intended. && exit 2) |
| - for i in $(LIBS) ""; do test -z "$$i" || $(INSTALL) $$i $(INSTALL_LIB); done |
| + @test -d $(DESTDIR)$(INSTALL_LIB) || (echo $(DESTDIR)$(INSTALL_LIB) does not exist. Please mkdir -p $(DESTDIR)$(INSTALL_LIB) if this is what you intended. && exit 2) |
| + for i in $(LIBS) ""; do test -z "$$i" || $(INSTALL) $$i $(DESTDIR)$(INSTALL_LIB); done |
| |
| install_programs: $(INSTALLED_PROGRAMS) |
| - @test -d $(INSTALL_BIN) || (echo $(INSTALL_BIN) does not exist. Please mkdir -p $(INSTALL_BIN) if this is what you intended. && exit 2) |
| - for i in $(INSTALLED_PROGRAMS) ""; do test -z "$$i" || $(INSTALL) $$i $(INSTALL_BIN); done |
| + @test -d $(DESTDIR)$(INSTALL_BIN) || (echo $(DESTDIR)$(INSTALL_BIN) does not exist. Please mkdir -p $(DESTDIR)$(INSTALL_BIN) if this is what you intended. && exit 2) |
| + for i in $(INSTALLED_PROGRAMS) ""; do test -z "$$i" || $(INSTALL) $$i $(DESTDIR)$(INSTALL_BIN); done |
| |
| install: install_libs install_programs |
| |
| uninstall_libs: |
| - for i in $(LIBS) ""; do test -z "$$i" || $(RM) $(INSTALL_LIB)/$$i; done |
| + for i in $(LIBS) ""; do test -z "$$i" || $(RM) $(DESTDIR)$(INSTALL_LIB)/$$i; done |
| |
| uninstall_programs: |
| - for i in $(PROGRAMS) ""; do test -z "$$i" || $(RM) $(INSTALL_BIN)/$$i; done |
| + for i in $(PROGRAMS) ""; do test -z "$$i" || $(RM) $(DESTDIR)$(INSTALL_BIN)/$$i; done |
| |
| uninstall: uninstall_libs uninstall_programs |
| |
| diff --git javasrc/Makefile javasrc/Makefile |
| index c5b8444..d2237b6 100644 |
| --- javasrc/Makefile |
| +++ javasrc/Makefile |
| @@ -12,6 +12,8 @@ |
| # FOR A PARTICULAR PURPOSE. |
| # |
| |
| +include ../csrc/conf.mk |
| + |
| ANT = `command -v ant || echo echo SKIPPING ant` |
| JAR = ccn.jar |
| LIBS = $(JAR) lib/bcprov-jdk16-143.jar lib/kxml2-2.3.0.jar $(EXTRA_LIBS) |
| @@ -23,20 +25,15 @@ WARN_NO_INSTALL = echo Nothing installed from javasrc/ |
| # Default, the top-level Makefile default target will |
| # call the install target here but override INSTALL_BASE |
| # with dir in the source tree |
| -INSTALL_LIB = $(INSTALL_BASE)/lib |
| -INSTALL_BIN = $(INSTALL_BASE)/bin |
| -INSTALL = cp |
| -CP = cp |
| -LS = /bin/ls |
| |
| default all: jar |
| check: test |
| |
| install: |
| @test -f $(JAR) && $(MAKE) real_install \ |
| - INSTALL_BASE=$(INSTALL_BASE) \ |
| - INSTALL_LIB=$(INSTALL_LIB) \ |
| - INSTALL_BIN=$(INSTALL_BIN) || $(WARN_NO_INSTALL) |
| + INSTALL_BASE=$(DESTDIR)$(INSTALL_BASE) \ |
| + INSTALL_LIB=$(DESTDIR)$(INSTALL_LIB) \ |
| + INSTALL_BIN=$(DESTDIR)$(INSTALL_BIN) || $(WARN_NO_INSTALL) |
| |
| real_install: _always |
| test -d $(INSTALL_LIB) |
| @@ -46,8 +43,8 @@ real_install: _always |
| $(CP) -R tools/. $(INSTALL_BIN) |
| |
| uninstall: |
| - for i in $(LIBS) ""; do test -z "$$i" || rm -f $(INSTALL_LIB)/`basename $$i`; done |
| - for i in `$(LS) tools` "" ; do test -z "$$i" || rm -f $(INSTALL_BIN)/`basename $$i`; done |
| + for i in $(LIBS) ""; do test -z "$$i" || rm -f $(DESTDIR)$(INSTALL_LIB)/`basename $$i`; done |
| + for i in `$(LS) tools` "" ; do test -z "$$i" || rm -f $(DESTDIR)$(INSTALL_BIN)/`basename $$i`; done |
| |
| # Use ant to actually do the work for these targets |
| jar test: _always |