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); } }
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(); } } }
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(); }
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(); }
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); } }