Changeset 740 for vendor/current/source3/libsmb/cliquota.c
- Timestamp:
- Nov 14, 2012, 12:59:34 PM (13 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
vendor/current/source3/libsmb/cliquota.c
r581 r740 19 19 20 20 #include "includes.h" 21 #include "libsmb/libsmb.h" 22 #include "../librpc/gen_ndr/ndr_security.h" 23 #include "fake_file.h" 24 #include "../libcli/security/security.h" 25 #include "trans2.h" 21 26 22 27 NTSTATUS cli_get_quota_handle(struct cli_state *cli, uint16_t *quota_fnum) … … 41 46 } 42 47 43 static bool parse_user_quota_record(const char *rdata, unsigned int rdata_count, unsigned int *offset, SMB_NTQUOTA_STRUCT *pqt) 48 static bool parse_user_quota_record(const uint8_t *rdata, 49 unsigned int rdata_count, 50 unsigned int *offset, 51 SMB_NTQUOTA_STRUCT *pqt) 44 52 { 45 53 int sid_len; … … 74 82 75 83 /* the used space 8 bytes (uint64_t)*/ 76 qt.usedspace = (uint64_t)IVAL(rdata,16); 77 #ifdef LARGE_SMB_OFF_T 78 qt.usedspace |= (((uint64_t)IVAL(rdata,20)) << 32); 79 #else /* LARGE_SMB_OFF_T */ 80 if ((IVAL(rdata,20) != 0)&& 81 ((qt.usedspace != 0xFFFFFFFF)|| 82 (IVAL(rdata,20)!=0xFFFFFFFF))) { 83 /* more than 32 bits? */ 84 return False; 85 } 86 #endif /* LARGE_SMB_OFF_T */ 84 qt.usedspace = BVAL(rdata,16); 87 85 88 86 /* the soft quotas 8 bytes (uint64_t)*/ 89 qt.softlim = (uint64_t)IVAL(rdata,24); 90 #ifdef LARGE_SMB_OFF_T 91 qt.softlim |= (((uint64_t)IVAL(rdata,28)) << 32); 92 #else /* LARGE_SMB_OFF_T */ 93 if ((IVAL(rdata,28) != 0)&& 94 ((qt.softlim != 0xFFFFFFFF)|| 95 (IVAL(rdata,28)!=0xFFFFFFFF))) { 96 /* more than 32 bits? */ 97 return False; 98 } 99 #endif /* LARGE_SMB_OFF_T */ 87 qt.softlim = BVAL(rdata,24); 100 88 101 89 /* the hard quotas 8 bytes (uint64_t)*/ 102 qt.hardlim = (uint64_t)IVAL(rdata,32); 103 #ifdef LARGE_SMB_OFF_T 104 qt.hardlim |= (((uint64_t)IVAL(rdata,36)) << 32); 105 #else /* LARGE_SMB_OFF_T */ 106 if ((IVAL(rdata,36) != 0)&& 107 ((qt.hardlim != 0xFFFFFFFF)|| 108 (IVAL(rdata,36)!=0xFFFFFFFF))) { 109 /* more than 32 bits? */ 110 return False; 111 } 112 #endif /* LARGE_SMB_OFF_T */ 113 114 if (!sid_parse(rdata+40,sid_len,&qt.sid)) { 90 qt.hardlim = BVAL(rdata,32); 91 92 if (!sid_parse((char *)rdata+40,sid_len,&qt.sid)) { 115 93 return false; 116 94 } … … 123 101 } 124 102 125 bool cli_get_user_quota(struct cli_state *cli, int quota_fnum, SMB_NTQUOTA_STRUCT *pqt) 126 { 127 bool ret = False; 128 uint16 setup;129 charparams[16];103 NTSTATUS cli_get_user_quota(struct cli_state *cli, int quota_fnum, 104 SMB_NTQUOTA_STRUCT *pqt) 105 { 106 uint16_t setup[1]; 107 uint8_t params[16]; 130 108 unsigned int data_len; 131 chardata[SID_MAX_SIZE+8];132 char *rparam=NULL, *rdata=NULL;133 u nsigned int rparam_count=0, rdata_count=0;109 uint8_t data[SID_MAX_SIZE+8]; 110 uint8_t *rparam, *rdata; 111 uint32_t rparam_count, rdata_count; 134 112 unsigned int sid_len; 135 113 unsigned int offset; 114 NTSTATUS status; 136 115 137 116 if (!cli||!pqt) { … … 139 118 } 140 119 141 setup = NT_TRANSACT_GET_USER_QUOTA;120 SSVAL(setup + 0, 0, NT_TRANSACT_GET_USER_QUOTA); 142 121 143 122 SSVAL(params, 0,quota_fnum); … … 147 126 SIVAL(params,12,0x00000024); 148 127 149 sid_len = ndr_size_dom_sid(&pqt->sid, NULL,0);128 sid_len = ndr_size_dom_sid(&pqt->sid, 0); 150 129 data_len = sid_len+8; 151 130 SIVAL(data, 0, 0x00000000); 152 131 SIVAL(data, 4, sid_len); 153 sid_linearize(data+8, sid_len, &pqt->sid); 154 155 if (!cli_send_nt_trans(cli, 156 NT_TRANSACT_GET_USER_QUOTA, 157 0, 158 &setup, 1, 0, 159 params, 16, 4, 160 data, data_len, 112)) { 161 DEBUG(1,("Failed to send NT_TRANSACT_GET_USER_QUOTA\n")); 162 goto cleanup; 163 } 164 165 166 if (!cli_receive_nt_trans(cli, 167 &rparam, &rparam_count, 168 &rdata, &rdata_count)) { 169 DEBUG(1,("Failed to recv NT_TRANSACT_GET_USER_QUOTA\n")); 170 goto cleanup; 171 } 172 173 if (cli_is_error(cli)) { 174 ret = False; 175 goto cleanup; 176 } else { 177 ret = True; 178 } 179 180 if ((rparam&&rdata)&&(rparam_count>=4&&rdata_count>=8)) { 181 ret = parse_user_quota_record(rdata, rdata_count, &offset, pqt); 182 } else { 132 sid_linearize((char *)data+8, sid_len, &pqt->sid); 133 134 status = cli_trans(talloc_tos(), cli, SMBnttrans, 135 NULL, -1, /* name, fid */ 136 NT_TRANSACT_GET_USER_QUOTA, 0, 137 setup, 1, 0, /* setup */ 138 params, 16, 4, /* params */ 139 data, data_len, 112, /* data */ 140 NULL, /* recv_flags2 */ 141 NULL, 0, NULL, /* rsetup */ 142 &rparam, 4, &rparam_count, 143 &rdata, 8, &rdata_count); 144 if (!NT_STATUS_IS_OK(status)) { 145 DEBUG(1, ("NT_TRANSACT_GET_USER_QUOTA failed: %s\n", 146 nt_errstr(status))); 147 return status; 148 } 149 150 if (!parse_user_quota_record(rdata, rdata_count, &offset, pqt)) { 151 status = NT_STATUS_INVALID_NETWORK_RESPONSE; 183 152 DEBUG(0,("Got INVALID NT_TRANSACT_GET_USER_QUOTA reply.\n")); 184 ret = False; 185 } 186 187 cleanup: 188 SAFE_FREE(rparam); 189 SAFE_FREE(rdata); 190 return ret; 191 } 192 193 bool cli_set_user_quota(struct cli_state *cli, int quota_fnum, SMB_NTQUOTA_STRUCT *pqt) 194 { 195 bool ret = False; 196 uint16 setup; 197 char params[2]; 198 char data[112]; 199 char *rparam=NULL, *rdata=NULL; 200 unsigned int rparam_count=0, rdata_count=0; 153 } 154 155 TALLOC_FREE(rparam); 156 TALLOC_FREE(rdata); 157 return status; 158 } 159 160 NTSTATUS cli_set_user_quota(struct cli_state *cli, int quota_fnum, 161 SMB_NTQUOTA_STRUCT *pqt) 162 { 163 uint16_t setup[1]; 164 uint8_t params[2]; 165 uint8_t data[112]; 201 166 unsigned int sid_len; 167 NTSTATUS status; 168 202 169 memset(data,'\0',112); 203 170 … … 206 173 } 207 174 208 setup = NT_TRANSACT_SET_USER_QUOTA;175 SSVAL(setup + 0, 0, NT_TRANSACT_SET_USER_QUOTA); 209 176 210 177 SSVAL(params,0,quota_fnum); 211 178 212 sid_len = ndr_size_dom_sid(&pqt->sid, NULL,0);179 sid_len = ndr_size_dom_sid(&pqt->sid, 0); 213 180 SIVAL(data,0,0); 214 181 SIVAL(data,4,sid_len); … … 217 184 SBIG_UINT(data,24,pqt->softlim); 218 185 SBIG_UINT(data,32,pqt->hardlim); 219 sid_linearize(data+40, sid_len, &pqt->sid); 220 221 if (!cli_send_nt_trans(cli, 222 NT_TRANSACT_SET_USER_QUOTA, 223 0, 224 &setup, 1, 0, 225 params, 2, 0, 226 data, 112, 0)) { 227 DEBUG(1,("Failed to send NT_TRANSACT_SET_USER_QUOTA\n")); 228 goto cleanup; 229 } 230 231 232 if (!cli_receive_nt_trans(cli, 233 &rparam, &rparam_count, 234 &rdata, &rdata_count)) { 235 DEBUG(1,("NT_TRANSACT_SET_USER_QUOTA failed\n")); 236 goto cleanup; 237 } 238 239 if (cli_is_error(cli)) { 240 ret = False; 241 goto cleanup; 242 } else { 243 ret = True; 244 } 245 246 cleanup: 247 SAFE_FREE(rparam); 248 SAFE_FREE(rdata); 249 return ret; 250 } 251 252 bool cli_list_user_quota(struct cli_state *cli, int quota_fnum, SMB_NTQUOTA_LIST **pqt_list) 253 { 254 bool ret = False; 255 uint16 setup; 256 char params[16]; 257 char *rparam=NULL, *rdata=NULL; 258 unsigned int rparam_count=0, rdata_count=0; 186 sid_linearize((char *)data+40, sid_len, &pqt->sid); 187 188 status = cli_trans(talloc_tos(), cli, SMBnttrans, 189 NULL, -1, /* name, fid */ 190 NT_TRANSACT_SET_USER_QUOTA, 0, 191 setup, 1, 0, /* setup */ 192 params, 2, 0, /* params */ 193 data, 112, 0, /* data */ 194 NULL, /* recv_flags2 */ 195 NULL, 0, NULL, /* rsetup */ 196 NULL, 0, NULL, /* rparams */ 197 NULL, 0, NULL); /* rdata */ 198 199 if (!NT_STATUS_IS_OK(status)) { 200 DEBUG(1, ("NT_TRANSACT_SET_USER_QUOTA failed: %s\n", 201 nt_errstr(status))); 202 } 203 204 return status; 205 } 206 207 NTSTATUS cli_list_user_quota(struct cli_state *cli, int quota_fnum, 208 SMB_NTQUOTA_LIST **pqt_list) 209 { 210 uint16_t setup[1]; 211 uint8_t params[16]; 212 uint8_t *rparam=NULL, *rdata=NULL; 213 uint32_t rparam_count=0, rdata_count=0; 259 214 unsigned int offset; 260 const char*curdata = NULL;215 const uint8_t *curdata = NULL; 261 216 unsigned int curdata_count = 0; 262 217 TALLOC_CTX *mem_ctx = NULL; 263 218 SMB_NTQUOTA_STRUCT qt; 264 219 SMB_NTQUOTA_LIST *tmp_list_ent; 220 NTSTATUS status; 265 221 266 222 if (!cli||!pqt_list) { … … 268 224 } 269 225 270 setup = NT_TRANSACT_GET_USER_QUOTA;226 SSVAL(setup + 0, 0, NT_TRANSACT_GET_USER_QUOTA); 271 227 272 228 SSVAL(params, 0,quota_fnum); … … 276 232 SIVAL(params,12,0x00000000); 277 233 278 if (!cli_send_nt_trans(cli, 279 NT_TRANSACT_GET_USER_QUOTA, 280 0, 281 &setup, 1, 0, 282 params, 16, 4, 283 NULL, 0, 2048)) { 284 DEBUG(1,("Failed to send NT_TRANSACT_GET_USER_QUOTA\n")); 234 status = cli_trans(talloc_tos(), cli, SMBnttrans, 235 NULL, -1, /* name, fid */ 236 NT_TRANSACT_GET_USER_QUOTA, 0, 237 setup, 1, 0, /* setup */ 238 params, 16, 4, /* params */ 239 NULL, 0, 2048, /* data */ 240 NULL, /* recv_flags2 */ 241 NULL, 0, NULL, /* rsetup */ 242 &rparam, 0, &rparam_count, 243 &rdata, 0, &rdata_count); 244 245 if (!NT_STATUS_IS_OK(status)) { 246 DEBUG(1, ("NT_TRANSACT_GET_USER_QUOTA failed: %s\n", 247 nt_errstr(status))); 285 248 goto cleanup; 286 }287 288 289 if (!cli_receive_nt_trans(cli,290 &rparam, &rparam_count,291 &rdata, &rdata_count)) {292 DEBUG(1,("Failed to recv NT_TRANSACT_GET_USER_QUOTA\n"));293 goto cleanup;294 }295 296 if (cli_is_error(cli)) {297 ret = False;298 goto cleanup;299 } else {300 ret = True;301 249 } 302 250 303 251 if (rdata_count == 0) { 304 252 *pqt_list = NULL; 305 return True;253 return NT_STATUS_OK; 306 254 } 307 255 308 256 if ((mem_ctx=talloc_init("SMB_USER_QUOTA_LIST"))==NULL) { 309 257 DEBUG(0,("talloc_init() failed\n")); 310 return (-1);258 return NT_STATUS_NO_MEMORY; 311 259 } 312 260 … … 316 264 curdata +=offset,curdata_count -= offset) { 317 265 ZERO_STRUCT(qt); 318 if (!parse_user_quota_record(curdata, curdata_count, &offset, &qt)) { 266 if (!parse_user_quota_record((uint8_t *)curdata, curdata_count, 267 &offset, &qt)) { 319 268 DEBUG(1,("Failed to parse the quota record\n")); 320 269 goto cleanup; … … 324 273 DEBUG(0,("TALLOC_ZERO() failed\n")); 325 274 talloc_destroy(mem_ctx); 326 return (-1);275 return NT_STATUS_NO_MEMORY; 327 276 } 328 277 … … 330 279 DEBUG(0,("TALLOC_ZERO() failed\n")); 331 280 talloc_destroy(mem_ctx); 332 return (-1);281 return NT_STATUS_NO_MEMORY; 333 282 } 334 283 … … 341 290 SSVAL(params, 2,TRANSACT_GET_USER_QUOTA_LIST_CONTINUE); 342 291 while(1) { 343 if (!cli_send_nt_trans(cli, 344 NT_TRANSACT_GET_USER_QUOTA, 345 0, 346 &setup, 1, 0, 347 params, 16, 4, 348 NULL, 0, 2048)) { 349 DEBUG(1,("Failed to send NT_TRANSACT_GET_USER_QUOTA\n")); 292 293 TALLOC_FREE(rparam); 294 TALLOC_FREE(rdata); 295 296 status = cli_trans(talloc_tos(), cli, SMBnttrans, 297 NULL, -1, /* name, fid */ 298 NT_TRANSACT_GET_USER_QUOTA, 0, 299 setup, 1, 0, /* setup */ 300 params, 16, 4, /* params */ 301 NULL, 0, 2048, /* data */ 302 NULL, /* recv_flags2 */ 303 NULL, 0, NULL, /* rsetup */ 304 &rparam, 0, &rparam_count, 305 &rdata, 0, &rdata_count); 306 307 if (!NT_STATUS_IS_OK(status)) { 308 DEBUG(1, ("NT_TRANSACT_GET_USER_QUOTA failed: %s\n", 309 nt_errstr(status))); 350 310 goto cleanup; 351 311 } 352 312 353 SAFE_FREE(rparam);354 SAFE_FREE(rdata);355 if (!cli_receive_nt_trans(cli,356 &rparam, &rparam_count,357 &rdata, &rdata_count)) {358 DEBUG(1,("Failed to recv NT_TRANSACT_GET_USER_QUOTA\n"));359 goto cleanup;360 }361 362 if (cli_is_error(cli)) {363 ret = False;364 goto cleanup;365 } else {366 ret = True;367 }368 369 313 if (rdata_count == 0) { 370 break; 314 break; 371 315 } 372 316 … … 376 320 curdata +=offset,curdata_count -= offset) { 377 321 ZERO_STRUCT(qt); 378 if (!parse_user_quota_record(curdata, curdata_count, &offset, &qt)) { 322 if (!parse_user_quota_record((uint8_t *)curdata, 323 curdata_count, &offset, 324 &qt)) { 379 325 DEBUG(1,("Failed to parse the quota record\n")); 380 326 goto cleanup; … … 400 346 } 401 347 402 403 ret = True;404 348 cleanup: 405 SAFE_FREE(rparam);406 SAFE_FREE(rdata);407 408 return ret;409 } 410 411 bool cli_get_fs_quota_info(struct cli_state *cli, int quota_fnum, SMB_NTQUOTA_STRUCT *pqt) 412 { 413 bool ret = False; 414 uint16 setup;415 charparam[2];416 char *rparam=NULL,*rdata=NULL;417 u nsigned int rparam_count=0,rdata_count=0;349 TALLOC_FREE(rparam); 350 TALLOC_FREE(rdata); 351 352 return status; 353 } 354 355 NTSTATUS cli_get_fs_quota_info(struct cli_state *cli, int quota_fnum, 356 SMB_NTQUOTA_STRUCT *pqt) 357 { 358 uint16_t setup[1]; 359 uint8_t param[2]; 360 uint8_t *rdata=NULL; 361 uint32_t rdata_count=0; 418 362 SMB_NTQUOTA_STRUCT qt; 363 NTSTATUS status; 364 419 365 ZERO_STRUCT(qt); 420 366 … … 423 369 } 424 370 425 setup = TRANSACT2_QFSINFO;371 SSVAL(setup + 0, 0, TRANSACT2_QFSINFO); 426 372 427 373 SSVAL(param,0,SMB_FS_QUOTA_INFORMATION); 428 374 429 if (!cli_send_trans(cli, SMBtrans2, 430 NULL, 431 0, 0, 432 &setup, 1, 0, 433 param, 2, 0, 434 NULL, 0, 560)) { 435 goto cleanup; 436 } 437 438 if (!cli_receive_trans(cli, SMBtrans2, 439 &rparam, &rparam_count, 440 &rdata, &rdata_count)) { 441 goto cleanup; 442 } 443 444 if (cli_is_error(cli)) { 445 ret = False; 446 goto cleanup; 447 } else { 448 ret = True; 449 } 450 451 if (rdata_count < 48) { 452 goto cleanup; 375 status = cli_trans(talloc_tos(), cli, SMBtrans2, 376 NULL, -1, /* name, fid */ 377 0, 0, /* function, flags */ 378 setup, 1, 0, /* setup */ 379 param, 2, 0, /* param */ 380 NULL, 0, 560, /* data */ 381 NULL, /* recv_flags2 */ 382 NULL, 0, NULL, /* rsetup */ 383 NULL, 0, NULL, /* rparam */ 384 &rdata, 48, &rdata_count); 385 386 if (!NT_STATUS_IS_OK(status)) { 387 DEBUG(1, ("SMB_FS_QUOTA_INFORMATION failed: %s\n", 388 nt_errstr(status))); 389 return status; 453 390 } 454 391 … … 456 393 457 394 /* the soft quotas 8 bytes (uint64_t)*/ 458 qt.softlim = (uint64_t)IVAL(rdata,24); 459 #ifdef LARGE_SMB_OFF_T 460 qt.softlim |= (((uint64_t)IVAL(rdata,28)) << 32); 461 #else /* LARGE_SMB_OFF_T */ 462 if ((IVAL(rdata,28) != 0)&& 463 ((qt.softlim != 0xFFFFFFFF)|| 464 (IVAL(rdata,28)!=0xFFFFFFFF))) { 465 /* more than 32 bits? */ 466 goto cleanup; 467 } 468 #endif /* LARGE_SMB_OFF_T */ 395 qt.softlim = BVAL(rdata,24); 469 396 470 397 /* the hard quotas 8 bytes (uint64_t)*/ 471 qt.hardlim = (uint64_t)IVAL(rdata,32); 472 #ifdef LARGE_SMB_OFF_T 473 qt.hardlim |= (((uint64_t)IVAL(rdata,36)) << 32); 474 #else /* LARGE_SMB_OFF_T */ 475 if ((IVAL(rdata,36) != 0)&& 476 ((qt.hardlim != 0xFFFFFFFF)|| 477 (IVAL(rdata,36)!=0xFFFFFFFF))) { 478 /* more than 32 bits? */ 479 goto cleanup; 480 } 481 #endif /* LARGE_SMB_OFF_T */ 398 qt.hardlim = BVAL(rdata,32); 482 399 483 400 /* quota_flags 2 bytes **/ … … 488 405 *pqt = qt; 489 406 490 ret = True; 491 cleanup: 492 SAFE_FREE(rparam); 493 SAFE_FREE(rdata); 494 495 return ret; 496 } 497 498 bool cli_set_fs_quota_info(struct cli_state *cli, int quota_fnum, SMB_NTQUOTA_STRUCT *pqt) 499 { 500 bool ret = False; 501 uint16 setup; 502 char param[4]; 503 char data[48]; 504 char *rparam=NULL, *rdata=NULL; 505 unsigned int rparam_count=0, rdata_count=0; 407 TALLOC_FREE(rdata); 408 return status; 409 } 410 411 NTSTATUS cli_set_fs_quota_info(struct cli_state *cli, int quota_fnum, 412 SMB_NTQUOTA_STRUCT *pqt) 413 { 414 uint16_t setup[1]; 415 uint8_t param[4]; 416 uint8_t data[48]; 506 417 SMB_NTQUOTA_STRUCT qt; 418 NTSTATUS status; 507 419 ZERO_STRUCT(qt); 508 420 memset(data,'\0',48); … … 512 424 } 513 425 514 setup = TRANSACT2_SETFSINFO;426 SSVAL(setup + 0, 0,TRANSACT2_SETFSINFO); 515 427 516 428 SSVAL(param,0,quota_fnum); … … 530 442 /* Unknown3 6 NULL bytes */ 531 443 532 if (!cli_send_trans(cli, SMBtrans2, 533 NULL, 534 0, 0, 535 &setup, 1, 0, 536 param, 4, 0, 537 data, 48, 0)) { 538 goto cleanup; 539 } 540 541 if (!cli_receive_trans(cli, SMBtrans2, 542 &rparam, &rparam_count, 543 &rdata, &rdata_count)) { 544 goto cleanup; 545 } 546 547 if (cli_is_error(cli)) { 548 ret = False; 549 goto cleanup; 550 } else { 551 ret = True; 552 } 553 554 cleanup: 555 SAFE_FREE(rparam); 556 SAFE_FREE(rdata); 557 558 return ret; 559 } 560 561 static const char *quota_str_static(uint64_t val, bool special, bool _numeric) 562 { 563 const char *result; 564 565 if (!_numeric&&special&&(val == SMB_NTQUOTAS_NO_LIMIT)) { 566 return "NO LIMIT"; 567 } 568 result = talloc_asprintf(talloc_tos(), "%"PRIu64, val); 569 SMB_ASSERT(result != NULL); 570 return result; 571 } 572 573 void dump_ntquota(SMB_NTQUOTA_STRUCT *qt, bool _verbose, bool _numeric, void (*_sidtostring)(fstring str, DOM_SID *sid, bool _numeric)) 574 { 575 TALLOC_CTX *frame = talloc_stackframe(); 576 577 if (!qt) { 578 smb_panic("dump_ntquota() called with NULL pointer"); 579 } 580 581 switch (qt->qtype) { 582 case SMB_USER_FS_QUOTA_TYPE: 583 { 584 d_printf("File System QUOTAS:\n"); 585 d_printf("Limits:\n"); 586 d_printf(" Default Soft Limit: %15s\n",quota_str_static(qt->softlim,True,_numeric)); 587 d_printf(" Default Hard Limit: %15s\n",quota_str_static(qt->hardlim,True,_numeric)); 588 d_printf("Quota Flags:\n"); 589 d_printf(" Quotas Enabled: %s\n", 590 ((qt->qflags"AS_ENABLED)||(qt->qflags"AS_DENY_DISK))?"On":"Off"); 591 d_printf(" Deny Disk: %s\n",(qt->qflags"AS_DENY_DISK)?"On":"Off"); 592 d_printf(" Log Soft Limit: %s\n",(qt->qflags"AS_LOG_THRESHOLD)?"On":"Off"); 593 d_printf(" Log Hard Limit: %s\n",(qt->qflags"AS_LOG_LIMIT)?"On":"Off"); 594 } 595 break; 596 case SMB_USER_QUOTA_TYPE: 597 { 598 fstring username_str = {0}; 599 600 if (_sidtostring) { 601 _sidtostring(username_str,&qt->sid,_numeric); 602 } else { 603 sid_to_fstring(username_str, &qt->sid); 604 } 605 606 if (_verbose) { 607 d_printf("Quotas for User: %s\n",username_str); 608 d_printf("Used Space: %15s\n",quota_str_static(qt->usedspace,False,_numeric)); 609 d_printf("Soft Limit: %15s\n",quota_str_static(qt->softlim,True,_numeric)); 610 d_printf("Hard Limit: %15s\n",quota_str_static(qt->hardlim,True,_numeric)); 611 } else { 612 d_printf("%-30s: ",username_str); 613 d_printf("%15s/",quota_str_static(qt->usedspace,False,_numeric)); 614 d_printf("%15s/",quota_str_static(qt->softlim,True,_numeric)); 615 d_printf("%15s\n",quota_str_static(qt->hardlim,True,_numeric)); 616 } 617 } 618 break; 619 default: 620 d_printf("dump_ntquota() invalid qtype(%d)\n",qt->qtype); 621 } 622 TALLOC_FREE(frame); 623 return; 624 } 625 626 void dump_ntquota_list(SMB_NTQUOTA_LIST **qtl, bool _verbose, bool _numeric, void (*_sidtostring)(fstring str, DOM_SID *sid, bool _numeric)) 627 { 628 SMB_NTQUOTA_LIST *cur; 629 630 for (cur = *qtl;cur;cur = cur->next) { 631 if (cur->quotas) 632 dump_ntquota(cur->quotas,_verbose,_numeric,_sidtostring); 633 } 634 } 444 status = cli_trans(talloc_tos(), cli, SMBtrans2, 445 NULL, -1, /* name, fid */ 446 0, 0, /* function, flags */ 447 setup, 1, 0, /* setup */ 448 param, 8, 0, /* param */ 449 data, 48, 0, /* data */ 450 NULL, /* recv_flags2 */ 451 NULL, 0, NULL, /* rsetup */ 452 NULL, 0, NULL, /* rparam */ 453 NULL, 0, NULL); /* rdata */ 454 455 if (!NT_STATUS_IS_OK(status)) { 456 DEBUG(1, ("SMB_FS_QUOTA_INFORMATION failed: %s\n", 457 nt_errstr(status))); 458 } 459 460 return status; 461 }
Note:
See TracChangeset
for help on using the changeset viewer.