Пример #1
0
        protected override void BeforeRun()
        {
            Console.Clear();

            var blockDevice = BlockDevice.Devices[0];
            var p           = new Partition(blockDevice, 0, blockDevice.BlockCount);
            var fs          = new SimpleFS(new CosmosBlockDevice(p));

//            fs.Format();
//            Console.WriteLine("Loaded FS");
//
//            fs.WriteAllText("bob.txt", "A");
//            fs.WriteAllText("lol.txt", "B");

            fs.Load();
            Console.WriteLine("Loaded FS");

//            Console.WriteLine("bob.txt");
//            Console.WriteLine(fs.ReadAllText("bob.txt"));
//            Console.WriteLine("--------------------------------");
//
//            Console.WriteLine("lol.txt");
//            Console.WriteLine(fs.ReadAllText("lol.txt"));
//            Console.WriteLine("--------------------------------");

            //fs.CreateDirectory("dir");
            fs.DeleteDirectory("dir");

            Console.WriteLine("Done");
        }
Пример #2
0
        static void TestSessionManager()
        {
            // disk
            //VolatileDisk disk = new VolatileDisk(1);
            PersistentDisk disk = new PersistentDisk(1, "disk1");

            // create and write our OS to disk if needed
            CreateOSOnDisk(disk);

            // set up file system and mount disk
            disk.TurnOn();
            FileSystem filesystem = new SimpleFS();

            filesystem.Mount(disk, "/");

            // security system
            SecuritySystem security = new SimpleSecurity(filesystem, "passwd");

            // add pete and his test data if needed
            CreatePete(security, filesystem);

            // session manager
            ShellFactory   shells         = new SimpleShellFactory();
            SessionManager sessionmanager = new SimpleSessionManager(security, filesystem, shells);

            // terminal
            TerminalDriver driver = new DotNetConsoleTerminal();
            Terminal       term   = new Terminal(driver);

            term.Connect();

            // allow terminals to connect and establish new sessions for users
            try
            {
                while (true)
                {
                    Session session = sessionmanager.NewSession(term);
                    if (session == null)
                    {
                        throw new Exception("Failed to create new session!");
                    }

                    session.Run();

                    // after session exits, time to log out!
                    session.Logout();
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }

            term.Disconnect();
            disk.TurnOff();
        }
Пример #3
0
        static void TestSecuritySystem()
        {
            try
            {
                VolatileDisk disk = new VolatileDisk(0);
                disk.TurnOn();
                FileSystem fs = new SimpleFS();
                fs.Format(disk);
                fs.Mount(disk, "/");

                SecuritySystem security = new SimpleSecurity(fs, "passwd");
                security.AddUser("steven");
                if (security.NeedsPassword("steven"))
                {
                    security.SetPassword("steven", "foobar42");
                }
                int userID = security.Authenticate("steven", "foobar42");
                Console.WriteLine("UserID " + userID.ToString());
                Console.WriteLine("Username " + security.UserName(userID));
                Console.WriteLine("Home Directory " + security.UserHomeDirectory(userID));
                Console.WriteLine("Shell " + security.UserPreferredShell(userID));

                // Try failure scenarios

                // Add user "steven" again
                TestSecurityException(() => { security.AddUser("steven"); });
                // Password for no one
                TestSecurityException(() => { security.NeedsPassword("nope"); });
                // Set password for invalid user
                TestSecurityException(() => { security.SetPassword("nope", "12345678"); });
                // Set invalid password
                TestSecurityException(() => { security.SetPassword("steven", "hat"); });
                // Authenticate invalid user
                TestSecurityException(() => { security.Authenticate("nope", "12345678"); });
                // Authenticate invalid password
                TestSecurityException(() => { security.Authenticate("steven", "hat"); });
                // invalid user ID
                TestSecurityException(() => { security.UserName(42); });
                // invalid user ID
                TestSecurityException(() => { security.UserHomeDirectory(42); });
                // invalid user ID
                TestSecurityException(() => { security.UserPreferredShell(42); });

                // second security system
                SecuritySystem security2 = new SimpleSecurity(fs, "passwd");
                security2.Authenticate("steven", "foobar42");


                fs.Unmount("/");
                disk.TurnOff();
            }
            catch (Exception ex)
            {
                Console.WriteLine("Exception: " + ex.Message);
            }
        }
Пример #4
0
 private void newToolStripMenuItem_Click(object sender, EventArgs e)
 {
     using (var ofd = new OpenFileDialog())
     {
         if (ofd.ShowDialog() == DialogResult.OK)
         {
             Fs = new SimpleFS(new WindowsStreamBlockDevice(ofd.FileName));
             Fs.Format();
             LoadDir();
         }
     }
 }
Пример #5
0
        static void TestSessionManager()
        {
            SlowDisk disk = new SlowDisk(42);

            disk.TurnOn();

            FileSystem filesystem = new SimpleFS();

            filesystem.Format(disk);
            filesystem.Mount(disk, "/");

            //make dir/files
            Directory root     = filesystem.GetRootDirectory();
            Directory usersDir = root.CreateDirectory("users");
            Directory johnDir  = usersDir.CreateDirectory("john");
            Directory subDir   = johnDir.CreateDirectory("subdir");

            subDir.CreateFile("file1");
            subDir.CreateFile("file2");
            // add an /etc/passwd file that contains users for security system.


            SecuritySystem security = new SimpleSecurity();

            security.AddUser("john");
            security.SetPassword("john", "foo");


            ShellFactory   shells         = new SimpleShellFactory();
            SessionManager sessionManager = new SimpleSessionManager(security, filesystem, shells);
            TerminalDriver driver         = new DotNetConsoleTerminal();
            Terminal       term           = new Terminal(driver);

            term.Connect();

            while (true)
            {
                Session session = sessionManager.NewSession(term);
                if (session == null)
                {
                    throw new Exception("Failed to get sessions!");
                }
                session.Run();

                // after session exits, logout
                session.Logout();
            }

            term.Disconnect();
        }
Пример #6
0
        static void CreateOSOnDisk(DiskDriver disk)
        {
            // create the operating system on disk if not present

            disk.TurnOn();

            // try to mount the disk, format if needed first
            FileSystem filesystem = new SimpleFS();

            try
            {
                filesystem.Mount(disk, "/");
            }
            catch (Exception)
            {
                filesystem.Format(disk);
                filesystem.Mount(disk, "/");
            }

            Directory rootDir = filesystem.GetRootDirectory();

            // password file for security subsystem if not present
            if (filesystem.Find("/passwd") == null)
            {
                rootDir.CreateFile("passwd");
            }

            // user home directory and files if not present
            if (filesystem.Find("/home") == null)
            {
                rootDir.CreateDirectory("home");
            }

            // root user if not present
            SecuritySystem security = new SimpleSecurity(filesystem, "passwd");

            try
            {
                security.AddUser("root");
            }
            catch (Exception)
            {
            }

            disk.TurnOff();
        }
Пример #7
0
        static void TestLogicalFileSystem()
        {
            try
            {
                DiskDriver disk = new VolatileDisk(1);
                //DiskDriver disk = new PersistentDisk(1, "disk1");
                disk.TurnOn();

                FileSystem fs = new SimpleFS();
                fs.Format(disk);
                fs.Mount(disk, "/");

                Directory root = fs.GetRootDirectory();

                Directory dir1 = root.CreateDirectory("dir1");
                Directory dir2 = root.CreateDirectory("dir2");

                Random     r       = new Random();
                byte[]     bytes1  = CreateTestBytes(r, 1000);
                File       file2   = dir2.CreateFile("file2");
                FileStream stream1 = file2.Open();
                stream1.Write(0, bytes1);
                stream1.Close();

                File       file2_2 = (File)fs.Find("/dir2/file2");
                FileStream stream2 = file2_2.Open();
                byte[]     bytes2  = stream2.Read(0, 1000);
                stream2.Close();
                if (!Compare(bytes1, bytes2))
                {
                    throw new Exception("bytes read were not the same as written");
                }

                ValidateBadPath(fs, "");
                ValidateBadPath(fs, "//");
                ValidateBadPath(fs, "/dir2/nope");
                ValidateBadPath(fs, "dir2");
                ValidateBadPath(fs, "nope");
                ValidateBadPath(fs, "/dir2/file2/nope");

                ValidatePath(fs, "/");
                ValidatePath(fs, "/dir2");
                ValidatePath(fs, "/dir1/");


                Console.WriteLine("Printing all directories...");
                RecursivelyPrintDirectories(root);
                Console.WriteLine();

                Console.WriteLine("Moving file2 to dir1...");
                file2.Move(dir1);

                Console.WriteLine("Printing all directories...");
                RecursivelyPrintDirectories(root);
                Console.WriteLine();

                Console.WriteLine("Renaming dir2 to renamed...");
                dir2.Rename("renamed");

                Console.WriteLine("Printing all directories...");
                RecursivelyPrintDirectories(root);
                Console.WriteLine();

                Console.WriteLine("Deleting renamed...");
                dir2.Delete();

                Console.WriteLine("Printing all directories...");
                RecursivelyPrintDirectories(root);
                Console.WriteLine();

                Console.WriteLine("Deleting dir1...");
                dir1.Delete();

                Console.WriteLine("Printing all directories...");
                RecursivelyPrintDirectories(root);
                Console.WriteLine();


                fs.Unmount("/");
                disk.TurnOff();
                Console.WriteLine("Logical file system success!");
            }
            catch (Exception ex)
            {
                Console.WriteLine("LFS test failed: " + ex.Message);
                Console.WriteLine(ex.StackTrace);
            }
        }