summaryrefslogtreecommitdiff
path: root/lib/schroot-common/main.h
blob: 4d88e74edcf1e44a51d55df3975e4805a3cfb38c (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
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
/* Copyright © 2005-2013  Roger Leigh <rleigh@debian.org>
 *
 * schroot is free software: you can redistribute it and/or modify it
 * under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * schroot is distributed in the hope that it will be useful, but
 * WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see
 * <http://www.gnu.org/licenses/>.
 *
 *********************************************************************/

#ifndef SCHROOT_COMMON_MAIN_H
#define SCHROOT_COMMON_MAIN_H

#include <bin-common/main.h>
#include <schroot-common/options.h>

#include <sbuild/chroot/config.h>
#include <sbuild/custom-error.h>

namespace schroot_common
{

  /**
   * Frontend base for schroot programs.  This class is used to "run"
   * schroot programs.  This class contains functionality common to
   * all schroot programs (schroot, dchroot, dchroot-dsa).
   */
  class main : public bin_common::main
  {
  public:
    /// Error codes.
    enum error_code
      {
        CHROOT_FILE,       ///< No chroots are defined in ....
        CHROOT_FILE2,      ///< No chroots are defined in ... or ....
        CHROOT_NOTDEFINED, ///< The specified chroots are not defined.
        SESSION_INVALID    ///< Invalid session name.
      };

    /// Exception type.
    typedef sbuild::custom_error<error_code> error;

    typedef sbuild::chroot::config::chroot_map chroot_map;

    /**
     * The constructor.
     *
     * @param program_name the program name.
     * @param program_usage the program usage message.
     * @param options the command-line options to use.
     * @param use_syslog whether to open a connection to the system
     * logger.
     */
    main (const std::string&                 program_name,
          const std::string&                 program_usage,
          schroot_common::options::ptr&      options,
          bool               use_syslog);

    /// The destructor.
    virtual ~main ();

    virtual void
    action_version (std::ostream& stream);

    /**
     * List chroots.
     */
    virtual void
    action_list () = 0;

    /**
     * Print detailed information about chroots.
     */
    virtual void
    action_info ();

    /**
     * Print location of chroots.
     */
    virtual void
    action_location ();

    /**
     * Dump configuration file for chroots.
     */
    virtual void
    action_config ();

  protected:
    /**
     * Run the program.  This is the program-specific run method which
     * must be implemented in a derived class.
     *
     * @returns 0 on success, 1 on failure or the exit status of the
     * chroot command.
     */
    virtual int
    run_impl ();

    /**
     * Get a list of chroots based on the specified options (--all, --chroot).
     *
     * @returns a list of chroots.
     */
    void
    get_chroot_options ();

    /**
     * Load configuration.
     */
    virtual void
    load_config ();

    /**
     * Create a session.  This sets the session member.
     *
     * @param sess_op the session operation to perform.
     */
    virtual void
    create_session (sbuild::session::operation sess_op) = 0;

    /**
     * Add PAM authentication handler to the session.
     */
    virtual void
    add_session_auth ();

  protected:
    /// The program options.
    schroot_common::options::ptr options;
    /// The chroot configuration.
    sbuild::chroot::config::ptr  config;
    /// The chroots to use (original names or aliases).
    sbuild::string_list          chroot_names;
    /// The chroots to use (alias to chroot mapping).
    chroot_map                   chroots;
    /// The chroots to use (for session).
    sbuild::session::chroot_list chroot_objects;
    /// The session.
    sbuild::session::ptr         session;
  };

}

#endif /* SCHROOT_COMMON_MAIN_H */

/*
 * Local Variables:
 * mode:C++
 * End:
 */