git.fiddlerwoaroof.com
Browse code

log failure invoked properly

Greg Wiley authored on 06/04/2017 18:06:00
Showing 6 changed files
... ...
@@ -12,6 +12,7 @@ PAM_EXTERN int pam_sm_authenticate(pam_handle_t *pamh, int flags, int argc, cons
12 12
         log_success();
13 13
         return PAM_SUCCESS;
14 14
     } else {
15
+        log_failure();
15 16
         return PAM_AUTH_ERR;
16 17
     }
17 18
 }
... ...
@@ -19,3 +20,4 @@ PAM_EXTERN int pam_sm_authenticate(pam_handle_t *pamh, int flags, int argc, cons
19 20
 PAM_EXTERN int pam_sm_setcred(pam_handle_t *pamh, int flags, int argc, const char **argv) {
20 21
     return PAM_SUCCESS;
21 22
 }
23
+
... ...
@@ -9,15 +9,18 @@
9 9
 const char *validated_token = "";
10 10
 const char *token_to_return = "";
11 11
 int validation_to_return = 0;
12
-int log_success_invoked = 1;
12
+int log_success_invoked = 0;
13
+int log_failure_invoked = 0;
13 14
 int at_least_one_failed_test = 0;
14 15
 pam_handle_t *passed_pam_handle = NULL;
15 16
 
16
-#define reset_vars() \
17
-  validated_token = ""; \
18
-  validation_to_return = 1; \
19
-  passed_pam_handle = NULL; \
20
-  log_success_invoked = 0
17
+RESET_VARS_START
18
+validated_token = "";
19
+validation_to_return = 1;
20
+passed_pam_handle = NULL;
21
+log_success_invoked = 0;
22
+log_failure_invoked = 0;
23
+RESET_VARS_END
21 24
 
22 25
 const char *ask_for_token(pam_handle_t *pamh) {
23 26
     passed_pam_handle = pamh;
... ...
@@ -33,6 +36,10 @@ void log_success() {
33 36
     log_success_invoked = 1;
34 37
 }
35 38
 
39
+void log_failure() {
40
+    log_failure_invoked = 1;
41
+}
42
+
36 43
 int pam_sm_setcred_returns_success() {
37 44
     //given
38 45
 
... ...
@@ -62,15 +69,25 @@ int pam_sm_authenticate_validates_with_received_token() {
62 69
 int pam_sm_authenticate_success_invokes_log_success() {
63 70
     // given
64 71
     validation_to_return = 1;
65
-    log_success_invoked = 0;
66 72
 
67 73
     //when
68 74
    pam_sm_authenticate(NULL, 0, 0, NULL);
69 75
    return log_success_invoked;
70 76
 }
71 77
 
78
+int pam_sm_authenticate_fail_invokes_log_failure() {
79
+    // given
80
+    validation_to_return = 0;
81
+
82
+    //when
83
+   pam_sm_authenticate(NULL, 0, 0, NULL);
84
+   check(log_failure_invoked, "log failure should be invoked");
85
+   succeed();
86
+}
87
+
72 88
 int succeeds_with_valid_token() {
73 89
     //given
90
+    validation_to_return = 1;
74 91
 
75 92
     //when
76 93
     int result = pam_sm_authenticate(NULL, 0, 0, NULL);
... ...
@@ -94,6 +111,7 @@ int runtests() {
94 111
     test(pam_sm_authenticate_validates_with_received_token);
95 112
     test(pam_sm_setcred_returns_success);
96 113
     test(pam_sm_authenticate_success_invokes_log_success);
114
+    test(pam_sm_authenticate_fail_invokes_log_failure);
97 115
     test(succeeds_with_valid_token);
98 116
     test(fails_with_invalid_token);
99 117
     succeed();
... ...
@@ -2,6 +2,6 @@
2 2
 #define __DUAL_CONTROL_LOGGING
3 3
 
4 4
 void log_success();
5
-void log_fail();
5
+void log_failure();
6 6
 
7 7
 #endif
8 8
Binary files a/logging_test and b/logging_test differ
... ...
@@ -6,13 +6,6 @@
6 6
 
7 7
 #include "testutil.h"
8 8
 
9
-#define reset_vars() \
10
-    logged_priority = -1000; \
11
-    close_log_invoked = 0; \
12
-    opened_facility = -1000; \
13
-    const char *opened_program_name = ""; \
14
-    int opened_logopt = -1000; \
15
-
16 9
 int logged_priority = -1000;
17 10
 const char *logged_message = "";
18 11
 void dc_syslog(int priority, const char *message, ...) {
... ...
@@ -34,6 +27,14 @@ void dc_openlog(const char *ident, int logopt, int facility) {
34 27
     opened_logopt = logopt;
35 28
 }
36 29
 
30
+RESET_VARS_START
31
+logged_priority = -1000;
32
+close_log_invoked = 0;
33
+opened_facility = -1000;
34
+const char *opened_program_name = "";
35
+int opened_logopt = -1000;
36
+RESET_VARS_END
37
+
37 38
 int test_log_success() {
38 39
     // given
39 40
 
... ...
@@ -58,3 +59,4 @@ int test_runner() {
58 59
 int main(int numargs, char **args) {
59 60
     return !test_runner();
60 61
 }
62
+
... ...
@@ -2,7 +2,7 @@
2 2
 #define _TESTUTIL_H
3 3
 
4 4
 #include <string.h>
5
-
5
+#include <stdio.h>
6 6
 #define check(assertion, msg) \
7 7
     if (!(assertion)) { \
8 8
       fprintf(stderr, "assertion failed: %s\n", msg); \
... ...
@@ -15,15 +15,13 @@
15 15
 #define checkstr(expected, actual, name) \
16 16
     check(!strcmp(expected, actual), name " should be '" expected "'")
17 17
 
18
-#ifdef reset_vars
19
-#define _reset reset_vars()
20
-#else
21
-#define _reset
22
-#endif
18
+#define RESET_VARS_START void __reset_vars() {
19
+
20
+#define RESET_VARS_END }
23 21
 
24 22
 #define test(NAME) \
25 23
     { \
26
-      _reset \
24
+      __reset_vars(); \
27 25
       int result = NAME (); \
28 26
       if (!result) { \
29 27
           fprintf(stderr, "test failed: %s\n", #NAME); \