mirror of
git://git.gnupg.org/gnupg.git
synced 2025-07-02 22:46:30 +02:00
changed structure of trustdb
This commit is contained in:
parent
3bcd3cd7b2
commit
c8f12e218f
28 changed files with 2323 additions and 979 deletions
|
@ -1,15 +1,14 @@
|
|||
## Process this file with automake to produce Makefile.in
|
||||
|
||||
INCLUDES = -I$(top_srcdir)/include
|
||||
INCLUDES = -I.. -I$(top_srcdir)/include
|
||||
EXTRA_DIST = OPTIONS
|
||||
needed_libs = ../cipher/libcipher.a ../mpi/libmpi.a ../util/libutil.a
|
||||
|
||||
bin_PROGRAMS = g10
|
||||
bin_PROGRAMS = g10 g10maint
|
||||
|
||||
g10_SOURCES = g10.c \
|
||||
common_source = \
|
||||
build-packet.c \
|
||||
compress.c \
|
||||
encode.c \
|
||||
encr-data.c \
|
||||
filter.h \
|
||||
free-packet.c \
|
||||
getkey.c \
|
||||
|
@ -18,7 +17,6 @@ g10_SOURCES = g10.c \
|
|||
skclist.c \
|
||||
ringedit.c \
|
||||
kbnode.c \
|
||||
keygen.c \
|
||||
main.h \
|
||||
mainproc.c \
|
||||
armor.c \
|
||||
|
@ -35,22 +33,29 @@ g10_SOURCES = g10.c \
|
|||
packet.h \
|
||||
parse-packet.c \
|
||||
passphrase.c \
|
||||
plaintext.c \
|
||||
pubkey-enc.c \
|
||||
seckey-cert.c \
|
||||
seskey.c \
|
||||
sign.c \
|
||||
import.c \
|
||||
export.c \
|
||||
comment.c \
|
||||
status.c \
|
||||
status.h \
|
||||
sign.c \
|
||||
plaintext.c \
|
||||
encr-data.c \
|
||||
encode.c \
|
||||
sig-check.c
|
||||
|
||||
|
||||
LDADD = -L ../cipher -L ../mpi -L ../util \
|
||||
-lcipher -lmpi -lutil
|
||||
g10_SOURCES = g10.c \
|
||||
$(common_source) \
|
||||
keygen.c
|
||||
|
||||
|
||||
$(PROGRAMS): ../cipher/libcipher.a ../mpi/libmpi.a ../util/libutil.a
|
||||
g10maint_SOURCES = g10maint.c \
|
||||
$(common_source)
|
||||
|
||||
LDADD = $(needed_libs)
|
||||
|
||||
$(PROGRAMS): $(needed_libs)
|
||||
|
||||
|
|
325
g10/Makefile.in
325
g10/Makefile.in
|
@ -1,8 +1,14 @@
|
|||
# Makefile.in generated automatically by automake 1.0 from Makefile.am
|
||||
# Makefile.in generated automatically by automake 1.2d from Makefile.am
|
||||
|
||||
# Copyright (C) 1994, 1995, 1996 Free Software Foundation, Inc.
|
||||
# Copyright (C) 1994, 1995, 1996, 1997 Free Software Foundation, Inc.
|
||||
# This Makefile.in is free software; the Free Software Foundation
|
||||
# gives unlimited permission to copy, distribute and modify it.
|
||||
# gives unlimited permission to copy and/or distribute it,
|
||||
# with or without modifications, as long as this notice is preserved.
|
||||
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
|
||||
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
|
||||
# PARTICULAR PURPOSE.
|
||||
|
||||
|
||||
SHELL = /bin/sh
|
||||
|
@ -32,22 +38,62 @@ pkgincludedir = $(includedir)/@PACKAGE@
|
|||
|
||||
top_builddir = ..
|
||||
|
||||
ACLOCAL = @ACLOCAL@
|
||||
AUTOCONF = @AUTOCONF@
|
||||
AUTOMAKE = @AUTOMAKE@
|
||||
AUTOHEADER = @AUTOHEADER@
|
||||
|
||||
INSTALL = @INSTALL@
|
||||
INSTALL_PROGRAM = @INSTALL_PROGRAM@
|
||||
INSTALL_DATA = @INSTALL_DATA@
|
||||
INSTALL_SCRIPT = @INSTALL_SCRIPT@
|
||||
transform = @program_transform_name@
|
||||
|
||||
INCLUDES = -I$(top_srcdir)/include
|
||||
NORMAL_INSTALL = :
|
||||
PRE_INSTALL = :
|
||||
POST_INSTALL = :
|
||||
NORMAL_UNINSTALL = :
|
||||
PRE_UNINSTALL = :
|
||||
POST_UNINSTALL = :
|
||||
build_alias = @build_alias@
|
||||
build_triplet = @build@
|
||||
host_alias = @host_alias@
|
||||
host_triplet = @host@
|
||||
target_alias = @target_alias@
|
||||
target_triplet = @target@
|
||||
CATALOGS = @CATALOGS@
|
||||
CATOBJEXT = @CATOBJEXT@
|
||||
CC = @CC@
|
||||
CIPHER_EXTRA_DIST = @CIPHER_EXTRA_DIST@
|
||||
CIPHER_EXTRA_OBJS = @CIPHER_EXTRA_OBJS@
|
||||
CPP = @CPP@
|
||||
DATADIRNAME = @DATADIRNAME@
|
||||
G10_LOCALEDIR = @G10_LOCALEDIR@
|
||||
GENCAT = @GENCAT@
|
||||
GMOFILES = @GMOFILES@
|
||||
GMSGFMT = @GMSGFMT@
|
||||
INSTOBJEXT = @INSTOBJEXT@
|
||||
INTLDEPS = @INTLDEPS@
|
||||
INTLLIBS = @INTLLIBS@
|
||||
INTLOBJS = @INTLOBJS@
|
||||
INTLSUB = @INTLSUB@
|
||||
MPI_EXTRA_ASM_OBJS = @MPI_EXTRA_ASM_OBJS@
|
||||
MSGFMT = @MSGFMT@
|
||||
PACKAGE = @PACKAGE@
|
||||
POFILES = @POFILES@
|
||||
POSUB = @POSUB@
|
||||
RANLIB = @RANLIB@
|
||||
VERSION = @VERSION@
|
||||
|
||||
INCLUDES = -I.. -I$(top_srcdir)/include
|
||||
EXTRA_DIST = OPTIONS
|
||||
needed_libs = ../cipher/libcipher.a ../mpi/libmpi.a ../util/libutil.a
|
||||
|
||||
bin_PROGRAMS = g10
|
||||
bin_PROGRAMS = g10 g10maint
|
||||
|
||||
g10_SOURCES = g10.c \
|
||||
common_source = \
|
||||
build-packet.c \
|
||||
compress.c \
|
||||
encode.c \
|
||||
encr-data.c \
|
||||
filter.h \
|
||||
free-packet.c \
|
||||
getkey.c \
|
||||
|
@ -56,7 +102,6 @@ g10_SOURCES = g10.c \
|
|||
skclist.c \
|
||||
ringedit.c \
|
||||
kbnode.c \
|
||||
keygen.c \
|
||||
main.h \
|
||||
mainproc.c \
|
||||
armor.c \
|
||||
|
@ -73,228 +118,259 @@ g10_SOURCES = g10.c \
|
|||
packet.h \
|
||||
parse-packet.c \
|
||||
passphrase.c \
|
||||
plaintext.c \
|
||||
pubkey-enc.c \
|
||||
seckey-cert.c \
|
||||
seskey.c \
|
||||
sign.c \
|
||||
import.c \
|
||||
export.c \
|
||||
comment.c \
|
||||
status.c \
|
||||
status.h \
|
||||
sign.c \
|
||||
plaintext.c \
|
||||
encr-data.c \
|
||||
encode.c \
|
||||
sig-check.c
|
||||
|
||||
LDADD = -L ../cipher -L ../mpi -L ../util \
|
||||
-lcipher -lmpi -lutil
|
||||
mkinstalldirs = $(top_srcdir)/scripts/mkinstalldirs
|
||||
g10_SOURCES = g10.c \
|
||||
$(common_source) \
|
||||
keygen.c
|
||||
|
||||
g10maint_SOURCES = g10maint.c \
|
||||
$(common_source)
|
||||
|
||||
LDADD = $(needed_libs)
|
||||
mkinstalldirs = $(SHELL) $(top_srcdir)/scripts/mkinstalldirs
|
||||
CONFIG_HEADER = ../config.h
|
||||
PROGRAMS = $(bin_PROGRAMS)
|
||||
CONFIG_CLEAN_FILES =
|
||||
PROGRAMS = $(bin_PROGRAMS)
|
||||
|
||||
|
||||
CC = @CC@
|
||||
LEX = @LEX@
|
||||
YACC = @YACC@
|
||||
|
||||
DEFS = @DEFS@ -I. -I$(srcdir) -I..
|
||||
CPPFLAGS = @CPPFLAGS@
|
||||
CFLAGS = @CFLAGS@
|
||||
LDFLAGS = @LDFLAGS@
|
||||
LIBS = @LIBS@
|
||||
|
||||
COMPILE = $(CC) -c $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CFLAGS)
|
||||
LINK = $(CC) $(LDFLAGS) -o $@
|
||||
g10_OBJECTS = g10.o build-packet.o compress.o encode.o encr-data.o \
|
||||
free-packet.o getkey.o pkclist.o skclist.o ringedit.o kbnode.o keygen.o \
|
||||
mainproc.o armor.o mdfilter.o textfilter.o cipher.o elg.o rsa.o \
|
||||
openfile.o keyid.o trustdb.o parse-packet.o passphrase.o plaintext.o \
|
||||
pubkey-enc.o seckey-cert.o seskey.o sign.o import.o export.o comment.o \
|
||||
status.o sig-check.o
|
||||
EXTRA_g10_SOURCES =
|
||||
g10_OBJECTS = g10.o build-packet.o compress.o free-packet.o getkey.o \
|
||||
pkclist.o skclist.o ringedit.o kbnode.o mainproc.o armor.o mdfilter.o \
|
||||
textfilter.o cipher.o elg.o rsa.o openfile.o keyid.o trustdb.o \
|
||||
parse-packet.o passphrase.o pubkey-enc.o seckey-cert.o seskey.o \
|
||||
import.o export.o comment.o status.o sign.o plaintext.o encr-data.o \
|
||||
encode.o sig-check.o keygen.o
|
||||
g10_LDADD = $(LDADD)
|
||||
DIST_COMMON = Makefile.am Makefile.in
|
||||
g10_DEPENDENCIES = ../cipher/libcipher.a ../mpi/libmpi.a \
|
||||
../util/libutil.a
|
||||
g10_LDFLAGS =
|
||||
g10maint_OBJECTS = g10maint.o build-packet.o compress.o free-packet.o \
|
||||
getkey.o pkclist.o skclist.o ringedit.o kbnode.o mainproc.o armor.o \
|
||||
mdfilter.o textfilter.o cipher.o elg.o rsa.o openfile.o keyid.o \
|
||||
trustdb.o parse-packet.o passphrase.o pubkey-enc.o seckey-cert.o \
|
||||
seskey.o import.o export.o comment.o status.o sign.o plaintext.o \
|
||||
encr-data.o encode.o sig-check.o
|
||||
g10maint_LDADD = $(LDADD)
|
||||
g10maint_DEPENDENCIES = ../cipher/libcipher.a ../mpi/libmpi.a \
|
||||
../util/libutil.a
|
||||
g10maint_LDFLAGS =
|
||||
CFLAGS = @CFLAGS@
|
||||
COMPILE = $(CC) $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CFLAGS)
|
||||
LINK = $(CC) $(CFLAGS) $(LDFLAGS) -o $@
|
||||
DIST_COMMON = Makefile.am Makefile.in
|
||||
|
||||
|
||||
PACKAGE = @PACKAGE@
|
||||
VERSION = @VERSION@
|
||||
|
||||
DISTFILES = $(DIST_COMMON) $(SOURCES) $(BUILT_SOURCES) $(HEADERS) \
|
||||
$(TEXINFOS) $(INFOS) $(MANS) $(EXTRA_DIST) $(DATA)
|
||||
DEP_DISTFILES = $(DIST_COMMON) $(SOURCES) $(BUILT_SOURCES) $(HEADERS) \
|
||||
$(TEXINFOS) $(INFO_DEPS) $(MANS) $(EXTRA_DIST) $(DATA)
|
||||
DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST)
|
||||
|
||||
TAR = tar
|
||||
DEP_FILES = $(srcdir)/.deps/armor.P $(srcdir)/.deps/build-packet.P \
|
||||
$(srcdir)/.deps/cipher.P $(srcdir)/.deps/comment.P \
|
||||
$(srcdir)/.deps/compress.P $(srcdir)/.deps/elg.P \
|
||||
$(srcdir)/.deps/encode.P $(srcdir)/.deps/encr-data.P \
|
||||
$(srcdir)/.deps/export.P $(srcdir)/.deps/free-packet.P \
|
||||
$(srcdir)/.deps/g10.P $(srcdir)/.deps/getkey.P $(srcdir)/.deps/import.P \
|
||||
$(srcdir)/.deps/kbnode.P $(srcdir)/.deps/keygen.P \
|
||||
$(srcdir)/.deps/keyid.P $(srcdir)/.deps/mainproc.P \
|
||||
$(srcdir)/.deps/mdfilter.P $(srcdir)/.deps/openfile.P \
|
||||
$(srcdir)/.deps/parse-packet.P $(srcdir)/.deps/passphrase.P \
|
||||
$(srcdir)/.deps/pkclist.P $(srcdir)/.deps/plaintext.P \
|
||||
$(srcdir)/.deps/pubkey-enc.P $(srcdir)/.deps/ringedit.P \
|
||||
$(srcdir)/.deps/rsa.P $(srcdir)/.deps/seckey-cert.P \
|
||||
$(srcdir)/.deps/seskey.P $(srcdir)/.deps/sig-check.P \
|
||||
$(srcdir)/.deps/sign.P $(srcdir)/.deps/skclist.P \
|
||||
$(srcdir)/.deps/status.P $(srcdir)/.deps/textfilter.P \
|
||||
$(srcdir)/.deps/trustdb.P
|
||||
SOURCES = $(g10_SOURCES)
|
||||
OBJECTS = $(g10_OBJECTS)
|
||||
GZIP = --best
|
||||
DEP_FILES = .deps/armor.P .deps/build-packet.P .deps/cipher.P \
|
||||
.deps/comment.P .deps/compress.P .deps/elg.P .deps/encode.P \
|
||||
.deps/encr-data.P .deps/export.P .deps/free-packet.P .deps/g10.P \
|
||||
.deps/g10maint.P .deps/getkey.P .deps/import.P .deps/kbnode.P \
|
||||
.deps/keygen.P .deps/keyid.P .deps/mainproc.P .deps/mdfilter.P \
|
||||
.deps/openfile.P .deps/parse-packet.P .deps/passphrase.P \
|
||||
.deps/pkclist.P .deps/plaintext.P .deps/pubkey-enc.P .deps/ringedit.P \
|
||||
.deps/rsa.P .deps/seckey-cert.P .deps/seskey.P .deps/sig-check.P \
|
||||
.deps/sign.P .deps/skclist.P .deps/status.P .deps/textfilter.P \
|
||||
.deps/trustdb.P
|
||||
SOURCES = $(g10_SOURCES) $(g10maint_SOURCES)
|
||||
OBJECTS = $(g10_OBJECTS) $(g10maint_OBJECTS)
|
||||
|
||||
default: all
|
||||
|
||||
.SUFFIXES:
|
||||
.SUFFIXES: .S .c .o .s
|
||||
$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
|
||||
cd $(top_srcdir) && $(AUTOMAKE) --gnu g10/Makefile
|
||||
|
||||
$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in
|
||||
cd $(top_srcdir) && automake $(subdir)/Makefile
|
||||
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES)
|
||||
cd $(top_builddir) \
|
||||
&& CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status
|
||||
|
||||
Makefile: $(top_builddir)/config.status Makefile.in
|
||||
cd $(top_builddir) && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= ./config.status
|
||||
|
||||
mostlyclean-binPROGRAMS:
|
||||
|
||||
clean-binPROGRAMS:
|
||||
rm -f $(bin_PROGRAMS)
|
||||
-test -z "$(bin_PROGRAMS)" || rm -f $(bin_PROGRAMS)
|
||||
|
||||
distclean-binPROGRAMS:
|
||||
|
||||
maintainer-clean-binPROGRAMS:
|
||||
|
||||
install-binPROGRAMS: $(bin_PROGRAMS)
|
||||
@$(NORMAL_INSTALL)
|
||||
$(mkinstalldirs) $(bindir)
|
||||
list="$(bin_PROGRAMS)"; for p in $$list; do \
|
||||
@list='$(bin_PROGRAMS)'; for p in $$list; do \
|
||||
if test -f $$p; then \
|
||||
$(INSTALL_PROGRAM) $$p $(bindir)/`echo $$p|sed '$(transform)'`; \
|
||||
echo " $(INSTALL_PROGRAM) $$p $(bindir)/`echo $$p|sed '$(transform)'`"; \
|
||||
$(INSTALL_PROGRAM) $$p $(bindir)/`echo $$p|sed '$(transform)'`; \
|
||||
else :; fi; \
|
||||
done
|
||||
|
||||
uninstall-binPROGRAMS:
|
||||
list="$(bin_PROGRAMS)"; for p in $$list; do \
|
||||
$(NORMAL_UNINSTALL)
|
||||
list='$(bin_PROGRAMS)'; for p in $$list; do \
|
||||
rm -f $(bindir)/`echo $$p|sed '$(transform)'`; \
|
||||
done
|
||||
|
||||
.c.o:
|
||||
$(COMPILE) $<
|
||||
$(COMPILE) -c $<
|
||||
|
||||
.s.o:
|
||||
$(COMPILE) -c $<
|
||||
|
||||
.S.o:
|
||||
$(COMPILE) -c $<
|
||||
|
||||
mostlyclean-compile:
|
||||
rm -f *.o core
|
||||
-rm -f *.o core
|
||||
|
||||
clean-compile:
|
||||
|
||||
distclean-compile:
|
||||
rm -f *.tab.c
|
||||
-rm -f *.tab.c
|
||||
|
||||
maintainer-clean-compile:
|
||||
$(g10_OBJECTS): ../config.h
|
||||
|
||||
g10: $(g10_OBJECTS) $(g10_DEPENDENCIES)
|
||||
$(LINK) $(g10_OBJECTS) $(g10_LDADD) $(LIBS)
|
||||
@rm -f g10
|
||||
$(LINK) $(g10_LDFLAGS) $(g10_OBJECTS) $(g10_LDADD) $(LIBS)
|
||||
|
||||
ID: $(HEADERS) $(SOURCES)
|
||||
here=`pwd` && cd $(srcdir) && mkid -f$$here/ID $(SOURCES) $(HEADERS)
|
||||
g10maint: $(g10maint_OBJECTS) $(g10maint_DEPENDENCIES)
|
||||
@rm -f g10maint
|
||||
$(LINK) $(g10maint_LDFLAGS) $(g10maint_OBJECTS) $(g10maint_LDADD) $(LIBS)
|
||||
|
||||
tags: TAGS
|
||||
|
||||
TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES)
|
||||
here=`pwd` && cd $(srcdir) && etags $(ETAGS_ARGS) $(SOURCES) $(HEADERS) -o $$here/TAGS
|
||||
ID: $(HEADERS) $(SOURCES) $(LISP)
|
||||
here=`pwd` && cd $(srcdir) \
|
||||
&& mkid -f$$here/ID $(SOURCES) $(HEADERS) $(LISP)
|
||||
|
||||
TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) $(LISP)
|
||||
tags=; \
|
||||
here=`pwd`; \
|
||||
test -z "$(ETAGS_ARGS)$(SOURCES)$(HEADERS)$(LISP)$$tags" \
|
||||
|| (cd $(srcdir) && etags $(ETAGS_ARGS) $$tags $(SOURCES) $(HEADERS) $(LISP) -o $$here/TAGS)
|
||||
|
||||
mostlyclean-tags:
|
||||
|
||||
clean-tags:
|
||||
|
||||
distclean-tags:
|
||||
rm -f TAGS ID
|
||||
-rm -f TAGS ID
|
||||
|
||||
maintainer-clean-tags:
|
||||
|
||||
subdir = g10
|
||||
distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir)
|
||||
distdir: $(DEP_DISTFILES)
|
||||
@for file in `cd $(srcdir) && echo $(DISTFILES)`; do \
|
||||
|
||||
subdir = g10
|
||||
|
||||
distdir: $(DISTFILES)
|
||||
here=`cd $(top_builddir) && pwd`; \
|
||||
top_distdir=`cd $(top_distdir) && pwd`; \
|
||||
distdir=`cd $(distdir) && pwd`; \
|
||||
cd $(top_srcdir) \
|
||||
&& $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --gnu g10/Makefile
|
||||
@for file in $(DISTFILES); do \
|
||||
d=$(srcdir); \
|
||||
test -f $(distdir)/$$file \
|
||||
|| ln $(srcdir)/$$file $(distdir)/$$file 2> /dev/null \
|
||||
|| cp -p $(srcdir)/$$file $(distdir)/$$file; \
|
||||
|| ln $$d/$$file $(distdir)/$$file 2> /dev/null \
|
||||
|| cp -p $$d/$$file $(distdir)/$$file; \
|
||||
done
|
||||
|
||||
# This fragment is probably only useful for maintainers. It relies on
|
||||
# GNU make and gcc. It is only included in the generated Makefile.in
|
||||
# if `automake' is not passed the `--include-deps' flag.
|
||||
MKDEP = $(CC) -M $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CFLAGS)
|
||||
|
||||
MKDEP = gcc -MM $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CFLAGS)
|
||||
|
||||
-include $(srcdir)/.deps/.P
|
||||
$(srcdir)/.deps/.P: $(BUILT_SOURCES)
|
||||
cd $(srcdir) && test -d .deps || mkdir .deps
|
||||
DEPS_MAGIC := $(shell mkdir .deps > /dev/null 2>&1 || :)
|
||||
-include .deps/.P
|
||||
.deps/.P: $(BUILT_SOURCES)
|
||||
echo > $@
|
||||
|
||||
-include $(DEP_FILES)
|
||||
$(DEP_FILES): $(srcdir)/.deps/.P
|
||||
|
||||
$(srcdir)/.deps/%.P: $(srcdir)/%.c
|
||||
@echo "mkdeps $< > $@"
|
||||
@re=`echo 's,^$(srcdir)//*,,g;s, $(srcdir)//*, ,g' | sed 's,\.,\\\\.,g'`; \
|
||||
$(MKDEP) $< | sed "$$re" > $@-tmp
|
||||
@if test -n "$o"; then \
|
||||
sed 's/\.o:/$$o:/' $@-tmp > $@; \
|
||||
rm $@-tmp; \
|
||||
else \
|
||||
mv $@-tmp $@; \
|
||||
fi
|
||||
mostlyclean-depend:
|
||||
|
||||
# End of maintainer-only section
|
||||
clean-depend:
|
||||
|
||||
distclean-depend:
|
||||
|
||||
maintainer-clean-depend:
|
||||
-rm -rf .deps
|
||||
|
||||
.deps/%.P: %.c
|
||||
@echo "Computing dependencies for $<..."
|
||||
@o='o'; \
|
||||
test -n "$o" && o='$$o'; \
|
||||
$(MKDEP) $< >$@.tmp \
|
||||
&& sed "s,^\(.*\)\.o:,\1.$$o \1.l$$o $@:," < $@.tmp > $@ \
|
||||
&& rm -f $@.tmp
|
||||
info:
|
||||
|
||||
dvi:
|
||||
|
||||
check: all
|
||||
|
||||
$(MAKE)
|
||||
installcheck:
|
||||
|
||||
install-exec: install-binPROGRAMS
|
||||
@$(NORMAL_INSTALL)
|
||||
|
||||
install-data:
|
||||
@$(NORMAL_INSTALL)
|
||||
|
||||
install: install-exec install-data all
|
||||
@:
|
||||
|
||||
uninstall: uninstall-binPROGRAMS
|
||||
|
||||
all: $(PROGRAMS) Makefile
|
||||
all: Makefile $(PROGRAMS)
|
||||
|
||||
install-strip:
|
||||
$(MAKE) INSTALL_PROGRAM='$(INSTALL_PROGRAM) -s' install
|
||||
$(MAKE) INSTALL_PROGRAM='$(INSTALL_PROGRAM) -s' INSTALL_SCRIPT='$(INSTALL_PROGRAM)' install
|
||||
installdirs:
|
||||
$(mkinstalldirs) $(bindir)
|
||||
|
||||
|
||||
mostlyclean-generic:
|
||||
test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES)
|
||||
-test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES)
|
||||
|
||||
clean-generic:
|
||||
test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
|
||||
-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
|
||||
|
||||
distclean-generic:
|
||||
rm -f Makefile $(DISTCLEANFILES)
|
||||
rm -f config.cache config.log $(CONFIG_HEADER) stamp-h
|
||||
-rm -f Makefile $(DISTCLEANFILES)
|
||||
-rm -f config.cache config.log stamp-h stamp-h[0-9]*
|
||||
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
|
||||
|
||||
maintainer-clean-generic:
|
||||
test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
|
||||
test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES)
|
||||
-test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
|
||||
-test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES)
|
||||
mostlyclean: mostlyclean-binPROGRAMS mostlyclean-compile \
|
||||
mostlyclean-tags mostlyclean-generic
|
||||
mostlyclean-tags mostlyclean-depend mostlyclean-generic
|
||||
|
||||
clean: clean-binPROGRAMS clean-compile clean-tags clean-generic \
|
||||
mostlyclean
|
||||
clean: clean-binPROGRAMS clean-compile clean-tags clean-depend \
|
||||
clean-generic mostlyclean
|
||||
|
||||
distclean: distclean-binPROGRAMS distclean-compile distclean-tags \
|
||||
distclean-generic clean
|
||||
rm -f config.status
|
||||
distclean-depend distclean-generic clean
|
||||
-rm -f config.status
|
||||
|
||||
maintainer-clean: maintainer-clean-binPROGRAMS maintainer-clean-compile \
|
||||
maintainer-clean-tags maintainer-clean-generic \
|
||||
distclean
|
||||
maintainer-clean-tags maintainer-clean-depend \
|
||||
maintainer-clean-generic distclean
|
||||
@echo "This command is intended for maintainers to use;"
|
||||
@echo "it deletes files that may require special tools to rebuild."
|
||||
|
||||
|
@ -302,15 +378,14 @@ maintainer-clean: maintainer-clean-binPROGRAMS maintainer-clean-compile \
|
|||
clean-binPROGRAMS maintainer-clean-binPROGRAMS uninstall-binPROGRAMS \
|
||||
install-binPROGRAMS mostlyclean-compile distclean-compile clean-compile \
|
||||
maintainer-clean-compile tags mostlyclean-tags distclean-tags \
|
||||
clean-tags maintainer-clean-tags distdir info dvi check installcheck \
|
||||
install-exec install-data install uninstall all installdirs \
|
||||
mostlyclean-generic distclean-generic clean-generic \
|
||||
clean-tags maintainer-clean-tags distdir mostlyclean-depend \
|
||||
distclean-depend clean-depend maintainer-clean-depend info dvi \
|
||||
installcheck install-exec install-data install uninstall all \
|
||||
installdirs mostlyclean-generic distclean-generic clean-generic \
|
||||
maintainer-clean-generic clean mostlyclean distclean maintainer-clean
|
||||
|
||||
|
||||
$(PROGRAMS): ../cipher/libcipher.a ../mpi/libmpi.a ../util/libutil.a
|
||||
.SUFFIXES:
|
||||
.SUFFIXES: .c .o
|
||||
$(PROGRAMS): $(needed_libs)
|
||||
|
||||
# Tell versions [3.59,3.63) of GNU make to not export all variables.
|
||||
# Otherwise a system limit (for SysV at least) may be exceeded.
|
||||
|
|
176
g10/g10.c
176
g10/g10.c
|
@ -42,18 +42,15 @@
|
|||
|
||||
|
||||
enum cmd_values { aNull = 0,
|
||||
aSym, aStore, aEncr, aPrimegen, aKeygen, aSign, aSignEncr,
|
||||
aPrintMDs, aSignKey, aClearsig, aListPackets, aEditSig,
|
||||
aKMode, aKModeC, aChangePass, aImport, aListTrustDB,
|
||||
aListTrustPath, aExport,
|
||||
aSym, aStore, aEncr, aKeygen, aSign, aSignEncr,
|
||||
aSignKey, aClearsig, aListPackets, aEditSig,
|
||||
aKMode, aKModeC, aChangePass, aImport,
|
||||
aExport,
|
||||
aTest };
|
||||
|
||||
|
||||
static void set_cmd( enum cmd_values *ret_cmd,
|
||||
enum cmd_values new_cmd );
|
||||
static void print_hex( byte *p, size_t n );
|
||||
static void print_mds( const char *fname );
|
||||
static void do_test(int);
|
||||
|
||||
const char *
|
||||
strusage( int level )
|
||||
|
@ -104,7 +101,7 @@ strusage( int level )
|
|||
static void
|
||||
i18n_init(void)
|
||||
{
|
||||
#ifdef HAVE_LIBINTL
|
||||
#ifdef ENABLE_NLS
|
||||
setlocale( LC_MESSAGES, "" );
|
||||
bindtextdomain( PACKAGE, G10_LOCALEDIR );
|
||||
textdomain( PACKAGE );
|
||||
|
@ -189,10 +186,7 @@ main( int argc, char **argv )
|
|||
{ 510, "debug" ,4|16, N_("set debugging flags")},
|
||||
{ 511, "debug-all" ,0, N_("enable full debugging")},
|
||||
{ 512, "status-fd" ,1, N_("write status info to this fd") },
|
||||
{ 513, "gen-prime" , 0, "\r" },
|
||||
{ 514, "test" , 0, "\r" },
|
||||
{ 515, "fingerprint", 0, N_("show the fingerprints")},
|
||||
{ 516, "print-mds" , 0, N_("print all message digests")},
|
||||
{ 517, "secret-keyring" ,2, N_("add this secret keyring to the list")},
|
||||
{ 518, "options" , 2, N_("read options from file")},
|
||||
{ 519, "no-armor", 0, "\r"},
|
||||
|
@ -207,13 +201,12 @@ main( int argc, char **argv )
|
|||
{ 528, "pubkey-algo", 2 , N_("select default puplic key algorithm")},
|
||||
{ 529, "digest-algo", 2 , N_("select default message digest algorithm")},
|
||||
{ 530, "import", 0 , N_("put public keys into the trustdb")},
|
||||
{ 531, "list-trustdb",0 , "\r"},
|
||||
{ 532, "quick-random", 0, "\r"},
|
||||
{ 533, "list-trust-path",0, "\r"},
|
||||
{ 534, "no-comment", 0, N_("do not write comment packets")},
|
||||
{ 535, "completes-needed", 1, N_("(default is 1)")},
|
||||
{ 536, "marginals-needed", 1, N_("(default is 3)")},
|
||||
{ 537, "export", 0, N_("export all or the given keys") },
|
||||
{ 538, "trustdb-name", 2, "\r" },
|
||||
|
||||
{0} };
|
||||
ARGPARSE_ARGS pargs;
|
||||
|
@ -236,6 +229,7 @@ main( int argc, char **argv )
|
|||
int default_keyring = 1;
|
||||
int greeting = 1;
|
||||
enum cmd_values cmd = 0;
|
||||
const char *trustdb_name = NULL;
|
||||
|
||||
|
||||
secmem_init( 16384 );
|
||||
|
@ -331,10 +325,7 @@ main( int argc, char **argv )
|
|||
case 510: opt.debug |= pargs.r.ret_ulong; break;
|
||||
case 511: opt.debug = ~0; break;
|
||||
case 512: set_status_fd( pargs.r.ret_int ); break;
|
||||
case 513: set_cmd( &cmd, aPrimegen); break;
|
||||
case 514: set_cmd( &cmd, aTest); break;
|
||||
case 515: opt.fingerprint = 1; break;
|
||||
case 516: set_cmd( &cmd, aPrintMDs); break;
|
||||
case 517: add_secret_keyring(pargs.r.ret_str); sec_nrings++; break;
|
||||
case 518:
|
||||
/* config files may not be nested (silently ignore them) */
|
||||
|
@ -362,13 +353,12 @@ main( int argc, char **argv )
|
|||
opt.def_digest_algo = string_to_digest_algo(pargs.r.ret_str);
|
||||
break;
|
||||
case 530: set_cmd( &cmd, aImport); break;
|
||||
case 531: set_cmd( &cmd, aListTrustDB); break;
|
||||
case 532: quick_random_gen(1); break;
|
||||
case 533: set_cmd( &cmd, aListTrustPath); break;
|
||||
case 534: opt.no_comment=1; break;
|
||||
case 535: opt.completes_needed = pargs.r.ret_int; break;
|
||||
case 536: opt.marginals_needed = pargs.r.ret_int; break;
|
||||
case 537: set_cmd( &cmd, aExport); break;
|
||||
case 538: trustdb_name = pargs.r.ret_str; break;
|
||||
default : errors++; pargs.err = configfp? 1:2; break;
|
||||
}
|
||||
}
|
||||
|
@ -453,13 +443,7 @@ main( int argc, char **argv )
|
|||
}
|
||||
}
|
||||
|
||||
switch( cmd ) {
|
||||
case aPrimegen:
|
||||
case aPrintMDs:
|
||||
break;
|
||||
case aListTrustDB: rc = init_trustdb( argc? 1:0 ); break;
|
||||
default: rc = init_trustdb(1); break;
|
||||
}
|
||||
rc = init_trustdb(1, trustdb_name );
|
||||
if( rc )
|
||||
log_error(_("failed to initialize the TrustDB: %s\n"), g10_errstr(rc));
|
||||
|
||||
|
@ -578,46 +562,12 @@ main( int argc, char **argv )
|
|||
usage(1);
|
||||
break;
|
||||
|
||||
case aPrimegen:
|
||||
if( argc == 1 ) {
|
||||
mpi_print( stdout, generate_public_prime( atoi(argv[0]) ), 1);
|
||||
putchar('\n');
|
||||
}
|
||||
else if( argc == 2 ) {
|
||||
mpi_print( stdout, generate_elg_prime( atoi(argv[0]),
|
||||
atoi(argv[1]), NULL ), 1);
|
||||
putchar('\n');
|
||||
}
|
||||
else if( argc == 3 ) {
|
||||
MPI g = mpi_alloc(1);
|
||||
mpi_print( stdout, generate_elg_prime( atoi(argv[0]),
|
||||
atoi(argv[1]), g ), 1);
|
||||
printf("\nGenerator: ");
|
||||
mpi_print( stdout, g, 1 );
|
||||
putchar('\n');
|
||||
mpi_free(g);
|
||||
}
|
||||
else
|
||||
usage(1);
|
||||
break;
|
||||
|
||||
case aPrintMDs:
|
||||
if( !argc )
|
||||
print_mds(NULL);
|
||||
else {
|
||||
for(; argc; argc--, argv++ )
|
||||
print_mds(*argv);
|
||||
}
|
||||
break;
|
||||
|
||||
case aKeygen: /* generate a key (interactive) */
|
||||
if( argc )
|
||||
usage(1);
|
||||
generate_keypair();
|
||||
break;
|
||||
|
||||
case aTest: do_test( argc? atoi(*argv): 0 ); break;
|
||||
|
||||
case aImport:
|
||||
if( !argc )
|
||||
usage(1);
|
||||
|
@ -637,22 +587,6 @@ main( int argc, char **argv )
|
|||
free_strlist(sl);
|
||||
break;
|
||||
|
||||
|
||||
case aListTrustDB:
|
||||
if( !argc )
|
||||
list_trustdb(NULL);
|
||||
else {
|
||||
for( ; argc; argc--, argv++ )
|
||||
list_trustdb( *argv );
|
||||
}
|
||||
break;
|
||||
|
||||
case aListTrustPath:
|
||||
if( argc != 2 )
|
||||
wrong_args("--list-trust-path [-- -]<maxdepth> <username>");
|
||||
list_trust_path( atoi(*argv), argv[1] );
|
||||
break;
|
||||
|
||||
case aListPackets:
|
||||
opt.list_packets=1;
|
||||
default:
|
||||
|
@ -693,95 +627,3 @@ g10_exit( int rc )
|
|||
}
|
||||
|
||||
|
||||
static void
|
||||
print_hex( byte *p, size_t n )
|
||||
{
|
||||
int i;
|
||||
|
||||
if( n == 20 ) {
|
||||
for(i=0; i < n ; i++, i++, p += 2 ) {
|
||||
if( i == 10 )
|
||||
putchar(' ');
|
||||
printf(" %02X%02X", *p, p[1] );
|
||||
}
|
||||
}
|
||||
else {
|
||||
for(i=0; i < n ; i++, p++ ) {
|
||||
if( i && !(i%8) )
|
||||
putchar(' ');
|
||||
printf(" %02X", *p );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
print_mds( const char *fname )
|
||||
{
|
||||
FILE *fp;
|
||||
char buf[1024];
|
||||
size_t n;
|
||||
MD_HANDLE md;
|
||||
|
||||
if( !fname ) {
|
||||
fp = stdin;
|
||||
fname = "[stdin]";
|
||||
}
|
||||
else
|
||||
fp = fopen( fname, "rb" );
|
||||
if( !fp ) {
|
||||
log_error("%s: %s\n", fname, strerror(errno) );
|
||||
return;
|
||||
}
|
||||
|
||||
md = md_open( DIGEST_ALGO_MD5, 0 );
|
||||
md_enable( md, DIGEST_ALGO_RMD160 );
|
||||
md_enable( md, DIGEST_ALGO_SHA1 );
|
||||
|
||||
while( (n=fread( buf, 1, DIM(buf), fp )) )
|
||||
md_write( md, buf, n );
|
||||
if( ferror(fp) )
|
||||
log_error("%s: %s\n", fname, strerror(errno) );
|
||||
else {
|
||||
md_final(md);
|
||||
printf( "%s: MD5 =", fname ); print_hex(md_read(md, DIGEST_ALGO_MD5), 16 );
|
||||
printf("\n%s: RMD160 =", fname ); print_hex(md_read(md, DIGEST_ALGO_RMD160), 20 );
|
||||
printf("\n%s: SHA1 =", fname ); print_hex(md_read(md, DIGEST_ALGO_SHA1), 20 );
|
||||
putchar('\n');
|
||||
}
|
||||
|
||||
|
||||
md_close(md);
|
||||
|
||||
if( fp != stdin )
|
||||
fclose(fp);
|
||||
}
|
||||
|
||||
|
||||
|
||||
static void
|
||||
do_test(int times)
|
||||
{
|
||||
#if 0
|
||||
MPI t = mpi_alloc( 50 );
|
||||
MPI m = mpi_alloc( 50 );
|
||||
MPI a = mpi_alloc( 50 );
|
||||
MPI b = mpi_alloc( 50 );
|
||||
MPI p = mpi_alloc( 50 );
|
||||
MPI x = mpi_alloc( 50 );
|
||||
|
||||
/* output = b/(a^x) mod p */
|
||||
log_debug("invm %d times ", times);
|
||||
for( ; times > 0; times -- ) {
|
||||
mpi_fromstr(a, "0xef45678343589854354a4545545454554545455"
|
||||
"aaaaaaaaaaaaa44444fffdecb33434343443331" );
|
||||
mpi_fromstr(b, "0x8765765589854354a4545545454554545455"
|
||||
"aaaaaaa466577778decb36666343443331" );
|
||||
mpi_invm( t, a, b );
|
||||
fputc('.', stderr); fflush(stderr);
|
||||
}
|
||||
|
||||
|
||||
m_check(NULL);
|
||||
#endif
|
||||
}
|
||||
|
||||
|
|
624
g10/g10maint.c
Normal file
624
g10/g10maint.c
Normal file
|
@ -0,0 +1,624 @@
|
|||
/* g10maint.c - The G10 maintenance utility
|
||||
* Copyright (c) 1997 by Werner Koch (dd9jn)
|
||||
*
|
||||
* This file is part of G10.
|
||||
*
|
||||
* G10 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; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* G10 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, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
|
||||
*/
|
||||
|
||||
#include <config.h>
|
||||
#include <errno.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <unistd.h>
|
||||
|
||||
#include "packet.h"
|
||||
#include "iobuf.h"
|
||||
#include "memory.h"
|
||||
#include "util.h"
|
||||
#include "main.h"
|
||||
#include "options.h"
|
||||
#include "keydb.h"
|
||||
#include "mpi.h"
|
||||
#include "cipher.h"
|
||||
#include "filter.h"
|
||||
#include "trustdb.h"
|
||||
#include "ttyio.h"
|
||||
#include "i18n.h"
|
||||
#include "status.h"
|
||||
|
||||
|
||||
enum cmd_values { aNull = 0,
|
||||
aPrimegen, aPrintMDs, aListPackets, aKMode, aKModeC,
|
||||
aListTrustDB, aListTrustPath,
|
||||
aTest };
|
||||
|
||||
|
||||
static void set_cmd( enum cmd_values *ret_cmd,
|
||||
enum cmd_values new_cmd );
|
||||
static void print_hex( byte *p, size_t n );
|
||||
static void print_mds( const char *fname );
|
||||
static void do_test(int);
|
||||
|
||||
const char *
|
||||
strusage( int level )
|
||||
{
|
||||
const char *p;
|
||||
switch( level ) {
|
||||
case 10:
|
||||
case 0: p = "g10maint - v" VERSION "; "
|
||||
"Copyright 1997 Werner Koch (dd9jn)\n" ; break;
|
||||
case 13: p = "g10"; break;
|
||||
case 14: p = VERSION; break;
|
||||
case 1:
|
||||
case 11: p = "Usage: g10main [options] (-h for help)";
|
||||
break;
|
||||
case 2:
|
||||
case 12: p =
|
||||
_("Syntax: g10maint [options]\n"
|
||||
"The G10 maintenace utility\n"); break;
|
||||
|
||||
case 26:
|
||||
p = _("Please report bugs to <g10-bugs@isil.d.shuttle.de>.\n");
|
||||
break;
|
||||
|
||||
#if !defined(HAVE_ZLIB_H) && defined(HAVE_RSA_CIPHER)
|
||||
case 30: p = _(
|
||||
" NOTE: This version is compiled without ZLIB support;\n"
|
||||
" you are not able to process compresssed data!\n"
|
||||
"WARNING: This version has RSA support! Your are not allowed to\n"
|
||||
" use it inside the Unites States before Sep 30, 2000!\n" );
|
||||
#elif !defined(HAVE_ZLIB_H)
|
||||
case 30: p = _(
|
||||
" NOTE: This version is compiled without ZLIB support;\n"
|
||||
" you are not able to process compresssed data!\n");
|
||||
#elif defined(HAVE_RSA_CIPHER)
|
||||
case 30: p = _(
|
||||
"WARNING: This version has RSA support! Your are not allowed to\n"
|
||||
" use it inside the Unites States before Sep 30, 2000!\n" );
|
||||
#else
|
||||
case 30: p = "";
|
||||
#endif
|
||||
break;
|
||||
default: p = default_strusage(level);
|
||||
}
|
||||
return p;
|
||||
}
|
||||
|
||||
static void
|
||||
i18n_init(void)
|
||||
{
|
||||
#ifdef ENABLE_NLS
|
||||
setlocale( LC_MESSAGES, "" );
|
||||
bindtextdomain( PACKAGE, G10_LOCALEDIR );
|
||||
textdomain( PACKAGE );
|
||||
#endif
|
||||
}
|
||||
|
||||
static void
|
||||
wrong_args( const char *text)
|
||||
{
|
||||
fputs(_("Usage: g10maint [options] "),stderr);
|
||||
fputs(text,stderr);
|
||||
putc('\n',stderr);
|
||||
g10_exit(2);
|
||||
}
|
||||
|
||||
static void
|
||||
set_debug(void)
|
||||
{
|
||||
if( opt.debug & DBG_MEMORY_VALUE )
|
||||
memory_debug_mode = 1;
|
||||
if( opt.debug & DBG_MEMSTAT_VALUE )
|
||||
memory_stat_debug_mode = 1;
|
||||
if( opt.debug & DBG_MPI_VALUE )
|
||||
mpi_debug_mode = 1;
|
||||
if( opt.debug & DBG_CIPHER_VALUE )
|
||||
cipher_debug_mode = 1;
|
||||
if( opt.debug & DBG_IOBUF_VALUE )
|
||||
iobuf_debug_mode = 1;
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
set_cmd( enum cmd_values *ret_cmd, enum cmd_values new_cmd )
|
||||
{
|
||||
enum cmd_values cmd = *ret_cmd;
|
||||
|
||||
if( !cmd || cmd == new_cmd )
|
||||
cmd = new_cmd;
|
||||
else if( cmd == aKMode && new_cmd == aKModeC )
|
||||
cmd = aKModeC;
|
||||
else {
|
||||
log_error(_("conflicting commands\n"));
|
||||
g10_exit(2);
|
||||
}
|
||||
|
||||
*ret_cmd = cmd;
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
main( int argc, char **argv )
|
||||
{
|
||||
static ARGPARSE_OPTS opts[] = {
|
||||
{ 'v', "verbose", 0, N_("verbose") },
|
||||
{ 'n', "dry-run", 0, N_("don't make any changes") },
|
||||
{ 'o', "output", 2, N_("use as output file")},
|
||||
{ 'c', NULL , 0, N_("check signatures")},
|
||||
{ 500, "batch", 0, N_("batch mode: never ask")},
|
||||
{ 501, "yes", 0, N_("assume yes on most questions")},
|
||||
{ 502, "no", 0, N_("assume no on most questions")},
|
||||
{ 509, "keyring" ,2, N_("add this keyring to the list of keyrings")},
|
||||
{ 'k', NULL , 0, N_("list keys")},
|
||||
{ 510, "debug" ,4|16, N_("set debugging flags")},
|
||||
{ 511, "debug-all" ,0, N_("enable full debugging")},
|
||||
{ 512, "status-fd" ,1, N_("write status info to this fd") },
|
||||
{ 513, "gen-prime" , 0, "\r" },
|
||||
{ 514, "test" , 0, "\r" },
|
||||
{ 516, "print-mds" , 0, N_("print all message digests")},
|
||||
{ 517, "secret-keyring" ,2, N_("add this secret keyring to the list")},
|
||||
{ 518, "options" , 2, N_("read options from file")},
|
||||
{ 519, "no-armor", 0, "\r"},
|
||||
{ 520, "no-default-keyring", 0, "\r" },
|
||||
{ 521, "list-packets",0,N_("list only the sequence of packets")},
|
||||
{ 522, "no-greeting", 0, "\r" },
|
||||
{ 526, "no-verbose", 0, "\r"},
|
||||
{ 531, "list-trustdb",0 , "\r"},
|
||||
{ 533, "list-trust-path",0, "\r"},
|
||||
{ 534, "no-comment", 0, N_("do not write comment packets")},
|
||||
{ 535, "completes-needed", 1, N_("(default is 1)")},
|
||||
{ 536, "marginals-needed", 1, N_("(default is 3)")},
|
||||
{ 538, "trustdb-name", 2, "\r" },
|
||||
|
||||
{0} };
|
||||
ARGPARSE_ARGS pargs;
|
||||
IOBUF a;
|
||||
int rc=0;
|
||||
int orig_argc;
|
||||
char **orig_argv;
|
||||
const char *fname, *fname_print;
|
||||
STRLIST remusr= NULL, locusr=NULL;
|
||||
int nrings=0, sec_nrings=0;
|
||||
armor_filter_context_t afx;
|
||||
const char *s;
|
||||
FILE *configfp = NULL;
|
||||
char *configname = NULL;
|
||||
unsigned configlineno;
|
||||
int parse_verbose = 0;
|
||||
int default_config =1;
|
||||
int errors=0;
|
||||
int default_keyring = 1;
|
||||
int greeting = 1;
|
||||
enum cmd_values cmd = 0;
|
||||
const char *trustdb_name = NULL;
|
||||
|
||||
|
||||
secmem_init( 0 ); /* disable use of secmem */
|
||||
|
||||
i18n_init();
|
||||
opt.compress = -1; /* defaults to standard compress level */
|
||||
opt.def_cipher_algo = CIPHER_ALGO_BLOWFISH;
|
||||
opt.def_pubkey_algo = PUBKEY_ALGO_ELGAMAL;
|
||||
opt.def_digest_algo = DIGEST_ALGO_RMD160;
|
||||
opt.completes_needed = 1;
|
||||
opt.marginals_needed = 3;
|
||||
|
||||
/* check wether we have a config file on the commandline */
|
||||
orig_argc = argc;
|
||||
orig_argv = argv;
|
||||
pargs.argc = &argc;
|
||||
pargs.argv = &argv;
|
||||
pargs.flags= 1; /* do not remove the args */
|
||||
while( arg_parse( &pargs, opts) ) {
|
||||
if( pargs.r_opt == 'v' )
|
||||
parse_verbose++;
|
||||
else if( pargs.r_opt == 518 ) {
|
||||
/* yes there is one, so we do not try the default one, but
|
||||
* read the option file when it is encountered at the commandline
|
||||
*/
|
||||
default_config = 0;
|
||||
}
|
||||
}
|
||||
|
||||
if( default_config )
|
||||
configname = make_filename("~/.g10", "options", NULL );
|
||||
|
||||
argc = orig_argc;
|
||||
argv = orig_argv;
|
||||
pargs.argc = &argc;
|
||||
pargs.argv = &argv;
|
||||
pargs.flags= 1; /* do not remove the args */
|
||||
next_pass:
|
||||
if( configname ) {
|
||||
configlineno = 0;
|
||||
configfp = fopen( configname, "r" );
|
||||
if( !configfp ) {
|
||||
if( default_config ) {
|
||||
if( parse_verbose > 1 )
|
||||
log_info(_("note: no default option file '%s'\n"), configname );
|
||||
}
|
||||
else
|
||||
log_fatal(_("option file '%s': %s\n"),
|
||||
configname, strerror(errno) );
|
||||
m_free(configname); configname = NULL;
|
||||
}
|
||||
if( parse_verbose > 1 )
|
||||
log_info(_("reading options from '%s'\n"), configname );
|
||||
default_config = 0;
|
||||
}
|
||||
|
||||
while( optfile_parse( configfp, configname, &configlineno,
|
||||
&pargs, opts) ) {
|
||||
switch( pargs.r_opt ) {
|
||||
case 'v': opt.verbose++;
|
||||
opt.list_sigs=1;
|
||||
break;
|
||||
case 'o': opt.outfile = pargs.r.ret_str; break;
|
||||
case 'k': set_cmd( &cmd, aKMode ); break;
|
||||
case 'c': set_cmd( &cmd, aKModeC ); break;
|
||||
case 500: opt.batch = 1; greeting = 0; break;
|
||||
case 501: opt.answer_yes = 1; break;
|
||||
case 502: opt.answer_no = 1; break;
|
||||
case 508: opt.check_sigs = 1; opt.list_sigs = 1; break;
|
||||
case 509: add_keyring(pargs.r.ret_str); nrings++; break;
|
||||
case 510: opt.debug |= pargs.r.ret_ulong; break;
|
||||
case 511: opt.debug = ~0; break;
|
||||
case 512: set_status_fd( pargs.r.ret_int ); break;
|
||||
case 513: set_cmd( &cmd, aPrimegen); break;
|
||||
case 514: set_cmd( &cmd, aTest); break;
|
||||
case 515: opt.fingerprint = 1; break;
|
||||
case 516: set_cmd( &cmd, aPrintMDs); break;
|
||||
case 517: add_secret_keyring(pargs.r.ret_str); sec_nrings++; break;
|
||||
case 518:
|
||||
/* config files may not be nested (silently ignore them) */
|
||||
if( !configfp ) {
|
||||
m_free(configname);
|
||||
configname = m_strdup(pargs.r.ret_str);
|
||||
goto next_pass;
|
||||
}
|
||||
break;
|
||||
case 519: opt.no_armor=1; opt.armor=0; break;
|
||||
case 520: default_keyring = 0; break;
|
||||
case 521: set_cmd( &cmd, aListPackets); break;
|
||||
case 522: greeting = 0; break;
|
||||
case 523: set_passphrase_fd( pargs.r.ret_int ); break;
|
||||
case 526: opt.verbose = 0; opt.list_sigs=0; break;
|
||||
case 527:
|
||||
opt.def_cipher_algo = string_to_cipher_algo(pargs.r.ret_str);
|
||||
break;
|
||||
case 528:
|
||||
opt.def_pubkey_algo = string_to_pubkey_algo(pargs.r.ret_str);
|
||||
break;
|
||||
case 529:
|
||||
opt.def_digest_algo = string_to_digest_algo(pargs.r.ret_str);
|
||||
break;
|
||||
case 531: set_cmd( &cmd, aListTrustDB); break;
|
||||
case 532: quick_random_gen(1); break;
|
||||
case 533: set_cmd( &cmd, aListTrustPath); break;
|
||||
case 534: opt.no_comment=1; break;
|
||||
case 535: opt.completes_needed = pargs.r.ret_int; break;
|
||||
case 536: opt.marginals_needed = pargs.r.ret_int; break;
|
||||
case 538: trustdb_name = pargs.r.ret_str; break;
|
||||
default : errors++; pargs.err = configfp? 1:2; break;
|
||||
}
|
||||
}
|
||||
if( configfp ) {
|
||||
fclose( configfp );
|
||||
configfp = NULL;
|
||||
m_free(configname); configname = NULL;
|
||||
goto next_pass;
|
||||
}
|
||||
m_free( configname ); configname = NULL;
|
||||
if( !opt.def_cipher_algo || check_cipher_algo(opt.def_cipher_algo) ) {
|
||||
log_error(_("selected cipher algorithm is invalid\n"));
|
||||
errors++;
|
||||
}
|
||||
if( !opt.def_pubkey_algo || check_pubkey_algo(opt.def_pubkey_algo) ) {
|
||||
log_error(_("selected pubkey algorithm is invalid\n"));
|
||||
errors++;
|
||||
}
|
||||
if( !opt.def_digest_algo || check_digest_algo(opt.def_digest_algo) ) {
|
||||
log_error(_("selected digest algorithm is invalid\n"));
|
||||
errors++;
|
||||
}
|
||||
if( opt.completes_needed < 1 ) {
|
||||
log_error(_("completes-needed must be greater than 0\n"));
|
||||
errors++;
|
||||
}
|
||||
if( opt.marginals_needed < 2 ) {
|
||||
log_error(_("marginals-needed must be greater than 1\n"));
|
||||
errors++;
|
||||
}
|
||||
if( errors )
|
||||
g10_exit(2);
|
||||
|
||||
write_status( STATUS_ENTER );
|
||||
|
||||
set_debug();
|
||||
if( cmd == aKMode || cmd == aKModeC ) { /* kludge to be compatible to pgp */
|
||||
if( cmd == aKModeC ) {
|
||||
opt.fingerprint = 1;
|
||||
cmd = aKMode;
|
||||
}
|
||||
opt.list_sigs = 0;
|
||||
if( opt.verbose > 2 )
|
||||
opt.check_sigs++;
|
||||
if( opt.verbose > 1 )
|
||||
opt.list_sigs++;
|
||||
|
||||
opt.verbose = opt.verbose > 1;
|
||||
}
|
||||
if( opt.verbose > 1 )
|
||||
set_packet_list_mode(1);
|
||||
if( greeting ) {
|
||||
if( *(s=strusage(10)) )
|
||||
tty_printf("%s", s);
|
||||
if( *(s=strusage(30)) )
|
||||
tty_printf("%s", s);
|
||||
}
|
||||
|
||||
if( !sec_nrings || default_keyring ) { /* add default secret rings */
|
||||
char *p = make_filename("~/.g10", "secring.g10", NULL );
|
||||
add_secret_keyring(p);
|
||||
m_free(p);
|
||||
}
|
||||
if( !nrings || default_keyring ) { /* add default ring */
|
||||
char *p = make_filename("~/.g10", "pubring.g10", NULL );
|
||||
add_keyring(p);
|
||||
m_free(p);
|
||||
}
|
||||
|
||||
if( argc ) {
|
||||
fname_print = fname = *argv;
|
||||
}
|
||||
else {
|
||||
fname_print = "[stdin]";
|
||||
fname = NULL;
|
||||
if( get_passphrase_fd() == 0 ) {
|
||||
/* reading data and passphrase form stdin:
|
||||
* we assume the first line is the passphrase, so
|
||||
* we read it now
|
||||
*/
|
||||
/* FIXME: doit */
|
||||
}
|
||||
}
|
||||
|
||||
switch( cmd ) {
|
||||
case aPrimegen:
|
||||
case aPrintMDs:
|
||||
break;
|
||||
case aListTrustDB: rc = init_trustdb( argc? 1:0, trustdb_name ); break;
|
||||
default: rc = init_trustdb(1, trustdb_name ); break;
|
||||
}
|
||||
if( rc )
|
||||
log_error(_("failed to initialize the TrustDB: %s\n"), g10_errstr(rc));
|
||||
|
||||
|
||||
switch( cmd ) {
|
||||
case aKMode: /* list keyring */
|
||||
if( !argc ) { /* list the default public keyrings */
|
||||
int i, seq=0;
|
||||
const char *s;
|
||||
|
||||
while( (s=get_keyring(seq++)) ) {
|
||||
if( !(a = iobuf_open(s)) ) {
|
||||
log_error(_("can't open '%s'\n"), s);
|
||||
continue;
|
||||
}
|
||||
if( seq > 1 )
|
||||
putchar('\n');
|
||||
printf("%s\n", s );
|
||||
for(i=strlen(s); i; i-- )
|
||||
putchar('-');
|
||||
putchar('\n');
|
||||
|
||||
proc_packets( a );
|
||||
iobuf_close(a);
|
||||
}
|
||||
|
||||
}
|
||||
else if( argc == 1) { /* list the given keyring */
|
||||
if( !(a = iobuf_open(fname)) )
|
||||
log_fatal(_("can't open '%s'\n"), fname_print);
|
||||
proc_packets( a );
|
||||
iobuf_close(a);
|
||||
}
|
||||
else
|
||||
usage(1);
|
||||
break;
|
||||
|
||||
case aPrimegen:
|
||||
if( argc == 1 ) {
|
||||
mpi_print( stdout, generate_public_prime( atoi(argv[0]) ), 1);
|
||||
putchar('\n');
|
||||
}
|
||||
else if( argc == 2 ) {
|
||||
mpi_print( stdout, generate_elg_prime( atoi(argv[0]),
|
||||
atoi(argv[1]), NULL ), 1);
|
||||
putchar('\n');
|
||||
}
|
||||
else if( argc == 3 ) {
|
||||
MPI g = mpi_alloc(1);
|
||||
mpi_print( stdout, generate_elg_prime( atoi(argv[0]),
|
||||
atoi(argv[1]), g ), 1);
|
||||
printf("\nGenerator: ");
|
||||
mpi_print( stdout, g, 1 );
|
||||
putchar('\n');
|
||||
mpi_free(g);
|
||||
}
|
||||
else
|
||||
usage(1);
|
||||
break;
|
||||
|
||||
case aPrintMDs:
|
||||
if( !argc )
|
||||
print_mds(NULL);
|
||||
else {
|
||||
for(; argc; argc--, argv++ )
|
||||
print_mds(*argv);
|
||||
}
|
||||
break;
|
||||
|
||||
case aTest: do_test( argc? atoi(*argv): 0 ); break;
|
||||
|
||||
case aListTrustDB:
|
||||
if( !argc )
|
||||
list_trustdb(NULL);
|
||||
else {
|
||||
for( ; argc; argc--, argv++ )
|
||||
list_trustdb( *argv );
|
||||
}
|
||||
break;
|
||||
|
||||
case aListTrustPath:
|
||||
if( argc != 2 )
|
||||
wrong_args("--list-trust-path [-- -]<maxdepth> <username>");
|
||||
list_trust_path( atoi(*argv), argv[1] );
|
||||
break;
|
||||
|
||||
case aListPackets:
|
||||
opt.list_packets=1;
|
||||
default: /* do regular maintenace tasks */
|
||||
if( argc > 1 )
|
||||
usage(1);
|
||||
if( !(a = iobuf_open(fname)) )
|
||||
log_fatal(_("can't open '%s'\n"), fname_print);
|
||||
if( !opt.no_armor ) {
|
||||
/* push the armor filter, so it can peek at the input data */
|
||||
memset( &afx, 0, sizeof afx);
|
||||
iobuf_push_filter( a, armor_filter, &afx );
|
||||
}
|
||||
if( cmd == aListPackets ) {
|
||||
set_packet_list_mode(1);
|
||||
opt.list_packets=1;
|
||||
}
|
||||
proc_packets( a );
|
||||
iobuf_close(a);
|
||||
break;
|
||||
}
|
||||
|
||||
/* cleanup */
|
||||
FREE_STRLIST(remusr);
|
||||
FREE_STRLIST(locusr);
|
||||
g10_exit(0);
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
g10_exit( int rc )
|
||||
{
|
||||
if( opt.verbose )
|
||||
secmem_dump_stats();
|
||||
secmem_term();
|
||||
rc = rc? rc : log_get_errorcount(0)? 2:0;
|
||||
write_status( STATUS_LEAVE );
|
||||
exit(rc );
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
print_hex( byte *p, size_t n )
|
||||
{
|
||||
int i;
|
||||
|
||||
if( n == 20 ) {
|
||||
for(i=0; i < n ; i++, i++, p += 2 ) {
|
||||
if( i == 10 )
|
||||
putchar(' ');
|
||||
printf(" %02X%02X", *p, p[1] );
|
||||
}
|
||||
}
|
||||
else {
|
||||
for(i=0; i < n ; i++, p++ ) {
|
||||
if( i && !(i%8) )
|
||||
putchar(' ');
|
||||
printf(" %02X", *p );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
print_mds( const char *fname )
|
||||
{
|
||||
FILE *fp;
|
||||
char buf[1024];
|
||||
size_t n;
|
||||
MD_HANDLE md;
|
||||
|
||||
if( !fname ) {
|
||||
fp = stdin;
|
||||
fname = "[stdin]";
|
||||
}
|
||||
else
|
||||
fp = fopen( fname, "rb" );
|
||||
if( !fp ) {
|
||||
log_error("%s: %s\n", fname, strerror(errno) );
|
||||
return;
|
||||
}
|
||||
|
||||
md = md_open( DIGEST_ALGO_MD5, 0 );
|
||||
md_enable( md, DIGEST_ALGO_RMD160 );
|
||||
md_enable( md, DIGEST_ALGO_SHA1 );
|
||||
|
||||
while( (n=fread( buf, 1, DIM(buf), fp )) )
|
||||
md_write( md, buf, n );
|
||||
if( ferror(fp) )
|
||||
log_error("%s: %s\n", fname, strerror(errno) );
|
||||
else {
|
||||
md_final(md);
|
||||
printf( "%s: MD5 =", fname ); print_hex(md_read(md, DIGEST_ALGO_MD5), 16 );
|
||||
printf("\n%s: RMD160 =", fname ); print_hex(md_read(md, DIGEST_ALGO_RMD160), 20 );
|
||||
printf("\n%s: SHA1 =", fname ); print_hex(md_read(md, DIGEST_ALGO_SHA1), 20 );
|
||||
putchar('\n');
|
||||
}
|
||||
|
||||
|
||||
md_close(md);
|
||||
|
||||
if( fp != stdin )
|
||||
fclose(fp);
|
||||
}
|
||||
|
||||
|
||||
|
||||
static void
|
||||
do_test(int times)
|
||||
{
|
||||
#if 0
|
||||
MPI t = mpi_alloc( 50 );
|
||||
MPI m = mpi_alloc( 50 );
|
||||
MPI a = mpi_alloc( 50 );
|
||||
MPI b = mpi_alloc( 50 );
|
||||
MPI p = mpi_alloc( 50 );
|
||||
MPI x = mpi_alloc( 50 );
|
||||
|
||||
/* output = b/(a^x) mod p */
|
||||
log_debug("invm %d times ", times);
|
||||
for( ; times > 0; times -- ) {
|
||||
mpi_fromstr(a, "0xef45678343589854354a4545545454554545455"
|
||||
"aaaaaaaaaaaaa44444fffdecb33434343443331" );
|
||||
mpi_fromstr(b, "0x8765765589854354a4545545454554545455"
|
||||
"aaaaaaa466577778decb36666343443331" );
|
||||
mpi_invm( t, a, b );
|
||||
fputc('.', stderr); fflush(stderr);
|
||||
}
|
||||
|
||||
|
||||
m_check(NULL);
|
||||
#endif
|
||||
}
|
||||
|
|
@ -592,8 +592,11 @@ parse_certificate( IOBUF inp, int pkttype, unsigned long pktlen,
|
|||
}
|
||||
else
|
||||
cert->d.elg.is_protected = 0;
|
||||
|
||||
n = pktlen; cert->d.elg.x = mpi_read(inp, &n, 1 ); pktlen -=n;
|
||||
/* It does not make sense to read it into secure memory.
|
||||
* If the user is so careless, not to protect his secret key,
|
||||
* we can assume, that he operates an open system :=(.
|
||||
* So we put the key into secure memory when we unprotect him. */
|
||||
n = pktlen; cert->d.elg.x = mpi_read(inp, &n, 0 ); pktlen -=n;
|
||||
|
||||
cert->d.elg.csum = read_16(inp); pktlen -= 2;
|
||||
if( list_mode ) {
|
||||
|
@ -646,11 +649,11 @@ parse_certificate( IOBUF inp, int pkttype, unsigned long pktlen,
|
|||
}
|
||||
else
|
||||
cert->d.rsa.is_protected = 0;
|
||||
|
||||
n = pktlen; cert->d.rsa.rsa_d = mpi_read(inp, &n, 1 ); pktlen -=n;
|
||||
n = pktlen; cert->d.rsa.rsa_p = mpi_read(inp, &n, 1 ); pktlen -=n;
|
||||
n = pktlen; cert->d.rsa.rsa_q = mpi_read(inp, &n, 1 ); pktlen -=n;
|
||||
n = pktlen; cert->d.rsa.rsa_u = mpi_read(inp, &n, 1 ); pktlen -=n;
|
||||
/* (See comments at the code for elg keys) */
|
||||
n = pktlen; cert->d.rsa.rsa_d = mpi_read(inp, &n, 0 ); pktlen -=n;
|
||||
n = pktlen; cert->d.rsa.rsa_p = mpi_read(inp, &n, 0 ); pktlen -=n;
|
||||
n = pktlen; cert->d.rsa.rsa_q = mpi_read(inp, &n, 0 ); pktlen -=n;
|
||||
n = pktlen; cert->d.rsa.rsa_u = mpi_read(inp, &n, 0 ); pktlen -=n;
|
||||
|
||||
cert->d.rsa.csum = read_16(inp); pktlen -= 2;
|
||||
if( list_mode ) {
|
||||
|
|
|
@ -85,6 +85,9 @@ check_elg( PKT_secret_cert *cert )
|
|||
blowfish_decode_cfb( blowfish_ctx,
|
||||
cert->d.elg.protect.blowfish.iv,
|
||||
cert->d.elg.protect.blowfish.iv, 8 );
|
||||
mpi_set_secure(cert->d.elg.x );
|
||||
/*fixme: maybe it is better to set the buger secure with a
|
||||
* new get_buffer_secure() function */
|
||||
buffer = mpi_get_buffer( cert->d.elg.x, &nbytes, NULL );
|
||||
csum = checksum_u16( nbytes*8 );
|
||||
blowfish_decode_cfb( blowfish_ctx, buffer, buffer, nbytes );
|
||||
|
@ -196,6 +199,7 @@ check_rsa( PKT_secret_cert *cert )
|
|||
cert->d.rsa.protect.blowfish.iv, 8 );
|
||||
csum = 0;
|
||||
#define X(a) do { \
|
||||
mpi_set_secure(cert->d.rsa.rsa_##a); \
|
||||
buffer = mpi_get_buffer( cert->d.rsa.rsa_##a, &nbytes, NULL );\
|
||||
csum += checksum_u16( nbytes*8 ); \
|
||||
blowfish_decode_cfb( blowfish_ctx, buffer, buffer, nbytes ); \
|
||||
|
|
|
@ -371,10 +371,16 @@ dump_record( ulong rnum, TRUSTREC *rec, FILE *fp )
|
|||
case RECTYPE_VER: fprintf(fp, "version\n");
|
||||
break;
|
||||
case RECTYPE_DIR:
|
||||
fprintf(fp, "dir keyid=%08lx, key=%lu, ctl=%lu, sig=%lu%s\n",
|
||||
fprintf(fp, "dir keyid=%08lx, key=%lu, ctl=%lu, sig=%lu",
|
||||
rec->r.dir.keyid[1],
|
||||
rec->r.dir.keyrec, rec->r.dir.ctlrec, rec->r.dir.sigrec,
|
||||
rec->r.dir.no_sigs?" (inv sigs)":"");
|
||||
rec->r.dir.keyrec, rec->r.dir.ctlrec, rec->r.dir.sigrec );
|
||||
if( rec->r.dir.no_sigs == 1 )
|
||||
fputs(", (none)", fp );
|
||||
else if( rec->r.dir.no_sigs == 2 )
|
||||
fputs(", (invalid)", fp );
|
||||
else if( rec->r.dir.no_sigs )
|
||||
fputs(", (revoked)", fp );
|
||||
putc('\n', fp);
|
||||
break;
|
||||
case RECTYPE_KEY: fprintf(fp, "key keyid=%08lx, own=%lu, ownertrust=%02x\n",
|
||||
rec->r.key.keyid[1],
|
||||
|
@ -643,7 +649,7 @@ search_record( PKT_public_cert *pkc, TRUSTREC *rec )
|
|||
TRUSTREC keyrec;
|
||||
|
||||
if( read_record( rec->r.dir.keyrec, &keyrec, RECTYPE_KEY ) ) {
|
||||
log_error("%lu: ooops: invalid dir record\n", recnum );
|
||||
log_error("%lu: ooops: invalid key record\n", recnum );
|
||||
break;
|
||||
}
|
||||
if( keyrec.r.key.pubkey_algo == pkc->pubkey_algo
|
||||
|
@ -748,6 +754,8 @@ walk_sigrecs( SIGREC_CONTEXT *c, int create )
|
|||
if( !c->sigrec && create && !r->r.dir.no_sigs ) {
|
||||
rc = build_sigrecs( c->local_id );
|
||||
if( rc ) {
|
||||
if( rc == G10ERR_BAD_CERT )
|
||||
rc = -1; /* maybe no selcficnature */
|
||||
if( rc != -1 )
|
||||
log_info("%lu: error building sigs on the fly: %s\n",
|
||||
c->local_id, g10_errstr(rc) );
|
||||
|
@ -1088,6 +1096,10 @@ check_sigs( KBNODE keyblock, int *selfsig_okay )
|
|||
int selfsig;
|
||||
rc = check_key_signature( keyblock, node, &selfsig );
|
||||
if( !rc ) {
|
||||
rc = set_signature_packets_local_id( node->pkt->pkt.signature );
|
||||
if( rc )
|
||||
log_fatal("set_signature_packets_local_id failed: %s\n",
|
||||
g10_errstr(rc));
|
||||
if( selfsig ) {
|
||||
node->flag |= 2; /* mark signature valid */
|
||||
*selfsig_okay = 1;
|
||||
|
@ -1101,9 +1113,10 @@ check_sigs( KBNODE keyblock, int *selfsig_okay )
|
|||
node->flag |= 4; /* mark as duplicate */
|
||||
}
|
||||
if( DBG_TRUST )
|
||||
log_debug("trustdb: sig from %08lX: %s\n",
|
||||
log_debug("trustdb: sig from %08lX(%lu): %s%s\n",
|
||||
(ulong)node->pkt->pkt.signature->keyid[1],
|
||||
g10_errstr(rc) );
|
||||
node->pkt->pkt.signature->local_id,
|
||||
g10_errstr(rc), (node->flag&4)?" (dup)":"" );
|
||||
}
|
||||
}
|
||||
if( dups )
|
||||
|
@ -1128,6 +1141,7 @@ build_sigrecs( ulong pubkeyid )
|
|||
int rc=0;
|
||||
int i, selfsig;
|
||||
ulong rnum, rnum2;
|
||||
ulong first_sigrec = 0;
|
||||
|
||||
if( DBG_TRUST )
|
||||
log_debug("trustdb: build_sigrecs for pubkey %lu\n", (ulong)pubkeyid );
|
||||
|
@ -1164,11 +1178,11 @@ build_sigrecs( ulong pubkeyid )
|
|||
}
|
||||
if( !selfsig ) {
|
||||
log_error("build_sigrecs: self-certificate missing\n" );
|
||||
update_no_sigs( pubkeyid, 1 );
|
||||
update_no_sigs( pubkeyid, 2 );
|
||||
rc = G10ERR_BAD_CERT;
|
||||
goto leave;
|
||||
}
|
||||
update_no_sigs( pubkeyid, 0 );
|
||||
update_no_sigs( pubkeyid, 0 ); /* assume we have sigs */
|
||||
|
||||
/* valid key signatures are now marked; we can now build the
|
||||
* sigrecs */
|
||||
|
@ -1203,6 +1217,8 @@ build_sigrecs( ulong pubkeyid )
|
|||
log_error("build_sigrecs: write_record failed\n" );
|
||||
goto leave;
|
||||
}
|
||||
if( !first_sigrec )
|
||||
first_sigrec = rnum2;
|
||||
}
|
||||
rec2 = rec;
|
||||
rnum2 = rnum;
|
||||
|
@ -1226,6 +1242,8 @@ build_sigrecs( ulong pubkeyid )
|
|||
log_error("build_sigrecs: write_record failed\n" );
|
||||
goto leave;
|
||||
}
|
||||
if( !first_sigrec )
|
||||
first_sigrec = rnum2;
|
||||
}
|
||||
if( i ) { /* write the pending record */
|
||||
rec.r.sig.owner = pubkeyid;
|
||||
|
@ -1235,8 +1253,24 @@ build_sigrecs( ulong pubkeyid )
|
|||
log_error("build_sigrecs: write_record failed\n" );
|
||||
goto leave;
|
||||
}
|
||||
if( !first_sigrec )
|
||||
first_sigrec = rnum;
|
||||
}
|
||||
}
|
||||
if( first_sigrec ) {
|
||||
/* update the dir record */
|
||||
if( (rc =read_record( pubkeyid, &rec, RECTYPE_DIR )) ) {
|
||||
log_error("update_dir_record: read failed\n");
|
||||
goto leave;
|
||||
}
|
||||
rec.r.dir.sigrec = first_sigrec;
|
||||
if( (rc=write_record( pubkeyid, &rec )) ) {
|
||||
log_error("update_dir_record: write failed\n");
|
||||
goto leave;
|
||||
}
|
||||
}
|
||||
else
|
||||
update_no_sigs( pubkeyid, 1 ); /* no signatures */
|
||||
|
||||
leave:
|
||||
m_free( finfo );
|
||||
|
@ -1309,7 +1343,7 @@ static int
|
|||
propagate_trust( TRUST_SEG_LIST tslist )
|
||||
{
|
||||
int i, rc;
|
||||
unsigned trust;
|
||||
unsigned trust, tr;
|
||||
TRUST_SEG_LIST tsl;
|
||||
|
||||
for(tsl = tslist; tsl; tsl = tsl->next ) {
|
||||
|
@ -1325,9 +1359,11 @@ propagate_trust( TRUST_SEG_LIST tslist )
|
|||
tsl->seg[i].trust = trust;
|
||||
if( i > 0 ) {
|
||||
/* get the trust of this pubkey */
|
||||
rc = get_ownertrust( tsl->seg[i].lid, &trust );
|
||||
rc = get_ownertrust( tsl->seg[i].lid, &tr );
|
||||
if( rc )
|
||||
return rc;
|
||||
if( tr < trust )
|
||||
trust = tr;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1362,8 +1398,15 @@ do_check( ulong pubkeyid, TRUSTREC *dr, unsigned *trustlevel )
|
|||
if( !rc ) /* and read again */
|
||||
rc = read_record( pubkeyid, dr, RECTYPE_DIR );
|
||||
}
|
||||
if( !rc && !dr->r.dir.sigrec )
|
||||
rc = -1;
|
||||
if( !rc && !dr->r.dir.sigrec ) {
|
||||
/* See wether this is our own key */
|
||||
if( !qry_lid_table_flag( ultikey_table, pubkeyid, NULL ) ) {
|
||||
*trustlevel = TRUST_ULTIMATE;
|
||||
return 0;
|
||||
}
|
||||
else
|
||||
rc = -1;
|
||||
}
|
||||
if( rc )
|
||||
return rc; /* error while looking for sigrec or building sigrecs */
|
||||
|
||||
|
@ -1435,7 +1478,7 @@ do_check( ulong pubkeyid, TRUSTREC *dr, unsigned *trustlevel )
|
|||
* 1: used for initial program startup
|
||||
*/
|
||||
int
|
||||
init_trustdb( int level )
|
||||
init_trustdb( int level, const char *dbname )
|
||||
{
|
||||
int rc=0;
|
||||
|
||||
|
@ -1443,7 +1486,8 @@ init_trustdb( int level )
|
|||
ultikey_table = new_lid_table();
|
||||
|
||||
if( !level || level==1 ) {
|
||||
char *fname = make_filename("~/.g10", "trustdb.g10", NULL );
|
||||
char *fname = dbname? m_strdup( dbname )
|
||||
: make_filename("~/.g10", "trustdb.g10", NULL );
|
||||
if( access( fname, R_OK ) ) {
|
||||
if( errno != ENOENT ) {
|
||||
log_error("can't access %s: %s\n", fname, strerror(errno) );
|
||||
|
@ -1883,7 +1927,7 @@ update_no_sigs( ulong lid, int no_sigs )
|
|||
return G10ERR_TRUSTDB;
|
||||
}
|
||||
|
||||
rec.r.dir.no_sigs = !!no_sigs;
|
||||
rec.r.dir.no_sigs = no_sigs;
|
||||
if( write_record( lid, &rec ) ) {
|
||||
log_error("update_no_sigs: write failed\n");
|
||||
return G10ERR_TRUSTDB;
|
||||
|
|
|
@ -22,7 +22,7 @@
|
|||
#define G10_TRUSTDB_H
|
||||
|
||||
|
||||
|
||||
/* Trust values mus be sorted in ascending order */
|
||||
#define TRUST_UNKNOWN 0 /* not yet calculated */
|
||||
#define TRUST_EXPIRED 1 /* calculation may be invalid */
|
||||
#define TRUST_UNDEFINED 2 /* not enough informations for calculation */
|
||||
|
@ -35,7 +35,7 @@
|
|||
/*-- trustdb.c --*/
|
||||
void list_trustdb(const char *username);
|
||||
void list_trust_path( int max_depth, const char *username );
|
||||
int init_trustdb( int level );
|
||||
int init_trustdb( int level, const char *dbname );
|
||||
int check_trust( PKT_public_cert *pkc, unsigned *r_trustlevel );
|
||||
int enum_trust_web( void **context, ulong *lid );
|
||||
int get_ownertrust( ulong lid, unsigned *r_otrust );
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue