summaryrefslogtreecommitdiffstats
path: root/doc/html/commandentry_8cpp-source.html
blob: 94ad5c7ce4ba3a4c3911c9156bd25014169c3e8f (plain)
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&nbsp;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 &lt;stdlib.h&gt;</span>
<a name="l00018"></a>00018 <span class="preprocessor">#include &lt;stdio.h&gt;</span>
<a name="l00019"></a>00019 <span class="preprocessor">#include &lt;unistd.h&gt;</span>
<a name="l00020"></a>00020 
<a name="l00021"></a>00021 <span class="preprocessor">#include &lt;kapplication.h&gt;</span>
<a name="l00022"></a>00022 <span class="preprocessor">#include &lt;kaction.h&gt;</span>
<a name="l00023"></a>00023 <span class="preprocessor">#include &lt;kdebug.h&gt;</span>
<a name="l00024"></a>00024 <span class="preprocessor">#include &lt;qmessagebox.h&gt;</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>&amp; <a class="code" href="classCommandEntry.html#199c7f73a993b784a15eb3fc5f893956">CommandEntry::operator = </a>(<span class="keyword">const</span> <a class="code" href="classCommandEntry.html">CommandEntry</a>&amp; 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 () &lt;&lt; <span class="stringliteral">"CommandEntry::exec ();"</span> &lt;&lt; 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&amp; 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 () &lt;&lt; <span class="stringliteral">"CommandEntry::exec ("</span> &lt;&lt; path &lt;&lt; <span class="stringliteral">");"</span> &lt;&lt; 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">"&lt;user&gt;"</span>)) &gt;= 0)
<a name="l00052"></a>00052                      cmd.replace (pos, strlen (<span class="stringliteral">"&lt;user&gt;"</span>), pelem-&gt;<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">"&lt;server&gt;"</span>)) &gt;= 0)
<a name="l00054"></a>00054                      cmd.replace (pos, strlen (<span class="stringliteral">"&lt;server&gt;"</span>), pelem-&gt;<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">"&lt;passwd&gt;"</span>)) &gt;= 0)
<a name="l00056"></a>00056                      cmd.replace (pos, strlen (<span class="stringliteral">"&lt;passwd&gt;"</span>), pelem-&gt;<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">"&lt;user&gt;"</span>)) &gt;= 0)
<a name="l00061"></a>00061                      cmd.remove (pos, strlen (<span class="stringliteral">"&lt;user&gt;"</span>));
<a name="l00062"></a>00062               <span class="keywordflow">if</span> ((pos = cmd.find (<span class="stringliteral">"&lt;server&gt;"</span>)) &gt;= 0)
<a name="l00063"></a>00063                      cmd.remove (pos, strlen (<span class="stringliteral">"&lt;server&gt;"</span>));
<a name="l00064"></a>00064               <span class="keywordflow">if</span> ((pos = cmd.find (<span class="stringliteral">"&lt;passwd&gt;"</span>)) &gt;= 0)
<a name="l00065"></a>00065                      cmd.remove (pos, strlen (<span class="stringliteral">"&lt;passwd&gt;"</span>));
<a name="l00066"></a>00066   }
<a name="l00067"></a>00067        <span class="keywordflow">if</span> (header &amp;&amp; (pos = cmd.find (<span class="stringliteral">"&lt;header&gt;"</span>)) &gt;= 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">"&lt;header&gt;"</span>), <span class="stringliteral">"/tmp/spamheader"</span>);
<a name="l00073"></a>00073        }
<a name="l00074"></a>00074        <span class="keywordflow">if</span> (body &amp;&amp; (pos = cmd.find (<span class="stringliteral">"&lt;body&gt;"</span>)) &gt;= 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">"&lt;body&gt;"</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 () &lt;&lt; cmd &lt;&lt; <span class="stringliteral">" returned "</span> &lt;&lt; result &lt;&lt; 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&nbsp;
<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>