Example #1
0
int libmail_gpg_deletekey(const char *gpgdir, int secret,
			  const char *fingerprint,
			  int (*dump_func)(const char *, size_t, void *),
			  void *voidarg)
{
	char *argvec[8];
	int rc;

	argvec[0]="gpg";
	argvec[1]="--command-fd";
	argvec[2]="0";
	argvec[3]= secret ? "--delete-secret-key":"--delete-key";
	argvec[4]="-q";
	argvec[5]="--no-tty";
	argvec[6]=(char *)fingerprint;
	argvec[7]=0;

	if (libmail_gpg_fork(&libmail_gpg_stdin, &libmail_gpg_stdout, NULL,
			     gpgdir, argvec) < 0)
		rc= -1;
	else
	{
		int rc2;

		rc=dodeletekey(dump_func, voidarg);
		rc2=libmail_gpg_cleanup();
		if (rc2)
			rc=rc2;
	}
	return (rc);
}
Example #2
0
int libmail_gpg_checksign(const char *gpgdir, const char *content,
		  const char *signature,
		  int (*dump_func)(const char *, size_t, void *),
		  void *voidarg)
{
	char *argvec[10];
	int rc;

	argvec[0]="gpg";
	argvec[1]="--no-tty";
	argvec[2]="--verify";
	argvec[3]=(char *)signature;
	argvec[4]=(char *)content;
	argvec[5]=0;

	if (libmail_gpg_fork(&libmail_gpg_stdin, &libmail_gpg_stdout,
			     &libmail_gpg_stderr, gpgdir, argvec) < 0)
		rc= -1;
	else
	{
		int rc2;

		rc=dochecksign(dump_func, voidarg);
		rc2=libmail_gpg_cleanup();
		if (rc2)
			rc=rc2;
	}
	return (rc);
}
Example #3
0
int libmail_gpg_signkey(const char *gpgdir, const char *signthis, const char *signwith,
                        int passphrase_fd,
                        int (*dump_func)(const char *, size_t, void *),
                        int trust_level,
                        void *voidarg)
{
    char *argvec[12];
    int rc;
    char passphrase_fd_buf[NUMBUFSIZE];
    int i;

    argvec[0]="gpg";
    argvec[1]="--command-fd";
    argvec[2]="0";
    argvec[3]="--default-key";
    argvec[4]=(char *)signwith;
    argvec[5]="-q";
    argvec[6]="--no-tty";

    i=7;
    if (passphrase_fd >= 0 && fcntl(passphrase_fd, F_SETFD, 0) >= 0)
    {
        GPGARGV_PASSPHRASE_FD(argvec, i, passphrase_fd,
                              passphrase_fd_buf);
    }

    argvec[i++]="--sign-key";
    argvec[i++]=(char *)signthis;
    argvec[i]=0;

    if (libmail_gpg_fork(&libmail_gpg_stdin, &libmail_gpg_stdout, NULL, gpgdir, argvec) < 0)
        rc= -1;
    else
    {
        int rc2;

        char cmdstr[10];

#if GPG_HAS_CERT_CHECK_LEVEL

        cmdstr[0]='0';

        if (trust_level > 0 && trust_level <= 9)
            cmdstr[0]='0' + trust_level;

        strcpy(cmdstr+1, "\nY\n");

#else
        strcpy(cmdstr, "Y\n");
#endif

        rc=dosignkey(dump_func, cmdstr, voidarg);
        rc2=libmail_gpg_cleanup();
        if (rc2)
            rc=rc2;
    }
    return (rc);
}
Example #4
0
static int dodeletekey(int (*dump_func)(const char *, size_t, void *),
		    void *voidarg)
{
	int rc=libmail_gpg_write("Y\n", 2, dump_func, NULL, NULL, 0, voidarg);
	int rc2;

	if (rc == 0)
		rc=libmail_gpg_read(dump_func, NULL, NULL, 0, voidarg);
	rc2=libmail_gpg_cleanup();
	if (rc == 0)
		rc=rc2;
	return (rc);
}
Example #5
0
static int dosignkey(int (*dump_func)(const char *, size_t, void *),
                     const char *cmdstr,
                     void *voidarg)
{
    int rc=libmail_gpg_write( cmdstr, strlen(cmdstr),
                              dump_func, NULL, NULL, 0, voidarg);
    int rc2;

    if (rc == 0)
        rc=libmail_gpg_read(dump_func, NULL, NULL, 0, voidarg);
    rc2=libmail_gpg_cleanup();
    if (rc == 0)
        rc=rc2;
    return (rc);
}