removed debug output
[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 #include <stdlib.h>
34
35 #ifdef USE_KDE
36 # include <kapp.h>
37 # include <kcmdlineargs.h>
38 # include <kaboutdata.h>
39 # include <klocale.h>
40 #else
41 # include <qapplication.h>
42 #endif // USE_KDE
43
44 #include "pinentrydialog.h"
45 #include "pinentrycontroller.h"
46
47
48
49 #ifdef FALLBACK_CURSES
50 #include <pinentry.h>
51 #include <pinentry-curses.h>
52
53 pinentry_cmd_handler_t pinentry_cmd_handler = curses_cmd_handler;
54
55 int curses_main (int argc, char *argv[])
56 {
57   pinentry_init ();
58
59   /* Consumes all arguments.  */
60   if (pinentry_parse_opts (argc, argv))
61     {
62       printf ("pinentry-curses " VERSION "\n");
63       exit (EXIT_SUCCESS);
64     }
65
66   if (pinentry_loop ())
67     return 1;
68
69   return 0;
70 }
71 #endif
72
73 extern "C++" {
74   extern bool is_secure;
75 };
76
77 #ifndef VERSION
78 #define VERSION "0.1"
79 #endif
80
81 #ifdef USE_KDE
82 static const char *description =
83         I18N_NOOP("Pinentry");
84 // INSERT A DESCRIPTION FOR YOUR APPLICATION HERE
85  
86  
87 static KCmdLineOptions options[] =
88 {
89   { 0, 0, 0 }
90   // INSERT YOUR COMMANDLINE OPTIONS HERE
91 };
92 #else
93 static void 
94 usage( const char* appname )
95 {
96   fprintf (stderr, "Usage: %s [OPTION]...\n\
97 Ask securely for a secret and print it to stdout.\n\
98 \n\
99       --display DISPLAY Set the X display\n\
100       --parent-wid      Set the window id the dialogs should appear over\n\
101       --help, -h        Display this help and exit\n", appname);
102
103 }
104 #endif // USE_KDE
105
106 void my_new_handler()
107 {
108   secmem_term();
109   qFatal("Out of memory!");
110 }
111
112 int qt_main( int argc, char *argv[] )
113 {
114     secmem_init( 16384*8 );
115     secmem_set_flags(SECMEM_WARN);
116     drop_privs();
117     set_new_handler(my_new_handler);
118     try {
119 #ifdef USE_KDE
120       KAboutData aboutData( "pinentry", I18N_NOOP("Pinentry"),
121                             VERSION, description, KAboutData::License_GPL,
122                             "(c) 2001, Steffen Hansen, Klarälvdalens Datakonsult AB", 0, 0, "klaralvdalens-datakonsult.se");
123       aboutData.addAuthor("Steffen Hansen, Klarälvdalens Datakonsult AB",0, "steffen@klaralvdalens-datakonsult.se");
124       KCmdLineArgs::init( argc, argv, &aboutData );
125       KCmdLineArgs::addCmdLineOptions( options ); // TODO(steffen): Add KDE option handling
126       KApplication app;
127 #else
128       QApplication app( argc, argv );
129       WId parentwid = 0;
130       for( int i = 0; i < argc; ++i ) {
131         if( !strncmp( argv[i], "--parent-wid", 12 ) ) {
132           int len =  strlen( argv[i] );
133           if( len > 12 && argv[i][12] == '=' ) {
134             parentwid = strtol( argv[i]+13, 0, 0 );
135           } else if( len == 12 && i+1 < argc ) {
136             parentwid = strtol( argv[i+1], 0, 0 );
137           }
138         } else if( !strcmp( argv[i], "--help" ) || !strcmp( argv[i], "-h" ) ) { 
139           usage( argv[0] );
140           exit(0);
141         }
142       }
143 #endif // USE_KDE
144       is_secure = true;
145
146       PinEntryController ctrl( parentwid );
147       ctrl.exec();
148       return 0;
149     } catch( std::bad_alloc& ex ) {
150       qDebug("Out of memory, got a %s", ex.what());
151       return -1;
152     }
153 }
154
155 int main( int argc, char* argv[] ) 
156 {
157 #ifdef FALLBACK_CURSES
158   if( getenv( "DISPLAY" ) ) {
159 #endif
160     return qt_main( argc, argv );
161 #ifdef FALLBACK_CURSES
162   } else {
163     return curses_main( argc, argv );
164   }
165 #endif
166 }