⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pdb_pgsql.c

📁 samba-3.0.22.tar.gz 编译smb服务器的源码
💻 C
📖 第 1 页 / 共 2 页
字号:
  if ( !esc )  {    DEBUG(0, ("Can't allocate memory to store escaped name\n"));    return NT_STATUS_NO_MEMORY;   }    //tmp_sname = smb_xstrdup(sname);  PQescapeString( esc, sname, strlen(sname) ) ;  /* Connect to the DB. */  handle = choose_connection( data );  if ( handle == NULL )    return NT_STATUS_UNSUCCESSFUL ;    query = sql_account_query_select(NULL, data->location, True, field, esc);    /* Do it */  DEBUG( 5, ("Executing query %s\n", query) ) ;  result = PQexec( handle, query ) ;    /* Result? */  if ( result == NULL )  {    DEBUG( 0, ("Error executing %s, %s\n", query, PQerrorMessage( handle ) ) ) ;    retval = NT_STATUS_UNSUCCESSFUL ;  }  else if ( PQresultStatus( result ) != PGRES_TUPLES_OK )  {    DEBUG( 0, ("Error executing %s, %s\n", query, PQresultErrorMessage( result ) ) ) ;    retval = NT_STATUS_UNSUCCESSFUL ;  }  else  {    retval = row_to_sam_account( result, 0, user ) ;  }    talloc_free( esc   ) ;  talloc_free( query ) ;   if ( result != NULL )    PQclear( result ) ;    return retval ;}/******************************************************************  Lookup a name in the SAM database ******************************************************************/static NTSTATUS pgsqlsam_getsampwnam ( struct pdb_methods *methods, SAM_ACCOUNT *user, const char *sname ){  struct pdb_pgsql_data *data;  size_t i, l;  char *lowercasename;  NTSTATUS result;    SET_DATA(data, methods);    if ( !sname )  {    DEBUG( 0, ("invalid name specified") ) ;    return NT_STATUS_INVALID_PARAMETER;  }  lowercasename = smb_xstrdup(sname);  l = strlen(lowercasename);  for(i = 0; i < l; i++) {    lowercasename[i] = tolower_ascii(lowercasename[i]);  }    result = pgsqlsam_select_by_field( methods, user, SQL_SEARCH_USER_NAME, lowercasename ) ;  SAFE_FREE( lowercasename ) ;  return result;}/***************************************************************************  Search by sid **************************************************************************/static NTSTATUS pgsqlsam_getsampwsid ( struct pdb_methods *methods, SAM_ACCOUNT *user, const DOM_SID *sid ){  struct pdb_pgsql_data *data;  fstring sid_str;    SET_DATA( data, methods ) ;    sid_to_string( sid_str, sid ) ;    return pgsqlsam_select_by_field( methods, user, SQL_SEARCH_USER_SID, sid_str ) ;}/***************************************************************************  Delete a SAM_ACCOUNT ****************************************************************************/static NTSTATUS pgsqlsam_delete_sam_account( struct pdb_methods *methods, SAM_ACCOUNT *sam_pass ){  struct pdb_pgsql_data *data ;  PGconn *handle ;    const char *sname = pdb_get_username( sam_pass ) ;  char *esc ;  char *query ;    PGresult *result ;  NTSTATUS retval ;    SET_DATA(data, methods);    if ( !sname )  {    DEBUG( 0, ("invalid name specified\n") ) ;    return NT_STATUS_INVALID_PARAMETER ;  }    /* Escape sname */  esc = talloc_array(NULL, char, strlen(sname) * 2 + 1);  if ( !esc )  {    DEBUG(0, ("Can't allocate memory to store escaped name\n"));    return NT_STATUS_NO_MEMORY;  }    PQescapeString( esc, sname, strlen(sname) ) ;  /* Connect to the DB. */  handle = choose_connection( data );  if ( handle == NULL )    return NT_STATUS_UNSUCCESSFUL ;    query = sql_account_query_delete(NULL, data->location, esc);    /* Do it */  result = PQexec( handle, query ) ;    if ( result == NULL )  {    DEBUG( 0, ("Error executing %s, %s\n", query, PQerrorMessage( handle ) ) ) ;    retval = NT_STATUS_UNSUCCESSFUL ;  }  else if ( PQresultStatus( result ) != PGRES_COMMAND_OK )  {    DEBUG( 0, ("Error executing %s, %s\n", query, PQresultErrorMessage( result ) ) ) ;    retval = NT_STATUS_UNSUCCESSFUL ;  }  else  {    DEBUG( 5, ("User '%s' deleted\n", sname) ) ;    retval = NT_STATUS_OK ;  }    if ( result != NULL )    PQclear( result ) ;  talloc_free( esc ) ;  talloc_free( query ) ;    return retval ;}static NTSTATUS pgsqlsam_replace_sam_account( struct pdb_methods *methods, const SAM_ACCOUNT *newpwd, char isupdate ){  struct pdb_pgsql_data *data ;  PGconn *handle ;  char *query;  PGresult *result ;  NTSTATUS retval ;    if ( !methods )  {    DEBUG( 0, ("invalid methods!\n") ) ;    return NT_STATUS_INVALID_PARAMETER ;  }    data = (struct pdb_pgsql_data *) methods->private_data ;    if ( data == NULL || handle == NULL )  {    DEBUG( 0, ("invalid handle!\n") ) ;    return NT_STATUS_INVALID_HANDLE ;  }  query = sql_account_query_update(NULL, data->location, newpwd, isupdate);  if ( query == NULL ) /* Nothing to update. */    return NT_STATUS_OK;  /* Connect to the DB. */  handle = choose_connection( data );  if ( handle == NULL )    return NT_STATUS_UNSUCCESSFUL ;  result = PQexec( handle, query ) ;    /* Execute the query */  if ( result == NULL )  {    DEBUG( 0, ("Error executing %s, %s\n", query, PQerrorMessage( handle ) ) ) ;    retval = NT_STATUS_INVALID_PARAMETER;  }  else if ( PQresultStatus( result ) != PGRES_COMMAND_OK )  {    DEBUG( 0, ("Error executing %s, %s\n", query, PQresultErrorMessage( result ) ) ) ;    retval = NT_STATUS_INVALID_PARAMETER;  }  else  {    retval = NT_STATUS_OK;  }  if ( result != NULL )    PQclear( result ) ;  talloc_free(query);    return retval;}static NTSTATUS pgsqlsam_add_sam_account ( struct pdb_methods *methods, SAM_ACCOUNT *newpwd ){  return pgsqlsam_replace_sam_account( methods, newpwd, 0 ) ;}static NTSTATUS pgsqlsam_update_sam_account ( struct pdb_methods *methods, SAM_ACCOUNT *newpwd ){  return pgsqlsam_replace_sam_account( methods, newpwd, 1 ) ;}static NTSTATUS pgsqlsam_init ( struct pdb_context *pdb_context, struct pdb_methods **pdb_method, const char *location ){  NTSTATUS nt_status ;  struct pdb_pgsql_data *data ;    if ( !pdb_context )  {    DEBUG( 0, ("invalid pdb_methods specified\n") ) ;    return NT_STATUS_UNSUCCESSFUL;  }    the_pdb_context = pdb_context;  if (!NT_STATUS_IS_OK    (nt_status = make_pdb_methods(pdb_context->mem_ctx, pdb_method))) {    return nt_status;  }    (*pdb_method)->name               = "pgsqlsam" ;    (*pdb_method)->setsampwent        = pgsqlsam_setsampwent ;  (*pdb_method)->endsampwent        = pgsqlsam_endsampwent ;  (*pdb_method)->getsampwent        = pgsqlsam_getsampwent ;  (*pdb_method)->getsampwnam        = pgsqlsam_getsampwnam ;  (*pdb_method)->getsampwsid        = pgsqlsam_getsampwsid ;  (*pdb_method)->add_sam_account    = pgsqlsam_add_sam_account ;  (*pdb_method)->update_sam_account = pgsqlsam_update_sam_account ;  (*pdb_method)->delete_sam_account = pgsqlsam_delete_sam_account ;    data = talloc( pdb_context->mem_ctx, struct pdb_pgsql_data ) ;  (*pdb_method)->private_data = data ;  data->master_handle = NULL;  data->handle = NULL;  data->pwent  = NULL ;  if ( !location )  {    DEBUG( 0, ("No identifier specified. Check the Samba HOWTO Collection for details\n") ) ;    return NT_STATUS_INVALID_PARAMETER;  }  data->location = smb_xstrdup( location ) ;  if(!sql_account_config_valid(data->location)) {          return NT_STATUS_INVALID_PARAMETER;  }  DEBUG  (    1,    (	"Database server parameters: host: %s, user: %s, password: XXXX, database: %s, port: %s\n",	config_value( data, "pgsql host"    , CONFIG_HOST_DEFAULT ),	config_value( data, "pgsql user"    , CONFIG_USER_DEFAULT ),	config_value( data, "pgsql database", CONFIG_DB_DEFAULT   ),	config_value( data, "pgsql port"    , CONFIG_PORT_DEFAULT )    )  ) ;  /* Save the parameters. */  data->db   = config_value( data, "pgsql database", CONFIG_DB_DEFAULT   );  data->host = config_value( data, "pgsql host"    , CONFIG_HOST_DEFAULT );  data->port = config_value( data, "pgsql port"    , CONFIG_PORT_DEFAULT );  data->user = config_value( data, "pgsql user"    , CONFIG_USER_DEFAULT );  data->pass = config_value( data, "pgsql password", CONFIG_PASS_DEFAULT );  DEBUG( 5, ("Pgsql module intialized\n") ) ;  return NT_STATUS_OK;}NTSTATUS pdb_pgsql_init(void) {  return smb_register_passdb( PASSDB_INTERFACE_VERSION, "pgsql", pgsqlsam_init ) ;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -