Ignore:
Timestamp:
Nov 27, 2012, 4:43:17 PM (13 years ago)
Author:
Silvan Scherrer
Message:

Samba Server: updated trunk to 3.6.0

Location:
trunk/server
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/server

  • trunk/server/source3/libads/dns.c

    r414 r745  
    2020
    2121#include "includes.h"
     22#include "libads/dns.h"
     23#include "../librpc/ndr/libndr.h"
    2224
    2325/* AIX resolv.h uses 'class' in struct ns_rr */
     
    297299        static time_t last_dns_check = 0;
    298300        static NTSTATUS last_dns_status = NT_STATUS_OK;
    299         time_t now = time(NULL);
     301        time_t now = time_mono(NULL);
    300302
    301303        /* Try to prevent bursts of DNS lookups if the server is down */
     
    332334                                        "talloc() failed!\n"));
    333335                                last_dns_status = NT_STATUS_NO_MEMORY;
    334                                 last_dns_check = time(NULL);
     336                                last_dns_check = time_mono(NULL);
    335337                                return last_dns_status;
    336338                        }
     
    351353                                last_dns_status = NT_STATUS_CONNECTION_REFUSED;
    352354                        }
    353                         last_dns_check = time(NULL);
     355                        last_dns_check = time_mono(NULL);
    354356                        return last_dns_status;
    355357                }
     
    365367                                TALLOC_FREE( buffer );
    366368                                last_dns_status = NT_STATUS_BUFFER_TOO_SMALL;
    367                                 last_dns_check = time(NULL);
     369                                last_dns_check = time_mono(NULL);
    368370                                return last_dns_status;
    369371                        }
     
    378380        *resp_length = resp_len;
    379381
    380         last_dns_check = time(NULL);
     382        last_dns_check = time_mono(NULL);
    381383        last_dns_status = NT_STATUS_OK;
    382384        return last_dns_status;
     
    564566        }
    565567
    566         qsort( dcs, idx, sizeof(struct dns_rr_srv), QSORT_CAST dnssrvcmp );
     568        TYPESAFE_QSORT(dcs, idx, dnssrvcmp );
    567569
    568570        *dclist = dcs;
     
    727729}
    728730
    729 /****************************************************************************
    730  Store and fetch the AD client sitename.
    731 ****************************************************************************/
    732 
    733 #define SITENAME_KEY    "AD_SITENAME/DOMAIN/%s"
    734 
    735 static char *sitename_key(const char *realm)
    736 {
    737         char *keystr;
    738 
    739         if (asprintf_strupper_m(&keystr, SITENAME_KEY, realm) == -1) {
    740                 return NULL;
    741         }
    742 
    743         return keystr;
    744 }
    745 
    746 
    747 /****************************************************************************
    748  Store the AD client sitename.
    749  We store indefinately as every new CLDAP query will re-write this.
    750 ****************************************************************************/
    751 
    752 bool sitename_store(const char *realm, const char *sitename)
    753 {
    754         time_t expire;
    755         bool ret = False;
    756         char *key;
    757 
    758         if (!realm || (strlen(realm) == 0)) {
    759                 DEBUG(0,("sitename_store: no realm\n"));
    760                 return False;
    761         }
    762 
    763         key = sitename_key(realm);
    764 
    765         if (!sitename || (sitename && !*sitename)) {
    766                 DEBUG(5,("sitename_store: deleting empty sitename!\n"));
    767                 ret = gencache_del(key);
    768                 SAFE_FREE(key);
    769                 return ret;
    770         }
    771 
    772         expire = get_time_t_max(); /* Store indefinately. */
    773 
    774         DEBUG(10,("sitename_store: realm = [%s], sitename = [%s], expire = [%u]\n",
    775                 realm, sitename, (unsigned int)expire ));
    776 
    777         ret = gencache_set( key, sitename, expire );
    778         SAFE_FREE(key);
    779         return ret;
    780 }
    781 
    782 /****************************************************************************
    783  Fetch the AD client sitename.
    784  Caller must free.
    785 ****************************************************************************/
    786 
    787 char *sitename_fetch(const char *realm)
    788 {
    789         char *sitename = NULL;
    790         time_t timeout;
    791         bool ret = False;
    792         const char *query_realm;
    793         char *key;
    794 
    795         if (!realm || (strlen(realm) == 0)) {
    796                 query_realm = lp_realm();
    797         } else {
    798                 query_realm = realm;
    799         }
    800 
    801         key = sitename_key(query_realm);
    802 
    803         ret = gencache_get( key, &sitename, &timeout );
    804         SAFE_FREE(key);
    805         if ( !ret ) {
    806                 DEBUG(5,("sitename_fetch: No stored sitename for %s\n",
    807                         query_realm));
    808         } else {
    809                 DEBUG(5,("sitename_fetch: Returning sitename for %s: \"%s\"\n",
    810                         query_realm, sitename ));
    811         }
    812         return sitename;
    813 }
    814 
    815 /****************************************************************************
    816  Did the sitename change ?
    817 ****************************************************************************/
    818 
    819 bool stored_sitename_changed(const char *realm, const char *sitename)
    820 {
    821         bool ret = False;
    822 
    823         char *new_sitename;
    824 
    825         if (!realm || (strlen(realm) == 0)) {
    826                 DEBUG(0,("stored_sitename_changed: no realm\n"));
    827                 return False;
    828         }
    829 
    830         new_sitename = sitename_fetch(realm);
    831 
    832         if (sitename && new_sitename && !strequal(sitename, new_sitename)) {
    833                 ret = True;
    834         } else if ((sitename && !new_sitename) ||
    835                         (!sitename && new_sitename)) {
    836                 ret = True;
    837         }
    838         SAFE_FREE(new_sitename);
    839         return ret;
    840 }
    841 
    842731/********************************************************************
    843732 Query with optional sitename.
Note: See TracChangeset for help on using the changeset viewer.