tex4ht seems to do a pretty good job - it can handle complicated macros, because it runs LaTeX itself to produce a DVI file, and converts that to HTML. (I think it fiddles around with the styles to put \special commands in the DVI file, so it can recover the structure of the document.)
A good-looking Postscript file isn't the same as a good-looking HTML file, though, so in my experience the output isn't quite so pretty as a hand-written HTML file (it indents paragraphs, for example, as that's what the style says to do, even though most HTML files don't do that). I suppose changing the style a bit could fix that, but I haven't got round to trying...
Adobe claims to hold copyrights on some of the "data structures"
Ah, but the copyright terms are given in the "Intellectual Property" terms of http://partners.adobe.com/public/developer/en/pdf/ PDFReference16.pdf. In particular, you can use the operator table if you put in a copyright notice (similar, as far as I can see, to the BSD licence).
and also may have applicable patents
This seems a bit more worrying. In practice, though, it seems that whenever Adobe patents have seemed to apply to PDF, Adobe have licensed the patents to people using the PDF specification (search for adobe patent clarification).
The other restriction on the PDF specification is that PDF software has to respect access controls. The licence conditions seem fairly open to me...
About LaTeX: I used the "not so short introduction to LaTeX2e", which I thought was pretty good, although I suppose if you're going to teach it you might want to read more than that.
It only makes the call stack deep if the compiler doesn't know about tail recursion. If it does, it can turn
int sumArrayPlusConst(int* array, int elements, int initial) {
if (elements == 0)
return initial;
else
return sumArrayPlusConst(array + 1, elements - 1, initial + *array); }
into something like
int sumArrayPlusConst(int* array, int elements, int initial) { start:
if (elements == 0)
return initial;
else {
array = array + 1;
elements = elements - 1;
initial = initial + array;
goto start;
} }
I think Scheme even requires its compilers and interpreters to do tail call optimisation. Recursive functions can be much easier to understand than iterative ones once you get used to them.
Why not? It will only be deleted when the last program closes the file, according to the documentation of ZwCreateFile in MSDN. And if a program expects a file to stay around after it's closed it, it has a race condition...
IIRC, NT can quite happily delete open files. The problem is that the Win32 DeleteFile function tries to open the file with exclusive access when it deletes it - so that will fail if anyone else is using it. I have no idea why it does that...
The rootkit installs a driver. In Windows (as in Linux and Mac OS X), lots of drivers (but not all) run in kernel mode. In particular, this one does. There is nothing to stop code running in kernel mode from doing anything it likes with the machine - it is running with the highest possible privileges.
In this case, the rootkit patches the system call table, so that calls to functions to look at directory contents are intercepted by the driver, which just pretends that no files starting with $sys$ exist.
There is nothing that Windows can do to stop drivers from doing this while they run in kernel mode. It can make it harder to do, though - I think the 64-bit versions of Windows check the system call table and blue screen if they find it's been changed. To get around that, the driver would either have to take over from Windows completely (not too practical) or find the code that checked the system call table and patch it.
Of course, you do need to have the right privileges to install a driver in order to install this rootkit. Usually, that means being an adminstrator.
"Although we will not raise legal objections to your making a modified license in this way, we hope you will think twice and not do it."
According to the copyright notice on the text, distributing changed versions of the GPL is not allowed. It seems that the FSF will just quietly ignore these copyright violations, though.
It appears to be part of the copyright on the text of the GPL. According to it, the FSF (who hold the copyright to the text of the GPL) do not give you the right to distribute licenses based on, but different from, the GPL. Or have I misunderstood?...
1) When you move a destination object, symlinks don't follow the target . This leaves "broken" symlinks that refer to nothing. Why doesn't the mv command move these too?
IIRC, the Distributed Link Tracking Client already does something like this for shell links. It could probably do it for symlinks too...
The problem, as far as I can see, is that CSRSS.exe, which implements some important parts of win32 (important enough for the kernel to die in sympathy if CSRSS dies), is also responsible for the menial tasks of drawing console windows.
If the code to draw console windows were in a separate, unprivileged process, or even better a library, this bug would not be particularly exploitable. The worst DoS possible would be to prevent anyone from making console windows until the process was restarted.
There was another console bug a few years ago, see here. Printing a few tabs and backspaces to the console would cause the machine to blue screen.
Wow, that's one of the nicest compliments I've had! You made my day:-)
Actually, I'm only a second year undergraduate studying CS, but I've been interested in operating systems for a long time, so I tend to know (and read) more than I should about them...
I was thinking of one specifically improving the performance of reads on Sprite LFS. I bumped into it when I originally read that paper, but can't find it any more.
By the way, the link below your username leads to a 404.
tex4ht seems to do a pretty good job - it can handle complicated macros, because it runs LaTeX itself to produce a DVI file, and converts that to HTML. (I think it fiddles around with the styles to put \special commands in the DVI file, so it can recover the structure of the document.)
A good-looking Postscript file isn't the same as a good-looking HTML file, though, so in my experience the output isn't quite so pretty as a hand-written HTML file (it indents paragraphs, for example, as that's what the style says to do, even though most HTML files don't do that). I suppose changing the style a bit could fix that, but I haven't got round to trying...
Ah, but the copyright terms are given in the "Intellectual Property" terms of http://partners.adobe.com/public/developer/en/pdf
This seems a bit more worrying. In practice, though, it seems that whenever Adobe patents have seemed to apply to PDF, Adobe have licensed the patents to people using the PDF specification (search for adobe patent clarification).
The other restriction on the PDF specification is that PDF software has to respect access controls. The licence conditions seem fairly open to me...
About LaTeX: I used the "not so short introduction to LaTeX2e", which I thought was pretty good, although I suppose if you're going to teach it you might want to read more than that.
When I ran Windows I used to use oggcodecs: http://www.illiminable.com/ogg/.
It only makes the call stack deep if the compiler doesn't know about tail recursion. If it does, it can turn
int sumArrayPlusConst(int* array, int elements, int initial)
{
if (elements == 0)
return initial;
else
return sumArrayPlusConst(array + 1, elements - 1, initial + *array);
}
into something like
int sumArrayPlusConst(int* array, int elements, int initial)
{
start:
if (elements == 0)
return initial;
else {
array = array + 1;
elements = elements - 1;
initial = initial + array;
goto start;
}
}
I think Scheme even requires its compilers and interpreters to do tail call optimisation. Recursive functions can be much easier to understand than iterative ones once you get used to them.
Well, googling for it turns up that it appeared in an interview with him in the Wall Street Journal in 1993.
Why not? It will only be deleted when the last program closes the file, according to the documentation of ZwCreateFile in MSDN. And if a program expects a file to stay around after it's closed it, it has a race condition...
IIRC, NT can quite happily delete open files. The problem is that the Win32 DeleteFile function tries to open the file with exclusive access when it deletes it - so that will fail if anyone else is using it. I have no idea why it does that...
This post explains more.
Opera's had that for ages, can't remember when it first appeared though...
What about cd "C:\Program Files (x86)\..."?
The rootkit installs a driver. In Windows (as in Linux and Mac OS X), lots of drivers (but not all) run in kernel mode. In particular, this one does. There is nothing to stop code running in kernel mode from doing anything it likes with the machine - it is running with the highest possible privileges.
In this case, the rootkit patches the system call table, so that calls to functions to look at directory contents are intercepted by the driver, which just pretends that no files starting with $sys$ exist.
There is nothing that Windows can do to stop drivers from doing this while they run in kernel mode. It can make it harder to do, though - I think the 64-bit versions of Windows check the system call table and blue screen if they find it's been changed. To get around that, the driver would either have to take over from Windows completely (not too practical) or find the code that checked the system call table and patch it.
Of course, you do need to have the right privileges to install a driver in order to install this rootkit. Usually, that means being an adminstrator.
Oh, I see, the original paragraph...oops. So that can be changed but not the rest of the GPL...fair enough.
"Although we will not raise legal objections to your making a modified license in this way, we hope you will think twice and not do it."
According to the copyright notice on the text, distributing changed versions of the GPL is not allowed. It seems that the FSF will just quietly ignore these copyright violations, though.
It appears to be part of the copyright on the text of the GPL. According to it, the FSF (who hold the copyright to the text of the GPL) do not give you the right to distribute licenses based on, but different from, the GPL. Or have I misunderstood?...
Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed.
The hard link shell extension?
Well, there are reparse points (http://msdn.microsoft.com/library/en-us/fileio/fs /reparse_points.asp), which can act like symbolic links, but they only work on directories. There seems to be a program called Junction Link Magic here to make them.
Ha ha ha. Hilarious!
/ createhardlink.asp
http://msdn.microsoft.com/library/en-us/fileio/fs
To be honest, I'm surprised it's only been there since Windows 2000.
The problem, as far as I can see, is that CSRSS.exe, which implements some important parts of win32 (important enough for the kernel to die in sympathy if CSRSS dies), is also responsible for the menial tasks of drawing console windows.
If the code to draw console windows were in a separate, unprivileged process, or even better a library, this bug would not be particularly exploitable. The worst DoS possible would be to prevent anyone from making console windows until the process was restarted.
There was another console bug a few years ago, see here. Printing a few tabs and backspaces to the console would cause the machine to blue screen.
Wow, that's one of the nicest compliments I've had! You made my day :-)
Actually, I'm only a second year undergraduate studying CS, but I've been interested in operating systems for a long time, so I tend to know (and read) more than I should about them...
Seems that they definitely don't: http://support.bbc.co.uk/ogg/
By the way, the link below your username leads to a 404.