diff options
Diffstat (limited to 'source3')
-rw-r--r-- | source3/lib/util_sid.c | 17 | ||||
-rw-r--r-- | source3/lib/util_str.c | 23 | ||||
-rw-r--r-- | source3/libads/ldap.c | 39 | ||||
-rw-r--r-- | source3/nsswitch/winbindd_ads.c | 8 | ||||
-rw-r--r-- | source3/nsswitch/winbindd_cache.c | 3 | ||||
-rw-r--r-- | source3/nsswitch/winbindd_proto.h | 49 |
6 files changed, 48 insertions, 91 deletions
diff --git a/source3/lib/util_sid.c b/source3/lib/util_sid.c index 923037f479..72365f5e46 100644 --- a/source3/lib/util_sid.c +++ b/source3/lib/util_sid.c @@ -663,3 +663,20 @@ BOOL non_mappable_sid(DOM_SID *sid) return False; } + +/* + return the binary string representation of a DOM_SID + caller must free +*/ +char *sid_binstring(DOM_SID *sid) +{ + char *buf, *s; + int len = sid_size(sid); + buf = malloc(len); + if (!buf) return NULL; + sid_linearize(buf, len, sid); + s = binary_string(buf, len); + free(buf); + return s; +} + diff --git a/source3/lib/util_str.c b/source3/lib/util_str.c index d7e6fa0781..2205f5cf0d 100644 --- a/source3/lib/util_str.c +++ b/source3/lib/util_str.c @@ -914,3 +914,26 @@ void strupper_m(char *s) * as source string even in multibyte encoding. (VIV) */ unix_strupper(s,strlen(s)+1,s,strlen(s)+1); } + +/* + return a RFC2254 binary string representation of a buffer + used in LDAP filters + caller must free +*/ +char *binary_string(char *buf, int len) +{ + char *s; + int i, j; + const char *hex = "0123456789ABCDEF"; + s = malloc(len * 3 + 1); + if (!s) return NULL; + for (j=i=0;i<len;i++) { + s[j] = '\\'; + s[j+1] = hex[((unsigned char)buf[i]) >> 4]; + s[j+2] = hex[((unsigned char)buf[i]) & 0xF]; + j += 3; + } + s[j] = 0; + return s; +} + diff --git a/source3/libads/ldap.c b/source3/libads/ldap.c index c81f2474ae..2fe97ebb1a 100644 --- a/source3/libads/ldap.c +++ b/source3/libads/ldap.c @@ -386,45 +386,6 @@ NTSTATUS ads_set_machine_password(ADS_STRUCT *ads, return ret; } - -/* - return a RFC2254 binary string representation of a buffer - used in filters - caller must free -*/ -char *ads_binary_string(char *buf, int len) -{ - char *s; - int i, j; - const char *hex = "0123456789ABCDEF"; - s = malloc(len * 3 + 1); - if (!s) return NULL; - for (j=i=0;i<len;i++) { - s[j] = '\\'; - s[j+1] = hex[((unsigned char)buf[i]) >> 4]; - s[j+2] = hex[((unsigned char)buf[i]) & 0xF]; - j += 3; - } - s[j] = 0; - return s; -} - -/* - return the binary string representation of a DOM_SID - caller must free -*/ -char *ads_sid_binstring(DOM_SID *sid) -{ - char *buf, *s; - int len = sid_size(sid); - buf = malloc(len); - if (!buf) return NULL; - sid_linearize(buf, len, sid); - s = ads_binary_string(buf, len); - free(buf); - return s; -} - /* pull the first entry from a ADS result */ diff --git a/source3/nsswitch/winbindd_ads.c b/source3/nsswitch/winbindd_ads.c index cabb482f7d..e009f9a9ab 100644 --- a/source3/nsswitch/winbindd_ads.c +++ b/source3/nsswitch/winbindd_ads.c @@ -400,7 +400,7 @@ static NTSTATUS sid_to_name(struct winbindd_domain *domain, ads = ads_cached_connection(domain); if (!ads) goto done; - sidstr = ads_sid_binstring(sid); + sidstr = sid_binstring(sid); asprintf(&exp, "(objectSid=%s)", sidstr); rc = ads_search_retry(ads, &msg, exp, attrs); free(exp); @@ -452,7 +452,7 @@ static NTSTATUS query_user(struct winbindd_domain *domain, ads = ads_cached_connection(domain); if (!ads) goto done; - sidstr = ads_sid_binstring(&sid); + sidstr = sid_binstring(&sid); asprintf(&exp, "(objectSid=%s)", sidstr); rc = ads_search_retry(ads, &msg, exp, attrs); free(exp); @@ -523,7 +523,7 @@ static NTSTATUS lookup_usergroups(struct winbindd_domain *domain, ads = ads_cached_connection(domain); if (!ads) goto done; - sidstr = ads_sid_binstring(&sid); + sidstr = sid_binstring(&sid); asprintf(&exp, "(objectSid=%s)", sidstr); rc = ads_search_retry(ads, &msg, exp, attrs); free(exp); @@ -589,7 +589,7 @@ static NTSTATUS lookup_groupmem(struct winbindd_domain *domain, if (!ads) goto done; sid_from_rid(domain, group_rid, &group_sid); - sidstr = ads_sid_binstring(&group_sid); + sidstr = sid_binstring(&group_sid); /* search for all users who have that group sid as primary group or as member */ asprintf(&exp, "(&(objectclass=user)(|(primaryGroupID=%d)(memberOf=%s)))", group_rid, sidstr); diff --git a/source3/nsswitch/winbindd_cache.c b/source3/nsswitch/winbindd_cache.c index e78410e3a5..912ac162b5 100644 --- a/source3/nsswitch/winbindd_cache.c +++ b/source3/nsswitch/winbindd_cache.c @@ -36,6 +36,7 @@ struct cache_entry { static struct winbind_cache *wcache; +/* flush the cache */ void wcache_flush_cache(void) { extern BOOL opt_nocache; @@ -500,7 +501,7 @@ static NTSTATUS sid_to_name(struct winbindd_domain *domain, if (!cache->tdb) goto do_query; - sidstr = ads_sid_binstring(sid); + sidstr = sid_binstring(sid); centry = wcache_fetch(cache, domain, "SIDTONAME/%s/%s", domain->name, sidstr); if (!centry) goto do_query; diff --git a/source3/nsswitch/winbindd_proto.h b/source3/nsswitch/winbindd_proto.h index fbb5c731d1..4abc10c63b 100644 --- a/source3/nsswitch/winbindd_proto.h +++ b/source3/nsswitch/winbindd_proto.h @@ -3,10 +3,6 @@ /* This file is automatically generated with "make proto". DO NOT EDIT */ -/* The following definitions come from nsswitch/wcache.c */ - -struct cache_entry *centry_start(struct winbindd_domain *domain, NTSTATUS status); - /* The following definitions come from nsswitch/winbindd.c */ int main(int argc, char **argv); @@ -25,49 +21,8 @@ int ads_search_retry_dn(ADS_STRUCT *ads, void **res, /* The following definitions come from nsswitch/winbindd_cache.c */ -void winbindd_cache_init(void); -void winbindd_store_user_cache(struct winbindd_domain *domain, - struct getpwent_user *sam_entries, - int num_sam_entries); -void winbindd_store_group_cache(struct winbindd_domain *domain, - struct acct_info *sam_entries, - int num_sam_entries); -void winbindd_store_name_cache_entry(struct winbindd_domain *domain, - char *sid, struct winbindd_name *name); -void winbindd_store_sid_cache_entry(struct winbindd_domain *domain, - const char *name, struct winbindd_sid *sid); -void winbindd_store_user_cache_entry(struct winbindd_domain *domain, - char *user_name, struct winbindd_pw *pw); -void winbindd_store_uid_cache_entry(struct winbindd_domain *domain, uid_t uid, - struct winbindd_pw *pw); -void winbindd_store_group_cache_entry(struct winbindd_domain *domain, - char *group_name, struct winbindd_gr *gr, - void *extra_data, int extra_data_len); -void winbindd_store_gid_cache_entry(struct winbindd_domain *domain, gid_t gid, - struct winbindd_gr *gr, void *extra_data, - int extra_data_len); -BOOL winbindd_fetch_user_cache(struct winbindd_domain *domain, - struct getpwent_user **sam_entries, - int *num_entries); -BOOL winbindd_fetch_group_cache(struct winbindd_domain *domain, - struct acct_info **sam_entries, - int *num_entries); -BOOL winbindd_fetch_sid_cache_entry(struct winbindd_domain *domain, - const char *name, struct winbindd_sid *sid); -BOOL winbindd_fetch_name_cache_entry(struct winbindd_domain *domain, - char *sid, struct winbindd_name *name); -BOOL winbindd_fetch_user_cache_entry(struct winbindd_domain *domain, - char *user, struct winbindd_pw *pw); -BOOL winbindd_fetch_uid_cache_entry(struct winbindd_domain *domain, uid_t uid, - struct winbindd_pw *pw); -BOOL winbindd_fetch_group_cache_entry(struct winbindd_domain *domain, - char *group, struct winbindd_gr *gr, - void **extra_data, int *extra_data_len); -BOOL winbindd_fetch_gid_cache_entry(struct winbindd_domain *domain, gid_t gid, - struct winbindd_gr *gr, - void **extra_data, int *extra_data_len); -void winbindd_flush_cache(void); -void winbindd_cache_status(void); +void wcache_flush_cache(void); +struct cache_entry *centry_start(struct winbindd_domain *domain, NTSTATUS status); /* The following definitions come from nsswitch/winbindd_cm.c */ |