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/source4/rpc_server/spoolss/dcesrv_spoolss.c

    r429 r745  
    2525#include "librpc/gen_ndr/ndr_spoolss.h"
    2626#include "ntptr/ntptr.h"
    27 #include "lib/socket/socket.h"
     27#include "lib/tsocket/tsocket.h"
    2828#include "librpc/gen_ndr/ndr_spoolss_c.h"
    2929#include "auth/credentials/credentials.h"
     
    3434};
    3535
    36 #define SPOOLSS_BUFFER_UNION(fn,ic,info,level) \
    37         ((info)?ndr_size_##fn(info, level, ic, 0):0)
    38 
    39 #define SPOOLSS_BUFFER_UNION_ARRAY(fn,ic,info,level,count) \
    40         ((info)?ndr_size_##fn##_info(dce_call, ic, level, count, info):0)
     36#define SPOOLSS_BUFFER_UNION(fn,info,level) \
     37        ((info)?ndr_size_##fn(info, level, 0):0)
     38
     39#define SPOOLSS_BUFFER_UNION_ARRAY(fn,info,level,count) \
     40        ((info)?ndr_size_##fn##_info(dce_call, level, count, info):0)
    4141
    4242#define SPOOLSS_BUFFER_OK(val_true,val_false) ((r->in.offered >= *r->out.needed)?val_true:val_false)
     
    149149{
    150150        bool ret;
    151         struct socket_address *myaddr;
     151        const struct tsocket_address *local_address;
     152        char *myaddr;
    152153        const char **aliases;
    153         int i;
     154        const char *dnsdomain;
     155        unsigned int i;
    154156
    155157        /* NULL is ok */
     
    173175
    174176        /* NETBIOS NAME is ok */
    175         ret = strequal(lp_netbios_name(dce_call->conn->dce_ctx->lp_ctx), server_name);
     177        ret = strequal(lpcfg_netbios_name(dce_call->conn->dce_ctx->lp_ctx), server_name);
    176178        if (ret) return WERR_OK;
    177179
    178         aliases = lp_netbios_aliases(dce_call->conn->dce_ctx->lp_ctx);
     180        aliases = lpcfg_netbios_aliases(dce_call->conn->dce_ctx->lp_ctx);
    179181
    180182        for (i=0; aliases && aliases[i]; i++) {
     
    187189         * TODO: we need to check if aliases are also ok
    188190         */
    189         if (lp_realm(dce_call->conn->dce_ctx->lp_ctx)) {
     191        dnsdomain = lpcfg_dnsdomain(dce_call->conn->dce_ctx->lp_ctx);
     192        if (dnsdomain != NULL) {
    190193                char *str;
    191194
    192195                str = talloc_asprintf(mem_ctx, "%s.%s",
    193                                                 lp_netbios_name(dce_call->conn->dce_ctx->lp_ctx),
    194                                                 lp_realm(dce_call->conn->dce_ctx->lp_ctx));
     196                                                lpcfg_netbios_name(dce_call->conn->dce_ctx->lp_ctx),
     197                                                dnsdomain);
    195198                W_ERROR_HAVE_NO_MEMORY(str);
    196199
     
    200203        }
    201204
    202         myaddr = dcesrv_connection_get_my_addr(dce_call->conn, mem_ctx);
     205        local_address = dcesrv_connection_get_local_address(dce_call->conn);
     206
     207        myaddr = tsocket_address_inet_addr_string(local_address, mem_ctx);
    203208        W_ERROR_HAVE_NO_MEMORY(myaddr);
    204209
    205         ret = strequal(myaddr->addr, server_name);
     210        ret = strequal(myaddr, server_name);
    206211        talloc_free(myaddr);
    207212        if (ret) return WERR_OK;
     
    216221
    217222        status = ntptr_init_context(dce_call->context, dce_call->conn->event_ctx, dce_call->conn->dce_ctx->lp_ctx,
    218                                     lp_ntptr_providor(dce_call->conn->dce_ctx->lp_ctx), &ntptr);
     223                                    lpcfg_ntptr_providor(dce_call->conn->dce_ctx->lp_ctx), &ntptr);
    219224        NT_STATUS_NOT_OK_RETURN(status);
    220225
     
    234239        struct ntptr_context *ntptr = talloc_get_type(dce_call->context->private_data, struct ntptr_context);
    235240        WERROR status;
    236         struct smb_iconv_convenience *ic = lp_iconv_convenience(ntptr->lp_ctx);
    237241
    238242        status = dcesrv_spoolss_check_server_name(dce_call, mem_ctx, r->in.server);
     
    242246        W_ERROR_NOT_OK_RETURN(status);
    243247
    244         *r->out.needed  = SPOOLSS_BUFFER_UNION_ARRAY(spoolss_EnumPrinters, ic, *r->out.info, r->in.level, *r->out.count);
     248        *r->out.needed  = SPOOLSS_BUFFER_UNION_ARRAY(spoolss_EnumPrinters, *r->out.info, r->in.level, *r->out.count);
    245249        *r->out.info    = SPOOLSS_BUFFER_OK(*r->out.info, NULL);
    246250        *r->out.count   = SPOOLSS_BUFFER_OK(*r->out.count, 0);
     
    370374        struct ntptr_context *ntptr = talloc_get_type(dce_call->context->private_data, struct ntptr_context);
    371375        WERROR status;
    372         struct smb_iconv_convenience *ic = lp_iconv_convenience(ntptr->lp_ctx);
    373376
    374377        status = dcesrv_spoolss_check_server_name(dce_call, mem_ctx, r->in.server);
     
    378381        W_ERROR_NOT_OK_RETURN(status);
    379382
    380         *r->out.needed  = SPOOLSS_BUFFER_UNION_ARRAY(spoolss_EnumPrinterDrivers, ic, *r->out.info, r->in.level, *r->out.count);
     383        *r->out.needed  = SPOOLSS_BUFFER_UNION_ARRAY(spoolss_EnumPrinterDrivers, *r->out.info, r->in.level, *r->out.count);
    381384        *r->out.info    = SPOOLSS_BUFFER_OK(*r->out.info, NULL);
    382385        *r->out.count   = SPOOLSS_BUFFER_OK(*r->out.count, 0);
     
    403406        struct ntptr_context *ntptr = talloc_get_type(dce_call->context->private_data, struct ntptr_context);
    404407        WERROR status;
    405         struct smb_iconv_convenience *ic = lp_iconv_convenience(ntptr->lp_ctx);
    406408
    407409        status = dcesrv_spoolss_check_server_name(dce_call, mem_ctx, r->in.server);
     
    411413        W_ERROR_NOT_OK_RETURN(status);
    412414
    413         *r->out.needed  = SPOOLSS_BUFFER_UNION(spoolss_DriverDirectoryInfo, ic, r->out.info, r->in.level);
     415        *r->out.needed  = SPOOLSS_BUFFER_UNION(spoolss_DriverDirectoryInfo, r->out.info, r->in.level);
    414416        r->out.info     = SPOOLSS_BUFFER_OK(r->out.info, NULL);
    415417        return SPOOLSS_BUFFER_OK(WERR_OK, WERR_INSUFFICIENT_BUFFER);
     
    455457        struct ntptr_context *ntptr = talloc_get_type(dce_call->context->private_data, struct ntptr_context);
    456458        WERROR status;
    457         struct smb_iconv_convenience *ic = lp_iconv_convenience(ntptr->lp_ctx);
    458459
    459460        status = dcesrv_spoolss_check_server_name(dce_call, mem_ctx, r->in.server);
     
    463464        W_ERROR_NOT_OK_RETURN(status);
    464465
    465         *r->out.needed  = SPOOLSS_BUFFER_UNION(spoolss_PrintProcessorDirectoryInfo, ic, r->out.info, r->in.level);
     466        *r->out.needed  = SPOOLSS_BUFFER_UNION(spoolss_PrintProcessorDirectoryInfo, r->out.info, r->in.level);
    466467        r->out.info     = SPOOLSS_BUFFER_OK(r->out.info, NULL);
    467468        return SPOOLSS_BUFFER_OK(WERR_OK, WERR_INSUFFICIENT_BUFFER);
     
    572573        struct dcesrv_handle *h;
    573574        WERROR status;
    574         struct smb_iconv_convenience *ic = lp_iconv_convenience(dce_call->conn->dce_ctx->lp_ctx);
    575575
    576576        r->out.type = talloc_zero(mem_ctx, enum winreg_Type);
     
    718718        struct dcesrv_handle *h;
    719719        WERROR status;
    720         struct smb_iconv_convenience *ic = lp_iconv_convenience(dce_call->conn->dce_ctx->lp_ctx);
    721720
    722721        DCESRV_PULL_HANDLE_WERR(h, r->in.handle, DCESRV_HANDLE_ANY);
     
    739738        }
    740739
    741         *r->out.needed  = SPOOLSS_BUFFER_UNION(spoolss_FormInfo, ic, r->out.info, r->in.level);
     740        *r->out.needed  = SPOOLSS_BUFFER_UNION(spoolss_FormInfo, r->out.info, r->in.level);
    742741        r->out.info     = SPOOLSS_BUFFER_OK(r->out.info, NULL);
    743742        return SPOOLSS_BUFFER_OK(WERR_OK, WERR_INSUFFICIENT_BUFFER);
     
    786785        struct dcesrv_handle *h;
    787786        WERROR status;
    788         struct smb_iconv_convenience *ic = lp_iconv_convenience(dce_call->conn->dce_ctx->lp_ctx);
    789787
    790788        DCESRV_PULL_HANDLE_WERR(h, r->in.handle, DCESRV_HANDLE_ANY);
     
    806804        }
    807805
    808         *r->out.needed  = SPOOLSS_BUFFER_UNION_ARRAY(spoolss_EnumForms, ic, *r->out.info, r->in.level, *r->out.count);
     806        *r->out.needed  = SPOOLSS_BUFFER_UNION_ARRAY(spoolss_EnumForms, *r->out.info, r->in.level, *r->out.count);
    809807        *r->out.info    = SPOOLSS_BUFFER_OK(*r->out.info, NULL);
    810808        *r->out.count   = SPOOLSS_BUFFER_OK(*r->out.count, 0);
     
    821819        struct ntptr_context *ntptr = talloc_get_type(dce_call->context->private_data, struct ntptr_context);
    822820        WERROR status;
    823         struct smb_iconv_convenience *ic = lp_iconv_convenience(ntptr->lp_ctx);
    824821
    825822        status = dcesrv_spoolss_check_server_name(dce_call, mem_ctx, r->in.servername);
     
    829826        W_ERROR_NOT_OK_RETURN(status);
    830827
    831         *r->out.needed  = SPOOLSS_BUFFER_UNION_ARRAY(spoolss_EnumPorts, ic, *r->out.info, r->in.level, *r->out.count);
     828        *r->out.needed  = SPOOLSS_BUFFER_UNION_ARRAY(spoolss_EnumPorts, *r->out.info, r->in.level, *r->out.count);
    832829        *r->out.info    = SPOOLSS_BUFFER_OK(*r->out.info, NULL);
    833830        *r->out.count   = SPOOLSS_BUFFER_OK(*r->out.count, 0);
     
    844841        struct ntptr_context *ntptr = talloc_get_type(dce_call->context->private_data, struct ntptr_context);
    845842        WERROR status;
    846         struct smb_iconv_convenience *ic = lp_iconv_convenience(ntptr->lp_ctx);
    847843
    848844        status = dcesrv_spoolss_check_server_name(dce_call, mem_ctx, r->in.servername);
     
    852848        W_ERROR_NOT_OK_RETURN(status);
    853849
    854         *r->out.needed  = SPOOLSS_BUFFER_UNION_ARRAY(spoolss_EnumMonitors, ic, *r->out.info, r->in.level, *r->out.count);
     850        *r->out.needed  = SPOOLSS_BUFFER_UNION_ARRAY(spoolss_EnumMonitors, *r->out.info, r->in.level, *r->out.count);
    855851        *r->out.info    = SPOOLSS_BUFFER_OK(*r->out.info, NULL);
    856852        *r->out.count   = SPOOLSS_BUFFER_OK(*r->out.count, 0);
     
    11961192
    11971193        ZERO_STRUCT(rop);
    1198         rop.in.server_name = lp_netbios_name(dce_call->conn->dce_ctx->lp_ctx);
     1194        rop.in.server_name = lpcfg_netbios_name(dce_call->conn->dce_ctx->lp_ctx);
    11991195        W_ERROR_HAVE_NO_MEMORY(rop.in.server_name);
    12001196        rop.in.printer_local = 0;
     
    12041200        rop.out.handle = &notify_handle;
    12051201
    1206         status = dcerpc_spoolss_ReplyOpenPrinter(p, mem_ctx, &rop);
     1202        status = dcerpc_spoolss_ReplyOpenPrinter_r(p->binding_handle, mem_ctx, &rop);
    12071203        if (NT_STATUS_IS_ERR(status)) {
    12081204                DEBUG(0, ("unable to open remote printer %s\n",
     
    13101306
    13111307/*
    1312   spoolss_47
    1313 */
    1314 static WERROR dcesrv_spoolss_47(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
    1315                        struct spoolss_47 *r)
     1308  spoolss_SetPort
     1309*/
     1310static WERROR dcesrv_spoolss_SetPort(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
     1311                       struct spoolss_SetPort *r)
    13161312{
    13171313        DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
     
    14501446
    14511447/*
    1452   spoolss_55
    1453 */
    1454 static WERROR dcesrv_spoolss_55(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
    1455                        struct spoolss_55 *r)
    1456 {
    1457         DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
    1458 }
    1459 
    1460 
    1461 /*
    1462   spoolss_56
    1463 */
    1464 static WERROR dcesrv_spoolss_56(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
    1465                        struct spoolss_56 *r)
    1466 {
    1467         DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
    1468 }
    1469 
    1470 
    1471 /*
    1472   spoolss_57
    1473 */
    1474 static WERROR dcesrv_spoolss_57(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
    1475                        struct spoolss_57 *r)
     1448  spoolss_AddPerMachineConnection
     1449*/
     1450static WERROR dcesrv_spoolss_AddPerMachineConnection(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
     1451                       struct spoolss_AddPerMachineConnection *r)
     1452{
     1453        DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
     1454}
     1455
     1456
     1457/*
     1458  spoolss_DeletePerMachineConnection
     1459*/
     1460static WERROR dcesrv_spoolss_DeletePerMachineConnection(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
     1461                       struct spoolss_DeletePerMachineConnection *r)
     1462{
     1463        DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
     1464}
     1465
     1466
     1467/*
     1468  spoolss_EnumPerMachineConnections
     1469*/
     1470static WERROR dcesrv_spoolss_EnumPerMachineConnections(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
     1471                       struct spoolss_EnumPerMachineConnections *r)
    14761472{
    14771473        DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
Note: See TracChangeset for help on using the changeset viewer.