📄 pdb_sql.c
字号:
query = talloc_asprintf(mem_ctx, "DELETE FROM %s WHERE %s = '%s'", config_value(data, "table", CONFIG_TABLE_DEFAULT), config_value_read(data, "username column", CONFIG_USERNAME_DEFAULT), esc); return query;}char *sql_account_query_update(TALLOC_CTX *mem_ctx, const char *location, const SAM_ACCOUNT *newpwd, char isupdate){ char *ret; pstring temp; fstring sid_str; pdb_sql_query *query; int some_field_affected = 0; query = talloc(mem_ctx, pdb_sql_query); query->update = isupdate; /* I know this is somewhat overkill but only the talloc * functions have asprint_append and the 'normal' asprintf * is a GNU extension */ query->part2 = talloc_asprintf(query, "%s", ""); if (query->update) { query->part1 = talloc_asprintf(query, "UPDATE %s SET ", config_value(location, "table", CONFIG_TABLE_DEFAULT)); } else { query->part1 = talloc_asprintf(query, "INSERT INTO %s (", config_value(location, "table", CONFIG_TABLE_DEFAULT)); } if (!isupdate || IS_SAM_CHANGED(newpwd, PDB_ACCTCTRL)) { some_field_affected = 1; pdb_sql_int_field(query, config_value_write(location, "acct ctrl column", CONFIG_ACCT_CTRL_DEFAULT), pdb_get_acct_ctrl(newpwd)); } if (!isupdate || IS_SAM_CHANGED(newpwd, PDB_LOGONTIME)) { some_field_affected = 1; pdb_sql_int_field(query, config_value_write(location, "logon time column", CONFIG_LOGON_TIME_DEFAULT), pdb_get_logon_time(newpwd)); } if (!isupdate || IS_SAM_CHANGED(newpwd, PDB_LOGOFFTIME)) { some_field_affected = 1; pdb_sql_int_field(query, config_value_write(location, "logoff time column", CONFIG_LOGOFF_TIME_DEFAULT), pdb_get_logoff_time(newpwd)); } if (!isupdate || IS_SAM_CHANGED(newpwd, PDB_KICKOFFTIME)) { some_field_affected = 1; pdb_sql_int_field(query, config_value_write(location, "kickoff time column", CONFIG_KICKOFF_TIME_DEFAULT), pdb_get_kickoff_time(newpwd)); } if (!isupdate || IS_SAM_CHANGED(newpwd, PDB_CANCHANGETIME)) { some_field_affected = 1; pdb_sql_int_field(query, config_value_write(location, "pass can change time column", CONFIG_PASS_CAN_CHANGE_TIME_DEFAULT), pdb_get_pass_can_change_time(newpwd)); } if (!isupdate || IS_SAM_CHANGED(newpwd, PDB_MUSTCHANGETIME)) { some_field_affected = 1; pdb_sql_int_field(query, config_value_write(location, "pass must change time column", CONFIG_PASS_MUST_CHANGE_TIME_DEFAULT), pdb_get_pass_must_change_time(newpwd)); } if (!isupdate || IS_SAM_CHANGED(newpwd, PDB_PASSLASTSET)) { some_field_affected = 1; pdb_sql_int_field(query, config_value_write(location, "pass last set time column", CONFIG_PASS_LAST_SET_TIME_DEFAULT), pdb_get_pass_last_set_time(newpwd)); } if (!isupdate || IS_SAM_CHANGED(newpwd, PDB_HOURSLEN)) { some_field_affected = 1; pdb_sql_int_field(query, config_value_write(location, "hours len column", CONFIG_HOURS_LEN_DEFAULT), pdb_get_hours_len(newpwd)); } if (!isupdate || IS_SAM_CHANGED(newpwd, PDB_LOGONDIVS)) { some_field_affected = 1; pdb_sql_int_field(query, config_value_write(location, "logon divs column", CONFIG_LOGON_DIVS_DEFAULT), pdb_get_logon_divs(newpwd)); } if (!isupdate || IS_SAM_CHANGED(newpwd, PDB_USERSID)) { some_field_affected = 1; pdb_sql_string_field(query, config_value_write(location, "user sid column", CONFIG_USER_SID_DEFAULT), sid_to_string(sid_str, pdb_get_user_sid(newpwd))); } if (!isupdate || IS_SAM_CHANGED(newpwd, PDB_GROUPSID)) { some_field_affected = 1; pdb_sql_string_field(query, config_value_write(location, "group sid column", CONFIG_GROUP_SID_DEFAULT), sid_to_string(sid_str, pdb_get_group_sid(newpwd))); } if (!isupdate || IS_SAM_CHANGED(newpwd, PDB_USERNAME)) { some_field_affected = 1; pdb_sql_string_field(query, config_value_write(location, "username column", CONFIG_USERNAME_DEFAULT), pdb_get_username(newpwd)); } if (!isupdate || IS_SAM_CHANGED(newpwd, PDB_DOMAIN)) { some_field_affected = 1; pdb_sql_string_field(query, config_value_write(location, "domain column", CONFIG_DOMAIN_DEFAULT), pdb_get_domain(newpwd)); } if (!isupdate || IS_SAM_CHANGED(newpwd, PDB_USERNAME)) { some_field_affected = 1; pdb_sql_string_field(query, config_value_write(location, "nt username column", CONFIG_NT_USERNAME_DEFAULT), pdb_get_nt_username(newpwd)); } if (!isupdate || IS_SAM_CHANGED(newpwd, PDB_FULLNAME)) { some_field_affected = 1; pdb_sql_string_field(query, config_value_write(location, "fullname column", CONFIG_FULLNAME_DEFAULT), pdb_get_fullname(newpwd)); } if (!isupdate || IS_SAM_CHANGED(newpwd, PDB_LOGONSCRIPT)) { some_field_affected = 1; pdb_sql_string_field(query, config_value_write(location, "logon script column", CONFIG_LOGON_SCRIPT_DEFAULT), pdb_get_logon_script(newpwd)); } if (!isupdate || IS_SAM_CHANGED(newpwd, PDB_PROFILE)) { some_field_affected = 1; pdb_sql_string_field(query, config_value_write(location, "profile path column", CONFIG_PROFILE_PATH_DEFAULT), pdb_get_profile_path(newpwd)); } if (!isupdate || IS_SAM_CHANGED(newpwd, PDB_DRIVE)) { some_field_affected = 1; pdb_sql_string_field(query, config_value_write(location, "dir drive column", CONFIG_DIR_DRIVE_DEFAULT), pdb_get_dir_drive(newpwd)); } if (!isupdate || IS_SAM_CHANGED(newpwd, PDB_SMBHOME)) { some_field_affected = 1; pdb_sql_string_field(query, config_value_write(location, "home dir column", CONFIG_HOME_DIR_DEFAULT), pdb_get_homedir(newpwd)); } if (!isupdate || IS_SAM_CHANGED(newpwd, PDB_WORKSTATIONS)) { some_field_affected = 1; pdb_sql_string_field(query, config_value_write(location, "workstations column", CONFIG_WORKSTATIONS_DEFAULT), pdb_get_workstations(newpwd)); } if (!isupdate || IS_SAM_CHANGED(newpwd, PDB_UNKNOWNSTR)) { some_field_affected = 1; pdb_sql_string_field(query, config_value_write(location, "unknown string column", CONFIG_UNKNOWN_STR_DEFAULT), pdb_get_workstations(newpwd)); } if (!isupdate || IS_SAM_CHANGED(newpwd, PDB_LMPASSWD)) { some_field_affected = 1; pdb_sethexpwd(temp, pdb_get_lanman_passwd(newpwd), pdb_get_acct_ctrl(newpwd)); pdb_sql_string_field(query, config_value_write(location, "lanman pass column", CONFIG_LM_PW_DEFAULT), temp); } if (!isupdate || IS_SAM_CHANGED(newpwd, PDB_NTPASSWD)) { some_field_affected = 1; pdb_sethexpwd(temp, pdb_get_nt_passwd(newpwd), pdb_get_acct_ctrl(newpwd)); pdb_sql_string_field(query, config_value_write(location, "nt pass column", CONFIG_NT_PW_DEFAULT), temp); } if (!isupdate || IS_SAM_CHANGED(newpwd, PDB_HOURS)) { some_field_affected = 1; pdb_sql_string_field(query, config_value_write(location, "logon hours column", CONFIG_LOGON_HOURS), (const char *)pdb_get_hours(newpwd)); } if (!some_field_affected) { talloc_free(query); return NULL; } if (query->update) { query->part1[strlen(query->part1) - 1] = '\0'; query->part1 = talloc_asprintf( mem_ctx, "%s WHERE %s = '%s'", query->part1, config_value_read(location, "user sid column", CONFIG_USER_SID_DEFAULT), sid_to_string(sid_str, pdb_get_user_sid (newpwd))); } else { query->part2[strlen(query->part2) - 1] = ')'; query->part1[strlen(query->part1) - 1] = ')'; query->part1 = talloc_asprintf_append(query->part1, " VALUES (%s", query->part2); } ret = talloc_strdup(mem_ctx, query->part1); talloc_free(query); return ret;}BOOL sql_account_config_valid(const char *data){ const char *sid_column, *username_column; sid_column = config_value_read(data, "user sid column", CONFIG_USER_SID_DEFAULT); username_column = config_value_read(data, "username column", CONFIG_USERNAME_DEFAULT); if(!strcmp(sid_column,"NULL") || !strcmp(username_column, "NULL")) { DEBUG(0,("Please specify both a valid 'user sid column' and a valid 'username column' in smb.conf\n")); return False; } return True;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -