Changeset 862 for trunk/server/source3/rpc_server/spoolss
- Timestamp:
- May 13, 2014, 11:39:04 AM (11 years ago)
- Location:
- trunk/server
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/server
- Property svn:mergeinfo changed
/vendor/current merged: 860
- Property svn:mergeinfo changed
-
trunk/server/source3/rpc_server/spoolss/srv_spoolss_nt.c
r751 r862 1745 1745 result = open_printer_hnd(p, r->out.handle, r->in.printername, 0); 1746 1746 if (!W_ERROR_IS_OK(result)) { 1747 DEBUG( 0,("_spoolss_OpenPrinterEx: Cannot open a printer handle "1747 DEBUG(3,("_spoolss_OpenPrinterEx: Cannot open a printer handle " 1748 1748 "for printer %s\n", r->in.printername)); 1749 1749 ZERO_STRUCTP(r->out.handle); … … 1943 1943 */ 1944 1944 1945 if ((Printer->printer_type != SPLHND_SERVER) &&1946 r->in.devmode_ctr.devmode) {1945 if ((Printer->printer_type != SPLHND_SERVER) 1946 && (r->in.devmode_ctr.devmode != NULL)) { 1947 1947 copy_devicemode(NULL, r->in.devmode_ctr.devmode, 1948 1948 &Printer->devmode); 1949 1949 } 1950 1951 #if 0 /* JERRY -- I'm doubtful this is really effective */1952 /* HACK ALERT!!! Sleep for 1/3 of a second to try trigger a LAN/WAN1953 optimization in Windows 2000 clients --jerry */1954 1955 if ( (r->in.access_mask == PRINTER_ACCESS_ADMINISTER)1956 && (RA_WIN2K == get_remote_arch()) )1957 {1958 DEBUG(10,("_spoolss_OpenPrinterEx: Enabling LAN/WAN hack for Win2k clients.\n"));1959 sys_usleep( 500000 );1960 }1961 #endif1962 1950 1963 1951 return WERR_OK; … … 4038 4026 r->averageppm = info2->averageppm; 4039 4027 4040 copy_devicemode(mem_ctx, info2->devmode, &r->devmode); 4041 if (!r->devmode) { 4028 if (info2->devmode != NULL) { 4029 result = copy_devicemode(mem_ctx, 4030 info2->devmode, 4031 &r->devmode); 4032 if (!W_ERROR_IS_OK(result)) { 4033 return result; 4034 } 4035 } else if (lp_default_devmode(snum)) { 4036 result = spoolss_create_default_devmode(mem_ctx, 4037 info2->printername, 4038 &r->devmode); 4039 if (!W_ERROR_IS_OK(result)) { 4040 return result; 4041 } 4042 } else { 4043 r->devmode = NULL; 4042 4044 DEBUG(8,("Returning NULL Devicemode!\n")); 4043 4045 } … … 4175 4177 { 4176 4178 struct auth_serversupplied_info *session_info; 4177 struct GUID guid;4179 char *printer; 4178 4180 NTSTATUS status; 4179 4180 status = make_session_info_system(mem_ctx, &session_info); 4181 WERROR werr; 4182 TALLOC_CTX *tmp_ctx = talloc_new(mem_ctx); 4183 if (tmp_ctx == NULL) { 4184 return WERR_NOMEM; 4185 } 4186 4187 status = make_session_info_system(tmp_ctx, &session_info); 4181 4188 if (!NT_STATUS_IS_OK(status)) { 4182 4189 DEBUG(0, ("construct_printer_info7: " 4183 4190 "Could not create system session_info\n")); 4184 return WERR_NOMEM; 4185 } 4186 4187 if (is_printer_published(mem_ctx, session_info, msg_ctx, 4188 servername, 4189 lp_servicename(snum), &guid, NULL)) { 4191 werr = WERR_NOMEM; 4192 goto out_tmp_free; 4193 } 4194 4195 printer = lp_servicename(snum); 4196 if (printer == NULL) { 4197 DEBUG(0, ("invalid printer snum %d\n", snum)); 4198 werr = WERR_INVALID_PARAM; 4199 goto out_tmp_free; 4200 } 4201 4202 if (is_printer_published(tmp_ctx, session_info, msg_ctx, 4203 servername, printer, NULL)) { 4204 struct GUID guid; 4205 werr = nt_printer_guid_get(tmp_ctx, session_info, msg_ctx, 4206 printer, &guid); 4207 if (!W_ERROR_IS_OK(werr)) { 4208 goto out_tmp_free; 4209 } 4190 4210 r->guid = talloc_strdup_upper(mem_ctx, GUID_string2(mem_ctx, &guid)); 4191 4211 r->action = DSPRINT_PUBLISH; … … 4194 4214 r->action = DSPRINT_UNPUBLISH; 4195 4215 } 4196 W_ERROR_HAVE_NO_MEMORY(r->guid); 4197 4198 TALLOC_FREE(session_info); 4199 return WERR_OK; 4216 if (r->guid == NULL) { 4217 werr = WERR_NOMEM; 4218 goto out_tmp_free; 4219 } 4220 4221 werr = WERR_OK; 4222 out_tmp_free: 4223 talloc_free(tmp_ctx); 4224 return werr; 4200 4225 } 4201 4226 … … 4219 4244 } 4220 4245 4221 copy_devicemode(mem_ctx, info2->devmode, &r->devmode); 4222 if (!r->devmode) { 4246 if (info2->devmode != NULL) { 4247 result = copy_devicemode(mem_ctx, 4248 info2->devmode, 4249 &r->devmode); 4250 if (!W_ERROR_IS_OK(result)) { 4251 return result; 4252 } 4253 } else if (lp_default_devmode(snum)) { 4254 result = spoolss_create_default_devmode(mem_ctx, 4255 info2->printername, 4256 &r->devmode); 4257 if (!W_ERROR_IS_OK(result)) { 4258 return result; 4259 } 4260 } else { 4261 r->devmode = NULL; 4223 4262 DEBUG(8,("Returning NULL Devicemode!\n")); 4224 4263 } … … 4427 4466 DEBUG(4,("enum_all_printers_info_1_name\n")); 4428 4467 4429 if ((servername[0] == '\\') && (servername[1] == '\\')) { 4468 if (servername != NULL && 4469 (servername[0] == '\\') && (servername[1] == '\\')) { 4430 4470 s = servername + 2; 4431 4471 } … … 4462 4502 WERR_CAN_NOT_COMPLETE so we should do the same. */ 4463 4503 4464 if (servername[0] == '\\' && servername[1] == '\\') { 4504 if (servername != NULL && 4505 (servername[0] == '\\') && (servername[1] == '\\')) { 4465 4506 s = servername + 2; 4466 4507 } … … 5592 5633 struct printer_handle *printer; 5593 5634 WERROR result; 5635 uint32_t version = r->in.client_major_version; 5594 5636 5595 5637 int snum; … … 5614 5656 if (!get_printer_snum(p, r->in.handle, &snum, NULL)) { 5615 5657 return WERR_BADFID; 5658 } 5659 5660 if (r->in.client_major_version == SPOOLSS_DRIVER_VERSION_2012) { 5661 DEBUG(3,("_spoolss_GetPrinterDriver2: v4 driver requested, " 5662 "downgrading to v3\n")); 5663 version = SPOOLSS_DRIVER_VERSION_200X; 5616 5664 } 5617 5665 … … 5622 5670 snum, printer->servername, 5623 5671 r->in.architecture, 5624 r->in.client_major_version);5672 version); 5625 5673 if (!W_ERROR_IS_OK(result)) { 5626 5674 TALLOC_FREE(r->out.info); … … 5722 5770 5723 5771 if (info_1->datatype) { 5724 if (strcmp(info_1->datatype, "RAW") != 0) { 5772 /* 5773 * The v4 driver model used in Windows 8 declares print jobs 5774 * intended to bypass the XPS processing layer by setting 5775 * datatype to "XPS_PASS" instead of "RAW". 5776 */ 5777 if ((strcmp(info_1->datatype, "RAW") != 0) 5778 && (strcmp(info_1->datatype, "XPS_PASS") != 0)) { 5725 5779 *r->out.job_id = 0; 5726 5780 return WERR_INVALID_DATATYPE;
Note:
See TracChangeset
for help on using the changeset viewer.