php 7 で pamモジュールが動かなかった。
install してもPHPのPAMが動かなかったんですね。
コンパイルエラーなので、調べていくと型宣言辺で落ちてた。
調べていくと、拡張機能のAPIが更新されてたことがわかったなど
この方法で、PAMを使ったphp拡張の作り方がわかった。
PHPの拡張をCで書く方法が分かったし世界が広がリング
http://keicode.com/cgi/how-to-handle-parameters-php-extension.php
php-pamについて
ドコをどう書き換えるべきか書いてあるのはこちら。
https://wiki.php.net/phpng-upgrading
--- /tmp/pam-1.0.3/pam.c 2009-11-29 19:49:35.000000000 +0900
+++ pam.c 2017-10-19 01:52:15.028468810 +0900
@@ -227,8 +227,13 @@
PHP_FUNCTION(pam_auth)
{
char *username, *password;
- int username_len, password_len;
- zval *status = NULL, **server, **remote_addr;
+ size_t username_len, password_len;
+ /* zval status; */
+ /* zval *server; */
+ /* zval *remote_addr; */
+ zval *status = NULL;
+ zval *server;
+ zval *remote_addr;
zend_bool checkacctmgmt = 1;
pam_auth_t userinfo = {NULL, NULL};
@@ -244,26 +249,28 @@
userinfo.name = username;
userinfo.pw = password;
+ /* printf("Hello"); */
+
if ((result = pam_start(PAM_G(servicename), userinfo.name, &conv_info, &pamh)) != PAM_SUCCESS) {
if (status) {
spprintf(&error_msg, 0, "%s (in %s)", (char *) pam_strerror(pamh, result), "pam_start");
- zval_dtor(status);
- ZVAL_STRING(status, error_msg, 0);
+ ZVAL_STRING(status, error_msg);
+ efree(error_msg);
}
RETURN_FALSE;
}
- 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));
+ if ( (server=zend_hash_str_find(&EG(symbol_table), "_SERVER", sizeof("_SERVER")-1 ) ) != NULL && Z_TYPE_P(server) == IS_ARRAY) {
+ if ( ( remote_addr = zend_hash_str_find( Z_ARRVAL_P(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));
}
}
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);
- ZVAL_STRING(status, error_msg, 0);
+ ZVAL_STRING(status, error_msg);
+ efree(error_msg);
}
pam_end(pamh, PAM_SUCCESS);
RETURN_FALSE;
@@ -274,7 +281,8 @@
if (status) {
spprintf(&error_msg, 0, "%s (in %s)", (char *) pam_strerror(pamh, result), "pam_acct_mgmt");
zval_dtor(status);
- ZVAL_STRING(status, error_msg, 0);
+ ZVAL_STRING(status, error_msg);
+ efree(error_msg);
}
pam_end(pamh, PAM_SUCCESS);
RETURN_FALSE;
@@ -312,7 +320,8 @@
if (status) {
spprintf(&error_msg, 0, "%s (in %s)", (char *) pam_strerror(pamh, result), "pam_start");
zval_dtor(status);
- ZVAL_STRING(status, error_msg, 0);
+ ZVAL_STRING(status, error_msg);
+ efree(error_msg);
}
RETURN_FALSE;
}
@@ -321,7 +330,8 @@
if (status) {
spprintf(&error_msg, 0, "%s (in %s)", (char *) pam_strerror(pamh, result), "pam_authenticate");
zval_dtor(status);
- ZVAL_STRING(status, error_msg, 0);
+ ZVAL_STRING(status, error_msg);
+ efree(error_msg);
}
pam_end(pamh, PAM_SUCCESS);
RETURN_FALSE;
@@ -331,7 +341,8 @@
if (status) {
spprintf(&error_msg, 0, "%s (in %s)", (char *) pam_strerror(pamh, result), "pam_chauthtok");
zval_dtor(status);
- ZVAL_STRING(status, error_msg, 0);
+ ZVAL_STRING(status, error_msg);
+ efree(error_msg);
}
pam_end(pamh, PAM_SUCCESS);
RETURN_FALSE;