php 7 で pamモジュールが動かなかった。
install してもPHPのPAMが動かなかったんですね。
PHPのC言語APIが変わってた
コンパイルエラーなので、調べていくと型宣言辺で落ちてた。 調べていくと、拡張機能の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;