Fall back to curses if DISPLAY is not set
[pinentry.git] / qt / main.cpp
1 /* main.cpp - Secure KDE dialog for PIN entry.
2    Copyright (C) 2002 Klarälvdalens Datakonsult AB
3    Written by Steffen Hansen <steffen@klaralvdalens-datakonsult.se>.
4    
5    This program is free software; you can redistribute it and/or
6    modify it under the terms of the GNU General Public License as
7    published by the Free Software Foundation; either version 2 of the
8    License, or (at your option) any later version.
9  
10    This program is distributed in the hope that it will be useful, but
11    WITHOUT ANY WARRANTY; without even the implied warranty of
12    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13    General Public License for more details.
14  
15    You should have received a copy of the GNU General Public License
16    along with this program; if not, write to the Free Software
17    Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
18    02111-1307, USA  */
19
20 #ifdef HAVE_CONFIG_H
21 #include "config.h"
22 #endif
23
24
25 extern "C"
26 {
27 #include "memory.h"
28 #include "secmem-util.h"
29 }
30
31 #include <new>
32
33 #ifdef USE_KDE
34 # include <kapp.h>
35 # include <kcmdlineargs.h>
36 # include <kaboutdata.h>
37 # include <klocale.h>
38 #else
39 # include <qapplication.h>
40 #endif // USE_KDE
41
42 #include "pinentrydialog.h"
43 #include "pinentrycontroller.h"
44
45
46
47 #ifdef FALLBACK_CURSES
48 #include <pinentry.h>
49 #include <pinentry-curses.h>
50
51 pinentry_cmd_handler_t pinentry_cmd_handler = curses_cmd_handler;
52
53 int curses_main (int argc, char *argv[])
54 {
55   pinentry_init ();
56
57   /* Consumes all arguments.  */
58   if (pinentry_parse_opts (argc, argv))
59     {
60       printf ("pinentry-curses " VERSION "\n");
61       exit (EXIT_SUCCESS);
62     }
63
64   if (pinentry_loop ())
65     return 1;
66
67   return 0;
68 }
69 #endif
70
71 extern "C++" {
72   extern bool is_secure;
73 };
74
75 #ifndef VERSION
76 #define VERSION "0.1"
77 #endif
78
79 #ifdef USE_KDE
80 static const char *description =
81         I18N_NOOP("Pinentry");
82 // INSERT A DESCRIPTION FOR YOUR APPLICATION HERE
83  
84  
85 static KCmdLineOptions options[] =
86 {
87   { 0, 0, 0 }
88   // INSERT YOUR COMMANDLINE OPTIONS HERE
89 };
90 #endif // USE_KDE
91
92 void my_new_handler()
93 {
94   secmem_term();
95   qFatal("Out of memory!");
96 }
97
98 int qt_main( int argc, char *argv[] )
99 {
100     secmem_init( 16384*8 );
101     secmem_set_flags(SECMEM_WARN);
102     drop_privs();
103     set_new_handler(my_new_handler);
104     try {
105 #ifdef USE_KDE
106       KAboutData aboutData( "pinentry", I18N_NOOP("Pinentry"),
107                             VERSION, description, KAboutData::License_GPL,
108                             "(c) 2001, Steffen Hansen, Klarälvdalens Datakonsult AB", 0, 0, "klaralvdalens-datakonsult.se");
109       aboutData.addAuthor("Steffen Hansen, Klarälvdalens Datakonsult AB",0, "steffen@klaralvdalens-datakonsult.se");
110       KCmdLineArgs::init( argc, argv, &aboutData );
111       KCmdLineArgs::addCmdLineOptions( options ); // Add our own options.
112       KApplication app;
113 #else
114       QApplication app( argc, argv );
115 #endif // USE_KDE
116       is_secure = true;
117       
118       PinEntryController ctrl;
119       ctrl.exec();
120       return 0;
121     } catch( std::bad_alloc& ex ) {
122       qDebug("Out of memory, got a %s", ex.what());
123       return -1;
124     }
125 }
126
127 int main( int argc, char* argv[] ) 
128 {
129 #ifdef FALLBACK_CURSES
130   if( getenv( "DISPLAY" ) ) {
131 #endif
132     return qt_main( argc, argv );
133 #ifdef FALLBACK_CURSES
134   } else {
135     return curses_main( argc, argv );
136   }
137 #endif
138 }