extern struct winbindd_methods reconnect_methods;
#ifdef HAVE_ADS
-extern struct winbindd_methods ads_methods;
+extern struct winbindd_methods reconnect_ads_methods;
#endif
extern struct winbindd_methods builtin_passdb_methods;
extern struct winbindd_methods sam_passdb_methods;
struct cache_entry {
NTSTATUS status;
- uint32 sequence_number;
+ uint32_t sequence_number;
uint64_t timeout;
- uint8 *data;
- uint32 len, ofs;
+ uint8_t *data;
+ uint32_t len, ofs;
};
void (*smb_panic_fn)(const char *const why) = smb_panic;
}
/*
- OK. listen up becasue I'm only going to say this once.
+ OK. Listen up because I'm only going to say this once.
We have the following scenarios to consider
(a) trusted AD domains on a Samba DC,
(b) trusted AD domains and we are joined to a non-kerberos domain
&& domain->active_directory
&& !lp_winbind_rpc_only()) {
DEBUG(5,("get_cache: Setting ADS methods for domain %s\n", domain->name));
- domain->backend = &ads_methods;
+ domain->backend = &reconnect_ads_methods;
} else {
#endif /* HAVE_ADS */
DEBUG(5,("get_cache: Setting MS-RPC methods for domain %s\n", domain->name));
}
/*
- pull a uint32 from a cache entry
+ pull a uint32_t from a cache entry
*/
-static uint32 centry_uint32(struct cache_entry *centry)
+static uint32_t centry_uint32(struct cache_entry *centry)
{
- uint32 ret;
+ uint32_t ret;
if (!centry_check_bytes(centry, 4)) {
smb_panic_fn("centry_uint32");
}
/*
- pull a uint16 from a cache entry
+ pull a uint16_t from a cache entry
*/
-static uint16 centry_uint16(struct cache_entry *centry)
+static uint16_t centry_uint16(struct cache_entry *centry)
{
- uint16 ret;
+ uint16_t ret;
if (!centry_check_bytes(centry, 2)) {
smb_panic_fn("centry_uint16");
}
}
/*
- pull a uint8 from a cache entry
+ pull a uint8_t from a cache entry
*/
-static uint8 centry_uint8(struct cache_entry *centry)
+static uint8_t centry_uint8(struct cache_entry *centry)
{
- uint8 ret;
+ uint8_t ret;
if (!centry_check_bytes(centry, 1)) {
smb_panic_fn("centry_uint8");
}
}
ret = IVAL(centry->data, centry->ofs);
centry->ofs += 4;
- ret += (uint64)IVAL(centry->data, centry->ofs) << 32;
+ ret += (uint64_t)IVAL(centry->data, centry->ofs) << 32;
centry->ofs += 4;
return ret;
}
*/
static char *centry_string(struct cache_entry *centry, TALLOC_CTX *mem_ctx)
{
- uint32 len;
+ uint32_t len;
char *ret;
len = centry_uint8(centry);
*/
static char *centry_hash16(struct cache_entry *centry, TALLOC_CTX *mem_ctx)
{
- uint32 len;
+ uint32_t len;
char *ret;
len = centry_uint8(centry);
return ret;
}
-static bool wcache_fetch_seqnum(const char *domain_name, uint32_t *seqnum,
- uint32_t *last_seq_check)
+struct wcache_seqnum_state {
+ uint32_t *seqnum;
+ uint32_t *last_seq_check;
+};
+
+static int wcache_seqnum_parser(TDB_DATA key, TDB_DATA data,
+ void *private_data)
{
- char *key;
- TDB_DATA data;
+ struct wcache_seqnum_state *state = private_data;
- if (wcache->tdb == NULL) {
- DEBUG(10,("wcache_fetch_seqnum: tdb == NULL\n"));
- return false;
+ if (data.dsize != 8) {
+ DEBUG(10, ("wcache_fetch_seqnum: invalid data size %d\n",
+ (int)data.dsize));
+ return -1;
}
- key = talloc_asprintf(talloc_tos(), "SEQNUM/%s", domain_name);
- if (key == NULL) {
- DEBUG(10, ("talloc failed\n"));
- return false;
- }
+ *state->seqnum = IVAL(data.dptr, 0);
+ *state->last_seq_check = IVAL(data.dptr, 4);
+ return 0;
+}
- data = tdb_fetch_bystring(wcache->tdb, key);
- TALLOC_FREE(key);
+static bool wcache_fetch_seqnum(const char *domain_name, uint32_t *seqnum,
+ uint32_t *last_seq_check)
+{
+ struct wcache_seqnum_state state = {
+ .seqnum = seqnum, .last_seq_check = last_seq_check
+ };
+ size_t len = strlen(domain_name);
+ char keystr[len+8];
+ TDB_DATA key = { .dptr = (uint8_t *)keystr, .dsize = sizeof(keystr) };
+ int ret;
- if (data.dptr == NULL) {
- DEBUG(10, ("wcache_fetch_seqnum: %s not found\n",
- domain_name));
- return false;
- }
- if (data.dsize != 8) {
- DEBUG(10, ("wcache_fetch_seqnum: invalid data size %d\n",
- (int)data.dsize));
- SAFE_FREE(data.dptr);
+ if (wcache->tdb == NULL) {
+ DEBUG(10,("wcache_fetch_seqnum: tdb == NULL\n"));
return false;
}
- *seqnum = IVAL(data.dptr, 0);
- *last_seq_check = IVAL(data.dptr, 4);
- SAFE_FREE(data.dptr);
+ snprintf(keystr, sizeof(keystr), "SEQNUM/%s", domain_name);
- return true;
+ ret = tdb_parse_record(wcache->tdb, key, wcache_seqnum_parser,
+ &state);
+ return (ret == 0);
}
static NTSTATUS fetch_cache_seqnum( struct winbindd_domain *domain, time_t now )
{
- uint32 last_check, time_diff;
+ uint32_t last_check, time_diff;
if (!wcache_fetch_seqnum(domain->name, &domain->sequence_number,
&last_check)) {
if ( time_diff > lp_winbind_cache_time() ) {
DEBUG(10,("fetch_cache_seqnum: timeout [%s][%u @ %u]\n",
domain->name, domain->sequence_number,
- (uint32)domain->last_seq_check));
+ (uint32_t)domain->last_seq_check));
return NT_STATUS_UNSUCCESSFUL;
}
DEBUG(10,("fetch_cache_seqnum: success [%s][%u @ %u]\n",
domain->name, domain->sequence_number,
- (uint32)domain->last_seq_check));
+ (uint32_t)domain->last_seq_check));
return NT_STATUS_OK;
}
bool wcache_store_seqnum(const char *domain_name, uint32_t seqnum,
time_t last_seq_check)
{
- char *key_str;
+ size_t len = strlen(domain_name);
+ char keystr[len+8];
+ TDB_DATA key = { .dptr = (uint8_t *)keystr, .dsize = sizeof(keystr) };
uint8_t buf[8];
int ret;
return false;
}
- key_str = talloc_asprintf(talloc_tos(), "SEQNUM/%s", domain_name);
- if (key_str == NULL) {
- DEBUG(10, ("talloc_asprintf failed\n"));
- return false;
- }
+ snprintf(keystr, sizeof(keystr), "SEQNUM/%s", domain_name);
SIVAL(buf, 0, seqnum);
SIVAL(buf, 4, last_seq_check);
- ret = tdb_store_bystring(wcache->tdb, key_str,
- make_tdb_data(buf, sizeof(buf)), TDB_REPLACE);
- TALLOC_FREE(key_str);
+ ret = tdb_store(wcache->tdb, key, make_tdb_data(buf, sizeof(buf)),
+ TDB_REPLACE);
if (ret != 0) {
DEBUG(10, ("tdb_store_bystring failed: %s\n",
tdb_errorstr(wcache->tdb)));
- TALLOC_FREE(key_str);
return false;
}
/*
make sure we have at least len bytes available in a centry
*/
-static void centry_expand(struct cache_entry *centry, uint32 len)
+static void centry_expand(struct cache_entry *centry, uint32_t len)
{
if (centry->len - centry->ofs >= len)
return;
}
/*
- push a uint32 into a centry
+ push a uint32_t into a centry
*/
-static void centry_put_uint32(struct cache_entry *centry, uint32 v)
+static void centry_put_uint32(struct cache_entry *centry, uint32_t v)
{
centry_expand(centry, 4);
SIVAL(centry->data, centry->ofs, v);
}
/*
- push a uint16 into a centry
+ push a uint16_t into a centry
*/
-static void centry_put_uint16(struct cache_entry *centry, uint16 v)
+static void centry_put_uint16(struct cache_entry *centry, uint16_t v)
{
centry_expand(centry, 2);
SSVAL(centry->data, centry->ofs, v);
}
/*
- push a uint8 into a centry
+ push a uint8_t into a centry
*/
-static void centry_put_uint8(struct cache_entry *centry, uint8 v)
+static void centry_put_uint8(struct cache_entry *centry, uint8_t v)
{
centry_expand(centry, 1);
SCVAL(centry->data, centry->ofs, v);
/*
push a 16 byte hash into a centry - treat as 16 byte string.
*/
-static void centry_put_hash16(struct cache_entry *centry, const uint8 val[16])
+static void centry_put_hash16(struct cache_entry *centry, const uint8_t val[16])
{
centry_put_uint8(centry, 16);
centry_expand(centry, 16);
*/
static void centry_put_ntstatus(struct cache_entry *centry, NTSTATUS status)
{
- uint32 status_value = NT_STATUS_V(status);
+ uint32_t status_value = NT_STATUS_V(status);
centry_put_uint32(centry, status_value);
}
centry = SMB_XMALLOC_P(struct cache_entry);
centry->len = 8192; /* reasonable default */
- centry->data = SMB_XMALLOC_ARRAY(uint8, centry->len);
+ centry->data = SMB_XMALLOC_ARRAY(uint8_t, centry->len);
centry->ofs = 0;
centry->sequence_number = domain->sequence_number;
centry->timeout = lp_winbind_cache_time() + time(NULL);
struct winbind_cache *cache = get_cache(domain);
TDB_DATA data;
fstring key_str, tmp;
- uint32 rid;
+ uint32_t rid;
if (!cache->tdb) {
return NT_STATUS_INTERNAL_DB_ERROR;
NTSTATUS wcache_get_creds(struct winbindd_domain *domain,
TALLOC_CTX *mem_ctx,
const struct dom_sid *sid,
- const uint8 **cached_nt_pass,
- const uint8 **cached_salt)
+ const uint8_t **cached_nt_pass,
+ const uint8_t **cached_salt)
{
struct winbind_cache *cache = get_cache(domain);
struct cache_entry *centry = NULL;
NTSTATUS status;
- uint32 rid;
+ uint32_t rid;
fstring tmp;
if (!cache->tdb) {
sort this out. It can tell as we only return the cached_salt
if we are returning a salted cred. */
- *cached_nt_pass = (const uint8 *)centry_hash16(centry, mem_ctx);
+ *cached_nt_pass = (const uint8_t *)centry_hash16(centry, mem_ctx);
if (*cached_nt_pass == NULL) {
fstring sidstr;
/* We only have 17 bytes more data in the salted cred case. */
if (centry->len - centry->ofs == 17) {
- *cached_salt = (const uint8 *)centry_hash16(centry, mem_ctx);
+ *cached_salt = (const uint8_t *)centry_hash16(centry, mem_ctx);
} else {
*cached_salt = NULL;
}
NTSTATUS wcache_save_creds(struct winbindd_domain *domain,
const struct dom_sid *sid,
- const uint8 nt_pass[NT_HASH_LEN])
+ const uint8_t nt_pass[NT_HASH_LEN])
{
struct cache_entry *centry;
fstring sid_string;
- uint32 rid;
- uint8 cred_salt[NT_HASH_LEN];
- uint8 salted_hash[NT_HASH_LEN];
+ uint32_t rid;
+ uint8_t cred_salt[NT_HASH_LEN];
+ uint8_t salted_hash[NT_HASH_LEN];
if (is_null_sid(sid)) {
return NT_STATUS_INVALID_SID;
/* Query display info. This is the basic user list fn */
static NTSTATUS query_user_list(struct winbindd_domain *domain,
TALLOC_CTX *mem_ctx,
- uint32 *num_entries,
+ uint32_t *num_entries,
struct wbint_userinfo **info)
{
struct winbind_cache *cache = get_cache(domain);
/* list all domain groups */
static NTSTATUS enum_dom_groups(struct winbindd_domain *domain,
TALLOC_CTX *mem_ctx,
- uint32 *num_entries,
+ uint32_t *num_entries,
struct wb_acct_info **info)
{
struct winbind_cache *cache = get_cache(domain);
/* list all domain groups */
static NTSTATUS enum_local_groups(struct winbindd_domain *domain,
TALLOC_CTX *mem_ctx,
- uint32 *num_entries,
+ uint32_t *num_entries,
struct wb_acct_info **info)
{
struct winbind_cache *cache = get_cache(domain);
static NTSTATUS rids_to_names(struct winbindd_domain *domain,
TALLOC_CTX *mem_ctx,
const struct dom_sid *domain_sid,
- uint32 *rids,
+ uint32_t *rids,
size_t num_rids,
char **domain_name,
char ***names,
static NTSTATUS lookup_usergroups(struct winbindd_domain *domain,
TALLOC_CTX *mem_ctx,
const struct dom_sid *user_sid,
- uint32 *num_groups, struct dom_sid **user_gids)
+ uint32_t *num_groups, struct dom_sid **user_gids)
{
struct cache_entry *centry = NULL;
NTSTATUS status;
static NTSTATUS lookup_useraliases(struct winbindd_domain *domain,
TALLOC_CTX *mem_ctx,
- uint32 num_sids, const struct dom_sid *sids,
- uint32 *num_aliases, uint32 **alias_rids)
+ uint32_t num_sids, const struct dom_sid *sids,
+ uint32_t *num_aliases, uint32_t **alias_rids)
{
struct cache_entry *centry = NULL;
NTSTATUS status;
*sid_mem = talloc_array(mem_ctx, struct dom_sid, *num_names);
*names = talloc_array(mem_ctx, char *, *num_names);
- *name_types = talloc_array(mem_ctx, uint32, *num_names);
+ *name_types = talloc_array(mem_ctx, uint32_t, *num_names);
if ((*sid_mem == NULL) || (*names == NULL) || (*name_types == NULL)) {
TALLOC_FREE(*sid_mem);
TALLOC_CTX *mem_ctx,
const struct dom_sid *group_sid,
enum lsa_SidType type,
- uint32 *num_names,
+ uint32_t *num_names,
struct dom_sid **sid_mem, char ***names,
- uint32 **name_types)
+ uint32_t **name_types)
{
struct cache_entry *centry = NULL;
NTSTATUS status;
}
/* find the sequence number for a domain */
-static NTSTATUS sequence_number(struct winbindd_domain *domain, uint32 *seq)
+static NTSTATUS sequence_number(struct winbindd_domain *domain, uint32_t *seq)
{
refresh_sequence_number(domain, false);
fstring key_str, sid_string;
struct winbind_cache *cache;
- /* dont clear cached U/SID and UG/SID entries when we want to logon
+ /* don't clear cached U/SID and UG/SID entries when we want to logon
* offline - gd */
if (lp_winbind_offline_logon()) {
bool initialize_winbindd_cache(void)
{
bool cache_bad = true;
- uint32 vers;
+ uint32_t vers;
if (!init_wcache()) {
DEBUG(0,("initialize_winbindd_cache: init_wcache failed.\n"));
struct tdb_validation_status *state)
{
struct cache_entry *centry = create_centry_validate(keystr, dbuf, state);
- int32 num_entries, i;
+ int32_t num_entries, i;
if (!centry) {
return 1;
}
- num_entries = (int32)centry_uint32(centry);
+ num_entries = (int32_t)centry_uint32(centry);
for (i=0; i< num_entries; i++) {
struct dom_sid sid;
struct tdb_validation_status *state)
{
struct cache_entry *centry = create_centry_validate(keystr, dbuf, state);
- int32 num_entries, i;
+ int32_t num_entries, i;
if (!centry) {
return 1;
struct tdb_validation_status *state)
{
struct cache_entry *centry = create_centry_validate(keystr, dbuf, state);
- int32 num_groups, i;
+ int32_t num_groups, i;
if (!centry) {
return 1;
struct tdb_validation_status *state)
{
struct cache_entry *centry = create_centry_validate(keystr, dbuf, state);
- int32 num_aliases, i;
+ int32_t num_aliases, i;
if (!centry) {
return 1;
struct tdb_validation_status *state)
{
struct cache_entry *centry = create_centry_validate(keystr, dbuf, state);
- int32 num_names, i;
+ int32_t num_names, i;
if (!centry) {
return 1;
}
DEBUG(0,("cache_traverse_validate_fn: unknown cache entry\nkey :\n"));
- dump_data(0, (uint8 *)kbuf.dptr, kbuf.dsize);
+ dump_data(0, (uint8_t *)kbuf.dptr, kbuf.dsize);
DEBUG(0,("data :\n"));
- dump_data(0, (uint8 *)dbuf.dptr, dbuf.dsize);
+ dump_data(0, (uint8_t *)dbuf.dptr, dbuf.dsize);
v_state->unknown_key = true;
v_state->success = false;
return 1; /* terminate. */
struct winbindd_tdc_domain **domains )
{
fstring domain_name, dns_name, sid_string;
- uint32 type, attribs, flags;
+ uint32_t type, attribs, flags;
int num_domains;
int len = 0;
int i;
const char *homedir,
const char *shell,
const char *gecos,
- uint32 gid)
+ uint32_t gid)
{
struct cache_entry *centry;
fstring tmp;