Ignore:
Timestamp:
May 13, 2014, 11:39:04 AM (11 years ago)
Author:
Silvan Scherrer
Message:

Samba Server: update trunk to 3.6.23

Location:
trunk/server
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/server

  • trunk/server/source3/utils/net_dns.c

    r745 r862  
    2323#include "utils/net.h"
    2424#include "../lib/addns/dns.h"
     25#include "utils/net_dns.h"
    2526
    2627#if defined(WITH_DNS_UPDATES)
    27 /*
    28  * Silly prototype to get rid of a warning
    29  */
     28
     29/*********************************************************************
     30*********************************************************************/
    3031
    3132DNS_ERROR DoDNSUpdate(char *pszServerName,
    3233                      const char *pszDomainName, const char *pszHostName,
    33                       const struct sockaddr_storage *sslist,
    34                       size_t num_addrs );
    35 
    36 /*********************************************************************
    37 *********************************************************************/
    38 
    39 DNS_ERROR DoDNSUpdate(char *pszServerName,
    40                       const char *pszDomainName, const char *pszHostName,
    41                       const struct sockaddr_storage *sslist, size_t num_addrs )
     34                      const struct sockaddr_storage *sslist, size_t num_addrs,
     35                      uint32_t flags)
    4236{
    4337        DNS_ERROR err;
     
    4741        struct dns_update_request *req, *resp;
    4842
     43        DEBUG(10,("DoDNSUpdate called with flags: 0x%08x\n", flags));
     44
     45        if (!(flags & DNS_UPDATE_SIGNED) &&
     46            !(flags & DNS_UPDATE_UNSIGNED) &&
     47            !(flags & DNS_UPDATE_PROBE)) {
     48                return ERROR_DNS_INVALID_PARAMETER;
     49        }
     50
    4951        if ( (num_addrs <= 0) || !sslist ) {
    5052                return ERROR_DNS_INVALID_PARAMETER;
     
    6062        }
    6163
    62         /*
    63          * Probe if everything's fine
    64          */
    65 
    66         err = dns_create_probe(mem_ctx, pszDomainName, pszHostName,
    67                                num_addrs, sslist, &req);
    68         if (!ERR_DNS_IS_OK(err)) goto error;
    69 
    70         err = dns_update_transaction(mem_ctx, conn, req, &resp);
    71         if (!ERR_DNS_IS_OK(err)) goto error;
    72 
    73         if (dns_response_code(resp->flags) == DNS_NO_ERROR) {
    74                 TALLOC_FREE(mem_ctx);
    75                 return ERROR_DNS_SUCCESS;
    76         }
    77 
    78         /*
    79          * First try without signing
    80          */
    81 
    82         err = dns_create_update_request(mem_ctx, pszDomainName, pszHostName,
    83                                         sslist, num_addrs, &req);
    84         if (!ERR_DNS_IS_OK(err)) goto error;
    85 
    86         err = dns_update_transaction(mem_ctx, conn, req, &resp);
    87         if (!ERR_DNS_IS_OK(err)) goto error;
    88 
    89         if (dns_response_code(resp->flags) == DNS_NO_ERROR) {
    90                 TALLOC_FREE(mem_ctx);
    91                 return ERROR_DNS_SUCCESS;
     64        if (flags & DNS_UPDATE_PROBE) {
     65
     66                /*
     67                 * Probe if everything's fine
     68                 */
     69
     70                err = dns_create_probe(mem_ctx, pszDomainName, pszHostName,
     71                                       num_addrs, sslist, &req);
     72                if (!ERR_DNS_IS_OK(err)) goto error;
     73
     74                err = dns_update_transaction(mem_ctx, conn, req, &resp);
     75                if (!ERR_DNS_IS_OK(err)) goto error;
     76
     77                if (!ERR_DNS_IS_OK(err)) {
     78                        DEBUG(3,("DoDNSUpdate: failed to probe DNS\n"));
     79                }
     80
     81                if ((dns_response_code(resp->flags) == DNS_NO_ERROR) &&
     82                    (flags & DNS_UPDATE_PROBE_SUFFICIENT)) {
     83                        TALLOC_FREE(mem_ctx);
     84                        return ERROR_DNS_SUCCESS;
     85                }
     86        }
     87
     88        if (flags & DNS_UPDATE_UNSIGNED) {
     89
     90                /*
     91                 * First try without signing
     92                 */
     93
     94                err = dns_create_update_request(mem_ctx, pszDomainName, pszHostName,
     95                                                sslist, num_addrs, &req);
     96                if (!ERR_DNS_IS_OK(err)) goto error;
     97
     98                err = dns_update_transaction(mem_ctx, conn, req, &resp);
     99                if (!ERR_DNS_IS_OK(err)) goto error;
     100
     101                if (!ERR_DNS_IS_OK(err)) {
     102                        DEBUG(3,("DoDNSUpdate: unsigned update failed\n"));
     103                }
     104
     105                if ((dns_response_code(resp->flags) == DNS_NO_ERROR) &&
     106                    (flags & DNS_UPDATE_UNSIGNED_SUFFICIENT)) {
     107                        TALLOC_FREE(mem_ctx);
     108                        return ERROR_DNS_SUCCESS;
     109                }
    92110        }
    93111
     
    95113         * Okay, we have to try with signing
    96114         */
    97         {
     115        if (flags & DNS_UPDATE_SIGNED) {
    98116                gss_ctx_id_t gss_context;
    99117                char *keyname;
     118
     119                err = dns_create_update_request(mem_ctx, pszDomainName, pszHostName,
     120                                                sslist, num_addrs, &req);
     121                if (!ERR_DNS_IS_OK(err)) goto error;
    100122
    101123                if (!(keyname = dns_generate_keyname( mem_ctx ))) {
     
    129151                err = (dns_response_code(resp->flags) == DNS_NO_ERROR) ?
    130152                        ERROR_DNS_SUCCESS : ERROR_DNS_UPDATE_FAILED;
     153
     154                if (!ERR_DNS_IS_OK(err)) {
     155                        DEBUG(3,("DoDNSUpdate: signed update failed\n"));
     156                }
    131157        }
    132158
     
    177203        return count;
    178204}
    179 
    180 /*
    181  * Silly prototype to get rid of a warning
    182  */
    183 
    184 DNS_ERROR do_gethostbyname(const char *server, const char *host);
    185205
    186206DNS_ERROR do_gethostbyname(const char *server, const char *host)
Note: See TracChangeset for help on using the changeset viewer.