mirror of
https://github.com/php/php-src.git
synced 2024-09-22 10:27:25 +00:00
add ibase_add_user(), ibase_modify_user(), ibase_delete_use()
This commit is contained in:
parent
f174bbc711
commit
ece15242e7
@ -103,6 +103,11 @@ function_entry ibase_functions[] = {
|
||||
PHP_FE(ibase_blob_echo, NULL)
|
||||
PHP_FE(ibase_blob_import, NULL)
|
||||
PHP_FE(ibase_errmsg, NULL)
|
||||
|
||||
PHP_FE(ibase_add_user, NULL)
|
||||
PHP_FE(ibase_modify_user, NULL)
|
||||
PHP_FE(ibase_delete_user, NULL)
|
||||
|
||||
{NULL, NULL, NULL}
|
||||
};
|
||||
|
||||
@ -2928,7 +2933,187 @@ PHP_FUNCTION(ibase_blob_import)
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
#endif
|
||||
/* {{{ _php_ibase_user() */
|
||||
static void _php_ibase_user(INTERNAL_FUNCTION_PARAMETERS, int operation)
|
||||
{
|
||||
pval **args[8];
|
||||
char *ib_server, *dba_user_name, *dba_password, *user_name, *user_password = NULL,
|
||||
*first_name = NULL, *middle_name = NULL, *last_name = NULL;
|
||||
char service_name_buffer[128], *service_name = service_name_buffer;
|
||||
char spb_buffer[128], *spb = spb_buffer;
|
||||
unsigned short spb_length;
|
||||
isc_svc_handle service_handle = NULL;
|
||||
|
||||
RESET_ERRMSG;
|
||||
|
||||
switch (operation) {
|
||||
case isc_action_svc_add_user:
|
||||
case isc_action_svc_modify_user:
|
||||
// 5 to 8 parameters for ADD or MODIFY operation
|
||||
if(ZEND_NUM_ARGS() < 5 || ZEND_NUM_ARGS() > 8) {
|
||||
WRONG_PARAM_COUNT;
|
||||
}
|
||||
break;
|
||||
|
||||
case isc_action_svc_delete_user:
|
||||
// 4 parameters for DELETE operation
|
||||
if (ZEND_NUM_ARGS() != 4) {
|
||||
WRONG_PARAM_COUNT;
|
||||
}
|
||||
}
|
||||
|
||||
if (zend_get_parameters_array_ex(ZEND_NUM_ARGS(), args) == FAILURE) {
|
||||
RETURN_FALSE;
|
||||
}
|
||||
|
||||
switch(ZEND_NUM_ARGS()) {
|
||||
case 8:
|
||||
convert_to_string_ex(args[7]);
|
||||
last_name = (*args[7])->value.str.val;
|
||||
/* fallout */
|
||||
case 7:
|
||||
convert_to_string_ex(args[6]);
|
||||
middle_name = (*args[6])->value.str.val;
|
||||
/* fallout */
|
||||
case 6:
|
||||
convert_to_string_ex(args[5]);
|
||||
first_name = (*args[5])->value.str.val;
|
||||
/* fallout */
|
||||
}
|
||||
|
||||
if (operation != isc_action_svc_delete_user) {
|
||||
// Parameter not available for DELETE operation
|
||||
convert_to_string_ex(args[4]);
|
||||
user_password = (*args[4])->value.str.val;
|
||||
}
|
||||
|
||||
convert_to_string_ex(args[3]);
|
||||
user_name = (*args[3])->value.str.val;
|
||||
|
||||
convert_to_string_ex(args[2]);
|
||||
dba_password = (*args[2])->value.str.val;
|
||||
|
||||
convert_to_string_ex(args[1]);
|
||||
dba_user_name = (*args[1])->value.str.val;
|
||||
|
||||
convert_to_string_ex(args[0]);
|
||||
ib_server = (*args[0])->value.str.val;
|
||||
|
||||
/*
|
||||
zend_printf("server : %s<br>", ib_server);
|
||||
zend_printf("admin : %s<br>", dba_user_name);
|
||||
zend_printf("admin pwd: %s<br>", dba_password);
|
||||
zend_printf("user : %s<br>", user_name);
|
||||
zend_printf("user pwd : %s<br>", user_password);
|
||||
zend_printf("fname : %s<br>", first_name);
|
||||
zend_printf("mname : %s<br>", middle_name);
|
||||
zend_printf("lname : %s<br>", last_name);
|
||||
*/
|
||||
|
||||
// Build buffer for isc_service_attach()
|
||||
*spb++ = isc_spb_version;
|
||||
*spb++ = isc_spb_current_version;
|
||||
*spb++ = isc_spb_user_name;
|
||||
*spb++ = strlen(dba_user_name);
|
||||
strcpy(spb, dba_user_name);
|
||||
spb += strlen(dba_user_name);
|
||||
*spb++ = isc_spb_password;
|
||||
*spb++ = strlen(dba_password);
|
||||
strcpy(spb, dba_password);
|
||||
spb += strlen(dba_password);
|
||||
spb_length = spb - spb_buffer;
|
||||
|
||||
// Attach to the Service Manager
|
||||
sprintf(service_name, "%s:service_mgr", ib_server);
|
||||
if (isc_service_attach(IB_STATUS, 0, service_name,
|
||||
&service_handle, spb_length, spb_buffer)) {
|
||||
|
||||
_php_ibase_error();
|
||||
RETURN_FALSE;
|
||||
}
|
||||
else {
|
||||
char request[128], *x, *p = request;
|
||||
|
||||
// Identify cluster (here, isc_action_svc_*_user)
|
||||
*p++ = operation;
|
||||
|
||||
// Argument for username
|
||||
*p++ = isc_spb_sec_username;
|
||||
ADD_SPB_LENGTH(p, strlen(user_name));
|
||||
for (x = user_name ; *x; ) *p++ = *x++;
|
||||
|
||||
// Argument for password
|
||||
if (user_password) {
|
||||
*p++ = isc_spb_sec_password;
|
||||
ADD_SPB_LENGTH(p, strlen(user_password));
|
||||
for (x = user_password ; *x; ) *p++ = *x++;
|
||||
}
|
||||
|
||||
// Argument for first name
|
||||
if (first_name) {
|
||||
*p++ = isc_spb_sec_firstname;
|
||||
ADD_SPB_LENGTH(p, strlen(first_name));
|
||||
for (x = first_name ; *x; ) *p++ = *x++;
|
||||
}
|
||||
|
||||
// Argument for middle name
|
||||
if (middle_name) {
|
||||
*p++ = isc_spb_sec_middlename;
|
||||
ADD_SPB_LENGTH(p, strlen(middle_name));
|
||||
for (x = middle_name ; *x; ) *p++ = *x++;
|
||||
}
|
||||
|
||||
// Argument for last name
|
||||
if (last_name) {
|
||||
*p++ = isc_spb_sec_lastname;
|
||||
ADD_SPB_LENGTH(p, strlen(last_name));
|
||||
for (x = last_name ; *x; ) *p++ = *x++;
|
||||
}
|
||||
|
||||
// Let's go update: start Service Manager
|
||||
if (isc_service_start(IB_STATUS, &service_handle,
|
||||
NULL, (unsigned short) (p - request), request)) {
|
||||
|
||||
_php_ibase_error();
|
||||
isc_service_detach(IB_STATUS, &service_handle);
|
||||
RETURN_FALSE;
|
||||
}
|
||||
else {
|
||||
// Detach from Service Manager
|
||||
isc_service_detach(IB_STATUS, &service_handle);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
RETURN_TRUE;
|
||||
}
|
||||
|
||||
|
||||
/* {{{ proto int ibase_add_user(string server, string dba_user_name, string dba_password, string user_name, string password [, string first_name] [, string middle_name] [, string last_name])
|
||||
Add an user to security database */
|
||||
PHP_FUNCTION(ibase_add_user)
|
||||
{
|
||||
_php_ibase_user(INTERNAL_FUNCTION_PARAM_PASSTHRU, isc_action_svc_add_user);
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
|
||||
/* {{{ proto int ibase_modify_user(string server, string dba_user_name, string dba_password, string user_name, string password [, string first_name] [, string middle_name] [, string last_name])
|
||||
Modify an user in security database */
|
||||
PHP_FUNCTION(ibase_modify_user)
|
||||
{
|
||||
_php_ibase_user(INTERNAL_FUNCTION_PARAM_PASSTHRU, isc_action_svc_modify_user);
|
||||
}
|
||||
|
||||
|
||||
/* {{{ proto int ibase_delete_user(string server, string dba_user_name, string dba_password, string username)
|
||||
Delete an user from security database */
|
||||
PHP_FUNCTION(ibase_delete_user)
|
||||
{
|
||||
_php_ibase_user(INTERNAL_FUNCTION_PARAM_PASSTHRU, isc_action_svc_delete_user);
|
||||
}
|
||||
|
||||
#endif /* HAVE_IBASE */
|
||||
|
||||
/*
|
||||
* Local variables:
|
||||
|
@ -69,6 +69,10 @@ PHP_FUNCTION(ibase_blob_echo);
|
||||
PHP_FUNCTION(ibase_blob_info);
|
||||
PHP_FUNCTION(ibase_blob_import);
|
||||
|
||||
PHP_FUNCTION(ibase_add_user);
|
||||
PHP_FUNCTION(ibase_modify_user);
|
||||
PHP_FUNCTION(ibase_delete_user);
|
||||
|
||||
PHP_FUNCTION(ibase_errmsg);
|
||||
|
||||
#define IBASE_MSGSIZE 256
|
||||
|
Loading…
Reference in New Issue
Block a user