summaryrefslogtreecommitdiff
blob: d56fffb08d38a3a0a778fa178a7081184a3f4754 (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
--- a/pam.c	2016-12-01 14:29:27.453904230 -0500
+++ b/pam.c	2016-12-01 14:27:26.496109755 -0500
@@ -227,8 +227,13 @@
 PHP_FUNCTION(pam_auth)
 {
 	char *username, *password;
+#if PHP_MAJOR_VERSION >= 7
+ 	size_t username_len, password_len;
+	zval *status = NULL, *server, *remote_addr;
+#else
 	int username_len, password_len;
 	zval *status = NULL, **server, **remote_addr;
+#endif
 	zend_bool checkacctmgmt = 1;
 
 	pam_auth_t userinfo = {NULL, NULL};
@@ -248,22 +253,37 @@
 		if (status) {
 			spprintf(&error_msg, 0, "%s (in %s)", (char *) pam_strerror(pamh, result), "pam_start");
 			zval_dtor(status);
+#if PHP_MAJOR_VERSION >= 7
+			ZVAL_STRING(status, error_msg);
+			efree(error_msg);
+#else
 			ZVAL_STRING(status, error_msg, 0);
+#endif
 		}
 		RETURN_FALSE;
 	}
 
+#if PHP_MAJOR_VERSION >= 7
+	if ((remote_addr = zend_hash_str_find(Z_ARR(PG(http_globals)[TRACK_VARS_SERVER]), "REMOTE_ADDR", sizeof("REMOTE_ADDR")-1)) != NULL && Z_TYPE_P(remote_addr) == IS_STRING) {
+		pam_set_item(pamh, PAM_RHOST, Z_STRVAL_P(remote_addr));
+#else
 	if (zend_hash_find(&EG(symbol_table), "_SERVER", sizeof("_SERVER"), (void **)&server) == SUCCESS && Z_TYPE_PP(server) == IS_ARRAY) {
 		if (zend_hash_find(Z_ARRVAL_PP(server), "REMOTE_ADDR", sizeof("REMOTE_ADDR"), (void **)&remote_addr) == SUCCESS && Z_TYPE_PP(remote_addr) == IS_STRING) {
 			pam_set_item(pamh, PAM_RHOST, Z_STRVAL_PP(remote_addr));
 		}
+#endif
 	}
 
 	if ((result = pam_authenticate(pamh, PAM_DISALLOW_NULL_AUTHTOK)) != PAM_SUCCESS) {
 		if (status) {
 			spprintf(&error_msg, 0, "%s (in %s)", (char *) pam_strerror(pamh, result), "pam_authenticate");
 			zval_dtor(status);
+#if PHP_MAJOR_VERSION >= 7
+			ZVAL_STRING(status, error_msg);
+			efree(error_msg);
+#else
 			ZVAL_STRING(status, error_msg, 0);
+#endif
 		}
 		pam_end(pamh, PAM_SUCCESS);
 		RETURN_FALSE;
@@ -274,7 +294,12 @@
 			if (status) {
 				spprintf(&error_msg, 0, "%s (in %s)", (char *) pam_strerror(pamh, result), "pam_acct_mgmt");
 				zval_dtor(status);
+#if PHP_MAJOR_VERSION >= 7
+				ZVAL_STRING(status, error_msg);
+				efree(error_msg);
+#else
 				ZVAL_STRING(status, error_msg, 0);
+#endif
 			}
 			pam_end(pamh, PAM_SUCCESS);
 			RETURN_FALSE;
@@ -291,7 +316,11 @@
 PHP_FUNCTION(pam_chpass)
 {
 	char *username, *oldpass, *newpass;
+#if PHP_MAJOR_VERSION >= 7
+	size_t username_len, oldpass_len, newpass_len;
+#else
 	int username_len, oldpass_len, newpass_len;
+#endif
 	zval *status = NULL;
 
 	pam_chpass_t userinfo = {NULL, NULL, NULL, 0};
@@ -312,7 +341,12 @@
 		if (status) {
 			spprintf(&error_msg, 0, "%s (in %s)", (char *) pam_strerror(pamh, result), "pam_start");
 			zval_dtor(status);
+#if PHP_MAJOR_VERSION >= 7
+			ZVAL_STRING(status, error_msg);
+			efree(error_msg);
+#else
 			ZVAL_STRING(status, error_msg, 0);
+#endif
 		}
 		RETURN_FALSE;
 	}
@@ -321,7 +355,12 @@
 		if (status) {
 			spprintf(&error_msg, 0, "%s (in %s)", (char *) pam_strerror(pamh, result), "pam_authenticate");
 			zval_dtor(status);
+#if PHP_MAJOR_VERSION >= 7
+			ZVAL_STRING(status, error_msg);
+			efree(error_msg);
+#else
 			ZVAL_STRING(status, error_msg, 0);
+#endif
 		}
 		pam_end(pamh, PAM_SUCCESS);
 		RETURN_FALSE;
@@ -331,7 +370,12 @@
 		if (status) {
 			spprintf(&error_msg, 0, "%s (in %s)", (char *) pam_strerror(pamh, result), "pam_chauthtok");
 			zval_dtor(status);
+#if PHP_MAJOR_VERSION >= 7
+			ZVAL_STRING(status, error_msg);
+			efree(error_msg);
+#else
 			ZVAL_STRING(status, error_msg, 0);
+#endif
 		}
 		pam_end(pamh, PAM_SUCCESS);
 		RETURN_FALSE;