00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #ifndef SBUILD_AUTH_H
00021 #define SBUILD_AUTH_H
00022
00023 #include <sbuild/sbuild-auth-conv.h>
00024 #include <sbuild/sbuild-custom-error.h>
00025 #include <sbuild/sbuild-environment.h>
00026 #include <sbuild/sbuild-types.h>
00027 #include <sbuild/sbuild-tr1types.h>
00028
00029 #include <string>
00030
00031 #include <sys/types.h>
00032 #include <sys/wait.h>
00033 #include <grp.h>
00034 #include <pwd.h>
00035 #include <unistd.h>
00036
00037 #include <security/pam_appl.h>
00038
00039 namespace sbuild
00040 {
00041
00073 class auth
00074 {
00075 public:
00077 enum status
00078 {
00079 STATUS_NONE,
00080 STATUS_USER,
00081 STATUS_FAIL
00082 };
00083
00085 enum verbosity
00086 {
00087 VERBOSITY_QUIET,
00088 VERBOSITY_NORMAL,
00089 VERBOSITY_VERBOSE
00090 };
00091
00093 enum error_code
00094 {
00095 HOSTNAME,
00096 USER,
00097 AUTHENTICATION,
00098 AUTHORISATION,
00099 PAM_DOUBLE_INIT,
00100 PAM
00101 };
00102
00104 typedef custom_error<error_code> error;
00105
00107 typedef std::tr1::shared_ptr<auth_conv> conv_ptr;
00108
00117 auth (std::string const& service_name);
00118
00122 virtual ~auth ();
00123
00129 std::string const&
00130 get_service () const;
00131
00139 uid_t
00140 get_uid () const;
00141
00149 gid_t
00150 get_gid () const;
00151
00158 std::string const&
00159 get_user () const;
00160
00171 void
00172 set_user (std::string const& user);
00173
00181 string_list const&
00182 get_command () const;
00183
00190 void
00191 set_command (string_list const& command);
00192
00199 std::string const&
00200 get_home () const;
00201
00210 std::string const&
00211 get_shell () const;
00212
00218 environment const&
00219 get_environment () const;
00220
00227 void
00228 set_environment (char **environment);
00229
00235 void
00236 set_environment (environment const& environment);
00237
00244 environment
00245 get_pam_environment () const;
00246
00253 uid_t
00254 get_ruid () const;
00255
00262 std::string const&
00263 get_ruser () const;
00264
00270 verbosity
00271 get_verbosity () const;
00272
00278 void
00279 set_verbosity (verbosity verbosity);
00280
00286 conv_ptr&
00287 get_conv ();
00288
00294 void
00295 set_conv (conv_ptr& conv);
00296
00303 void
00304 run ();
00305
00312 void
00313 start ();
00314
00321 void
00322 stop ();
00323
00330 void
00331 authenticate ();
00332
00340 void
00341 setupenv ();
00342
00348 void
00349 account ();
00350
00356 void
00357 cred_establish ();
00358
00364 void
00365 cred_delete ();
00366
00372 void
00373 open_session ();
00374
00380 void
00381 close_session ();
00382
00383 protected:
00388 virtual status
00389 get_auth_status () const;
00390
00395 virtual void
00396 run_impl () = 0;
00397
00398 public:
00408 status
00409 change_auth (status oldauth,
00410 status newauth) const
00411 {
00412
00413 if (newauth > oldauth)
00414 return newauth;
00415 else
00416 return oldauth;
00417 }
00418
00419 protected:
00421 pam_handle_t *pam;
00422
00429 const char *
00430 pam_strerror (int pam_error);
00431
00432 private:
00434 const std::string service;
00436 uid_t uid;
00438 gid_t gid;
00440 std::string user;
00442 string_list command;
00444 std::string home;
00446 std::string shell;
00448 environment user_environment;
00450 uid_t ruid;
00452 std::string ruser;
00454 conv_ptr conv;
00456 verbosity message_verbosity;
00457 };
00458
00459 }
00460
00461 #endif
00462
00463
00464
00465
00466
00467