Revision aba91192ae39cd1a2f79e7ed91e966df3cfe10b7 authored by Carlos Rica on 09 September 2007, 00:39:29 UTC, committed by Junio C Hamano on 10 September 2007, 04:30:54 UTC
Most of this patch code and message was written by Shawn O. Pearce.
I made some tests to know what the problem was, and then I changed
the code related with the SIGPIPE signal.

If the user has misconfigured `user.signingkey` in their .git/config
or just doesn't have any secret keys on their keyring and they ask
for a signed tag with `git tag -s` we better make sure the resulting
tag was actually signed by gpg.

Prior versions of builtin git-tag allowed this failure to slip
by without error as they were not checking the return value of
the finish_command() so they did not notice when gpg exited with
an error exit status.  They also did not fail if gpg produced an
empty output or if read_in_full received an error from the read
system call while trying to read the pipe back from gpg.

Finally, we did not actually honor any return value from the do_sign
function as it returns ssize_t but was being stored into an unsigned
long.  This caused the compiler to optimize out the die condition,
allowing git-tag to continue along and create the tag object.

However, when gpg gets a wrong username, it exits before any read was done
and then the writing process receives SIGPIPE and program is terminated.
By ignoring this signal, anyway, the function write_or_die gets EPIPE from
write_in_full and exits returning 0 to the system without a message.
Here we better call to write_in_full directly so we can fail
printing a message and return safely to the caller.

With these issues fixed `git-tag -s` will now fail to create the
tag and will report a non-zero exit status to its caller, thereby
allowing automated helper scripts to detect (and recover from)
failure if gpg is not working properly.

