File: MGExecSU.h

package info (click to toggle)
mysql-gui-tools 5.0r12-1
  • links: PTS
  • area: main
  • in suites: lenny
  • size: 105,540 kB
  • ctags: 50,897
  • sloc: sql: 348,439; pascal: 285,780; cpp: 94,578; ansic: 90,768; objc: 33,761; sh: 25,629; xml: 10,924; yacc: 10,755; java: 9,986; php: 2,806; python: 2,068; makefile: 1,945; perl: 3
file content (70 lines) | stat: -rw-r--r-- 1,383 bytes parent folder | download | duplicates (4)
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


#ifndef _MGEXECSU_H_
#define _MGEXECSU_H_

#include "MGGladeXML.h"

class MGExecSU {
 public:
   enum Status {
     RUNFINISHED=-1,
     RSUCCESS=0,
     RBADPASSWORD,
     RTIMEOUT,
     RERROR,
   };
   
   typedef sigc::signal<bool,Glib::ustring> OutputSignal;
   typedef sigc::signal<void,Status> FinishedSignal;

 private:
   MGGladeXML *_xml;
   Glib::ustring _command;
   pid_t _pid;
   FILE *_rfd;
   FILE *_wfd;
   Status _status;
   int _timeout_seconds;
   int _timeout_counter;
   bool _needs_su;
   
   OutputSignal _output_signal;
   FinishedSignal _finished_signal;

   
   bool wait_readable(int timeout= 0);
   bool read_until(const char **tokens, Glib::ustring &line);
   
   bool handle_io(Glib::IOCondition cond);
   
   bool write_line(const Glib::ustring &line);

   bool timeout();
   
   bool authenticate();
   int check_needs_password();
   
   bool run_as_root();
   bool run_as_current();

 public:
   MGExecSU(const Glib::ustring &description, const Glib::ustring &command);

   void set_timeout(int seconds);
   
   bool run();
   void cancel();

   bool read_line(Glib::ustring &line, bool full_line= true);
   Glib::ustring read_to_end();
   
   OutputSignal signal_output() { return _output_signal; };
   FinishedSignal signal_finished() { return _finished_signal; };

   
   Status get_status() { return _status; };
};


#endif /* _MGEXECSU_H_ */