1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
|
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
<title>kshowmail: kshowmail/commandentry.cpp Source File</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
<link href="tabs.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.5.0 -->
<div class="tabs">
<ul>
<li><a href="index.html"><span>Main Page</span></a></li>
<li><a href="namespaces.html"><span>Namespaces</span></a></li>
<li><a href="classes.html"><span>Classes</span></a></li>
<li id="current"><a href="files.html"><span>Files</span></a></li>
<li><a href="dirs.html"><span>Directories</span></a></li>
</ul></div>
<div class="nav">
<a class="el" href="dir_656923b733374505e0e2f68ecb68d952.html">kshowmail</a></div>
<h1>commandentry.cpp</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/***************************************************************************</span>
<a name="l00002"></a>00002 <span class="comment"> commandentry.cpp - description</span>
<a name="l00003"></a>00003 <span class="comment"> -------------------</span>
<a name="l00004"></a>00004 <span class="comment"> begin : Thu Jul 20 2000</span>
<a name="l00005"></a>00005 <span class="comment"> copyright : (C) 2000-2001 by Eggert Ehmke</span>
<a name="l00006"></a>00006 <span class="comment"> email : eggert.ehmke@berlin.de</span>
<a name="l00007"></a>00007 <span class="comment"> ***************************************************************************/</span>
<a name="l00008"></a>00008
<a name="l00009"></a>00009 <span class="comment">/***************************************************************************</span>
<a name="l00010"></a>00010 <span class="comment"> * *</span>
<a name="l00011"></a>00011 <span class="comment"> * This program is free software; you can redistribute it and/or modify *</span>
<a name="l00012"></a>00012 <span class="comment"> * it under the terms of the GNU General Public License as published by *</span>
<a name="l00013"></a>00013 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or *</span>
<a name="l00014"></a>00014 <span class="comment"> * (at your option) any later version. *</span>
<a name="l00015"></a>00015 <span class="comment"> * *</span>
<a name="l00016"></a>00016 <span class="comment"> ***************************************************************************/</span>
<a name="l00017"></a>00017 <span class="preprocessor">#include <stdlib.h></span>
<a name="l00018"></a>00018 <span class="preprocessor">#include <stdio.h></span>
<a name="l00019"></a>00019 <span class="preprocessor">#include <unistd.h></span>
<a name="l00020"></a>00020
<a name="l00021"></a>00021 <span class="preprocessor">#include <kapplication.h></span>
<a name="l00022"></a>00022 <span class="preprocessor">#include <kaction.h></span>
<a name="l00023"></a>00023 <span class="preprocessor">#include <kdebug.h></span>
<a name="l00024"></a>00024 <span class="preprocessor">#include <qmessagebox.h></span>
<a name="l00025"></a>00025
<a name="l00026"></a>00026 <span class="preprocessor">#include "commandentry.h"</span>
<a name="l00027"></a>00027 <span class="preprocessor">#include "editdialog.h"</span>
<a name="l00028"></a>00028
<a name="l00029"></a><a class="code" href="classCommandEntry.html#199c7f73a993b784a15eb3fc5f893956">00029</a> <a class="code" href="classCommandEntry.html">CommandEntry</a>& <a class="code" href="classCommandEntry.html#199c7f73a993b784a15eb3fc5f893956">CommandEntry::operator = </a>(<span class="keyword">const</span> <a class="code" href="classCommandEntry.html">CommandEntry</a>& entry)
<a name="l00030"></a>00030 {
<a name="l00031"></a>00031 <a class="code" href="classCommandEntry.html#5f1098dd21df36fae20591ba0fc9a5fa">m_id</a> = entry.<a class="code" href="classCommandEntry.html#5f1098dd21df36fae20591ba0fc9a5fa">m_id</a>;
<a name="l00032"></a>00032 <a class="code" href="classCommandEntry.html#12d3b1efa2768340e1b90b565a52edc6">m_name</a> = entry.<a class="code" href="classCommandEntry.html#12d3b1efa2768340e1b90b565a52edc6">m_name</a>;
<a name="l00033"></a>00033 <a class="code" href="classCommandEntry.html#b2824de79b051470cd00b1d2b51a0ce1">m_path</a> = entry.<a class="code" href="classCommandEntry.html#b2824de79b051470cd00b1d2b51a0ce1">m_path</a>;
<a name="l00034"></a>00034 <a class="code" href="classCommandEntry.html#ff7231796097759987dfcd3fe631bdff">m_waitForCommand</a> = entry.<a class="code" href="classCommandEntry.html#ff7231796097759987dfcd3fe631bdff">m_waitForCommand</a>;
<a name="l00035"></a>00035 <span class="keywordflow">return</span> *<span class="keyword">this</span>;
<a name="l00036"></a>00036 }
<a name="l00037"></a>00037
<a name="l00038"></a><a class="code" href="classCommandEntry.html#371ab20c14d238960b5e2054ac98a548">00038</a> <span class="keywordtype">bool</span> <a class="code" href="classCommandEntry.html#371ab20c14d238960b5e2054ac98a548">CommandEntry::exec</a> (<a class="code" href="classConfigElem.html">ConfigElem</a>* pelem, <span class="keyword">const</span> <span class="keywordtype">char</span>* header, <span class="keyword">const</span> <span class="keywordtype">char</span>* body)
<a name="l00039"></a>00039 {
<a name="l00040"></a>00040 kdDebug () << <span class="stringliteral">"CommandEntry::exec ();"</span> << endl;
<a name="l00041"></a>00041 <span class="keywordflow">return</span> <a class="code" href="classCommandEntry.html#371ab20c14d238960b5e2054ac98a548">exec</a> (<a class="code" href="classCommandEntry.html#b2824de79b051470cd00b1d2b51a0ce1">m_path</a>, pelem, header, body);
<a name="l00042"></a>00042 }
<a name="l00043"></a>00043
<a name="l00044"></a><a class="code" href="classCommandEntry.html#cd2d8c4b1d560d214e0dcbdabefe168f">00044</a> <span class="keywordtype">bool</span> <a class="code" href="classCommandEntry.html#371ab20c14d238960b5e2054ac98a548">CommandEntry::exec</a> (<span class="keyword">const</span> QString& path, <a class="code" href="classConfigElem.html">ConfigElem</a>* pelem, <span class="keyword">const</span> <span class="keywordtype">char</span>* header, <span class="keyword">const</span> <span class="keywordtype">char</span>* body)
<a name="l00045"></a>00045 {
<a name="l00046"></a>00046 kdDebug () << <span class="stringliteral">"CommandEntry::exec ("</span> << path << <span class="stringliteral">");"</span> << endl;
<a name="l00047"></a>00047 QString cmd = path;
<a name="l00048"></a>00048 <span class="keywordtype">int</span> pos;
<a name="l00049"></a>00049 <span class="keywordflow">if</span> (pelem)
<a name="l00050"></a>00050 {
<a name="l00051"></a>00051 <span class="keywordflow">if</span> ((pos = cmd.find (<span class="stringliteral">"<user>"</span>)) >= 0)
<a name="l00052"></a>00052 cmd.replace (pos, strlen (<span class="stringliteral">"<user>"</span>), pelem-><a class="code" href="classConfigElem.html#19f5621cac8e71c1088995bcef75596a">getUser</a>() );
<a name="l00053"></a>00053 <span class="keywordflow">if</span> ((pos = cmd.find (<span class="stringliteral">"<server>"</span>)) >= 0)
<a name="l00054"></a>00054 cmd.replace (pos, strlen (<span class="stringliteral">"<server>"</span>), pelem-><a class="code" href="classConfigElem.html#6a7f0888c77882eda05bcc22a27947c1">getHost</a>());
<a name="l00055"></a>00055 <span class="keywordflow">if</span> ((pos = cmd.find (<span class="stringliteral">"<passwd>"</span>)) >= 0)
<a name="l00056"></a>00056 cmd.replace (pos, strlen (<span class="stringliteral">"<passwd>"</span>), pelem-><a class="code" href="classConfigElem.html#7ea9a96f400284acce0999639659c461">getPassword</a>());
<a name="l00057"></a>00057 }
<a name="l00058"></a>00058 <span class="keywordflow">else</span>
<a name="l00059"></a>00059 {
<a name="l00060"></a>00060 <span class="keywordflow">if</span> ((pos = cmd.find (<span class="stringliteral">"<user>"</span>)) >= 0)
<a name="l00061"></a>00061 cmd.remove (pos, strlen (<span class="stringliteral">"<user>"</span>));
<a name="l00062"></a>00062 <span class="keywordflow">if</span> ((pos = cmd.find (<span class="stringliteral">"<server>"</span>)) >= 0)
<a name="l00063"></a>00063 cmd.remove (pos, strlen (<span class="stringliteral">"<server>"</span>));
<a name="l00064"></a>00064 <span class="keywordflow">if</span> ((pos = cmd.find (<span class="stringliteral">"<passwd>"</span>)) >= 0)
<a name="l00065"></a>00065 cmd.remove (pos, strlen (<span class="stringliteral">"<passwd>"</span>));
<a name="l00066"></a>00066 }
<a name="l00067"></a>00067 <span class="keywordflow">if</span> (header && (pos = cmd.find (<span class="stringliteral">"<header>"</span>)) >= 0)
<a name="l00068"></a>00068 {
<a name="l00069"></a>00069 FILE* tmp = fopen (<span class="stringliteral">"/tmp/spamheader"</span>, <span class="stringliteral">"w"</span>);
<a name="l00070"></a>00070 fputs (header, tmp);
<a name="l00071"></a>00071 fclose (tmp);
<a name="l00072"></a>00072 cmd.replace (pos, strlen (<span class="stringliteral">"<header>"</span>), <span class="stringliteral">"/tmp/spamheader"</span>);
<a name="l00073"></a>00073 }
<a name="l00074"></a>00074 <span class="keywordflow">if</span> (body && (pos = cmd.find (<span class="stringliteral">"<body>"</span>)) >= 0)
<a name="l00075"></a>00075 {
<a name="l00076"></a>00076 FILE* tmp = fopen (<span class="stringliteral">"/tmp/spambody"</span>, <span class="stringliteral">"w"</span>);
<a name="l00077"></a>00077 fputs (body, tmp);
<a name="l00078"></a>00078 fclose (tmp);
<a name="l00079"></a>00079 cmd.replace (pos, strlen (<span class="stringliteral">"<body>"</span>), <span class="stringliteral">"/tmp/spambody"</span>);
<a name="l00080"></a>00080 }
<a name="l00081"></a>00081 <span class="keywordtype">int</span> result = 0;
<a name="l00082"></a>00082 <span class="keywordflow">if</span> (<a class="code" href="classCommandEntry.html#ff7231796097759987dfcd3fe631bdff">m_waitForCommand</a>) {
<a name="l00083"></a>00083 <span class="comment">//execute the command and wait for it to return</span>
<a name="l00084"></a>00084 FILE* output = popen (cmd, <span class="stringliteral">"r"</span>);
<a name="l00085"></a>00085 <span class="keywordtype">char</span> buffer [81];
<a name="l00086"></a>00086 QString str;
<a name="l00087"></a>00087 <span class="keywordflow">while</span> (fgets (buffer, 80, output))
<a name="l00088"></a>00088 {
<a name="l00089"></a>00089 str += buffer;
<a name="l00090"></a>00090 }
<a name="l00091"></a>00091 KApplication::setOverrideCursor (Qt::arrowCursor);
<a name="l00092"></a>00092 result = pclose (output);
<a name="l00093"></a>00093 <span class="keywordflow">if</span> (!str.isEmpty ())
<a name="l00094"></a>00094 {
<a name="l00095"></a>00095 <a class="code" href="classEditDialog.html">EditDialog</a> dlg (NULL, cmd, str, <span class="keyword">false</span>);
<a name="l00096"></a>00096 dlg.exec ();
<a name="l00097"></a>00097 }
<a name="l00098"></a>00098 kdDebug () << cmd << <span class="stringliteral">" returned "</span> << result << endl;
<a name="l00099"></a>00099 }
<a name="l00100"></a>00100 <span class="keywordflow">else</span>
<a name="l00101"></a>00101 {
<a name="l00102"></a>00102 <span class="comment">//execute the command and don't wait for it to return</span>
<a name="l00103"></a>00103 <span class="keywordtype">int</span> pid;
<a name="l00104"></a>00104 <span class="keywordflow">if</span> ((pid = fork()) == 0)
<a name="l00105"></a>00105 {
<a name="l00106"></a>00106 <span class="comment">// child processing; don't do any gui stuff here !</span>
<a name="l00107"></a>00107 system (cmd);
<a name="l00108"></a>00108 <span class="comment">// we must terminate the child process</span>
<a name="l00109"></a>00109 exit (0);
<a name="l00110"></a>00110 <span class="comment">// the bad thing is, we never know if the command failed. We would need some pipe.</span>
<a name="l00111"></a>00111 }
<a name="l00112"></a>00112 <span class="keywordflow">else</span> <span class="keywordflow">if</span> (pid == -1)
<a name="l00113"></a>00113 {
<a name="l00114"></a>00114 <a class="code" href="classEditDialog.html">EditDialog</a> dlg (NULL, cmd, <span class="stringliteral">"The command failed to execute"</span>, <span class="keyword">false</span>);
<a name="l00115"></a>00115 dlg.exec ();
<a name="l00116"></a>00116 }
<a name="l00117"></a>00117 }
<a name="l00118"></a>00118 KApplication::restoreOverrideCursor ();
<a name="l00119"></a>00119 <span class="keywordflow">return</span> (result == 0);
<a name="l00120"></a>00120 }
<a name="l00121"></a>00121
</pre></div><hr size="1"><address style="align: right;"><small>Generated on Wed May 16 21:15:18 2007 for kshowmail by
<a href="http://www.doxygen.org/index.html">
<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.0 </small></address>
</body>
</html>
|