Ignore:
Timestamp:
Nov 14, 2012, 12:59:34 PM (13 years ago)
Author:
Silvan Scherrer
Message:

Samba Server: update vendor to 3.6.0

File:
1 edited

Legend:

Unmodified
Added
Removed
  • vendor/current/source3/libsmb/cliquota.c

    r581 r740  
    1919
    2020#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"
    2126
    2227NTSTATUS cli_get_quota_handle(struct cli_state *cli, uint16_t *quota_fnum)
     
    4146}
    4247
    43 static bool parse_user_quota_record(const char *rdata, unsigned int rdata_count, unsigned int *offset, SMB_NTQUOTA_STRUCT *pqt)
     48static bool parse_user_quota_record(const uint8_t *rdata,
     49                                    unsigned int rdata_count,
     50                                    unsigned int *offset,
     51                                    SMB_NTQUOTA_STRUCT *pqt)
    4452{
    4553        int sid_len;
     
    7482
    7583        /* 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);
    8785
    8886        /* 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);
    10088
    10189        /* 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)) {
    11593                return false;
    11694        }
     
    123101}
    124102
    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         char params[16];
     103NTSTATUS 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];
    130108        unsigned int data_len;
    131         char data[SID_MAX_SIZE+8];
    132         char *rparam=NULL, *rdata=NULL;
    133         unsigned 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;
    134112        unsigned int sid_len;
    135113        unsigned int offset;
     114        NTSTATUS status;
    136115
    137116        if (!cli||!pqt) {
     
    139118        }
    140119
    141         setup = NT_TRANSACT_GET_USER_QUOTA;
     120        SSVAL(setup + 0, 0, NT_TRANSACT_GET_USER_QUOTA);
    142121
    143122        SSVAL(params, 0,quota_fnum);
     
    147126        SIVAL(params,12,0x00000024);
    148127
    149         sid_len = ndr_size_dom_sid(&pqt->sid, NULL, 0);
     128        sid_len = ndr_size_dom_sid(&pqt->sid, 0);
    150129        data_len = sid_len+8;
    151130        SIVAL(data, 0, 0x00000000);
    152131        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;
    183152                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
     160NTSTATUS 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];
    201166        unsigned int sid_len;   
     167        NTSTATUS status;
     168
    202169        memset(data,'\0',112);
    203170
     
    206173        }
    207174
    208         setup = NT_TRANSACT_SET_USER_QUOTA;
     175        SSVAL(setup + 0, 0, NT_TRANSACT_SET_USER_QUOTA);
    209176
    210177        SSVAL(params,0,quota_fnum);
    211178
    212         sid_len = ndr_size_dom_sid(&pqt->sid, NULL, 0);
     179        sid_len = ndr_size_dom_sid(&pqt->sid, 0);
    213180        SIVAL(data,0,0);
    214181        SIVAL(data,4,sid_len);
     
    217184        SBIG_UINT(data,24,pqt->softlim);
    218185        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
     207NTSTATUS 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;
    259214        unsigned int offset;
    260         const char *curdata = NULL;
     215        const uint8_t *curdata = NULL;
    261216        unsigned int curdata_count = 0;
    262217        TALLOC_CTX *mem_ctx = NULL;
    263218        SMB_NTQUOTA_STRUCT qt;
    264219        SMB_NTQUOTA_LIST *tmp_list_ent;
     220        NTSTATUS status;
    265221
    266222        if (!cli||!pqt_list) {
     
    268224        }
    269225
    270         setup = NT_TRANSACT_GET_USER_QUOTA;
     226        SSVAL(setup + 0, 0, NT_TRANSACT_GET_USER_QUOTA);
    271227
    272228        SSVAL(params, 0,quota_fnum);
     
    276232        SIVAL(params,12,0x00000000);
    277233
    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)));
    285248                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;
    301249        }
    302250
    303251        if (rdata_count == 0) {
    304252                *pqt_list = NULL;
    305                 return True;
     253                return NT_STATUS_OK;
    306254        }
    307255
    308256        if ((mem_ctx=talloc_init("SMB_USER_QUOTA_LIST"))==NULL) {
    309257                DEBUG(0,("talloc_init() failed\n"));
    310                 return (-1);
     258                return NT_STATUS_NO_MEMORY;
    311259        }
    312260
     
    316264                curdata +=offset,curdata_count -= offset) {
    317265                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)) {
    319268                        DEBUG(1,("Failed to parse the quota record\n"));
    320269                        goto cleanup;
     
    324273                        DEBUG(0,("TALLOC_ZERO() failed\n"));
    325274                        talloc_destroy(mem_ctx);
    326                         return (-1);
     275                        return NT_STATUS_NO_MEMORY;
    327276                }
    328277
     
    330279                        DEBUG(0,("TALLOC_ZERO() failed\n"));
    331280                        talloc_destroy(mem_ctx);
    332                         return (-1);
     281                        return NT_STATUS_NO_MEMORY;
    333282                }
    334283
     
    341290        SSVAL(params, 2,TRANSACT_GET_USER_QUOTA_LIST_CONTINUE);
    342291        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)));
    350310                        goto cleanup;
    351311                }
    352312
    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 
    369313                if (rdata_count == 0) {
    370                         break; 
     314                        break;
    371315                }
    372316
     
    376320                        curdata +=offset,curdata_count -= offset) {
    377321                        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)) {
    379325                                DEBUG(1,("Failed to parse the quota record\n"));
    380326                                goto cleanup;
     
    400346        }
    401347
    402 
    403         ret = True;
    404348 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         char param[2];
    416         char *rparam=NULL, *rdata=NULL;
    417         unsigned int rparam_count=0, rdata_count=0;
     349        TALLOC_FREE(rparam);
     350        TALLOC_FREE(rdata);
     351
     352        return status;
     353}
     354
     355NTSTATUS 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;
    418362        SMB_NTQUOTA_STRUCT qt;
     363        NTSTATUS status;
     364
    419365        ZERO_STRUCT(qt);
    420366
     
    423369        }
    424370
    425         setup = TRANSACT2_QFSINFO;
     371        SSVAL(setup + 0, 0, TRANSACT2_QFSINFO);
    426372
    427373        SSVAL(param,0,SMB_FS_QUOTA_INFORMATION);
    428374
    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;
    453390        }
    454391
     
    456393
    457394        /* 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);
    469396
    470397        /* 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);
    482399
    483400        /* quota_flags 2 bytes **/
     
    488405        *pqt = qt;
    489406
    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
     411NTSTATUS 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];
    506417        SMB_NTQUOTA_STRUCT qt;
     418        NTSTATUS status;
    507419        ZERO_STRUCT(qt);
    508420        memset(data,'\0',48);
     
    512424        }
    513425
    514         setup = TRANSACT2_SETFSINFO;
     426        SSVAL(setup + 0, 0,TRANSACT2_SETFSINFO);
    515427
    516428        SSVAL(param,0,quota_fnum);
     
    530442        /* Unknown3 6 NULL bytes */
    531443
    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&QUOTAS_ENABLED)||(qt->qflags&QUOTAS_DENY_DISK))?"On":"Off");
    591                                 d_printf(" Deny Disk:      %s\n",(qt->qflags&QUOTAS_DENY_DISK)?"On":"Off");
    592                                 d_printf(" Log Soft Limit: %s\n",(qt->qflags&QUOTAS_LOG_THRESHOLD)?"On":"Off");
    593                                 d_printf(" Log Hard Limit: %s\n",(qt->qflags&QUOTAS_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.