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

📄 pdb_sql.c

📁 samba-3.0.22.tar.gz 编译smb服务器的源码
💻 C
📖 第 1 页 / 共 2 页
字号:
/* * Common PDB SQL backend functions * Copyright (C) Jelmer Vernooij 2003-2004 *  * This program is free software; you can redistribute it and/or modify it under * the terms of the GNU General Public License as published by the Free * Software Foundation; either version 2 of the License, or (at your option) * any later version. *  * This program is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for * more details. *  * You should have received a copy of the GNU General Public License along with * this program; if not, write to the Free Software Foundation, Inc., 675 * Mass Ave, Cambridge, MA 02139, USA. */#include "includes.h"#define CONFIG_TABLE_DEFAULT				"user"#define CONFIG_LOGON_TIME_DEFAULT			"logon_time"#define CONFIG_LOGOFF_TIME_DEFAULT			"logoff_time"#define CONFIG_KICKOFF_TIME_DEFAULT			"kickoff_time"#define CONFIG_PASS_LAST_SET_TIME_DEFAULT		"pass_last_set_time"#define CONFIG_PASS_CAN_CHANGE_TIME_DEFAULT		"pass_can_change_time"#define CONFIG_PASS_MUST_CHANGE_TIME_DEFAULT 		"pass_must_change_time"#define CONFIG_USERNAME_DEFAULT 			"username"#define CONFIG_DOMAIN_DEFAULT				"domain"#define CONFIG_NT_USERNAME_DEFAULT  			"nt_username"#define CONFIG_FULLNAME_DEFAULT				"nt_fullname"#define CONFIG_HOME_DIR_DEFAULT				"home_dir"#define CONFIG_DIR_DRIVE_DEFAULT			"dir_drive"#define CONFIG_LOGON_SCRIPT_DEFAULT			"logon_script"#define CONFIG_PROFILE_PATH_DEFAULT			"profile_path"#define CONFIG_ACCT_DESC_DEFAULT			"acct_desc"#define CONFIG_WORKSTATIONS_DEFAULT			"workstations"#define CONFIG_UNKNOWN_STR_DEFAULT			"unknown_str"#define CONFIG_MUNGED_DIAL_DEFAULT			"munged_dial"#define CONFIG_USER_SID_DEFAULT				"user_sid"#define CONFIG_GROUP_SID_DEFAULT			"group_sid"#define CONFIG_LM_PW_DEFAULT				"lm_pw"#define CONFIG_NT_PW_DEFAULT				"nt_pw"#define CONFIG_PLAIN_PW_DEFAULT				"NULL"#define CONFIG_ACCT_CTRL_DEFAULT			"acct_ctrl"#define CONFIG_LOGON_DIVS_DEFAULT			"logon_divs"#define CONFIG_HOURS_LEN_DEFAULT			"hours_len"#define CONFIG_BAD_PASSWORD_COUNT_DEFAULT		"bad_password_count"#define CONFIG_LOGON_COUNT_DEFAULT			"logon_count"#define CONFIG_UNKNOWN_6_DEFAULT			"unknown_6"#define CONFIG_LOGON_HOURS				"logon_hours"/* Used to construct insert and update queries */typedef struct pdb_sql_query {	char update;	char *part1;	char *part2;} pdb_sql_query;static void pdb_sql_int_field(struct pdb_sql_query *q, const char *name, int value){	if (!name || strchr(name, '\''))		return;                 /* This field shouldn't be set by us */	if (q->update) {		q->part1 =			talloc_asprintf_append(q->part1,								   "%s = %d,", name, value);	} else {		q->part1 =			talloc_asprintf_append(q->part1, "%s,", name);		q->part2 =			talloc_asprintf_append(q->part2, "%d,", value);	}}char *sql_escape_string(TALLOC_CTX *mem_ctx, const char *unesc){	char *esc = talloc_array(mem_ctx, char, strlen(unesc) * 2 + 3);	size_t pos_unesc = 0, pos_esc = 0;	for(pos_unesc = 0; unesc[pos_unesc]; pos_unesc++) {		switch(unesc[pos_unesc]) {		case '\\':		case '\'':		case '"':			esc[pos_esc] = '\\'; pos_esc++;		default:			esc[pos_esc] = unesc[pos_unesc]; pos_esc++;			break;		}	}	esc[pos_esc] = '\0';		return esc;}static NTSTATUS pdb_sql_string_field(struct pdb_sql_query *q,					   const char *name, const char *value){	char *esc_value;	if (!name || !value || !strcmp(value, "") || strchr(name, '\''))		return NT_STATUS_INVALID_PARAMETER;   /* This field shouldn't be set by module */	esc_value = sql_escape_string(q, value);	if (q->update) {		q->part1 =			talloc_asprintf_append(q->part1,								   "%s = '%s',", name, esc_value);	} else {		q->part1 =			talloc_asprintf_append(q->part1, "%s,", name);		q->part2 =			talloc_asprintf_append(q->part2, "'%s',",								   esc_value);	}	talloc_free(esc_value);	return NT_STATUS_OK;}#define config_value(data,name,default_value) \	lp_parm_const_string(GLOBAL_SECTION_SNUM, data, name, default_value)static const char * config_value_write(const char *location, const char *name, const char *default_value) {	char const *v = NULL;	char const *swrite = NULL;	v = lp_parm_const_string(GLOBAL_SECTION_SNUM, location, name, default_value);	if (!v)		return NULL;	swrite = strrchr(v, ':');	/* Default to the same field as read field */	if (!swrite) {		/* Updating NULL does not make much sense */		if (!strcmp(v, "NULL")) 			return NULL;		return v;	}	swrite++;	/* If the field is 0 chars long, we shouldn't write to it */	if (!strlen(swrite) || !strcmp(swrite, "NULL"))		return NULL;	/* Otherwise, use the additionally specified */	return swrite;}static const char * config_value_read(const char *location, const char *name, const char *default_value){	char *v = NULL;	char *swrite;	v = lp_parm_talloc_string(GLOBAL_SECTION_SNUM, location, name, default_value);	if (!v)		return "NULL";	swrite = strrchr(v, ':');	/* If no write is specified, there are no problems */	if (!swrite) {		if (strlen(v) == 0)			return "NULL";		return (const char *)v;	}	/* Otherwise, we have to cut the ':write_part' */	*swrite = '\0';	if (strlen(v) == 0)		return "NULL";	return (const char *)v;}char *sql_account_query_select(TALLOC_CTX *mem_ctx, const char *data, BOOL update, enum sql_search_field field, const char *value){	const char *field_string;	char *query;	switch(field) {	case SQL_SEARCH_NONE: 		field_string = "'1'"; 		value = "1"; 		break;			case SQL_SEARCH_USER_SID: 		field_string = config_value_read(data, "user sid column", 										 CONFIG_USER_SID_DEFAULT); 		break;			case SQL_SEARCH_USER_NAME: 		field_string = config_value_read(data, "username column", 										 CONFIG_USERNAME_DEFAULT);		break;	default:		field_string = "unknown";		break;	}	query = talloc_asprintf(mem_ctx,			 "SELECT %s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s FROM %s WHERE %s = '%s'",			 config_value_read(data, "logon time column",							   CONFIG_LOGON_TIME_DEFAULT),			 config_value_read(data, "logoff time column",							   CONFIG_LOGOFF_TIME_DEFAULT),			 config_value_read(data, "kickoff time column",							   CONFIG_KICKOFF_TIME_DEFAULT),			 config_value_read(data, "pass last set time column",							   CONFIG_PASS_LAST_SET_TIME_DEFAULT),			 config_value_read(data, "pass can change time column",							   CONFIG_PASS_CAN_CHANGE_TIME_DEFAULT),			 config_value_read(data, "pass must change time column",							   CONFIG_PASS_MUST_CHANGE_TIME_DEFAULT),			 config_value_read(data, "username column",							   CONFIG_USERNAME_DEFAULT),			 config_value_read(data, "domain column",							   CONFIG_DOMAIN_DEFAULT),			 config_value_read(data, "nt username column",							   CONFIG_NT_USERNAME_DEFAULT),			 config_value_read(data, "fullname column",							   CONFIG_FULLNAME_DEFAULT),			 config_value_read(data, "home dir column",							   CONFIG_HOME_DIR_DEFAULT),			 config_value_read(data, "dir drive column",							   CONFIG_DIR_DRIVE_DEFAULT),			 config_value_read(data, "logon script column",							   CONFIG_LOGON_SCRIPT_DEFAULT),			 config_value_read(data, "profile path column",							   CONFIG_PROFILE_PATH_DEFAULT),			 config_value_read(data, "acct desc column",							   CONFIG_ACCT_DESC_DEFAULT),			 config_value_read(data, "workstations column",							   CONFIG_WORKSTATIONS_DEFAULT),			 config_value_read(data, "unknown string column",							   CONFIG_UNKNOWN_STR_DEFAULT),			 config_value_read(data, "munged dial column",							   CONFIG_MUNGED_DIAL_DEFAULT),			 config_value_read(data, "user sid column",							   CONFIG_USER_SID_DEFAULT),			 config_value_read(data, "group sid column",							   CONFIG_GROUP_SID_DEFAULT),			 config_value_read(data, "lanman pass column",							   CONFIG_LM_PW_DEFAULT),			 config_value_read(data, "nt pass column",							   CONFIG_NT_PW_DEFAULT),			 config_value_read(data, "plain pass column",							   CONFIG_PLAIN_PW_DEFAULT),			 config_value_read(data, "acct ctrl column",							   CONFIG_ACCT_CTRL_DEFAULT),			 config_value_read(data, "logon divs column",							   CONFIG_LOGON_DIVS_DEFAULT),			 config_value_read(data, "hours len column",							   CONFIG_HOURS_LEN_DEFAULT),			 config_value_read(data, "bad password count column",							   CONFIG_BAD_PASSWORD_COUNT_DEFAULT),			 config_value_read(data, "logon count column",							   CONFIG_LOGON_COUNT_DEFAULT),			 config_value_read(data, "unknown 6 column",							   CONFIG_UNKNOWN_6_DEFAULT),			 config_value_read(data, "logon hours column",							   CONFIG_LOGON_HOURS),			 config_value(data, "table", CONFIG_TABLE_DEFAULT), 			 field_string, value				 );	 return query;}char *sql_account_query_delete(TALLOC_CTX *mem_ctx, const char *data, const char *esc) {	char *query;	

⌨️ 快捷键说明

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