git.fiddlerwoaroof.com
Browse code

Merge branch 'put-it-all-together'

Greg Wiley authored on 26/04/2017 18:51:31
Showing 14 changed files
... ...
@@ -67,7 +67,7 @@ public:
67 67
 };
68 68
 }
69 69
 
70
-conversation create_conversation (pam &pam)
70
+conversation conversation::create (pam &pam)
71 71
 {
72 72
     return conversation (std::shared_ptr<conversation_ifc> (new impl (pam)));
73 73
 }
... ...
@@ -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
 
... ...
@@ -36,9 +36,8 @@ public:
36 36
     {
37 37
         return delegate_->get_conv (handle, out);
38 38
     }
39
+    static pam create();
39 40
 };
40 41
 
41
-pam system_pam();
42
-
43 42
 #endif
44 43
 
... ...
@@ -28,7 +28,7 @@ public:
28 28
 static pwd system_pwd (pwd::delegate (new impl));
29 29
 }
30 30
 
31
-pwd pwd::system()
31
+pwd pwd::create()
32 32
 {
33 33
     return system_pwd;
34 34
 }
... ...
@@ -42,7 +42,7 @@ public:
42 42
     {
43 43
         return delegate_-> getpwnam_r (user_name, out, buffer, buffer_sz, result);
44 44
     }
45
-    static pwd system();
45
+    static pwd create();
46 46
 };
47 47
 
48 48
 #endif
... ...
@@ -25,7 +25,7 @@ public:
25 25
 static unistd sys_unistd (unistd::delegate (new impl));
26 26
 }
27 27
 
28
-unistd unistd::system()
28
+unistd unistd::create()
29 29
 {
30 30
     return sys_unistd;
31 31
 }
... ...
@@ -40,7 +40,7 @@ public:
40 40
     {
41 41
         return delegate_->sysconf (name);
42 42
     }
43
-    static unistd system();
43
+    static unistd create();
44 44
 };
45 45
 
46 46
 #endif
... ...
@@ -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