diff options
author | Keyur Desai <Keyur.Desai@Sun.COM> | 2009-09-11 17:22:48 -0600 |
---|---|---|
committer | Keyur Desai <Keyur.Desai@Sun.COM> | 2009-09-11 17:22:48 -0600 |
commit | e3f2c991a8548408db0a2787bd8b43d5124821d3 (patch) | |
tree | 953b45b77a478c8ee85319e5e96ddb77f98dbd13 /usr/src/lib/libadutils/common | |
parent | c4ddbbe1ca066fd6662bdb8c477ad412b97c5590 (diff) | |
download | illumos-joyent-e3f2c991a8548408db0a2787bd8b43d5124821d3.tar.gz |
6861127 Want an RPC function to get the session key
6865745 Consolidate request handlers for query file information requests
6864354 mdb dumps core in an smb dcmd
6841851 [Sparc] Can not make a mapped drive from Windows to any share on CIFS Server
6840783 Support IDMU userid and groupid data for joined domain
6845717 idmapd's scf_value2string unnecessarily complex, incorrect
PSARC/2009/398 IDMU Support for idmap
6867994 Rework handling of set and query of file allocation size
6863385 MMC - Unable to use Event Viewer in Windows 2008 - "RPC server is unavailable"
6863390 MMC - Issues with the Services list in Windows 2008
6868501 Unable to map a CIFS share after bfu to cifs nightly build
6870248 Consolidate request handlers for set file information requests
6864074 idmap cannot map computer accounts
6874207 Incorrect access permission check when setting file size
6875658 Need locking around process-wide changes
6877595 eliminate smbd_fs_query()
PSARC/2009/375 ABE share property for NFS and SMB
6802736 SMB share support for Access Based Enumeration
6875228 Issue with file copy from a CIFS share to the same share using Windows.
--HG--
rename : usr/src/uts/common/fs/smbsrv/smb_trans2_query_file_info.c => usr/src/uts/common/fs/smbsrv/smb_query_fileinfo.c
rename : usr/src/uts/common/fs/smbsrv/smb_trans2_set_information.c => usr/src/uts/common/fs/smbsrv/smb_set_fileinfo.c
Diffstat (limited to 'usr/src/lib/libadutils/common')
-rw-r--r-- | usr/src/lib/libadutils/common/addisc.c | 5 | ||||
-rw-r--r-- | usr/src/lib/libadutils/common/adutils.c | 95 | ||||
-rw-r--r-- | usr/src/lib/libadutils/common/adutils_impl.h | 5 | ||||
-rw-r--r-- | usr/src/lib/libadutils/common/libadutils.h | 7 | ||||
-rw-r--r-- | usr/src/lib/libadutils/common/mapfile-vers | 4 |
5 files changed, 64 insertions, 52 deletions
diff --git a/usr/src/lib/libadutils/common/addisc.c b/usr/src/lib/libadutils/common/addisc.c index aeda77fbe2..f98461554d 100644 --- a/usr/src/lib/libadutils/common/addisc.c +++ b/usr/src/lib/libadutils/common/addisc.c @@ -708,12 +708,13 @@ srv_query(res_state state, const char *svc_name, const char *dname, return (NULL); } } else if (dname != NULL) { - len = res_nquerydomain(state, svc_name, dname, C_IN, T_SRV, - msg.buf, sizeof (msg.buf)); logger(LOG_DEBUG, "Querying DNS for SRV RRs named '%s' for '%s' ", svc_name, dname); + len = res_nquerydomain(state, svc_name, dname, C_IN, T_SRV, + msg.buf, sizeof (msg.buf)); + if (len < 0) { logger(LOG_DEBUG, "DNS query for '%s' for '%s' failed (%s)", diff --git a/usr/src/lib/libadutils/common/adutils.c b/usr/src/lib/libadutils/common/adutils.c index 006236789e..d18ccc3ff3 100644 --- a/usr/src/lib/libadutils/common/adutils.c +++ b/usr/src/lib/libadutils/common/adutils.c @@ -396,9 +396,41 @@ adutils_sid_ber2str(BerValue *bval) } +/* + * Extract an int from the Ber value + * Return B_TRUE if a valid integer was found, B_FALSE if not. + */ +boolean_t +adutils_bv_uint(BerValue *bval, unsigned int *result) +{ + char buf[40]; /* big enough for any int */ + unsigned int tmp; + char *p; + + *result = 0; /* for error cases */ + + if (bval == NULL || bval->bv_val == NULL) + return (B_FALSE); + if (bval->bv_len >= sizeof (buf)) + return (B_FALSE); + + (void) memcpy(buf, bval->bv_val, bval->bv_len); + buf[bval->bv_len] = '\0'; + + tmp = strtoul(buf, &p, 10); + + /* Junk after the number? */ + if (*p != '\0') + return (B_FALSE); + + *result = tmp; + + return (B_TRUE); +} + /* Return a NUL-terminated string from the Ber value */ char * -adutils_bv_name2str(BerValue *bval) +adutils_bv_str(BerValue *bval) { char *s; @@ -461,32 +493,38 @@ adutils_reap_idle_connections() adutils_rc -adutils_ad_alloc(adutils_ad_t **new_ad, const char *default_domain, +adutils_ad_alloc(adutils_ad_t **new_ad, const char *domain_name, adutils_ad_partition_t part) { adutils_ad_t *ad; *new_ad = NULL; - if ((default_domain == NULL || *default_domain == '\0') && - part != ADUTILS_AD_GLOBAL_CATALOG) - return (ADUTILS_ERR_DOMAIN); if ((ad = calloc(1, sizeof (*ad))) == NULL) return (ADUTILS_ERR_MEMORY); ad->ref = 1; ad->partition = part; - if (default_domain == NULL) - default_domain = ""; - if ((ad->dflt_w2k_dom = strdup(default_domain)) == NULL) + + /* domain_name is required iff we are talking directly to a DC */ + if (part == ADUTILS_AD_DATA) { + assert(domain_name != NULL); + assert(*domain_name != '\0'); + + ad->basedn = adutils_dns2dn(domain_name); + } else { + assert(domain_name == NULL); + ad->basedn = strdup(""); + } + if (ad->basedn == NULL) goto err; + if (pthread_mutex_init(&ad->lock, NULL) != 0) goto err; *new_ad = ad; return (ADUTILS_SUCCESS); err: - if (ad->dflt_w2k_dom != NULL) - free(ad->dflt_w2k_dom); + free(ad->basedn); free(ad); return (ADUTILS_ERR_MEMORY); } @@ -531,7 +569,7 @@ adutils_ad_free(adutils_ad_t **ad) if ((*ad)->known_domains) free((*ad)->known_domains); - free((*ad)->dflt_w2k_dom); + free((*ad)->basedn); free(*ad); *ad = NULL; @@ -587,9 +625,10 @@ open_conn(adutils_host_t *adh, int timeoutsecs) logger(LOG_INFO, "ldap_sasl_interactive_bind_s() to server " "%s port %d failed. (%s)", adh->host, adh->port, ldap_err2string(rc)); + goto out; } - logger(LOG_DEBUG, "Using global catalog server %s:%d", + logger(LOG_DEBUG, "Using server %s:%d", adh->host, adh->port); out: @@ -922,26 +961,6 @@ adutils_lookup_batch_start(adutils_ad_t *ad, int nqueries, if (new_state == NULL) return (ADUTILS_ERR_MEMORY); - /* - * Save default domain from the ad object so that we don't - * have to access the 'ad' object later. - */ - new_state->default_domain = strdup(adh->owner->dflt_w2k_dom); - if (new_state->default_domain == NULL) { - free(new_state); - return (ADUTILS_ERR_MEMORY); - } - - if (ad->partition == ADUTILS_AD_DATA) - new_state->basedn = adutils_dns2dn(new_state->default_domain); - else - new_state->basedn = strdup(""); - if (new_state->basedn == NULL) { - free(new_state->default_domain); - free(new_state); - return (ADUTILS_ERR_MEMORY); - } - new_state->ref_cnt = 1; new_state->qadh = adh; new_state->qsize = nqueries; @@ -1485,8 +1504,6 @@ adutils_lookup_batch_release(adutils_query_state_t **state) adutils_freeresult((*state)->queries[i].result); } } - free((*state)->default_domain); - free((*state)->basedn); free(*state); *state = NULL; } @@ -1545,12 +1562,6 @@ adutils_lookup_batch_end(adutils_query_state_t **state) return (ad_rc); } -const char * -adutils_lookup_batch_getdefdomain(adutils_query_state_t *state) -{ - return (state->default_domain); -} - /* * Send one prepared search, queue up msgid, process what results are * available @@ -1605,7 +1616,9 @@ adutils_lookup_batch_add(adutils_query_state_t *state, if (!state->qadh->dead) { state->qadh->idletime = time(NULL); - lrc = ldap_search_ext(state->qadh->ld, state->basedn, + + lrc = ldap_search_ext(state->qadh->ld, + state->qadh->owner->basedn, LDAP_SCOPE_SUBTREE, filter, (char **)attrs, 0, NULL, NULL, NULL, -1, &q->msgid); diff --git a/usr/src/lib/libadutils/common/adutils_impl.h b/usr/src/lib/libadutils/common/adutils_impl.h index 563fa892ec..9660d585ec 100644 --- a/usr/src/lib/libadutils/common/adutils_impl.h +++ b/usr/src/lib/libadutils/common/adutils_impl.h @@ -60,13 +60,14 @@ struct known_domain { /* A set of DSs for a given AD partition */ struct adutils_ad { - char *dflt_w2k_dom; /* used to qualify bare names */ int num_known_domains; struct known_domain *known_domains; pthread_mutex_t lock; uint32_t ref; struct adutils_host *last_adh; adutils_ad_partition_t partition; /* Data or global catalog? */ + /* If this is a reference to DC, this is the base DN for that DC */ + char *basedn; }; typedef struct adutils_attr { @@ -141,8 +142,6 @@ struct adutils_query_state { uint64_t qadh_gen; /* same as qadh->generation */ adutils_ldap_res_search_cb ldap_res_search_cb; void *ldap_res_search_argp; - char *default_domain; - char *basedn; adutils_q_t queries[1]; /* array of query results */ }; diff --git a/usr/src/lib/libadutils/common/libadutils.h b/usr/src/lib/libadutils/common/libadutils.h index 39adf1a677..a184769cd0 100644 --- a/usr/src/lib/libadutils/common/libadutils.h +++ b/usr/src/lib/libadutils/common/libadutils.h @@ -133,7 +133,7 @@ typedef void (*adutils_logger)(int, const char *, ...); extern adutils_rc adutils_ad_alloc(adutils_ad_t **new_ad, - const char *default_domain, + const char *domain_name, adutils_ad_partition_t part); extern void adutils_ad_free(adutils_ad_t **ad); extern adutils_rc adutils_add_ds(adutils_ad_t *ad, @@ -153,7 +153,8 @@ extern const adutils_entry_t *adutils_getfirstentry( extern int adutils_txtsid2hexbinsid(const char *txt, const uint32_t *rid, char *hexbinsid, int hexbinsidlen); -extern char *adutils_bv_name2str(BerValue *bval); +extern char *adutils_bv_str(BerValue *bval); +extern boolean_t adutils_bv_uint(BerValue *bval, unsigned int *result); extern char *adutils_bv_objsid2sidstr(BerValue *bval, uint32_t *rid); extern void adutils_reap_idle_connections(void); @@ -171,8 +172,6 @@ extern adutils_rc adutils_lookup_batch_end( adutils_query_state_t **state); extern void adutils_lookup_batch_release( adutils_query_state_t **state); -extern const char *adutils_lookup_batch_getdefdomain( - adutils_query_state_t *state); extern int adutils_lookup_check_domain( adutils_query_state_t *state, const char *domain); diff --git a/usr/src/lib/libadutils/common/mapfile-vers b/usr/src/lib/libadutils/common/mapfile-vers index ffde67ee30..d7e1687ef2 100644 --- a/usr/src/lib/libadutils/common/mapfile-vers +++ b/usr/src/lib/libadutils/common/mapfile-vers @@ -40,8 +40,9 @@ SUNWprivate { global: adutils_txtsid2hexbinsid; - adutils_bv_name2str; + adutils_bv_uint; adutils_bv_objsid2sidstr; + adutils_bv_str; adutils_getattr; adutils_getfirstentry; adutils_freeresult; @@ -50,7 +51,6 @@ SUNWprivate { adutils_lookup_batch_add; adutils_lookup_batch_end; adutils_lookup_batch_release; - adutils_lookup_batch_getdefdomain; adutils_lookup_check_domain; adutils_lookup_check_sid_prefix; adutils_dn2dns; |