RemotePluginProcess: use syslog for debugging
[accounts-sso:signon.git] / src / remotepluginprocess / main.cpp
1 /*
2  * This file is part of signon
3  *
4  * Copyright (C) 2009-2010 Nokia Corporation.
5  *
6  * Contact: Alberto Mardegan <alberto.mardegan@nokia.com>
7  *
8  * This library is free software; you can redistribute it and/or
9  * modify it under the terms of the GNU Lesser General Public License
10  * version 2.1 as published by the Free Software Foundation.
11  *
12  * This library is distributed in the hope that it will be useful, but
13  * WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15  * Lesser General Public License for more details.
16  *
17  * You should have received a copy of the GNU Lesser General Public
18  * License along with this library; if not, write to the Free Software
19  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
20  * 02110-1301 USA
21  */
22
23 extern "C" {
24 #include <signal.h>
25 #include <stdlib.h>
26 #include <stddef.h>
27 #include <errno.h>
28 #include <unistd.h>
29 #include <fcntl.h>
30 #include <sys/poll.h>
31 #include <syslog.h>
32 }
33
34 #include "remotepluginprocess.h"
35
36 #include <QDebug>
37
38 using namespace RemotePluginProcessNS;
39
40 RemotePluginProcess *process = NULL;
41
42 static void messageHandler(QtMsgType type, const char *msg)
43 {
44     int priority;
45     switch (type) {
46         case QtWarningMsg: priority = LOG_WARNING; break;
47         case QtCriticalMsg: priority = LOG_CRIT; break;
48         case QtFatalMsg: priority = LOG_EMERG; break;
49         case QtDebugMsg:
50                          /* fall through */
51         default: priority = LOG_INFO; break;
52     }
53
54     syslog(priority, msg);
55 }
56
57 int main(int argc, char *argv[])
58 {
59     qInstallMsgHandler(messageHandler);
60
61     TRACE();
62
63 #ifndef NO_SIGNON_USER
64     if (!::getuid()) {
65         BLAME() << argv[0] << " cannot be started with root priviledges!!!";
66         exit(2);
67     }
68 #endif
69
70     QCoreApplication app(argc, argv);
71
72     if (argc < 2) {
73         TRACE() << "Type of plugin is not specified";
74         exit(1);
75     }
76
77     QString type = app.arguments().at(1); TRACE() << type;
78
79     fcntl(fileno(stdin), F_SETFL, fcntl(fileno(stdin), F_GETFL, 0) | O_NONBLOCK);
80
81     process = RemotePluginProcess::createRemotePluginProcess(type, &app);
82
83     if (!process)
84         return 1;
85
86     fprintf(stdout, "process started");
87     fflush(stdout);
88
89     QObject::connect(process, SIGNAL(processStopped()), &app, SLOT(quit()));
90     return app.exec();
91 }