Proposed-by: Shawn O. Pearce <spearce@spearce.org>
Signed-off-by: Carlos Rica <jasampler@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
1 parent 7b02b85
History
File Mode Size
howto
technical
.gitignore -rw-r--r-- 63 bytes
Makefile -rw-r--r-- 4.4 KB
RelNotes-1.5.0.1.txt -rw-r--r-- 1.2 KB
RelNotes-1.5.0.2.txt -rw-r--r-- 2.3 KB
RelNotes-1.5.0.3.txt -rw-r--r-- 1.5 KB
RelNotes-1.5.0.4.txt -rw-r--r-- 462 bytes
RelNotes-1.5.0.5.txt -rw-r--r-- 609 bytes
RelNotes-1.5.0.6.txt -rw-r--r-- 484 bytes
RelNotes-1.5.0.7.txt -rw-r--r-- 482 bytes
RelNotes-1.5.0.txt -rw-r--r-- 18.2 KB
RelNotes-1.5.1.1.txt -rw-r--r-- 2.1 KB
RelNotes-1.5.1.2.txt -rw-r--r-- 1.6 KB
RelNotes-1.5.1.3.txt -rw-r--r-- 1.5 KB
RelNotes-1.5.1.4.txt -rw-r--r-- 843 bytes
RelNotes-1.5.1.5.txt -rw-r--r-- 1.4 KB
RelNotes-1.5.1.6.txt -rw-r--r-- 1.5 KB
RelNotes-1.5.1.txt -rw-r--r-- 13.0 KB
RelNotes-1.5.2.1.txt -rw-r--r-- 1.5 KB
RelNotes-1.5.2.2.txt -rw-r--r-- 2.0 KB
RelNotes-1.5.2.3.txt -rw-r--r-- 796 bytes
RelNotes-1.5.2.4.txt -rw-r--r-- 802 bytes
RelNotes-1.5.2.5.txt -rw-r--r-- 928 bytes
RelNotes-1.5.2.txt -rw-r--r-- 7.2 KB
RelNotes-1.5.3.1.txt -rw-r--r-- 326 bytes
RelNotes-1.5.3.txt -rw-r--r-- 13.7 KB
SubmittingPatches -rw-r--r-- 14.8 KB
asciidoc.conf -rw-r--r-- 1.4 KB
blame-options.txt -rw-r--r-- 2.6 KB
build-docdep.perl -rwxr-xr-x 968 bytes
callouts.xsl -rw-r--r-- 1.0 KB
cmd-list.perl -rwxr-xr-x 8.8 KB
config.txt -rw-r--r-- 28.9 KB
core-intro.txt -rw-r--r-- 24.7 KB
core-tutorial.txt -rw-r--r-- 62.1 KB
cvs-migration.txt -rw-r--r-- 6.8 KB
diff-format.txt -rw-r--r-- 8.1 KB
diff-options.txt -rw-r--r-- 5.3 KB
diffcore.txt -rw-r--r-- 10.8 KB
docbook-xsl.css -rw-r--r-- 4.3 KB
docbook.xsl -rw-r--r-- 249 bytes
everyday.txt -rw-r--r-- 14.1 KB
fetch-options.txt -rw-r--r-- 1.8 KB
fix-texi.perl -rwxr-xr-x 309 bytes
git-add.txt -rw-r--r-- 7.4 KB
git-am.txt -rw-r--r-- 4.7 KB
git-annotate.txt -rw-r--r-- 510 bytes
git-apply.txt -rw-r--r-- 6.6 KB
git-archimport.txt -rw-r--r-- 4.0 KB
git-archive.txt -rw-r--r-- 3.0 KB
git-bisect.txt -rw-r--r-- 6.1 KB
git-blame.txt -rw-r--r-- 6.4 KB
git-branch.txt -rw-r--r-- 4.5 KB
git-bundle.txt -rw-r--r-- 4.8 KB
git-cat-file.txt -rw-r--r-- 1.7 KB
git-check-attr.txt -rw-r--r-- 667 bytes
git-check-ref-format.txt -rw-r--r-- 1.7 KB
git-checkout-index.txt -rw-r--r-- 5.5 KB
git-checkout.txt -rw-r--r-- 6.5 KB
git-cherry-pick.txt -rw-r--r-- 2.0 KB
git-cherry.txt -rw-r--r-- 1.7 KB
git-citool.txt -rw-r--r-- 693 bytes
git-clean.txt -rw-r--r-- 1.3 KB
git-clone.txt -rw-r--r-- 5.6 KB
git-commit-tree.txt -rw-r--r-- 2.6 KB
git-commit.txt -rw-r--r-- 8.9 KB
git-config.txt -rw-r--r-- 8.8 KB
git-convert-objects.txt -rw-r--r-- 456 bytes
git-count-objects.txt -rw-r--r-- 766 bytes
git-cvsexportcommit.txt -rw-r--r-- 2.3 KB
git-cvsimport.txt -rw-r--r-- 5.1 KB
git-cvsserver.txt -rw-r--r-- 9.9 KB
git-daemon.txt -rw-r--r-- 9.7 KB
git-describe.txt -rw-r--r-- 3.8 KB
git-diff-files.txt -rw-r--r-- 1.4 KB
git-diff-index.txt -rw-r--r-- 4.7 KB
git-diff-tree.txt -rw-r--r-- 5.1 KB
git-diff.txt -rw-r--r-- 4.8 KB
git-fast-import.txt -rw-r--r-- 40.3 KB
git-fetch-pack.txt -rw-r--r-- 2.6 KB
git-fetch.txt -rw-r--r-- 1.3 KB
git-filter-branch.txt -rw-r--r-- 11.2 KB
git-fmt-merge-msg.txt -rw-r--r-- 1.3 KB
git-for-each-ref.txt -rw-r--r-- 4.6 KB
git-format-patch.txt -rw-r--r-- 6.4 KB
git-fsck-objects.txt -rw-r--r-- 304 bytes
git-fsck.txt -rw-r--r-- 4.6 KB
git-gc.txt -rw-r--r-- 3.4 KB
git-get-tar-commit-id.txt -rw-r--r-- 897 bytes
git-grep.txt -rw-r--r-- 3.8 KB
git-gui.txt -rw-r--r-- 3.0 KB
git-hash-object.txt -rw-r--r-- 1.0 KB
git-http-fetch.txt -rw-r--r-- 1.2 KB
git-http-push.txt -rw-r--r-- 2.8 KB
git-imap-send.txt -rw-r--r-- 1.1 KB
git-index-pack.txt -rw-r--r-- 3.2 KB
git-init-db.txt -rw-r--r-- 319 bytes
git-init.txt -rw-r--r-- 3.4 KB
git-instaweb.txt -rw-r--r-- 2.0 KB
git-local-fetch.txt -rw-r--r-- 1.5 KB
git-log.txt -rw-r--r-- 3.1 KB
git-lost-found.txt -rw-r--r-- 1.7 KB
git-ls-files.txt -rw-r--r-- 5.0 KB
git-ls-remote.txt -rw-r--r-- 2.2 KB
git-ls-tree.txt -rw-r--r-- 2.4 KB
git-mailinfo.txt -rw-r--r-- 1.8 KB
git-mailsplit.txt -rw-r--r-- 1.3 KB
git-merge-base.txt -rw-r--r-- 937 bytes
git-merge-file.txt -rw-r--r-- 2.5 KB
git-merge-index.txt -rw-r--r-- 2.6 KB
git-merge-one-file.txt -rw-r--r-- 623 bytes
git-merge-tree.txt -rw-r--r-- 887 bytes
git-merge.txt -rw-r--r-- 6.0 KB
git-mergetool.txt -rw-r--r-- 1.1 KB
git-mktag.txt -rw-r--r-- 977 bytes
git-mktree.txt -rw-r--r-- 608 bytes
git-mv.txt -rw-r--r-- 1.4 KB
git-name-rev.txt -rw-r--r-- 1.7 KB
git-pack-objects.txt -rw-r--r-- 7.1 KB
git-pack-redundant.txt -rw-r--r-- 1.3 KB
git-pack-refs.txt -rw-r--r-- 1.9 KB
git-parse-remote.txt -rw-r--r-- 1.3 KB
git-patch-id.txt -rw-r--r-- 1.1 KB
git-peek-remote.txt -rw-r--r-- 1.3 KB
git-prune-packed.txt -rw-r--r-- 1.0 KB
git-prune.txt -rw-r--r-- 1.2 KB
git-pull.txt -rw-r--r-- 4.9 KB
git-push.txt -rw-r--r-- 4.0 KB
git-quiltimport.txt -rw-r--r-- 1.5 KB
git-read-tree.txt -rw-r--r-- 13.7 KB
git-rebase.txt -rw-r--r-- 11.3 KB
git-receive-pack.txt -rw-r--r-- 5.5 KB
git-reflog.txt -rw-r--r-- 2.4 KB
git-relink.txt -rw-r--r-- 745 bytes
git-remote.txt -rw-r--r-- 3.2 KB
git-repack.txt -rw-r--r-- 3.6 KB
git-repo-config.txt -rw-r--r-- 274 bytes
git-request-pull.txt -rw-r--r-- 693 bytes
git-rerere.txt -rw-r--r-- 7.1 KB
git-reset.txt -rw-r--r-- 6.0 KB
git-rev-list.txt -rw-r--r-- 12.2 KB
git-rev-parse.txt -rw-r--r-- 9.9 KB
git-revert.txt -rw-r--r-- 1.5 KB
git-rm.txt -rw-r--r-- 2.6 KB
git-runstatus.txt -rw-r--r-- 1.6 KB
git-send-email.txt -rw-r--r-- 4.9 KB
git-send-pack.txt -rw-r--r-- 3.5 KB
git-sh-setup.txt -rw-r--r-- 1.8 KB
git-shell.txt -rw-r--r-- 801 bytes
git-shortlog.txt -rw-r--r-- 1.3 KB
git-show-branch.txt -rw-r--r-- 5.8 KB
git-show-index.txt -rw-r--r-- 591 bytes
git-show-ref.txt -rw-r--r-- 5.6 KB
git-show.txt -rw-r--r-- 1.9 KB
git-ssh-fetch.txt -rw-r--r-- 1.0 KB
git-ssh-upload.txt -rw-r--r-- 976 bytes
git-stash.txt -rw-r--r-- 5.2 KB
git-status.txt -rw-r--r-- 1.8 KB
git-stripspace.txt -rw-r--r-- 597 bytes
git-submodule.txt -rw-r--r-- 2.3 KB
git-svn.txt -rw-r--r-- 19.4 KB
git-svnimport.txt -rw-r--r-- 5.3 KB
git-symbolic-ref.txt -rw-r--r-- 1.8 KB
git-tag.txt -rw-r--r-- 7.0 KB
git-tar-tree.txt -rw-r--r-- 2.5 KB
git-tools.txt -rw-r--r-- 3.3 KB
git-unpack-file.txt -rw-r--r-- 604 bytes
git-unpack-objects.txt -rw-r--r-- 1.2 KB
git-update-index.txt -rw-r--r-- 10.7 KB
git-update-ref.txt -rw-r--r-- 3.1 KB
git-update-server-info.txt -rw-r--r-- 1.0 KB
git-upload-archive.txt -rw-r--r-- 753 bytes
git-upload-pack.txt -rw-r--r-- 943 bytes
git-var.txt -rw-r--r-- 1.3 KB
git-verify-pack.txt -rw-r--r-- 935 bytes
git-verify-tag.txt -rw-r--r-- 526 bytes
git-whatchanged.txt -rw-r--r-- 1.8 KB
git-write-tree.txt -rw-r--r-- 1.1 KB
git.txt -rw-r--r-- 14.2 KB
gitattributes.txt -rw-r--r-- 13.1 KB
gitignore.txt -rw-r--r-- 3.8 KB
gitk.txt -rw-r--r-- 2.6 KB
gitmodules.txt -rw-r--r-- 1.4 KB
glossary.txt -rw-r--r-- 19.3 KB
hooks.txt -rw-r--r-- 7.7 KB
howto-index.sh -rwxr-xr-x 669 bytes
i18n.txt -rw-r--r-- 2.2 KB
install-doc-quick.sh -rwxr-xr-x 703 bytes
install-webdoc.sh -rwxr-xr-x 622 bytes
merge-options.txt -rw-r--r-- 1.1 KB
merge-strategies.txt -rw-r--r-- 1.3 KB
pretty-formats.txt -rw-r--r-- 2.8 KB
pretty-options.txt -rw-r--r-- 898 bytes
pull-fetch-param.txt -rw-r--r-- 2.9 KB
repository-layout.txt -rw-r--r-- 6.6 KB
tutorial-2.txt -rw-r--r-- 13.9 KB
tutorial.txt -rw-r--r-- 19.4 KB
urls-remotes.txt -rw-r--r-- 1.4 KB
urls.txt -rw-r--r-- 1.6 KB
user-manual.conf -rw-r--r-- 413 bytes
user-manual.txt -rw-r--r-- 144.4 KB

back to top