diff options
author | joyce mcintosh <Joyce.McIntosh@Sun.COM> | 2010-08-11 16:48:54 -0700 |
---|---|---|
committer | joyce mcintosh <Joyce.McIntosh@Sun.COM> | 2010-08-11 16:48:54 -0700 |
commit | fd9ee8b58485b20072eeef1310a88ff348d5e7fa (patch) | |
tree | 74e8f3fc5f5409cdc6be3dae5631f8d0c672260a /usr/src/lib/smbsrv/libsmbns/common/smbns_dyndns.c | |
parent | e2c5185af3c50d9510e5df68aa37abdc6c0d3aac (diff) | |
download | illumos-gate-fd9ee8b58485b20072eeef1310a88ff348d5e7fa.tar.gz |
6972305 Preferred DC not selected after setting pdc via sharectl
6971047 smbd hang during FVT regression test
6711195 Sparc:Get error "Windows Explorer has stopped working" once click on Details fr Properties on Vista
PSARC/2009/464 Offline attribute
6972515 Offline attribute - PSARC 2009/464
PSARC/2010/037 Windows Sparse Attribute
6972519 Windows Sparse Attribute - PSARC 2010/037
6719444 [CLI] - idmap help's output is not consistent with man pages's
6975449 idmap test suite needs idmap_cache_get_data() from libidmap
6974351 OpenSSL still taking smbd down
--HG--
rename : usr/src/lib/libidmap/common/idmap_priv.h => usr/src/cmd/idmap/idmap/namemaps.h
Diffstat (limited to 'usr/src/lib/smbsrv/libsmbns/common/smbns_dyndns.c')
-rw-r--r-- | usr/src/lib/smbsrv/libsmbns/common/smbns_dyndns.c | 55 |
1 files changed, 20 insertions, 35 deletions
diff --git a/usr/src/lib/smbsrv/libsmbns/common/smbns_dyndns.c b/usr/src/lib/smbsrv/libsmbns/common/smbns_dyndns.c index 24e1d175ac..26aff77bb6 100644 --- a/usr/src/lib/smbsrv/libsmbns/common/smbns_dyndns.c +++ b/usr/src/lib/smbsrv/libsmbns/common/smbns_dyndns.c @@ -104,7 +104,6 @@ static dyndns_queue_t dyndns_queue; static void dyndns_queue_request(int, const char *); static void dyndns_queue_flush(list_t *); -static void *dyndns_publisher(void *); static void dyndns_process(list_t *); static int dyndns_update_core(char *); static int dyndns_clear_rev_zone(char *); @@ -112,20 +111,14 @@ static void dyndns_msgid_init(void); static int dyndns_get_msgid(void); static void dyndns_syslog(int, int, const char *); -int +void dyndns_start(void) { - pthread_t publisher; - pthread_attr_t tattr; - int rc; - - if (!smb_config_getbool(SMB_CI_DYNDNS_ENABLE)) - return (0); - (void) mutex_lock(&dyndns_queue.ddq_mtx); + if (dyndns_queue.ddq_state != DYNDNS_STATE_INIT) { (void) mutex_unlock(&dyndns_queue.ddq_mtx); - return (0); + return; } dyndns_msgid_init(); @@ -133,13 +126,8 @@ dyndns_start(void) list_create(&dyndns_queue.ddq_list, sizeof (dyndns_qentry_t), offsetof(dyndns_qentry_t, dqe_lnd)); dyndns_queue.ddq_state = DYNDNS_STATE_READY; - (void) mutex_unlock(&dyndns_queue.ddq_mtx); - (void) pthread_attr_init(&tattr); - (void) pthread_attr_setdetachstate(&tattr, PTHREAD_CREATE_DETACHED); - rc = pthread_create(&publisher, &tattr, dyndns_publisher, 0); - (void) pthread_attr_destroy(&tattr); - return (rc); + (void) mutex_unlock(&dyndns_queue.ddq_mtx); } void @@ -194,6 +182,9 @@ dyndns_update_zones(void) /* * Add a request to the queue. + * + * To comply with RFC 4120 section 6.2.1, entry->dqe_fqdn is converted + * to lower case. */ static void dyndns_queue_request(int op, const char *fqdn) @@ -203,33 +194,27 @@ dyndns_queue_request(int op, const char *fqdn) if (!smb_config_getbool(SMB_CI_DYNDNS_ENABLE)) return; + if ((entry = malloc(sizeof (dyndns_qentry_t))) == NULL) + return; + + bzero(entry, sizeof (dyndns_qentry_t)); + entry->dqe_op = op; + (void) strlcpy(entry->dqe_fqdn, fqdn, MAXNAMELEN); + (void) smb_strlwr(entry->dqe_fqdn); + (void) mutex_lock(&dyndns_queue.ddq_mtx); switch (dyndns_queue.ddq_state) { case DYNDNS_STATE_READY: case DYNDNS_STATE_PUBLISHING: + list_insert_tail(&dyndns_queue.ddq_list, entry); + (void) cond_signal(&dyndns_queue.ddq_cv); break; default: - (void) mutex_unlock(&dyndns_queue.ddq_mtx); - return; - } - - if ((entry = malloc(sizeof (dyndns_qentry_t))) == NULL) { - (void) mutex_unlock(&dyndns_queue.ddq_mtx); - return; + free(entry); + break; } - bzero(entry, sizeof (dyndns_qentry_t)); - entry->dqe_op = op; - (void) strlcpy(entry->dqe_fqdn, fqdn, MAXNAMELEN); - /* - * To comply with RFC 4120 section 6.2.1, entry->dqe_fqdn is converted - * to lower case. - */ - (void) smb_strlwr(entry->dqe_fqdn); - - list_insert_tail(&dyndns_queue.ddq_list, entry); - (void) cond_signal(&dyndns_queue.ddq_cv); (void) mutex_unlock(&dyndns_queue.ddq_mtx); } @@ -255,7 +240,7 @@ dyndns_queue_flush(list_t *lst) * to retry. */ /*ARGSUSED*/ -static void * +void * dyndns_publisher(void *arg) { dyndns_qentry_t *entry; |