![]() | |
#41
| |||||||||||||||||
| |||||||||||||||||
|
|
I understand what he's saying about bug-vs-feature but this functionality could have gone either way. If I open a file in one account and I actually want to reference it in another account, I shouldn't have to re-open it. To get to another account we use something like: execute "logto acct":@am:"do.something" A sub-footnote here is that the documentation states that on an |
|
When I come back I expect named common to be exactly as it was. Funny thing here, tony... your "as it was" is in fact NOT GUARANTEED. |
|
From a design perspective he's suggesting that in the new account we need to re-initialize common. When I come back do I need to re-init again? One can immediately imagine a stack where we push the current environment, do the logto, then pop on return - hell, this is what we used to do before we had the Execute/Perform statements. As you see, this is just getting more cumbersome by the minute. Consideration noted, but don't go off there... Any built-in |
|
In fact, the doc is quite explicit about this: "named common: FlashBASIC variable space used to store variables and arrays in the 'id'entified area which is only initialized at logon. Global common space is common for all levels of the same process (i.e., level pushes, executes, filetime bridges & indexes, etc.)" So, named common survives level pushing and executes, which is exactly what's happening when we Execute a Logto from BASIC. A "consistency"-argument here may not be a good one ( ie. just because |

|
In this case I think the doc does an adequate, though not great job of defining the expected behavior for someone who is familiar with the environment. What is not clear here, though implied, is that even when your program ends your named common survives. The doc doesn't say named common only lasts as long as you're still executing within the BASIC Runtime, it says it's initialized at logon. It continues to survive across logto from TCL and execution of other code - because we still have not gone through a full logoff/wrapup. In this respect someone might run a program later and say "whoe, I just started running these programs, why are my variables already initialized?" In this case, yes, this is a double-edged sword. But this is not a bug, it's useful behavior that was defined over a decade ago. The solution that was implemented wasn't "wrong", it was just one of a couple possibilities, and I happen to enjoy the way it works now. |
| ...and so you are left wondering why an application that has been working, all the sudden has a certain file being stepped on with data that should be in another file, or why data that you know to be on file is being reported as missing, etc. When bizzare symptoms like this occur, it's common to begin to suspect everything, including the environment. I don't see how this behavior can be so surprising to people and how something can suddenly break, etc. I don't think you're giving people enough credit. Those who use named common know how it works, and until now we haven't seen any great wailing about this. (covered above)... it's not far-fetched... and all to common of a |
|
The doc seems to be pretty clear and apps have been working for a decade with the functionality as-is. Why all of a sudden are things going to suddenly start breaking and causing support issues? (ditto) in fact, you just fell into the trap! |
| ...on NT, a FLASHBASIC program does not share the NAMED COMMON created by that of a NON-FLASHED program... and conversely. IMO, this is a laziness and an implementation oversight (documented or not). Sure, someone at RD may have chased a path that a little performance gain could be made through cutting functionality. Again, chase the debugging exceptions on this! -- even if you have registered their documentation note. ![]() Non-flashed code is not compatible at all with flashed code. It's not that one thing or another doesn't work between them, these are in essence two completely different languages. Non-flashed code is interpreted by PVA and flashed code is run and interpreted in C. Flashed object comes in two pieces - the normal object code is generated, and then those tokens are flashed into a completely separate object area. COMPATIBILITY... STOP... fortunately, little things like the "file |
|
When non-flashed code calls to a flashed program, only the non-flashed object module gets executed. So your statement that the programs don't share common is questionable because there's no such thing as crossing from non-flash to flash anyway. The door is still open, however, if you can verify that the non-flashed component of a flashed object module is somehow incompatible with other non-flashed code. I doubt this is the case however - the non-flashed part of a flashed module is exactly the same as any other non-flashed object. Dump some frames if you don't believe me. Tony, hopefully the above answers some of this for you. You can always |
|
And for reference, if you call from flashed code to non-flashed the code will simply abort. The C runtime is trying to call to another C routine that simply doesn't exist. (That's not a bug, it's equivalent to using a CALL statement to execute a Proc.) If the flashed code is started using its non-flashed object, then you get a PVA-PVA call and everything should work fine. sigh>Trust me... interchangeable CALLING... was an implementation |
| ...You can also totally violate Pick's file security mechanism by opening a file in one account, storing its filevariable in named common, and then LOGTO another account and effectively have all permissions granted by the previous account -- A feature/security hole? I had to laugh at this one but I trust I just didn't understand it. If someone has a password to login to one account, and a password to login to another account, then how is it a security hole that they have access to both sides? especially on simply a password level, there's a difference between |
|
You're also assuming that someone can write, compile, and execute hazardous code in two different databases. not necessarily. however, not all account-environments on a pick |
|
It's not a security violation when someone who has completely open access into an environment actually uses the tools they have available. The problem as described is access to resources, not the resources themselves. First, to leverage the above vulnerability doesn't take "completely |
|
As usual, if you have problems with the way security has been implemented, contact your vendor. (I of course know you used to work at PS, Dave.) On one hand I'll say; apparently this hasn't been an issue for anyone since no one reports it. who knew about the vulnerability? however, if no one reports such, do |
|
On the other hand I'll say; if you guys do have these issues and you don't report them then you should be quite happy that you're getting from your vendor exactly what you ask for. <RD&C> Old argument, just fun to see it come up every couple days. groan |
| After all, most named common initial setups have a flag to indicate not-initialized, so all you'd have to do is set that flag. Again, I would venture that M-A-N-Y of those "initialization flags" are sensed using the "ASSIGNED()" function; second, there is regularly an application assumption of isolation of data structures/programming logic across PICK ACCOUNT-boundaries while maintaining common naming conventions for their "Named Commons". Especially, in such predictable scenarios, a mere initialization-flag would be useless without knowlege of the LOGTO anomaly. You make a very big assumption that applications don't have any initialization code to recognize when a user first logs into an account. This whole discussion is based on the view that developers aren't reading docs and aren't coding properly when they do. With all of the functional apps we have in this market I think that view isn't lending credit where it's due. if you use named common for an access report, do you necessarily |
|
T |
#42
| |||
| |||
|
|
Some final footnotes, below... (after that, i think i'm COMMONed out); the bottom line is... this has the makings of support nightmares. There's also ways to fix it so that it doesn't impact the small minority that might desire to utilize common across LOGTO-s. I had to laugh at this one but I trust I just didn't understand it. If someone has a password to login to one account, and a password to login to another account, then how is it a security hole that they have access to both sides? especially on simply a password level, there's a difference between partial access and carte blanche. let's assume you have a PAYROLL account (tightly secure) and for which you only have partial privileges (eg. those granted within the application). if the PAYROLL application stored critical information in a named-common (eg. TONY'S SALARY INFO; or opened a file-variable containing the SALARY INFO) and you could somehow LOGTO another account that was less secure... one for which you could utilize a variety of methods to get access to the NAMED-COMMON space which followed you... then in our example, you just got access to Tony's salary; or could, via the exposed file-pointer let you update the salary info regardless of what the application in the PAYROLL ACCOUNT might have otherwise controlled. |
#43
| ||||||
| ||||||
|
|
"dzigray" <google (AT) bridge2 (DOT) com> wrote in message especially on simply a password level, there's a difference between partial access and carte blanche. let's assume you have a PAYROLL account (tightly secure) and for which you only have partial privileges (eg. those granted within the application). if the PAYROLL application stored critical information in a named-common (eg. TONY'S SALARY INFO; or opened a file-variable containing the SALARY INFO) and you could somehow LOGTO another account that was less secure... one for which you could utilize a variety of methods to get access to the NAMED-COMMON space which followed you... then in our example, you just got access to Tony's salary; or could, via the exposed file-pointer let you update the salary info regardless of what the application in the PAYROLL ACCOUNT might have otherwise controlled. Excuse me, but how is this a problem? If you have the permission to change, compile and execute a progam in the secure PAYROLL account, it does not matter if you then logto another account or not. in my above example, how do you get that one has (or requires) either |
|
You can do anything you want with the Salary Info in the original account. the vulnerability occurs outside the PAYROLL account -- that which is |
|
If you have execute privileges only, this situation should not arise. even if you have execute-only privileges in BOTH accounts, there are |
|
And if you can't login to the PAYROLL account, you can't open the file... In all the years I've used named Common, I just know when I have to re-init Common and when not. It's pretty Basic. for sure, there's ways to minimize exposure here; but no matter what, |
|
If you want to be able to do *>LOGTO another.account (Ultimate or R83 debugger) and futz around, you're just asking for trouble if you don't take Common into account. that's the point... but importantly far from being limited to a |
|
But you should know that. Come to think of it this was forbidden. ? |
#44
| |||
| |||
|
|
Chandru Murthi wrote: "dzigray" <google (AT) bridge2 (DOT) com> wrote in message especially on simply a password level, there's a difference between partial access and carte blanche. let's assume you have a PAYROLL account (tightly secure) and for which you only have partial privileges (eg. those granted within the application). if the PAYROLL application stored critical information in a named-common (eg. TONY'S SALARY INFO; or opened a file-variable containing the SALARY INFO) and you could somehow LOGTO another account that was less secure... one for which you could utilize a variety of methods to get access to the NAMED-COMMON space which followed you... then in our example, you just got access to Tony's salary; or could, via the exposed file-pointer let you update the salary info regardless of what the application in the PAYROLL ACCOUNT might have otherwise controlled. Excuse me, but how is this a problem? If you have the permission to change, compile and execute a progam in the secure PAYROLL account, it does not matter if you then logto another account or not. in my above example, how do you get that one has (or requires) either change/compile-permissions in the secure PAYROLL account in order to exploit potential vulnerabilities? |
|
If you want to be able to do *>LOGTO another.account (Ultimate or R83 debugger) and futz around, you're just asking for trouble if you don't take Common into account. that's the point... but importantly far from being limited to a debugger exploit. But you should know that. Come to think of it this was forbidden. ? Oh not sure if LOGTO was allowed from BASIC debugger, or system debugger, |
#45
| |||
| |||
|
|
Excuse me, but how is this a problem? If you have the permission to change, compile and execute a progam in the secure PAYROLL account, it does not matter if you then logto another account or not. in my above example, how do you get that one has (or requires) either change/compile-permissions in the secure PAYROLL account in order to exploit potential vulnerabilities? because if you did not have the ability to change/compile, how do you create a program to do the logto? chandru! you're not trying hard enough: (1) even though I don't have |
|
re your other point, if you can recatalog a program with your own, you can basically open up anything by, as you said, causing the mainline and its common to crash. start there if it helps -- is that not a breach? |

#46
| |||
| |||
|
|
Some final footnotes, below... (after that, i think i'm COMMONed out); the bottom line is... this has the makings of support nightmares. There's also ways to fix it so that it doesn't impact the small minority that might desire to utilize common across LOGTO-s. |
#47
| |||
| |||
|
|
dzigray wrote: Some final footnotes, below... (after that, i think i'm COMMONed out); the bottom line is... this has the makings of support nightmares. There's also ways to fix it so that it doesn't impact the small minority that might desire to utilize common across LOGTO-s. I don't have time at present to respond to all your points, but may I say how very enjoyable it has been to follow your posts? You exhibit a clarity of thought that is not at all common, and your recollections from your days at Pick Systems seem equally clear. In the matter of named common, we are in complete agreement. snip |
#48
| |||
| |||
|
|
dzigray wrote: Some final footnotes, below... (after that, i think i'm COMMONed out); the bottom line is... this has the makings of support nightmares. There's also ways to fix it so that it doesn't impact the small minority that might desire to utilize common across LOGTO-s. I don't have time at present to respond to all your points, but may I say how very enjoyable it has been to follow your posts? You exhibit a clarity of thought that is not at all common, and your recollections from your days at Pick Systems seem equally clear. In the matter of named common, we are in complete agreement. It is a behaviour which has the potential to cause serious harm, and should therefore be addressed, even if that means retiring some "functionality" for those who've come to rely in this little peccadillo. Or at the very least, so kind of switch or option should be put in place to select the correct behaviour. As for EXECUTE 'LOGTO <account>':@AM:COMMAND, I say yuck, Yuck, YUCK and Pfooie! Sure, it might work today, and even tomorrow, but man what a kludge! And will it work next week, after an upgrade? Or if the client changes to a different platform? I don't like it. Not a bit. Cheers, Luke |
#49
| |||
| |||
|
|
Move and Steal file are D3 specific. I am on UV at the moment. While in theory you can Create-file and use Unix commands to move the fiels, that is inadvisable. So I prefer Logto to the account I am doing most of the work in. Chandru "Peter McMurray" <excalibur21 (AT) bigpond (DOT) com> wrote in message news:rlvIg.19104$rP1.1357 (AT) news-server (DOT) bigpond.net.au... Hi Mark & Grigory You are both terrifying me moving things around like this when I throw in STEAL-FILE I wonder what else I have to lock out for security. I have got a pseudo TCL built into my system that limits what users can do but it has not been used much. Given the differences that we have uncovered between VME and FSI I think I will do some more testing. I always used to use the Pick access control in the Account MDS item I must get back to doing that I feel. Thanks for the tips Peter McMurray By the way has anyone come up with an answer to the original query on this thread - loading SYSTEM(14) - if they have I have missed it. "GVP" <gvp (AT) infotools (DOT) ru> wrote in message news:1156738882.781531.113860 (AT) m73g2000cwd (DOT) googlegroups.com... Hello Peter, MOVE-FILE is very powerful. For example I using MOVE-FILE for rename an account in ADM.PRG. Also You can use create-file with (r option regards, |
#50
| |||||||||||
| |||||||||||
|
|
Some final footnotes, below... (after that, i think i'm COMMONed out); |
|
When I come back I expect named common to be exactly as it was. Funny thing here, tony... your "as it was" is in fact NOT GUARANTEED. The remote account you logged to could have easily stepped on the Named Common for you. (Hopefully you're not implying that NAMED-COMMON is not returned.) |
|
Trust me... I totally get how to take advantage of this.. |
|
Any built-in functionality associated with the nuances of passing/returning/not-passing/not-returning a process' context as part of the EXECUTE functionality is normally handled transparent to the programmer without creating any additional requirements for default behaviors. |
|
Speaking of "RETURNing" things that shouldn't -- don't you just love that a FLASHBASIC "ABORT" in a subroutine now does a RETURN instead of an A-B-O-R-T !!! >> -- does this fall into "it's documented that way"; it's been working that way for awhile; some people want it to work that way; we didn't know what else to do with the ABORT??? |
|
In fact, the doc is quite explicit about this: "named common: FlashBASIC variable space used to store variables and arrays in the 'id'entified area which is only initialized at logon. Global common space is common for all levels of the same process (i.e., level pushes, executes, filetime bridges & indexes, etc.)" So, named common survives level pushing and executes, which is exactly what's happening when we Execute a Logto from BASIC. A "consistency"-argument here may not be a good one ( ie. just because "EXECUTE LOGTO" vs. "LOGTO" behave the same way), since most bugs/failures in the system will also behave the exact same way when doing an "EXECUTE" of them. ![]() |
|
Suppose you have a completely stand-alone production ACCOUNT that you ultimately save/restore into some backup account...[snip] |
|
The original intent was that Flashbasic and non-Flash code also would have eventually come together in terms of any ability to CALL pickbasic subroutines between flash/non-flashed code; but I relaxed this constraint simply to get the original flashbasic release out. However, due to the preceived crawl-walk-run adoption rate of FLASHBASIC (and that certain large applications would be more conservative in their adoption by flashing only critical portions of their application) -- I didn't think it acceptable to allow potential conflicts with NAMED COMMON being disjoint. Therefore, it was implemented to work with both FLASH/non-FLASH environments -- even with the modest overhead of dipping into virtual-mapped frames to store/retrieve named-common variables and in marshalling their contents. The only valid argument here is that of compromised "priorities" -- however, one regularly has to question if these are being set wisely. (Certainly, I can understand priorities; keep in mind that FLASH still has only about 20% of the performance optimizations originally planned for Flash -- however the initial performance results far exceeded our expectations and proved to be sufficient enough not to have to look back.) |
|
And for reference, if you call from flashed code to non-flashed the code will simply abort. The C runtime is trying to call to another C routine that simply doesn't exist. (That's not a bug, it's equivalent to using a CALL statement to execute a Proc.) If the flashed code is started using its non-flashed object, then you get a PVA-PVA call and everything should work fine. sigh>Trust me... interchangeable CALLING... was an implementation short-cut only! I made the original decision to hold off on the interfaces -- it wasn't supposed to stay that way! It's not a big piece of work. We already had fluid interfaces between PVA and C-runtimes... so this was of no issue. |
|
how is it a security hole ...? hopefully you can extrapolate on the above... |
|
i admit that a brute force initialization at LOGIN would resolve a "manually-executed" LOGTO vulnerability... but THEN what's the advantage of named-common across account boundaries if such re-initialization unconditionally occurs every login? (a fancy cut-paste buffer?) also, if i did perform an 'execute logto'... there then resides a tremendous recursively-delegatable TRUST factor with where i'm going -- because no account-macro-initialization would be automatically invoked upon completion of the execute. now a programmer would have to code around that exposed point. |

![]() |
| Thread Tools | |
| Display Modes | |
| |