Ignore:
Timestamp:
Apr 9, 2010, 3:20:58 PM (15 years ago)
Author:
Silvan Scherrer
Message:

Samba 3.5.x: update to 3.5.2

Location:
vendor/current/source3/rpc_server
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • vendor/current/source3/rpc_server/srv_netlog_nt.c

    r414 r427  
    11141114        case NetlogonInteractiveTransitiveInformation:
    11151115        case NetlogonServiceTransitiveInformation:
    1116                 nt_username     = logon->password->identity_info.account_name.string;
    1117                 nt_domain       = logon->password->identity_info.domain_name.string;
    1118                 nt_workstation  = logon->password->identity_info.workstation.string;
     1116                nt_username     = logon->password->identity_info.account_name.string ?
     1117                                  logon->password->identity_info.account_name.string : "";
     1118                nt_domain       = logon->password->identity_info.domain_name.string ?
     1119                                  logon->password->identity_info.domain_name.string : "";
     1120                nt_workstation  = logon->password->identity_info.workstation.string ?
     1121                                  logon->password->identity_info.workstation.string : "";
    11191122
    11201123                DEBUG(3,("SAM Logon (Interactive). Domain:[%s].  ", lp_workgroup()));
     
    11221125        case NetlogonNetworkInformation:
    11231126        case NetlogonNetworkTransitiveInformation:
    1124                 nt_username     = logon->network->identity_info.account_name.string;
    1125                 nt_domain       = logon->network->identity_info.domain_name.string;
    1126                 nt_workstation  = logon->network->identity_info.workstation.string;
     1127                nt_username     = logon->network->identity_info.account_name.string ?
     1128                                  logon->network->identity_info.account_name.string : "";
     1129                nt_domain       = logon->network->identity_info.domain_name.string ?
     1130                                  logon->network->identity_info.domain_name.string : "";
     1131                nt_workstation  = logon->network->identity_info.workstation.string ?
     1132                                  logon->network->identity_info.workstation.string : "";
    11271133
    11281134                DEBUG(3,("SAM Logon (Network). Domain:[%s].  ", lp_workgroup()));
  • vendor/current/source3/rpc_server/srv_spoolss_nt.c

    r414 r427  
    76977697                                goto done;
    76987698                        }
    7699                         *r->out.value_needed = strlen_m(regval_name(val));
     7699                        *r->out.value_needed = strlen_m_term(regval_name(val)) * 2;
    77007700                } else {
    77017701                        r->out.value_name = NULL;
     
    77427742        r2.in.type              = r->in.type;
    77437743        r2.in.data              = r->in.data;
    7744         r2.in._offered          = r->in._offered;
     7744        r2.in.offered           = r->in.offered;
    77457745
    77467746        return _spoolss_SetPrinterDataEx(p, &r2);
     
    85908590        if (Printer->printer_type == SPLHND_SERVER) {
    85918591
     8592                union spoolss_PrinterData data;
     8593
    85928594                result = getprinterdata_printer_server(p->mem_ctx,
    85938595                                                       r->in.value_name,
    85948596                                                       r->out.type,
    8595                                                        r->out.data);
    8596                 goto done;
     8597                                                       &data);
     8598                if (!W_ERROR_IS_OK(result)) {
     8599                        goto done;
     8600                }
     8601
     8602                result = push_spoolss_PrinterData(p->mem_ctx, &blob,
     8603                                                  *r->out.type, &data);
     8604                if (!W_ERROR_IS_OK(result)) {
     8605                        goto done;
     8606                }
     8607
     8608                *r->out.needed = blob.length;
     8609
     8610                if (r->in.offered >= *r->out.needed) {
     8611                        memcpy(r->out.data, blob.data, blob.length);
     8612                }
     8613
     8614                return SPOOLSS_BUFFER_OK(WERR_OK, WERR_MORE_DATA);
    85978615        }
    85988616
     
    86198637                *r->out.type = REG_DWORD;
    86208638                *r->out.needed = 4;
    8621                 r->out.data->value = printer->info_2->changeid;
    8622                 result = WERR_OK;
     8639                if (r->in.offered >= *r->out.needed) {
     8640                        SIVAL(r->out.data, 0, printer->info_2->changeid);
     8641                        result = WERR_OK;
     8642                }
    86238643                goto done;
    86248644        }
     
    86418661        *r->out.type = regval_type(val);
    86428662
    8643         blob = data_blob_const(regval_data_p(val), regval_size(val));
    8644 
    8645         result = pull_spoolss_PrinterData(p->mem_ctx, &blob,
    8646                                           r->out.data,
    8647                                           *r->out.type);
    8648 
     8663        if (r->in.offered >= *r->out.needed) {
     8664                memcpy(r->out.data, regval_data_p(val), regval_size(val));
     8665        }
    86498666 done:
    86508667        if (printer) {
     
    86568673        }
    86578674
    8658         *r->out.needed  = ndr_size_spoolss_PrinterData(r->out.data, *r->out.type, NULL, 0);
    86598675        *r->out.type    = SPOOLSS_BUFFER_OK(*r->out.type, REG_NONE);
    86608676        r->out.data     = SPOOLSS_BUFFER_OK(r->out.data, r->out.data);
     
    86758691        Printer_entry           *Printer = find_printer_index_by_hnd(p, r->in.handle);
    86768692        char                    *oid_string;
    8677         DATA_BLOB blob;
    86788693
    86798694        DEBUG(4,("_spoolss_SetPrinterDataEx\n"));
     
    87258740        }
    87268741
    8727         result = push_spoolss_PrinterData(p->mem_ctx, &blob,
    8728                                           r->in.type, &r->in.data);
    8729         if (!W_ERROR_IS_OK(result)) {
    8730                 goto done;
    8731         }
    8732 
    87338742        /*
    87348743         * When client side code sets a magic printer data key, detect it and save
     
    87388747        if ((r->in.type == REG_BINARY) && strequal(r->in.value_name, PHANTOM_DEVMODE_KEY)) {
    87398748                /* Set devmode and printer initialization info */
    8740                 result = save_driver_init(printer, 2, blob.data, blob.length);
     8749                result = save_driver_init(printer, 2, r->in.data, r->in.offered);
    87418750
    87428751                srv_spoolss_reset_printerdata(printer->info_2->drivername);
     
    87488757
    87498758        result = set_printer_dataex(printer, r->in.key_name, r->in.value_name,
    8750                                     r->in.type, blob.data, blob.length);
     8759                                    r->in.type, r->in.data, r->in.offered);
    87518760
    87528761        if (W_ERROR_IS_OK(result)) {
     
    89868995                                                   struct spoolss_PrinterEnumValues *r)
    89878996{
    8988         WERROR result;
    8989 
    8990         r->data = TALLOC_ZERO_P(mem_ctx, union spoolss_PrinterData);
     8997        r->data = TALLOC_ZERO_P(mem_ctx, DATA_BLOB);
    89918998        W_ERROR_HAVE_NO_MEMORY(r->data);
    89928999
     
    89989005
    89999006        if (r->data_length) {
    9000                 DATA_BLOB blob = data_blob_const(regval_data_p(v),
    9001                                                  regval_size(v));
    9002                 result = pull_spoolss_PrinterData(mem_ctx, &blob,
    9003                                                   r->data,
    9004                                                   r->type);
    9005                 if (!W_ERROR_IS_OK(result)) {
    9006                         return result;
    9007                 }
     9007                *r->data = data_blob_talloc(r->data, regval_data_p(v), regval_size(v));
    90089008        }
    90099009
  • vendor/current/source3/rpc_server/srv_winreg_nt.c

    r414 r427  
    231231                return WERR_BADFID;
    232232
    233         if ((r->out.data_length == NULL) || (r->out.type == NULL)) {
     233        if ((r->out.data_length == NULL) || (r->out.type == NULL) || (r->out.data_size == NULL)) {
    234234                return WERR_INVALID_PARAM;
    235235        }
    236236
    237         *r->out.data_length = *r->out.type = REG_NONE;
    238 
    239         DEBUG(7,("_reg_info: policy key name = [%s]\n", regkey->key->name));
    240         DEBUG(7,("_reg_info: policy key type = [%08x]\n", regkey->key->type));
     237        DEBUG(7,("_winreg_QueryValue: policy key name = [%s]\n", regkey->key->name));
     238        DEBUG(7,("_winreg_QueryValue: policy key type = [%08x]\n", regkey->key->type));
    241239
    242240        /* Handle QueryValue calls on HKEY_PERFORMANCE_DATA */
     
    288286                                        &val);
    289287                if (!W_ERROR_IS_OK(status)) {
     288
     289                        DEBUG(10,("_winreg_QueryValue: reg_queryvalue failed with: %s\n",
     290                                win_errstr(status)));
     291
    290292                        if (r->out.data_size) {
    291293                                *r->out.data_size = 0;
     
    307309        }
    308310
    309         *r->out.data_length = outbuf_size;
    310 
    311         if ( *r->in.data_size == 0 || !r->out.data ) {
     311        status = WERR_BADFILE;
     312
     313        if (*r->in.data_size < outbuf_size) {
     314                *r->out.data_size = outbuf_size;
     315                status = r->in.data ? WERR_MORE_DATA : WERR_OK;
     316        } else {
     317                *r->out.data_length = outbuf_size;
     318                *r->out.data_size = outbuf_size;
     319                memcpy(r->out.data, outbuf, outbuf_size);
    312320                status = WERR_OK;
    313         } else if ( *r->out.data_length > *r->in.data_size ) {
    314                 status = WERR_MORE_DATA;
    315         } else {
    316                 memcpy( r->out.data, outbuf, *r->out.data_length );
    317                 status = WERR_OK;
    318         }
    319 
    320         *r->out.data_size = *r->out.data_length;
     321        }
    321322
    322323        if (free_prs) prs_mem_free(&prs_hkpd);
Note: See TracChangeset for help on using the changeset viewer.