IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Changeset 24291


Ignore:
Timestamp:
Jun 1, 2009, 3:53:59 PM (17 years ago)
Author:
jhoblitt
Message:

restrict creation/modification/remove of xattrs to the user.* namespace

Location:
trunk/Nebulous-Server
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/Nebulous-Server/Changes

    r24276 r24291  
    22
    330.17
     4    - restrict creation/modification/remove of xattrs to the user.* namespace
    45    - add chmod_object() method
    56    - retry database transactions when a deadlock is detected
  • trunk/Nebulous-Server/lib/Nebulous/Server.pm

    r24276 r24291  
    740740    }
    741741
     742    # check to see if the user.mode xattr exists
     743
    742744    $log->debug("leaving");
    743745
     
    982984        {
    983985            type        => SCALAR,
     986            callbacks   => {
     987                'xattr is in user. namespace'
     988                    => sub { ($_[0]) =~ qr/^user\./ },
     989            },
    984990        },
    985991        {
     
    10651071        {
    10661072            type        => SCALAR,
     1073            callbacks   => {
     1074                'xattr is in user. namespace'
     1075                    => sub { ($_[0]) =~ qr/^user\./ },
     1076            },
    10671077        },
    10681078    );
     
    11611171        {
    11621172            type        => SCALAR,
     1173            callbacks   => {
     1174                'xattr is in user. namespace'
     1175                    => sub { ($_[0]) =~ qr/^user\./ },
     1176            },
    11631177        },
    11641178    );
     
    11801194            $query->finish;
    11811195
     1196            # no rows affected means the xattr did not exist
     1197            if ($rows == 0) {
     1198                $log->logdie( "xattr $key:$name does not exist" );
     1199            }
     1200
    11821201            # if we affected more then one row something very bad has happened.
    1183             unless ($rows == 1) {
     1202            if ($rows > 1) {
    11841203                $log->logdie( "affected row count is $rows instead of 1" );
    11851204            }
  • trunk/Nebulous-Server/t/14_server_xattr.t

    r18451 r24291  
    88use warnings FATAL => qw( all );
    99
    10 use Test::More tests => 36;
     10use Test::More tests => 44;
    1111
    1212use lib qw( ./t ./lib );
     
    2828    my $uri = $neb->create_object('foo');
    2929
    30     ok($neb->setxattr_object('foo', 'bar', 'baz', 'create'), 'set object xattr');
     30    ok($neb->setxattr_object('foo', 'user.bar', 'baz', 'create'), 'set object xattr');
    3131    {
    3232        my $xattrs = $neb->listxattr_object('foo');
    3333        is(scalar @$xattrs, 1, 'number of xattrs');
    34         is(@$xattrs[0], 'bar', 'xattr name');
    35     }
    36 
    37     my $value = $neb->getxattr_object('foo', 'bar');
     34        is(@$xattrs[0], 'user.bar', 'xattr name');
     35    }
     36
     37    my $value = $neb->getxattr_object('foo', 'user.bar');
    3838    is($value, 'baz', 'xattr value');
    3939
    40     ok($neb->removexattr_object('foo', 'bar'), "remove object xattr");
     40    ok($neb->removexattr_object('foo', 'user.bar'), "remove object xattr");
    4141    {
    4242        my $xattrs = $neb->listxattr_object('foo');
     
    5252    my $uri = $neb->create_object('foo');
    5353
    54     ok($neb->setxattr_object('foo', 'bar', 'baz', 'create'), 'set object xattr');
    55     ok($neb->setxattr_object('foo', 'bonk', 'quix', 'create'), 'set object xattr');
     54    ok($neb->setxattr_object('foo', 'user.bar', 'baz', 'create'), 'set object xattr');
     55    ok($neb->setxattr_object('foo', 'user.bonk', 'quix', 'create'), 'set object xattr');
    5656   
    5757    {
    5858        my $xattrs = $neb->listxattr_object('foo');
    5959        is(scalar @$xattrs, 2, 'number of xattrs');
    60         is(@$xattrs[0], 'bar', 'xattr name');
    61         is(@$xattrs[1], 'bonk', 'xattr name');
    62     }
    63 
    64     my $value = $neb->getxattr_object('foo', 'bar');
     60        is(@$xattrs[0], 'user.bar', 'xattr name');
     61        is(@$xattrs[1], 'user.bonk', 'xattr name');
     62    }
     63
     64    my $value = $neb->getxattr_object('foo', 'user.bar');
    6565    is($value, 'baz', 'xattr value');
    66     $value = $neb->getxattr_object('foo', 'bonk');
     66    $value = $neb->getxattr_object('foo', 'user.bonk');
    6767    is($value, 'quix', 'xattr value');
    6868
    69     ok($neb->removexattr_object('foo', 'bar'), "remove object xattr");
    70     ok($neb->removexattr_object('foo', 'bonk'), "remove object xattr");
     69    ok($neb->removexattr_object('foo', 'user.bar'), "remove object xattr");
     70    ok($neb->removexattr_object('foo', 'user.bonk'), "remove object xattr");
    7171    {
    7272        my $xattrs = $neb->listxattr_object('foo');
     
    8282    my $uri = $neb->create_object('foo');
    8383
    84     ok($neb->setxattr_object('foo', 'bar', 'baz', 'create'), 'set object xattr');
    85     ok($neb->setxattr_object('foo', 'bar', 'quix', 'replace'), 're-set object xattr');
     84    ok($neb->setxattr_object('foo', 'user.bar', 'baz', 'create'), 'set object xattr');
     85    ok($neb->setxattr_object('foo', 'user.bar', 'quix', 'replace'), 're-set object xattr');
    8686   
    8787    {
    8888        my $xattrs = $neb->listxattr_object('foo');
    8989        is(scalar @$xattrs, 1, 'number of xattrs');
    90         is(@$xattrs[0], 'bar', 'xattr name');
    91     }
    92 
    93     my $value = $neb->getxattr_object('foo', 'bar');
     90        is(@$xattrs[0], 'user.bar', 'xattr name');
     91    }
     92
     93    my $value = $neb->getxattr_object('foo', 'user.bar');
    9494    is($value, 'quix', 'xattr value');
    9595
    96     ok($neb->removexattr_object('foo', 'bar'), "remove object xattr");
     96    ok($neb->removexattr_object('foo', 'user.bar'), "remove object xattr");
    9797    {
    9898        my $xattrs = $neb->listxattr_object('foo');
     
    106106
    107107eval {
    108     $neb->setxattr_object('foo', 'bar', 'baz', 'create');
     108    $neb->setxattr_object('foo', 'user.bar', 'baz', 'create');
    109109};
    110110like($@, qr/is valid object key/, "create xattr on non-existant key");
    111111
    112 eval {
    113     $neb->setxattr_object('foo', 'bar', 'baz', 'replace');
     112Test::Nebulous->setup;
     113
     114eval {
     115    $neb->create_object('foo');
     116
     117    $neb->setxattr_object('foo', 'luser.bar', 'baz', 'create');
     118};
     119like($@, qr/xattr is in user. namespace/, "user. namspace");
     120
     121Test::Nebulous->setup;
     122
     123eval {
     124    $neb->setxattr_object('foo', 'user.bar', 'baz', 'replace');
    114125};
    115126like($@, qr/is valid object key/, "replace xattr on non-existant key");
     
    127138    $neb->create_object('foo');
    128139
    129     $neb->setxattr_object('foo', 'bar');
     140    $neb->setxattr_object('foo', 'user.bar');
    130141};
    131142like($@, qr/4 were expected/, "too few params");
     
    136147    $neb->create_object('foo');
    137148
    138     $neb->setxattr_object('foo', 'bar', 'baz');
     149    $neb->setxattr_object('foo', 'user.bar', 'baz');
    139150};
    140151like($@, qr/4 were expected/, "too few params");
     
    145156    $neb->create_object('foo');
    146157
    147     $neb->setxattr_object('foo', 'bar', 'baz', 'create', 'quix');
     158    $neb->setxattr_object('foo', 'user.bar', 'baz', 'create', 'quix');
    148159};
    149160like($@, qr/4 were expected/, "too many params");
     
    162173eval {
    163174    $neb->create_object('foo');
    164     $neb->getxattr_object('foo', 'bar');
    165 };
    166 like($@, qr|xattr neb:///foo:bar does not exist|,
     175
     176    $neb->getxattr_object('foo', 'luser.bar');
     177};
     178like($@, qr/xattr is in user. namespace/, "user. namespace");
     179
     180Test::Nebulous->setup;
     181
     182eval {
     183    $neb->create_object('foo');
     184    $neb->getxattr_object('foo', 'user.bar');
     185};
     186like($@, qr|xattr neb:///foo:user.bar does not exist|,
    167187    "get xattr from non-existant xattr key");
    168188
     
    188208    $neb->create_object('foo');
    189209
    190     $neb->getxattr_object('foo', 'bar', 'baz');
     210    $neb->getxattr_object('foo', 'user.bar', 'baz');
    191211};
    192212like($@, qr/2 were expected/, "too many params");
     
    212232like($@, qr/1 was expected/, "too many params");
    213233
     234# removexattr_object
     235
     236Test::Nebulous->setup;
     237
     238eval {
     239    $neb->removexattr_object('foo', 'user.bar');
     240};
     241like($@, qr/is valid object key/, "remove xattr from non-existant nebulous key");
     242
     243Test::Nebulous->setup;
     244
     245eval {
     246    $neb->create_object('foo');
     247
     248    $neb->getxattr_object('foo', 'luser.bar');
     249};
     250like($@, qr/xattr is in user. namespace/, "user. namespace");
     251
     252Test::Nebulous->setup;
     253
     254eval {
     255    $neb->create_object('foo');
     256    $neb->removexattr_object('foo', 'user.bar');
     257};
     258like($@, qr|xattr neb:///foo:user.bar does not exist|,
     259    "remove xattr from non-existant xattr key");
     260
     261Test::Nebulous->setup;
     262
     263eval {
     264    $neb->removexattr_object();
     265};
     266like($@, qr/2 were expected/, "no params");
     267
     268Test::Nebulous->setup;
     269
     270eval {
     271    $neb->create_object('foo');
     272
     273    $neb->removexattr_object('foo');
     274};
     275like($@, qr/2 were expected/, "too few params");
     276
     277Test::Nebulous->setup;
     278
     279eval {
     280    $neb->create_object('foo');
     281
     282    $neb->removexattr_object('foo', 'user.bar', 'baz');
     283};
     284like($@, qr/2 were expected/, "too many params");
     285
    214286Test::Nebulous->cleanup;
Note: See TracChangeset for help on using the changeset viewer.