# Safe Level checking

**URL:** <https://www.ruby-forum.com/t/safe-level-checking/134012>\
**Category:** IronRuby\
**Created:** [April 6, 2008, 3:55pm UTC](https://www.ruby-forum.com/t/safe-level-checking/134012 "2008-04-06T15:55:50Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![editkid](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/e/977dab/32.png) [@editkid](https://www.ruby-forum.com/u/editkid)\
**Post date:** [April 6, 2008, 3:55pm UTC](https://www.ruby-forum.com/t/safe-level-checking/134012/1 "2008-04-06T15:55:50Z")

</div>

The Sockets library does a lot of Security checking, i.e. Is the  
SafeLevel  
too high for this action. It may be helpful to be able to specify this  
kind  
of thing as an attribute on the method.

Something like:

```
    [RubyMethod("getsockopt")]

    [RubySafeLevel(2)]

    public static MutableString GetSocketOption(CodeContext/*!*/

```

context, RubyBasicSocket/_!_/ self, object/_Numeric_/ level,  
object/_Numeric_/ optname) {

Rather than:

```
    [RubyMethod("getsockopt")]

    public static MutableString GetSocketOption(CodeContext/*!*/

```

context, RubyBasicSocket/_!_/ self, object/_Numeric_/ level,  
object/_Numeric_/ optname) {

```
        Protocols.CheckSafeLevel(context, 2, "getsockopt");

        ...

    }

```

Or maybe even more cleverly integrate it into the .NET security  
permissions  
attributes.

What do you think?

Pete

---

<div class="post-metadata">

**Author:** ![editkid](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/e/977dab/32.png) [@editkid](https://www.ruby-forum.com/u/editkid)\
**Post date:** [April 6, 2008, 6:26pm UTC](https://www.ruby-forum.com/t/safe-level-checking/134012/2 "2008-04-06T18:26:26Z")

</div>

We don’t care about safe level now, so you can just ignore it. I doubt  
it is necessary to implement this feature at all. IronRuby doesn’t  
contain any unsafe code. Hence CLR checks are always present regardless  
of what we check, so your code cannot do anything that is disallowed by  
CLR security system. We can only disable Ruby calls to some methods.  
And that would be a real security restriction only in a mode that would  
disable all .NET calls, because otherwise you could always call your C#  
code that performs the call.

Tomas

From: removed\_email\_address@domain.invalid  
[[mailto:removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)] On Behalf Of Peter Bacon  
Darwin  
Sent: Sunday, April 06, 2008 6:47 AM  
To: removed\_email\_address@domain.invalid  
Subject: [Ironruby-core] Safe Level checking

The Sockets library does a lot of Security checking, i.e. Is the  
SafeLevel too high for this action. It may be helpful to be able to  
specify this kind of thing as an attribute on the method.  
Something like:

```
    [RubyMethod("getsockopt")]
    [RubySafeLevel(2)]
    public static MutableString GetSocketOption(CodeContext/*!*/ 

```

context, RubyBasicSocket/_!_/ self, object/_Numeric_/ level,  
object/_Numeric_/ optname) {

Rather than:

```
    [RubyMethod("getsockopt")]
    public static MutableString GetSocketOption(CodeContext/*!*/ 

```

context, RubyBasicSocket/_!_/ self, object/_Numeric_/ level,  
object/_Numeric_/ optname) {  
Protocols.CheckSafeLevel(context, 2, “getsockopt”);  
…  
}

Or maybe even more cleverly integrate it into the .NET security  
permissions attributes.  
What do you think?  
Pete

---

<div class="post-metadata">

**Author:** ![editkid](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/e/977dab/32.png) [@editkid](https://www.ruby-forum.com/u/editkid)\
**Post date:** [April 6, 2008, 8:14pm UTC](https://www.ruby-forum.com/t/safe-level-checking/134012/3 "2008-04-06T20:14:29Z")

</div>

OK that makes sense. Does it apply to tainting objects too?

Pete

From: removed\_email\_address@domain.invalid  
[[mailto:removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)] On Behalf Of Tomas M.  
Sent: Sunday,06 April 06, 2008 17:25  
To: removed\_email\_address@domain.invalid  
Subject: Re: [Ironruby-core] Safe Level checking

We don’t care about safe level now, so you can just ignore it. I doubt  
it is  
necessary to implement this feature at all. IronRuby doesn’t contain any  
unsafe code. Hence CLR checks are always present regardless of what we  
check, so your code cannot do anything that is disallowed by CLR  
security  
system. We can only disable Ruby calls to some methods. And that would  
be a  
real security restriction only in a mode that would disable all .NET  
calls,  
because otherwise you could always call your C# code that performs the  
call.

Tomas

From: removed\_email\_address@domain.invalid  
[[mailto:removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)] On Behalf Of Peter Bacon  
Darwin  
Sent: Sunday, April 06, 2008 6:47 AM  
To: removed\_email\_address@domain.invalid  
Subject: [Ironruby-core] Safe Level checking

The Sockets library does a lot of Security checking, i.e. Is the  
SafeLevel  
too high for this action. It may be helpful to be able to specify this  
kind  
of thing as an attribute on the method.

Something like:

```
    [RubyMethod("getsockopt")]

    [RubySafeLevel(2)]

    public static MutableString GetSocketOption(CodeContext/*!*/

```

context, RubyBasicSocket/_!_/ self, object/_Numeric_/ level,  
object/_Numeric_/ optname) {

Rather than:

```
    [RubyMethod("getsockopt")]

    public static MutableString GetSocketOption(CodeContext/*!*/

```

context, RubyBasicSocket/_!_/ self, object/_Numeric_/ level,  
object/_Numeric_/ optname) {

```
        Protocols.CheckSafeLevel(context, 2, "getsockopt");

        ...

    }

```

Or maybe even more cleverly integrate it into the .NET security  
permissions  
attributes.

What do you think?

Pete
