blob: d025ef2881b8a2c030fa3e112245d105b4ea2f18 [file] [log] [blame]
/*
* testduo.c
*
* Copyright (c) 2010 Duo Security
* All rights reserved, all wrongs reversed.
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "duo.h"
#define DUO_FAIL_SAFE 0
int
main(int argc, char *argv[])
{
duo_t *duo;
duo_code_t code;
char *host, *ikey, *skey, *username;
int i, flags, retries;
if (argc != 2) {
fprintf(stderr, "usage: %s <username>\n", argv[0]);
exit(1);
}
username = argv[1];
flags = 0;
retries = 3;
if ((host = getenv("DUO_API_HOST")) == NULL ||
(ikey = getenv("DUO_IKEY")) == NULL ||
(skey = getenv("DUO_SKEY")) == NULL) {
fprintf(stderr, "missing DUO_API_HOST or DUO_IKEY or "
"DUO_SKEY environment\n");
exit(1);
}
if ((duo = duo_open(host, ikey, skey, "testduo", NULL, DUO_NO_TIMEOUT, NULL)) == NULL) {
fprintf(stderr, "duo_open failed\n");
exit(1);
}
if (getenv("DUO_SYNC")) {
flags |= DUO_FLAG_SYNC;
}
if (getenv("DUO_AUTO")) {
flags |= DUO_FLAG_AUTO;
retries = 1;
}
for (i = 0; i < retries; i++) {
code = duo_login(duo, username, NULL, flags, "test", DUO_FAIL_SAFE);
printf("\n");
if (code == DUO_OK) {
fprintf(stderr, "(log) OK %s\n", duo_geterr(duo));
} else if (code == DUO_FAIL) {
fprintf(stderr, "(log) FAIL %s\n", duo_geterr(duo));
} else if (code == DUO_ABORT) {
fprintf(stderr, "(log) ABORT %s\n", duo_geterr(duo));
} else {
fprintf(stderr, "(log) ERROR(%d) %s\n", code, duo_geterr(duo));
}
if (code == DUO_OK || code != DUO_FAIL)
break;
}
duo_close(duo);
return (0);
}