Browse code
Merge branch 'put-it-all-together'
Greg Wiley authored on 26/04/2017 18:51:31
Showing 14 changed files
Showing 14 changed files
- conversation.cc
- conversation.h
- dual_control.cc
- dual_control.h
- dual_control_integrate.cc
- dual_control_test.cc
- pam.cc
- pam.h
- sys_pwd.cc
- sys_pwd.h
- sys_unistd.cc
- sys_unistd.h
- validator.cc
- validator.h
... | ... |
@@ -45,6 +45,7 @@ public: |
45 | 45 |
{ |
46 | 46 |
return delegate_->initiate (request); |
47 | 47 |
} |
48 |
+ static conversation create (pam &pam); |
|
48 | 49 |
}; |
49 | 50 |
|
50 | 51 |
inline conversation wrap (conversation_ifc *delegate) |
... | ... |
@@ -52,7 +53,5 @@ inline conversation wrap (conversation_ifc *delegate) |
52 | 53 |
return conversation (std::shared_ptr<conversation_ifc> (delegate)); |
53 | 54 |
}; |
54 | 55 |
|
55 |
-conversation create_conversation (pam &pam); |
|
56 |
- |
|
57 | 56 |
#endif |
58 | 57 |
|
... | ... |
@@ -29,6 +29,8 @@ int dual_control_ifc::setcred ( const pam_request &request) |
29 | 29 |
return PAM_SERVICE_ERR; |
30 | 30 |
} |
31 | 31 |
|
32 |
+namespace |
|
33 |
+{ |
|
32 | 34 |
class impl : public dual_control_ifc |
33 | 35 |
{ |
34 | 36 |
private: |
... | ... |
@@ -61,9 +63,9 @@ int impl::authenticate (const pam_request &request) |
61 | 63 |
logger_.log (auth_result, input.user_name, input.token); |
62 | 64 |
return auth_result; |
63 | 65 |
} |
64 |
- |
|
65 |
-dual_control create_dual_control (const dual_control_configuration |
|
66 |
- &configuration) |
|
66 |
+} |
|
67 |
+dual_control dual_control::create (const dual_control_configuration |
|
68 |
+ &configuration) |
|
67 | 69 |
{ |
68 | 70 |
return dual_control (std::shared_ptr<dual_control_ifc> (new impl ( |
69 | 71 |
configuration))); |
... | ... |
@@ -56,11 +56,10 @@ public: |
56 | 56 |
{ |
57 | 57 |
return delegate_->setcred (request); |
58 | 58 |
} |
59 |
+ static dual_control create (const dual_control_configuration |
|
60 |
+ &configuration); |
|
59 | 61 |
|
60 | 62 |
}; |
61 | 63 |
|
62 |
-dual_control create_dual_control (const dual_control_configuration |
|
63 |
- &configuration); |
|
64 |
- |
|
65 | 64 |
#endif |
66 | 65 |
|
... | ... |
@@ -19,8 +19,40 @@ |
19 | 19 |
|
20 | 20 |
#include "request.h" |
21 | 21 |
#include "dual_control.h" |
22 |
+#include "validator.h" |
|
23 |
+#include "logger.h" |
|
24 |
+#include "conversation.h" |
|
25 |
+#include "user.h" |
|
26 |
+#include "token.h" |
|
27 |
+#include "sys_pwd.h" |
|
28 |
+#include "sys_unistd.h" |
|
29 |
+#include "sys_fstream.h" |
|
30 |
+#include "pam.h" |
|
31 |
+#include "sys_syslog.h" |
|
22 | 32 |
|
23 |
-dual_control dc; |
|
33 |
+namespace |
|
34 |
+{ |
|
35 |
+dual_control initialize() |
|
36 |
+{ |
|
37 |
+ dual_control_configuration configuration; |
|
38 |
+ pwd pwd (pwd::create()); |
|
39 |
+ unistd unistd (unistd::create()); |
|
40 |
+ directory directory (directory::create (unistd, pwd)); |
|
41 |
+ fstreams fstreams (fstreams::create()); |
|
42 |
+ user_token_supplier user_token_supplier (user_token_supplier::create ( |
|
43 |
+ fstreams)); |
|
44 |
+ validator validator (validator::create (directory, user_token_supplier)); |
|
45 |
+ pam pam (pam::create()); |
|
46 |
+ conversation conversation (conversation::create (pam)); |
|
47 |
+ sys_syslog sys_syslog (sys_syslog::create()); |
|
48 |
+ logger logger (logger::create (sys_syslog)); |
|
49 |
+ configuration.validator = validator; |
|
50 |
+ configuration.logger = logger; |
|
51 |
+ configuration.conversation = conversation; |
|
52 |
+ return dual_control::create (configuration); |
|
53 |
+} |
|
54 |
+dual_control dc = initialize(); |
|
55 |
+} |
|
24 | 56 |
|
25 | 57 |
PAM_EXTERN int pam_sm_authenticate (pam_handle_t *pamh, int flags, int argc, |
26 | 58 |
const char **argv) |
... | ... |
@@ -107,7 +107,7 @@ int setcred_returns_success() |
107 | 107 |
{ |
108 | 108 |
//given |
109 | 109 |
dual_control_configuration configuration; |
110 |
- dual_control dc (create_dual_control (configuration)); |
|
110 |
+ dual_control dc (dual_control::create (configuration)); |
|
111 | 111 |
|
112 | 112 |
//when |
113 | 113 |
int result = dc.setcred (req()); |
... | ... |
@@ -126,7 +126,7 @@ int authenticate_validates_with_received_token() |
126 | 126 |
std::string token ("token"); |
127 | 127 |
use_validator (configuration, new fake_validator (user, token)); |
128 | 128 |
use_conversation (configuration, new fake_conversation (user, token)); |
129 |
- dual_control dc (create_dual_control (configuration)); |
|
129 |
+ dual_control dc (dual_control::create (configuration)); |
|
130 | 130 |
pam_handle_t *handle (0); |
131 | 131 |
std::vector<const std::string> arguments; |
132 | 132 |
|
... | ... |
@@ -146,7 +146,7 @@ int authenticate_fails_with_wrong_user() |
146 | 146 |
use_validator (configuration, new fake_validator ("user", token)); |
147 | 147 |
use_conversation (configuration, new fake_conversation ("wrong user", |
148 | 148 |
token)); |
149 |
- dual_control dc (create_dual_control (configuration)); |
|
149 |
+ dual_control dc (dual_control::create (configuration)); |
|
150 | 150 |
|
151 | 151 |
// when |
152 | 152 |
int actual = dc.authenticate (req()); |
... | ... |
@@ -164,7 +164,7 @@ int authenticate_fails_with_wrong_token() |
164 | 164 |
use_validator (configuration, new fake_validator (user, "token")); |
165 | 165 |
use_conversation (configuration, new fake_conversation (user, |
166 | 166 |
"wrong token")); |
167 |
- dual_control dc (create_dual_control (configuration)); |
|
167 |
+ dual_control dc (dual_control::create (configuration)); |
|
168 | 168 |
|
169 | 169 |
// when |
170 | 170 |
int actual = dc.authenticate (req()); |
... | ... |
@@ -184,7 +184,7 @@ int logs_authentication() |
184 | 184 |
use_conversation (configuration, new fake_conversation (user, token)); |
185 | 185 |
mock_logger *test_logger; |
186 | 186 |
use_logger (configuration, test_logger = new mock_logger); |
187 |
- dual_control dc (create_dual_control (configuration)); |
|
187 |
+ dual_control dc (dual_control::create (configuration)); |
|
188 | 188 |
|
189 | 189 |
//when |
190 | 190 |
dc.authenticate (req()); |
... | ... |
@@ -210,7 +210,7 @@ int logs_authentication_failure() |
210 | 210 |
use_conversation (configuration, new fake_conversation (user, token)); |
211 | 211 |
mock_logger *test_logger; |
212 | 212 |
use_logger (configuration, test_logger = new mock_logger); |
213 |
- dual_control dc (create_dual_control (configuration)); |
|
213 |
+ dual_control dc (dual_control::create (configuration)); |
|
214 | 214 |
|
215 | 215 |
//when |
216 | 216 |
dc.authenticate (req()); |
... | ... |
@@ -9,21 +9,28 @@ |
9 | 9 |
* at https://github.com/cjdev/dual-control. |
10 | 10 |
*/ |
11 | 11 |
|
12 |
+#include <memory> |
|
12 | 13 |
#include <vector> |
13 | 14 |
#include <security/pam_modules.h> |
14 | 15 |
#include <security/pam_appl.h> |
15 | 16 |
|
16 | 17 |
#include "pam.h" |
17 | 18 |
|
18 |
-class syspam : public pam_ifc |
|
19 |
+namespace |
|
20 |
+{ |
|
21 |
+class impl : public pam_ifc |
|
19 | 22 |
{ |
20 | 23 |
public: |
21 |
- int get_conv (pam_handle *handle, const pam_conv **pout); |
|
24 |
+ int get_conv (pam_handle *handle, const pam_conv **out) |
|
25 |
+ { |
|
26 |
+ return ::pam_get_item (handle, PAM_CONV, (const void **)out); |
|
27 |
+ } |
|
22 | 28 |
}; |
29 |
+} |
|
23 | 30 |
|
24 |
-int syspam::get_conv (pam_handle *handle, |
|
25 |
- std::shared_ptr<pam_conv_ifc> &out) |
|
31 |
+pam pam::create() |
|
26 | 32 |
{ |
27 |
- return pam_get_item (handle, PAM_CONV, (const void **)pout); |
|
33 |
+ static pam singleton (std::shared_ptr<pam_ifc> (new impl)); |
|
34 |
+ return singleton; |
|
28 | 35 |
} |
29 | 36 |
|
... | ... |
@@ -41,8 +41,8 @@ public: |
41 | 41 |
}; |
42 | 42 |
} |
43 | 43 |
|
44 |
-validator create_validator (const directory &directory, |
|
45 |
- const user_token_supplier &user_token_supplier) |
|
44 |
+validator validator::create (const directory &directory, |
|
45 |
+ const user_token_supplier &user_token_supplier) |
|
46 | 46 |
{ |
47 | 47 |
std::shared_ptr<validator_ifc> delegate (new impl (directory, |
48 | 48 |
user_token_supplier)); |
... | ... |
@@ -42,10 +42,9 @@ public: |
42 | 42 |
{ |
43 | 43 |
return delegate_->validate (user_name, token); |
44 | 44 |
} |
45 |
+ static validator create (const directory &directory, |
|
46 |
+ const user_token_supplier &token_supplier); |
|
45 | 47 |
}; |
46 | 48 |
|
47 |
-validator create_validator (const directory &directory, |
|
48 |
- const user_token_supplier &token_supplier); |
|
49 |
- |
|
50 | 49 |
#endif |
51 | 50 |
|