From: Jeff King <peff@peff.net>
To: git@vger.kernel.org
Subject: [PATCH 14/14] credentials: add "getpass" helper
Date: Mon, 18 Jul 2011 03:58:59 -0400 [thread overview]
Message-ID: <20110718075859.GN12341@sigill.intra.peff.net> (raw)
In-Reply-To: <20110718074642.GA11678@sigill.intra.peff.net>
This just does the normal "ask on the terminal, or use
GIT_ASKPASS" logic that we already do. But it's useful for
writers of third-party helpers. See the documentation for an
example.
Signed-off-by: Jeff King <peff@peff.net>
---
.gitignore | 1 +
Documentation/git-credential-getpass.txt | 58 ++++++++++++++++++++++++++++++
Makefile | 1 +
credential-getpass.c | 37 +++++++++++++++++++
4 files changed, 97 insertions(+), 0 deletions(-)
create mode 100644 Documentation/git-credential-getpass.txt
create mode 100644 credential-getpass.c
diff --git a/.gitignore b/.gitignore
index 2b7a3f9..a26ad00 100644
--- a/.gitignore
+++ b/.gitignore
@@ -33,6 +33,7 @@
/git-credential-cache
/git-credential-cache--daemon
/git-credential-store
+/git-credential-getpass
/git-cvsexportcommit
/git-cvsimport
/git-cvsserver
diff --git a/Documentation/git-credential-getpass.txt b/Documentation/git-credential-getpass.txt
new file mode 100644
index 0000000..a37c7a2
--- /dev/null
+++ b/Documentation/git-credential-getpass.txt
@@ -0,0 +1,58 @@
+git-credential-getpass(1)
+=========================
+
+NAME
+----
+git-credential-getpass - helper to request credentials from a user
+
+SYNOPSIS
+--------
+[verse]
+git credential-getpass
+
+DESCRIPTION
+-----------
+
+This command requests credentials from the user using git's "default"
+scheme, including asking via the terminal and respecting the
+`GIT_ASKPASS` environment variable; see linkgit:gitcredentials[7] for a
+complete description. The helpers are provided on stdout using git's
+credential helper protocol.
+
+There is no point in using this program as a credential helper by
+itself; it is exactly equivalent to git's behavior when no helper is
+configured.
+
+However, writers of third-party helpers may want to invoke this program
+to simulate git's behavior.
+
+EXAMPLES
+--------
+
+Here's a simple, silly example of a helper that stores credentials on
+disk (similar to linkgit:git-credential-store[1]), and how it could use
+the `getpass` helper.
+
+-------------------------------------------
+#!/bin/sh
+
+STORAGE=$HOME/.credentials
+
+for i in "$@"; do
+ case "$i" in
+ --unique=*)
+ unique=${i#--unique=} ;;
+ esac
+done
+
+if ! test -e "$STORAGE/$unique"; then
+ mkdir -m 0700 "$STORAGE"
+ git credential-getpass "$@" >"$STORAGE/$unique"
+fi
+
+cat "$STORAGE/$unique"
+-------------------------------------------
+
+GIT
+---
+Part of the linkgit:git[1] suite
diff --git a/Makefile b/Makefile
index e818257..86abd91 100644
--- a/Makefile
+++ b/Makefile
@@ -420,6 +420,7 @@ PROGRAM_OBJS += sh-i18n--envsubst.o
PROGRAM_OBJS += credential-cache.o
PROGRAM_OBJS += credential-cache--daemon.o
PROGRAM_OBJS += credential-store.o
+PROGRAM_OBJS += credential-getpass.o
PROGRAMS += $(patsubst %.o,git-%$X,$(PROGRAM_OBJS))
diff --git a/credential-getpass.c b/credential-getpass.c
new file mode 100644
index 0000000..6bfb8f8
--- /dev/null
+++ b/credential-getpass.c
@@ -0,0 +1,37 @@
+#include "cache.h"
+#include "credential.h"
+#include "parse-options.h"
+#include "string-list.h"
+
+int main(int argc, const char **argv)
+{
+ const char * const usage[] = {
+ "git credential-getpass [options]",
+ NULL
+ };
+ struct credential c = { NULL };
+ int reject = 0;
+ struct option options[] = {
+ OPT_BOOLEAN(0, "reject", &reject,
+ "reject a stored credential"),
+ OPT_STRING(0, "username", &c.username, "name",
+ "an existing username"),
+ OPT_STRING(0, "description", &c.description, "desc",
+ "human-readable description of the credential"),
+ OPT_STRING(0, "unique", &c.unique, "token",
+ "a unique context for the credential"),
+ OPT_END()
+ };
+
+ argc = parse_options(argc, argv, NULL, options, usage, 0);
+ if (argc)
+ usage_with_options(usage, options);
+
+ if (reject)
+ return 0;
+
+ credential_getpass(&c);
+ printf("username=%s\n", c.username);
+ printf("password=%s\n", c.password);
+ return 0;
+}
--
1.7.6.rc1.12.g65e2
next prev parent reply other threads:[~2011-07-18 7:59 UTC|newest]
Thread overview: 33+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-07-18 7:46 [RFC/PATCH 0/14] less annoying http authentication Jeff King
2011-07-18 7:48 ` [PATCH 01/14] parse-options: add OPT_STRING_LIST helper Jeff King
2011-07-18 7:48 ` [PATCH 02/14] url: decode buffers that are not NUL-terminated Jeff King
2011-07-20 22:16 ` Junio C Hamano
2011-07-18 7:49 ` [PATCH 03/14] improve httpd auth tests Jeff King
2011-07-18 7:49 ` [PATCH 04/14] remote-curl: don't retry auth failures with dumb protocol Jeff King
2011-07-18 7:50 ` [PATCH 05/14] http: retry authentication failures for all http requests Jeff King
2011-07-18 7:50 ` [PATCH 06/14] introduce credentials API Jeff King
2011-07-20 22:17 ` Junio C Hamano
2011-07-22 20:39 ` Jeff King
2011-07-22 21:42 ` Junio C Hamano
2011-07-22 22:16 ` Jeff King
2011-07-21 21:59 ` Junio C Hamano
2011-07-22 20:40 ` Jeff King
2011-07-18 7:50 ` [PATCH 07/14] http: use credential API to get passwords Jeff King
2011-07-18 7:51 ` [PATCH 08/14] look for credentials in config before prompting Jeff King
2011-07-18 7:51 ` [PATCH 09/14] allow the user to configure credential helpers Jeff King
2011-07-18 7:52 ` [PATCH 10/14] http: use hostname in credential description Jeff King
2011-07-20 22:17 ` Junio C Hamano
2011-07-22 20:47 ` Jeff King
2011-07-22 22:01 ` Junio C Hamano
2011-07-22 22:13 ` Jeff King
2011-08-08 14:37 ` Ted Zlatanov
2011-08-08 17:16 ` Junio C Hamano
2011-08-19 12:01 ` Ted Zlatanov
2011-08-25 20:23 ` Jeff King
2011-08-26 15:29 ` Ted Zlatanov
2011-07-18 7:52 ` [PATCH 11/14] docs: end-user documentation for the credential subsystem Jeff King
2011-07-20 22:17 ` Junio C Hamano
2011-07-18 7:55 ` [PATCH 12/14] credentials: add "cache" helper Jeff King
2011-07-18 7:58 ` [PATCH 13/14] credentials: add "store" helper Jeff King
2011-07-18 7:58 ` Jeff King [this message]
2011-07-18 8:00 ` [RFC/PATCH 0/14] less annoying http authentication Jeff King
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20110718075859.GN12341@sigill.intra.peff.net \
--to=peff@peff.net \
--cc=git@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).