1/* opieserv.c: Sample OTP server based on the opiechallenge() and 2 opieverify() library routines. 3 4%%% copyright-cmetz-96 5This software is Copyright 1996-2001 by Craig Metz, All Rights Reserved. 6The Inner Net License Version 3 applies to this software. 7You should have received a copy of the license with this software. If 8you didn't get a copy, you may request one from <license@inner.net>. 9 10 History: 11 12 Modified by cmetz for OPIE 2.3. Send debug info to syslog. 13 Created by cmetz for OPIE 2.2. 14*/ 15#include "opie_cfg.h" 16#include <stdio.h> 17#if DEBUG 18#include <syslog.h> 19#endif /* DEBUG */ 20#include "opie.h" 21 22int main FUNCTION((argc, argv), int argc AND char *argv[]) 23{ 24 struct opie opie; 25 char *principal; 26 char buffer[1024]; 27 char challenge[OPIE_CHALLENGE_MAX+1]; 28 char response[OPIE_RESPONSE_MAX+1]; 29 int result; 30 31 if (argc <= 1) { 32 fputs("Principal: ", stderr); 33 if (!opiereadpass(buffer, sizeof(buffer)-1, 1)) 34 fprintf(stderr, "Error reading principal!"); 35 principal = buffer; 36 } else { 37 principal = argv[1]; 38 } 39#if DEBUG 40 syslog(LOG_DEBUG, "Principal is +%s+", principal); 41#endif /* DEBUG */ 42 43 switch (result = opiechallenge(&opie, principal, challenge)) { 44 case -1: 45 fputs("System error!\n", stderr); 46 exit(1); 47 case 0: 48 break; 49 case 1: 50 fputs("User not found!\n", stderr); 51 exit(1); 52 case 2: 53 fputs("System error!\n", stderr); 54 exit(1); 55 default: 56 fprintf(stderr, "Unknown error %d!\n", result); 57 exit(1); 58 }; 59 60 fputs(challenge, stdout); 61 fputc('\n', stdout); 62 fflush(stdout); 63 fputs("Response: ", stderr); 64 if (!opiereadpass(response, OPIE_RESPONSE_MAX, 1)) { 65 fputs("Error reading response!\n", stderr); 66 exit(1); 67 }; 68 69 switch (result = opieverify(&opie, response)) { 70 case -1: 71 fputs("System error!\n", stderr); 72 exit(1); 73 case 0: 74 fputs("User verified.\n", stderr); 75 exit(0); 76 case 1: 77 fputs("Verify failed!\n", stderr); 78 exit(1); 79 default: 80 fprintf(stderr, "Unknown error %d!\n", result); 81 exit(1); 82 } 83} 84