Changeset 745 for trunk/server/source4/rpc_server/spoolss
- Timestamp:
- Nov 27, 2012, 4:43:17 PM (13 years ago)
- Location:
- trunk/server
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/server
- Property svn:mergeinfo changed
/vendor/current merged: 581,587,591,594,597,600,615,618,740
- Property svn:mergeinfo changed
-
trunk/server/source4/rpc_server/spoolss/dcesrv_spoolss.c
r429 r745 25 25 #include "librpc/gen_ndr/ndr_spoolss.h" 26 26 #include "ntptr/ntptr.h" 27 #include "lib/ socket/socket.h"27 #include "lib/tsocket/tsocket.h" 28 28 #include "librpc/gen_ndr/ndr_spoolss_c.h" 29 29 #include "auth/credentials/credentials.h" … … 34 34 }; 35 35 36 #define SPOOLSS_BUFFER_UNION(fn,i c,info,level) \37 ((info)?ndr_size_##fn(info, level, ic,0):0)38 39 #define SPOOLSS_BUFFER_UNION_ARRAY(fn,i c,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) 41 41 42 42 #define SPOOLSS_BUFFER_OK(val_true,val_false) ((r->in.offered >= *r->out.needed)?val_true:val_false) … … 149 149 { 150 150 bool ret; 151 struct socket_address *myaddr; 151 const struct tsocket_address *local_address; 152 char *myaddr; 152 153 const char **aliases; 153 int i; 154 const char *dnsdomain; 155 unsigned int i; 154 156 155 157 /* NULL is ok */ … … 173 175 174 176 /* 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); 176 178 if (ret) return WERR_OK; 177 179 178 aliases = lp _netbios_aliases(dce_call->conn->dce_ctx->lp_ctx);180 aliases = lpcfg_netbios_aliases(dce_call->conn->dce_ctx->lp_ctx); 179 181 180 182 for (i=0; aliases && aliases[i]; i++) { … … 187 189 * TODO: we need to check if aliases are also ok 188 190 */ 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) { 190 193 char *str; 191 194 192 195 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); 195 198 W_ERROR_HAVE_NO_MEMORY(str); 196 199 … … 200 203 } 201 204 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); 203 208 W_ERROR_HAVE_NO_MEMORY(myaddr); 204 209 205 ret = strequal(myaddr ->addr, server_name);210 ret = strequal(myaddr, server_name); 206 211 talloc_free(myaddr); 207 212 if (ret) return WERR_OK; … … 216 221 217 222 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); 219 224 NT_STATUS_NOT_OK_RETURN(status); 220 225 … … 234 239 struct ntptr_context *ntptr = talloc_get_type(dce_call->context->private_data, struct ntptr_context); 235 240 WERROR status; 236 struct smb_iconv_convenience *ic = lp_iconv_convenience(ntptr->lp_ctx);237 241 238 242 status = dcesrv_spoolss_check_server_name(dce_call, mem_ctx, r->in.server); … … 242 246 W_ERROR_NOT_OK_RETURN(status); 243 247 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); 245 249 *r->out.info = SPOOLSS_BUFFER_OK(*r->out.info, NULL); 246 250 *r->out.count = SPOOLSS_BUFFER_OK(*r->out.count, 0); … … 370 374 struct ntptr_context *ntptr = talloc_get_type(dce_call->context->private_data, struct ntptr_context); 371 375 WERROR status; 372 struct smb_iconv_convenience *ic = lp_iconv_convenience(ntptr->lp_ctx);373 376 374 377 status = dcesrv_spoolss_check_server_name(dce_call, mem_ctx, r->in.server); … … 378 381 W_ERROR_NOT_OK_RETURN(status); 379 382 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); 381 384 *r->out.info = SPOOLSS_BUFFER_OK(*r->out.info, NULL); 382 385 *r->out.count = SPOOLSS_BUFFER_OK(*r->out.count, 0); … … 403 406 struct ntptr_context *ntptr = talloc_get_type(dce_call->context->private_data, struct ntptr_context); 404 407 WERROR status; 405 struct smb_iconv_convenience *ic = lp_iconv_convenience(ntptr->lp_ctx);406 408 407 409 status = dcesrv_spoolss_check_server_name(dce_call, mem_ctx, r->in.server); … … 411 413 W_ERROR_NOT_OK_RETURN(status); 412 414 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); 414 416 r->out.info = SPOOLSS_BUFFER_OK(r->out.info, NULL); 415 417 return SPOOLSS_BUFFER_OK(WERR_OK, WERR_INSUFFICIENT_BUFFER); … … 455 457 struct ntptr_context *ntptr = talloc_get_type(dce_call->context->private_data, struct ntptr_context); 456 458 WERROR status; 457 struct smb_iconv_convenience *ic = lp_iconv_convenience(ntptr->lp_ctx);458 459 459 460 status = dcesrv_spoolss_check_server_name(dce_call, mem_ctx, r->in.server); … … 463 464 W_ERROR_NOT_OK_RETURN(status); 464 465 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); 466 467 r->out.info = SPOOLSS_BUFFER_OK(r->out.info, NULL); 467 468 return SPOOLSS_BUFFER_OK(WERR_OK, WERR_INSUFFICIENT_BUFFER); … … 572 573 struct dcesrv_handle *h; 573 574 WERROR status; 574 struct smb_iconv_convenience *ic = lp_iconv_convenience(dce_call->conn->dce_ctx->lp_ctx);575 575 576 576 r->out.type = talloc_zero(mem_ctx, enum winreg_Type); … … 718 718 struct dcesrv_handle *h; 719 719 WERROR status; 720 struct smb_iconv_convenience *ic = lp_iconv_convenience(dce_call->conn->dce_ctx->lp_ctx);721 720 722 721 DCESRV_PULL_HANDLE_WERR(h, r->in.handle, DCESRV_HANDLE_ANY); … … 739 738 } 740 739 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); 742 741 r->out.info = SPOOLSS_BUFFER_OK(r->out.info, NULL); 743 742 return SPOOLSS_BUFFER_OK(WERR_OK, WERR_INSUFFICIENT_BUFFER); … … 786 785 struct dcesrv_handle *h; 787 786 WERROR status; 788 struct smb_iconv_convenience *ic = lp_iconv_convenience(dce_call->conn->dce_ctx->lp_ctx);789 787 790 788 DCESRV_PULL_HANDLE_WERR(h, r->in.handle, DCESRV_HANDLE_ANY); … … 806 804 } 807 805 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); 809 807 *r->out.info = SPOOLSS_BUFFER_OK(*r->out.info, NULL); 810 808 *r->out.count = SPOOLSS_BUFFER_OK(*r->out.count, 0); … … 821 819 struct ntptr_context *ntptr = talloc_get_type(dce_call->context->private_data, struct ntptr_context); 822 820 WERROR status; 823 struct smb_iconv_convenience *ic = lp_iconv_convenience(ntptr->lp_ctx);824 821 825 822 status = dcesrv_spoolss_check_server_name(dce_call, mem_ctx, r->in.servername); … … 829 826 W_ERROR_NOT_OK_RETURN(status); 830 827 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); 832 829 *r->out.info = SPOOLSS_BUFFER_OK(*r->out.info, NULL); 833 830 *r->out.count = SPOOLSS_BUFFER_OK(*r->out.count, 0); … … 844 841 struct ntptr_context *ntptr = talloc_get_type(dce_call->context->private_data, struct ntptr_context); 845 842 WERROR status; 846 struct smb_iconv_convenience *ic = lp_iconv_convenience(ntptr->lp_ctx);847 843 848 844 status = dcesrv_spoolss_check_server_name(dce_call, mem_ctx, r->in.servername); … … 852 848 W_ERROR_NOT_OK_RETURN(status); 853 849 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); 855 851 *r->out.info = SPOOLSS_BUFFER_OK(*r->out.info, NULL); 856 852 *r->out.count = SPOOLSS_BUFFER_OK(*r->out.count, 0); … … 1196 1192 1197 1193 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); 1199 1195 W_ERROR_HAVE_NO_MEMORY(rop.in.server_name); 1200 1196 rop.in.printer_local = 0; … … 1204 1200 rop.out.handle = ¬ify_handle; 1205 1201 1206 status = dcerpc_spoolss_ReplyOpenPrinter (p, mem_ctx, &rop);1202 status = dcerpc_spoolss_ReplyOpenPrinter_r(p->binding_handle, mem_ctx, &rop); 1207 1203 if (NT_STATUS_IS_ERR(status)) { 1208 1204 DEBUG(0, ("unable to open remote printer %s\n", … … 1310 1306 1311 1307 /* 1312 spoolss_ 471313 */ 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 */ 1310 static WERROR dcesrv_spoolss_SetPort(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, 1311 struct spoolss_SetPort *r) 1316 1312 { 1317 1313 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); … … 1450 1446 1451 1447 /* 1452 spoolss_ 551453 */ 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_ 561463 */ 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_ 571473 */ 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 */ 1450 static 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 */ 1460 static 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 */ 1470 static WERROR dcesrv_spoolss_EnumPerMachineConnections(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, 1471 struct spoolss_EnumPerMachineConnections *r) 1476 1472 { 1477 1473 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
Note:
See TracChangeset
for help on using the changeset viewer.