file/0040755000567100000120000000000010111044417011452 5ustar jcameronwheelfile/LinedPanel.class0100644000567100000120000000240510061474422014521 0ustar jcameronwheel-T  ! " #$ #% &' () (* +, -. #/ #0 -1 +2 #34 567titleLjava/lang/String;(Ljava/lang/String;)VCodeLineNumberTablepaint(Ljava/awt/Graphics;)Vinsets()Ljava/awt/Insets; SourceFileLinedPanel.java 8  9 :; <=> ?@A BC DCE FGH IJ KL MN OJ PQ RSjava/awt/Insets N LinedPanel GrayPanel()Vjava/awt/GraphicsgetFont()Ljava/awt/Font;getFontMetrics()Ljava/awt/FontMetrics;java/awt/Componentsize()Ljava/awt/Dimension;java/awt/DimensionwidthIheightjava/awt/FontMetrics stringWidth(Ljava/lang/String;)IUtil light_edgeLjava/awt/Color;setColor(Ljava/awt/Color;)VdrawLine(IIII)V dark_edge getAscent()I drawString(Ljava/lang/String;II)V * **+ &*++M+N*d6*d6-* 6+ +d +ddd +ddd + `d + +d +ddd +ddd +d ` +*-F %/6ARcry (Y   $file/StaticTextField.java0100644000567100000120000000052210061451363015357 0ustar jcameronwheelimport java.awt.*; // StaticTextField // A text field that is set to be non-editable by default class StaticTextField extends TextField { StaticTextField() { super(); setEditable(false); } StaticTextField(String s) { super(s); setEditable(false); } StaticTextField(String s, int i) { super(s,i); setEditable(false); } } file/show.cgi0100755000567100000120000000706210107636036013134 0ustar jcameronwheel#!/usr/local/bin/perl # show.cgi # Output some file for the browser require './file-lib.pl'; &ReadParse(); use POSIX; $p = $ENV{'PATH_INFO'}; if ($in{'type'}) { # Use the supplied content type $type = $in{'type'}; } elsif ($in{'format'} == 1) { # Type comes from compression format $type = "application/zip"; } elsif ($in{'format'} == 2) { $type = "application/x-gzip"; } elsif ($in{'format'} == 3) { $type = "application/x-tar"; } else { # Try to guess type from filename if ($p =~ /\.([^\.\/]+)$/) { $ext = lc($1); &get_miniserv_config(\%miniserv); open(MIME, $miniserv{'mimetypes'}); while() { s/#.*//g; if (/(\S+)\s+(.*)/) { foreach $e (split(/\s+/, $2)) { if ($ext eq $e) { $type = $1; last; } } } } close(MIME); } if (!$type) { # No idea .. use the 'file' command if (`file "$p"` =~ /text|script/) { $type = "text/plain"; } else { $type = "application/unknown"; } } } # Dump the file &switch_acl_uid_and_chroot(); if (!&can_access($p)) { # ACL rules prevent access to file &error_exit(&text('view_eaccess', $p)); } if ($in{'format'}) { # An archive of a directory was requested .. create it $archive || &error_exit($text{'view_earchive'}); if ($in{'format'} == 1) { $p =~ s/\.zip$//; } elsif ($in{'format'} == 2) { $p =~ s/\.tgz$//; } elsif ($in{'format'} == 3) { $p =~ s/\.tar$//; } -d $p || &error_exit($text{'view_edir'}." ".$p); if ($archive == 2 && $archmax > 0) { # Check if directory is too large to archive local $kb = &disk_usage_kb($p); if ($kb*1024 > $archmax) { &error_exit(&text('view_earchmax', $archmax)); } } # Work out the base directory and filename local $temp = &tempname(); if ($p =~ /^(.*\/)([^\/]+)$/) { $pdir = $1; $pfile = $2; } else { $pdir = "/"; $pfile = $p; } # Work out the command to run if ($in{'format'} == 1) { &has_command("zip") || &error_exit(&text('view_ecmd', "zip")); $cmd = "zip -r $temp ".quotemeta($pfile); } elsif ($in{'format'} == 2) { &has_command("tar") || &error_exit(&text('view_ecmd', "tar")); &has_command("gzip") || &error_exit(&text('view_ecmd', "gzip")); $cmd = "tar cf - ".quotemeta($pfile)." | gzip -c >$temp"; } elsif ($in{'format'} == 3) { &has_command("tar") || &error_exit(&text('view_ecmd', "tar")); $cmd = "tar cf $temp ".quotemeta($pfile); } if ($in{'test'}) { # Don't actually do anything if in test mode &ok_exit(); } # Run the command, and send back the resulting file local $qpdir = quotemeta($pdir); local $out = `cd $qpdir ; ($cmd) 2>&1 ()VCodeLineNumberTablepaint(Ljava/awt/Graphics;)V SourceFileGrayPanel.java  !" #$% &'( )* +* ,- GrayPaneljava/awt/PanelUtilbodyLjava/awt/Color;java/awt/GraphicssetColor(Ljava/awt/Color;)Vjava/awt/Componentsize()Ljava/awt/Dimension;java/awt/DimensionwidthIheightfillRect(IIII)V!   *  <++**  file/LineInputStream.class0100644000567100000120000000345607463206327015611 0ustar jcameronwheel-[>LMNOPQ       ! " # $ % & ' ' ( ) ) * + , - :0 D2 E. F4 G0 JA K3 R. S5 T1 U. U8 U9 W0 X5 Y6 Z/()I()Ljava/lang/String;()V()Z(C)Ljava/lang/StringBuffer;(C)Z(I)C(I)V(J)J(Ljava/io/InputStream;)V([B)I([BII)ICode ConstantValue ExceptionsLineInputStreamLineInputStream.javaLineNumberTableLjava/io/InputStream;LocalVariables SourceFileappend availablecharAtclosegetsgetwinisSpacejava/io/EOFExceptionjava/io/IOExceptionjava/io/InputStreamjava/lang/Characterjava/lang/Objectjava/lang/StringBufferlengthmark markSupportedreadreaddatareset setLengthskiptoString!JA:7;* * *+@  :0;* @U.; *@=U8;! *+@=U9;# *+@=Y6;! *@=E.; * @=G0;$*@ =!S5;% *@ !W0;$*@ ! =T1; *@#H/;OY L Y+ W*Y= +++d  ++d+@")+ ,-+*/@0J1=I/;xHY L*Y= Y+ W*Y= Y+@8<="@)A;BCC=V8;C=*++d`=++@KLMLN=C?file/MultiColumn.java0100644000567100000120000003074010061451363014574 0ustar jcameronwheel// MultiColumn // A List box that supports multiple columns. import java.awt.*; import java.util.Vector; public class MultiColumn extends BorderPanel implements CbScrollbarCallback { MultiColumnCallback callback; // what to call back to String title[]; // column titles boolean adjustable = true; boolean drawlines = true; Color colors[][] = null; boolean enabled = true; boolean multiselect = false; int cpos[]; // column x positions float cwidth[]; // proportional column widths Vector list[]; // columns of the list CbScrollbar sb; // scrollbar at the right side int width, height; // size, minus the scrollbar Insets in; // used space around the border int sbwidth; // width of the scrollbar int th; // height of title bar Image bim; // backing image Graphics bg; // backing graphics Font font = new Font("timesRoman", Font.PLAIN, 12); FontMetrics fnm; // drawing font size int coldrag = -1; // column being resized int sel = -1; // selected row int sels[] = new int[0]; // all selected rows int top = 0; // first row displayed long last; // last mouse click time int rowh = 16; // row height Event last_event; // last event that triggered callback int sortcol; // Column currently being sorted int sortdir; // Sort direction (0=none, 1=up, 2=down) // Create a new list with the given column titles MultiColumn(String t[]) { super(3, Util.dark_edge_hi, Util.body_hi); title = new String[t.length]; for(int i=0; i= top+r) { top = s-1; if (top > list[0].size() - r) top = list[0].size() - r; sb.setValue(top); repaint(); } } // deleteItem // Remove one row from the list void deleteItem(int n) { for(int i=0; i 0) { System.arraycopy(sels, 0, nsels, 0, i); System.arraycopy(sels, i+1, nsels, i, nsels.length-i); sel = nsels[0]; } break; } } repaint(); compscroll(); } // clear // Remove everything from the list void clear() { for(int i=0; i= top && sels[i] <= bot) { bg.setColor(sels[i] == sel ? Util.body : lighterGray); bg.fillRect(0, th+(sels[i]-top)*rowh, width, rowh); } } } // Draw each column for(int i=0; i w-3) s = s.substring(0, s.length()-1); if (!enabled) bg.setColor(Util.body); else if (colors != null) bg.setColor(colors[j][i]); bg.drawString(s, x+1, th+(j+1-top)*rowh-fd); } else if (o instanceof Image) { // Render image in column Image im = (Image)o; bg.drawImage(im, x+1, th+(j-top)*rowh, this); } } } } // mouseDown // Select a list item or a column to drag public boolean mouseDown(Event e, int x, int y) { if (!enabled) { return true; } x -= in.left; y -= in.top; coldrag = -1; if (y < th) { // Click in title bar for(int i=0; i 0 && Math.abs(cpos[i] - x) < 3) { // clicked on a column separator coldrag = i; } else if (x >= cpos[i] && x < cpos[i+1]) { // clicked in a title callback.headingClicked(this, i); } } } else { // Item chosen from list int row = (y-th)/rowh + top; if (row < list[0].size()) { // Double-click? boolean dclick = false; if (e.when-last < 1000 && sel == row) dclick = true; else last = e.when; if (e.shiftDown() && multiselect && sel != -1) { // Select all from last selection to this one int zero = sels[0]; if (zero < row) { sels = new int[row-zero+1]; for(int i=zero; i<=row; i++) sels[i-zero] = i; } else { sels = new int[zero-row+1]; for(int i=zero; i>=row; i--) sels[zero-i] = i; } } else if (e.controlDown() && multiselect) { // Add this one to selection int nsels[] = new int[sels.length + 1]; System.arraycopy(sels, 0, nsels, 0,sels.length); nsels[sels.length] = row; sels = nsels; } else { // Select one row only, and de-select others sels = new int[1]; sels[0] = row; } sel = row; repaint(); last_event = e; if (callback != null) { // Callback the right function if (dclick) callback.doubleClick(this, row); else callback.singleClick(this, row); } else { // Send an event getParent().postEvent( new Event(this, Event.ACTION_EVENT, dclick?"Double":"Single")); } } } return true; } // mouseDrag // If a column is selected, change it's width public boolean mouseDrag(Event e, int x, int y) { if (!enabled) { return true; } x -= in.left; y -= in.top; if (coldrag != -1) { if (x > cpos[coldrag-1]+3 && x < cpos[coldrag+1]-3) { cpos[coldrag] = x; cwidth[coldrag-1] = (cpos[coldrag]-cpos[coldrag-1]) / (float)width; cwidth[coldrag] = (cpos[coldrag+1]-cpos[coldrag]) / (float)width; repaint(); } } return true; } public void moved(CbScrollbar s, int v) { moving(s, v); } public void moving(CbScrollbar s, int v) { top = sb.getValue(); compscroll(); repaint(); } // compscroll // Re-compute the size of the scrollbar private void compscroll() { if (fnm == null) return; // not visible int r = rows(); int c = list[0].size() - r; sb.setValues(top, r==0?1:r, list[0].size()); } // rows // Returns the number of rows visible in the list private int rows() { return Math.min(height/rowh - 1, list[0].size()); } public Dimension minimumSize() { return new Dimension(400, 100); } public Dimension preferredSize() { return minimumSize(); } } // MultiColumnCallback // Objects implementing this interface can be passed to the MultiColumn // class, to have their singleClick() and doubleClick() functions called in // response to single or double click in the list. interface MultiColumnCallback { // singleClick // Called on a single click on a list item void singleClick(MultiColumn list, int num); // doubleClick // Called upon double-clicking on a list item void doubleClick(MultiColumn list, int num); // headingClicked // Called when a column heading is clicked on void headingClicked(MultiColumn list, int col); } file/CbImageChooser.java0100644000567100000120000001111610061451363015132 0ustar jcameronwheelimport java.awt.*; import java.net.*; class CbImageChooser extends Panel implements CbButtonCallback { Image img; String imgsrc; int imgw, imgh; CbButton but; CbImageFileWindow filewin; //CbImageChooserCallback callback; CbImageChooser(Image i) { this(i, null); } CbImageChooser(Image i, String s) { setLayout(new BorderLayout()); add("Center", but = new CbButton("Choose..", this)); setImage(i, s==null ? "" : s); } void setImage(Image i, String s) { img = i; imgsrc = s; if (img != null) but.setImage(img); else but.setText("Choose.."); } public void click(CbButton b) { if (b == but && filewin == null) new CbImageFileWindow(this); } } class CbImageFileWindow extends FixedFrame implements CbButtonCallback { CbImageChooser parent; ScrollImage imgp; TextField url; CbButton browse, ok, cancel; FileDialog filedlog; String lastfile = ""; CbImageFileWindow(CbImageChooser p) { parent = p; parent.filewin = this; setLayout(new BorderLayout()); add("Center", imgp = new ScrollImage(parent.img, 200, 200)); Panel bot = new GrayPanel(); bot.setLayout(new FlowLayout(FlowLayout.LEFT)); bot.add(new Label("URL:")); bot.add(url = new TextField(parent.imgsrc, 20)); bot.add(browse = new CbButton("Browse..", this)); bot.add(new Label(" ")); bot.add(ok = new CbButton("Ok", this)); bot.add(cancel = new CbButton("Cancel", this)); add("South", bot); pack(); show(); setTitle("Choose Image.."); Util.recursiveBackground(this, Util.body); } public void click(CbButton b) { if (b == ok) parent.setImage(imgp.img, lastfile); if (b == ok || b == cancel) dispose(); else if (b == browse) { // Open file chooser here! FileDialog filedlog = new FileDialog(this, "Choose Image",FileDialog.LOAD); filedlog.show(); if (filedlog.getFile() != null) { // file chosen.. load it in String fn = filedlog.getDirectory()+filedlog.getFile(); url.setText(fn); loadFile(fn); } } } public void dispose() { super.dispose(); parent.filewin = null; } public boolean action(Event evt, Object obj) { if (evt.target == url) { String ut = url.getText(); if (ut.startsWith("http:") || ut.startsWith("ftp:")) loadURL(ut); else loadFile(ut); return true; } return false; } private void loadFile(String f) { Image i = Util.tk.getImage(f); if (i == null || !Util.waitForImage(i)) new ErrorWindow("Failed to load image "+f); else { imgp.setImage(i); lastfile = f; } } private void loadURL(String u) { try { Image i = Util.tk.getImage(new URL(u)); if (i == null || !Util.waitForImage(i)) new ErrorWindow("Failed to load image from "+u); else { imgp.setImage(i); lastfile = u; } } catch(MalformedURLException e) { new ErrorWindow(u+" is not a valid URL"); } } } class ScrollImage extends Panel implements CbScrollbarCallback { Image img; int imgw, imgh; int pw, ph; CbScrollbar vsc, hsc; boolean compute_scrollbars = true; ScrollImage(Image i) { this(i, Util.getWidth(i), Util.getHeight(i)); } ScrollImage(Image i, int w, int h) { pw = w; ph = h; setLayout(new BorderLayout()); add("East", vsc = new CbScrollbar(CbScrollbar.VERTICAL, this)); add("South", hsc = new CbScrollbar(CbScrollbar.HORIZONTAL, this)); setImage(i); } void setImage(Image i) { img = i; if (img != null) { imgw = Util.getWidth(img); imgh = Util.getHeight(img); } compute_scrollbars = true; repaint(); } public void paint(Graphics g) { int w = size().width-vsc.size().width, h = size().height-hsc.size().height; if (compute_scrollbars) { if (img == null) { hsc.setValues(0, 1, 1); vsc.setValues(0, 1, 1); } else { if (imgw < w) hsc.setValues(0, 1, 1); else hsc.setValues(0, w, imgw); if (imgh < h) vsc.setValues(0, 1, 1); else vsc.setValues(0, h, imgh); } compute_scrollbars = false; } g.setColor(Util.body); g.fillRect(0, 0, w, h); if (img != null) { if (imgw < w && imgh < h) g.drawImage(img, (w-imgw)/2, (h-imgh)/2, this); else g.drawImage(img, -hsc.getValue(), -vsc.getValue(),this); } else { g.setFont(Util.f); g.setColor(Util.text); String s = ""; g.drawString(s, (w-Util.fnm.stringWidth(s))/2, (h-Util.fnm.getHeight())/2); } } public void update(Graphics g) { paint(g); } public void reshape(int nx, int ny, int nw, int nh) { super.reshape(nx, ny, nw, nh); compute_scrollbars = true; repaint(); } public void moved(CbScrollbar s, int p) { repaint(); } public void moving(CbScrollbar s, int p) { } public Dimension minimumSize() { return new Dimension(pw, ph); } public Dimension preferredSize() { return minimumSize(); } } file/TabbedDisplayPanel.class0100644000567100000120000000273410061451367016205 0ustar jcameronwheel-S ' ( )* ' + ,- ,. ,/ 01 2 34 56 78 39 7:;<hiLjava/awt/Color;locardLjava/awt/CardLayout;#(Ljava/awt/Color;Ljava/awt/Color;)VCodeLineNumberTableaddItem)(Ljava/lang/String;Ljava/awt/Component;)Vchoose(Ljava/lang/String;)Vinsets()Ljava/awt/Insets;paint(Ljava/awt/Graphics;)V SourceFileTabbedPanel.java =  java/awt/CardLayout > ?@ AB CD EFjava/awt/Insets GH IJK LMN OP QG RPTabbedDisplayPaneljava/awt/Panel()Vjava/awt/Container setLayout(Ljava/awt/LayoutManager;)Vadd<(Ljava/lang/String;Ljava/awt/Component;)Ljava/awt/Component; getLayout()Ljava/awt/LayoutManager;show)(Ljava/awt/Container;Ljava/lang/String;)V(IIII)Vjava/awt/GraphicssetColor(Ljava/awt/Color;)Vjava/awt/Componentsize()Ljava/awt/Dimension;java/awt/DimensionheightIdrawLinewidth C**+*,**YZ$*+,W  ) * *+   !"$ Y #$+* +*d+*d+* +*d*d*d+*d*d*d+*d*d*d+*d*d*d& (0Pp%&file/makelink.cgi0100755000567100000120000000114610107635755013753 0ustar jcameronwheel#!/usr/local/bin/perl # makelink.cgi # Create a symbolic link require './file-lib.pl'; $disallowed_buttons{'makelink'} && &error($text{'ebutton'}); &ReadParse(); &webmin_log("link", undef, $in{'from'}, \%in); &switch_acl_uid_and_chroot(); print "Content-type: text/plain\n\n"; &lock_file($in{'from'}); if ($access{'ro'} || !&can_access($in{'from'})) { print &text('link_efrom2', $in{'from'}),"\n"; } elsif ($follow) { print $text{'link_efollow'},"\n"; } elsif (!symlink($in{'to'}, $in{'from'})) { print "$!\n"; } else { print "\n"; print &file_info_line($in{'from'}),"\n"; &unlock_file($in{'from'}); } file/file-lib.pl0100644000567100000120000002141410107640354013500 0ustar jcameronwheel# file-lib.pl # Common functions for file manager CGIs do '../web-lib.pl'; &ReadParse(\%prein, 'GET'); if ($prein{'trust'}) { &open_trust_db(); if ($trustdb{$prein{'trust'}}) { $trust_unknown_referers = 1; $trustdb{$prein{'trust'}} = time(); } dbmclose(%trustdb); } &init_config(); @file_buttons = ( "save", "edit", "info", "acl", "attr", "ext", "search", "delete", "new", "upload", "mkdir", "makelink", "rename", "sharing", "mount", "copy" ); if ($module_info{'usermin'}) { # Usermin gets the allowed list from the module config &switch_to_remote_user(); &create_user_config_dirs(); $hide_dot_files = $userconfig{'hide_dot_files'}; $follow = int($config{'follow'}); $real_home_dir = &resolve_links($remote_user_info[7]); $upload_max = $config{'max'}; if ($config{'home_only'}) { @allowed_roots = ( $real_home_dir, split(/\s+/, $config{'root'}) ); } else { @allowed_roots = ( "/" ); } if ($config{'archive'} eq 'y') { $archive = 1; } elsif ($config{'archive'} eq 'n') { $archive = 0; } else { $archive = 2; $archmax = $config{'archive'}; } $unarchive = 1; $dostounix = 1; $chroot = "/"; @disallowed_buttons = ( ); foreach $k (keys %config) { if ($k =~ /^button_(.*)/ && $config{$k} == 0) { push(@disallowed_buttons, $1); } } } else { # Webmin gets the list of allowed directories from the ACL %access = &get_module_acl(); $hide_dot_files = $config{'hide_dot_files'}; $follow = int($access{'follow'}); $upload_max = $access{'max'}; @allowed_roots = split(/\s+/, $access{'root'}); if ($access{'home'}) { local @u = getpwnam($remote_user); if (@u) { push(@allowed_roots, &resolve_links($u[7])); } } $archive = $access{'archive'}; $archmax = $access{'archmax'}; $unarchive = $access{'unarchive'}; $dostounix = $access{'dostounix'}; $chroot = $access{'chroot'}; @disallowed_buttons = grep { !$access{'button_'.$_} } @file_buttons; } %disallowed_buttons = map { $_, 1 } @disallowed_buttons; $icon_map = ( "c", 1, "txt", 1, "pl", 1, "cgi", 1, "html", 1, "htm", 1, "gif", 2, "jpg", 2, "tar", 3 ); # file_info_line(path, [displaypath]) # Returns a line of text containing encoded details of some file sub file_info_line { local @st; local $islink = (-l $_[0]); local $f = $islink && &must_follow($_[0]); local @st = $f ? stat($_[0]) : lstat($_[0]); local $ext = $_[0] =~ /\S+\.([^\.\/]+)$/ ? $1 : undef; local $dp = $_[1] || $_[0]; $dp =~ s/\\/\\\\/g; $dp =~ s/\t/\\t/g; return undef if ($dp =~ /\r|\n/); if (!@st) { # Work around a broken stat function on large files on redhat 7.x &has_command("stat") || return undef; local $out = `stat -t '$_[0]'`; return undef if ($?); $out =~ /^(.*)\s+(\d+)\s+(\d+)\s+(\S+)\s+(\d+)\s+(\d+)\s+(\S+)\s+(\S+)\s+(\S+)\s+(\S+)\s+(\S+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)/; local $type = defined($icon_map{$ext}) ? $icon_map{$ext} : 4; local $user = defined(%uid_to_user) ? $uid_to_user{$5} : getpwuid($5); $user = $5 if (!$user); local $group = defined(%gid_to_group) ? $gid_to_group{$6} :getgrgid($6); $group = $6 if (!$group); local $size = $2; local $mtime = $13; local $mode = hex($4); return sprintf ("%s\t%u\t%s\t%s\t%u\t%u\t%u\t%s", $dp, $type, $user, $group, $size, $mode, $mtime, undef); } local $type = $islink && !$f ? 5 : -d _ ? 0 : -b _ ? 6 : -c _ ? 6 : -p _ ? 7 : -S _ ? 7 : defined($icon_map{$ext}) ? $icon_map{$ext} : 4; local $user = defined(%uid_to_user) ? $uid_to_user{$st[4]} : getpwuid($st[4]); $user = $st[4] if (!$user); local $group = defined(%gid_to_group) ? $gid_to_group{$st[5]} :getgrgid($st[5]); $group = $st[5] if (!$group); local $rl = readlink($_[0]); return join("\t", $dp, $type, $user, $group, $st[7] < 0 ? 2**32+$st[7] : $st[7], $st[2], $st[9], $f ? "" : $islink && !$rl ? "???" : $rl); } # switch_acl_uid() sub switch_acl_uid { if (!$module_info{'usermin'} && $access{'uid'}) { local @u = $access{'uid'} < 0 ? getpwnam($remote_user) : getpwuid($access{'uid'}); @u || &error($text{'switch_euser'}); $( = $u[3]; $) = "$u[3] ".join(" ", $u[3], &other_groups($u[0])); ($>, $<) = ($u[2], $u[2]); umask(oct($access{'umask'})); } } # switch_acl_uid_and_chroot() # Combines the switch_acl_uid and go_chroot functions sub switch_acl_uid_and_chroot { if (!$module_info{'usermin'} && $access{'uid'}) { local @u = $access{'uid'} < 0 ? getpwnam($remote_user) : getpwuid($access{'uid'}); @u || &error($text{'switch_euser'}); local @other = &other_groups($u[0]); &go_chroot(); $( = $u[3]; $) = "$u[3] ".join(" ", $u[3], @other); ($>, $<) = ($u[2], $u[2]); umask(oct($access{'umask'})); } } # can_access(file) # Returns 1 if some file can be edited/deleted sub can_access { local @f = grep { $_ ne '' } split(/\//, $_[0]); local $r; DIR: foreach $r (@allowed_roots) { return 1 if ($r eq '/' || $_[0] eq '/' || $_[0] eq $r); local @a = grep { $_ ne '' } split(/\//, $r); local $i; for($i=0; $i<@a && $i<@f; $i++) { next DIR if ($a[$i] ne $f[$i]); } return 1; } return 0; } # can_list(dir) # Returns 1 if some directory can be listed. Parent directories of allowed # directories are included as well. sub can_list { local @f = grep { $_ ne '' } split(/\//, $_[0]); DIR: foreach $r (@allowed_roots) { return 1 if ($r eq '/' || $_[0] eq '/' || $_[0] eq $r); local @a = grep { $_ ne '' } split(/\//, $r); local $i; for($i=0; $i<@a && $i<@f; $i++) { next DIR if ($a[$i] ne $f[$i]); } return 1; } return 0; } # accessible_subdir(dir) # Returns the path to a dir under the given one that we can access sub accessible_subdir { local ($r, @rv); foreach $r (@allowed_roots) { if ($r =~ /^(\Q$_[0]\E\/[^\/]+)/) { push(@rv, $1); } } return @rv; } sub open_trust_db { local $trust = "$ENV{'WEBMIN_CONFIG'}/file/trust"; eval "use SDBM_File"; dbmopen(%trustdb, $trust, 0700); eval { $trustdb{'1111111111'} = 'foo bar' }; if ($@) { dbmclose(%trustdb); eval "use NDBM_File"; dbmopen(%trustdb, $trust, 0700); } } # must_follow(path) # For symlinks, returns 1 if a link should be follow, 0 if not sub must_follow { if ($follow == 1) { return 1; } elsif ($follow == 0) { return 0; } else { local @s = stat($_[0]); local @l = lstat($_[0]); @st = ($s[4] == $l[4] ? @s : @l); return $s[4] == $l[4]; } } # extract_archive(path, delete) # Called by upload to extract some zip or tar.gz file. Returns 1 if something # was actually done.. sub extract_archive { local $out; $_[0] =~ /^(\S*\/)/ || return 0; local $dir = $1; local $qdir = quotemeta($dir); local $qpath = quotemeta($_[0]); if ($_[0] =~ /\.zip$/i) { return &text('zip_ecmd', "unzip") if (!&has_command("unzip")); $out = `(cd $qdir; unzip -o $qpath) 2>&1 &1 &1`; if ($?) { return &text('zip_euntar2', $out); } } else { return $text{'zip_ename'}; } if ($_[1]) { unlink($_[0]); } return undef; } # post_upload(path, dir, unzip) sub post_upload { local ($path, $dir, $zip) = @_; if ($unarchive == 2) { $zip = $path =~ /\.(zip|tgz|tar|tar\.gz)$/i ? 1 : 0; } elsif ($unarchive == 0) { $zip = 0; } local $refresh = $path; local $err; if ($zip) { $err = &extract_archive($path, $zip-1); if (!$err) { # Refresh whole dir $refresh = $in{'dir'}; } } $info = &file_info_line(&unmake_chroot($refresh), $refresh); print "\n"; } sub go_chroot { if ($chroot ne "/") { # First build hash of users and groups, which will not be accessible # after a chroot local (@u, @g); setpwent(); while(@u = getpwent()) { $uid_to_user{$u[2]} = $u[0]; $user_to_uid{$u[0]} = $u[2]; } endpwent(); setgrent(); while(@g = getgrent()) { $gid_to_group{$g[2]} = $g[0]; $group_to_gid{$g[0]} = $g[2]; } endgrent(); chroot($chroot); } } # make_chroot(dir) # Converts some real directory to the chroot form sub make_chroot { if ($chroot eq "/") { return $_[0]; } elsif ($_[0] eq $chroot) { return "/"; } else { local $rv = $_[0]; if ($rv =~ /^$chroot\//) { $rv =~ s/^$chroot//; return $rv; } else { return undef; } } } # unmake_chroot(dir) # Converts some chroot'd directory to the real form sub unmake_chroot { if ($chroot eq "/") { return $_[0]; } elsif ($_[0] eq "/") { return $chroot; } else { return $chroot.$_[0]; } } 1; file/MultiLabel.class0100644000567100000120000000260510107637154014546 0ustar jcameronwheel-a ' ( )* +, -. /0 1 23 - 45 6 7 8 9: ; < =>? @A B =CDE(Ljava/lang/String;I)VCodeLineNumberTable(Ljava/lang/String;II)V(Ljava/lang/String;III)V SourceFileFileManager.java # $F GH Ijava/util/Vector Jjava/util/StringTokenizer KL M NLjava/lang/StringBuffer OP QL RS TU VWjava/awt/GridLayout XS YZ [\java/awt/Label ]^java/lang/String  _` MultiLabel BorderPanelUtilbodyLjava/awt/Color;(ILjava/awt/Color;)V()Vtrim()Ljava/lang/String;'(Ljava/lang/String;Ljava/lang/String;)V nextTokenappend,(Ljava/lang/String;)Ljava/lang/StringBuffer;toStringlength()I hasMoreTokens()Z addElement(Ljava/lang/Object;)Vsize(IIII)Vjava/awt/Container setLayout(Ljava/awt/LayoutManager;)V elementAt(I)Ljava/lang/Object;add*(Ljava/awt/Component;)Ljava/awt/Component;  !$*+" 01#!% *+" 56$! *Y:Y+ ::J : Y :  :*Y6!Y: * W۱"F;<= >#?&@-ARBcCjDm?uGHIJHL%&file/save.cgi0100755000567100000120000000151110107636004013076 0ustar jcameronwheel#!/usr/local/bin/perl # save.cgi # Write data to a file require './file-lib.pl'; $disallowed_buttons{'edit'} && &error($text{'ebutton'}); $p = $ENV{'PATH_INFO'}; &webmin_log("save", undef, $p) if ($access{'uid'}); &switch_acl_uid_and_chroot(); print "Content-type: text/plain\n\n"; read(STDIN, $buf, $ENV{'CONTENT_LENGTH'}); if (defined($in{'length'}) && length($buf) != $in{'length'}) { print &text('edit_elength'),"\n"; } else { &lock_file($p); if ($access{'ro'} || !&can_access($p)) { print &text('edit_eaccess', $p),"\n"; } elsif (-l $p && !&must_follow($p)) { print &text('edit_efollow', $p),"\n"; } elsif (!open(FILE, ">$p")) { print "$!\n"; } else { print FILE $buf; close(FILE); &unlock_file($p); print "\n"; print &file_info_line($p),"\n"; &webmin_log("save", undef, $p) if (!$access{'uid'}); } } file/acl_security.pl0100644000567100000120000001121710025221174014475 0ustar jcameronwheel require 'file-lib.pl'; # acl_security_form(&options) # Output HTML for editing security options for the file module sub acl_security_form { print " $text{'acl_user'}\n"; local $u = $_[0]->{'uid'} < 0 ? '' : getpwuid($_[0]->{'uid'}); printf " %s\n", $_[0]->{'uid'} < 0 ? 'checked' : '', $text{'acl_user_def'}; printf "\n", $_[0]->{'uid'} < 0 ? '' : 'checked'; print " ", &user_chooser_button("uid", 0)," \n"; print " $text{'acl_umask'}\n"; print " \n"; print " $text{'acl_follow'} \n"; printf " $text{'yes'}\n", $_[0]->{'follow'} == 1 ? "checked" : ""; printf " $text{'acl_fyes'}\n", $_[0]->{'follow'} == 2 ? "checked" : ""; printf " $text{'no'} \n", $_[0]->{'follow'} == 0 ? "checked" : ""; print " $text{'acl_ro'} \n"; printf " $text{'yes'}\n", $_[0]->{'ro'} ? "checked" : ""; printf " $text{'no'} \n", $_[0]->{'ro'} ? "" : "checked"; print " $text{'acl_max'}\n"; printf " %s\n", $_[0]->{'max'} ? "" : "checked", $text{'acl_unlim'}; printf "\n", $_[0]->{'max'} ? "checked" : ""; printf " %s \n", $_[0]->{'max'}, $text{'acl_b'}; print " $text{'acl_archive'} \n"; printf " $text{'yes'}\n", $_[0]->{'archive'} == 1 ? "checked" : ""; printf " $text{'acl_archmax'}\n", $_[0]->{'archive'} == 2 ? "checked" : ""; printf " %s\n", $_[0]->{'archmax'}, $text{'acl_b'}; printf " $text{'no'} \n", $_[0]->{'archive'} == 0 ? "checked" : ""; print " $text{'acl_unarchive'} \n"; printf " %s\n", $_[0]->{'unarchive'} == 2 ? "checked" : "", $text{'acl_unarchive2'}; printf " %s\n", $_[0]->{'unarchive'} == 1 ? "checked" : "", $text{'acl_unarchive1'}; printf " %s \n", $_[0]->{'unarchive'} == 0 ? "checked" : "", $text{'acl_unarchive0'}; print " $text{'acl_dostounix'} \n"; printf " %s\n", $_[0]->{'dostounix'} == 1 ? "checked" : "", $text{'yes'}; printf " %s \n", $_[0]->{'dostounix'} == 0 ? "checked" : "", $text{'no'}; print " $text{'acl_buttons'} \n"; foreach $b (@file_buttons) { printf " %s
\n", $b, $_[0]->{'button_'.$b} ? "checked" : "", $text{'acl_button_'.$b}; } print " \n"; print " $text{'acl_chroot'}\n"; printf "\n", $_[0]->{'chroot'}; print " $text{'acl_dirs'}
$text{'acl_relto'}\n"; print "
\n"; printf " %s
\n", $_[0]->{'home'} ? 'checked' : '', $text{'acl_home'}; printf " %s\n", $_[0]->{'goto'} ? 'checked' : '', $text{'acl_goto'}; } # acl_security_save(&options) # Parse the form for security options for the file module sub acl_security_save { $_[0]->{'uid'} = $in{'uid_def'} ? -1 : getpwnam($in{'uid'}); local @root = split(/\s+/, $in{'root'}); map { s/\/+/\//g } @root; map { s/([^\/])\/+$/$1/ } @root; $_[0]->{'root'} = join(" ", @root); $_[0]->{'follow'} = $in{'follow'}; $_[0]->{'ro'} = $in{'ro'}; $in{'umask'} =~ /^[0-7]{3}$/ || &error("Invalid umask"); $_[0]->{'umask'} = $in{'umask'}; $_[0]->{'home'} = $in{'home'}; $_[0]->{'goto'} = $in{'goto'}; $_[0]->{'max'} = $in{'max_def'} ? undef : $in{'max'}; $_[0]->{'archive'} = $in{'archive'}; $_[0]->{'archmax'} = $in{'archmax'}; foreach $b (@file_buttons) { $_[0]->{"button_$b"} = $in{"button_$b"}; } $_[0]->{'unarchive'} = $in{'unarchive'}; $_[0]->{'dostounix'} = $in{'dostounix'}; $_[0]->{'chroot'} = $in{'chroot'}; } file/CbButton.java0100644000567100000120000001247310061451363014047 0ustar jcameronwheelimport java.awt.*; import java.util.*; public class CbButton extends Canvas { public static final int LEFT = 0; public static final int RIGHT = 1; public static final int ABOVE = 2; public static final int BELOW = 3; Image image; String string; CbButtonCallback callback; int imode; int iwidth, iheight, pwidth, pheight, twidth, theight; boolean inside, indent; CbButtonGroup group; boolean selected; Color lc1 = Util.light_edge, lc2 = Util.body, lc3 = Util.dark_edge; Color hc1 = Util.light_edge_hi, hc2 = Util.body_hi, hc3 = Util.dark_edge_hi; public CbButton(Image i, CbButtonCallback cb) { this(i, null, LEFT, cb); } public CbButton(String s, CbButtonCallback cb) { this(null, s, LEFT, cb); } public CbButton(Image i, String s, int im, CbButtonCallback cb) { image = i; string = s; imode = im; callback = cb; if (image != null) { iwidth = Util.getWidth(image); iheight = Util.getHeight(image); } if (string != null) { twidth = Util.fnm.stringWidth(string); theight = Util.fnm.getHeight(); } if (image != null && string != null) { switch(imode) { case LEFT: case RIGHT: pwidth = iwidth + twidth + 6; pheight = Math.max(iheight , theight) + 4; break; case ABOVE: case BELOW: pwidth = Math.max(iwidth, twidth) + 4; pheight = iheight + theight + 6; break; } } else if (image != null) { pwidth = iwidth + 4; pheight = iheight + 4; } else if (string != null) { pwidth = twidth + 8; pheight = theight + 8; } } /**Make this button part of a mutual-exclusion group. Only one such * button can be indented at a time */ public void setGroup(CbButtonGroup g) { group = g; group.add(this); } /**Make this button the selected one in it's group */ public void select() { if (group != null) group.select(this); } /**Display the given string */ public void setText(String s) { string = s; image = null; twidth = Util.fnm.stringWidth(string); theight = Util.fnm.getHeight(); repaint(); } /**Display the given image */ public void setImage(Image i) { string = null; image = i; iwidth = Util.getWidth(image); iheight = Util.getHeight(image); repaint(); } /**Display the given image and text, with the given alignment mode */ public void setImageText(Image i, String s, int m) { image = i; string = s; imode = m; twidth = Util.fnm.stringWidth(string); theight = Util.fnm.getHeight(); iwidth = Util.getWidth(image); iheight = Util.getHeight(image); repaint(); } public void paint(Graphics g) { Color c1 = inside ? hc1 : lc1, c2 = inside ? hc2 : lc2, c3 = inside ? hc3 : lc3; int w = size().width, h = size().height; Color hi = indent||selected ? c3 : c1, lo = indent||selected ? c1 : c3; g.setColor(c2); g.fillRect(0, 0, w-1, h-1); g.setColor(hi); g.drawLine(0, 0, w-2, 0); g.drawLine(0, 0, 0, h-2); g.setColor(lo); g.drawLine(w-1, h-1, w-1, 1); g.drawLine(w-1, h-1, 1, h-1); if (inside) { /* g.setColor(hi); g.drawLine(1, 1, w-3, 1); g.drawLine(1, 1, 1, h-3); */ g.setColor(lo); g.drawLine(w-2, h-2, w-2, 2); g.drawLine(w-2, h-2, 2, h-2); } g.setColor(c3); g.setFont(Util.f); if (image != null && string != null) { if (imode == LEFT) { Dimension is = imgSize(w-twidth-6, h-4); g.drawImage(image, (w - is.width - twidth - 2)/2, (h-is.height)/2, is.width, is.height, this); g.drawString(string, (w - is.width - twidth - 2)/2 +is.width +2, (h + theight - Util.fnm.getDescent())/2); } else if (imode == RIGHT) { } else if (imode == ABOVE) { //Dimension is = imgSize(w-4, h-theight-6); g.drawImage(image, (w - iwidth)/2, (h - iheight - theight - 2)/2, iwidth, iheight, this); g.drawString(string, (w - twidth)/2, iheight+Util.fnm.getHeight()+2); } else if (imode == BELOW) { } } else if (image != null) { Dimension is = imgSize(w-4, h-4); g.drawImage(image, (w - is.width)/2, (h-is.height)/2, is.width, is.height, this); } else if (string != null) { g.drawString(string, (w - twidth)/2, (h+theight-Util.fnm.getDescent())/2); } } public void update(Graphics g) { paint(g); } public boolean mouseEnter(Event e, int x, int y) { inside = true; repaint(); return true; } public boolean mouseExit(Event e, int x, int y) { inside = false; repaint(); return true; } public boolean mouseDown(Event e, int x, int y) { indent = true; repaint(); return true; } public boolean mouseUp(Event e, int x, int y) { if (x >= 0 && y >= 0 && x < size().width && y < size().height) { if (callback != null) callback.click(this); select(); } indent = false; repaint(); return true; } public Dimension preferredSize() { return new Dimension(pwidth, pheight); } public Dimension minimumSize() { return preferredSize(); } private Dimension imgSize(int mw, int mh) { float ws = (float)mw/(float)iwidth, hs = (float)mh/(float)iheight; float s = ws < hs ? ws : hs; if (s > 1) s = 1; return new Dimension((int)(iwidth*s), (int)(iheight*s)); } } interface CbButtonCallback { void click(CbButton b); } class CbButtonGroup { Vector buttons = new Vector(); void add(CbButton b) { buttons.addElement(b); } void select(CbButton b) { for(int i=0; i px+3) { // move one tick to the right pos += step; } else { // start dragging dragging = true; dragx = x-px; } checkPos(); if (callback != null) callback.moved(this, pos); repaint(); return true; } public boolean mouseDrag(Event e, int x, int y) { if (dragging) { px = x-dragx; pos = (px-8)*(max - min) / (size().width-16); checkPos(); if (callback != null) callback.moving(this, pos); repaint(); } return dragging; } public boolean mouseUp(Event e, int x, int y) { if (dragging) { dragging = false; if (callback != null) callback.moved(this, pos); repaint(); return true; } return false; } public boolean mouseExit(Event e, int x, int y) { inside = false; repaint(); return true; } protected void checkPos() { if (pos < min) pos = min; else if (pos > max) pos = max; } public Dimension preferredSize() { return new Dimension(100, 20); } public Dimension minimumSize() { return preferredSize(); } } interface CbSliderCallback { /**Callled back when the slider stops at a new position * @param s The slider being moved * @param p New position */ public void moved(CbSlider s, int p); /**Callled back whenever the slider is being dragged * @param s The slider being moved * @param p New position */ public void moving(CbSlider s, int p); } file/rename.cgi0100755000567100000120000000104010107635771013416 0ustar jcameronwheel#!/usr/local/bin/perl # rename.cgi # Rename some file require './file-lib.pl'; $disallowed_buttons{'rename'} && &error($text{'ebutton'}); &ReadParse(); &webmin_log("rename", undef, $in{'old'}, \%in); &switch_acl_uid_and_chroot(); print "Content-type: text/plain\n\n"; if ($access{'ro'} || !&can_access($in{'old'})) { print &text('rename_eold', $in{'old'}),"\n"; } elsif (!&can_access($in{'new'})) { print &text('rename_enew', $in{'new'}),"\n"; } elsif (!&rename_logged($in{'old'}, $in{'new'})) { print "$!\n"; } else { print "\n"; } file/CbScrollbar.java0100644000567100000120000001717010061451363014516 0ustar jcameronwheel// CbScrollbar.java // A drop-in replacement for the AWT scrollbar class, with callbacks // and a nicer look. This scrollbar is typically used to display some // fraction of a list of items, with values ranging from min to max. // The lvisible parameter determines how many of the list are lvisible // at any one time. The value of the scrollbar ranges from min to // max-lvisible+1 (the highest position in the list to start displaying) import java.awt.*; public class CbScrollbar extends Panel { static final int VERTICAL = 0; static final int HORIZONTAL = 1; CbScrollbarCallback callback; // who to call back to boolean inside, indent; int orient; // horizontal or vertical? int value; // position int lvisible; // the number of lines lvisible int num; // total number of lines int lineinc = 1; // how much the arrow buttons move by Color lc1 = Util.light_edge, lc2 = Util.body, lc3 = Util.dark_edge; Color hc1 = Util.light_edge_hi, hc2 = Util.body_hi, hc3 = Util.dark_edge_hi; Color bc = Util.dark_bg; int y1, y2, x1, x2, drag; CbScrollbarArrow arrow1, arrow2; CbScrollbar(int o, CbScrollbarCallback cb) { this(o, 0, 1, 1, cb); } /**Create a new scrollbar */ CbScrollbar(int o, int v, int vis, int n, CbScrollbarCallback cb) { setValues(v, vis, n); orient = o; callback = cb; setLayout(null); if (orient == VERTICAL) { add(arrow1 = new CbScrollbarArrow(this, 0)); add(arrow2 = new CbScrollbarArrow(this, 1)); } else { add(arrow1 = new CbScrollbarArrow(this, 2)); add(arrow2 = new CbScrollbarArrow(this, 3)); } } /**Set the current scrollbar parameters * @param v Current position * @param vis Number of lines lvisible * @param n Total number of lines */ public void setValues(int v, int vis, int n) { value = v; lvisible = vis; num = n; if (lvisible > num) lvisible = num; checkValue(); repaint(); } public int getValue() { return value; } public void setValue(int v) { value = v; checkValue(); repaint(); } private void checkValue() { if (value < 0) value = 0; else if (value > num-lvisible) value = num-lvisible; } public void paint(Graphics g) { if (num == 0) return; int w = size().width, h = size().height; boolean ins = inside && !(arrow1.inside || arrow2.inside); Color c1 = ins ? hc1 : lc1, c2 = ins ? hc2 : lc2, c3 = ins ? hc3 : lc3; g.setColor(bc); g.fillRect(0, 0, w, h); g.setColor(c3); g.drawLine(0, 0, w-1, 0); g.drawLine(0, 0, 0, h-1); g.setColor(c1); g.drawLine(w-1, h-1, w-1, 0); g.drawLine(w-1, h-1, 0, h-1); if (orient == VERTICAL) { int va = h-w*2; y1 = w+va*value/num; y2 = w+va*(value+lvisible)/num-1; g.setColor(c2); g.fillRect(1, y1, w-2, y2-y1); g.setColor(indent ? c3 : c1); g.drawLine(1, y1, w-2, y1); g.drawLine(1, y1, 1, y2-1); g.setColor(indent ? c1 : c3); g.drawLine(w-2, y2-1, w-2, y1); g.drawLine(w-2, y2-1, 1, y2-1); if (ins) { g.drawLine(w-3, y2-2, w-3, y1+1); g.drawLine(w-3, y2-2, 2, y2-2); } } else if (orient == HORIZONTAL) { int va = w-h*2; x1 = h+va*value/num; x2 = h+va*(value+lvisible)/num-1; g.setColor(c2); g.fillRect(x1, 1, x2-x1, h-2); g.setColor(indent ? c3 : c1); g.drawLine(x1, 1, x1, h-2); g.drawLine(x1, 1, x2-1, 1); g.setColor(indent ? c1 : c3); g.drawLine(x2-1, h-2, x1, h-2); g.drawLine(x2-1, h-2, x2-1, 1); if (ins) { g.drawLine(x2-2, h-3, x1+1, h-3); g.drawLine(x2-2, h-3, x2-2, 2); } } } /**Called by arrows to move the slider */ void arrowClick(int d) { int oldvalue = value; value += d; checkValue(); if (value != oldvalue) { callback.moved(this, value); repaint(); } } public void reshape(int nx, int ny, int nw, int nh) { super.reshape(nx, ny, nw, nh); if (orient == VERTICAL) { arrow1.reshape(1, 1, nw-2, nw-1); arrow2.reshape(1, nh-nw-1, nw-2, nw-1); } else { arrow1.reshape(1, 1, nh-1, nh-2); arrow2.reshape(nw-nh-1, 1, nh-1, nh-2); } repaint(); } public Dimension preferredSize() { return orient==VERTICAL ? new Dimension(16, 100) : new Dimension(100, 16); } public Dimension minimumSize() { return preferredSize(); } public boolean mouseDown(Event e, int mx, int my) { if (orient == VERTICAL) { // move up/down one page, or start dragging if (my < y1) arrowClick(-lvisible); else if (my > y2) arrowClick(lvisible); else { indent = true; drag = my-y1; repaint(); } } else { // move left/right one page, or start dragging if (mx < x1) arrowClick(-lvisible); else if (mx > x2) arrowClick(lvisible); else { indent = true; drag = mx-x1; repaint(); } } return true; } public boolean mouseDrag(Event e, int mx, int my) { if (indent) { int w = size().width, h = size().height; int oldvalue = value; if (orient == VERTICAL) { int va = h-w*2, ny = my-drag-w; value = ny*num/va; } else { int va = w-h*2, nx = mx-drag-h; value = nx*num/va; } checkValue(); if (value != oldvalue) { callback.moving(this, value); repaint(); } } return indent; } public boolean mouseUp(Event e, int mx, int my) { if (indent) { indent = false; repaint(); callback.moved(this, value); return true; } return false; } /* public boolean mouseEnter(Event e, int mx, int my) { inside = true; repaint(); return true; } public boolean mouseExit(Event e, int mx, int my) { inside = false; repaint(); return true; } */ } class CbScrollbarArrow extends Canvas implements Runnable { int mode; CbScrollbar scrollbar; boolean inside, indent; Thread th; CbScrollbarArrow(CbScrollbar p, int m) { scrollbar = p; mode = m; } public void paint(Graphics g) { int w = size().width, h = size().height; Color c1 = inside ? scrollbar.hc1 : scrollbar.lc1, c2 = inside ? scrollbar.hc2 : scrollbar.lc2, c3 = inside ? scrollbar.hc3 : scrollbar.lc3; g.setColor(scrollbar.bc); g.fillRect(0, 0, w, h); int xp[] = new int[3], yp[] = new int[3]; // blank, dark, light if (mode == 0) { // up arrow xp[0] = w/2; xp[1] = w-1; xp[2] = 0; yp[0] = 0; yp[1] = h-1; yp[2] = h-1; } else if (mode == 1) { // down arrow xp[0] = 0; xp[1] = w/2; xp[2] = w-1; yp[0] = 0; yp[1] = h-1; yp[2] = 0; } else if (mode == 2) { // left arrow xp[0] = 0; xp[1] = w-1; xp[2] = w-1; yp[0] = h/2; yp[1] = h-1; yp[2] = 0; } else if (mode == 3) { // right arrow xp[0] = 0; xp[1] = w-1; xp[2] = 0; yp[0] = 0; yp[1] = h/2; yp[2] = h-1; } g.setColor(c2); g.fillPolygon(xp, yp, 3); g.setColor(indent ? c1 : c3); g.drawLine(xp[1], yp[1], xp[2], yp[2]); g.setColor(indent ? c3 : c1); g.drawLine(xp[0], yp[0], xp[2], yp[2]); } public boolean mouseDown(Event e, int mx, int my) { indent = true; repaint(); (th = new Thread(this)).start(); return true; } public boolean mouseUp(Event e, int mx, int my) { indent = false; repaint(); if (th != null) th.stop(); return true; } /**Thread for doing repeated scrolling */ public void run() { int stime = 500; while(true) { scrollbar.arrowClick(mode%2 == 0 ? -1 : 1); try { Thread.sleep(stime); } catch(Exception e) { } stime = 100; } } } // CbScrollbarCallback // Methods for reporting the movement of the scrollbar to another object interface CbScrollbarCallback { /**Called when the scrollbar stops moving. This happens when an * arrow is clicked, the scrollbar is moved by a page, or the user * lets go of the scrollbar after dragging it. * @param sb The scrollar that has been moved * @param v The new value */ void moved(CbScrollbar sb, int v); /**Called upon every pixel movement of the scrollbar when it is * being dragged, but NOT when moved() is called. * @param sb The scrollar that has been moved * @param v The new value */ void moving(CbScrollbar sb, int v); } file/list.cgi0100755000567100000120000000221010107636574013124 0ustar jcameronwheel#!/usr/local/bin/perl # list.cgi # Return a list of files in some directory require './file-lib.pl'; &ReadParse(); &switch_acl_uid_and_chroot(); print "Content-type: text/plain\n\n"; $d = $in{'dir'} eq "/" ? "" : $in{'dir'}; if (!&can_list($in{'dir'})) { print $text{'list_eaccess'},"\n"; } elsif (!opendir(DIR, $in{'dir'})) { # Cannot list the dir .. but maybe we don't have to! # If a sub-directory was requested, just assume that it exists. local $err = $!; local @alt = &accessible_subdir($in{'dir'}); local $fil = &file_info_line($in{'dir'}); if (@alt && $fil) { print "\n"; foreach $f ("$in{'dir'}/.", "$in{'dir'}/..", @alt) { $fil = &file_info_line($f); print "$fil\n" if (defined($fil)); } } else { print "$err\n"; } } else { # Can list the directory print "\n"; @files = sort { $a cmp $b } readdir(DIR); if ($hide_dot_files) { @files = grep { $_ !~ /^\./ } @files; } else { @files = grep { $_ ne "." && $_ ne ".." } @files; } @files = grep { &can_list("$d/$_") } @files; closedir(DIR); foreach $f (".", "..", @files) { local $fil = &file_info_line("$d/$f"); print "$fil\n" if (defined($fil)); } } file/Makefile0100644000567100000120000000034610061542120013110 0ustar jcameronwheelFileManager.class: FileManager.java Util.java CLASSPATH=/usr/local/netscape7/plugins/java2/lib/javaplugin.jar:. javac -target 1.1 FileManager.java Util.java [ -d "../zomos-virtual" ] && zip ../zomos-virtual/file.jar *.class file/CbColorWindowCube.class0100644000567100000120000000344707172555115016037 0ustar jcameronwheel-hWrnOUTjHVwIQpt B ; 1 > 2 D . < 9 = C : @ 3 8 0 5 4 - 7 + , 6 A ? ? / ] [e _c k^ ~ Nq y | lP s g^ ` z{ d Li f} X b^ \ Z LJ m YR xP o^LineNumberTable ConstantValue(LCbColorWindow;)VCbColorWindowCubejava/awt/Color*(Ljava/awt/Component;)Ljava/awt/Component;CbColorWindow.javaadd ExceptionscurpalCbSliderLjava/awt/Color; CbColorWindowLCbColorWindow; SourceFilejava/awt/BorderLayout GrayPanelCbColorWindowSwatchEastredparent()Vmoving$(ILjava/awt/Color;Ljava/awt/Color;)Vgreen()I setElementAt updatePalmovedgetRed(Ljava/lang/Object;I)Vpal(LCbSlider;I)Vswatch getPositionCenter<(Ljava/lang/String;Ljava/awt/Component;)Ljava/awt/Component;CbSliderCallbackgetGreencol(III)Vjava/awt/GridLayoutgetBlueCbColorWindowCallbackIjava/awt/Containerblue BorderPanelCodeLocalVariablesjava/util/Vector lightGray(IIIILCbSliderCallback;)V setLayout(Ljava/awt/LayoutManager;)V(II)VLCbColorWindowSwatch;setColor(I)V LCbSlider;Ljava/util/Vector;(Ljava/awt/Color;)V YRX]sf}Gu **+*Y)#Y(M,Y#,*Y+*ZW,*Y+*Z$W,*Y+*Z!W*,W** Y+ZWE. #0Nlaeu#*+%E [euc* Y* *$ *! '****)***"**&E"#1<TbSKfile/module.info0100644000567100000120000000121410117440624013615 0ustar jcameronwheeldesc_ko_KR.euc= risk=high desc_ru_SU= desc_zh_TW.Big5=ɮ׺޲z desc_pl=Zarzdzanie plikami desc_de=Datei-Manager (Java erforderlich) name=FileManager desc_zh_CN=ļ desc_pt=Administrador de Ficheiros desc_tr=Dosya Yneticisi desc=File Manager desc_es=Gestor de Archivos desc_sv=Filhanterare desc_fr=Gestionnaire de Fichiers desc_ja_JP.euc=ե ޥ͡ desc_ru_RU= desc_ca=Administrador de Fitxers desc_pt_BR=Gerenciador de Arquivos desc_sk=Sprvca Systmu Sborov longdesc=View, edit and change permissions on files and directories on your system with a Windows-like file manager. version=1.162 file/lang/0040755000567100000120000000000010076602360012402 5ustar jcameronwheelfile/lang/zh_TW.Big50100644000567100000120000000617510067670061014156 0ustar jcameronwheelindex_title=ɮ׺޲z index_nojava=oӼҲջݭn Java ~ॿTB@, OzsG䴩 Java top_open=} top_view=˵ top_edit=s top_refresh=Ū top_info=T top_delete=R top_new=W[ top_upload=W top_rename=W top_copy=ƻs top_cut=ŤU top_paste=KW right_name=W right_size=jp right_user=ϥΪ right_group=s right_date= edit_enormal=us@몺ɮ edit_title=s $1 edit_title2=إɮפ edit_filename=ɮצW: edit_eover=$1 LkQ\g edit_esave=Lkxsɮ : $1 edit_eaccess=zQ\xs '$1' info_file=ɮ info_path=|: info_type=O: info_size=jp: info_mod=קɶ: info_link=s: info_perms=v info_user=ϥΪ: info_group=s: info_other=L: info_sticky=]w줸: info_sticky2=u֦̤~Rɮ info_own=Ҧv info_setuid=]w UID: info_setuid2=HϥΪv info_setgid=]w GID: info_setgid2=ɮ~Ӹs info_setgid3=Hsv info_apply=Mܧ info_apply1=uoӥؿ info_apply2=oӥؿP䤤ɮ info_apply3=oӥؿPҦlؿ info_efailed=LkŪ $1 : $2 info_read=Ū info_write=gJ info_list=CX info_exec= delete_dtitle=Rؿ delete_ftitle=Rɮ delete_ddesc=zTwnä[Rؿ $1 PҦe? delete_fdesc=zTwnä[Rɮ $1 ? delete_efailed=LkR $1 : $2 mkdir_title=W[ؿ mkdir_dir=ؿ: mkdir_eexists=$1 wgsb mkdir_efailed=إߥؿ : $1 mkdir_eaccess=zQ\إ '$1' link_title=إ߳s link_from=s: link_to=s: link_eexists=$1 wgsb link_efailed=s : $1 link_efrom=zQ\s '$1' link_efollow=zQ\إ߲Ÿs rename_title=ܧW $1 rename_old=ɦW: rename_new=ܧ: rename_ok=W rename_eexists=s $1 ɮפwgsb rename_efailed=W : $1 rename_eold=zQ\W '$1' rename_enew=zQ\W '$1' file_type0=ؿ file_type1=r file_type2=v file_type3=Gi file_type4=ɮ file_type5=Ÿs file_type6=]Ʊ file_type7=޽u view_enormal=u@몺ɮץiHQ˵ view_eaccess=zQ\s $1 view_eopen=Lk}n $1 : $2 paste_ecopy=bzKWnŤUνƻs paste_egone=ƻsɮ $1 wgsb paste_eover=$1 LkQ\g paste_eself=zɮ׶K쥻W paste_emfailed=ʥ : $1 paste_ecfailed= : $1 upload_efailed=}ҤWǥ : $1 upload_title=Wɮ upload_file=nWǪɮ upload_dir=WǨؿ upload_ok=W upload_conv=O_n DOS Ÿ? upload_efile=SܭnWǪɮ. upload_edir=WǪؿsb. upload_eperm=zQ\إ $1 upload_ewrite=LkgJ $1 : $2. find_eaccess=zQ\s $1 find_eexist=$1 sb $2 find_edir=$1 O@ӥؿb $2 cancel= chmod_eaccess=zQ\s '$1' chmod_euser=$1 : SoӨϥΪ chmod_egroup=$1 : SoӸs chmod_elink=Ÿsd : $1 chmod_echown=ܧ֦̥ : $1 chmod_echmod=ܧv : $1 copy_efrom=zQ\ '$1' copy_eto=zQ\ '$1' copy_elink=Ÿs : $1 delete_eaccess=zQ\R '$1' list_eaccess=zQ\soӥؿ move_eto=zQ\ʨ '$1' move_afrom=zQ\ʦ '$1' acl_user=HϥΪvsAWɮ acl_umask=إɮתBn acl_follow=O_HŸs? acl_dirs=u\sؿ file/lang/zh_CN0100644000567100000120000001622707777120521013343 0ustar jcameronwheelindex_title=ļ index_nojava=ģҪjavaֲ֧ܹ֧java index_eremote=û Webmin¼ $1 Unixû switch_euser=Unix ûڣ top_ret= top_down= top_edit=༭ top_refresh=ˢ top_info=Ϣ top_eacl=ACL top_attr= top_ext=չ top_delete=ɾ top_new=½ top_upload=ϴ top_rename= top_copy= top_cut= top_paste=ճ top_share= top_mount= top_search= top_config= right_name= right_size=С right_user=û right_group= right_date= edit_enormal=ֻܱ༭ļ edit_title=ڱ༭ $1 edit_title2=ڴļ edit_filename=ļ edit_goto=ת edit_find= edit_gotoline=ת edit_replace=滻 edit_all=ȫ滻 edit_searchfor= edit_replaceby=滻 edit_eover=$1 ܱ edit_esave=ļʧ $1 edit_eaccess=δ '$1' edit_notfound=δҵı $1 edit_saveclose=沢ر info_file=ļ info_path=· info_type=ͣ info_size=С info_mod=޸ģ info_link=ᵽ info_perms= info_user=û info_group=飺 info_other= info_octal=˽ƣ info_sticky=ճԣ info_sticky2=ֻ߲ɾļ info_own=Ȩ info_setuid= uid info_setuid2=ûִ info_setgid= gid info_setgid2=ļ̳ info_setgid3=ִ info_apply=Ӧø info_apply1=Ŀ¼ info_apply2=Ŀ¼ļ info_apply3=Ŀ¼Ŀ¼ info_efailed= $1 $2 ʧ info_read=ȡ info_write=д info_list=б info_exec=ִ eacl_eacls=ȡ ACLs ʧ $1 eacl_acltype=ACL eacl_aclname=Ӧõ eacl_aclperms= eacl_add= ͵ACL eacl_remove=ƳACL eacl_efs=ļϵͳ $1 ֧ ACLs eacl_create= ACL eacl_edit=༭ ACL eacl_user=ļ $1 eacl_group=ļ $1 eacl_eowner=ȱҪӦõû eacl_efailed=Ϊ$1 $2ACLsʧ eacl_emask=ֻһ ACL Ŀ eacl_edefmask=ֻһĬ ACL Ŀ eacl_title=$1ACL eacl_owner=ļ eacl_edefaults=һļκĬϵACLĬûACLs acltype_user=û acltype_group= acltype_other= acltype_mask= acltype_default_user=Ĭû acltype_default_group=Ĭ acltype_default_other=Ĭ acltype_default_mask=Ĭ delete_mtitle=ɾļ delete_dtitle=ɾĿ¼ delete_ftitle=ɾļ delete_ddesc=ȷʵҪɾĿ¼ $1 ݣ delete_fdesc=ȷʵҪɾļ $1 delete_mdesc=ȷʵҪɾЩĿ¼ļ delete_efailed=ɾ $1 $2 ʧ mkdir_title=½Ŀ¼ mkdir_dir=½Ŀ¼ mkdir_eexists=$1 Ѿ mkdir_efailed=Ŀ¼ $1 ʧ mkdir_eaccess=Ȩ '$1' link_title= link_from=ԣ link_to=ӵ link_eexists=$1 Ѿ link_efailed=ʧܣ$1 link_efrom=Ȩ '$1' link_efollow=Ȩ rename_title=$1 rename_old=ԭ rename_new= rename_ok= rename_eexists=ļ $1 Ѵ rename_efailed=ʧܣ $1 rename_eold=Ȩ '$1' rename_enew=ȨΪ '$1' file_type0=Ŀ¼ file_type1=ıļ file_type2=ӳļ file_type3=ļ file_type4=ļ file_type5= file_type6=豸ļ file_type7=ܵ view_enormal=ֻܲ鿴ļ view_enormal2=ֻļ view_eaccess=Ȩ $1 view_eopen= $1 $2 ʧ paste_ecopy=ճ֮ǰл򿽱 paste_egone=ļ $1 Ѿ paste_eover=$1 ܸ paste_eself=ܽļճ paste_emfailed=ƶʧܣ$1 paste_ecfailed=ʧܣ$1 over_title=ļ over_msg=ļ $1 ѾڡֶΪҪճļһ over_new=ļ over_ok=ȷ upload_efailed=ϴʧܣ$1 upload_title=ϴļ upload_file=Ҫϴļ upload_dir=ϴĿ¼ upload_ok=ϴ upload_conv=ǷתDOSзţ upload_efile=ûѡҪϴļ upload_edir=ϴĿ¼ڡ upload_eperm=Ȩ $1 upload_ewrite=д $1$2 ʧܡ upload_already=ļ $1 ѾڡȷҪ find_eaccess=Ȩ $1 find_eexist=$2в$1 find_edir=$1 $2 еĿ¼ cancel=ȡ close=ر chmod_eaccess=Ȩ '$1' chmod_euser=$1޴û chmod_egroup=$1޴û chmod_elink=symlink ʧܣ$1 chmod_echown=chown ʧܣ$1 chmod_echmod=chmod ʧܣ$1 chmod_efollow=δ༭ copy_efrom=Ȩ '$1' copy_eto=Ȩ '$1' copy_elink=symlink ʧ '$1' delete_eaccess=Ȩɾ '$1' list_eaccess=ȨʴĿ¼ list_edir=ʾбʧ $1 $2 move_eto=Ȩƶ '$1' move_afrom=Ȩƶ '$1' acl_user=Ϊûʷļ acl_user_def=Webmin¼ͬ acl_umask=ļȥ acl_follow=ǷǸӣ acl_ro=ֻģʽ acl_dirs=Ŀ¼ acl_home=WebminûĿ¼ acl_log=ļ޸ı־ acl_goto=Ŀ¼ share_title= share_samba=Windows share_nfs=NFS share_son= Windows ļ share_soff= Windows ļ share_writable=д룿 share_available=ڻ share_sheader=ѡ share_only= share_guest=Guest ʣ share_comment=ע share_nheader=NFS ѡ share_non= NFS ļ share_noff=ѽ NFS ļ share_desc= share_ro=ֻ share_rw=д share_root=Root share_none= share_all= share_listed=гġ share_host= share_opts=ѡ share_s0=κ share_s1=η Root û share_s2= share_lro=ֻ share_lrw=д log_create_export=Ѵ NFS $1 log_modify_export=޸ĵ NFS $1 log_delete_export=ɾ NFS $1 log_create_share=Ѵ Samba $1 log_modify_share=޸ĵ Samba $1 log_delete_share=ɾ Samba $1 log_save=ѱļ $1 log_chmod=Ѹıļ $1 Ȩ log_mkdir=ѴĿ¼ $1 log_upload=ϴļ $1 log_link=Ѵķ $1 $2 log_relink=޸ĵķ $1 $2 log_copy=ѿļ $1 $2 log_move=ƶļ $1 $2 log_delete=ɾļ $1 log_attr=ļ $1 log_acl=ļ $1 ACL search_eaccess=ȨĿ¼ search_title=ҵļ search_ok= search_dir=Ŀ¼ search_match=ļƥ search_user=û search_group= search_any=κ search_type=ļ search_types_=κ search_types_f=ļ search_types_d=Ŀ¼ search_types_l= search_types_p=ܵ search_size=ļС search_more= search_less= search_xdev=ǰļأ search_edir=ʧЧĿ¼ search_ematch=ʧƥʽ search_euser=ʧû search_egroup=ʧ search_esize=ļСֵ search_crit=׼ search_list= facl_eaccess=δôļACLs attr_eattrs=ȡʧܣ$1 attr_efs=ļϵͳ $1 ֧ attr_add= attr_name= attr_value=ֵ attr_efailed=Ϊ $1 $2 ʧ attr_title=$1ļ attr_create= attr_edit=༭ attr_ename=ȱ ext_eattrs=ȡչʧܣ $1 ext_efs=ļϵͳ $1 ֧չ ext_title=$1 չ ext_header=չļ ext_efailed=Ϊ $1 $2ʧ eattr_A=·ʴ eattr_a=ֻӵļĩβ eattr_c=ѹ eattr_d=ʹdump eattr_i=޸ eattr_s=ɾʱ eattr_S=дͬ eattr_u=Ϊɾ mount_eaccess=δļϵͳ mount_efstab=˼صϲļϵͳ mount_epoint=$1 Ǽص mount_rusure1=ȷҪ $2 $1 mount_rusure2=ȷҪ $2ж $1 mount_err1=ʧ $1 $2 mount_err2=жʧ $1 $2 mount_title1=ļϵͳ mount_title2=жļϵͳ file/lang/en0100644000567100000120000002625110076602335012734 0ustar jcameronwheelindex_title=File Manager index_nojava=This module requires java to function, but your browser does not support java index_eremote=There is no Unix user matching the Webmin login $1. switch_euser=Unix user does not exist! top_ret=Index top_down=Save top_edit=Edit top_refresh=Refresh top_info=Info top_eacl=ACL top_attr=Attrs top_ext=EXT top_delete=Delete top_new=New top_upload=Upload top_rename=Rename top_copy=Copy top_cut=Cut top_paste=Paste top_share=Sharing top_mount=Mount top_search=Find top_config=Config right_name=Name right_size=Size right_user=User right_group=Group right_date=Date edit_enormal=Only normal files can be edited edit_title=Editing $1 edit_title2=Creating file edit_filename=Filename: edit_goto=Goto edit_find=Find edit_gotoline=Go to line edit_replace=Replace edit_all=Replace all edit_searchfor=Search for edit_replaceby=Replace by edit_eover=$1 cannot be overwritten edit_esave=Failed to save file : $1 edit_eaccess=You are not allowed to save '$1' edit_efollow=You are not allowed to write to the symbolic link '$1' edit_notfound=The text $1 was not found edit_saveclose=Save & Close edit_elength=File was truncated! info_file=File info_path=Path: info_type=Type: info_size=Size: info_mod=Modified: info_link=Link to: info_perms=Permissions info_user=User: info_group=Group: info_other=Other: info_octal=Octal: info_sticky=Sticky: info_sticky2=Only owners can delete files info_own=Ownership info_setuid=Setuid: info_setuid2=Execute as user info_setgid=Setgid: info_setgid2=Files inherit group info_setgid3=Execute as group info_apply=Apply changes to info_apply1=This directory only info_apply2=This directory and its files info_apply3=This directory and all subdirectories info_efailed=Failed to update $1 : $2 info_read=Read info_write=Write info_list=List info_exec=Exec eacl_eacls=Failed to read ACLs : $1 eacl_acltype=ACL Type eacl_aclname=Apply to eacl_aclperms=Permissions eacl_add=Add ACL of type : eacl_remove=Remove ACL eacl_efs=The filesystem $1 does not support ACLs eacl_create=Create ACL eacl_edit=Edit ACL eacl_user=File owner $1 eacl_group=File group $1 eacl_eowner=Missing user or group to apply to eacl_efailed=Failed to set ACL for $1 : $2 eacl_emask=There can be at most one mask ACL entry eacl_edefmask=There can be at most one default mask ACL entry eacl_title=ACL for $1 eacl_owner=File owner eacl_edefaults=If a file has any default ACL, it must have default user, group and other ACLs. acltype_user=User acltype_group=Group acltype_other=Others acltype_mask=Mask acltype_default_user=Default User acltype_default_group=Default Group acltype_default_other=Default Others acltype_default_mask=Default Mask delete_mtitle=Delete multiple files delete_dtitle=Delete directory delete_ftitle=Delete file delete_ddesc=Are you sure you want to permanently delete the directory $1 and all its contents? delete_fdesc=Are you sure you want to permanently delete the file $1 ? delete_mdesc=Are you sure you want to permanently delete these files and directories? : delete_efailed=Failed to delete $1 : $2 mkdir_title=New Directory mkdir_dir=New directory: mkdir_eexists=$1 already exists mkdir_efailed=Create directory failed : $1 mkdir_eaccess=You are not allowed to create '$1' link_title=Create Link link_from=Link from: link_to=Link to: link_eexists=$1 already exists link_efrom=Link source must be an absolute path link_efailed=Link failed : $1 link_efrom2=You are not allowed to link from '$1' link_efollow=You are not allowed to create symlinks rename_title=Rename $1 rename_old=Old name: rename_new=New name: rename_ok=Rename rename_eexists=A file called $1 already exists rename_efailed=Rename failed : $1 rename_eold=You are not allowed to rename '$1' rename_enew=You are not allowed to rename to '$1' file_type0=Directory file_type1=Text file file_type2=Image file file_type3=Binary file file_type4=File file_type5=Symbolic link file_type6=Device file file_type7=Pipe view_enormal=Only normal files can be viewed view_enormal2=Only normal files can be downloaded view_eaccess=You are not allowed to access $1 view_eopen=Failed to open $1 : $2 view_edir=An archive can only be created for a directory view_ecmd=The command $1 needed to create an archive is not installed view_ecomp=Failed to create archive : $1 view_earchive=You are not allowed to download archives view_earchmax=The selected directory is larger than the maximum allowed for archiving ($1 bytes) paste_ecopy=You must cut or copy before pasting paste_egone=Copied file $1 no longer exists paste_eover=$1 cannot be overwritten paste_eself=You cannot paste a file over itself paste_emfailed=Move failed : $1 paste_ecfailed=Copy failed : $1 over_title=File Exists over_msg=The file $1 already exists. Use the field below to enter a new filename for the pasted file. over_new=New filename: over_ok=Ok upload_efailed=Failed to open upload : $1 upload_title=Upload File upload_file=File to upload upload_dir=Upload to directory upload_ok=Upload upload_conv=Convert DOS newlines? upload_efile=No file selected to upload. upload_edir=Upload directory does not exist. upload_eperm=You are not allowed to create $1 upload_ewrite=Failed to write to $1 : $2. upload_already=The file $1 already exists. Are you sure that you want to overwrite it? upload_elink=Cannot upload to a symbolic link upload_zip=Uncompress ZIP or TAR file? upload_yes=Yes, then delete find_eaccess=You are not allowed to access $1 find_eexist=$1 does not exist in $2 find_edir=$1 is not a directory in $2 cancel=Cancel close=Close eopen=Download failed : $1 chmod_eaccess=You are not allowed to access '$1' chmod_euser=$1 : no such user chmod_egroup=$1 : no such group chmod_elink=symlink failed : $1 chmod_echown=chown failed : $1 chmod_echmod=chmod failed : $1 chmod_efollow=You are not allowed to edit symbolic links copy_efrom=You are not allowed to copy from '$1' copy_eto=You are not allowed to copy to '$1' copy_elink=symlink failed : $1 delete_eaccess=You are not allowed to delete '$1' list_eaccess=You are not allowed to access this directory list_edir=Failed to list $1 : $2 move_eto=You are not allowed to move to '$1' move_afrom=You are not allowed to move '$1' acl_user=Access files on server as user acl_user_def=Same as Webmin login acl_umask=Umask for new files acl_follow=Always follow symlinks? acl_fyes=If owners match acl_ro=Read-only mode? acl_dirs=Only allow access to directories acl_home=Include home directory of Webmin user acl_log=Log all file modifications? acl_goto=Open first allowed directory? acl_max=Maximum upload size acl_unlim=Unlimited acl_b=bytes acl_archive=Can download archives of directories? acl_archmax=Yes, if smaller than acl_buttons=Available buttons on toolbar acl_button_save=Save (download file) acl_button_edit=Edit (edit text file) acl_button_info=Info (edit file permissions and ownership) acl_button_acl=ACL (edit Posix ACL) acl_button_attr=Attr (edit XFS attributes) acl_button_ext=EXT (edit EXT attributes) acl_button_search=Find (find files) acl_button_delete=Delete (delete files) acl_button_new=New (create text file) acl_button_upload=Upload (upload file from client) acl_button_mkdir=New (create directory) acl_button_makelink=New (create symbolic link) acl_button_rename=Rename (rename file) acl_button_sharing=Sharing (setup Samba and NFS file sharing) acl_button_mount=Mount (mount or un-mount filesystem) acl_button_copy=Copy, Cut and Paste acl_unarchive=Can extract uploaded archive files? acl_unarchive2=Always attempt to acl_unarchive1=$yes acl_unarchive0=$no acl_dostounix=Can have DOS newlines converted? acl_chroot=Chroot directory for entire file manager acl_relto=(relative to any chroot directory) share_title=Sharing share_samba=Windows share_nfs=NFS share_son=Windows file sharing enabled share_soff=Windows file sharing disabled share_writable=Writable? share_available=Currently active? share_sheader=Sharing options share_only=Only share_guest=Guest access? share_comment=Comment share_nheader=NFS export options share_non=NFS file sharing enabled share_noff=NFS file sharing disabled share_desc=Description share_ro=Read-only hosts share_rw=Read-write hosts share_root=Root access hosts share_none=None share_all=All share_listed=Listed.. share_host=Hosts share_opts=Options share_s0=Trust nobody share_s1=Trust non-root share_s2=Trust everybody share_lro=Read-only share_lrw=Read-write log_create_export=Created NFS export $1 log_modify_export=Modified NFS export $1 log_delete_export=Deleted NFS export $1 log_create_share=Created Samba share $1 log_modify_share=Modified Samba share $1 log_delete_share=Deleted Samba share $1 log_save=Saved file $1 log_chmod=Changed permissions on file $1 log_mkdir=Created directory $1 log_upload=Uploaded file $1 log_link=Created symbolic link $1 to $2 log_relink=Modified symbolic link $1 to $2 log_copy=Copied file $1 to $2 log_move=Moved file $1 to $2 log_delete=Deleted file $1 log_attr=Set attributes on file $1 log_acl=Set ACL on file $1 search_eaccess=You are not allowed to search this directory search_title=Find files search_ok=Search Now search_dir=Search directory search_match=For files matching search_user=Owned by user search_group=Owned by group search_any=Any search_type=File type search_types_=Any search_types_f=File search_types_d=Directory search_types_l=Symbolic link search_types_p=Named pipe search_size=File size search_more=More than search_less=Less than search_xdev=Search past mounts? search_edir=Missing or invalid search directory search_ematch=Missing matching regexp search_euser=Missing username search_egroup=Missing group name search_esize=File size must be an integer search_crit=Search criteria search_list=Search results facl_eaccess=You are not allowed to set ACLs for this file attr_eattrs=Failed to get attributes : $1 attr_efs=The filesystem $1 does not support attributes attr_add=Add Attribute attr_name=Attribute Name attr_value=Attribute Value attr_efailed=Failed to set attributes for $1 : $2 attr_title=File Attributes for $1 attr_create=Add Attribute attr_edit=Edit Attribute attr_ename=Missing attribute name ext_eattrs=Failed to get EXT attributes : $1 ext_efs=The filesystem $1 does not support EXT attributes ext_title=EXT attributes for $1 ext_header=EXT file attributes ext_efailed=Failed to set attributes for $1 : $2 eattr_A=Do not update access times eattr_a=Can only append to file eattr_c=Compress data on disk eattr_d=Do not backup with dump eattr_i=Do not allow modification eattr_s=Zero blocks when deleting eattr_S=Always sync after writing eattr_u=Save contents for undeletion mount_eaccess=You are not allowed to mount filesystems mount_efstab=No filesystem exists at this mount point mount_epoint=$1 is not a mount point mount_rusure1=Are you sure you want to mount $1 from $2 ? mount_rusure2=Are you sure you want to un-mount $1 from $2 ? mount_err1=Failed to mount $1 : $2 mount_err2=Failed to un-mount $1 : $2 mount_title1=Mount filesystem mount_title2=Un-mount filesystem zip_err=Could not extract file : $1 zip_ecmd=Missing $1 command zip_eunzip=Unzip failed : $1 zip_ename=Does not appear to be a zip, tar or tar.gz file zip_euntar=Un-tar failed : $1 zip_euntar2=Un-compress and un-tar failed : $1 ddir_title=Download Directory ddir_rusure=To download the contents of $1 as an archive file, click on one of the archive type buttons below. ddir_zip=ZIP ddir_tgz=TAR.GZ ddir_tar=TAR ebutton=This feature is not available file/lang/pt0100644000567100000120000001065407060351565012762 0ustar jcameronwheelindex_title=Administrador de Ficheiros index_nojava=Este mdulo requer java para funcionar, mas o seu navegador no suporta java top_open=Abrir top_view=Ver top_edit=Editar top_refresh=Refrescar top_info=Informaes top_delete=Apagar top_new=Novo top_upload=Carregar top_rename=Renomear top_copy=Copiar top_cut=Cortar top_paste=Colar right_name=Nome right_size=Tamanho right_user=Utilizador right_group=Grupo right_date=Data edit_enormal=Apenas ficheiros normais podem ser editados edit_title=A editar $1 edit_title2=A criar ficheiro edit_filename=Nome do ficheiro: edit_eover=$1 no pode ser sobrescrito edit_esave=Erro ao guardar ficheiro : $1 edit_eaccess=Voc no est autorizado para guardar '$1' info_file=Ficheiro info_path=Caminho: info_type=Tipo: info_size=Tamanho: info_mod=Modificado: info_link=Enlace com: info_perms=Permisses info_user=Utilizador: info_group=Grupo: info_other=Outro: info_sticky=Restrio: info_sticky2=Apenas os proprietrios podem apagar ficheiros info_own=Propriedade info_setuid=Colocar UID: info_setuid2=Executar como utilizador info_setgid=Colocar GID: info_setgid2=Ficheiros herdados do grupo info_setgid3=Executar como grupo info_apply=Aplicar alteraes a info_apply1=Este directrio apenas info_apply2=Este directrio e os seus ficheiros info_apply3=Este directrio e todos os subdirectrios info_efailed=Erro ao actualizar $1 : $2 info_read=Leitura info_write=Escrita info_list=Lista info_exec=Execuo delete_dtitle=Apagar directrio delete_ftitle=Apagar ficheiro delete_ddesc=Tem a certeza que quer permanentemente apagar o directrio $1 e todo o seu contedo? delete_fdesc=Tem a certeza que quer apagar permanentemente o ficheiro $1 ? delete_efailed=Erro ao apagar $1 : $2 mkdir_title=Novo Directrio mkdir_dir=Novo directrio: mkdir_eexists=$1 j existe mkdir_efailed=Erro na criao de directrio : $1 mkdir_eaccess=Voc no est autorizado para criar '$1' link_title=Criar Enlace link_from=Enlace de: link_to=Enlace com: link_eexists=$1 j existe link_efailed=Erro no enlace : $1 link_efrom=Voc no est autorizado para criar enlaces de '$1' link_efollow=Voc no est autorizado para criar enlaces simblicos rename_title=Renomear $1 rename_old=Nome antigo: rename_new=Nome novo: rename_ok=Renomear rename_eexists=J existe um ficheiro denominado $1 rename_efailed=Erro na renomeao : $1 rename_eold=Voc no est autorizado para renomear '$1' rename_enew=Voc no est autorizado para renomear para '$1' file_type0=Directrio file_type1=Ficheiro de texto file_type2=Ficheiro de imagem file_type3=Ficheiro binrio file_type4=Ficheiro file_type5=Enlace simblico file_type6=Ficheiro de dispositivo file_type7=Tubo view_enormal=Apenas ficheiros normais podem ser vistos view_eaccess=Voc no est autorizado para aceder a $1 view_eopen=Erro ao abrir $1 : $2 paste_ecopy=Tem de cortar ou copiar primeiro antes de colar paste_egone=O ficheiro cpoiado $1 j no existe paste_eover=$1 no pode ser sobrescrito paste_eself=No pode colar um ficheiro sobre si mesmo paste_emfailed=Erro ao mover : $1 paste_ecfailed=Erro ao copiar : $1 upload_efailed=Erro ao abrir ficheiro carregado : $1 upload_title=Carregar Ficheiro upload_file=Ficheiro paa carregar upload_dir=Carregar para o directrio upload_ok=Carregar upload_conv=Converter linhas de DOS? upload_efile=No foram seleccionados ficheiros para carregar. upload_edir=Directrio de carga no existe. upload_eperm=Voc no est autorizado para criar $1 upload_ewrite=Erro ao escrever para $1 : $2. find_eaccess=Voc no est autorizado para aceder a $1 find_eexist=$1 no existe em $2 find_edir=$1 no um directrio de $2 cancel=Cancelar chmod_eaccess=Voc no est autorizado para aceder a '$1' chmod_euser=$1 : no existe tal utilizador chmod_egroup=$1 : no existe tal grupo chmod_elink=erro no enlace simblico : $1 chmod_echown=erro na alterao de proprietrio : $1 chmod_echmod=erro na alterao de permisses : $1 copy_efrom=Voc no est autorizado para copiar de '$1' copy_eto=Voc no est autorizado para copiar para '$1' copy_elink=erro no enlace simblico : $1 delete_eaccess=Voc no est autorizado para apagar '$1' list_eaccess=Voc no est autorizado para aceder a este directrio move_eto=Voc no est autorizado para mover para '$1' move_afrom=Voc no est autorizado para mover '$1' acl_user=Aceder a ficheiros no servidor como utilizador acl_umask=Mscara de utilizador para novos ficheiros acl_follow=Seguir sempre enlaces simblicos? acl_dirs=Apenas permitir acesso a directrios file/lang/es0100664000567100000120000002466010067401521012737 0ustar jcameronwheelindex_title=Administrador de Archivos index_nojava=Este mdulo requiere java para funcionar, pero su navegador no soporta java index_eremote=No hay ningn usuario Unix que coincida con el usuario de ingreso de Webmin $1. switch_euser=El usuario Unix no existe! top_ret=Indice top_down=Salvar top_edit=Editar top_refresh=Refrescar top_info=Informacin top_eacl=ACL top_attr=Atributos top_ext=EXT top_delete=Borrar top_new=Nuevo top_upload=Cargar top_rename=Renombrar top_copy=Copiar top_cut=Cortar top_paste=Pegar top_share=Compartir top_mount=Montar top_search=Buscar top_config=Configurar right_name=Nombre right_size=Tamao right_user=Usuario right_group=Grupo right_date=Fecha edit_enormal=Solo los archivos normales pueden ser editados edit_title=Editando $1 edit_title2=Creando archivo edit_filename=Nombre de archivo: edit_goto=Ir a edit_find=Buscar edit_gotoline=Ir a lnea edit_replace=Reemplazar edit_all=Reemplazar todo edit_searchfor=Buscar edit_replaceby=Reemplazar por edit_eover=$1 no puede ser sobreescrito edit_esave=Fallo al salvar archivo : $1 edit_eaccess=No est autorizado a salvar '$1' edit_efollow=No est autorizado a escribir en el vnculo simblico '$1' edit_notfound=El texto $1 no fu encontrado edit_saveclose=Salvar y Cerrar info_file=Archivo info_path=Camino: info_type=Tipo: info_size=Tamao: info_mod=Modificado: info_link=Vnculo a: info_perms=Permisos info_user=Usuario: info_group=Grupo: info_other=Otro: info_octal=Octal: info_sticky=Restriccin: info_sticky2=Solo los dueos pueden borrar archivos info_own=Propiedad info_setuid=Ingresar ID de usuario: info_setuid2=Ejecutar como usuario info_setgid=Ingresar ID de grupo: info_setgid2=Archivos heredan grupo info_setgid3=Ejecutar como grupo info_apply=Aplicar cambios a info_apply1=Este directorio solamente info_apply2=Este directorio y sus archivos info_apply3=Este directorio y todos sus subdirectorios info_efailed=Fallo al actualizar $1 : $2 info_read=Leer info_write=Escribir info_list=Listar info_exec=Ejecutar eacl_eacls=Fallo al leer ACLs : $1 eacl_acltype=Tipo de ACL eacl_aclname=Aplicar a eacl_aclperms=Permisos eacl_add=Agregar ACL de tipo : eacl_remove=Borrar ACL eacl_efs=El sistema de archivos $1 no soporta ACLs eacl_create=Crear ACL eacl_edit=Editar ACL eacl_user=Dueo de archivo $1 eacl_group=Grupo de archivo $1 eacl_eowner=Usuario o grupo a aplicar no ingresado eacl_efailed=Fallo al asignar ACL para $1 : $2 eacl_emask=Puede haber a lo sumo una entrada de mscara de ACL eacl_edefmask=Puede haber a lo sumo una entrada de mscara de ACL por defecto eacl_title=ACL para $1 eacl_owner=Dueo del archivo eacl_edefaults=si un archivo tiene alguna ACL por defecto, debe tener usuario, grupo y otras ACL por defecto. acltype_user=Usuario acltype_group=Grupo acltype_other=Otros acltype_mask=Mscara acltype_default_user=Usuario por defecto acltype_default_group=Grupo por defecto acltype_default_other=Otros por defecto acltype_default_mask=Mscara por defecto delete_mtitle=Borrar archivos mltiples delete_dtitle=Borrar directorio delete_ftitle=Borrar archivo delete_ddesc=Est seguro que quiere borrar permanentemente el directorio $1 y todo su contenido? delete_fdesc=Est seguro que quiere borrar permanentemente el archivo $1 ? delete_mdesc=Est seguro que quiere borrar permanentemente estos archivos y directorios? : delete_efailed=Fallo al borrar $1 : $2 mkdir_title=Nuevo Directorio mkdir_dir=Nuevo directorio: mkdir_eexists=$1 ya existe mkdir_efailed=Fallo al crear directorio : $1 mkdir_eaccess=No est autorizado a crear '$1' link_title=Crear Vnculo link_from=Vincular desde: link_to=Vincular hacia: link_eexists=$1 ya existe link_efailed=Fallo vnculo : $1 link_efrom=No est autorizado a vincular desde '$1' link_efollow=No est autorizado a crear vnculos simblicos rename_title=Renombrar $1 rename_old=Nombre anterior: rename_new=Nombre nuevo: rename_ok=Renombrar rename_eexists=Ya existe un archivo llamado $1 rename_efailed=Fallo al renombrar : $1 rename_eold=No est autorizado a renombrar '$1' rename_enew=No est autorizado a renombrar a '$1' file_type0=Directorio file_type1=Archivo de texto file_type2=Archivo de imgen file_type3=Archivo binario file_type4=Archivo file_type5=Vnculo simblico file_type6=Archivo de dispositivo file_type7=Tubera view_enormal=Solo los archivos normales pueden ser visualizados view_enormal2=Solo los archivos normales pueden ser descargados view_eaccess=No est autorizado a acceder a $1 view_eopen=Fallo al abrir $1 : $2 paste_ecopy=Debe cortar o copiar antes de pegar paste_egone=El archivo copiado $1 ya no existe paste_eover=$1 no puede ser sobreescrito paste_eself=No puede pegar un archivo sobre si mismo paste_emfailed=Fallo al mover : $1 paste_ecfailed=Fallo al copiar : $1 over_title=Archivo existe over_msg=El archivo $1 ya existe. Use el campo de abajo para ingresar un nuevo nombre de archivo para el archivo pegado. over_new=Nuevo nombre de archivo: over_ok=Ok upload_efailed=Fallo al abrir carga : $1 upload_title=Cargar Archivos upload_file=Archivo para cargar upload_dir=Cargar a directorio upload_ok=Cargar upload_conv=Convertir nuevas lneas de DOS? upload_efile=No se seleccion ningn archivo para cargar. upload_edir=El directorio para cargar no existe. upload_eperm=No est autorizado a crear $1 upload_ewrite=Fallo al escribir a $1 : $2. upload_already=El archivo $1 ya existe. Est seguro que desea sobreescribirlo? upload_elink=No se puede cargar a un vnculo simblico find_eaccess=No est autorizado a acceder a $1 find_eexist=$1 no existe en $2 find_edir=$1 no es un directorio en $2 cancel=Cancelar close=Cerrar chmod_eaccess=No est autorizado a acceder a '$1' chmod_euser=$1 : no existe dicho usuario chmod_egroup=$1 : no existe dicho grupo chmod_elink=fallo en vnculo simblico : $1 chmod_echown=fallo al cambiar dueo : $1 chmod_echmod=fallo al cambiar modo : $1 chmod_efollow=No est autorizado a editar vnculos simblicos copy_efrom=No est autorizado a copiar desde '$1' copy_eto=No est autorizado a copiar a '$1' copy_elink=fallo en vnculo simblico : $1 delete_eaccess=No est autorizado a borrar '$1' list_eaccess=No est autorizado a acceder a este directorio list_edir=Fallo al listar $1 : $2 move_eto=No est autorizado a mover a '$1' move_afrom=No est autorizado a mover '$1' acl_user=Acceder a archivos en el servidor como usuario acl_user_def=Igual que el nombre de ingreso de Webmin acl_umask=Mscara de Usario para Nuevos archivos acl_follow=Seguir siempre los vnculos simblicos? acl_fyes=Si los dueos coinciden acl_ro=Modo de solo lectura? acl_dirs=Permitir acceso solo a los directorios acl_home=Incluir directorio de inicio del usuario Webmin acl_log=Registrar todas las modificaciones de archivos? acl_goto=Abrir el primer directorio permitido? share_title=Compartir share_samba=Windows share_nfs=NFS share_son=Habilitar compartir archivos de Windows share_soff=Deshabilitar compartir archivos de Windows share_writable=Editable? share_available=Actualmente activo? share_sheader=Opciones para compartir share_only=Solo share_guest=Acceso como invitado? share_comment=Comentario share_nheader=Opciones de exportacin NFS share_non=Compartir archivos NFS habilitado share_noff=Compartir archivos NFS deshabilitado share_desc=Descripcin share_ro=Mquina de solo lectura share_rw=Mquina de lectura-escritura share_root=Mquinas de acceso raz share_none=Ninguno share_all=Todos share_listed=Listado.. share_host=Mquinas share_opts=Opciones share_s0=No confiar en nadie share_s1=Confiar en aquellos que no sean raz share_s2=Confiar en todos share_lro=Solo lectura share_lrw=Lectura-escritura log_create_export=Creada exportacin NFS $1 log_modify_export=Modificada exportacin NFS $1 log_delete_export=Borrada exportacin NFS $1 log_create_share=Creada comparticin Samba $1 log_modify_share=Modificada comparticin Samba $1 log_delete_share=Borrada comparticin Samba $1 log_save=Salvado archivo $1 log_chmod=Permisos cambiados en el archivo $1 log_mkdir=Creado directorio $1 log_upload=Cargado archivo $1 log_link=Creado vnculo simblico $1 a $2 log_relink=Modificado vnculo simblico $1 a $2 log_copy=Copiado archivo $1 a $2 log_move=Movido archivo $1 a $2 log_delete=Borrado archivo $1 log_attr=Configurados atributos en archivo $1 log_acl=Configurado ACL sobre archivo $1 search_eaccess=No est autorizado a buscar este directorio search_title=Buscar archivos search_ok=Buscar Ahora search_dir=Buscar directorio search_match=Para archivos que coincidan search_user=Perteneciente al usuario search_group=Perteneciente al grupo search_any=Cualquiera search_type=Tipo de archivo search_types_=Cualquiera search_types_f=Archivo search_types_d=Directorio search_types_l=Vnculo Simblico search_types_p=Tubera nombrada search_size=Tamao de archivo search_more=Mas que search_less=Menos que search_xdev=Buscar en montajes anteriores? search_edir=Directorio de bsqueda no ingresado o no vlido search_ematch=Expresin de coincidencia no ingresada search_euser=Nombre de usuario no ingresado search_egroup=Nombre de grupo no ingresado search_esize=El tamao del archivo debe ser un entero search_crit=Criterio de bsqueda search_list=Resultados de la bsqueda facl_eaccess=No est autorizado a configurar ACLs para este archivo attr_eattrs=Fallo al obtener atributos : $1 attr_efs=El sistema de archivos $1 no soporta atributos attr_add=Agregar Atributo attr_name=Nombre del atributo attr_value=Valor del atributo attr_efailed=Fallo al configurar atributo para $1 : $2 attr_title=Atributos de archivo para $1 attr_create=Agregar atributo attr_edit=Editar atributo attr_ename=Nombre de atributo no ingresado ext_eattrs=Fallo al obtener atributos EXT : $1 ext_efs=El sistema de archivos $1 no soporta atributos EXT ext_title=Atributos EXT para $1 ext_header=Atributos EXT de archivo ext_efailed=Fallo al ocnfigurar atributos para $1 : $2 eattr_A=No actualizar tiempos de acceso eattr_a=Solo puede agregar a archivo eattr_c=Comprimir datos en el disco eattr_d=No respaldar con volcado eattr_i=No permitir modificaciones eattr_s=Poner a cero los bloques a borrar eattr_S=Siempre sincronizar despues de escribir eattr_u=Salvar contenido para no borrado mount_eaccess=No est autorizado a montar sistemas de archivos mount_efstab=No existe sistema de archivo en este punto de montaje mount_epoint=$1 no es un punto de montaje mount_rusure1=Est seguro que desea montar $1 desde $2 ? mount_rusure2=Est seguro que desea desmontar $1 desde $2 ? mount_err1=Fallo al montar $1 : $2 mount_err2=Fallo al desmontar $1 : F2 mount_title1=Montar sistema de archivos mount_title2=Desmontar sistema de archivos file/lang/fr0100644000567100000120000001645307354734746012765 0ustar jcameronwheelindex_title=Gestionnaire de Fichier index_nojava=Ce module ncessite que java soit en fonction, mais votre fureteur ne le supporte pas switch_euser=L'utilisateur Unix n'existe pas ! top_open=Ouvrir top_view=Voir top_edit=diter top_refresh=Rafrachir top_info=Information top_delete=Supprimer top_new=Nouveau top_upload=Envoyer top_rename=Renommer top_copy=Copier top_cut=Couper top_paste=Coller top_share=Partage top_search=Trouver right_name=Nom right_size=Taille right_user=Usager right_group=Groupe right_date=Date edit_enormal=Seulement les fichiers normaux peuvent tre diter edit_title=diter '$1' edit_title2=Crer un fichier edit_filename=Nom de fichier: edit_eover='$1' ne peut tre crit par-dessus edit_esave=Impossible d'ouvrir le fichier '$1' edit_eaccess=Vous n'tes pas autoris sauver '$1' info_file=Fichier info_path=Chemin: info_type=Type: info_size=Taille: info_mod=Modifi: info_link=Liens vers: info_perms=Permissions info_user=Usager: info_group=Groupe: info_other=Autre: info_sticky=Collant: info_sticky2=Seulement son propritaire peut effacer un fichier info_own=Propritaire info_setuid=SUID: info_setuid2=Excuter comme usager info_setgid=SGID: info_setgid2=Les fichiers hrite du groupe info_setgid3=Excuter comme groupe info_apply=Appliquer les changements info_apply1=Ce rpertoire seulement info_apply2=Ce rpertoire et ses fichiers info_apply3=Ce rpertoire et tout ses sous-rpertoires info_efailed=Impossible de mettre jour '$1' : $2 info_read=Lire info_write=crire info_list=Lister info_exec=Excuter delete_dtitle=Supprimer un rpertoire delete_ftitle=Supprimer un fichier delete_ddesc=Vous tes sur que vous voulez supprimer dfinitivement le rpertoire '$1' et tout son contenu? delete_fdesc=Vous tes sur que vous voulez supprimer dfinitivement le fichier $1? delete_efailed=Impossible de supprimer '$1' : $2 mkdir_title=Nouveau Rpertoire mkdir_dir=Nouveau rpertoire: mkdir_eexists='$1' existe dj mkdir_efailed=Impossible de crer le rpertoire : $1 mkdir_eaccess=Vous n'tes pas autoris crer '$1' link_title=Crer un Lien Symbolique link_from=Lien de: link_to=Lien vers: link_eexists='$1' Existe dj link_efailed=Impossible de faire le lien symbolique '$1' link_efrom=Vous n'tes pas autoris crer aucun lien symbolique de '$1' link_efollow=Vous n'tes pas autoris crer aucun lien symbolique rename_title=Renommer '$1' rename_old=Ancien nom: rename_new=Nouveau nom: rename_ok=Renommer rename_eexists=Un fichier appel '$1' existe dj rename_efailed=Impossible de renommer '$1' rename_eold=Vous n'tes pas autoris renommer '$1' rename_enew=Vous n'tes pas autoris renommer pour '$1' file_type0=Rpertoire file_type1=Fichier texte file_type2=Fichier image file_type3=Fichier binaire file_type4=Fichier file_type5=Lien symbolique file_type6=Fichier de priphrique file_type7=Tuyau view_enormal=Seulement un fichier normal peut tre visionn view_eaccess=Vous n'tes pas autoris d'accder '$1' view_eopen=Impossible d'ouvrir '$1' : $2 paste_ecopy=Vous devez copier ou couper avant de coller paste_egone=Le fichier copi '$1' n'existe plus paste_eover='$1' ne peut tre cras paste_eself=Vous ne pouvez coller un fichier par-dessus lui-mme paste_emfailed=Impossible de dplacer '$1' paste_ecfailed=Impossible de copier '$1' over_title=Le fichier existe over_msg=Le fichier $1 existe dj. Utiliser le champ ci-dessous pour entrer un nouveau fichier pour le fichier coll. over_new=Nouveau nom de fichier:: over_ok=Ok upload_efailed=Impossible d'ouvrir l'envoie '$1' upload_title=Envoie de Fichier upload_file=Fichier envoyer upload_dir=Envoyer dans un rpertoire upload_ok=Envoie upload_conv=Convertir les retours de chariot en format DOS? upload_efile=Aucun fichier n'ont t slectionn pour envoyer. upload_edir=Le rpertoire d'envoi n'existe pas. upload_eperm=Vous n'tes pas autoris crer '$1' upload_ewrite=Impossible d'crire dans '$1' : $2 find_eaccess=Vous n'tes pas autoris d'accder '$1' find_eexist='$1' n'existe pas dans '$2' find_edir='$1' n'est pas un rpertoire dans '$2' cancel=Annuler chmod_eaccess=Vous n'tes pas autoris d'accder '$1' chmod_euser=$1 : usager inexistant chmod_egroup=$1 : groupe inexistant chmod_elink=lien symbolique impossible : $1 chmod_echown=Impossible de changer de propritaire : $1 chmod_echmod=Impossible de changer de permission : $1 copy_efrom=Vous n'tes pas autoris copier de '$1' copy_eto=Vous n'tes pas autoris copier vers '$1' copy_elink=lien symbolique impossible : $1 delete_eaccess=Vous n'tes pas autoris supprimer '$1' list_eaccess=Vous n'tes pas autoris d'accder ce rpertoire list_edir=Echec du listage de $1 : $2 move_eto=Vous n'tes pas autoris dplacer vers '$1' move_afrom=Vous n'tes pas autoris dplacer '$1' acl_user=Accder au systme de fichier en tant un usager acl_user_def=Pareil que le login Webmin acl_umask=Dmasquer tout nouveau fichier acl_follow=Toujours suivre les liens symboliques? acl_dirs=Seulement accs aux rpertoires acl_home=Inclure le rpertoire personnel de l'utilisateur Webmin share_title=Partage share_samba=Windows share_nfs=NFS share_son=Partage de fichiers Windows activ share_soff=Partage de fichiers Windows dsactiv share_writable=En criture ? share_available=Actuellement disponible ? share_sheader=Options de partage share_only=Seulement share_guest=Accs Invit ? share_comment=Commentaire share_nheader=Options d'export NFS share_non=Partage de fichiers NFS activ share_noff=Partage de fichiers NFS dsactiv share_desc=Description share_ro=Machines en lecture seule share_rw=Machines en lecture/criture share_root=Machines avec accs root share_none=Aucune share_all=Toutes share_listed=Listes ... share_host=Machines share_opts=Options share_s0=Ne faire confiance personne share_s1=Faire confiance aux non-root share_s2=Faire confiance tout le monde share_lro=Lecture seule share_lrw=Lecture-criture log_create_export=Export NFS $1 cr log_modify_export=Export NFS $1 modifi log_delete_export=Export NFS $1 supprim log_create_share=Ressource partage Samba $1 cre log_modify_share=Ressource partage Samba $1 modifie log_delete_share=Ressource partage Samba $1 supprime log_save=Fichier $1 sauv log_chmod=Permissions modifies sur le fichier $1 log_mkdir=Rpertoire $1 cr log_upload=Fichier $1 tlcharg log_link=Lien symbolique de $1 vers $2 cr log_relink=Lien symbolique de $1 vers $2 modifi log_copy=Lien symbolique de $1 vers $2 copi log_move=Fichier renomm de $1 en $2 log_delete=Fichier $1 supprim search_eaccess=Vous n'avez pas le droit de chercher dans ce rpertoire search_title=Trouver des fichiers search_ok=Chercher maintenant search_dir=Rpertoire de recherche search_match=Pour les fichiers correspondant search_user=Possd par utilisateur search_group=Possd par groupe search_any=N'importe search_type=Type de fichier search_types_=N'importe search_types_f=Fichier search_types_d=Rpertoire search_types_l=Lien symbolique search_types_p=Tube nomm search_size=Taille de fichier search_more=Plus de search_less=Moins de search_xdev=Chercher au-del des points de montage ? search_edir=Rpertoire de recherche manquant ou invalide search_ematch=Expression rationnelle manquante search_euser=Nom d'utilisateur manquant search_egroup=Nom de groupe manquant search_esize=La taille de fichier doit tre un entier search_crit=Critres de recherche search_list=Rsultats de la recherche file/lang/de0100644000567100000120000003175310067670017012727 0ustar jcameronwheelacl_archive=Darf Archive von Verzeichnissen herunterladen? acl_archmax=Ja, wenn sie kleiner sind als acl_b=bytes acl_button_acl=ACL (bearbeite Posix Dateizugriffskontrolle) acl_button_attr=ATTR (bearbeite XFS-Attribute) acl_button_copy=Kopieren, Ausschneiden und Einfügen acl_button_delete=Löschen (Dateien löschen) acl_button_edit=Bearbeiten (Textdatei bearbeiten) acl_button_ext=EXT (bearbeite EXT-Attribute) acl_button_info=Info (bearbeite Dateirechte und -inhaberschaft) acl_button_makelink=Neu (Erzeuge symbolischen Link) acl_button_mkdir=Neu (Erzeuge Verzeichnis) acl_button_mount=Einbinden (Einbinden oder Aushängen von Dateisystemen) acl_button_new=Neu (Erzeuge Textdatei) acl_button_rename=Umbenennen (Datei umbenennen) acl_button_save=Speichern (heruntergeladene Datei) acl_button_search=Finde (Dateien finden) acl_button_sharing=Gemeinsamer Dateizugriff (richte Samba- und NFS Dateizugriff ein) acl_button_upload=Hochladen (lade Dateien eines Clients hoch) acl_buttons=Verfügbare Knöpfe in der Toolbar acl_chroot=ChangeRoot-Verzeichnis für den gesamten Dateimanager acl_dirs=Erlaube nur Zugriff auf Verzeichnisse acl_dostounix=Darf DOS-"Neue Zeile"-Zeichen konvertieren? acl_follow=Folge immer symbolischen Links? acl_fyes=Wenn Benutzer uebereinstimmt acl_goto=Oeffne erstes erlaubtes Verzeichnis? acl_home=Das Home-Verzeichnis des WebMin-Benutzers einbinden? acl_log=Alle Dateiaenderungen protokollieren? acl_max=Maximala Hochladegröße acl_relto=(relativ zu jedem ChangeRoot-Verzeichnis) acl_ro=Nur-Lesen-Modus? acl_umask=Umask fuer neue Dateien acl_unarchive=Darf hochgeladene Archivdateien auspacken? acl_unarchive0=$nein acl_unarchive1=$ja acl_unarchive2=Versuche immer acl_unlim=Unbegrenzt acl_user=Greife als Benutzer auf Dateien auf dem Server zu acl_user_def=Wie WebMin-Benutzer acltype_default_group=Standard-Gruppe acltype_default_mask=Standard-Maske acltype_default_other=Andere Standards acltype_default_user=Standard-Benutzer acltype_group=Gruppe acltype_mask=Maske acltype_other=Andere acltype_user=Benutzer attr_add=Attribut hinzufuegen attr_create=Attribut hinzufuegen attr_eattrs=Konnte Attribute nicht lesen: $1 attr_edit=Attribut bearbeiten attr_efailed=Konnte Attribute fuer $1 nicht setzen: $2 attr_efs=Dateisystem $1 unterstuetzt keine Attribute attr_ename=Fehlender Attributname attr_name=Attributname attr_title=Dateiattribute fuer $1 attr_value=Attributwert cancel=Abbrechen chmod_eaccess=Sie haben keine Berechtigung zum Zugriff auf '$1' chmod_echmod=chmod schlug fehl : $1 chmod_echown=chown schlug fehl : $1 chmod_efollow=Sie duerfen keine symbolischen Links bearbeiten chmod_egroup=$1 : Gruppe nicht gefunden chmod_elink=Symbolischer Link schlug fehl : $1 chmod_euser=$1 : Benutzer nicht gefunden close=Schliessen copy_efrom=Sie haben keine Berechtigung aus '$1' zu kopieren copy_elink=Symbolischer Link schlug fehl : $1 copy_eto=Sie haben keine Berechtigung in '$1' zu kopieren ddir_rusure=Um den Inhalt von $1 als Archivdatei herunterzuladen, klicke auf den Archivbutton. ddir_tar=TAR ddir_tgz=TAR.GZ ddir_title=Download-Verzeichnis ddir_zip=ZIP delete_ddesc=Sind Sie sicher, dass Sie das Verzeichnis $1 und alle Unterverzeichnisse unwiderruflich loeschen wollen? delete_dtitle=Loesche Verzeichnis delete_eaccess=Sie haben keine Berechtigung '$1' zu loeschen delete_efailed=Fehler beim Loeschen von $1 : $2 delete_fdesc=Sind Sie sicher, dass Sie die Datei $1 unwiderruflich loeschen wollen? delete_ftitle=Loesche Datei delete_mdesc=Sind Sie sicher, dass Sie diese Dateien und Verzeichnisse permanent loeschen wollen? : delete_mtitle=Mehrere Dateien loeschen eacl_aclname=Anwenden auf eacl_aclperms=Berechtigungen eacl_acltype=ACL-Typ eacl_add=ACL des Typs hinzufuegen : eacl_create=ACL einrichten eacl_eacls=Konnte ACLs nicht einlesen: $1 eacl_edefaults=Wenn eine Datei eine Standard-ACL hat, dann muss ein Standard-Benutzer, eine -Gruppe und andere ACLs eingerichtet sein. eacl_edefmask=Es kann nur einen Standard-Masken-Eintrag geben eacl_edit=ACL bearbeiten eacl_efailed=Konnte ACL fuer $1 nicht setzen : $2 eacl_efs=Dateisystem $1 unterstuetzt keine ACLs eacl_emask=Es kann nur einen Masken-Eintrag geben eacl_eowner=Benutzer oder Gruppe nicht angegeben eacl_group=Datei-Gruppe $1 eacl_owner=Datei-Besitzer eacl_remove=ACL entfernen eacl_title=ACL fuer $1 eacl_user=Datei-Besitzer $1 eattr_A=Zugriffszeit nicht aendern eattr_S=Nach Schreiben immer synchronisieren eattr_a=Kann nur an Datei anhaengen eattr_c=Datei auf Festplatte komprimieren eattr_d=Nicht mit dump sichern eattr_i=Keine Aenderungen zulassen eattr_s=Beim Loeschen mit Null-Bloecken ueberschreiben eattr_u=Inhalte fuer Wiederherstellung sichern ebutton=Diese Funktion ist nicht verfügbar edit_all=Alles ersetzen edit_eaccess=Sie haben keine Berechtigung die Datei '$1' zu speichern edit_efollow=Sie duerfen nicht auf den symbolischen Link '$1' schreiben edit_enormal=Nur normale Dateien koennen bearbeitet werden edit_eover=$1 kann nicht ueberschrieben werden edit_esave=Fehler beim Speichern der Datei : $1 edit_filename=Dateiname: edit_find=Finde edit_goto=Gehe zu edit_gotoline=Gehe zu Zeile edit_notfound=Der Text $1 wurde nicht gefunden edit_replace=Ersetzen edit_replaceby=Ersetzen mit edit_saveclose=Speichern & Schliessen edit_searchfor=Suchen nach edit_title=Bearbeite $1 edit_title2=Erstelle Datei eopen=Download gescheitert: $1 ext_eattrs=Konnte EXT-Attribute nicht lesen : $1 ext_efailed=Konnte EXT-Attribute fuer $1 nicht lesen : $2 ext_efs=Dateisystem $1 unterstuetzt keine EXT-Attribute ext_header=EXT-Datei-Attribute ext_title=EXT-Datei-Attribute fuer $1 facl_eaccess=Sie duerfen keine ACLs fuer diese Datei setzen file_type0=Verzeichnis file_type1=Textdatei file_type2=Bilddatei file_type3=Binaere Datei file_type4=Datei file_type5=Symbolischer Link file_type6=Geraetedatei file_type7=Pipe find_eaccess=Sie haben keine Berechtigung um auf $1 zuzugreifen find_edir=$1 ist kein Verzeichnis in $2 find_eexist=$1 existiert nicht in $2 index_eremote=Fuer diesen Unix-Benutzer gibt es keine Webmin-Anmeldung $1. index_nojava=Dieses Modul benötigt Java. Entweder unterstützt Ihr Browser kein Java oder Java ist nicht richtig installiert. index_title=Datei-Manager info_apply=Aenderungen anwenden auf info_apply1=Nur dieses Verzeichnis info_apply2=Dieses Verzeichnisse und seine Dateien info_apply3=Dieses Verzeichnis und alle Unterverzeichnisse info_efailed=Fehler beim Update von $1 : $2 info_exec=Ausfuehren info_file=Datei info_group=Gruppe: info_link=Link nach: info_list=Liste info_mod=Veraendert: info_octal=Oktal: info_other=Andere: info_own=Besitzer info_path=Pfad: info_perms=Rechte info_read=Lesen info_setgid=SetGID: info_setgid2=Dateien erben Gruppen info_setgid3=Fuehre aus als Gruppe info_setuid=SetUID: info_setuid2=Fuehre aus als Benutzer info_size=Groesse: info_sticky=Sticky: info_sticky2=Nur Besitzer darf Dateien loeschen info_type=Typ: info_user=Benutzer: info_write=Schreiben link_eexists=$1 existiert bereits link_efailed=Link schlug fehl : $1 link_efollow=Sie haben keine Berechtigung symbolische Links anzulegen link_efrom=Sie haben keine Berechtigung von '$1' zu verknuepfen link_from=Link von: link_title=Erstelle Link link_to=Link zu: list_eaccess=Sie haben keine Berechtigung zum Zugriff auf dieses Verzeichnis list_edir=Konnte $1 nicht auflisten : $2 log_acl=ACL fuer Datei $1 gesetzt log_attr=Attribute fuer Datei $1 gesetzt log_chmod=Berechtigungen fuer Datei $1 geaendert log_copy=Datei von $1 nach $2 kopiert log_create_export=NFS-Export $1 erzeugt log_create_share=Samba-Freigabe $1 erzeugt log_delete=Datei $1 geloescht log_delete_export=NFS-Export $1 geloescht log_delete_share=Samba-Freigabe $1 geloescht log_link=Symbolischer Link von $1 nach $2 erzeugt log_mkdir=Verzeichnis angelegt $1 log_modify_export=NFS-Export $1 geaendert log_modify_share=Samba-Freigabe $1 geaendert log_move=Datei von $1 nach $2 verschoben log_relink=Symbolischer Link von $1 nach $2 geaendert log_save=Datei $1 gespeichert log_upload=Datei $1 hochgeladen mkdir_dir=Neues Verzeichnis: mkdir_eaccess=Sie haben keine Berechtigung, '$1' anzulegen mkdir_eexists=$1 existiert bereits mkdir_efailed=Erstellen des Verzeichnisses schlug fehl : $1 mkdir_title=Neues Verzeichnis mount_eaccess=Sie duerfen keine Dateisysteme einbinden mount_efstab=Es existiert kein Dateisystem an diesem Einhaengepunkt mount_epoint=$1 ist kein Einhaengepunkt mount_err1=Konnte $1 nicht einhaengen : $2 mount_err2=Konnte $1 nicht aushaengen : $2 mount_rusure1=Sind Sie sicher, dass Sie $1 in $2 einhaengen wollen ? mount_rusure2=Sind Sie sicher, dass Sie $1 von $2 aushaengen wollen ? mount_title1=Dateisystem einhaengen mount_title2=Dateisystem aushaengen move_afrom=Sie haben keine Berechtigung '$1' zu verschieben move_eto=Sie haben keine Berechtigung, Dateien nach '$1' zu verschieben over_msg=Die Datei $1 existiert bereits. Benutzen Sie das Feld unten um einen anderen Namen fuer die neue Datei anzugeben. over_new=Neuer Dateiname: over_ok=Ok over_title=Datei existiert paste_ecfailed=Kopieren schlug fehl : $1 paste_ecopy=Vor dem Einfuegen mussen Sie kopieren oder ausschneiden paste_egone=Kopierte Datei $1 existiert nicht mehr paste_emfailed=Verschieben schlug fehl : $1 paste_eover=$1 kann nicht ueberschrieben werden paste_eself=Sie koennen keine Datei auf sich selber einfuegen rename_eexists=Es existiert bereits eine Datei mit dem Namen $1 rename_efailed=Umbennenen schlug fehl : $1 rename_enew=Sie haben keine Berechtigung zu '$1' umzubennenen rename_eold=Sie haben keine Berechtigung, '$1' umzubennenen rename_new=Neuer Name: rename_ok=Umbenennen rename_old=Alter Name: rename_title=Umbennenen von $1 right_date=Datum right_group=Gruppe right_name=Name right_size=Groesse right_user=Benutzer search_any=Alle search_crit=Such-Kriterien search_dir=Suche in Verzeichnis search_eaccess=Sie haben keine Berechtigung, dieses Verzeichnis zu durchsuchen search_edir=Fehlendes oder ungueltiges Verzeichnis search_egroup=Fehlender Gruppen-Name search_ematch=Fehlender anwendbarer regulärer Ausdruck search_esize=Dateigroesse muss eine Ganzzahl sein search_euser=Fehlender Benutzer-Name search_group=Im Besitz der Gruppe search_less=Weniger als search_list=Suchergebnisse search_match=auf Dateien passend search_more=Mehr als search_ok=Jetzt suchen search_size=Dateigroesse search_title=Dateien suchen search_type=Datei-Typ search_types_=Alle search_types_d=Verzeichnis search_types_f=Datei search_types_l=Symbolischer Link search_types_p=Named pipe search_user=Im Besitz des Benutzers search_xdev=Hinter Einhaengepunkten suchen? share_all=Alle share_available=Momentan aktiv? share_comment=Kommentar share_desc=Beschreibung share_guest=Gast-Zugang? share_host=Hosts share_listed=Aufgelistet.. share_lro=Nur-Lesen share_lrw=Lesen-Schreiben share_nfs=NFS share_nheader=NFS-Exporteinstellungen share_noff=NFS-Dateifreigabe deaktiviert share_non=NFS-Dateifreigabe aktiviert share_none=Keine share_only=Nur share_opts=Einstellungen share_ro=Nur-Lesen Hosts share_root=Root-Zugriff Hosts share_rw=Lesen-Schreiben Hosts share_s0=Niemandem trauen share_s1=Nicht-Root trauen share_s2=Jedem trauen share_samba=Windows share_sheader=Windows-Freigabeeinstellungen share_soff=Windows-Datei-Freigabe deaktiviert share_son=Windows-Datei-Freigabe aktiviert share_title=Freigabe share_writable=Beschreibbar? switch_euser=Dieser Unix-Benutzer existiert nicht! top_attr=Attribute top_config=Konfig. top_copy=Kopieren top_cut=Ausschneiden top_delete=Löschen top_down=Speichern top_eacl=ACL top_edit=Bearbeiten top_ext=EXT top_info=Info top_mount=Mount top_new=Neu top_paste=Einfuegen top_refresh=Neu laden top_rename=Umbenennen top_ret=Webmin top_search=Suchen top_share=Freigabe top_upload=Upload upload_already=Die Datei $1 existiert bereits. Moechten Sie diese ueberschreiben? upload_conv=Konvertiere DOS Zeilenvorschuebe? upload_dir=Upload zu Verzeichnis upload_edir=Upload-Verzeichnis existiert nicht. upload_efailed=Fehler beim Oeffnen von Upload : $1 upload_efile=Keine Datei fuer Upload ausgewaehlt. upload_elink=Kann auf einen symbolischen Link nicht uploaden upload_eperm=Sie haben keine Berechtigung $1 zu erstellen upload_ewrite=Fehler beim Schreiben von $1 : $2. upload_file=Datei zum uploaden upload_ok=Upload upload_title=Datei Upload upload_yes=Ja, dann löschen upload_zip=ZIP- oder TAR-Dateien entkomprimieren? view_eaccess=Sie haben keine Berechtigung zum Zugriff auf $1 view_earchive=Sie dürfen keine Archive herunterladen view_earchmax=Das ausgewählte Verzeichnis is größer als die maximal erlaubte Größe für Archive ($1 bytes) view_ecmd=Der Befehl $1, der zum Erzeugen von Archiven benötigt wird, ist nicht installiert. view_ecomp=Konnte Archiv nicht erzeugen: $1 view_edir=Ein Archiv kann nur für ein Verzeichnis angelegt werden view_enormal=Nur normale Dateien koennen betrachtet werden view_enormal2=Nur normale Dateien koennen lokal gespeichert werden. view_eopen=Fehler beim Oeffnen von $1 : $2 zip_ecmd=Fehlendes $1 Kommando zip_ename=Schein keine ZIP-, TAR- oder TAR.GZ-Datei zu sein. zip_err=Konnte Datei nicht auspacken: $1 zip_euntar=Un-TAR gescheitert: $1 zip_euntar2=Dekomprimierung und Un-TAR gescheitert: $1 zip_eunzip=Un-ZIP gescheitert: $1 file/lang/sv0100644000567100000120000001024507250026520012752 0ustar jcameronwheelindex_title=Filhanterare index_nojava=Denna modul behver java fr att fungera, men din lsare stdjer inte java top_open=ppna top_view=Visa top_edit=ndra top_refresh=Uppdatera top_info=Info top_delete=Ta bort top_new=Ny top_upload=Ladda in top_rename=Byt namn top_copy=Kopiera top_cut=Klipp ut top_paste=Klistra in right_name=Namn right_size=Storlek right_user=Anvndare right_group=Grupp right_date=Datum edit_enormal=Du kan bara ndra standardfiler edit_title=ndrar i $1 edit_title2=Skapar fil edit_filename=Filnamn: edit_eover=$1 fr inte skrivas ver edit_esave=Det gick inte att spara filen: $1 edit_eaccess=Du fr inte spara filen '$1' info_file=Fil info_path=Skvg: info_type=Typ: info_size=Storlek: info_mod=ndrad: info_link=Lnk till: info_perms=Rttigheter info_user=Anvndare: info_group=Grupp: info_other=vriga: info_sticky=Sticky: info_sticky2=Det r bara gare som fr ta bort filer info_own=gare info_setuid=Setuid: info_setuid2=Utfr som anvndare info_setgid=Setgid: info_setgid2=Filer rver grupp info_setgid3=Utfr som grupp info_apply=Utfr ndringarna p info_apply1=Endast denna katalog info_apply2=Denna katalog och filerna i den info_apply3=Denna katalog och dess underkataloger info_efailed=Det gick inte att uppdatera $1 : $2 info_read=Ls info_write=Skriv info_list=Lista info_exec=Exec delete_dtitle=Ta bort katalog delete_ftitle=Ta bort fil delete_ddesc=Vill du verkligen ta bort katalogen $1 med innehll permanent? delete_fdesc=Vill du verkligen ta bort filen $1 permanent? delete_efailed=Det gick inte att ta bort $1 : $2 mkdir_title=Ny katalog mkdir_dir=Ny katalog: mkdir_eexists=$1 finns redan mkdir_efailed=Det gick inte att skapa katalogen: $1 mkdir_eaccess=Du fr inte skapa '$1' link_title=Skapa lnk link_from=Lnk frn: link_to=Lnk till: link_eexists=$1 finns redan link_efailed=Det gick inte att lnka: $1 link_efrom=Du fr inte lnka frn '$1' link_efollow=Du fr inte skapa symboliska lnkar rename_title=Byt namn p $1 rename_old=Gammalt namn: rename_new=Nytt namn: rename_ok=Byt namn rename_eexists=Det finns redan en fil som heter $1 rename_efailed=Det gick inte att byta namn: $1 rename_eold=Du fr inte byta namn p '$1' rename_enew=Du fr inte byta namn till '$1' file_type0=Katalog file_type1=Textfil file_type2=Bildfile file_type3=Binrfil file_type4=Fil file_type5=Symbolisk lnk file_type6=Device-fil file_type7=Pipe view_enormal=Endast normala filer kan visas view_eaccess=Du fr inte komma t $1 view_eopen=Det gick inte att ppna $1: $2 paste_ecopy=Ngot mste klippas ut eller kopieras fr att du ska kunna klistra in paste_egone=Den kopierade filen $1 finns inte lngre paste_eover=$1 fr inte skrivas ver paste_eself=En fil fr inte klistras in ver sig sjlv paste_emfailed=Det gick inte att flytta: $1 paste_ecfailed=Det gick inte att kopiera: $1 over_title=Filen finns over_msg=Filen $1 finns redan. Skriv in ett nytt filnamn fr den inklistrade filen i fltet nedan. over_new=Nytt filnamn: over_ok=OK upload_efailed=Det gick inte att stta igng nedladdningen: $1 upload_title=Ladda ned fil upload_file=Fil att ladda ned upload_dir=Ladda ned till katalog upload_ok=Ladda ned upload_conv=Konvertera DOS-radbrytningar? upload_efile=Du har inte valt ngon fil som ska laddas ned. upload_edir=Du har inte valt ngon katalog att ladda ned till. upload_eperm=Du fr inte skapa $1 upload_ewrite=Det gick inte att skriva till $1: $2. find_eaccess=Du fr inte komma t $1 find_eexist=$1 finns inte i $2 find_edir=$1 r inte en katalog i $2 cancel=Avbryt chmod_eaccess=Du fr inte komma t '$1' chmod_euser=$1 :anvndaren finns inte chmod_egroup=$1 :gruppen finns inte chmod_elink=symlink misslyckades: $1 chmod_echown=chown misslyckades: $1 chmod_echmod=chmod misslyckades: $1 copy_efrom=Du fr inte kopiera frn '$1' copy_eto=Du fr inte kopiera till '$1' copy_elink=symlink misslyckades: $1 delete_eaccess=Du fr inte ta bort '$1' list_eaccess=Du fr inte komma t denna katalog list_edir=Det gick inte att lista $1: $2 move_eto=Du fr inte flytta filer till '$1' move_afrom=Du fr inte flytta p '$1' acl_user=Kom t filer p servern som anvndare acl_umask=Umask fr nya filer acl_follow=Ska symboliska lnkar alltid fljas? acl_dirs=Tillt endast tkomst till kataloger file/lang/it0100664000567100000120000002335110002211631012726 0ustar jcameronwheelindex_title=File Manager index_nojava=Questo modulo richiede java per funzionare, il tuo browser non supporta java index_eremote=Non c' un utente Unix corrispondente il login Webmin $1. switch_euser=L'utente Unix non esiste! top_ret=Indice top_down=Salva top_edit=Modifica top_refresh=Ricarica top_info=Informazioni top_eacl=ACL top_attr=Attributi top_ext=EXT top_delete=Cancella top_new=Nuovo top_upload=Upload top_rename=Rinomina top_copy=Copia top_cut=Taglia top_paste=Incolla top_share=Condivisione top_mount=Mount top_search=Cerca top_config=Configura right_name=Nome right_size=Dimensione right_user=Utente right_group=Gruppo right_date=Data edit_enormal=Puoi modificare solo file normali edit_title=Modifica di $1 edit_title2=Creazione file edit_filename=Nome file: edit_goto=Vai a edit_find=Cerca edit_gotoline=Vai alla riga edit_replace=Sostituisci edit_all=Sostituisci tutto edit_searchfor=Cerca edit_replaceby=Sostituisci con edit_eover=$1 non pu essere sovrascritto edit_esave=Salvataggio file fallito : $1 edit_eaccess=Non sei autorizzato a salvare '$1' edit_notfound=Il testo $1 non stato trovato edit_saveclose=Salva & Esci info_file=File info_path=Percorso: info_type=Tipo: info_size=Dimensione: info_mod=Modificato: info_link=Link a: info_perms=Permessi info_user=Utente: info_group=Gruppo: info_other=Altri: info_octal=Ottale: info_sticky=Sticky: info_sticky2=Solo i proprietari possono cancellare file info_own=Possesso info_setuid=Setuid: info_setuid2=Esegui come utente info_setgid=Setgid: info_setgid2=I file ereditano il gruppo info_setgid3=Esegui come gruppo info_apply=Applica modifiche a info_apply1=Solo questa directory info_apply2=Questa directory e i suoi file info_apply3=Questa directory e tutte le subdirectory info_efailed=Aggiornamento $1 fallito : $2 info_read=Lettura info_write=Scrittura info_list=Elenco info_exec=Esecuzione eacl_eacls=Lettura ACL fallito : $1 eacl_acltype=Tipo ACL eacl_aclname=Applica a eacl_aclperms=Permessi eacl_add=Aggiungi ACL di tipo : eacl_remove=Rimuovi ACL eacl_efs=Il filesystem $1 non supporta ACL eacl_create=Crea ACL eacl_edit=Modifica ACL eacl_user=Proprietario file $1 eacl_group=Gruppo file $1 eacl_eowner=Utente o gruppo da applicare mancante eacl_efailed=Settaggio ACL fallito per $1 : $2 eacl_emask=Pu esserci al massimo una maschera ACL eacl_edefmask=Pu esserci al massimo una maschera ACL di default eacl_title=ACL per $1 eacl_owner=Proprietario File eacl_edefaults=Se il file ha ACL di default, deve avere utente, gruppo e altre ACL di default acltype_user=Utente acltype_group=Gruppo acltype_other=Altri acltype_mask=Maschera acltype_default_user=Utente di default acltype_default_group=Gruppo di default acltype_default_other=Altri di default acltype_default_mask=Maschera di default delete_mtitle=Cancellazione multipla di file delete_dtitle=Cancellazione directory delete_ftitle=Cancellazione file delete_ddesc=Sei sicuro di voler cancellare definitivamente la directory $1 e tutto il suo contenuto? delete_fdesc=Sei sicuro di voler cancellare definitivamente il file $1 ? delete_mdesc=Sei sicuro di voler cancellare definitivamente questi file e directory? : delete_efailed=Cancellazione $1 fallita : $2 mkdir_title=Nuova Directory mkdir_dir=Nuova directory: mkdir_eexists=$1 gi esistente mkdir_efailed=Creazione directory fallita : $1 mkdir_eaccess=Non sei autorizzato a creare '$1' link_title=Creazione Link link_from=Link da: link_to=Link a: link_eexists=$1 gi esistente link_efailed=Link fallito : $1 link_efrom=Non sei autorizzato a fare un link da '$1' link_efollow=Non sei autorizzato a creare link simbolici rename_title=Rinomina $1 rename_old=Vecchio nome: rename_new=Nuovo nome: rename_ok=Rinomina rename_eexists=Esiste gi un file di nome $1 rename_efailed=Rinominazione fallita : $1 rename_eold=Non sei autorizzato a rinominare '$1' rename_enew=Non sei autorizzato a rinominare a '$1' file_type0=Directory file_type1=File di testo file_type2=File immagine file_type3=File binario file_type4=File file_type5=Link simbolico file_type6=File Device file_type7=Pipe view_enormal=Possono essere visualizzati solo file normali view_enormal2=Possono essere scaricati solo file normali view_eaccess=Non sei autorizzato ad accedere $1 view_eopen=Apertura $1 fallita : $2 paste_ecopy=Devi tagliare o copiare prima di incollare paste_egone=Il file copiato $1 non esite pi paste_eover=$1 non pu essere sovrascritto paste_eself=Non puoi incollare un file sopra se stesso paste_emfailed=Spostamento fallito : $1 paste_ecfailed=Copia fallita : $1 over_title=Il File Esiste Gi over_msg=Il file $1 esiste gi. Usa il campo qui sotto per inserire un nuovo nome per il file incollato. over_new=Nuovo nome: over_ok=Vai upload_efailed=Inizio trasferimento fallito : $1 upload_title=Trasferisci file (upload) upload_file=File da trasferire upload_dir=Trasferisci alla directory upload_ok=Trasferimento upload_conv=Convertire nuovariga DOS? upload_efile=Nessun file selezionato per il trasferimento. upload_edir=La directory di destinazine non esiste. upload_eperm=Non sei autorizzato a creare $1 upload_ewrite=Scrittura $1 fallita : $2. upload_already=Il file $1 esiste gi. Sei sicuro di volerlo sovrascrivere? find_eaccess=Non sei autorizzato ad accedere $1 find_eexist=$1 non esiste in $2 find_edir=$1 non una directory in $2 cancel=Cancella close=Chiudi chmod_eaccess=Non sei autorizzato ad accedere '$1' chmod_euser=$1 : utente non esistente chmod_egroup=$1 : gruppo non esistente chmod_elink=Link simbolico fallito : $1 chmod_echown=chown fallito : $1 chmod_echmod=chmod fallito : $1 chmod_efollow=Non sei autorizzato a modificare link simbolici copy_efrom=Non sei autorizzato a copiare da '$1' copy_eto=Non sei autorizzato a copiare in '$1' copy_elink=Link simbolico fallito : $1 delete_eaccess=Non sei autorizzato a cancellare '$1' list_eaccess=Non sei autorizzato ad accedere questa directory list_edir=Elenco $1 fallito : $2 move_eto=Non sei autorizzato a muovere in '$1' move_afrom=Non sei autorizzato a muovere '$1' acl_user=Accesso file sul server come utente acl_user_def=Uguale al login Webmin acl_umask=Umask per i nuovi file acl_follow=Seguire sempre i link simbolici? acl_ro=Modalit sola lettura? acl_dirs=Autorizza accesso alle sole directory acl_home=Includi la home directory dell'utente Webmin acl_log=Eseguo log di tutte le modifiche ai file? acl_goto=Aprire la prima directory autorizzata? share_title=Sharing share_samba=Windows share_nfs=NFS share_son=File sharing windows abilitato share_soff=File sharing windows disabilitato share_writable=Scrivibile? share_available=Attualmente attivo? share_sheader=Opzioni di sharing share_only=Solamente share_guest=Accesso guest? share_comment=Commento share_nheader=Opzioni export NFS share_non=File sharing NFS abilitato share_noff=File sharing NFS disabilitato share_desc=Descrizione share_ro=Host sola lettura share_rw=Host lettura e scrittura share_root=Host con accesso root access share_none=Nessuno share_all=Tutti share_listed=Elencati.. share_host=Host share_opts=Opzioni share_s0=Non fidarti di nessuno share_s1=Fidati degli utenti non-root share_s2=Fidati di tutti share_lro=Sola lettura share_lrw=Lettura scrittura log_create_export=Creato export NFS $1 log_modify_export=Modificato export NFS $1 log_delete_export=Cancellato export NFS $1 log_create_share=Creato share Samba $1 log_modify_share=Modificato share Samba $1 log_delete_share=Cancellato share Samba $1 log_save=File $1 salvato log_chmod=Cambiati permessi del file $1 log_mkdir=Creata directory $1 log_upload=Trasferito file $1 log_link=Creato link simbolico $1 a $2 log_relink=Modificato link simbolico $1 a $2 log_copy=Copiato file $1 a $2 log_move=Spostato file $1 a $2 log_delete=Cancellato file $1 log_attr=Settati attributi del file $1 log_acl=Settati ACL al file $1 search_eaccess=Non sei autorizzato a cercare questa directory search_title=Cerca file search_ok=Esegui Ricerca search_dir=Cerca directory search_match=File corrispondenti search_user=Utente proprietario search_group=Gruppo proprietario search_any=Qualsiasi search_type=Tipo file search_types_=Qualsiasi search_types_f=File search_types_d=Directory search_types_l=Link simbolico search_types_p=Named pipe search_size=Dimensione File search_more=Pi di search_less=Meno di search_xdev=Cerco sotto i mount? search_edir=Directory di ricerca mancante o invalido search_ematch=regexp di corrispondenza mancante o invalida search_euser=Nome utente mancante o invalido search_egroup=Nome gruppo mancante search_esize=La dimensione del file deve essere un intero search_crit=Criterio di ricerca search_list=Risultati ricerca facl_eaccess=Non sei autorizzato a settare ACL per questo file attr_eattrs=Lettura attributi fallito : $1 attr_efs=Il filesystem $1 non supporta attributi attr_add=Aggiungi Attributo attr_name=Nome Attributo attr_value=Valore Attributo attr_efailed=Settaggio attributo fallito per $1 : $2 attr_title=Attributi per $1 attr_create=Aggiungi Attributo attr_edit=Modifica Attributo attr_ename=Nome attributo mancante ext_eattrs=Lettura attributi EXT fallito : $1 ext_efs=Il filesystem $1 non supporta attributi EXT ext_title=Attributi EXT per $1 ext_header=Attributi EXT ext_efailed=Settaggio attributi fallito per $1 : $2 eattr_A=Non aggiornare il tempo di accesso eattr_a=Puoi solo appendere al file eattr_c=Dati compressi sul disco eattr_d=Non fare backup con dump eattr_i=Non permettere modifiche eattr_s=Azzera blocchi in cancellazione eattr_S=Sync dopo la scrittura eattr_u=Salva il contenuto per de-cancellazione mount_eaccess=Non sei autorizzato a montare filesystem mount_efstab=Non esiste filesystem in questo mount point mount_epoint=$1 non un mount point mount_rusure1=Sei sicuro di voler montare $1 in $2 ? mount_rusure2=Sei sicuro di voler smontare $1 da $2 ? mount_err1=Mount di $1 fallito : $2 mount_err2=Un-mount di $1 fallito : $2 mount_title1=Mount filesystem mount_title2=Un-mount filesystem file/lang/bg0100664000567100000120000002410510005107277012715 0ustar jcameronwheelindex_title=File Manager index_nojava= java, java index_eremote= Unix Webmin $1. switch_euser=Unix ! top_ret=Index top_down= top_edit= top_refresh= top_info= top_eacl=ACL top_attr=. top_ext=EXT top_delete= top_new= top_upload=Upload top_rename= top_copy= top_cut= top_paste= top_share=Sharing top_mount=Mount top_search= top_config= right_name= right_size= right_user= right_group= right_date= edit_enormal= edit_title= $1 edit_title2= edit_filename=: edit_goto= edit_find= edit_gotoline= edit_replace= edit_all= edit_searchfor= edit_replaceby= edit_eover=$1 edit_esave= : $1 edit_eaccess= '$1' edit_notfound= $1 edit_saveclose= & info_file= info_path=: info_type=: info_size=: info_mod= : info_link= : info_perms= info_user=: info_group=: info_other= : info_octal=: info_sticky=Sticky: info_sticky2= info_own= info_setuid=Setuid: info_setuid2= info_setgid=Setgid: info_setgid2= info_setgid3= info_apply= info_apply1= info_apply2= info_apply3= info_efailed= $1 : $2 info_read= info_write= info_list= info_exec= eacl_eacls= ACL : $1 eacl_acltype=ACL eacl_aclname= eacl_aclperms= eacl_add= ACL : eacl_remove= ACL eacl_efs= $1 ACL eacl_create= ACL eacl_edit= ACL eacl_user= $1 eacl_group= $1 eacl_eowner= eacl_efailed= ACL $1 : $2 eacl_emask= mask ACL eacl_edefmask= - mask ACL eacl_title=ACL $1 eacl_owner= eacl_edefaults= ACL, , ACL. acltype_user= acltype_group= acltype_other= acltype_mask= acltype_default_user= acltype_default_group= acltype_default_other= acltype_default_mask= delete_mtitle= delete_dtitle= delete_ftitle= delete_ddesc= , $1 ? delete_fdesc= , $1 ? delete_mdesc= , ? : delete_efailed= $1 : $2 mkdir_title= mkdir_dir= : mkdir_eexists=$1 mkdir_efailed= : $1 mkdir_eaccess= '$1' link_title= link_from= : link_to= : link_eexists=$1 link_efailed= : $1 link_efrom= '$1' link_efollow= rename_title= $1 rename_old= : rename_new= : rename_ok= rename_eexists= $1 rename_efailed= : $1 rename_eold= '$1' rename_enew= '$1' file_type0= file_type1= file_type2= file_type3= file_type4= file_type5= file_type6= file_type7=Pipe view_enormal= view_enormal2= download- view_eaccess= $1 view_eopen= $1 : $2 paste_ecopy= "" paste_egone= $1 paste_eover=$1 paste_eself= "" paste_emfailed= : $1 paste_ecfailed= : $1 over_title= over_msg= $1 . . over_new= : over_ok= upload_efailed= upload : $1 upload_title=Upload upload_file= upload upload_dir=Upload upload_ok=Upload upload_conv= DOS ? upload_efile= upload. upload_edir=Upload . upload_eperm= $1 upload_ewrite= $1 : $2. upload_already= $1 . , ? find_eaccess= $1 find_eexist=$1 $2 find_edir=$1 $2 cancel= close= chmod_eaccess= '$1' chmod_euser=$1 : chmod_egroup=$1 : chmod_elink= : $1 chmod_echown= : $1 chmod_echmod= : $1 chmod_efollow= copy_efrom= '$1' copy_eto= '$1' copy_elink= : $1 delete_eaccess= '$1' list_eaccess= list_edir= $1 : $2 move_eto= '$1' move_afrom= '$1' acl_user= acl_user_def= Webmin login acl_umask=Umask acl_follow= ? acl_ro= ? acl_dirs= acl_home= home Webmin acl_log= ? acl_goto= ? share_title=Sharing share_samba=Windows share_nfs=NFS share_son=Windows share_soff=Windows share_writable= ? share_available= ? share_sheader=Sharing share_only= share_guest= ? share_comment= share_nheader= NFS share_non=NFS share_noff=NFS share_desc= share_ro= share_rw= share_root= share_none= share_all= share_listed=.. share_host= share_opts= share_s0= share_s1= share_s2= share_lro= share_lrw= log_create_export= NFS $1 log_modify_export= NFS $1 log_delete_export= NFS $1 log_create_share= Samba $1 log_modify_share= Samba $1 log_delete_share= Samba $1 log_save= $1 log_chmod= $1 log_mkdir= $1 log_upload=Upload- $1 log_link= $1 $2 log_relink= $1 $2 log_copy= $1 $2 log_move= $1 $2 log_delete= $1 log_attr= $1 log_acl= ACL $1 search_eaccess= search_title= search_ok= search_dir= search_match=, search_user= search_group= search_any= search_type= search_types_= search_types_f= search_types_d= search_types_l= search_types_p=Named pipe search_size= search_more= search_less=- search_xdev= -? search_edir= search_ematch= search_euser= search_egroup= search_esize= search_crit= search_list= facl_eaccess= ACL attr_eattrs= : $1 attr_efs= $1 attr_add= attr_name= attr_value= attr_efailed= $1 : $2 attr_title= $1 attr_create= attr_edit= attr_ename= ext_eattrs= EXT : $1 ext_efs= $1 EXT ext_title=EXT $1 ext_header=EXT ext_efailed= $1 : $2 eattr_A= eattr_a= eattr_c= eattr_d= backup dump eattr_i= eattr_s= eattr_S= sync eattr_u= mount_eaccess= mount_efstab= mounth point mount_epoint=$1 mount point mount_rusure1= , $1 $2 ? mount_rusure2= , $1 $2 ? mount_err1= $1 : $2 mount_err2= $1 : $2 mount_title1= mount_title2= file/lang/tr0100644000567100000120000001313307364725102012756 0ustar jcameronwheelindex_title=Dosya Yneticisi index_nojava=Bu modl java gerektirir, fakat sizin taraycnz java'yi desteklemiyor top_open=A top_view=Gster top_edit=Deitir top_refresh=Yenile top_info=Bilgi top_delete=Sil top_new=Yeni top_upload=Ykleme top_copy=Kopyala top_cut=Kes top_paste=Yaptr top_share=Paylatr right_name=Ad right_size=Boyut right_user=Kullanc right_group=Grup right_date=Tarih edit_enormal=Sadece normal dosyalar deitirilebilir edit_title=$1 deitiriliyor edit_title2=Dosya oluturuluyor edit_filename=Dosya smi: edit_eover=$1 zerine yazlamaz edit_esave=Dosyann kaydedilmesinde hata olutu : $1 edit_eaccess='$1' kaydedilmesine izininiz yoktur info_file=Dosya info_path=Yol: info_type=Tip: info_size=Boyut: info_mod=Deitirildi: info_link=Link to:##### info_perms=Haklar info_user=Kullanc: info_group=Grup: info_other=Dierleri: info_sticky=Sticky: info_sticky2=Dosyalar sadece sahipleri silebilir info_own=Sahiplik info_setuid=Uid'yi belirt: info_setuid2=Kullanc Olarak altr info_setgid=Gid'yi Olutur: info_setgid2=Dosyalar grubun olsun info_setgid3=Grup olarak altr info_apply=Deiiklikleri uygula ... info_apply1=Sadece bu dizine info_apply2=Bu dizin ve dosyalarna info_apply3=Bu dizin ve alt dizinlerine info_efailed=Gncellemede hata olutu $1 : $2 info_read=Oku info_write=Yaz info_list=Listele info_exec=altr delete_dtitle=Dizin Sil delete_ftitle=Dosya Sil delete_ddesc=$1 dizinini ve iindekileri silmek istediinizden eminmisiniz? delete_fdesc=$1 dizinini silmek istediinizden eminmisiniz? delete_efailed=Silme ileminde hata olutu $1 : $2 mkdir_title=Yeni Dizin mkdir_dir=Yeni dizin: mkdir_eexists=$1 dizini mevcut mkdir_efailed=Dizin oluturmada hata olutu : $1 mkdir_eaccess='$1' dizini oluturmaya hakknz yok link_title=Link Olutur link_from=Link buradan: link_to=Link buraya: link_eexists=$1 her zaman mevcut link_efailed=Link oluturulurken hata olutu : $1 link_efrom='$1' den link oluturmaya hakknz yoktur link_efollow=Sembolik linkler oluturmaya hakknz yoktur rename_title=Yeniden Adlandr $1 rename_old=Eski smi: rename_new=Yeni smi: rename_ok=Yeniden Adlandr rename_eexists=$1 dosyas her zaman mevcut rename_efailed=Yeniden adlandrmada hata olutu : $1 rename_eold='$1'i yeniden adlandrmaya hakknz yoktur rename_enew='$1' olarak yeniden adlandyrmaya hakkynyz yoktur file_type0=Dizin file_type1=Yaz Dosyas file_type2=Resim Dosyas file_type3=kili Dosya file_type4=Dosya file_type5=Sembolik Link file_type6=Ara Dosyas file_type7=Boru view_enormal=Sadece normal dosyalar grntlenebilir view_eaccess=$1'e eriime hakknz yoktur view_eopen=Ama ileminde hata olutu $1 : $2 paste_ecopy=Yaptrmadan nce kopyalamal veya kesmelisiniz paste_egone=Kopyalanan dosya $1 artk yok paste_eover=$1 zerine yazlamaz paste_eself=Dosyay kendi zerine yaptramazsnz paste_emfailed=Tamada hata olutu : $1 paste_ecfailed=Kopyalamada hata olutu : $1 over_title=Dosya Mevcut over_msg=$1 dosyas her zaman mevcut. Yaptrlan dosyaya yeni bir isim girmek iin bo formu kullannz. over_new=Yeni dosya ismi over_ok=Tamam upload_efailed=Dosyann yklenmesinde hata olutu : $1 upload_title=Dosyay Ykle upload_file=Yklecek Dosya upload_dir=Dizine Ykleme upload_ok=Ykle upload_conv=DOS satrlar evirilsin mi? upload_efile=Yklenecek dosya seilmedi. upload_edir=Ykleme dizini mevcut deil upload_eperm=$1 oluturmanza izin verilmedi upload_ewrite=$1'i yazmada hata olutu : $2. find_eaccess=$1'e eriim izininiz yoktur find_eexist=$1, $2 iinde mevcut deil find_edir=$1, $2'de bir dizin deil cancel=ptal chmod_eaccess='$1'e eriim izininiz yoktur chmod_euser=$1 : Kullanc yok chmod_egroup=$1 : Grup yok chmod_elink=Sembolik linkte hata olutu : $1 chmod_echown=chown'da hata olutu : $1 chmod_echmod=chmod'da hata olustu : $1 copy_efrom='$1'den kopyalamanza izin verilmemitir copy_eto='$1'e kopyalamanza izin verilmemitir copy_elink=Sembolik linkte hata olutu : $1 delete_eaccess='$1'i silmede hata olutu list_eaccess=Bu dizine giri izininiz yoktur move_eto='$1'e tamaya hakknz yoktur move_afrom='$1'i tamaya hakkynyz yoktur acl_user=Sunucuda kullanc olarak dosyalara ula acl_umask=Yeni dosyalar iin umask acl_follow=Sembolik linkleri her zaman takip et. acl_dirs=Sadece dizinlere girilere izin ver. share_title=Paylatrma share_samba=Windows share_nfs=NFS share_son=Windows dosya paylam ak share_soff=Windows dosya paylam kapal share_writable=Yazlabilir? share_available=Aktif mi? share_sheader=Paylam seenekleri share_only=Sadece share_guest=Ziyareti girileri? share_comment=Aklama share_nheader=NFS sunum seenekleri share_non=NFS dosya paylam ak share_noff=NFS dosya paylam kapal share_desc=Aklama share_ro=Sadece okuma izinli makineler share_rw=Okuma-yazma izinli makineler share_root=Root girili makineler share_none=Hibiri share_all=Hepsi share_listed=Listeli... share_host=Makineler share_opts=Seenekler share_s0=Hikimseye gvenme share_s1=Root dndakilere gven share_s2=Herkese gven share_lro=Sadece okunur share_lrw=Okunur-yazlr log_create_export=NFS sunumu $1 oluturuldu log_modify_export=NFS sunumu $1 deitirildi log_delete_export=NFS sunumu $1 silindi log_create_share=Samba paylam $1 oluturuldu log_modify_share=Samba paylam $1 deitirildi log_delete_share=Samba paylam $1 silindi log_save=$1 dosyas kaydedildi log_chmod=$1 dosyasnn haklar deitirildi log_mkdir=$1 dizini oluturuldu log_upload=$1 dosyas yklendi log_link=$2'ye sembolik link $1 oluturuldu log_relink=$2'ye sembolik link $1 deitirildi log_copy=$1 dosyas $2'ye kopyaland log_move=$1 dosyas $2'ye tand log_delete=$1 dosyas silindi file/lang/pl0100644000567100000120000002640507306537646012764 0ustar jcameronwheelindex_title=Zarzdca plikw index_nojava=Ten modu wymaga do swojego dziaania javy, natomiast Twoja przegldarka javy nie obsuguje # switch_euser=Uytkownik Uniksa nie istnieje! switch_euser=Uzytkownik Uniksa nie istnieje! # top_open=Otwrz top_open=Otworz top_view=Obejrzyj top_edit=Modyfikuj # top_refresh=Odwie top_refresh=Odswiez top_info=Informacje # top_delete=Usu top_delete=Usun top_new=Nowy # top_upload=Przelij top_upload=Przeslij # top_rename=Zmie nazw top_rename=Zmien nazwe top_copy=Kopiuj top_cut=Wytnij top_paste=Wklej # top_share=Udostpnianie top_share=Udostepnianie top_search=Szukaj right_name=Nazwa right_size=Rozmiar # right_user=Waciciel right_user=Wlasciciel right_group=Grupa right_date=Data # edit_enormal=Modyfikowa mona tylko zwyke pliki edit_enormal=Modyfikowac mozna tylko zwykle pliki edit_title=Modyfikacja $1 edit_title2=Tworzenie pliku edit_filename=Nazwa pliku: # edit_eover=$1 nie moe by nadpisany edit_eover=$1 nie moze byc nadpisany # edit_esave=Nie udao si zachowa pliku : $1 edit_esave=Nie udalo sie zachowac pliku : $1 # edit_eaccess=Nie masz uprawnie do zachowania '$1' edit_eaccess=Nie masz uprawnien do zachowania '$1' info_file=Plik # info_path=cieka: info_path=Sciezka: info_type=Typ: info_size=Rozmiar: info_mod=Zmieniony: # info_link=Dowizanie do: info_link=Dowiazanie do: info_perms=Uprawnienia # info_user=Waciciel: info_user=Wlasciciel: info_group=Grupa: info_other=Inni: info_sticky=Sticky: # info_sticky2=Tylko waciciele mog usuwa pliki info_sticky2=Tylko wlasciciele moga usuwac pliki # info_own=Prawa wasnoci info_own=Prawa wlasnosci info_setuid=Setuid: # info_setuid2=Uruchom jako uytkownik info_setuid2=Uruchom jako uzytkownik info_setgid=Setgid: # info_setgid2=Pliki dziedzicz grup info_setgid2=Pliki dziedzicza grupe info_setgid3=Uruchom jako grupa info_apply=Zastosuj zmiany do info_apply1=tylko katalogu # info_apply2=katalogu i zawartych w nim plikw info_apply2=katalogu i zawartych w nim plikow info_apply3=katalogu wraz z podkatalogami # info_efailed=Nie udao sie zaktualizowa $1 : $2 info_efailed=Nie udalo sie zaktualizowac $1 : $2 info_read=Odczyt info_write=Zapis # info_list=Przegldanie info_list=Przegladanie info_exec=Uruchamianie delete_dtitle=Usu katalog delete_ftitle=Usu plik # delete_ddesc=Czy jeste pewien, e chcesz nieodwracalnie usun katalog $1 wraz z ca zawartoci? delete_ddesc=Czy jestes pewien, ze chcesz nieodwracalnie usunac katalog $1 wraz z cala zawartoscia? # delete_fdesc=Czy jeste pewien, e chcesz nieodwracalnie usun plik $1 ? delete_fdesc=Czy jestes pewien, ze chcesz nieodwracalnie usunac plik $1 ? # delete_efailed=Nie udao si usun $1 : $2 delete_efailed=Nie udalo sie usunac $1 : $2 mkdir_title=Nowy katalog mkdir_dir=Nowy katalog: # mkdir_eexists=$1 ju istnieje mkdir_eexists=$1 juz istnieje # mkdir_efailed=Nie udao sie utworzy katalogu : $1 mkdir_efailed=Nie udalo sie utworzyc katalogu : $1 # mkdir_eaccess=Nie masz uprawnie do utworzenia '$1' mkdir_eaccess=Nie masz uprawnien do utworzenia '$1' link_title=Utwrz dowizanie link_from=Nazwa dowizania: link_to=Dowizanie do: # link_eexists=$1 ju istnieje link_eexists=$1 juz istnieje # link_efailed=Nie udao si utworzy dowizania : $1 link_efailed=Nie udalo sie utworzyc dowiazania : $1 # link_efrom=Nie masz uprawnie do utworzenia dowizania '$1' link_efrom=Nie masz uprawnien do utworzenia dowiazania '$1' # link_efollow=Nie masz uprawnie do tworzenia dowiza symbolicznych link_efollow=Nie masz uprawnien do tworzenia dowiazan symbolicznych rename_title=Zmie nazw $1 rename_old=Stara nazwa: rename_new=Nowa nazwa: # rename_ok=Zmie nazw rename_ok=Zmien nazwe # rename_eexists=Plik o nazwie $1 ju istnieje rename_eexists=Plik o nazwie $1 juz istnieje # rename_efailed=Nie udao si zmieni nazwy : $1 rename_efailed=Nie udalo sie zmienic nazwy : $1 # rename_eold=Nie masz uprawnie do zmiany nazwy '$1' rename_eold=Nie masz uprawnien do zmiany nazwy '$1' # rename_enew=Nie masz uprawnie do zmiany nazwy na '$1' rename_enew=Nie masz uprawnien do zmiany nazwy na '$1' file_type0=Katalog file_type1=Plik tekstowy file_type2=Plik Image file_type3=Plik binarny file_type4=Plik # file_type5=Dowizanie symboliczne file_type5=Dowiazanie symboliczne # file_type6=Plik urzdzenia file_type6=Plik urzadzenia file_type7=plik FIFO # view_enormal=Mona oglda tylko zwyke pliki view_enormal=Mozna ogladac tylko zwykle pliki # view_eaccess=Nie masz prawa dostpu do $1 view_eaccess=Nie masz prawa dostepu do $1 # view_eopen=Nie udao si otworzy $1 : $2 view_eopen=Nie udalo sie otworzyc $1 : $2 # paste_ecopy=Aby wklei musisz wczeniej co skopiowa lub wyci paste_ecopy=Aby wkleic musisz wczesniej cos skopiowac lub wyciac # paste_egone=Kopiowany plik $1 ju nie istnieje paste_egone=Kopiowany plik $1 juz nie istnieje # paste_eover=Nie mona nadpisa $1 paste_eover=Nie mozna nadpisac $1 # paste_eself=Nie moesz wklei pliku w miejsce jego samego paste_eself=Nie mozesz wkleic pliku w miejsce jego samego # paste_emfailed=Nie udao si przesun : $1 paste_emfailed=Nie udalo sie przesunac : $1 # paste_ecfailed=Nie udao si skopiowa : $1 paste_ecfailed=Nie udalo sie skopiowac : $1 over_title=Plik istnieje # over_msg=Plik $1 ju istnieje. Podaj now nazw dla tworzonego pliku korzystajc z pola poniej. over_msg=Plik $1 juz istnieje. Podaj nowa nazwe dla tworzonego pliku korzystajac z pola ponizej. over_new=Nowa nazwa pliku: over_ok=OK # upload_efailed=Nie udao si otworzy przesyania : $1 upload_efailed=Nie udalo sie otworzyc przesylania : $1 # upload_title=Przelij plik upload_title=Przeslij plik # upload_file=Plik do przesania upload_file=Plik do przeslania # upload_dir=Przelij do katalogu upload_dir=Przeslij do katalogu # upload_ok=Przelij upload_ok=Przeslij # upload_conv=Przeksztaci DOS-owe koce linii? upload_conv=Przeksztacic DOS-owe konce linii? # upload_efile=Nie podano pliku do przesania. upload_efile=Nie podano pliku do przeslania. # upload_edir=Katalog, do ktrego ma nastpi przesanie nie istnieje. upload_edir=Katalog, do ktorego ma nastapic przeslanie nie istnieje. # upload_eperm=Nie masz uprawnie do utworzenia $1 upload_eperm=Nie masz uprawnien do utworzenia $1 # upload_ewrite=Nie udao si zapisa w $1 : $2. upload_ewrite=Nie udalo sie zapisac w $1 : $2. # find_eaccess=Nie masz prawa dostpu do $1 find_eaccess=Nie masz prawa dostepu do $1 find_eexist=$1 nie istnieje w $2 find_edir=$1 nie jest podkatalogiem $2 cancel=Rezygnuj # chmod_eaccess=Nie masz prawa dostpu do '$1' chmod_eaccess=Nie masz prawa dostepu do '$1' # chmod_euser=$1 : nie ma takiego uytkownika chmod_euser=$1 : nie ma takiego uzytkownika chmod_egroup=$1 : nie ma takiej grupy # chmod_elink=nie udao si utworzy dowizania symbolicznego : $1 chmod_elink=nie udalo sie utworzyc dowiazania symbolicznego : $1 # chmod_echown=nie udao si zmieni waciciela : $1 chmod_echown=nie udalo sie zmienic wasciciela : $1 # chmod_echmod=nie udao si zmieni uprawnie : $1 chmod_echmod=nie udalo sie zmienic uprawnien : $1 # copy_efrom=Nie masz uprawnie do kopiowania '$1' copy_efrom=Nie masz uprawnien do kopiowania '$1' # copy_eto=Nie masz uprawnie do kopiowania do '$1' copy_eto=Nie masz uprawnien do kopiowania do '$1' # copy_elink=nie udao si utworzy dowizania symbolicznego : $1 copy_elink=nie udalo sie utworzyc dowiazania symbolicznego : $1 # delete_eaccess=Nie masz uprawnie do usunicia '$1' delete_eaccess=Nie masz uprawnien do usuniecia '$1' # list_eaccess=Nie masz prawa dostpu do tego katalogu list_eaccess=Nie masz prawa dostepu do tego katalogu # list_edir=Nie udao si przejrze $1 : $2 list_edir=Nie udalo sie przejrzec $1 : $2 # move_eto=Nie masz uprawnie do przenoszenia do '$1' move_eto=Nie masz uprawnien do przenoszenia do '$1' # move_afrom=Nie masz uprawnie do przeniesienia '$1' move_afrom=Nie masz uprawnien do przeniesienia '$1' acl_user=Dostp do plikw na serwerze z prawami uytkownika acl_user_def=Taki sam jak zalogowany do Webmina acl_umask=Umaska dla nowych plikw acl_follow=Zawsze ledzi dowizania symboliczne? acl_dirs=Pozwoli jedynie na dostp do katalogw # acl_home=Docz katalog domowy uytkownika Webmina acl_home=Dolacz katalog domowy uzytkownika Webmina share_title=Udostpnianie share_samba=Windows share_nfs=NFS # share_son=Udostpnianie plikw dla Windows wczone share_son=Udostepnianie plikow dla Windows wlaczone # share_soff=Udostpnianie plikw dla Windows wyczone share_soff=Udostepnianie plikow dla Windows wylaczone share_writable=Prawa zapisu? share_available=Aktualnie czynne? # share_sheader=Opcje wspdzielenia share_sheader=Opcje wspoldzielenia # share_only=Wycznie share_only=Wylacznie # share_guest=Dostp gocinny? share_guest=Dostep goscinny? share_comment=Uwagi # share_nheader=Opcje udostpniania NFS share_nheader=Opcje udostepniania NFS # share_non=Udostpnianie NFS wczone share_non=Udostepnianie NFS wlaczone # share_noff=Udostpnianie NFS wyczone share_noff=Udostepnianie NFS wylaczone share_desc=Opis # share_ro=Hosty z dostpem tylko do odczytu share_ro=Hosty z dostepem tylko do odczytu # share_rw=Hosty z dostpem do zapisu share_rw=Hosty z dostepem do zapisu # share_root=Hosty z dostpem roota share_root=Hosty z dostepem roota share_none=Brak share_all=Wszystkie share_listed=Wymienione.. share_host=Hosty share_opts=Opcje share_s0=Nie ufaj nikomu # share_s1=Ufaj wszystkim prcz roota share_s1=Ufaj wszystkim procz roota share_s2=Ufaj wszystkim share_lro=Tylko do odczytu share_lrw=Odczyt i zapis log_create_export=Utworzono udostpnianie NFS $1 log_modify_export=Zmieniono udostpnianie NFS $1 log_delete_export=Usunito udostpnianie NFS $1 log_create_share=Utworzono zasb Samby $1 log_modify_share=Zmieniono zasb Samby $1 log_delete_share=Usunito zasb Samby $1 log_save=Zachowano plik $1 log_chmod=Zmieniono uprawnienia dla pliku $1 log_mkdir=Utworzono katalog $1 log_upload=Przesano plik $1 log_link=Utworzono dowizanie symboliczne $1 do $2 log_relink=Zmieniono dowizanie symboliczne $1 do $2 log_copy=Skopiowano plik $1 jako $2 log_move=Przeniesiono plik $1 do $2 log_delete=Usunito plik $1 # search_eaccess=Nie masz uprawnie do przeszukiwania tego katalogu search_eaccess=Nie masz uprawnien do przeszukiwania tego katalogu search_title=Szukaj plikw search_ok=Szukaj teraz search_dir=Szukaj w katalogu # search_match=Plikw wg wzorca search_match=Plikow wg wzorca # search_user=Nalecych do uytkownika search_user=Nalezacych do uzytkownika # search_group=Nalecych do grupy search_group=Nalezacych do grupy search_any=Dowolny search_type=Rodzaj pliku search_types_=Dowolny # search_types_f=Zwyky plik search_types_f=Zwykly plik search_types_d=Katalog # search_types_l=Dowizanie symboliczne search_types_l=Dowiazanie symboliczne search_types_p=Nazwane FIFO search_size=Rozmiar pliku # search_more=Wikszy ni search_more=Wiekszy niz # search_less=Mniejszy ni search_less=Mniejszy niz # search_xdev=Przeszukiwa inne systemy plikw? search_xdev=Przeszukiwac inne systemy plikow? search_edir=Nie podany lub niepoprawny katalog przeszukiwania # search_ematch=Brak wyraenia regularnego do dopasowania search_ematch=Brak wyrazenia regularnego do dopasowania # search_euser=Nie podano nazwy uytkownika search_euser=Nie podano nazwy uzytkownika search_egroup=Nie podano nazwy grupy # search_esize=Rozmiar pliku musi by liczb cakowit search_esize=Rozmiar pliku musi byc liczba calkowita search_crit=Kryteria szukania search_list=Wyniki szukania file/lang/ru_RU0100664000567100000120000002251710005107277013366 0ustar jcameronwheeltop_delete= info_apply= info_perms= info_file= view_enormal= top_upload= edit_esave= : $1 upload_ewrite= $1 : $2. chmod_elink= symlink : $1 upload_ok= view_eaccess= $1 info_group=: edit_title2= top_info= move_afrom= '$1' link_efailed= : $1 info_setuid2= chmod_euser=$1 : link_efrom= '$1' info_mod=: right_date= copy_efrom= '$1' info_sticky2= rename_old= : find_eaccess= $1 mkdir_eexists=$1 upload_dir= rename_enew= '$1' find_edir=$1 $2 upload_efile= . info_type=: info_setuid= setuid: right_group= upload_efailed= : $1 top_cut= info_read= acl_user= paste_ecopy= info_exec= delete_ddesc= $1 ? info_link= : link_to= : info_size=: info_path=: copy_eto= '$1' rename_ok= chmod_egroup=$1 : info_own= upload_conv= DOS? cancel= info_list= index_nojava= java, java paste_eover=$1 info_user=: delete_fdesc= $1 ? edit_title= $1 paste_egone= $1 top_paste= chmod_echmod= chmod : $1 edit_filename= : link_eexists=$1 edit_enormal= info_setgid2= info_setgid3= top_copy= edit_eaccess= '$1' right_name= rename_efailed= : $1 upload_edir= . rename_new= : delete_dtitle= link_from=: index_title= file_type0= file_type1= file_type2= file_type3= file_type4= file_type5= file_type6= file_type7= info_sticky= sticky: upload_title= top_edit= upload_eperm= $1 move_eto= '$1' paste_eself= copy_elink= symlink : $1 chmod_echown= chown : $1 acl_umask=Umask mkdir_dir= : info_other=: mkdir_title= delete_ftitle= find_eexist=$1 $2 right_size= edit_eover=$1 paste_emfailed= : $1 link_title= info_apply1= info_apply2= info_apply3= info_efailed= $1 : $2 acl_follow= ? upload_file= info_setgid= setgid: paste_ecfailed= : $1 mkdir_eaccess= '$1' right_user= rename_eold= '$1' link_efollow= rename_title= $1 top_new= mkdir_efailed= : $1 info_write= rename_eexists= $1 acl_dirs= chmod_eaccess= '$1' top_refresh= delete_eaccess= '$1' view_eopen= $1 : $2 top_rename= list_eaccess= delete_efailed= $1 : $2 log_chmod= $1 eacl_edefmask=There can be at most one default mask ACL entry acl_log= ? eacl_eacls= ACL : $1 search_eaccess= over_msg= $1 . . share_nfs=NFS log_copy= $1 $2 acltype_default_group= eacl_aclname= search_size= log_upload= $1 attr_create= search_types_d= ext_eattrs= EXT : $1 search_group= search_types_f= index_eremote= Unix Webmin $1. search_types_l= search_types_p= search_dir= acltype_user= acl_user_def= Webmin top_share= switch_euser= Unix ! acl_home= Webmin search_match= share_writable= ? delete_mtitle= search_less= top_attr= log_link= $1 $2 log_create_export= NFS $1 eacl_acltype= ACL share_s0= nobody share_s1= -root share_s2= ext_header= EXT search_title= search_types_= log_move= $1 $2 acl_goto= ? top_search= share_none= log_delete= $1 share_opts= share_ro=, share_rw=, share_guest= (Guest)? share_nheader= NFS over_title= over_new= : share_host= search_esize= acltype_other= ext_efailed= EXT $1 : $2 share_title= share_only= attr_edit= eacl_eowner= view_enormal2= search_user= log_mkdir= $1 attr_ename= search_more= eacl_user= $1 ext_efs= $1 EXT acltype_default_user= top_ext=EXT eacl_efs= $1 ACL search_egroup= share_lro= acl_ro= ? eacl_edefaults=If a file has any default ACL, it must have default user, group and other ACLs. list_edir= $1 : $2 eacl_owner= share_lrw=/ attr_name= eacl_aclperms= acltype_default_other= acltype_mask= attr_eattrs= : $1 search_ematch= eacl_add= ACL : log_attr= $1 log_modify_export= NFS $1 attr_efs= $1 top_down= eattr_A= search_crit= attr_add= chmod_efollow= ext_title= EXT $1 share_son= Windows log_create_share= Samba $1 search_ok= attr_title= $1 eattr_S= search_edir= share_non= NFS eattr_a= share_samba=Windows eattr_c= eattr_d= dump search_xdev= ? eacl_edit= ACL eattr_i= share_soff= Windows search_euser= eattr_s= eattr_u= top_ret= log_delete_share= Samba $1 eacl_emask=There can be at most one mask ACL entry log_delete_export= NFS $1 eacl_group= $1 share_noff= NFS share_available= ? info_octal= : attr_efailed= $1 : $2 acltype_default_mask= log_modify_share= Samba $1 log_save= $1 share_comment= share_desc= eacl_remove= ACL attr_value= search_any= search_type= eacl_title=ACL $1 top_eacl=ACL facl_eaccess= ACL share_root=, root eacl_efailed= ACL $1 : $2 share_all= delete_mdesc= ? : acltype_group= log_acl= $1 ACL share_listed=.. share_sheader= search_list= eacl_create= ACL log_relink= $1 $2 over_ok= file/lang/ja_JP.euc0100664000567100000120000001503510067670054014073 0ustar jcameronwheelindex_title=ե ޥ͡ index_nojava=Υ⥸塼ưΤ Java ɬפȤޤѤΥ֥饦 Java 򥵥ݡȤƤޤ top_open= top_view=ɽ top_edit=Խ top_refresh= top_info= top_delete= top_new= top_upload=åץ top_rename=̾ѹ top_copy=ԡ top_cut=å top_paste=ڡ top_share=ͭ top_search= right_name=ե̾ right_size= right_user=桼 right_group=롼 right_date= edit_enormal=ɸեΤԽǤޤ edit_title=$1 Խ edit_title2=ե edit_filename=ե̾: edit_eover=$1 Ͼ񤭤Ǥޤ edit_esave=ե¸ǤޤǤ: $1 edit_eaccess='$1' ¸Ǥޤ info_file=ե info_path=ѥ: info_type=: info_size=: info_mod=ѹ: info_link=: info_perms= info_user=桼: info_group=롼: info_other=¾: info_sticky=ƥå: info_sticky2=ͭԤΤߤեǤޤ info_own=ͭ info_setuid=setuid (桼 ID ): info_setuid2=Υ桼ȤƼ¹ info_setgid=setgid (롼 ID ): info_setgid2=եηѾ롼 info_setgid3=Υ롼פȤƼ¹ info_apply=ѹŬ info_apply1=Υǥ쥯ȥΤ info_apply2=Υǥ쥯ȥȤ˴ޤޤƤե info_apply3=Υǥ쥯ȥȤ٤ƤΥ֥ǥ쥯ȥ info_efailed=$1 򹹿ǤޤǤ: $2 info_read=ɼ info_write= info_list=ꥹ info_exec=¹ delete_dtitle=ǥ쥯ȥκ delete_ftitle=եκ delete_ddesc=ǥ쥯ȥ $1 ȤƤʵפ˺ƤǤ delete_fdesc=桼 $1ʵפ˺ƤǤ delete_efailed=$1 ǤޤǤ: $2 mkdir_title=Υǥ쥯ȥ mkdir_dir=Υǥ쥯ȥ: mkdir_eexists=$1 ϤǤ¸ߤޤ mkdir_efailed=ǥ쥯ȥǤޤǤ: $1 mkdir_eaccess='$1' Ǥޤ link_title=󥯤κ link_from=󥯸: link_to=: link_eexists=$1 ϤǤ¸ߤޤ link_efailed=󥯤ǤޤǤ: $1 link_efrom='$1' 󥯤Ǥޤ link_efollow=ܥå 󥯤Ǥޤ rename_title=$1 ̾ѹ rename_old=Ť̾: rename_new=̾: rename_ok=̾ѹ rename_eexists=$1 ȤեϤǤ¸ߤƤޤ rename_efailed=̾ѹǤޤǤ: $1 rename_eold='$1' ̾ѹǤޤ rename_enew='$1' ̾ѹǤޤ file_type0=ǥ쥯ȥ file_type1=ƥ ե file_type2=ե file_type3=Хʥ ե file_type4=ե file_type5=ܥå file_type6=ǥХ ե file_type7=ѥ view_enormal=ɸեΤɽǤޤ view_eaccess=$1 ˥Ǥޤ view_eopen=$1 򳫤ޤǤ: $2 paste_ecopy=ڡȤ˥åȤޤϥԡƤ paste_egone=ԡե $1 Ϥ⤦¸ߤޤ paste_eover=$1 Ͼ񤭤Ǥޤ paste_eself=ե򤽤Υե뼫Ȥ˥ڡȤ뤳ȤϤǤޤ paste_emfailed=ưǤޤǤ: $1 paste_ecfailed=ԡǤޤǤ: $1 over_title=¸Υե over_msg=ե $1 ϤǤ¸ߤޤڡȤ줿եοե̾򲼤ΥեɤϤƤ over_new=Υե̾: over_ok=OK upload_efailed=åץɤ򳫤ޤǤ: $1 upload_title=եΥåץ upload_file=åץɤե upload_dir=åץ ǥ쥯ȥ upload_ok=åץ upload_conv=DOS ԤѴޤ upload_efile=åץɤե뤬򤵤Ƥޤ upload_edir=åץɤΥǥ쥯ȥ꤬¸ߤޤ upload_eperm=$1 Ǥޤ upload_ewrite=$1 ˽񤭹ޤǤ: $2. find_eaccess=$1 ˥Ǥޤ find_eexist=$1 $2 ˤ¸ߤޤ find_edir=$1 $2 Υǥ쥯ȥǤϤޤ cancel=󥻥 chmod_eaccess='$1' ˥Ǥޤ chmod_euser=$1 : Υ桼¸ߤޤ chmod_egroup=$1 : Υ롼פ¸ߤޤ chmod_elink=symlink Ԥޤ: $1 chmod_echown=chown Ԥޤ: $1 chmod_echmod=chmod Ԥޤ: $1 copy_efrom='$1' ϥԡǤޤ copy_eto='$1' ؤϥԡǤޤ copy_elink=symlink Ԥޤ: $1 delete_eaccess='$1' Ǥޤ list_eaccess=Υǥ쥯ȥ˥Ǥޤ list_edir=$1 ꥹȤǤޤǤ: $2 move_eto='$1' ؤϰưǤޤ move_afrom='$1' ϰưǤޤ acl_user=ФΥե˼Υ桼Ȥƥ acl_umask=ե Umask acl_follow=symlink ˤɤޤ acl_dirs=Υǥ쥯ȥؤΥΤߤ share_title=ͭ share_samba=Windows share_nfs=NFS share_son=Windows եζͭͭ share_soff=Windows եζ̵ͭ share_writable=ߤǤޤ share_available=ߥƥ֤Ǥ share_sheader=ͭץ share_only=Τ share_guest=ȤΥǽˤޤ share_comment= share_nheader=NFS ݡ ץ share_non=NFS եζͭͭ share_noff=NFS եζ̵ͭ share_desc= share_ro=ɼѤΥۥ share_rw=ɼ-߲ǽΥۥ share_root=root Υۥ share_none=ʤ share_all=٤ share_listed=ꥹ.. share_host=ۥ share_opts=ץ share_s0=٤ƤΥ桼ꤷʤ share_s1=root ʳ share_s2=٤ƤΥ桼 share_lro=ɼ share_lrw=ɼ- log_create_export=NFS ݡ $1 ޤ log_modify_export=NFS ݡ $1 ѹޤ log_delete_export=NFS ݡ$1 ޤ log_create_share=Samba ζͭ $1 ޤ log_modify_share=Samba ζͭ $1 ѹޤ log_delete_share=Samba ζͭ $1 ޤ log_save=ե $1 ¸ޤ log_chmod=ե $1 εĤѹޤ log_mkdir=ǥ쥯ȥ $1 ޤ log_upload=ե $1 򥢥åץɤޤ log_link=$2ؤΥܥå $1 ޤ log_relink=$2 ؤΥܥå $1 ѹޤ log_copy=ե $1 $2 ˥ԡޤ log_move=ե $1 $2 ˰ưޤ log_delete=ե $1 ޤ search_eaccess=Υǥ쥯ȥ򸡺Ǥޤ search_title=եθ search_ok=˸ search_dir=ǥ쥯ȥ search_match=פե search_user=ͭ桼 search_group=ͭ롼 search_any=Ǥ search_type=եμ search_types_=Ǥ search_types_f=ե search_types_d=ǥ쥯ȥ search_types_l=ܥå search_types_p=̾դѥ search_size=ե search_more=礭 search_less=꾮 search_xdev=ΥޥȤ򸡺ޤ search_edir=ǥ쥯ȥ꤬ʤ̵Ǥ search_ematch=פɽޤ search_euser=桼̾ޤ search_egroup=롼̾ޤ search_esize=ե ǤʤФʤޤ search_crit= search_list= file/lang/ko_KR.euc0100664000567100000120000001354207305563347014125 0ustar jcameronwheelindex_title= index_nojava= Java Բ ؾ Java ʽϴ top_open= top_view= top_edit= top_refresh= ħ top_info= top_delete= top_new= top_upload=ε top_rename≠ ٲٱ top_copy= top_cut=߶󳻱 top_paste=ٿֱ top_share= top_search=ã right_name≠ right_size=ũ right_user= right_group=׷ right_date=¥ edit_enormal=Ϲ ϸ ֽϴ edit_title=$1 edit_title2= ۼ edit_filename= ̸: edit_eover=$1()  ϴ edit_esave= ߽ϴ: $1 edit_eaccess='$1'() ϴ info_file= info_path=: info_type=: info_size=ũ: info_mod= ¥: info_link=ũ : info_perms= info_user=: info_group=׷: info_other= : info_sticky=: info_sticky2=ڸ ֽϴ info_own= info_setuid=Setuid: info_setuid2=ڷμ info_setgid=Setgid: info_setgid2= ׷ info_setgid3=׷μ info_apply= info_apply1= 丮 info_apply2= 丮 ش info_apply3= 丮 丮 info_efailed=$1() Ʈ ߽ϴ: $2 info_read=б info_write= info_list= info_exec= delete_dtitle=丮 delete_ftitle= delete_ddesc=丮 $1() Ͻðڽϱ? delete_fdesc= $1() Ͻðڽϱ? delete_efailed=$1() ߽ϴ: $2 mkdir_title= 丮 mkdir_dir= 丮: mkdir_eexists=$1() ̹ ֽϴ mkdir_efailed=丮 ۼ ߽ϴ: $1 mkdir_eaccess='$1'() ۼ ϴ link_title=ũ ۼ link_from=ũ ҽ: link_to=ũ : link_eexists=$1() ̹ ֽϴ link_efailed=ũ : $1 link_efrom='$1' ũ ϴ link_efollow=ɺ ũ ۼ ϴ rename_title=$1 ̸ ٲٱ rename_old= ̸: rename_new= ̸: rename_ok≠ ٲٱ rename_eexists= $1() ̹ ֽϴ rename_efailed≠ ٲ ߽ϴ: $1 rename_eold='$1' ̸ ٲ ϴ rename_enew='$1'() ̸ ٲ ϴ file_type0=丮 file_type1=ؽƮ file_type2=̹ file_type3= file_type4= file_type5=ɺ ũ file_type6=ġ file_type7= view_enormal=Ϲ ϸ ֽϴ view_eaccess=$1 ϴ view_eopen=$1() ߽ϴ: $2 paste_ecopy=ٿֱ ߶󳻰ų ؾ մϴ paste_egone= $1() ̻ ʽϴ paste_eover=$1()  ϴ paste_eself= Ͽ ٿ ϴ paste_emfailed=̵ ߽ϴ: $1 paste_ecfailed= ߽ϴ: $1 over_title= over_msg= $1() ̹ ֽϴ. ٿ ̸ Ʒ ʵ忡 ԷϽʽÿ. over_new= ̸: over_ok=Ȯ upload_efailed=ε ߽ϴ: $1 upload_title= ε upload_file=ε upload_dir=丮 ε upload_ok=ε upload_conv=DOS ٹٲ ȯմϱ? upload_efile=ε ʾҽϴ. upload_edir=ε 丮 ʽϴ. upload_eperm=$1() ۼ ϴ upload_ewrite=$1 ߽ϴ: $2 find_eaccess=$1 ׼ ϴ find_eexist=$2 $1() ʽϴ find_edir=$1() $2 丮 ƴմϴ cancel= chmod_eaccess='$1' ϴ chmod_euser=$1: ش chmod_egroup=$1: ش ׷ chmod_elink=ɺ ũ : $1 chmod_echown=chown : $1 chmod_echmod=chmod : $1 copy_efrom='$1' ϴ copy_eto='$1' ϴ copy_elink=ɺ ũ : $1 delete_eaccess='$1'() ϴ list_eaccess= 丮 ϴ list_edir=$1() ߽ϴ: $2 move_eto='$1'() ̵ ϴ move_afrom='$1'() ̵ ϴ acl_user=ڷμ Ͽ acl_umask= Umask acl_follow=׻ ɺ ũ ϱ? acl_dirs=丮 ׼ share_title= share_samba= share_nfs=NFS share_son= share_soff= Ҵ share_writable= մϱ? share_available= Ȱ Դϱ? share_sheader= ɼ share_only= share_guest=ԽƮ մϱ? share_comment=ּ share_nheader=NFS ɼ share_non=NFS share_noff=NFS Ҵ share_desc= share_ro=б ȣƮ share_rw=б/ ȣƮ share_root=root ׼ ȣƮ share_none= share_all= share_listed=.. share_host=ȣƮ share_opts=ɼ share_s0=ƹ ŷ share_s1=root ŷ share_s2= ŷ share_lro=б share_lrw=б/ log_create_export=NFS $1 ۼ log_modify_export=NFS $1 log_delete_export=NFS $1 log_create_share= $1 ۼ log_modify_share= $1 log_delete_share= $1 log_save= $1 log_chmod= $1 log_mkdir=丮 $1 ۼ log_upload= $1 ε log_link=$2 ɺ ũ $1 ۼ log_relink=$2 ɺ ũ $1 log_copy=$2() $1 log_move=$2() $1 ̵ log_delete= $1 search_eaccess= 丮 ˻ ϴ search_title= ã search_ok= ˻ search_dir=丮 ˻ search_match= ˻ search_user= search_group=׷ search_any= search_type= search_types_= search_types_f= search_types_d=丮 search_types_l=ɺ ũ search_types_p= search_size= ũ search_more= ŭ search_less= search_xdev= Ʈ ˻մϱ? search_edir=ų ߸ ˻ 丮 search_ematch=ġϴ ϴ search_euser= ̸ search_egroup= ׷ ̸ search_esize= ũ մϴ search_crit=˻ search_list=˻ file/lang/ca0100644000567100000120000003056010115717240012707 0ustar jcameronwheelindex_title=Administrador de Fitxers index_nojava=Aquest mdul requereix java per funcionar, per el teu navegador no suporta java index_eremote=No hi ha cap usuari Unix que coincideixi amb l'entrada $1 de Webmin. switch_euser=L'usuari Unix no existeix! top_ret=ndex top_down=Desa top_edit=Edita top_refresh=Refresca top_info=Info top_eacl=ACL top_attr=Atributs top_ext=EXT top_delete=Suprimeix top_new=Nou top_upload=Puja top_rename=Renomena top_copy=Copia top_cut=Retalla top_paste=Enganxa top_share=Xarxa top_mount=Munta top_search=Busca top_config=Configura right_name=Nom right_size=Mida right_user=Usuari right_group=Grup right_date=Data edit_enormal=Noms es poden editar els fitxers normals edit_title=Editant $1 edit_title2=Creant el fitxer edit_filename=Nom del fitxer: edit_goto=Ves edit_find=Busca edit_gotoline=Ves a la lnia edit_replace=Reemplaa edit_all=Reemplaa-ho tot edit_searchfor=Busca edit_replaceby=Reemplaa amb edit_eover=$1 no es pot reescriure edit_esave=No he pogut desar el fitxer: $1 edit_eaccess=No tens perms per desar '$1' edit_efollow=No tens perms per gravar l'enlla simblic '$1' edit_notfound=El text $1 no s'ha trobat edit_saveclose=Desa & Tanca info_file=Fitxer info_path=Cam: info_type=Tipus: info_size=Mida: info_mod=Modificat: info_link=Enlla a: info_perms=Permisos info_user=Usuari: info_group=Grup: info_other=Altres: info_octal=Octal: info_sticky=Sticky: info_sticky2=Noms els propietaris poden esborrar fitxers info_own=Propietat info_setuid=Setuid: info_setuid2=Executa com a usuari info_setgid=Setgid: info_setgid2=Els fitxers hereten el grup info_setgid3=Executa com a grup info_apply=Aplica els canvis a info_apply1=Aquest directori nomes info_apply2=Aquest directori i els seus fitxers info_apply3=Aquest directori i tots els seus subdirectoris info_efailed=No he pogut actualitzar $1: $2 info_read=Llegir info_write=Escriure info_list=Llistar info_exec=Executar eacl_eacls=No he pogut llegir les ACLs: $1 eacl_acltype=Tipus d'ACL eacl_aclname=Aplica a eacl_aclperms=Permisos eacl_add=Afegeix ACL del tipus: eacl_remove=Esborra ACL eacl_efs=EL sistema de fitxers $1 no suporta ACLs eacl_create=Crea ACL eacl_edit=Edita ACL eacl_user=Propietari del fitxer $1 eacl_group=Grup del fitxer $1 eacl_eowner=Hi falta l'usuari o el grup per aplicar eacl_efailed=No he pogut establir l'ACL per a $1: $2 eacl_emask=Hi pot haver com a molt una entrada de mscara ACL eacl_edefmask=Hi pot haver com a molt una entrada per defecte de mscara ACL eacl_title=ACL de $1 eacl_owner=Propietari del fitxer eacl_edefaults=Si un fitxer t alguna ACL per defecte, ha de tenir usuari i grup per defecte. acltype_user=Usuari acltype_group=Grup acltype_other=Altres acltype_mask=Mscara acltype_default_user=Usuari per defecte acltype_default_group=Grup per defecte acltype_default_other=Altres per defecte acltype_default_mask=Mscara per defecte delete_mtitle=Suprimeix fitxers mltiples delete_dtitle=Supressi de directori delete_ftitle=Supressi de fitxer delete_ddesc=Segur que vols esborrar de forma definitiva el directori $1 i tot el seu contingut? delete_fdesc=Segur que vols esborrar de forma definitiva el fitxer $1? delete_efailed=No he pogut esborrar $1: $2 delete_mdesc=Segur que vols suprimir de forma permanent aquests fitxers i directoris? mkdir_title=Nou Directori mkdir_dir=Nou directori: mkdir_eexists=$1 ja existeix mkdir_efailed=La creaci del director ha fallat: $1 mkdir_eaccess=No tens perms per crear '$1' link_title=Creaci d'enlla link_from=Enllaa: link_to=A: link_eexists=$1 ja existeix link_efrom=L'origen de l'enlla ha de ser un cam absolut link_efailed=L'enlla ha fallat: $1 link_efrom2=No tens perms per enllaar '$1' link_efollow=No tens perms per crear enllaos simblics rename_title=Renomenament de $1 rename_old=Nom vell: rename_new=Nom nou: rename_ok=Renomena rename_eexists=Ja existeix un fitxer anomenat $1 rename_efailed=El renomenament ha fallat: $1 iename_eold=No tens perms per renomenar '$1' rename_enew=No tens perms per renomenar a '$1' file_type0=Directori file_type1=Fitxer de text file_type2=Fitxer d'imatge file_type3=Fitxer binari file_type4=Fitxer file_type5=Enlla simblic file_type6=Fitxer de dispositiu file_type7=Pipe view_enormal=Noms es poden mostrar els fitxers normals view_enormal2=Noms es poden desacrregar fitxers normals view_eaccess=No tens perms per accedir a $1 view_eopen=No he pogut obrir $1: $2 view_edir=Un arxiu noms es pot crear per a un directori view_ecmd=L'ordre $1 necessria per a crear un arxiu no est installada view_ecomp=No he pogut crear l'arxiu: $1 view_earchive=No tens perms per descarregar arxius view_earchmax=El directori seleccionat s ms gran que el mxim perms per arxivar ($1 bytes) paste_ecopy=Has de copiar o retallar abans d'enganxar paste_egone=El fitxer copiat $1 ja no existeix paste_eover=$1 no es pot reescriure paste_eself=No pots enganxar un fitxer sobre ell mateix paste_emfailed=El desplaament ha fallat: $1 paste_ecfailed=La copia ha fallat: $1 over_title=Fitxer Existent over_msg=El fitxer $1 ja existeix. Utilitza el camp inferior per introduir un nom de fitxer nou per al fitxer enganxat. over_new=Nom de fitxer nou: over_ok=B upload_efailed=No he pogut obrir el fitxer per pujar: $1 upload_title=Puja de Fitxer upload_file=Fitxer per pujar upload_dir=Puja'l al directori upload_ok=Puja upload_conv=Converteix salts de lnia DOS upload_efile=No s'ha seleccionat cap fitxer per pujar. upload_edir=El directori de destinaci no existeix. upload_eperm=No tens perms per crear $1 upload_ewrite=No he pogut escriure a $1: $2. upload_already=El fitxer $1 ja existeix. Segur que el vols reescriure? upload_elink=No puc fer la puja sobre un enlla simblic upload_zip=Descomprimeixo el fitxer ZIP o TAR? upload_yes=S, llavors suprimeix-lo find_eaccess=No tens perms per accedir $1 find_eexist=$1 no existeix a $2 find_edir=$1 no s un directori de $2 cancel=Cancella close=Tanca eopen=La descrrega ha fallat: $1 chmod_eaccess=No tens perms per accedir '$1' chmod_euser=$1: no existeix l'usuari chmod_egroup=$1: no existeix el grup chmod_elink=enlla simblic fallit: $1 chmod_echown=chown fallit: $1 chmod_echmod=chmod fallit: $1 chmod_efollow=No tens perms per editar els enllaos simblics copy_efrom=No tens perms per copiar de '$1' copy_eto=No tens perms per copiar a '$1' copy_elink=enlla simblic fallit: $1 delete_eaccess=No tens perms per esborrar '$1' list_eaccess=No tens perms per accedir a aquest directori list_edir=No he pogut llistar $1: $2 move_eto=No tens perms per desplaar a '$1' move_afrom=No tens perms per desplaar '$1' acl_user=Accedeix els fitxers del servidor com a usuari acl_user_def=Igual que l'usuari Webmin acl_umask=Umask per a fitxers nous acl_follow=Segueix sempre els enllaos simblics acl_fyes=Si el propietari coincideix acl_ro=Mode noms lectura acl_dirs=Permet l'accs nomes als directoris acl_home=Inclou el directori arrel de l'usuari Webmin acl_log=Enregistra totes les modificacions de fitxers acl_goto=Obre el primer directori perms acl_max=Mida mxima de pujada acl_unlim=Illimitada acl_b=bytes acl_archive=Pot descarregar arxius de directoris acl_archmax=S, si sn ms petits de acl_buttons=Botons disponibles a la barra d'eines acl_button_save=Desa (descarrega el fitxer) acl_button_edit=Edita (edita el fitxer de text) acl_button_info=Info (edita els permisos i propietat del fitxer) acl_button_acl=ACL (edita l'ACL Posix) acl_button_attr=Atr (edita els atributs XFS) acl_button_ext=EXT (edita els atributs EXT) acl_button_search=Busca (busca fitxers) acl_button_delete=Suprimeix (suprimeix fitxers) acl_button_new=Nou (crea fitxer de text) acl_button_upload=Puja (puja un fitxer des del client) acl_button_mkdir=Nou (crea un directori) acl_button_makelink=Nou (crea un enlla simblic) acl_button_rename=Renomena (renomena el fitxer) acl_button_sharing=Comparteix (configura els fitxers compartits Samba i NFS) acl_button_mount=Munta (munta o desmunta el sistema de fitxers) acl_button_copy=Copia, Retalla i Enganxa acl_unarchive=Pot extreure fitxers d'un arxiu pujat acl_unarchive2=Intenta-ho sempre acl_unarchive1=$yes acl_unarchive0=$no acl_dostounix=Pot convertir els salts de lnia DOS acl_chroot=Directori chroot del gestor de fitxers complet acl_relto=(relatiu a qualsevol directori chroot) share_title=Xarxa share_samba=Windows share_nfs=NFS share_son=Compartici de fitxers Windows activada share_soff=Compartici de fitxers Windows desactivada share_writable=Gravable share_available=Actualment actiu share_sheader=Opcions del recurs share_only=Nomes share_guest=Accs hoste share_comment=Comentari share_nheader=Opcions d'exportaci NFS share_non=Compartici de fitxers NFS activada share_noff=Compartici de fitxers NFS desactivada share_desc=Descripci share_ro=Hosts nomes lectura share_rw=Hosts lectura/escriptura share_root=Hosts amb accs root share_none=Cap share_all=Tot share_listed=Llistats... share_host=Hosts share_opts=Opcions share_s0=No et refis de ning share_s1=Refia't de no-root share_s2=Refia't de tothom share_lro=Noms lectura share_lrw=Lectura-escriptura log_create_export=He creat l'exportaci NFS $1 log_modify_export=He modificat l'exportaci NFS $1 log_delete_export=He suprimit l'exportaci NFS $1 log_create_share=He creat el recurs Samba $1 log_modify_share=He modificat el recurs Samba $1 log_delete_share=He suprimit el recurs Samba $1 log_save=He desat el fitxer $1 log_chmod=He canviat els permisos del fitxer $1 log_mkdir=He creat el directori $1 log_upload=He pujat el fitxer $1 log_link=He creat l'enlla simblic $1 a $2 log_relink=He modificat l'enlla simblic $1 a $2 log_copy=He copiat el fitxer $1 a $2 log_move=He desplaat el fitxer $1 a $2 log_delete=He esborrat el fitxer $1 log_attr=Estableix atributs sobre el fitxer $1 log_acl=Estableix ACL sobre el fitxer $1 search_eaccess=No tens perms per buscar en aquest directori search_title=Busca Fitxers search_ok=Busca ara search_dir=Busca al directori search_match=els fitxers que coincideixin amb search_user=Usuari propietari search_group=Grup propietari search_any=Qualsevol search_type=Tipus de fitxer search_types_=Qualsevol search_types_f=Fitxer search_types_d=Directori search_types_l=Enlla simblic search_types_p=Pipe search_size=Mida del fitxer search_more=Ms de search_less=Menys de search_xdev=Busca muntatges anteriors search_edir=Hi falta el directori de recerca o b no s correcte search_ematch=Hi falta una expressi regular search_euser=Hi falta un nom d'usuari search_egroup=Hi falta un nom de grup search_esize=La mida del fitxer ha de ser un enter search_crit=Criteris de Recerca search_list=Resultats de la Recerca facl_eaccess=No tens perms per establir ACLs per a aquest fitxer attr_eattrs=No he trobat els atributs: $1 attr_efs=El sistema de fitxers $1 no suporta atributs attr_add=Afegeix Atribut attr_name=Nom de l'Atribut attr_value=Valor de l'Atribut attr_efailed=No he pogut establir els atributs de $1: $2 attr_title=Atributs de Fitxer de $1 attr_create=Crea Atribut attr_edit=Edita Atribut attr_ename=Hi falta el nom de l'atribut ext_eattrs=No he pogut obtenir els atributs EXT: $1 ext_efs=El sistema de fitxers $1 no suporta atributs EXT ext_title=Atributs EXT de $1 ext_header=Atributs EXT de fitxer ext_efailed=No he pogut establir els atributs de $1: $2 eattr_A=No actualitzis els temps d'accs eattr_a=Noms pot afegir al fitxer eattr_c=Comprimeix les dades del disc eattr_d=No en facis cpia amb dump eattr_i=No en permetis la modificaci eattr_s=Posa els blocs a zero en suprimir eattr_S=Fes sempre un sync desprs de gravar eattr_u=Desa el contingut per a desfer mount_eaccess=No tens perms per muntar sistemes de fitxers mount_efstab=No hi ha cap sistema de fitxers en aquest punt de muntatge mount_epoint=$1 no s un punt de muntatge mount_rusure1=Segur que vols muntar $1 de $2 ? mount_rusure2=Segur que vols desmuntar $1 de $2 ? mount_err1=No he pogut muntar $1: $2 mount_err2=No he pogut desmuntar $1: $2 mount_title1=Munta el sistema de fitxers mount_title2=Desmunta el sistema de fitxers zip_err=No puc extreure el fitxer: $1 zip_ecmd=Hi falta l'ordre $1 zip_eunzip=La descompressi ZIP ha fallat: $1 zip_ename=No sembla que sigui cap fitxer zip, tar ni tar.gz zip_euntar=El desarxivat TAR ha fallat: $1 zip_euntar2=La descompressi i desarxivat TAR ha fallat: $1 ddir_title=Descrrega de Directori ddir_rusure=Per descarregar el contingut de $1 com un fitxer d'arxiu, fes clic sobre una dels botons de tipus d'arxiu de sota. ddir_zip=ZIP ddir_tgz=TAR.GZ ddir_tar=TAR ebutton=Aquesta caracterstica no est disponible file/lang/tr.bak0100644000567100000120000001317707364725102013522 0ustar jcameronwheelindex_title=Dosya Yneticisi index_nojava=Bu modl java gerektirir, fakat sizin taraycnz java'yi desteklemiyor top_open=A top_view=Gster top_edit=Deitir top_refresh=Yenile top_info=Bilgi top_delete=Sil top_new=Yeni top_upload=Ykleme(Upload) top_rename=Yeniden Adlandr top_copy=Kopyala top_cut=Kes top_paste=Yaptr top_share=Paylatr right_name=Ad right_size=Boyut right_user=Kullanc right_group=Grup right_date=Tarih edit_enormal=Sadece normal dosyalar deitirilebilir edit_title=$1 deitiriliyor edit_title2=Dosya oluturuluyor edit_filename=Dosya smi: edit_eover=$1 zerine yazlamaz edit_esave=Dosyann kaydedilmesinde hata olutu : $1 edit_eaccess='$1' kaydedilmesine izininiz yoktur info_file=Dosya info_path=Yol: info_type=Tip: info_size=Boyut: info_mod=Deitirildi: info_link=Link to:##### info_perms=Haklar info_user=Kullanc: info_group=Grup: info_other=Dierleri: info_sticky=Sticky: info_sticky2=Dosyalar sadece sahipleri silebilir info_own=Sahiplik info_setuid=Uid'yi belirt: info_setuid2=Kullanc Olarak altr info_setgid=Gid'yi Olutur: info_setgid2=Dosyalar grubun olsun info_setgid3=Grup olarak altr info_apply=Deiiklikleri uygula ... info_apply1=Sadece bu dizine info_apply2=Bu dizin ve dosyalarna info_apply3=Bu dizin ve alt dizinlerine info_efailed=Gncellemede hata olutu $1 : $2 info_read=Oku info_write=Yaz info_list=Listele info_exec=altr delete_dtitle=Dizin Sil delete_ftitle=Dosya Sil delete_ddesc=$1 dizinini ve iindekileri silmek istediinizden eminmisiniz? delete_fdesc=$1 dizinini silmek istediinizden eminmisiniz? delete_efailed=Silme ileminde hata olutu $1 : $2 mkdir_title=Yeni Dizin mkdir_dir=Yeni dizin: mkdir_eexists=$1 dizini mevcut mkdir_efailed=Dizin oluturmada hata olutu : $1 mkdir_eaccess='$1' dizini oluturmaya hakknz yok link_title=Link Olutur link_from=Link buradan: link_to=Link buraya: link_eexists=$1 her zaman mevcut link_efailed=Link oluturulurken hata olutu : $1 link_efrom='$1' den link oluturmaya hakknz yoktur link_efollow=Sembolik linkler oluturmaya hakknz yoktur rename_title=Yeniden Adlandr $1 rename_old=Eski smi: rename_new=Yeni smi: rename_ok=Yeniden Adlandr rename_eexists=$1 dosyas her zaman mevcut rename_efailed=Yeniden adlandrmada hata olutu : $1 rename_eold='$1'i yeniden adlandrmaya hakknz yoktur rename_enew='$1' olarak yeniden adlandyrmaya hakkynyz yoktur file_type0=Dizin file_type1=Yaz Dosyas file_type2=Resim Dosyas file_type3=kili Dosya file_type4=Dosya file_type5=Sembolik Link file_type6=Ara Dosyas file_type7=Boru view_enormal=Sadece normal dosyalar grntlenebilir view_eaccess=$1'e eriime hakknz yoktur view_eopen=Ama ileminde hata olutu $1 : $2 paste_ecopy=Yaptrmadan nce kopyalamal veya kesmelisiniz paste_egone=Kopyalanan dosya $1 artk yok paste_eover=$1 zerine yazlamaz paste_eself=Dosyay kendi zerine yaptramazsnz paste_emfailed=Tamada hata olutu : $1 paste_ecfailed=Kopyalamada hata olutu : $1 over_title=Dosya Mevcut over_msg=$1 dosyas her zaman mevcut. Yaptrlan dosyaya yeni bir isim girmek iin bo formu kullannz. over_new=Yeni dosya ismi over_ok=Tamam upload_efailed=Dosyann yklenmesinde hata olutu : $1 upload_title=Dosyay Ykle upload_file=Yklecek Dosya upload_dir=Dizine Ykleme upload_ok=Ykle upload_conv=DOS satrlar evirilsin mi? upload_efile=Yklenecek dosya seilmedi. upload_edir=Ykleme dizini mevcut deil upload_eperm=$1 oluturmanza izin verilmedi upload_ewrite=$1'i yazmada hata olutu : $2. find_eaccess=$1'e eriim izininiz yoktur find_eexist=$1, $2 iinde mevcut deil find_edir=$1, $2'de bir dizin deil cancel=ptal chmod_eaccess='$1'e eriim izininiz yoktur chmod_euser=$1 : Kullanc yok chmod_egroup=$1 : Grup yok chmod_elink=Sembolik linkte hata olutu : $1 chmod_echown=chown'da hata olutu : $1 chmod_echmod=chmod'da hata olustu : $1 copy_efrom='$1'den kopyalamanza izin verilmemitir copy_eto='$1'e kopyalamanza izin verilmemitir copy_elink=Sembolik linkte hata olutu : $1 delete_eaccess='$1'i silmede hata olutu list_eaccess=Bu dizine giri izininiz yoktur move_eto='$1'e tamaya hakknz yoktur move_afrom='$1'i tamaya hakkynyz yoktur acl_user=Sunucuda kullanc olarak dosyalara ula acl_umask=Yeni dosyalar iin umask acl_follow=Sembolik linkleri her zaman takip et. acl_dirs=Sadece dizinlere girilere izin ver. share_title=Paylatrma share_samba=Windows share_nfs=NFS share_son=Windows dosya paylam ak share_soff=Windows dosya paylam kapal share_writable=Yazlabilir? share_available=Aktif mi? share_sheader=Paylam seenekleri share_only=Sadece share_guest=Ziyareti girileri? share_comment=Aklama share_nheader=NFS sunum seenekleri share_non=NFS dosya paylam ak share_noff=NFS dosya paylam kapal share_desc=Aklama share_ro=Sadece okuma izinli makineler share_rw=Okuma-yazma izinli makineler share_root=Root girili makineler share_none=Hibiri share_all=Hepsi share_listed=Listeli... share_host=Makineler share_opts=Seenekler share_s0=Hikimseye gvenme share_s1=Root dndakilere gven share_s2=Herkese gven share_lro=Sadece okunur share_lrw=Okunur-yazlr log_create_export=NFS sunumu $1 oluturuldu log_modify_export=NFS sunumu $1 deitirildi log_delete_export=NFS sunumu $1 silindi log_create_share=Samba paylam $1 oluturuldu log_modify_share=Samba paylam $1 deitirildi log_delete_share=Samba paylam $1 silindi log_save=$1 dosyas kaydedildi log_chmod=$1 dosyasnn haklar deitirildi log_mkdir=$1 dizini oluturuldu log_upload=$1 dosyas yklendi log_link=$2'ye sembolik link $1 oluturuldu log_relink=$2'ye sembolik link $1 deitirildi log_copy=$1 dosyas $2'ye kopyaland log_move=$1 dosyas $2'ye tand log_delete=$1 dosyas silindi file/lang/pt_BR0100644000567100000120000002262510067401470013336 0ustar jcameronwheelindex_title=Gerenciador de Arquivos index_nojava=Este mdulo requer java para funcionar, porm o seu navegador no suporta java index_eremote=No h nenhum usurio Unix que corresponda ao login $1 do Webmin. switch_euser=O usurio Unix no existe! top_ret=ndice top_down=Salvar top_edit=Editar top_refresh=Atualizar top_info=Info top_eacl=ACL top_attr=Atributos top_ext=EXT top_delete=Apagar top_new=Novo top_upload=Upload top_rename=Renomear top_copy=Copiar top_cut=Recortar top_paste=Colar top_share=Compartilhar top_search=Procurar right_name=Nome right_size=Tamanho right_user=Usurio right_group=Grupo right_date=Data edit_enormal=Somente arquivos comuns podem ser editados edit_title=Editando $1 edit_title2=Criando o arquivo edit_filename=Nome do arquivo: edit_eover=$1 no pode ser sobrescrito edit_esave=Falha ao salvar o arquivo : $1 edit_eaccess=Voc no est autorizado a salvar '$1' info_file=Arquivo info_path=Caminho: info_type=Tipo: info_size=Tamanho: info_mod=Modificado: info_link=Link para: info_perms=Permisses info_user=Usurio: info_group=Grupo: info_other=Outros: info_octal=Octal: info_sticky=Sticky: info_sticky2=Somente os donos podem apagar os arquivos info_own=Dono info_setuid=Setar uid: info_setuid2=Executar como usurio info_setgid=Setar gid: info_setgid2=Grupo inerente dos arquivos info_setgid3=Executar como grupo info_apply=Aplicar mudanas a info_apply1=Somente a este diretrio info_apply2=Este diretrio e seus arquivos info_apply3=Este diretrio e todos os seus subdiretrios info_efailed=Falha ao atualizar $1 : $2 info_read=Ler info_write=Escrever info_list=Listar info_exec=Executar eacl_eacls=Falha ao ler ACLs : $1 eacl_acltype=Tipo de ACL eacl_aclname=Aplicar a eacl_aclperms=Permisses eacl_add=Adicionar ACL do tipo : eacl_remove=Remover ACL eacl_efs=O sistema de arquivos $1 no suporta ACLs eacl_create=Criar ACL eacl_edit=Editar ACL eacl_user=Dono do arquivo $1 eacl_group=Grupo do arquivo $1 eacl_eowner=Faltando o usurio ou grupo para aplicar a eacl_efailed=Falha ao setar ACL para $1 : $2 eacl_emask=Pode existir uma entrada a mais para a mscara ACL eacl_edefmask=Pode existir uma entrada a mais padro para a mscara ACL eacl_title=ACL para $1 eacl_owner=Dono do arquivo eacl_edefaults=Se o arquivo contm qualquer ACL padro, ele precisa ter usurio, grupo e outras ACLs padro. acltype_user=Usurio acltype_group=Grupo acltype_other=Outros acltype_mask=Mscara acltype_default_user=Usurio Padro acltype_default_group=Grupo Padro acltype_default_other=Outros Padro acltype_default_mask=Mscara Padro delete_mtitle=Apagar mltiplos arquivos delete_dtitle=Apagar diretrio delete_ftitle=Apagar arquivo delete_ddesc=Voc tem certeza que deseja apagar permanentemente o diretrio $1 e todo o seu contedo? delete_fdesc=Voc tem certeza que deseja apagar permanentemente o arquivo $1 ? delete_mdesc=Voc tem certeza que deseja apagar permanentemente estes arquivos e diretrios? : delete_efailed=Falha ao apagar $1 : $2 mkdir_title=Novo Diretrio mkdir_dir=Novo diretrio: mkdir_eexists=$1 j existe mkdir_efailed=Falha ao criar diretrio : $1 mkdir_eaccess=Voc no est autorizado a criar '$1' link_title=Criar Link link_from=Link de: link_to=Link para: link_eexists=$1 j existe link_efailed=Falha ao criar link : $1 link_efrom=Voc no est autorizado a linkar de '$1' link_efollow=Voc no est autorizado a criar links simblicos rename_title=Renomear $1 rename_old=Nome antigo: rename_new=Nome novo: rename_ok=Renomear rename_eexists=Um arquivo chamado $1 j existe rename_efailed=Falha ao renomear : $1 rename_eold=Voc no est autorizado a renomear '$1' rename_enew=Voc no est autorizado a renomear para '$1' file_type0=Directrio file_type1=Arquivo texto file_type2=Arquivo de Imagem file_type3=Arquivo Binrio file_type4=Arquivo file_type5=Link simblico file_type6=Arquivo de dispositivo file_type7=Pipe view_enormal=Somente arquivos comuns podem ser vizualizados view_enormal2=Somente pode ser feito download de arquivos comuns view_eaccess=Voc no est autorizado a acessar $1 view_eopen=Falha ao abrir $1 : $2 paste_ecopy=Voc precisa recortar ou copiar antes de colar paste_egone=Arquivo copiado $1 no existe mais paste_eover=$1 no pode ser sobrescrito paste_eself=Voc no pode colar um arquivo sobre ele mesmo paste_emfailed=Falha ao mover : $1 paste_ecfailed=Falha ao copiar : $1 over_title=Arquivo j existe over_msg=O arquivo $1 j existe. Use o campo abaixo para digitar o nome do arquivo a ser colado. over_new=Novo nome do arquivo: over_ok=Ok upload_efailed=Falha ao abrir upload : $1 upload_title=Arquivo para upload upload_file=Arquivo para upload upload_dir=Upload para qual diretrio upload_ok=Upload upload_conv=Converter novas linhas do DOS? upload_efile=No foi selecionado nenhum arquivo para upload. upload_edir=Diretrio de upload no existe. upload_eperm=Voc no est autorizado a criar $1 upload_ewrite=Falha a escrever para $1 : $2. find_eaccess=Voc no tem permisso para acessar $1 find_eexist=$1 no existe em $2 find_edir=$1 no um diretrio em $2 cancel=Cancelar chmod_eaccess=Voc no est autorizado a acessar '$1' chmod_euser=$1 : usurio invlido chmod_egroup=$1 : grupo invlido chmod_elink=falha no link simblico : $1 chmod_echown=falha no chown : $1 chmod_echmod=falha no chmod : $1 chmod_efollow=Voc no est autorizado a editar links simblicos copy_efrom=Voc no est autorizado a copiar de '$1' copy_eto=Voc no esta autorizado a copiar para '$1' copy_elink=falha no link simblico : $1 delete_eaccess=Voc no esta autorizado a apagar '$1' list_eaccess=Voc no esta autorizado a acessar este diretorio list_edir=Falha ao listar $1 : $2 move_eto=Voc no est autorizado a mover para '$1' move_afrom=Voc no est autorizado a mover '$1' acl_user=Acessar arquivos no servidor como usurio acl_user_def=O mesmo que no login do Webmin acl_umask=Umask para novos arquivos acl_follow=Seguir links simblicos sempre? acl_ro=Modo somente leitura? acl_dirs=Permite acesso somente aos diretrios acl_home=Incluir diretrio home do usurio Webmin acl_log=Logar todas as modificaes nos arquivos? acl_goto=Abrir primeiro o diretrio ermitido? share_title=Compartilhamento share_samba=Windows share_nfs=NFS share_son=Compartilhamento de arquivos Windows abilitado share_soff=Compartilhamento de arquivos Windows desabilitado share_writable=Permitir escrita? share_available=Ativo atualmente? share_sheader=Opes de compartilhamento share_only=Somente share_guest=Acesso a convidados? share_comment=Comentrio share_nheader=Opes de exportao NFS share_non=Compartilhamento de arquivos NFS abilitado share_noff=Compartilhamento de arquivos NFS desabilitado share_desc=Descriao share_ro=Hosts somente leitura share_rw=Hosts leitura e escrita share_root=Hosts com acesso root share_none=Nenhum share_all=Todos share_listed=Listados.. share_host=Hosts share_opts=Opes share_s0=No confiar em ningum share_s1=Confiar em no root share_s2=Confiar em todos share_lro=Somente leitura share_lrw=Leitura e escrita log_create_export=Criada exportao NFS $1 log_modify_export=Modificada exportao NFS $1 log_delete_export=Deletada exportao NFS $1 log_create_share=Criado compartilhamento Samba $1 log_modify_share=Modificado compartilhamento Samba $1 log_delete_share=Deletado compartilhamento Samba $1 log_save=Foi salvo o arquivo $1 log_chmod=Permisses alteradas no arquivo $1 log_mkdir=Criado o diretrio $1 log_upload=Foi enviado o arquivo $1 log_link=Criado o link simblico $1 para $2 log_relink=Modificado o link simblico $1 para $2 log_copy=Copiado o arquivo $1 para $2 log_move=Movido o arquivo $1 para $2 log_delete=Deletado o arquivo $1 log_attr=Foram setados os atributos no arquivo $1 log_acl=Setar ACL no arquivo $1 search_eaccess=Voc no tem autorizao para procurar neste diretrio search_title=Procurar arquivos search_ok=Procurar agora search_dir=Procurar no diretrio search_match=Por arquivos que coincidam com search_user=Pertenam ao usurio search_group=Pertenam ao grupo search_any=Qualquer search_type=Tipo de arquivo search_types_=Qualquer search_types_f=Arquivo search_types_d=Diretrio search_types_l=Link simblico search_types_p=Pipe nomeado search_size=Tamanho do arquivo search_more=Mais do que search_less=Menos do que search_xdev=Procurar montagens anteriores? search_edir=Diretrio de procura invlido ou faltando search_ematch=Falatando coincidir regexp search_euser=Faltando nome de usurio search_egroup=Faltando nome do grupo search_esize=O tamanho do arquivo precisa ser um inteiro search_crit=Critrio de pesquisa search_list=Resultados da pesquisa facl_eaccess=Voc no tem permisso para alterar ACLs para este arquivo attr_eattrs=Falha ao receber atributos de : $1 attr_efs=O sistema de arquivos $1 no suporta atributos attr_add=Adicionar atributo attr_name=Nome do atributo attr_value=Valor do atributo attr_efailed=Falha ao setar atributos para $1 : $2 attr_title=Atributos do arquivo para $1 attr_create=Adicionar atributo attr_edit=Editar atributo attr_ename=Faltando o nome do atributo ext_eattrs=Falha ao receber atributos EXT : $1 ext_efs=O sistema de arquivos $1 no suporta atributos EXT ext_title=Atributos EXT para $1 ext_header=Atributos EXT do arquivo ext_efailed=Falha ao fixar atributos para $1 : $2 eattr_A=No atualize os tempos de acesso eattr_a=Pode somente adicionar ao fim do arquivo eattr_c=Comprimir dados no disco eattr_d=No fazer backup com o dump eattr_i=No permitir modificao eattr_s=Zerar blocos quando apagar eattr_S=Sempre sincronizar aps escrever eattr_u=Salvar contedo para recuperar file/lang/sk0100644000567100000120000002213307606524032012744 0ustar jcameronwheelindex_title=Sprvca Systmu Sborov index_eremote=Žiadny Unixov užvateľ nezodpoved hodnotm z Webmin prihlsečnia $1. switch_euser=Tento Unixov užvateľ nejestvuje! top_ret=Index top_down=Ulož top_edit=Otvor pre zmeny top_refresh=Obnov top_info=Info top_eacl=ACL top_attr=Atribty top_ext=EXT top_delete=Vymaž top_new=Nov(/) top_upload=Nalož top_rename=Premenuj top_copy=Kpia top_cut=Vyber top_paste=Vlož top_share=Zdieľanie top_search=Njdi right_name=Meno right_size=Veľkosť right_user=Užvateľ right_group=Skupina right_date=Dtum edit_enormal=Len normlne sbory mžu byť menen edit_title=Zmeny na $1 edit_title2=Vytvnie sboru edit_filename=Meno sboru: edit_eover=$1 nemže byť prepsan edit_esave=NEmoohol uložiť : $1 edit_eaccess=Nemš povolenie na ukladanie '$1' info_file=Sbor info_path=Cesta: info_type=Typ: info_size=Veľkosť: info_mod=Zmenen: info_link=Vzba na: info_perms=Povolenia info_user=Užvateľ: info_group=Skupina: info_other=In: info_sticky=Lepčkav: info_sticky2=Len majitelia mžu vymazať info_own=Majetok info_setuid=Setuid: info_setuid2=Vykonaj ako užvateľ info_setgid=Setgid: info_setgid2=Sbory dedia skupinu info_setgid3=Vykonaj ako skupina info_apply=AKtivuj zmeny info_apply1=Len tento adresr info_apply2=Tento adresr a jeho sbory info_apply3=Tento adresr a všetky jeho priraden adresre info_efailed=Porucha pri zmene $1 : $2 info_read=Čtaj info_write=Pš info_list=Zoznam info_exec=Exec eacl_eacls=Načtavanie ACL sborov nebolo spešn : $1 eacl_acltype=Typ ACL eacl_aclname=Použi na eacl_aclperms=Povolenia eacl_add=Pridaj typ ACL : eacl_remove=Odnm ACL eacl_efs=Sborov systm $1 plne nepodporuje ACLs eacl_create=Vytvor ACL eacl_edit=Edituj ACL eacl_user=Majiteľ sboru $1 eacl_group=Skupina sboru $1 eacl_eowner=Užvateľ alebo skupina sboru neexistuje eacl_efailed=Nemohol som nastaviť ACL pre $1 : $2 eacl_emask=Maximlne mže byť použit jedna maskovan ACL eacl_edefmask=Maximlne mže byť použit jedna zkladn maskovan ACL eacl_title=ACL pre $1 eacl_owner=Majiteľ sboru eacl_edefaults=Ak sbor m zkladn ACL, mus tiež mať zkladnho majiteľa, skupinu a ostatn ACL. acltype_user=Užvateľ acltype_group=Skupina acltype_other=In acltype_mask=Maska acltype_default_user=Zkladn užvateľ acltype_default_group=Zkladn skupina acltype_default_other=Zkladn In acltype_default_mask=Zkladn Maska delete_mtitle=Vymaž viacero sborov delete_dtitle=Vymaž adresr delete_ftitle=Vymaž sbor delete_ddesc=Si si ist že chceš permanente vymazať adresr $1 a všetok jeho obsah? delete_fdesc=Si si ist že chceš permanente vymazať sbor $1 ? delete_mdesc=Si si ist že chceš permanente vymazať adresre a sbory? : delete_efailed=Nemožn vymazať $1 : $2 mkdir_title=Novo-vytvoren Adresr mkdir_dir=Nov Adresr: mkdir_eexists=$1 už jestvuje mkdir_efailed=Vytvorenie Adresru nebolo spešn : $1 mkdir_eaccess=Nemš povolenie na vytvorenie '$1' link_title=Vytvor Spojenie link_from=Spojenie z: link_to=Spojenie na: link_eexists=$1 už jestvuje link_efailed=Spojenie nebolo spešn : $1 link_efrom=Nemš dovolen vytvrať spojenia na '$1' link_efollow=Nemš dostatočn povolenie na vytvranie symbolickch spojen rename_title=Premenuj $1 rename_old=Pvodn meno: rename_new=Nov meno: rename_ok=Premenuj rename_eexists=Sbor s menom $1 už jestvuje rename_efailed=Premenovvanie nebolo spešn : $1 rename_eold=Nemš dovolen premenovvať '$1' rename_enew=Nemš dovolen premenovvať na '$1' file_type0=Adresr file_type1=Textov sbor file_type2=Obrzok file_type3=Binarny sbor file_type4=Sbor file_type5=Symbolick spojenie file_type6=Sbor ovldača file_type7=Rrka view_enormal=Len normlne sbory mžu byť prezeran view_enormal2=Len normlne sbory mžu byť sťahovan view_eaccess=Nemš povolen prstup k $1 view_eopen=Otvorenie nebolo spešn $1 : $2 paste_ecopy=Musš najprv vybrať alebo skoprovať ak chceš vkladať paste_egone=Sbor koprovan $1 už neexiststuje paste_eover=$1 nemže byť prepsan paste_eself=Nemžeš vkladať sbor do adresra so sborom s rovnakm menom paste_emfailed=Premiestnenie nebolo spešn : $1 paste_ecfailed=Vytvranie kpie nebolo spešn : $1 over_title=Sbor už Existstuje over_msg=Sbor $1 už existstuje. Použi polčko nižšie na premenovanie vkladanho sboru. over_new=Nov meno sboru: over_ok=Ok upload_efailed=Naložen sbor : $1 sa nepodarilo otvoriť upload_title=Nalož sbor upload_file=Sbor pre nakladanie upload_dir=Nalož do adresra upload_ok=Nalož upload_conv=Kovertuj DOS-ov symboly pre nov riadok? upload_efile=Nebol vybrat žiaden sbor na nakladanie. upload_edir=Adresr na nakladanie neexistuje. upload_eperm=You are not allowed to create $1 upload_ewrite=Failed to write to $1 : $2. find_eaccess=You are not allowed to access $1 find_eexist=$1 does not exist in $2 find_edir=$1 is not a directory in $2 cancel=Zruš chmod_eaccess=You are not allowed to access '$1' chmod_euser=$1 : no such user chmod_egroup=$1 : no such group chmod_elink=symlink failed : $1 chmod_echown=chown failed : $1 chmod_echmod=chmod failed : $1 chmod_efollow=You are not allowed to edit symbolic links copy_efrom=You are not allowed to copy from '$1' copy_eto=You are not allowed to copy to '$1' copy_elink=symlink failed : $1 delete_eaccess=You are not allowed to delete '$1' list_eaccess=You are not allowed to access this directory list_edir=Failed to list $1 : $2 move_eto=You are not allowed to move to '$1' move_afrom=You are not allowed to move '$1' acl_user=Access files on server as user acl_user_def=Same as Webmin login acl_umask=Umask for new files acl_follow=Always follow symlinks? acl_ro=Read-only mode? acl_dirs=Only allow access to directories acl_home=Include home directory of Webmin user acl_log=Log all file modifications? acl_goto=Open first allowed directory? share_title=Sharing share_samba=Windows share_nfs=NFS share_son=Windows file sharing enabled share_soff=Windows file sharing disabled share_writable=Writable? share_available=Currently active? share_sheader=Sharing options share_only=Only share_guest=Guest access? share_comment=Comment share_nheader=NFS export options share_non=NFS file sharing enabled share_noff=NFS file sharing disabled share_desc=Description share_ro=Read-only hosts share_rw=Read-write hosts share_root=Root access hosts share_none=None share_all=All share_listed=Listed.. share_host=Hosts share_opts=Options share_s0=Trust nobody share_s1=Trust non-root share_s2=Trust everybody share_lro=Read-only share_lrw=Read-write log_create_export=Created NFS export $1 log_modify_export=Modified NFS export $1 log_delete_export=Deleted NFS export $1 log_create_share=Created Samba share $1 log_modify_share=Modified Samba share $1 log_delete_share=Deleted Samba share $1 log_save=Saved file $1 log_chmod=Changed permissions on file $1 log_mkdir=Created directory $1 log_upload=Uploaded file $1 log_link=Created symbolic link $1 to $2 log_relink=Modified symbolic link $1 to $2 log_copy=Copied file $1 to $2 log_move=Moved file $1 to $2 log_delete=Deleted file $1 log_attr=Set attributes on file $1 log_acl=Set ACL on file $1 search_eaccess=You are not allowed to search this directory search_title=Find files search_ok=Search Now search_dir=Search directory search_match=For files matching search_user=Owned by user search_group=Owned by group search_any=Any search_type=File type search_types_=Any search_types_f=File search_types_d=Directory search_types_l=Symbolic link search_types_p=Named pipe search_size=File size search_more=More than search_less=Less than search_xdev=Search past mounts? search_edir=Missing or invalid search directory search_ematch=Missing matching regexp search_euser=Missing username search_egroup=Missing group name search_esize=File size must be an integer search_crit=Search criteria search_list=Search results facl_eaccess=You are not allowed to set ACLs for this file attr_eattrs=Failed to get attributes : $1 attr_efs=The filesystem $1 does not support attributes attr_add=Add Attribute attr_name=Attribute Name attr_value=Attribute Value attr_efailed=Failed to set attributes for $1 : $2 attr_title=File Attributes for $1 attr_create=Add Attribute attr_edit=Edit Attribute attr_ename=Missing attribute name ext_eattrs=Failed to get EXT attributes : $1 ext_efs=The filesystem $1 does not support EXT attributes ext_title=EXT attributes for $1 ext_header=EXT file attributes ext_efailed=Failed to set attributes for $1 : $2 eattr_A=Do not update access times eattr_a=Can only append to file eattr_c=Compress data on disk eattr_d=Do not backup with dump eattr_i=Do not allow modification eattr_s=Zero blocks when deleting eattr_S=Always sync after writing eattr_u=Save contents for undeletion file/lang/ru_SU0100644000567100000120000002255610067401527013373 0ustar jcameronwheelindex_title= index_nojava= java, java index_eremote= Unix Webmin $1. switch_euser= Unix ! top_ret= top_down= top_edit= top_refresh= top_info= top_eacl=ACL top_attr= top_ext=EXT top_delete= top_new= top_upload= top_rename= top_copy= top_cut= top_paste= top_share= top_search= right_name= right_size= right_user= right_group= right_date= edit_enormal= edit_title= $1 edit_title2= edit_filename= : edit_eover=$1 edit_esave= : $1 edit_eaccess= '$1' info_file= info_path=: info_type=: info_size=: info_mod=: info_link= : info_perms= info_user=: info_group=: info_other=: info_octal= : info_sticky= sticky: info_sticky2= info_own= info_setuid= setuid: info_setuid2= info_setgid= setgid: info_setgid2= info_setgid3= info_apply= info_apply1= info_apply2= info_apply3= info_efailed= $1 : $2 info_read= info_write= info_list= info_exec= eacl_eacls= ACL : $1 eacl_acltype= ACL eacl_aclname= eacl_aclperms= eacl_add= ACL : eacl_remove= ACL eacl_efs= $1 ACL eacl_create= ACL eacl_edit= ACL eacl_user= $1 eacl_group= $1 eacl_eowner= eacl_efailed= ACL $1 : $2 eacl_emask=There can be at most one mask ACL entry eacl_edefmask=There can be at most one default mask ACL entry eacl_title=ACL $1 eacl_owner= eacl_edefaults=If a file has any default ACL, it must have default user, group and other ACLs. acltype_user= acltype_group= acltype_other= acltype_mask= acltype_default_user= acltype_default_group= acltype_default_other= acltype_default_mask= delete_mtitle= delete_dtitle= delete_ftitle= delete_ddesc= $1 ? delete_fdesc= $1 ? delete_mdesc= ? : delete_efailed= $1 : $2 mkdir_title= mkdir_dir= : mkdir_eexists=$1 mkdir_efailed= : $1 mkdir_eaccess= '$1' link_title= link_from=: link_to= : link_eexists=$1 link_efailed= : $1 link_efrom= '$1' link_efollow= rename_title= $1 rename_old= : rename_new= : rename_ok= rename_eexists= $1 rename_efailed= : $1 rename_eold= '$1' rename_enew= '$1' file_type0= file_type1= file_type2= file_type3= file_type4= file_type5= file_type6= file_type7= view_enormal= view_enormal2= view_eaccess= $1 view_eopen= $1 : $2 paste_ecopy= paste_egone= $1 paste_eover=$1 paste_eself= paste_emfailed= : $1 paste_ecfailed= : $1 over_title= over_msg= $1 . . over_new= : over_ok= upload_efailed= : $1 upload_title= upload_file= upload_dir= upload_ok= upload_conv= DOS? upload_efile= . upload_edir= . upload_eperm= $1 upload_ewrite= $1 : $2. find_eaccess= $1 find_eexist=$1 $2 find_edir=$1 $2 cancel= chmod_eaccess= '$1' chmod_euser=$1 : chmod_egroup=$1 : chmod_elink= symlink : $1 chmod_echown= chown : $1 chmod_echmod= chmod : $1 chmod_efollow= copy_efrom= '$1' copy_eto= '$1' copy_elink= symlink : $1 delete_eaccess= '$1' list_eaccess= list_edir= $1 : $2 move_eto= '$1' move_afrom= '$1' acl_user= acl_user_def= Webmin acl_umask=Umask acl_follow= ? acl_ro= ? acl_dirs= acl_home= Webmin acl_log= ? acl_goto= ? share_title= share_samba=Windows share_nfs=NFS share_son= Windows share_soff= Windows share_writable= ? share_available= ? share_sheader= share_only= share_guest= (Guest)? share_comment= share_nheader= NFS share_non= NFS share_noff= NFS share_desc= share_ro=, share_rw=, share_root=, root share_none= share_all= share_listed=.. share_host= share_opts= share_s0= nobody share_s1= -root share_s2= share_lro= share_lrw=/ log_create_export= NFS $1 log_modify_export= NFS $1 log_delete_export= NFS $1 log_create_share= Samba $1 log_modify_share= Samba $1 log_delete_share= Samba $1 log_save= $1 log_chmod= $1 log_mkdir= $1 log_upload= $1 log_link= $1 $2 log_relink= $1 $2 log_copy= $1 $2 log_move= $1 $2 log_delete= $1 log_attr= $1 log_acl= $1 ACL search_eaccess= search_title= search_ok= search_dir= search_match= search_user= search_group= search_any= search_type= search_types_= search_types_f= search_types_d= search_types_l= search_types_p= search_size= search_more= search_less= search_xdev= ? search_edir= search_ematch= search_euser= search_egroup= search_esize= search_crit= search_list= facl_eaccess= ACL attr_eattrs= : $1 attr_efs= $1 attr_add= attr_name= attr_value= attr_efailed= $1 : $2 attr_title= $1 attr_create= attr_edit= attr_ename= ext_eattrs= EXT : $1 ext_efs= $1 EXT ext_title= EXT $1 ext_header= EXT ext_efailed= EXT $1 : $2 eattr_A= eattr_a= eattr_c= eattr_d= dump eattr_i= eattr_s= eattr_S= eattr_u= file/TabbedPanel.java0100644000567100000120000000777510061451363014501 0ustar jcameronwheel// TabbedPanel // A panel capable of displaying one of many components at a time. The // component to display is chosen by a row of tab buttons. import java.awt.*; import java.util.Vector; public class TabbedPanel extends Panel { TabSelector tab; // component for choosing panel TabbedDisplayPanel disp; // where other panels are displayed CardLayout card; TabbedPanel() { this(Util.body_hi, Util.dark_edge_hi, Util.body); } TabbedPanel(Color hi, Color lo, Color bk) { setLayout(new BorderLayout()); add("North",tab = new TabSelector(hi, lo, bk)); add("Center",disp = new TabbedDisplayPanel(hi, lo)); disp.setLayout(card = new CardLayout()); } // addItem // Add a component to be chosen by a tab with the given name void addItem(String n, Component c) { tab.addItem(n); disp.addItem(n, c); } // select // Display a component in the panel void select(String n) { tab.choose(n); disp.choose(n); } // chose // Called back by a TabSelector object when the user clicks on a tab void chose(String n) { disp.choose(n); } } class TabSelector extends Canvas { Color hi, lo, bk; Vector name = new Vector(); int chosen = 0; Font font = new Font("timesRoman", Font.PLAIN, 12), chfont = new Font(font.getName(), Font.BOLD, 13); TabSelector(Color h, Color l, Color b) { hi = h; lo = l; bk = b; } void addItem(String n) { name.addElement(n); paint(getGraphics()); } void choose(String n) { for(int i=0; i)(LFileManager;LRemoteFile;LRemoteFile;I)VCodeLineNumberTableclick (LCbButton;)V SourceFileFileManager.java U GH IJ KJ QR T STjava/awt/BorderLayout  over_title  North MultiLabelover_msg U Westjava/awt/Labelover_new UEastjava/awt/TextField U LM  java/awt/Paneljava/awt/FlowLayout UCbButtonsave.gif over_ok U NO  cancel.gif POSouth    J  ErrorWindow paste_eself R paste_eoverjava/lang/StringBuffer/ OverwriteWindow FixedFrameCbButtonCallback()V FileManagercut_modejava/awt/Container setLayout(Ljava/awt/LayoutManager;)Vtext&(Ljava/lang/String;)Ljava/lang/String;java/awt/FramesetTitle(Ljava/lang/String;)V RemoteFilepathLjava/lang/String;8(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;(Ljava/lang/String;II)Vadd<(Ljava/lang/String;Ljava/awt/Component;)Ljava/awt/Component;name(Ljava/lang/String;I)VfixedLjava/awt/Font;java/awt/ComponentsetFont(Ljava/awt/Font;)V(I)V get_image$(Ljava/lang/String;)Ljava/awt/Image;8(Ljava/awt/Image;Ljava/lang/String;ILCbButtonCallback;)V*(Ljava/awt/Component;)Ljava/awt/Component;Util recursiveBody(Ljava/awt/Component;)Vjava/awt/Windowpackshowdisposejava/awt/TextComponentgetText()Ljava/lang/String;java/lang/Stringlength()I directoryfind (Ljava/lang/String;)LRemoteFile;typeequals(Ljava/lang/Object;)Zappend,(Ljava/lang/String;)Ljava/lang/StringBuffer;toString paste_fileE(LRemoteFile;LRemoteFile;Ljava/lang/String;LRemoteFile;Z)LRemoteFile; cut_buffer [LRemoteFile; DEFGHIJKJLMNOPOQRSTUVWo**+*-*,****Y ** *Y**W*Y* W**Y,ZW** Y!:"Y# *$Y*%&*' *(Z)*W*$Y*+&*, *(Z-*W*.W*/*0*1XJ   $ / < ] t       YZWP+*- *2+*)*34*5M,*36N-*7Y*8 9W-(-: -:7Y*;-9W?>@A@*3@A:***5-*B:**C*S*2XF   $ , !8 "@ #Q $R &e (z *{ , . 0 2 4 6[\file/CbImageFileWindow.class0100644000567100000120000000716307172555115016003 0ustar jcameronwheel- ( s $q % \  p i a %_ f o ~ r | $c u ~ Z b & %g '~ y (t [  ` z v m  e (^ k j $l ] "n \ # x ~ %{  w h } d  java/awt/Color FixedFrameLjava/awt/Toolkit;java/awt/Containertargetparent'(Ljava/awt/Component;Ljava/awt/Color;)Vactionjava/awt/FileDialog SourceFile lightGray*(Ljava/awt/Component;)Ljava/awt/Component;Cancel LCbButton;CbImageChooserftp: LScrollImage; startsWithtoStringLjava/awt/TextField;recursiveBackground$(Ljava/lang/String;)Ljava/awt/Image; Exceptions%(Ljava/awt/Image;Ljava/lang/String;)Vjava/awt/ToolkitLineNumberTableCbImageChooser.javatk(Ljava/awt/Image;II)VLCbImageFileWindow;Choose Image..Ljava/awt/FileDialog; waitForImagejava/net/MalformedURLExceptionFailed to load image from java/awt/Windowjava/lang/StringSouth,(Ljava/lang/String;)Ljava/lang/StringBuffer; (LCbButton;)V(I)Vdispose()Ljava/lang/String;Ljava/lang/Object;browseUtil'(Ljava/lang/String;LCbButtonCallback;)VaddBrowse..java/awt/FramelastfilesetImageclickgetImageURL: ErrorWindowjava/awt/TextFieldjava/lang/StringBuffer()V(Ljava/awt/LayoutManager;)Vshow ScrollImagejava/awt/TextComponentjava/awt/BorderLayoutpackOk%(Ljava/awt/Event;Ljava/lang/Object;)Z is not a valid URLjava/awt/Label Choose Image setLayoutgetTextLjava/awt/Image;<(Ljava/lang/String;Ljava/awt/Component;)Ljava/awt/Component;CenterokgetFileimgCbButtonCallback GrayPanelfilewinFailed to load image loadURLhttp: getDirectoryfiledlogCbImageFileWindowLjava/lang/String;imgsrc&(Ljava/awt/Frame;Ljava/lang/String;I)V(Ljava/awt/Image;)Z(Ljava/awt/Image;)V(Ljava/lang/String;)Z(Ljava/lang/String;)VCbButton ConstantValuejava/awt/FlowLayoutappendurljava/awt/EventCode java/net/URLLCbImageChooser;loadFile (Ljava/net/URL;)Ljava/awt/Image;setTitle(Ljava/lang/String;I)VsetTextLocalVariablesLjava/awt/Color;(LCbImageChooser;)VcancelimgpJ*S*W*+Y*Y*2*Y5+**Y*Y,ȷHZUMW'Y?M,YG+,Y .8W,*Y*Y>BZ38W,* Y *@Z98W,Y .8W,* Y*@Z68W,* Y*@Z08W*,MW*L*I*<*OJR20 456"7B8J9V:d;~<=>?@BCDE2u+*6*Y*UC*WT+*6 +*0*P+*9@Y*XM,I,F)Y:,N7,F7*N*3-1*-K:JKL*M.L/N7QBPCRGSNUgVoWtH- *-*Y2^_ \j6+;*3,*3/N- D -D *-E*-K"d ef%g*f-i2j4lk;)+VM, ,A#Y: 7+7*Q*U,4*+Wqrs,r-u5v:o])&Y+=RM, ,A#Y:7+7*Q*U,4*+WW#Y:+77*QAB!. |}~3~4<A|BC\zfile/LinkWindow.class0100644000567100000120000000661010107637154014601 0ustar jcameronwheel- L^ K_` ^ abc de fgh ^i jkl m anopq rst ^ u v w Kx dy z{ |} r~ | ^ K a % d ' K K r r d 6m r r r d E d d E E d d filemgr LFileManager;fromLjava/awt/TextField;tocreate_b LCbButton;cancel_b"(Ljava/lang/String;LFileManager;)VCodeLineNumberTableclick (LCbButton;)V SourceFileFileManager.java V NOjava/awt/BorderLayout  link_title  java/awt/Paneljava/awt/GridLayout Vjava/awt/Label link_from V link_tojava/awt/TextField/ java/lang/StringBuffer V PQ   RQWest Centerjava/awt/FlowLayout VCbButtonsave.gif create V ST cancel.gifcancel UTSouth   ErrorWindow link_efrom  link_eexistsmakelink.cgi?from= &to=  link_efailed RemoteFile V  LinkWindow FixedFrameCbButtonCallback()Vjava/awt/Container setLayout(Ljava/awt/LayoutManager;)V FileManagertext&(Ljava/lang/String;)Ljava/lang/String;java/awt/FramesetTitle(Ljava/lang/String;)V(II)Vadd*(Ljava/awt/Component;)Ljava/awt/Component;java/lang/Stringequals(Ljava/lang/Object;)Zappend,(Ljava/lang/String;)Ljava/lang/StringBuffer;toString()Ljava/lang/String;(Ljava/lang/String;I)VfixedLjava/awt/Font;java/awt/ComponentsetFont(Ljava/awt/Font;)Vjava/awt/TextComponentgetTextlength()Iselect<(Ljava/lang/String;Ljava/awt/Component;)Ljava/awt/Component;(I)V get_image$(Ljava/lang/String;)Ljava/awt/Image;8(Ljava/awt/Image;Ljava/lang/String;ILCbButtonCallback;)VUtil recursiveBody(Ljava/awt/Component;)Vjava/awt/Windowpackshowtrim startsWith(Ljava/lang/String;)Z8(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String; lastIndexOf(I)I substring(II)Ljava/lang/String;(I)Ljava/lang/String;find_directory!(Ljava/lang/String;Z)LRemoteFile;find (Ljava/lang/String;)LRemoteFile;urlizeget_text'(Ljava/lang/String;)[Ljava/lang/String;.(LFileManager;Ljava/lang/String;LRemoteFile;)V(LRemoteFile;)V showing_files LRemoteFile; show_files(LRemoteFile;)Zdispose KLMNOPQRQSTUTVWX~**,*Y** Y N Y :- Y - Y*W- Y*W Y *Y+Y+(ZW******Y Z!W*!**"-#W*$#W Y :%Y&*'Y*()***+Z,W*'Y*-)*.*+Z/W*0#W*1*2*3Yb_` ab!c2d?eTfigwhijklmnopBshvqwuxyy}zZ[X| +*,*4M,56Y*7,89W,/:>,;:,`<:*=:>6Y*?,89W*Y@*W,AB*W*!AC:26Y*D289WEY*2F:G**HIW*J+*/*JYb~./6>GSYcuv\]file/FileNode.class0100644000567100000120000000364710107637154014210 0ustar jcameronwheel- ': ; <= = >? : '@ <A 'B CD EF G <H I <JK L M CN OP Q R ST U <V <WX <YZ[\]^ C_ '` <a bcparent LFileManager;file LRemoteFile;knownZ(LRemoteFile;)VCodeLineNumberTablefill()Vadd (LFileNode;)Vsetimagerefresh SourceFileFileManager.java .3 *+d () 63java/util/Vector ef gh ihj klm no ,- pq r3 stFileNode ./ uv wxy z3 {| }~  smdir.gif  sudir.gifsdir.gifmdir.gifudir.gifdir.gif p 23 HierarchyNode RemoteFilechLjava/util/Vector;nameLjava/lang/String;text FileManagernodemapLjava/util/Hashtable;java/util/Hashtableput8(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;list()[LRemoteFile;removeAllElementstypeI addElement(Ljava/lang/Object;)Vdirs LHierarchy; Hierarchyredrawsize()I elementAt(I)Ljava/lang/Object;java/lang/String compareTo(Ljava/lang/String;)IinsertElementAt(Ljava/lang/Object;I)Vshared()Zmounted mountpoint get_image$(Ljava/lang/String;)Ljava/awt/Image;imLjava/awt/Image; [LRemoteFile; '()*+,-./0j6**+*+**Y*+ * +* W1"XY Z[\ ](^5_230S* N*L+*= +2*Y+2+** 1. defgh i)j:hCkMlRn450}M=?**N-- + *+*1rs t2u;v>rLy630m****K**2*#* *!"#$1 }l7306* *%*&1 89file/CbColorWindow.java0100644000567100000120000001217510061451363015041 0ustar jcameronwheelimport java.awt.*; import java.util.*; /**A window for choosing a colour, either from a pre-set palette * or from a color cube */ class CbColorWindow extends FixedFrame implements CbButtonCallback { CbColorWindowCallback callback; Color col; Vector pal; static Vector defpal = new Vector(); Image palimg[] = new Image[12]; CbButton palbut[] = new CbButton[12]; int curpal = -1; CbButton ok, cancel; CbColorWindowCube ccube; static { defpal.addElement(Color.black); defpal.addElement(Color.blue); defpal.addElement(Color.cyan); defpal.addElement(Color.gray); defpal.addElement(Color.green); defpal.addElement(Color.darkGray); defpal.addElement(Color.magenta); defpal.addElement(Color.orange); defpal.addElement(Color.pink); defpal.addElement(Color.red); defpal.addElement(Color.white); defpal.addElement(Color.yellow); } CbColorWindow(Color c, CbColorWindowCallback cb) { col = c; callback = cb; // Setup color vector pal = callback.palette(this); if (pal == null) pal = defpal; else if (pal.size() == 0) for(int i=0; i<12; i++) pal.addElement(defpal.elementAt(i)); // Create palette images for(int i=0; i<12; i++) { palimg[i] = Util.createImage(16, 16); updatePal(i); } // create UI setLayout(new BorderLayout()); Panel bot = new GrayPanel(); bot.setLayout(new FlowLayout(FlowLayout.RIGHT)); bot.add(ok = new CbButton("Ok", this)); bot.add(cancel = new CbButton("Cancel", this)); add("South", bot); Panel mid = new BorderPanel(1); mid.setLayout(new BorderLayout()); Panel midbot = new GrayPanel(); midbot.setLayout(new GridLayout(2, 6, 4, 4)); CbButtonGroup g = new CbButtonGroup(); for(int i=0; i<12; i++) { midbot.add(palbut[i] = new CbButton(palimg[i], this)); palbut[i].setGroup(g); } for(int i=0; i<12; i++) if (c.equals(pal.elementAt(i))) { curpal = i; palbut[i].select(); break; } mid.add("South", midbot); mid.add("North", ccube = new CbColorWindowCube(this)); add("Center", mid); pack(); show(); setTitle("Choose Color..."); } void updatePal(int i) { Graphics g = palimg[i].getGraphics(); g.setColor((Color)pal.elementAt(i)); g.fillRect(0, 0, 16, 16); if (palbut[i] != null) palbut[i].repaint(); } public void click(CbButton b) { if (b == ok) { callback.chosen(this, col); super.dispose(); } else if (b == cancel) dispose(); else { for(int i=0; i<12; i++) if (b == palbut[i]) { curpal = i; col = (Color)pal.elementAt(i); ccube.red.setPosition(col.getRed()); ccube.blue.setPosition(col.getBlue()); ccube.green.setPosition(col.getGreen()); ccube.swatch.setColor(col); } } } public void dispose() { super.dispose(); callback.chosen(this, null); } public boolean isResizable() { return false; } } /**Displays 3 sliders, for red green and blue plus a block to show the * current color */ class CbColorWindowCube extends BorderPanel implements CbSliderCallback { CbColorWindow parent; CbSlider red, green, blue; CbColorWindowSwatch swatch; CbColorWindowCube(CbColorWindow p) { super(1, Util.body, Util.body); parent = p; setLayout(new BorderLayout()); Panel sl = new GrayPanel(); sl.setLayout(new GridLayout(3, 1)); sl.add(red = new CbSlider(0, 0, 255, p.col.getRed(), this)); sl.add(green = new CbSlider(0, 0, 255, p.col.getBlue(), this)); sl.add(blue = new CbSlider(0, 0, 255, p.col.getGreen(), this)); add("Center", sl); add("East", swatch = new CbColorWindowSwatch(p.col)); } public void moved(CbSlider s, int p) { moving(s, p); } public void moving(CbSlider s, int p) { parent.col = new Color(red.getPosition(), green.getPosition(), blue.getPosition()); swatch.setColor(parent.col); if (parent.curpal != -1) { parent.pal.setElementAt(parent.col, parent.curpal); parent.updatePal(parent.curpal); } } } interface CbColorWindowCallback { /**This method will be called when the user chooses a colour. If * the user cancels the dialog, then this method will also be chosen * but with null for the color. */ public void chosen(CbColorWindow w, Color c); /**The chooser keeps a palette of colors that the user can modify, * stored in a vector. The callback class should provide this vector * so as to maintain the palette between color window calls. * If an empty vector is returned, it will be filled with the default * color table (which can be then modified). * If null is returned, the chooser will use it's own internal * vector. */ public Vector palette(CbColorWindow w); } class CbColorWindowSwatch extends BorderPanel { Color col = Color.black; String txt; CbColorWindowSwatch(Color c) { super(1); setColor(c); } void setColor(Color c) { col = c; txt = col.getRed()+","+col.getGreen()+","+col.getBlue(); repaint(); } public void paint(Graphics g) { super.paint(g); g.setColor(col); g.fillRect(1, 1, size().width-2, size().height-2); g.setColor(Color.white); g.setXORMode(Color.black); g.setFont(Util.f); g.drawString(txt, 3, Util.fnm.getHeight()+1); g.setPaintMode(); } public void upate(Graphics g) { paint(g); } public Dimension preferredSize() { return new Dimension(60, 60); } public Dimension minimumSize() { return preferredSize(); } } file/CbSlider.class0100644000567100000120000000722407172555115014211 0ustar jcameronwheel-p|U H B 7 G 1 ; Q M 0 R = ? @ 5 9 2 J S N 6 E P L 4 K : / < F . 8 O D > 3 A I C Zq \ l nY k u Zr ` h o Z b v ^ } [ Y ] g T c i { y Z m X _z(Ljava/awt/Graphics;)Vjava/awt/Color setMinimum setMaximummoved(IIII)Vdragginghc3hc2hc1callbackcheckPos SourceFile lightGraydarkGray CbSlider.javasetTicks Exceptions fillPolygon preferredSizemovingLineNumberTableblacksizerepaintdrawLinemaxCbSlider(IIIILCbSliderCallback;)V(III)V mouseExit(I)Vticksinside mouseEnter getPositionwhiteLCbSliderCallback;(Ljava/awt/Color;)Vjava/awt/Canvasdragx minimumSizeCbSliderCallbackjava/awt/Component getMinimum()Vpypx()Imin setPositionlc3java/awt/Dimensionlc2(II)Vlc1([I[II)VsetColorjava/awt/Graphics mouseDragupdatewidthZfillRect(Ljava/awt/Event;II)Z mouseDown()Ljava/awt/Dimension;paintdir ConstantValueImouseUpCodeheightpos getMaximum(LCbSlider;I)VLocalVariablesLjava/awt/Color;o_z^]\uv[}ZY' *%j  Zqa**'*# *)*'*Yҷ * "** *-*(*!**j& ! 4 ; E#T$Z%`!et* **j-. +x*j3t6* **j9: ;7*(jAVt2*(*&*jHI J F*!jOWt2*!*&*jVW X TT# s* **M* ** N* *"*):*6*6+-+$++ldl*+,+l`dl`*+,+d*+d*++ddd*+ddd**%+ddd*+ddd**M*!*(d665dhl`6 ++ l ld**`6*d*h*!*(dl`*l +- Y*dOY*dOY*OY*`OY*`O: Y* `OY* dOY* dOY* dOY* `O:+,+* ,+*d* `*d* d*+*d* d** d*+* ,+*d* `*`* `*+*`* `*`* d*j']^&_:bLcQd[eaftgyhklmnopqrswxyz${*|=yMhpu):Vr[T*+jw+ **j z**!*(d l*6*d*Yd**`*Y`* **d+*&*****j:&14>ILQ[_ftxS* J**+d**d*!*(dh*dl*&****** j"15<JNY)* #* *****j !%'s+ **j `H(**( **(**! **!j'h$ Yd j~*jadfile/DeleteWindow.class0100644000567100000120000000633610107637154015113 0ustar jcameronwheel- FW EX EYZ [\]^ _` abc W defgh i djk Wl m [n dopqrs _t uv wxy _z{ | E}~ E  -W - _ - _  _ 5i [ [ _ _  _ _ delete_b LCbButton;cancel_bfilemgr LFileManager;files [LRemoteFile;(LFileManager;[LRemoteFile;)VCodeLineNumberTableclick (LCbButton;)V SourceFileFileManager.java O KL MN delete_mtitle  delete_dtitle delete_ftitle  java/awt/BorderLayout Northjava/awt/Label delete_mdesc O java/awt/Paneljava/awt/GridLayout O Center MultiLabel delete_ddesc delete_fdesc Ojava/awt/FlowLayout OCbButtonsave.gif delete O HI cancel.gifcancel JISouth  java/lang/StringBufferdelete.cgi?file=   ErrorWindowdelete_efailed {  FileNode    DeleteWindow FixedFrameCbButtonCallback()V RemoteFiletypeI FileManagertext&(Ljava/lang/String;)Ljava/lang/String;java/awt/FramesetTitle(Ljava/lang/String;)Vjava/awt/Container setLayout(Ljava/awt/LayoutManager;)Vadd<(Ljava/lang/String;Ljava/awt/Component;)Ljava/awt/Component;(II)VpathLjava/lang/String;*(Ljava/awt/Component;)Ljava/awt/Component;8(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;(Ljava/lang/String;I)V(I)V get_image$(Ljava/lang/String;)Ljava/awt/Image;8(Ljava/awt/Image;Ljava/lang/String;ILCbButtonCallback;)VUtil recursiveBody(Ljava/awt/Component;)Vjava/awt/Windowpackshowappend,(Ljava/lang/String;)Ljava/lang/StringBuffer;urlizetoString()Ljava/lang/String;get_text'(Ljava/lang/String;)[Ljava/lang/String;java/lang/Stringlength()IJ(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String; directory LRemoteFile;(LRemoteFile;)V showing_filesnodemapLjava/util/Hashtable;java/util/Hashtableget&(Ljava/lang/Object;)Ljava/lang/Object; HierarchyNodechLjava/util/Vector;java/util/Vector removeElement(Ljava/lang/Object;)Z show_files(LRemoteFile;)Zdirs LHierarchy; Hierarchyredrawdispose EFGHIJIKLMNOPQ@**+*,**,,2 * Y ,^* Y*WYN-Y, 6-Y,2W,*-W0*Y*,2,2#WYN-Y -* Y*!"*#*$Z%W-* Y*&"*'*$Z(W*)-W***+*,R^ 4?E\drx+37;?STQm +*%=>6*2:*-Y./0*W1023:24 5Y*6278W`9::*;>*<=>:*<=>:  ?@W=*Q**;AW *BC*D+*(*DRb @Jdgnu   UVfile/PermissionsPanel.class0100644000567100000120000000224110107637154016003 0ustar jcameronwheel-P % &' () * +,-. /0 1 2 +3 45 6 &789 : ;<=readLjava/awt/Checkbox;writeexecbaseI(LRemoteFile;ILFileManager;)VCodeLineNumberTablegetPerms()I SourceFileFileManager.java >? @ java/awt/GridLayout AB CDjava/awt/Checkbox info_readE FG H  IJ KL info_write  M info_list info_exec  NOPermissionsPaneljava/awt/Panel()V RemoteFileperms(II)Vjava/awt/Container setLayout(Ljava/awt/LayoutManager;)V FileManagertext&(Ljava/lang/String;)Ljava/lang/String;(Ljava/lang/String;)Vadd*(Ljava/awt/Component;)Ljava/awt/Component;setState(Z)VtypegetState()Z *+6**Y**Y- Z W* x~ **Y- Z W*x~ **Y-+ Z W*~  .  3H_t!"oG<*  *x<* *x<* *< 0E#$file/StaticTextField.class0100644000567100000120000000077407060351565015564 0ustar jcameronwheel-        StaticTextField.java ConstantValue ExceptionsLineNumberTable SourceFilejava/awt/TextFieldLocalVariablesCode setEditable(Ljava/lang/String;)V(Z)VStaticTextFieldjava/awt/TextComponent(Ljava/lang/String;I)V()V* **  + *+* , *+*  file/ScrollImage.class0100644000567100000120000000546107172555115014724 0ustar jcameronwheel-wuv|^dh} M T @ D G [ K Y X U ; N : A V 9 F W S Z P = B \ < L Q H J R O I ? X > C E 8 _ r c s p {b c ~ y g y ` x b ] i  c t zk cq(Ljava/awt/Graphics;)Vjava/awt/ColorimghgetValuemoved(IIII)Vjava/awt/Container(LCbScrollbar;I)V SourceFile lightGrayCbImageChooserLjava/awt/Font; Exceptions3(Ljava/awt/Image;IILjava/awt/image/ImageObserver;)Z preferredSizemovingLineNumberTableCbImageChooser.javablack(Ljava/awt/Image;II)V drawStringsizerepaintCbScrollbarCallbackSouth(III)V LCbScrollbar; drawImagereshape CbScrollbarUtiladd(Ljava/awt/Color;)Vvsc minimumSizesetImagecompute_scrollbarsjava/awt/FontMetricshscjava/awt/Component()V(Ljava/awt/LayoutManager;)Vpw ScrollImagejava/awt/BorderLayout()I stringWidthsetFontgetWidthph(Ljava/lang/String;II)V setLayoutjava/awt/Dimension(II)VLjava/awt/Image;East<(Ljava/lang/String;Ljava/awt/Component;)Ljava/awt/Component; setValuesfnmimg getHeightLjava/awt/FontMetrics;setColorjava/awt/GraphicsupdateCbImageFileWindowwidthf(ILCbScrollbarCallback;)VZfillRect(Ljava/awt/Image;)V()Ljava/awt/Dimension;paint(Ljava/awt/Image;)I ConstantValueI(Ljava/lang/String;)ICodeheight(Ljava/awt/Font;)Vjava/awt/PanelLocalVariablesLjava/awt/Color;imgw _yy c**++7+&)n  cqN*3*"**6*Y**Y*Z1-W**Y*Z+-W*+n2  & '3; <HM\,*+%*%**%7!**%&*"*n "'+]**1d=**+d>*"j*%*+,*1,G*!*+,*+*!,**1,*1*,*"+.#+/*%I*!&*+*%*!dl*dl*W+*%*+0t*10t*W+ +(#:+*4dl*$dl2nn&-4>HK`m]*+n{b7*5*"*n ae!*n men( Y**6nl*'nfofile/index.cgi0100755000567100000120000000533510113045533013255 0ustar jcameronwheel#!/usr/local/bin/perl # index.cgi # Output HTML for the file manager applet require './file-lib.pl'; &ReadParse(); $theme_no_table = 1; if ($access{'uid'} < 0 && !defined(getpwnam($remote_user))) { &error(&text('index_eremote', $remote_user)); } # Display header, depending on how many modules the user has &read_acl(undef, \%acl); $mc = @{$acl{$base_remote_user}} == 1; $nolo = $ENV{'ANONYMOUS_USER'} || $ENV{'SSL_USER'} || $ENV{'LOCAL_USER'} || $ENV{'HTTP_USER_AGENT'} =~ /webmin/i; if ($gconfig{'gotoone'} && $mc == 1 && !$nolo) { &header($text{'index_title'}, "", undef, 0, 1); $w = 100; $h = 80; } else { &header($text{'index_title'}); $w = 100; $h = 100; if (!$tconfig{'inframe'}) { $return = ""; } } if ($gconfig{'referers_none'}) { # Because java applet HTTP requests don't always include a referer: # header, we need to use a DBM of trust keys to identify trusted applets if (defined(&seed_random)) { &seed_random(); } else { srand(time() ^ $$); } $trust = int(rand(1000000000)); local $now = time(); &open_trust_db(); foreach $k (keys %trustdb) { if ($now - $trustdb{$k} > 30*24*60*60) { delete($trustdb{$k}); } } $trustdb{$trust} = $now; dbmclose(%trustdb); } $sharing = $access{'uid'} ? 0 : 1; $mounting = !$access{'uid'} && &foreign_check("mount") ? 1 : 0; if ($in{'open'}) { $open = ""; } if ($session_id) { $session = ""; } if (!$access{'noconfig'}) { $config = ""; } $iconsize = int($config{'iconsize'}); $root = join(" ", @allowed_roots); foreach $d (@disallowed_buttons) { $disallowed .= "\n"; } # Create parameters for custom colours foreach $k (keys %tconfig) { if ($k =~ /^applet_(.*)/) { $colours .= "\n"; } } print < function upload(dir) { open("upform.cgi?dir="+dir+"&trust=$trust", "upload", "toolbar=no,menubar=no,scrollbar=no,width=450,height=200"); } $config $session $open $return $disallowed $colours $text{'index_nojava'}

EOF &footer(); file/CbSliderCallback.class0100644000567100000120000000036007172555115015620 0ustar jcameronwheel- moved ConstantValue CbSlider.java ExceptionsLineNumberTable SourceFileLocalVariablesCodejava/lang/Objectmoving(LCbSlider;I)VCbSliderCallbackCbSlider  file/upform.cgi0100755000567100000120000000237710026221447013464 0ustar jcameronwheel#!/usr/local/bin/perl # upform.cgi # Display the upload form require './file-lib.pl'; $disallowed_buttons{'upload'} && &error($text{'ebutton'}); &ReadParse(); &header($text{'upload_title'}); print "
\n"; print "\n"; print "\n"; print "
$text{'upload_title'}
\n"; print "\n"; print "\n"; print "\n"; print "\n"; if ($dostounix == 1) { print "\n"; print "\n"; } if ($unarchive == 1) { print "\n"; print "\n"; } print "
$text{'upload_file'}
$text{'upload_dir'}\n", "
$text{'upload_conv'} $text{'yes'}\n"; print " $text{'no'}
$text{'upload_zip'} $text{'upload_yes'}\n"; print " $text{'yes'}\n"; print " $text{'no'}
\n"; file/MultiColumn.class0100644000567100000120000002301410061451367014760 0ustar jcameronwheel- r q q q q q q q q q q q q q  q q   q q q  q   q       q   q q q q q q r q  n       r  Z q  !  " q# $% q& q'  ( q $) $* +, -  .  / 0 1  2 3 $4  5 6 78 +9 :; g< q= g> g? q@ :A :B CDEF gG H qI JK nL qMNOcallbackLMultiColumnCallback;title[Ljava/lang/String; adjustableZ drawlinescolors[[Ljava/awt/Color;enabled multiselectcpos[Icwidth[Flist[Ljava/util/Vector;sb LCbScrollbar;widthIheightinLjava/awt/Insets;sbwidththbimLjava/awt/Image;bgLjava/awt/Graphics;fontLjava/awt/Font;fnmLjava/awt/FontMetrics;coldragselselstoplastJrowh last_eventLjava/awt/Event;sortcolsortdir([Ljava/lang/String;)VCodeLineNumberTable+([Ljava/lang/String;LMultiColumnCallback;)VaddItem([Ljava/lang/Object;)VaddItems([[Ljava/lang/Object;)V modifyItem([Ljava/lang/Object;I)VgetItem(I)[Ljava/lang/Object;selected()Iselect(I)V([I)V allSelected()[Iscrollto deleteItemclear()V setWidths([F)V setAdjustable(Z)V setDrawLines setColors([[Ljava/awt/Color;)VsetMultiSelectenabledisable sortingArrow(II)VsetFont(Ljava/awt/Font;)Vreshape(IIII)Vrespacepaint(Ljava/awt/Graphics;)Vupdaterender mouseDown(Ljava/awt/Event;II)Z mouseDragmoved(LCbScrollbar;I)Vmoving compscrollrows minimumSize()Ljava/awt/Dimension; preferredSize SourceFileMultiColumn.javaP QR SR T xy zy {| }y ~y java/awt/Font timesRoman U java/lang/String vwjava/util/Vector V WX CbScrollbar Y Z[ tu \]^ _ `ajava/lang/Object bc d e fg hi j kl mn o p q r st uv w xy z { |} ~   R   R R  R  U  java/awt/Image        java/awt/EventDoubleSingle   java/awt/Dimension  MultiColumn BorderPanelCbScrollbarCallbackUtil dark_edge_hiLjava/awt/Color;body_hi$(ILjava/awt/Color;Ljava/awt/Color;)V(Ljava/lang/String;II)Vjava/awt/Container setLayout(Ljava/awt/LayoutManager;)V(ILCbScrollbarCallback;)Vadd*(Ljava/awt/Component;)Ljava/awt/Component; addElement(Ljava/lang/Object;)Vjava/awt/Componentrepaint setElementAt(Ljava/lang/Object;I)V elementAt(I)Ljava/lang/Object;sizesetValueremoveElementAtjava/lang/System arraycopy*(Ljava/lang/Object;ILjava/lang/Object;II)VremoveAllElements setValues(III)Vinsets()Ljava/awt/Insets;java/awt/Insetsleftrightbottom createImage(II)Ljava/awt/Image; getGraphics()Ljava/awt/Graphics;java/awt/GraphicsgetFontMetrics()Ljava/awt/FontMetrics;java/awt/FontMetrics getHeight drawImage3(Ljava/awt/Image;IILjava/awt/image/ImageObserver;)Z getDescent getAscentjava/lang/Mathmin(II)IbodysetColor(Ljava/awt/Color;)VfillRectlight_bg light_edgedrawLine dark_edge stringWidth(Ljava/lang/String;)I drawStringlength substring(II)Ljava/lang/String;abs(I)IMultiColumnCallbackheadingClicked(LMultiColumn;I)Vwhen shiftDown()Z controlDown doubleClick singleClick getParent()Ljava/awt/Container;((Ljava/lang/Object;ILjava/lang/Object;)V postEvent(Ljava/awt/Event;)ZgetValue!qrstuvwxyzy{|}y~y#f******* Y  * ** ***+=*+2S+*+>*YS+*+6* +nQ+*+` **Y***Wv(    $49>EJ P)Y*^+g*p,y-~.-/01023456+ *+*,<= >R&=*2+2 **!*"DEDF!G%Hj6=%>*2+22 *+*!*""NO PO$N-Q1R5SS'>*2+2#**!*"YZY["\&]Q)*$M>,*2%S*,c ded'f*m@** *O*!tu vwxU%+** *+.*+*!~  $*O*&=* *`:*d**2'd**2'd**(*!"0?JN=*2)***>J*.=*d :8***`d**.**!*"B#(-7BHTfq}r:<*2+*** **!*,& &+/9O#=*+0Q**-*!""* "* * *+*! "* 5**.*! 5**/*! 3*0*1*! 3*+ *2*!   *3*4` *5|**67**894**4d*7:*7;`d3**7<*7=`d5**3*7:`*7<*4*5>*-*2*!*"*?2 ,F\~!"]5*O<"*`*.*3*0j`O*۱() *()4+k*+@*2I***3*5A2**2BC*C* D**CEF**FG`H*I*"+*2*7:*7<*JW. 12 45'627=8J9N:R<j=5*F *I*+KCD EGi*FG<*FL=*FM>**&`d*2'dN6*COP*C*3*HQ*CRP*C*H*3*5*HdQ:*s6c*.*R*.F*C*.* OP*C*H*.*d*h`*3*Q*6n*.6*`.dd6*CSP*C`T*C`dT*C*HdT*C``*HdT*CUP*C*Hd`*HdT*C*Hd`d*HdT*C`*Hd`T*C`d*Hd`dT*F*2V6  d#*C*2 dl`*HddW*Hd6 *0*1*CSP*C`*Hd` `*HdT*C` `*Hd` l`*Hd dT*CUP*C` l`*Hd d`*HdT*0*1*CSP*C` l`*Hd` `*Hd dT*CUP*C`*Hd d` `*Hd dT*C`*Hd d` l`*HdT*M*COP*C`d*H`d*5T*CUP*C`*H`*5T*6 *2 %:  } :   XdY: *F Vd**COP**C* 22P*C `*H `*d*h`dW2 Z* Z: *C `*H *d*h`*JW  :* BMNOP3S=TNUXVqWvY}[\]_[fg jk&l8mJn`ojpqrstuvyz({2|P}v~8?Ifp"*1Q[fh**7:d=*7* *Hb6O*!*.d[ * '*.*`.**\*o*Hd*l*`6*2'O6+]*^e_* 6 *+]^+a{*t*l*.60*d` 6*dO{*d` 6*dON+b8*1*` :****O** *O**!*+c*&**d1**e"*fgY*hijkW, "*0LUmy %29ER`k{**7:d=*7* ** d.`n** `.d]** O** d** .** d.d*3nQ** ** `.** .d*3nQ*!.  %GQx #*+l 8**m*"*! c7*F*&<*2'd=***2',  6!0*5*ld*2'N'% nYdo,*p1file/FileManager.class0100664000567100000120000005451110107637154014673 0ustar jcameronwheel- _` _ a b c d ef _ g hij k l mn _ op qrs tu v wx y z { | } ~        5_ 5  5 ; =     E E   K K N N  q  q q q q q qR q q f h j_ l     o                           o      r !" #$ _ % &r'()*+=\)>>, - . / 0 1 r 2 34?333333 5678 9:; <  = > ?@AB C D E F GH IJ K LMN 5OPQR  S  T U VW X VYZ[ \ ] ^_ `a b c d e f ,g hij `kl Vm n op q r s Lt u vwxyz{ /| } ~      B@    / / / /  /               ^ `   e   i    o  s    z  } ^                      5   ? 5         !   o       ret_b LCbButton;config_bdown_bedit_b refresh_bprops_bcopy_bcut_bpaste_bdelete_bnew_bupload_bmkdir_b makelink_brename_bshare_bmount_bsearch_bacl_battr_bext_bdirs LHierarchy;root LFileNode;nodemapLjava/util/Hashtable;files LMultiColumn;pathnameLjava/awt/TextField; showing_files LRemoteFile; showing_list [LRemoteFile; cut_buffercut_modeZmonmap[Ljava/lang/String;accrootlangstabntab sambamodenfsmodeItrustLjava/lang/String;extraimagesiconsizegot_filesystems acl_support attr_support ext_supportmountsfslistLjava/util/Vector; read_onlyfixedLjava/awt/Font; small_fixedsessionarchivechroot()VCodeLineNumberTableinit get_colour4(Ljava/lang/String;Ljava/awt/Color;)Ljava/awt/Color;get_hex(Ljava/lang/String;I)I can_button(Ljava/lang/String;)Z make_button0(Ljava/lang/String;Ljava/lang/String;)LCbButton; get_image$(Ljava/lang/String;)Ljava/awt/Image; get_charset&(Ljava/lang/String;)Ljava/lang/String;get_text'(Ljava/lang/String;)[Ljava/lang/String; set_cookie(Ljava/net/URLConnection;)V show_files(LRemoteFile;)Zpad(II)Ljava/lang/String;spad(JI)Ljava/lang/String; trim_pathopenNode(LHierarchy;LHierarchyNode;)V closeNode clickNode doubleNodeclick (LCbButton;)Vfind_directory!(Ljava/lang/String;Z)LRemoteFile; find_filesys(LRemoteFile;)LFileSystem;action%(Ljava/awt/Event;Ljava/lang/Object;)Z singleClick(LMultiColumn;I)V doubleClickheadingClickedopen_file_window(LRemoteFile;ZI)Vurlize un_urlize upload_notify'(Ljava/lang/String;Ljava/lang/String;)V upload_error(Ljava/lang/String;)Vtext9(Ljava/lang/String;[Ljava/lang/String;)Ljava/lang/String;8(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;J(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String; paste_fileE(LRemoteFile;LRemoteFile;Ljava/lang/String;LRemoteFile;Z)LRemoteFile;get_filesystems join_array'([Ljava/lang/String;)Ljava/lang/String; replace_str SourceFileFileManager.java java/util/Hashtable     java/util/Vector   java/awt/Fontcourier   java/awt/BorderLayout   java/util/StringTokenizer !- O "#java/lang/String  $% &'         ( )*   doarchive  0  /lang.cgi ./ +,java/lang/StringBufferFailed to get language list : -. YZ /% ErrorWindow Qjava/lang/Error 05 01 23list_shares.cgi1 45 SambaShare 6 list_exports.cgi   LinuxExportDFSAdminExport Xro light_edge 7 "# dark_edge 7body 7body_hi 7 light_edge_hi 7 dark_edge_hi 7dark_bg 7 R7light_bg 7 BorderPanel 8 ToolbarLayout 9java/awt/Paneljava/awt/GridLayout :return &'ret.giftop_ret R- ()  ;<config config.gif top_config savedown.giftop_down editedit.giftop_edit refresh refresh.gif top_refresh info props.giftop_info  aclacl.giftop_eacl  attrattr.giftop_attr  extext.giftop_ext search search.gif top_search delete delete.gif top_delete newnew.giftop_new upload upload.gif top_upload mkdir mkdir.gif followmakelink makelink.gif rename rename.gif top_rename sharing share.gif top_share mountingmount mount.gif top_mount copycopy.giftop_copy cut.giftop_cut  paste.gif top_paste North ;=FileNode RemoteFileroot.cgi > ? Center Hierarchy @ A 8 Bjava/awt/TextField C right_name right_size right_user right_group right_date MultiColumn D  EF GH IH J 23 ResizePanel Khomegotoopen @Aapplet_java/awt/Color $% L% MNO PQno_CbButton *+ R S TU VW; X%charset= Y'Z [\&rand= -]?rand=&trust= java/net/URL ^ _` 01a b% ,- cdjava/io/BufferedReaderjava/io/InputStreamReader e f gjava/lang/Exceptionh i j% kl m n# op qrs t% : u%Cookie vO wx y[Ljava/lang/Object;  z: { |} ~  java/lang/Objectdir.gif..java/util/Date  ' ' smdir.gif ' sudir.gifsdir.gifmdir.gifudir.gif    n 67 B kB MB    # # # # 45: #    Q 1 #  ' #     edit_enormal EditorWindow DownloadDirWindow  view_enormal2 JK PropertiesWindow BC  ACLWindoweacl_efs  RT AttributesWindowattr_efs  EXTWindowext_efs   paste_ecopy OverwriteWindow  VW DeleteWindow    upload_efailed MkdirWindow LinkWindow RenameWindow SharingWindow  mount_epoint MountWindow  SearchWindow find_eaccess find_eexist RU find_edir     FileSystem  %   ' .zip.tgz.tarshow.cgi L-&type=application%2Funknown&format= -&test=1eopenshow ^%0 /5 Q% - )% , ;????$ +* RSmove.cgicopy.cgi?from=&to=paste_emfailedpaste_ecfailed  ? ;  5filesystems.cgi   JanFebMarAprMayJunJulAugSepOctNovDec FileManagerjava/applet/AppletCbButtonCallbackHierarchyCallbackMultiColumnCallback(Ljava/lang/String;II)Vjava/awt/Container setLayout(Ljava/awt/LayoutManager;)VUtilsetFont(Ljava/awt/Font;)V getParameter countTokens()I nextToken()Ljava/lang/String; hasMoreTokens()Zjava/lang/IntegerparseInt(Ljava/lang/String;)IindexOf(I)Iappend,(Ljava/lang/String;)Ljava/lang/StringBuffer;toString substring(I)Ljava/lang/String;put8(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;equals(Ljava/lang/Object;)ZpathLjava/awt/Color;(ILjava/awt/Color;)V(III)V(II)Vadd*(Ljava/awt/Component;)Ljava/awt/Component;<(Ljava/lang/String;Ljava/awt/Component;)Ljava/awt/Component;.(LFileManager;Ljava/lang/String;LRemoteFile;)V(LRemoteFile;)V%(LHierarchyNode;LHierarchyCallback;)V HierarchyNodefilljava/awt/Component+([Ljava/lang/String;LMultiColumnCallback;)V setWidths([F)V setDrawLines(Z)VsetMultiSelectfile-(Ljava/awt/Component;Ljava/awt/Component;DZ)V toUpperCasecharAt(I)Cjava/lang/CharacterisDigit(C)Z%(Ljava/awt/Image;LCbButtonCallback;)V8(Ljava/awt/Image;Ljava/lang/String;ILCbButtonCallback;)VgetDocumentBase()Ljava/net/URL;getImage2(Ljava/net/URL;Ljava/lang/String;)Ljava/awt/Image;trim startsWithjava/lang/SystemcurrentTimeMillis()J(J)Ljava/lang/StringBuffer;#(Ljava/net/URL;Ljava/lang/String;)VopenConnection()Ljava/net/URLConnection;java/net/URLConnectiongetContentTypegetInputStream()Ljava/io/InputStream;(Ljava/io/InputStream;)V(Ljava/io/Reader;)V*(Ljava/io/InputStream;Ljava/lang/String;)Vjava/lang/ThrowableprintStackTracereadLine addElement(Ljava/lang/Object;)VclosesizecopyInto([Ljava/lang/Object;)VgetClass()Ljava/lang/Class;java/lang/ClassgetName getMessagesetRequestPropertylist()[LRemoteFile;clear sortingArrowsortdir arraycopy*(Ljava/lang/Object;ILjava/lang/Object;II)Vsortcol QuickSortsort([LRemoteFile;II)V(J)Vsharedmounted mountpointtmaptypenameJusergroupmodifiedgetDategetMonthgetYeargetHours getMinutesaddItems([[Ljava/lang/Object;)VsetTextvalueOflength(J)Ljava/lang/String;endsWithselected allSelected()[I()LHierarchyNode;getAppletContext()Ljava/applet/AppletContext;java/applet/AppletContext showDocument(Ljava/net/URL;)V(LRemoteFile;LFileManager;)V(LFileManager;LRemoteFile;)Vaclsattrsfind (Ljava/lang/String;)LRemoteFile;)(LFileManager;LRemoteFile;LRemoteFile;I)V(LFileManager;[LRemoteFile;)V"(Ljava/lang/String;LFileManager;)Vnetscape/javascript/JSObject getWindow4(Ljava/applet/Applet;)Lnetscape/javascript/JSObject;call9(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/Object;fs()LFileSystem;((LFileManager;LFileSystem;LRemoteFile;)Vget&(Ljava/lang/Object;)Ljava/lang/Object;select(LHierarchyNode;)Vredraw elementAt(I)Ljava/lang/Object;java/awt/EventtargetLjava/lang/Object;java/awt/TextComponentgetText directory last_eventLjava/awt/Event; shiftDown([I)V(I)Ljava/lang/StringBuffer;isLetterOrDigit(C)Ljava/lang/StringBuffer; lastIndexOfperms (LFileNode;)Vch removeElementremoveAllElements!5           'l**Y*Y*Y*Y*Y* Y * * Y * Y  . '(%)03;4F5K8[;k ! 6*Y*Y*L*+=*+S+** !**"#**$%*% *&%**'(*( *'(**)*+**,-*- *.-**/0*0 *10*23N--2=405Y678*-98::;Y63-2=46 *-2?-2`@AW-*B3:2CD66#EY2F:*GAW*H*I3:* 2*J*Ja6S*J#KY2L:*MAW(*J NY2O:*PAW*Q*RCD* *STUT*VWUW*XYUY*Z[U[*\]U]*^_U_*`aUa*bcUc*deUefYYg:hYijYk:lYm*n#*no**p*qrsZtuW*v#*vo**w*xrsZyuW*zo**{*|rsZ}uW* #*~o***rsZuW*o***rsZuW* #*o***rsZuW*** #*o***rsZuW*** #*o***rsZuW*** #*o***rsZuW*o***rsZuWuW* ǻjYk:  lYm*o ***rsZuW*o ***rsZuW*o ***rsZuW*o ***rsZuW*.D#*o ***rsZuW*o ***rsZuW*H *J1*CD#*o ***rsZuW*CD#*o ***rsZuW uW*ogjYk:  lYm ***rsZuW ***¶rsZöuW ***ŶrsZƶuW uW*WfYYg:  Y*YY**˶32̷͵ *Y**ZҶW****ζջfYYg:  Y *YZضW**Y&SY*ڶrSY*۶rSY*ܶrSY*ݶrSY*޶rS: YQYQYQYQYQYQ:  *Y *ZW* ******δWY  : * W*:*:*:*W<7CD-*W*21D**2W :H IJ"K-L2M<LFNPOZPdQqR{STUVWX[\]^_abcd;aEhMiYj_kml|jnrstuvxy{}~u %1=IUamy6F]f}.7NV]ft} "+Bg~!*7C_x'>GOWbn "#\8*5Y68+8:N-,Y*-*-*- $%uM+L+>+`6 0d Ad `6 0d Ad `6x` +E &'8 *5Y68+8: %()F&*+Y*+*Y*+,* *+-*+;#**5Y6*(818+8: 3,-o7+Y+M,N- -@, & 9:;<=>'@.<5C./ \A+?45Y6+88 :L5Y6+88 :L5Y6+8 8*!8:L5Y6+8*%8:L Y*+ : :* *:::YY:3YY::  YY: Y : :      :    M,Y5Y6,88, 8:SN-,, vIJ)KBL^MtNOPQRSTUZ^_cdef gdij"k)l,o1qZr013*#+!*#" xyz23 +#M,*$,`%N7+*&*'4*(*,:,,)***(+M-,S-2*-S-2.S-2-2-2-2&[S[S[SS/Y0:6:-`,[S:,21,22*3S,21,24*5S^,21*6SF,22*7S.,24*8S*9,2:2S,2;S,2<=)5Y6*,2<?8@8:Sb,2<A-5Y6*,2<=m?8C8:S*5Y6*,2<Am?8D8:S,2ES,2FS/Y,2G0: H HNI IAJ J45Y6* KL8M8* NL8:SnJ J25Y6* HL818O I28:S25Y6O I2818* JdpL8:S,*-P*+&*,Q*+RS 2 '3=DNadlx,6DWbp Bs45N&TN5Y6.8-8:N-U- $67S+V:5Y688::U  (8->++Ud?L+1W+ 9:* ,N-ձ  ;: <:>,N*&- *-W =: >?d H*X=*YN:: -66-.6-*Q:M-d:6 6 - . - .d2S  - 2 d2:0d2:-:6  - .d2S  -*ҶZ:+*t) Y**n :*[\O:J+*y) Y**v :*[\!:+*:: :;Y*]r?ACEFGIKLNPQR#S+T9VPXXZ^[f\l]t^`bdefghjlnoprt uvx"z){8|9?HV_,4:JWpx/7G@AT +U>66c*2U6*21D 6?+?*2D 6*2?+D6*;Y*+ms* :lU6l+RDG+RU`,+R`?5Y6l818:Dl1DM* , " qtDEX,+*ئ"*ضN-&D*-W   !!("*$FG +HG%H*&=**&**&W***&ɶ*Ҷ*Qd2N-:Q**&:*-:*-6**Ҷ-:*-+c V134 5,6A7H9I;R<Y>i?n@tABCDEFIKMIG +*++(' +'*YN-:6*Q-.d2S-**&W636 *Q22-`O*Q܄-*- RSTU V"Y(]0^7_=`M_Wa`bfcld{efcbjkJK=   &:W5Y68+R8888 8*!88*%8::N5Y68+R888 8*!88*%8::*5Y688:3:2U;Y*2m$+5Y688:8WI</6.0_*-$+5Y688:8W +W*U+: *  :YzM-J5Y6L=3*>%+*``?W +W*U+: &  .4:ENO p+/>+?:+`@:*:y:Y*,:#:*:d**&W :!*/<FN\afoPQ& ;Y+Hfhw|     #. 5">#X*ö3L*+2CD***** *ęU=JY+2N* --h*-n*-r**-l-AW+ F*+,-.#/*01182=3H4P5\6h7t82;YZV.&M>!5Y6,8+28ȶ8:M+, ?@A#@,B[U[7*5Y6+?8-8+,U`@8:L+,Y6+ HI*H5L\oW YSYSYSYSYSYSYSYSYSY SY SY SO #]^file/Util.class0100644000567100000120000001052010107637155013425 0ustar jcameronwheel- Hz{ G| } ~    G  z  H    ! ! G ! G G G G G 4 G 4 G 4 4 G G 4 G G G G =z =  A G GfrLjava/awt/Frame;gLjava/awt/Graphics;fLjava/awt/Font;fnmLjava/awt/FontMetrics;tkLjava/awt/Toolkit; light_edgeLjava/awt/Color; dark_edgebodybody_hi light_edge_hi dark_edge_hidark_bgtextlight_bg()VCodeLineNumberTable waitForImage(Ljava/awt/Image;)Z(Ljava/awt/Image;II)ZgetWidth(Ljava/awt/Image;)I getHeight createImage(II)Ljava/awt/Image;0(Ljava/awt/image/ImageProducer;)Ljava/awt/Image; createObject&(Ljava/lang/String;)Ljava/lang/Object;&(Ljava/lang/Object;)Ljava/lang/Object; dottedRect(Ljava/awt/Graphics;IIIII)VrecursiveLayout(Ljava/awt/Container;)VrecursiveBackground'(Ljava/awt/Component;Ljava/awt/Color;)V recursiveBody(Ljava/awt/Component;)VsetFont(Ljava/awt/Font;)V SourceFile Util.java ]^java/awt/MediaTracker IJ ]t ^java/lang/Exception ab d f gh gi  java/lang/StringBufferFailed to create object  :  Failed to reproduce object  ^ java/awt/Container op java/awt/TextFieldjava/awt/Choicejava/awt/TextArea qr VT MN KL uv OP T ST T UT Tjava/awt/Color ] WT XT T YT ZT [T \Tjava/awt/Frame ^  java/awt/Font TimesRoman ] QRUtiljava/lang/ObjectaddImage(Ljava/awt/Image;I)V waitForAll isErrorAny()Z(Ljava/awt/Image;III)Vjava/awt/Image!(Ljava/awt/image/ImageObserver;)Ijava/awt/Componentjava/lang/ClassforName%(Ljava/lang/String;)Ljava/lang/Class; newInstance()Ljava/lang/Object;java/lang/SystemerrLjava/io/PrintStream;append,(Ljava/lang/String;)Ljava/lang/StringBuffer;getClass()Ljava/lang/Class;getName()Ljava/lang/String;toStringjava/io/PrintStreamprintln(Ljava/lang/String;)Vexit(I)V,(Ljava/lang/Object;)Ljava/lang/StringBuffer;java/awt/GraphicsdrawLine(IIII)Vlayout getComponent(I)Ljava/awt/Component;countComponents()I setBackground(Ljava/awt/Color;)VgetFontMetrics()Ljava/awt/FontMetrics;whiteblack lightGray(III)VdarkGray addNotify getGraphics()Ljava/awt/Graphics;(Ljava/lang/String;II)Vjava/awt/ToolkitgetDefaultToolkit()Ljava/awt/Toolkit; GHIJKLMNOPQRSTUTVTWTXTYTZT[T\T]^_*`ab_T(YL+*+M+`! "#$ac_W+YN-* -:-`) *+,de_) * W* ` 12fe_) * W* ` 78gh_!  `=gi_ *`Bjk_i9*L+LY*+ `HI L3N7Pjl_c7*LY*+`WY1[5]mn_2 h6 6<> 6=66$*```66&*```66&*ddd66$*ddd6ܱ`Bdef#g)hCgPiVjriklkmnmoop_Y)*<* M,! ,!"*#`st uvwt(yqr_yA*$*% *&*+'*!!*!M>, +(,#`& }"',5@st_$*)(` uv_;**+*,+-.` w^_/0123)4Yҷ56/7894Y5:1;/<=Y>?@+AYBCDEF`>  %+1DJPZ`ix~ xyfile/CbColorWindow.class0100644000567100000120000000756207172555115015242 0ustar jcameronwheel- y  o s  `  n q  z    i m {   ^ | e l _ ~     f g h   c b w k   p  } ` t u r  x w  v  a d j                    java/awt/Color FixedFrame(IIII)VLCbColorWindowCube;java/awt/Container addElementcallback#(LCbColorWindow;)Ljava/util/Vector; SourceFilegetReddarkGray*(Ljava/awt/Component;)Ljava/awt/Component;Cancel LCbButton;red%(Ljava/awt/Image;LCbButtonCallback;)VCbColorWindowSwatch ExceptionsLineNumberTablepalblacksize updatePalrepaintjava/awt/GridLayoutpalbutequalspaletteCbSliderjava/awt/Window"(LCbColorWindow;Ljava/awt/Color;)Vjava/util/VectorSouth getGraphicsCbColorWindowCallbackblueccube*(Ljava/awt/Color;LCbColorWindowCallback;)V (LCbButton;)V(I)VdisposeUtil'(Ljava/lang/String;LCbButtonCallback;)Vwhite(Ljava/lang/Object;)Zadd(Ljava/awt/Color;)V(Ljava/lang/Object;)V isResizablemagentajava/awt/Frameyellow(LCbColorWindow;)VsetGroupcurpalpalimgclick createImageNorthjava/awt/Component()Ljava/awt/Graphics;()Z()V(Ljava/awt/LayoutManager;)VshowCbColorWindowCubeCbColorWindow.javagetGreenswatchjava/awt/BorderLayout()Iorange setPositionpackOk LCbSlider;getBlue setLayout CbButtonGroup(LCbButtonGroup;)Vgray<(Ljava/lang/String;Ljava/awt/Component;)Ljava/awt/Component;Choose Color...colpinkCenterokLjava/util/Vector;CbButtonCallback GrayPanel [LCbButton;setColorselect BorderPanelLCbColorWindowCallback;defpaljava/awt/Graphicsgreenjava/awt/ImagefillRect(Ljava/lang/String;)V(II)Ljava/awt/Image;CbButton ConstantValuejava/awt/FlowLayoutILCbColorWindowSwatch;Code CbColorWindowsetTitlecyan elementAtLocalVariables[Ljava/awt/Image;Ljava/awt/Color;(I)Ljava/lang/Object;chosencancel     *Y* 6* ,*!*+9*,X**X*D * *1 )* I>* 1+: >*6&S*. *Y*Y<:YH*Y*>Z)/W*Y*>Z"/W*QWYV:Y*Y<:Y\YE:6/*,Y*62*U[S/W*,22 6 )+*  +3* !*, 2%   QW* Y*]Z[QW*QW*P*L*8.# % &%)3*:+A*D,N-S.a-j1o2|31789:;<=>?@ABC:DFBPFVGfHlIvJyFLMNPQR#^6*62-M,* +=,T*,2 *,2(W XY#Z5U+*)*X**94*$+*"*O=e+*,2X*!** +9*[Z*9S'*[G*9J'*[R*9M'*[A*9 F_`a_c#d'c(f-g7h<iKj\kml~mf]0*$*X*4turx wY#11F:10:15:1N:1;:1K:17:1@:1B:1C:1W:1?:: %.7@IR[dm vfile/CbButton.class0100644000567100000120000001127410061451367014235 0ustar jcameronwheel- 8} 9~  8  8  8  8  8  8 8 8 8 8  8  8  8 8 8 8 8 8 5 5 8 8  8 8 8 5 8LEFTI ConstantValueRIGHTABOVEBELOWimageLjava/awt/Image;stringLjava/lang/String;callbackLCbButtonCallback;imodeiwidthiheightpwidthpheighttwidththeightinsideZindentgroupLCbButtonGroup;selectedlc1Ljava/awt/Color;lc2lc3hc1hc2hc3%(Ljava/awt/Image;LCbButtonCallback;)VCodeLineNumberTable'(Ljava/lang/String;LCbButtonCallback;)V8(Ljava/awt/Image;Ljava/lang/String;ILCbButtonCallback;)VsetGroup(LCbButtonGroup;)Vselect()VsetText(Ljava/lang/String;)VsetImage(Ljava/awt/Image;)V setImageText&(Ljava/awt/Image;Ljava/lang/String;I)Vpaint(Ljava/awt/Graphics;)Vupdate mouseEnter(Ljava/awt/Event;II)Z mouseExit mouseDownmouseUp preferredSize()Ljava/awt/Dimension; minimumSizeimgSize(II)Ljava/awt/Dimension; SourceFile CbButton.java ^c ^g X WX X YX X ZX X [X X \X X ]X DE FG J; HI K; L;  O; P; M; N; TU f g QR w ; ; SR VR yz no fgjava/awt/Dimension ^ vwCbButtonjava/awt/CanvasUtil light_edgebody dark_edge light_edge_hibody_hi dark_edge_higetWidth(Ljava/awt/Image;)I getHeightfnmLjava/awt/FontMetrics;java/awt/FontMetrics stringWidth(Ljava/lang/String;)I()Ijava/lang/Mathmax(II)I CbButtonGroupadd (LCbButton;)Vjava/awt/Componentrepaintsizewidthheightjava/awt/GraphicssetColor(Ljava/awt/Color;)VfillRect(IIII)VdrawLinefLjava/awt/Font;setFont(Ljava/awt/Font;)V drawImage5(Ljava/awt/Image;IIIILjava/awt/image/ImageObserver;)Z getDescent drawString(Ljava/lang/String;II)VCbButtonCallbackclick(II)V!89:;<=>;<?@;<AB;<CDEFGHIJ;K;L;M;N;O;P;QRSRTUVRWXYXZX[X\X]X^_`% *+,a ^b`% *+,a  ^c`4***** * * *+*,************u*n*dCC***``***`$***`***``>***`**` ***`**`ar#.$3%8&='C(J)U*`,g-u.014569:;>? @BC(D3Fde`.*+** aMN Ofg`0* **!aUVWhi`S'*+*****"a]^ _`"a&bjk`Q%**+*****"ahi jk l$mlm`zB*+*,*********"a& st uvw'x2y=zA{no` j*# * *M*# * *N*# **:*$%6*$&6*' *(,:*' *(,:+-)+dd*+)+d++d++)+ddd++ddd+*#++)+ddd++ddd++)+,-***z**ddd.: +* %d*ddl &dl % &*/W+* %d*ddl %``*`0dl1**O+**dl*d*ddl***/W+**dl*``1v*nk*<*dd.: +* %dl &dl % &*/W+*$+**dl*`0dl1a$&:Lbx}  4cAHipo`*+2aqr`+ *#*"a sr`+ *#*"a tr`+ *'*"a ur`n>2.*$%#*$&* **3*4*'*"a%/38<vw`(5Y**6axw`*7ayz`nF*nF*n8%%8  85Y*j*j6a ",{|file/upload.cgi0100755000567100000120000000377610027202614013440 0ustar jcameronwheel#!/usr/local/bin/perl # upload.cgi # Upload a file require './file-lib.pl'; $disallowed_buttons{'upload'} && &error($text{'ebutton'}); &header(); &ReadParseMime($upload_max); $realdir = &unmake_chroot($in{'dir'}); if (!$in{'file_filename'}) { print "

$text{'upload_efile'}

\n"; } elsif (!-d $realdir) { print "

$text{'upload_edir'}

\n"; } else { $in{'file_filename'} =~ /([^\\\/]+)$/; $path = "$in{'dir'}/$1"; $realpath = "$realdir/$1"; if (-e $realpath) { # File exists .. ask the user if he is sure &switch_acl_uid(); $temp = &tempname(); open(TEMP, ">$temp"); if ($dostounix == 1 && $in{'dos'}) { $in{'file'} =~ s/\r\n/\n/g; } print TEMP $in{'file'}; close(TEMP); print "\n"; foreach $i (keys %prein) { print "\n"; } print "\n"; print "\n"; print "\n"; print "\n"; print "

\n"; print &text('upload_already', "$path"),"

\n"; print "\n"; print "\n"; print "

\n"; } else { # Go ahread and do it! &webmin_log("upload", undef, $path); &switch_acl_uid(); if ($access{'ro'} || !&can_access($path)) { print "

",&text('upload_eperm', $path),"

\n"; } elsif (-l $path && !&must_follow($realpath)) { print "

",&text('upload_elink', $path),"

\n"; } elsif (!open(FILE, ">$realpath")) { print "

",&text('upload_ewrite', $path, $!),"

\n"; } else { if ($dostounix == 1 && $in{'dos'}) { $in{'file'} =~ s/\r\n/\n/g; } print FILE $in{'file'}; close(FILE); &post_upload($path, $in{'dir'}, $in{'zip'}); } } } file/ErrorWindow.class0100644000567100000120000000272510061451367014777 0ustar jcameronwheel-r $01 0 234 567 89 : ;< = > 2? @A 2BC 0D 5EF GH IJ IKL MN OP OQ IRSTUok LCbButton;(Ljava/lang/String;)VCodeLineNumberTableclick (LCbButton;)V SourceFileErrorWindow.java (Vjava/awt/BorderLayoutW XY BorderPanel (Zjava/util/StringTokenizer ([java/awt/GridLayout \] (^java/awt/Label _` () ab cdCenter ae GrayPaneljava/awt/FlowLayoutCbButtonOk (fSouthg hV iVErrorj k)l mn op qV ErrorWindow FixedFrameCbButtonCallback()Vjava/awt/Container setLayout(Ljava/awt/LayoutManager;)V(I)V'(Ljava/lang/String;Ljava/lang/String;)V countTokens()I(II)V nextToken()Ljava/lang/String;add*(Ljava/awt/Component;)Ljava/awt/Component; hasMoreTokens()Z<(Ljava/lang/String;Ljava/awt/Component;)Ljava/awt/Component;'(Ljava/lang/String;LCbButtonCallback;)Vjava/awt/Windowpackshowjava/awt/FramesetTitleUtilbodyLjava/awt/Color;recursiveBackground'(Ljava/awt/Component;Ljava/awt/Color;)Vdispose #$%&'()***YYMY+ N, Y-  , Y-W-*,WY:YY*W*W**** !+J    # 36FMU^k{,-*!*"+ ./file/MultiColumnCallback.class0100644000567100000120000000031010061451367016367 0ustar jcameronwheel-    singleClick(LMultiColumn;I)V doubleClickheadingClicked SourceFileMultiColumn.javaMultiColumnCallbackjava/lang/Objectfile/CbColorWindowSwatch.class0100644000567100000120000000337607172555115016413 0ustar jcameronwheel-~swjbP\QXqx < 0 2 . G : F ? 1 8 / > E 3 ; - 7 5 9 @ D C , 4 ; A 6 = 4 B Lf RZ Kt M Ut mf iW Nz W nW c_ ^O oZ |e vd kr gf ha ` d u Td c} Hl pffillRectLineNumberTable ConstantValuewidth getHeight(Ljava/awt/Font;)V drawStringLjava/lang/String;CbColorWindowCubejava/awt/ColorsizeCbColorWindow.java setPaintModeheight ExceptionsLjava/awt/Color; CbColorWindow SourceFile()Ljava/awt/Dimension; minimumSizeCbColorWindowSwatchupatetxt(I)Ljava/lang/StringBuffer; setXORModeLjava/awt/Font;java/awt/Dimensionappend()V(Ljava/awt/Graphics;)V()IgetRedfblackjava/awt/FontMetricsfnm(IIII)VgetGreencol preferredSizegetBlueCbColorWindowCallbackLjava/awt/FontMetrics;java/awt/ComponentItoStringrepaintUtil BorderPanelCode(Ljava/lang/String;II)VLocalVariablespaint,(Ljava/lang/String;)Ljava/lang/StringBuffer;,setFontjava/lang/StringBufferwhite()Ljava/lang/String;(II)VsetColorjava/awt/Graphics(I)V(Ljava/awt/Color;)V nW^Oy6***+*I yd@*+*Y'*"*"*+ *I;?|eyP*+&+*%+*d*d+%+!++* )$`+#I&  %,3:KO]ey*+IoZy$ Y<<(I[Zy*IYSfile/FileManager.java0100644000567100000120000031012710107637151014500 0ustar jcameronwheelimport java.awt.*; import java.io.*; import java.applet.*; import java.net.*; import java.util.*; import netscape.javascript.JSObject; // A java filemanager that allows the user to manipulate files on the // Webmin server. Layout is similar to the windows explorer - directory // tree on the left, files on the right, action buttons on the top. public class FileManager extends Applet implements CbButtonCallback, HierarchyCallback, MultiColumnCallback { // top buttons CbButton ret_b, config_b, down_b, edit_b, refresh_b, props_b, copy_b, cut_b, paste_b, delete_b, new_b, upload_b, mkdir_b, makelink_b, rename_b, share_b, mount_b, search_b, acl_b, attr_b, ext_b; // Directory tree Hierarchy dirs; FileNode root; Hashtable nodemap = new Hashtable(); // File list MultiColumn files; TextField pathname; RemoteFile showing_files; RemoteFile showing_list[]; // Copying and pasting RemoteFile cut_buffer[]; boolean cut_mode; static final String monmap[] = { "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" }; String accroot[]; Hashtable lang = new Hashtable(); Hashtable stab = new Hashtable(), ntab = new Hashtable(); boolean sambamode; int nfsmode; String trust; String extra; String images; int iconsize; boolean got_filesystems, acl_support, attr_support, ext_support; Hashtable mounts = new Hashtable(); Vector fslist = new Vector(); boolean read_only = false; // Standard font for all text Font fixed = new Font("courier", Font.PLAIN, 12); // Font for button labels Font small_fixed = new Font("courier", Font.PLAIN, 10); // Full session cookie String session; // Archive parameter String archive; // Chroot directory for tree String chroot; public void init() { setLayout(new BorderLayout()); Util.setFont(small_fixed); StringTokenizer tok = new StringTokenizer(getParameter("root"), " "); accroot = new String[tok.countTokens()]; for(int i=0; tok.hasMoreTokens(); i++) accroot[i] = tok.nextToken(); trust = getParameter("trust"); session = getParameter("session"); extra = getParameter("extra"); if (extra == null) extra = ""; images = getParameter("images"); if (images == null) images = "images"; iconsize = Integer.parseInt(getParameter("iconsize")); archive = getParameter("doarchive"); if (archive == null) archive = "0"; chroot = getParameter("chroot"); if (chroot == null) chroot = "/"; // download language strings String l[] = get_text("lang.cgi"); if (l.length < 1 || l[0].indexOf('=') < 0) { String err = "Failed to get language list : "+join_array(l); new ErrorWindow(err); throw new Error(err); } for(int i=0; i= 0) lang.put(l[i].substring(0, eq), l[i].substring(eq+1)); } // list samba file shares String s[] = get_text("list_shares.cgi"); if (s[0].equals("1")) { for(int i=1; i 0 || s == 0 && ss.length > 1) { // At least one non-.. file was selected boolean parentsel = false; for(int i=0; i 4) new ErrorWindow(text("edit_enormal")); else new EditorWindow(f, this); } else if (b == down_b) { // Force download of the selected file if (f == null) return; if (f.type == RemoteFile.DIR && !archive.equals("0")) new DownloadDirWindow(this, f); else if (f.type == RemoteFile.DIR || f.type > 4) new ErrorWindow(text("view_enormal2")); else open_file_window(f, true, 0); } else if (b == refresh_b) { // Refesh the selected directory (and thus any subdirs) if (d == null) return; d.refresh(); show_files(d.file); } else if (b == props_b) { // Display the properties window if (f == null) return; new PropertiesWindow(f, this); } else if (b == acl_b) { // Display the ACL window (if filesystem supports them) if (f == null) return; FileSystem filefs = find_filesys(f); if (filefs == null) return; if (filefs.acls) new ACLWindow(this, f); else new ErrorWindow(text("eacl_efs", filefs.mount)); } else if (b == attr_b) { // Display the attributes window (if filesystem supports them) if (f == null) return; FileSystem filefs = find_filesys(f); if (filefs == null) return; if (filefs.attrs) new AttributesWindow(this, f); else new ErrorWindow(text("attr_efs", filefs.mount)); } else if (b == ext_b) { // Display EXT attributes window (if filesystem supports them) if (f == null) return; FileSystem filefs = find_filesys(f); if (filefs == null) return; if (filefs.ext) new EXTWindow(this, f); else new ErrorWindow(text("ext_efs", filefs.mount)); } else if (b == copy_b) { // Copy the selected files if (f == null) return; cut_buffer = ff; cut_mode = false; } else if (b == cut_b) { // Cut the selected file if (f == null) return; cut_buffer = ff; cut_mode = true; } else if (b == paste_b) { // Paste the copied file if (cut_buffer == null) { new ErrorWindow(text("paste_ecopy")); return; } // Check for existing file clashes // XXX // Go through all the files to paste for(int i=0; i= rl && p.substring(0, rl).equals(accroot[r])) can = true; else if (l < rl && accroot[r].substring(0, l).equals(p)) can = true; } if (!can) { new ErrorWindow(text("find_eaccess", p)); return null; } FileNode posnode = root; RemoteFile pos = posnode.file; StringTokenizer tok = new StringTokenizer(p, "/"); while(tok.hasMoreTokens()) { String fn = tok.nextToken(); if (fn.equals("")) continue; RemoteFile fl[] = pos.list(); if (fl == null) return null; if (fill) { posnode.open = true; posnode.fill(); } boolean found = false; for(int i=0; i= l+1 && f.path.substring(0, l+1).equals(fs.mount+"/")) || fs.mount.equals("/")) { filefs = fs; } } return filefs; } public boolean action(Event e, Object o) { if (e.target == pathname) { // A new path was entered.. cd to it String p = pathname.getText().trim(); if (p.equals("")) return true; find_directory(p, true); return true; } return false; } // singleClick // Called on a single click on a list item public void singleClick(MultiColumn list, int num) { } // doubleClick // Called upon double-clicking on a list item public void doubleClick(MultiColumn list, int num) { if (num == 0) { // Go to parent directory if (showing_files.directory != null) { ((FileNode)nodemap.get(showing_files)).open = false; show_files(showing_files.directory); dirs.select((FileNode)nodemap.get(showing_files)); dirs.redraw(); } return; } RemoteFile d = showing_list[num-1]; if (d.type == 0) { // Open this directory FileNode pn = (FileNode)nodemap.get(showing_files); pn.fill(); pn.open = true; FileNode fn = (FileNode)nodemap.get(d); if (show_files(d)) { fn.fill(); fn.open = true; dirs.select(fn); dirs.redraw(); } } else if (d.type <= 4) { // Direct the browser to this file open_file_window(d, list.last_event.shiftDown(), 0); } } // Called when the user clicks on a column heading so that it can // be sorted. public void headingClicked(MultiColumn list, int col) { if (col == 0) return; // ignore click on icon column? if (col == list.sortcol) { list.sortingArrow(col, list.sortdir == 2 ? 1 : 2); } else { list.sortingArrow(col, 1); } // Re-show the list in the new order, but with the same files selected int ss[] = files.allSelected(); RemoteFile ssf[] = new RemoteFile[ss.length]; for(int i=0; i 0) { new ErrorWindow(text("eopen", l[0])); return; } // Open for real if (download) { getAppletContext().showDocument( new URL(getDocumentBase(), urlstr)); } else { getAppletContext().showDocument( new URL(getDocumentBase(), urlstr), "show"); } } catch(Exception e) { } } static String urlize(String s) { StringBuffer rv = new StringBuffer(); for(int i=0; i= 0) { str = str.substring(0, idx)+ ns+str.substring(idx+os.length()); } return str; } } // A node in the directory tree class FileNode extends HierarchyNode { FileManager parent; RemoteFile file; boolean known; FileNode(RemoteFile file) { this.file = file; parent = file.parent; setimage(); ch = new Vector(); text = file.name; parent.nodemap.put(file, this); } // Create the nodes for subdirectories void fill() { if (!known) { RemoteFile l[] = file.list(); if (l == null) return; ch.removeAllElements(); for(int i=0; i 0) { ch.insertElementAt(n, i); break; } } } void setimage() { im = parent.get_image(file.shared() && file.mounted() ? "smdir.gif" : file.shared() && file.mountpoint() ? "sudir.gif" : file.shared() ? "sdir.gif" : file.mounted() ? "mdir.gif" : file.mountpoint() ? "udir.gif" : "dir.gif"); } // Forces a re-load from the server void refresh() { known = false; file.list = null; fill(); } } class RemoteFile { static final int DIR = 0; static final int TEXT = 1; static final int IMAGE = 2; static final int BINARY = 3; static final int UNKNOWN = 4; static final int SYMLINK = 5; static final int DEVICE = 6; static final int PIPE = 7; static final String[] tmap = { "dir.gif", "text.gif", "image.gif", "binary.gif", "unknown.gif", "symlink.gif", "device.gif", "pipe.gif" }; FileManager parent; String path, name; int type; String user, group; long size; int perms; long modified; String linkto; RemoteFile list[]; RemoteFile directory; // Parse a line of text to a file object RemoteFile(FileManager parent, String line, RemoteFile d) { this.parent = parent; StringTokenizer tok = new StringTokenizer(line, "\t"); if (tok.countTokens() < 7) { String err = "Invalid file line : "+line; new ErrorWindow(err); throw new Error(err); } path = tok.nextToken(); path = parent.replace_str(path, "\\t", "\t"); path = parent.replace_str(path, "\\\\", "\\"); type = Integer.parseInt(tok.nextToken()); user = tok.nextToken(); group = tok.nextToken(); size = Long.parseLong(tok.nextToken()); perms = Integer.parseInt(tok.nextToken()); modified = Long.parseLong(tok.nextToken())*1000; if (type == 5) linkto = tok.nextToken(); directory = d; if (path.equals("/")) name = "/"; else name = path.substring(path.lastIndexOf('/')+1); } // Create a new, empty file object RemoteFile() { } // Returns a list of files in this directory RemoteFile[] list() { if (list == null) { String l[] = parent.get_text("list.cgi?dir="+ parent.urlize(path)); if (l[0].length() > 0) { //list = new RemoteFile[0]; // Error reading the remote directory! new ErrorWindow(parent.text("list_edir", path, l[0])); list = null; } else { list = new RemoteFile[l.length-3]; for(int i=3; i 0 && offset == 0) { nlist[i] = f; offset++; } nlist[i+offset] = list[i]; } if (offset == 0) nlist[list.length] = f; list = nlist; } void delete(RemoteFile f) { RemoteFile nlist[] = new RemoteFile[list.length-1]; for(int i=0,j=0; i= 0) { // Length is known buf = new byte[uc.getContentLength()]; int got = 0; while(got < buf.length) got += is.read(buf, got, buf.length-got); } else { // Length is unknown .. read till the end buf = new byte[0]; while(true) { byte data[] = new byte[16384]; int got; try { got = is.read(data); } catch(EOFException ex) { break; } if (got <= 0) break; byte nbuf[] = new byte[buf.length + got]; System.arraycopy(buf, 0, nbuf, 0, buf.length); System.arraycopy(data, 0, nbuf, buf.length, got); buf = nbuf; } } edit.setText(new String(buf, 0)); is.close(); file.size = buf.length; } catch(Exception e) { e.printStackTrace(); } } // Creating a new file EditorWindow(String f, FileManager p) { super(500, 300); filemgr = p; makeUI(true); setTitle(filemgr.text("edit_title2")); name.setText(f.equals("/") ? f : f+"/"); name.select(name.getText().length(), name.getText().length()); } void makeUI(boolean add_name) { setLayout(new BorderLayout()); if (add_name) { Panel np = new Panel(); np.setLayout(new BorderLayout()); np.add("West", new Label(filemgr.text("edit_filename"))); np.add("Center", name = new TextField()); name.setFont(filemgr.fixed); add("North", np); } add("Center", edit = new TextArea(20, 80)); edit.setFont(filemgr.fixed); Panel bot = new Panel(); bot.setLayout(new FlowLayout(FlowLayout.RIGHT)); bot.add(goto_b = new CbButton(filemgr.get_image("goto.gif"), filemgr.text("edit_goto"), CbButton.LEFT, this)); bot.add(find_b = new CbButton(filemgr.get_image("find.gif"), filemgr.text("edit_find"), CbButton.LEFT, this)); bot.add(new Label(" ")); bot.add(save_b = new CbButton(filemgr.get_image("save.gif"), filemgr.text("save"), CbButton.LEFT, this)); bot.add(saveclose_b = new CbButton(filemgr.get_image("save.gif"), filemgr.text("edit_saveclose"), CbButton.LEFT, this)); bot.add(cancel_b = new CbButton(filemgr.get_image("cancel.gif"), filemgr.text("close"), CbButton.LEFT, this)); add("South", bot); Util.recursiveBody(this); pack(); show(); } public void click(CbButton b) { if (b == save_b || b == saveclose_b) { RemoteFile par = null, already = null; String save_path; if (file == null) { // Locate the filemgr directory save_path = filemgr.trim_path(name.getText()); int sl = save_path.lastIndexOf('/'); par = filemgr.find_directory( save_path.substring(0, sl), false); if (par == null) return; already = par.find(save_path.substring(sl+1)); if (already != null && (already.type == 0 || already.type == 5)) { new ErrorWindow( filemgr.text("edit_eover", save_path)); return; } } else save_path = file.path; // Save the file back again String s = edit.getText(), line; try { URL u = new URL(filemgr.getDocumentBase(), "save.cgi"+filemgr.urlize(save_path)+ "?rand="+System.currentTimeMillis()+ "&trust="+filemgr.trust+ "&length="+s.length()+ filemgr.extra); URLConnection uc = u.openConnection(); filemgr.set_cookie(uc); uc.setDoOutput(true); OutputStream os = uc.getOutputStream(); byte buf[] = new byte[s.length()]; s.getBytes(0, buf.length, buf, 0); os.write(buf); os.close(); BufferedReader is = new BufferedReader(new InputStreamReader( uc.getInputStream())); String err = is.readLine(); if (err.length() > 0) { new ErrorWindow( filemgr.text("edit_esave", err)); is.close(); return; } line = is.readLine(); is.close(); } catch(Exception e) { e.printStackTrace(); return; } if (file == null) { // Create and insert or replace the file object file = new RemoteFile(filemgr, line, par); if (already != null) { // A file with this name exists already.type = file.type; already.user = file.user; already.group = file.group; already.size = file.size; already.perms = file.perms; already.modified = file.modified; } else { // Add to the list par.add(file); } } else { file.size = s.length(); file.modified = System.currentTimeMillis(); } filemgr.show_files(filemgr.showing_files); if (b == saveclose_b) dispose(); } else if (b == cancel_b) { // Just close dispose(); } else if (b == goto_b) { // Open a dialog asking which line to go to if (goto_window != null) goto_window.toFront(); else goto_window = new GotoWindow(this); } else if (b == find_b) { // Open the search (and replace) dialog if (find_window != null) find_window.toFront(); else find_window = new FindReplaceWindow(this); } } public void dispose() { super.dispose(); if (goto_window != null) goto_window.dispose(); if (find_window != null) find_window.dispose(); } } class GotoWindow extends FixedFrame implements CbButtonCallback { EditorWindow editor; FileManager filemgr; TextField line; CbButton goto_b, cancel_b; GotoWindow(EditorWindow e) { editor = e; filemgr = e.filemgr; setLayout(new BorderLayout()); add("West", new Label(filemgr.text("edit_gotoline"))); add("Center", line = new TextField(10)); line.setFont(filemgr.fixed); Panel bot = new Panel(); bot.setLayout(new FlowLayout(FlowLayout.RIGHT)); bot.add(goto_b = new CbButton(filemgr.get_image("goto.gif"), filemgr.text("edit_goto"), CbButton.LEFT, this)); bot.add(cancel_b = new CbButton(filemgr.get_image("cancel.gif"), filemgr.text("close"), CbButton.LEFT, this)); add("South", bot); Util.recursiveBody(this); pack(); show(); } public void click(CbButton b) { if (b == goto_b) { // Go to the chose line, if it exists int lnum; try { lnum = Integer.parseInt(line.getText()); } catch(Exception e) { return; } String txt = editor.edit.getText(); int c, l = 0; for(c=0; c= 0) { String sel = edittxt.substring(st, en); if (sel.equals(findtxt)) { // Replace the selected editor.edit.setText(edittxt.substring(0, st)+ replace.getText()+ edittxt.substring(en)); editor.edit.select(st, st); return; } } click(find_b); } else if (b == all_b) { // Replace all occurrances of the text in the editor int pos = 0; int len = findtxt.length(); int st = editor.edit.getSelectionStart(), en = editor.edit.getSelectionEnd(); while((pos = edittxt.indexOf(findtxt, pos)) != -1) { edittxt = edittxt.substring(0, pos)+ replace.getText()+ edittxt.substring(pos+len); pos += len; } editor.edit.setText(edittxt); editor.edit.select(st, en); // put back old selection } else if (b == cancel_b) { // Just close the window dispose(); } } public void dispose() { super.dispose(); editor.find_window = null; } } class PropertiesWindow extends FixedFrame implements CbButtonCallback { RemoteFile file; FileManager filemgr; CbButton save_b, cancel_b; TextField linkto; TextField user, group; Checkbox setuid, setgid; PermissionsPanel user_p, group_p, other_p; Checkbox sticky; Choice rec_mode; TextField octal; PropertiesWindow(RemoteFile f, FileManager p) { file = f; filemgr = p; // Create UI setTitle(f.path); setLayout(new BorderLayout()); Panel bot = new Panel(); bot.setLayout(new FlowLayout(FlowLayout.RIGHT)); bot.add(save_b = new CbButton(filemgr.get_image("save.gif"), filemgr.text("save"), CbButton.LEFT, this)); bot.add(cancel_b = new CbButton(filemgr.get_image("cancel.gif"), filemgr.text("cancel"), CbButton.LEFT, this)); add("South", bot); Panel mid = new Panel(); mid.setLayout(new BorderLayout()); TabbedPanel tab = null; add("Center", mid); // Create file details section Panel det = new LinedPanel(filemgr.text("info_file")), dl = new Panel(), dr = new Panel(); setup_leftright(det, dl, dr); add_item(filemgr.text("info_path"), new Label(file.path), dl, dr); add_item(filemgr.text("info_type"), new Label(filemgr.text("file_type"+file.type)), dl, dr); add_item(filemgr.text("info_size"), new Label(String.valueOf(file.size)),dl,dr); add_item(filemgr.text("info_mod"), new Label(String.valueOf(new Date(file.modified))), dl, dr); if (file.type == 5) { add_item(filemgr.text("info_link"), linkto = new TextField(file.linkto, 30), dl, dr); linkto.setFont(filemgr.fixed); } mid = add_panel(mid, det); // Create permissions section Panel per = new LinedPanel(filemgr.text("info_perms")), pl = new Panel(), pr = new Panel(); setup_leftright(per, pl, pr); add_item(filemgr.text("info_user"), user_p = new PermissionsPanel(file, 64, filemgr), pl, pr); add_item(filemgr.text("info_group"), group_p = new PermissionsPanel(file, 8, filemgr), pl, pr); add_item(filemgr.text("info_other"), other_p = new PermissionsPanel(file, 1, filemgr), pl,pr); if (file.type == 0) { add_item(filemgr.text("info_sticky"), sticky = new Checkbox( filemgr.text("info_sticky2")), pl,pr); sticky.setState((file.perms&01000) != 0); } add_item(filemgr.text("info_octal"), octal = new TextField(4), pl, pr); octal.setFont(filemgr.fixed); octal.setEditable(false); mid = add_panel(mid, per); // Create ownership section Panel own = new LinedPanel(filemgr.text("info_own")), ol = new Panel(), or = new Panel(); setup_leftright(own, ol, or); add_item(filemgr.text("info_user"), user = new TextField(file.user, 10), ol, or); user.setFont(filemgr.fixed); if (file.type != 0) { add_item(filemgr.text("info_setuid"), setuid = new Checkbox(filemgr.text("info_setuid2")), ol, or); setuid.setState((file.perms & 0x800) != 0); } add_item(filemgr.text("info_group"), group = new TextField(file.group, 10), ol, or); group.setFont(filemgr.fixed); if (file.type == 0) add_item(filemgr.text("info_setgid"), setgid = new Checkbox(filemgr.text("info_setgid2")), ol, or); else add_item(filemgr.text("info_setgid"), setgid = new Checkbox(filemgr.text("info_setgid3")), ol, or); setgid.setState((file.perms & 0x400) != 0); mid = add_panel(mid, own); if (file.type == 0) { // Create recursion section Panel rec = new LinedPanel(filemgr.text("info_apply")); rec.setLayout(new BorderLayout()); rec_mode = new Choice(); for(int i=1; i<=3; i++) rec_mode.addItem(filemgr.text("info_apply"+i)); rec.add("Center", rec_mode); mid = add_panel(mid, rec); } set_octal(); Util.recursiveBody(this); pack(); show(); } Panel add_panel(Panel p, Component c) { p.add("North", c); Panel np = new Panel(); np.setLayout(new BorderLayout()); p.add("Center", np); return np; } public void click(CbButton b) { if (b == save_b) { // Update the file int perms = get_perms(); int rec = 0; if (file.type == 0) rec = rec_mode.getSelectedIndex(); String rv[] = filemgr.get_text( "chmod.cgi?path="+filemgr.urlize(file.path)+ "&perms="+perms+ "&user="+filemgr.urlize(user.getText())+ "&group="+filemgr.urlize(group.getText())+ "&rec="+rec+ (linkto==null ? "" : "&linkto="+filemgr.urlize(linkto.getText()))); if (rv[0].length() > 0) { // Something went wrong new ErrorWindow(filemgr.text("info_efailed", file.path, rv[0])); } else { // Update all changed file objects if (linkto != null) file.linkto = linkto.getText(); else if (rec == 0) update_file(file, perms, false); else if (rec == 1) { // Update files in this directory update_file(file, perms, false); recurse_files(file, perms, false); } else if (rec == 2) { // Update files and subdirs update_file(file, perms, false); recurse_files(file, perms, true); } // Update directory list int os = filemgr.files.selected(); filemgr.show_files(filemgr.showing_files); filemgr.files.select(os); dispose(); } } else { // Just close dispose(); } } void update_file(RemoteFile f, int perms, boolean perms_only) { f.user = user.getText(); f.group = group.getText(); if (perms_only) f.perms = (perms & 0777) | (f.perms & 037777777000); else f.perms = perms; } void recurse_files(RemoteFile f, int perms, boolean do_subs) { if (f.list == null) return; for(int i=0; i 1 ? "delete_mtitle" : ff[0].type == 0 ? "delete_dtitle" : "delete_ftitle")); setLayout(new BorderLayout()); if (ff.length > 1) { add("North", new Label(filemgr.text("delete_mdesc"))); Panel mp = new Panel(); mp.setLayout(new GridLayout(ff.length, 1)); for(int i=0; i 0) { new ErrorWindow(filemgr.text("delete_efailed", file.path, rv[0])); break; } else { // done the deed.. update data structures RemoteFile pf = file.directory; pf.delete(file); if (filemgr.showing_files == pf) { // Need to refresh the list as well.. need_reshow = true; } FileNode node = (FileNode)filemgr.nodemap.get( file); FileNode pnode = (FileNode)filemgr.nodemap.get( pf); if (node != null) { // Take the directory out of the tree.. pnode.ch.removeElement(node); need_redraw = true; } } } if (need_reshow) filemgr.show_files(filemgr.showing_files); if (need_redraw) filemgr.dirs.redraw(); dispose(); } else if (b == cancel_b) dispose(); } } class MkdirWindow extends FixedFrame implements CbButtonCallback { FileManager filemgr; TextField dir; CbButton create_b, cancel_b; MkdirWindow(String d, FileManager p) { filemgr = p; setTitle(filemgr.text("mkdir_title")); setLayout(new BorderLayout()); add("West", new Label(filemgr.text("mkdir_dir"))); add("Center", dir = new TextField(d.equals("/") ? "/" : d+"/", 40)); dir.setFont(filemgr.fixed); dir.select(dir.getText().length(), dir.getText().length()); Panel bot = new Panel(); bot.setLayout(new FlowLayout(FlowLayout.CENTER)); bot.add(create_b = new CbButton(filemgr.get_image("save.gif"), filemgr.text("create"), CbButton.LEFT, this)); bot.add(cancel_b = new CbButton(filemgr.get_image("cancel.gif"), filemgr.text("cancel"), CbButton.LEFT, this)); add("South", bot); Util.recursiveBody(this); pack(); show(); } public void click(CbButton b) { if (b == create_b) { // Find the filemgr directory String path = dir.getText(); path = filemgr.trim_path(path); int sl = path.lastIndexOf('/'); RemoteFile par = filemgr.find_directory( path.substring(0, sl), false); if (par.find(path.substring(sl+1)) != null) { new ErrorWindow(filemgr.text("mkdir_eexists", path)); return; } String rv[] = filemgr.get_text("mkdir.cgi?dir="+ filemgr.urlize(path)); if (rv[0].length() > 0) { new ErrorWindow(filemgr.text("mkdir_efailed", rv[0])); return; } RemoteFile file = new RemoteFile(filemgr, rv[1], par); par.add(file); FileNode parnode = (FileNode)filemgr.nodemap.get(par); if (parnode != null) { // Update the tree parnode.add(new FileNode(file)); filemgr.dirs.redraw(); } filemgr.show_files(filemgr.showing_files); dispose(); } else dispose(); } } class LinkWindow extends FixedFrame implements CbButtonCallback { FileManager filemgr; TextField from, to; CbButton create_b, cancel_b; LinkWindow(String d, FileManager p) { filemgr = p; setLayout(new BorderLayout()); setTitle(filemgr.text("link_title")); Panel l = new Panel(), r = new Panel(); l.setLayout(new GridLayout(0, 1)); l.add(new Label(filemgr.text("link_from"))); l.add(new Label(filemgr.text("link_to"))); r.setLayout(new GridLayout(0, 1)); r.add(from = new TextField(d.equals("/") ? "/" : d+"/", 40)); from.setFont(filemgr.fixed); from.select(from.getText().length(), from.getText().length()); r.add(to = new TextField()); to.setFont(filemgr.fixed); add("West", l); add("Center", r); Panel bot = new Panel(); bot.setLayout(new FlowLayout(FlowLayout.CENTER)); bot.add(create_b = new CbButton(filemgr.get_image("save.gif"), filemgr.text("create"), CbButton.LEFT, this)); bot.add(cancel_b = new CbButton(filemgr.get_image("cancel.gif"), filemgr.text("cancel"), CbButton.LEFT, this)); add("South", bot); Util.recursiveBody(this); pack(); show(); } public void click(CbButton b) { if (b == create_b) { // Check inputs String from_str = from.getText().trim(); if (!from_str.startsWith("/")) { new ErrorWindow(filemgr.text("link_efrom", from_str)); return; } int sl = from_str.lastIndexOf('/'); String par_str = from_str.substring(0, sl), file_str = from_str.substring(sl+1); RemoteFile par = filemgr.find_directory(par_str, false); if (par == null) return; if (par.find(file_str) != null) { new ErrorWindow(filemgr.text("link_eexists", from_str)); return; } // Create the actual link String rv[] = filemgr.get_text("makelink.cgi?from="+ filemgr.urlize(from_str)+"&to="+ filemgr.urlize(to.getText())); if (rv[0].length() > 0) { new ErrorWindow(filemgr.text("link_efailed", rv[0])); return; } RemoteFile file = new RemoteFile(filemgr, rv[1], par); par.add(file); filemgr.show_files(filemgr.showing_files); dispose(); } else if (b == cancel_b) dispose(); } } class RenameWindow extends FixedFrame implements CbButtonCallback { FileManager filemgr; RemoteFile file; TextField oldname, newname; CbButton rename_b, cancel_b; RenameWindow(FileManager p, RemoteFile f) { filemgr = p; file = f; setLayout(new BorderLayout()); setTitle(filemgr.text("rename_title", file.path)); Panel l = new Panel(), r = new Panel(); l.setLayout(new GridLayout(0, 1)); l.add(new Label(filemgr.text("rename_old"))); l.add(new Label(filemgr.text("rename_new"))); r.setLayout(new GridLayout(0, 1)); r.add(oldname = new TextField(file.name, 20)); oldname.setEditable(false); oldname.setFont(filemgr.fixed); r.add(newname = new TextField(file.name, 20)); newname.select(file.name.length(), file.name.length()); newname.setFont(filemgr.fixed); add("West", l); add("Center", r); Panel bot = new Panel(); bot.setLayout(new FlowLayout(FlowLayout.CENTER)); bot.add(rename_b = new CbButton(filemgr.get_image("save.gif"), filemgr.text("rename_ok"), CbButton.LEFT, this)); bot.add(cancel_b = new CbButton(filemgr.get_image("cancel.gif"), filemgr.text("cancel"), CbButton.LEFT, this)); add("South", bot); pack(); show(); Util.recursiveBody(this); } public void click(CbButton b) { if (b == rename_b) { // Check for an existing file String newstr = newname.getText().trim(); if (newstr.length() == 0) return; RemoteFile already = file.directory.find(newstr); if (already != null) { new ErrorWindow(filemgr.text("rename_eexists", newstr)); return; } // Rename the real file int sl = file.path.lastIndexOf('/'); String newpath = file.path.substring(0, sl)+"/"+newstr; String rv[] = filemgr.get_text( "rename.cgi?old="+filemgr.urlize(file.path)+ "&new="+filemgr.urlize(newpath)); if (rv[0].length() > 0) { new ErrorWindow(filemgr.text("rename_efailed", rv[0])); return; } // Update data structure file.name = newstr; file.path = newpath; file.directory.delete(file); file.directory.add(file); file.list = null; FileNode parnode = (FileNode)filemgr.nodemap.get(file.directory); FileNode filenode = (FileNode)filemgr.nodemap.get(file); if (parnode != null && filenode != null) { filenode.text = file.name; parnode.ch.removeElement(filenode); parnode.add(filenode); dispose(); filemgr.dirs.redraw(); } filemgr.show_files(filemgr.showing_files); dispose(); } else if (b == cancel_b) dispose(); } } class OverwriteWindow extends FixedFrame implements CbButtonCallback { FileManager filemgr; RemoteFile src, already; TextField newname; CbButton ok, cancel; int idx; boolean mode; OverwriteWindow(FileManager p, RemoteFile a, RemoteFile s, int i) { filemgr = p; src = s; already = a; idx = i; mode = filemgr.cut_mode; setLayout(new BorderLayout()); setTitle(filemgr.text("over_title")); add("North", new MultiLabel(filemgr.text("over_msg", already.path), 30, 0)); add("West", new Label(filemgr.text("over_new"))); add("East", newname = new TextField(a.name, 30)); newname.setFont(filemgr.fixed); Panel bot = new Panel(); bot.setLayout(new FlowLayout(FlowLayout.RIGHT)); bot.add(ok = new CbButton(filemgr.get_image("save.gif"), filemgr.text("over_ok"), CbButton.LEFT, this)); bot.add(cancel = new CbButton(filemgr.get_image("cancel.gif"), filemgr.text("cancel"), CbButton.LEFT, this)); add("South", bot); Util.recursiveBody(this); pack(); show(); } public void click(CbButton b) { if (b == cancel) dispose(); else if (b == ok && newname.getText().length() > 0) { // paste the file, but with a new name RemoteFile ap = already.directory; RemoteFile newalready = ap.find(newname.getText()); if (newalready == src) { new ErrorWindow(filemgr.text("paste_eself")); return; } if (newalready != null && (newalready.type == 0 || newalready.type == 5)) { new ErrorWindow( filemgr.text("paste_eover", newalready.path)); return; } String dpath = (ap.path.equals("/") ? "/" : ap.path+"/")+newname.getText(); RemoteFile nf = filemgr.paste_file(src, already.directory, dpath, newalready, mode); if (filemgr.cut_mode && nf != null) { // Paste from the destination path from now on filemgr.cut_buffer[idx] = nf; } dispose(); } } } class SambaShare { String path; boolean available; boolean writable; int guest; String comment; SambaShare(String l) { StringSplitter tok = new StringSplitter(l, ':'); path = tok.nextToken(); available = tok.nextToken().equals("1"); writable = tok.nextToken().equals("1"); guest = Integer.parseInt(tok.nextToken()); comment = tok.nextToken(); } SambaShare(String p, boolean a, boolean w, int g, String c) { path = p; available = a; writable = w; guest = g; comment = c; } String params() { return "path="+FileManager.urlize(path)+ "&available="+(available ? 1 : 0)+ "&writable="+(writable ? 1 : 0)+ "&guest="+guest+ "&comment="+FileManager.urlize(comment); } } class DFSAdminExport { String path; String desc; String ro, rw, root; DFSAdminExport(String l) { StringSplitter tok = new StringSplitter(l, ':'); path = tok.nextToken(); ro = tok.nextToken(); rw = tok.nextToken(); root = tok.nextToken(); desc = tok.nextToken(); } DFSAdminExport(String p, String d, String ro, String rw, String root) { path = p; desc = d; this.ro = ro; this.rw = rw; this.root = root; } String[] split(String s) { StringTokenizer stok = new StringTokenizer(s, " "); String rv[] = new String[stok.countTokens()]; for(int i=0; i 1)); add_item(name, p, l, r); TextField t = new TextField(v.equals("-") ? "" : v, 25); t.setFont(filemgr.fixed); add_item("", t, l, r); return t; } Choice squashbox(int s) { Choice rv = new Choice(); rv.addItem(filemgr.text("share_s0")); rv.addItem(filemgr.text("share_s1")); rv.addItem(filemgr.text("share_s2")); rv.select(s); return rv; } Choice robox(boolean r) { Choice rv = new Choice(); rv.addItem(filemgr.text("share_lrw")); rv.addItem(filemgr.text("share_lro")); rv.select(r ? 1 : 0); return rv; } Panel opts_panel(Component ro, Component squash) { Panel p = new Panel(); p.setLayout(new BorderLayout()); p.add("West", ro); p.add("East", squash); return p; } void export_options(LinuxExport e) { int c = 0; for(int i=0; i 0) c++; e.host = new String[c]; e.ro = new boolean[c]; e.squash = new int[c]; for(int i=0,j=0; i 0) { e.host[j] = host[i].getText(); e.ro[j] = lro[i].getSelectedIndex() == 1; e.squash[j] = squash[i].getSelectedIndex(); j++; } } } } class SearchWindow extends FixedFrame implements CbButtonCallback,MultiColumnCallback { TabbedPanel tab; MultiColumn list; CbButton search_b, cancel_b; FileManager filemgr; TextField dir, match, user, group; Checkbox uany, usel, gany, gsel; Choice type; Checkbox sany, smore, sless; TextField more, less; Checkbox xon, xoff; String types[] = { "", "f", "d", "l", "p" }; RemoteFile results[]; SearchWindow(String d, FileManager p) { filemgr = p; setTitle(filemgr.text("search_title")); // setup UI setLayout(new BorderLayout()); tab = new TabbedPanel(); Panel search = new Panel(); search.setLayout(new BorderLayout()); tab.addItem(filemgr.text("search_crit"), search); Panel l = new Panel(), r = new Panel(); l.setLayout(new GridLayout(0, 1)); r.setLayout(new GridLayout(0, 1)); String cols[] = { "", filemgr.text("right_name"), filemgr.text("right_size") }; float widths[] = { .07f, .78f, .15f }; list = new MultiColumn(cols, this); list.setWidths(widths); list.setDrawLines(false); list.setFont(filemgr.fixed); tab.addItem(filemgr.text("search_list"), list); add_item(filemgr.text("search_dir"), dir = new TextField(d, 30), l, r); dir.setFont(filemgr.fixed); add_item(filemgr.text("search_match"), match = new TextField(20), l, r); match.setFont(filemgr.fixed); Panel up = new Panel(); up.setLayout(new FlowLayout(FlowLayout.LEFT, 1, 1)); CheckboxGroup ug = new CheckboxGroup(); up.add(uany = new Checkbox(filemgr.text("search_any"), ug, true)); up.add(usel = new Checkbox("", ug, false)); up.add(user = new TextField(10)); user.setFont(filemgr.fixed); add_item(filemgr.text("search_user"), up, l, r); Panel gp = new Panel(); gp.setLayout(new FlowLayout(FlowLayout.LEFT, 1, 1)); CheckboxGroup gg = new CheckboxGroup(); gp.add(gany = new Checkbox(filemgr.text("search_any"), gg, true)); gp.add(gsel = new Checkbox("", gg, false)); gp.add(group = new TextField(10)); group.setFont(filemgr.fixed); add_item(filemgr.text("search_group"), gp, l, r); type = new Choice(); for(int i=0; i 0) url += "&type="+types[type.getSelectedIndex()]; if (usel.getState()) { String u = user.getText().trim(); if (u.length() == 0) { new ErrorWindow(filemgr.text("search_euser")); return; } url += "&user="+filemgr.urlize(u); } if (gsel.getState()) { String g = group.getText().trim(); if (g.length() == 0) { new ErrorWindow(filemgr.text("search_egroup")); return; } url += "&group="+filemgr.urlize(g); } if (smore.getState()) { String m = more.getText().trim(); try { Integer.parseInt(m); } catch(Exception e) { new ErrorWindow(filemgr.text("search_esize")); return; } url += "&size=%2B"+m+"c"; } else if (sless.getState()) { String l = less.getText().trim(); try { Integer.parseInt(l); } catch(Exception e) { new ErrorWindow(filemgr.text("search_esize")); return; } url += "&size=%2D"+l+"c"; } if (xon.getState()) url += "&xdev=1"; // send off the search setCursor(WAIT_CURSOR); String f[] = filemgr.get_text(url); if (f[0].length() > 0) { new ErrorWindow(f[0]); return; } Object rows[][] = new Object[f.length-1][]; results = new RemoteFile[f.length-1]; for(int i=1; i= 0) { ACLEntry e = (ACLEntry)acllist.elementAt(idx); ACLEditor ed = (ACLEditor)edmap.get(e); if (ed == null) edmap.put(e, new ACLEditor(this, e)); else { ed.toFront(); ed.requestFocus(); } } } public void singleClick(MultiColumn list, int num) { } public void headingClicked(MultiColumn list, int col) { } } class AttributesWindow extends FixedFrame implements CbButtonCallback,MultiColumnCallback { FileManager filemgr; RemoteFile file; Vector attrlist = new Vector(); Hashtable edmap = new Hashtable(); CbButton ok, cancel, add; MultiColumn attrtable; AttributesWindow(FileManager p, RemoteFile f) { super(400, 300); setTitle(p.text("attr_title", f.path)); filemgr = p; file = f; // Get the attributes String a[] = filemgr.get_text( "getattrs.cgi?file="+filemgr.urlize(file.path)); if (a[0].length() != 0) { new ErrorWindow(filemgr.text("attr_eattrs", a[0])); return; } // Create the UI setLayout(new BorderLayout()); String titles[] = { filemgr.text("attr_name"), filemgr.text("attr_value") }; attrtable = new MultiColumn(titles, this); for(int i=1; i= 0) { FileAttribute at = (FileAttribute)attrlist.elementAt(idx); AttributeEditor ed = (AttributeEditor)edmap.get(at); if (ed == null) edmap.put(at, new AttributeEditor(this, at)); else { ed.toFront(); ed.requestFocus(); } } } public void singleClick(MultiColumn list, int num) { } public void headingClicked(MultiColumn list, int col) { } } class FileAttribute { String name; String value; FileAttribute(String l, FileManager f) { int eq = l.indexOf('='); name = f.un_urlize(l.substring(0, eq)); value = f.un_urlize(l.substring(eq+1)); } FileAttribute(String n, String v) { name = n; value = v; } String[] getRow() { return new String[] { name, value }; } } class AttributeEditor extends FixedFrame implements CbButtonCallback { FileManager filemgr; AttributesWindow attrwin; FileAttribute attr; boolean creating; CbButton ok, del; TextField name; TextArea value; AttributeEditor(AttributesWindow w, FileAttribute a) { attrwin = w; attr = a; filemgr = w.filemgr; creating = false; makeUI(); } AttributeEditor(AttributesWindow w) { attrwin = w; attr = new FileAttribute("", ""); filemgr = w.filemgr; creating = true; makeUI(); } void makeUI() { setTitle(filemgr.text(creating ? "attr_create" : "attr_edit")); setLayout(new BorderLayout()); Panel top = new Panel(); top.setLayout(new GridLayout(1, 2)); top.add(new Label(filemgr.text("attr_name"))); top.add(name = new TextField(attr.name, 20)); name.setFont(filemgr.fixed); add("North", top); Panel mid = new Panel(); mid.setLayout(new GridLayout(1, 2)); mid.add(new Label(filemgr.text("attr_value"))); mid.add(value = new TextArea(attr.value, 5, 20)); add("Center", mid); Panel bot = new Panel(); bot.setLayout(new FlowLayout(FlowLayout.RIGHT)); bot.add(ok = new CbButton(filemgr.get_image("save.gif"), filemgr.text("save"), CbButton.LEFT, this)); if (!creating) bot.add(del = new CbButton(filemgr.get_image("cancel.gif"), filemgr.text("delete"), CbButton.LEFT, this)); add("South", bot); Util.recursiveBody(this); pack(); show(); } public void click(CbButton b) { if (b == ok) { // Update or add the attribute if (name.getText().length() == 0) { new ErrorWindow(filemgr.text("attr_ename")); return; } attr.name = name.getText(); attr.value = value.getText(); if (creating) { // Add to the attribs table attrwin.attrlist.addElement(attr); attrwin.attrtable.addItem(attr.getRow()); } else { // Update the table int idx = attrwin.attrlist.indexOf(attr); attrwin.attrtable.modifyItem(attr.getRow(), idx); } dispose(); } else if (b == del) { // Remove this entry int idx = attrwin.attrlist.indexOf(attr); attrwin.attrlist.removeElementAt(idx); attrwin.attrtable.deleteItem(idx); dispose(); } } public void dispose() { attrwin.edmap.remove(attr); super.dispose(); } } class EXTWindow extends FixedFrame implements CbButtonCallback { FileManager filemgr; RemoteFile file; CbButton ok, cancel; Checkbox cbs[]; String attrs[] = { "A", "a", "c", "d", "i", "s", "S", "u" }; Hashtable attrmap = new Hashtable(); EXTWindow(FileManager p, RemoteFile f) { super(); setTitle(p.text("ext_title", f.path)); filemgr = p; file = f; // Get the attributes String a[] = filemgr.get_text( "getext.cgi?file="+filemgr.urlize(file.path)); if (a[0].length() != 0) { new ErrorWindow(filemgr.text("ext_eattrs", a[0])); return; } for(int i=0; i max || !tok.hasMoreTokens()) { v.addElement(line); line = null; } } setLayout(new GridLayout(v.size(), 1, 0, 0)); for(int i=0; i(ILCbScrollbarCallback;)VCodeLineNumberTable(IIIILCbScrollbarCallback;)V setValues(III)VgetValue()IsetValue(I)V checkValue()Vpaint(Ljava/awt/Graphics;)V arrowClickreshape(IIII)V preferredSize()Ljava/awt/Dimension; minimumSize mouseDown(Ljava/awt/Event;II)Z mouseDragmouseUp SourceFileCbScrollbar.java W[ Wc F8 H GH H IH H JH H KH H LH H MH H NH \] B8 => CbScrollbarArrow W TU VU C8 D8 E8 bc c j 8 8 ?@ h h O8 P8 A@ Q8 R8 ghjava/awt/Dimension W ij fa S8  CbScrollbarjava/awt/PanelUtil light_edgebody dark_edge light_edge_hibody_hi dark_edge_hidark_bgjava/awt/Container setLayout(Ljava/awt/LayoutManager;)V(LCbScrollbar;I)Vadd*(Ljava/awt/Component;)Ljava/awt/Component;java/awt/Componentrepaintsizewidthheightjava/awt/GraphicssetColor(Ljava/awt/Color;)VfillRectdrawLineCbScrollbarCallbackmoved(II)Vmoving!56789:;89<=>?@A@B8C8D8E8F8GHIHJHKHLHMHNHO8P8Q8R8S8TUVUWXY& *,Z  W[Y***** * * *******,**Y*ZW**Y*ZW)**Y*ZW**Y*ZWZ>$ 3:%B&G'M(R)Y*l+./1\]Y[+***** ****Z:; <=">&?*@^_Y*ZB`aY2***ZFG H IbcYM-* * ***d***dZMN,OdeY[ ** !=* ">*#*$*$6 * *: * *: ** :+*%+&+%+d'+d'+%+ddd'+ddd'*hd6**h*l`(***`h*l`d)+%+*(d*)*(d&+**%+*(d*('+*(*)d'+**%+d*)dd*('+d*)d*)d' +d*)dd*(`'+d*)d*)d'*hd6**h*l`+***`h*l`d,+%+*+*,*+dd&+**%+*+*+d'+*+*,d'+**%+*,dd*+d'+*,dd*,d'-+*,dd*+`d'+*,dd*,d'Z*STU:V^WpXxYZ[\]_`abcde"f2gBhTihj|klmpqrstuvw%x5yGz[{o|t}~faY^.*=*Y`*****-*Z)-ghYb*.*)*dd.*dddd.**dd.*dddd.*Z" 6G]aijY9!*/Yd0/Yd0ZkjY*1ZlmY*@*(**t2f*)**2S****(d3*=*+**t2)*,**2****+d3*Z2 .3=DXkpz~nmY *** !6* "6*6*(hd6*3dd6**hl%hd6*3dd6**hl*****4***Z6 &:K_mqzomYN"********-Z  pqfile/CbColorWindowCallback.class0100644000567100000120000000055307172555115016650 0ustar jcameronwheel- ConstantValueCbColorWindowCube ExceptionsCbColorWindow.javaLineNumberTable SourceFileLocalVariablesCodejava/lang/Objectchosen#(LCbColorWindow;)Ljava/util/Vector;CbColorWindowCallbackCbColorWindowSwatch CbColorWindowpalette"(LCbColorWindow;Ljava/awt/Color;)V  file/CbColorButton.java0100644000567100000120000000166310061451363015045 0ustar jcameronwheelimport java.awt.*; import java.util.*; /**A component for choosing a color */ public class CbColorButton extends Panel implements CbButtonCallback, CbColorWindowCallback { Color col; CbButton but; Vector pal; Image swatch = Util.createImage(32, 16); Graphics g = swatch.getGraphics(); CbColorWindow win; CbColorButton(Color c) { this(c, new Vector()); } CbColorButton(Color c, Vector p) { if (c == null) c = Color.black; col = c; g.setColor(col); g.fillRect(0, 0, 32, 16); setLayout(new BorderLayout()); add("Center", but = new CbButton(swatch, this)); } public void click(CbButton b) { if (win == null) win = new CbColorWindow(col, this); } public void chosen(CbColorWindow w, Color c) { if (c != null) { col = c; g.setColor(col); g.fillRect(0, 0, 32, 16); but.repaint(); } win = null; } public Vector palette(CbColorWindow w) { return pal; } } file/CbButtonGroup.class0100644000567100000120000000124710061451367015251 0ustar jcameronwheel-.        !"#buttonsLjava/util/Vector;()VCodeLineNumberTableadd (LCbButton;)Vselect SourceFile CbButton.java java/util/Vector  $% &'CbButton ()* + ,- CbButtonGroupjava/lang/Object addElement(Ljava/lang/Object;)V elementAt(I)Ljava/lang/Object;selectedZjava/awt/Componentrepaintsize()I  0**Y% *+ ^2=$*N-+-- * ױ#1file/CbButtonCallback.class0100644000567100000120000000021110061451367015637 0ustar jcameronwheel- click (LCbButton;)V SourceFile CbButton.javaCbButtonCallbackjava/lang/Objectfile/BorderPanel.class0100644000567100000120000000335510061472250014705 0ustar jcameronwheel-O ( ) *+ , *- . /0 1 23 45 67 68 29 :; 2<=>borderIcol1Ljava/awt/Color;col2body()VCodeLineNumberTable(I)V(ILjava/awt/Color;)V$(ILjava/awt/Color;Ljava/awt/Color;)V4(ILjava/awt/Color;Ljava/awt/Color;Ljava/awt/Color;)V#(Ljava/awt/Color;Ljava/awt/Color;)Vinsets()Ljava/awt/Insets;paint(Ljava/awt/Graphics;)V SourceFileBorderPanel.java  ? @  A  java/awt/Insets BC DEF GHI J K LBM $% NB BorderPaneljava/awt/PanelUtil light_edge dark_edge(IIII)Vjava/awt/GraphicssetColor(Ljava/awt/Color;)Vjava/awt/Componentsize()Ljava/awt/Dimension;java/awt/DimensionwidthheightfillRectjava/awt/ContainerdrawLine @****   I***** R"******, !W'******,*- & ]-******,*-*  !",#!N"*****+*,& '!("#8 Y*`*`*`*` ,$%*+* +* * *+* d=* d>+* 6"+d+d*+* 6*+ddd+ddd*ӱB123#5(6<7D8J9X:f8r<z=>?=A&'file/MkdirWindow.class0100644000567100000120000000647610107637154014764 0ustar jcameronwheel- K\ J]^ _` abc \ defgh i djklm nop \ q r s Jt _u vw xy nz x{| \} ~ _ ! J d J _ n n _ n = _ 5i _ _ = = _  B B _ _ _ filemgr LFileManager;dirLjava/awt/TextField;create_b LCbButton;cancel_b"(Ljava/lang/String;LFileManager;)VCodeLineNumberTableclick (LCbButton;)V SourceFileFileManager.java T MN mkdir_title  java/awt/BorderLayout Westjava/awt/Label mkdir_dir T Centerjava/awt/TextField/ java/lang/StringBuffer T OP   java/awt/Paneljava/awt/FlowLayout TCbButtonsave.gif create T QR  cancel.gifcancel SRSouth   ErrorWindow mkdir_eexists mkdir.cgi?dir=  mkdir_efailed RemoteFile T  FileNode T   MkdirWindow FixedFrameCbButtonCallback()V FileManagertext&(Ljava/lang/String;)Ljava/lang/String;java/awt/FramesetTitle(Ljava/lang/String;)Vjava/awt/Container setLayout(Ljava/awt/LayoutManager;)Vadd<(Ljava/lang/String;Ljava/awt/Component;)Ljava/awt/Component;java/lang/Stringequals(Ljava/lang/Object;)Zappend,(Ljava/lang/String;)Ljava/lang/StringBuffer;toString()Ljava/lang/String;(Ljava/lang/String;I)VfixedLjava/awt/Font;java/awt/ComponentsetFont(Ljava/awt/Font;)Vjava/awt/TextComponentgetTextlength()Iselect(II)V(I)V get_image$(Ljava/lang/String;)Ljava/awt/Image;8(Ljava/awt/Image;Ljava/lang/String;ILCbButtonCallback;)V*(Ljava/awt/Component;)Ljava/awt/Component;Util recursiveBody(Ljava/awt/Component;)Vjava/awt/Windowpackshow trim_path lastIndexOf(I)I substring(II)Ljava/lang/String;find_directory!(Ljava/lang/String;Z)LRemoteFile;(I)Ljava/lang/String;find (Ljava/lang/String;)LRemoteFile;8(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;urlizeget_text'(Ljava/lang/String;)[Ljava/lang/String;.(LFileManager;Ljava/lang/String;LRemoteFile;)V(LRemoteFile;)VnodemapLjava/util/Hashtable;java/util/Hashtableget&(Ljava/lang/Object;)Ljava/lang/Object; (LFileNode;)Vdirs LHierarchy; Hierarchyredraw showing_files LRemoteFile; show_files(LRemoteFile;)Zdispose JKLMNOPQRSRTUVb **,***Y* Y*  W**Y+Y+(Z W*****YN-Y -*!Y*"#*$*%Z&'W-*!Y*(#*)*%Z*'W*+- W*,*-*.WF ! "#!$8%n&|'()*-0123 4XYVb+*&*M*,/M,/0>*,12:,`345Y*6,78W*Y9*W,:;:25Y*<278W=Y*2>:?*@AB:BYCD*EF**GHW*I*IWZ8:;< =0??@QARCsE}FGIJKLNOQRTUZ[file/RenameWindow.class0100644000567100000120000000751610107637154015121 0ustar jcameronwheel- Th Si Sjk h lmn op qr stu hv wxy qz { l|}~ o  S q S  l " q $ S S o o 5{  9h 9 9 q q o o o q  I q q qfilemgr LFileManager;file LRemoteFile;oldnameLjava/awt/TextField;newnamerename_b LCbButton;cancel_b(LFileManager;LRemoteFile;)VCodeLineNumberTableclick (LCbButton;)V SourceFileFileManager.java ` VW XYjava/awt/BorderLayout  rename_title   java/awt/Paneljava/awt/GridLayout `java/awt/Label rename_old `  rename_newjava/awt/TextField ` Z[  \[ West Centerjava/awt/FlowLayout `CbButtonsave.gif  rename_ok ` ]^ cancel.gifcancel _^South  Y  ErrorWindowrename_eexists java/lang/StringBuffer / rename.cgi?old= &new= rename_efailed     FileNode          Y  RenameWindow FixedFrameCbButtonCallback()Vjava/awt/Container setLayout(Ljava/awt/LayoutManager;)V RemoteFilepathLjava/lang/String; FileManagertext8(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;java/awt/FramesetTitle(Ljava/lang/String;)V(II)V&(Ljava/lang/String;)Ljava/lang/String;add*(Ljava/awt/Component;)Ljava/awt/Component;name(Ljava/lang/String;I)Vjava/awt/TextComponent setEditable(Z)VfixedLjava/awt/Font;java/awt/ComponentsetFont(Ljava/awt/Font;)Vjava/lang/Stringlength()Iselect<(Ljava/lang/String;Ljava/awt/Component;)Ljava/awt/Component;(I)V get_image$(Ljava/lang/String;)Ljava/awt/Image;8(Ljava/awt/Image;Ljava/lang/String;ILCbButtonCallback;)Vjava/awt/WindowpackshowUtil recursiveBody(Ljava/awt/Component;)VgetText()Ljava/lang/String;trim directoryfind (Ljava/lang/String;)LRemoteFile; lastIndexOf(I)I substring(II)Ljava/lang/String;append,(Ljava/lang/String;)Ljava/lang/StringBuffer;toStringurlizeget_text'(Ljava/lang/String;)[Ljava/lang/String;delete(LRemoteFile;)Vlist [LRemoteFile;nodemapLjava/util/Hashtable;java/util/Hashtableget&(Ljava/lang/Object;)Ljava/lang/Object; HierarchyNodechLjava/util/Vector;java/util/Vector removeElement(Ljava/lang/Object;)Z (LFileNode;)Vdisposedirs LHierarchy; Hierarchyredraw showing_files show_files(LRemoteFile;)Z STUVWXYZ[\[]^_^`ab**+*,*Y*** Y N Y :- Y-Y*W-Y*W Y*Y*ZW****Y*ZW******- W*! W Y :"Y#*$Y*%&*'*(Z)W*$Y**&*+*(Z,W*- W*.*/*0cf->K`u Ektx|deb ~+*)l*12M,*3,4N-5Y*6, 7W*/869Y:*;<=<,<>:*9Y:?<*W*@<A<*W@<>B:25Y*C2 7W*,**3*D*3*E*F*G*3HI:*G*HI:4/*JKLWM*N*OP**QRW*N+*,*Nc~'+=>Lq%/;FMQ[jqy}fgfile/defaultacl0100644000567100000120000000052710025212375013506 0ustar jcameronwheelnoconfig=0 user=0 root=/ follow=0 umask=022 log=0 ro=0 goto=1 archive=1 button_save=1 button_edit=1 button_info=1 button_acl=1 button_attr=1 button_ext=1 button_search=1 button_delete=1 button_new=1 button_upload=1 button_mkdir=1 button_makelink=1 button_rename=1 button_sharing=1 button_mount=1 button_copy=1 unarchive=1 dostounix=1 chroot=/ file/images/0040755000567100000120000000000010005415673012727 5ustar jcameronwheelfile/images/paste.gif0100644000567100000120000000023007172555115014531 0ustar jcameronwheelGIF87afff,e Ia05ݣ Ci0E*~:o4`m %xLrrFdK;6hHZ{L2<'36m@.Y|}V{w ;file/images/dir.gif0100644000567100000120000000013007172555115014172 0ustar jcameronwheelGIF89a̙fff!,)i-j]݅_($5 iҳ;C>P;file/images/file.gif0100644000567100000120000000333207172555115014342 0ustar jcameronwheelGIF89a/UUUrrr999!Made with GIMP!,/81sRdiY_ -*tmxO_!s eH3-=ɨtJ A'I*z=b_J^쓏 Jyuo/1b$vh{(>jbhG$bA=,'n+H;b6#~c|3Vqb%Ejfc3TŒՌ2:789:n$tY@ƑENi\!64`=aH#!!>ਁ䉁&TE.$<`0 R@E % p0f!2Q3 ^A*APNT{tT @Ԝ'`LZCM,nEm$kXr[RB+NoTP hA@ecdPITİ2Ă"YtoburA@J7׌i'V19GQgySE6@zm"Udf aQi]es蕞m BAMG( :6Axd0BlyWd'`jEV-L+ ^M-bOƕr}6TABSJy*:t%l&p#p-LY"")7o3Qz )Aumr+4t"EZf#z@t ?dbA%E )ãu}$:2(@2j|遤 b.҅Uv)QiD"y5gJ#_mX3&ЭJ L (Z1Skݚ**bv{EuoC^QJu;!cL5|)V #R!)(lBx2Ʌ3^LW ;M^ -btq؍"˱Óץ\(ft)QZgnΓ녌$fm(_ˠ.]LvB\,Mxh%"A*c(h9nZ<~A pr ;file/images/binary.gif0100644000567100000120000000014107172555115014702 0ustar jcameronwheelGIF89afff!,2z j 2N}A"Dt訙Lkt||9JI ;file/images/text.gif0100644000567100000120000000013307172555115014403 0ustar jcameronwheelGIF89a̙!,,z \ؖ9'"cƞ*nh5+9h ;file/images/cancel.gif0100644000567100000120000000015307172555115014646 0ustar jcameronwheelGIF89a!,B˝aR h=zh5٘ӽRais2F{|kv WBU7c1H1 $i;file/images/edit.gif0100644000567100000120000000021207172555115014342 0ustar jcameronwheelGIF87a⯆̙,W0ʹBQXC( ` g::c<7)`@ji-y>Y I0" n"ޒb9)+HpgN$;file/images/symlink.gif0100644000567100000120000000012707172555115015110 0ustar jcameronwheelGIF89afff!,(yC i961!_zᶘ۬J;file/images/icon.gif0100644000567100000120000000041207172555115014347 0ustar jcameronwheelGIF89a00̙fff!,000I 8 ˧ ؍NfFRAʾR[x=KĐ&LNUuEFxL./w jgIۈ@dz9_rt1[5xa}{Tzw>afo~i9'_AhGllHX 4φ@\Ŀ|ߞܭQ ;file/images/new.gif0100644000567100000120000000012507172555115014211 0ustar jcameronwheelGIF87a,4*U͞؇y$i# oL*x(;file/images/makelink.gif0100644000567100000120000000017707172555115015222 0ustar jcameronwheelGIF87a̙fff,XVjjo~IO2VdN@D csQ48+^!r DyhĚơq;file/images/cut.gif0100644000567100000120000000016707172555115014221 0ustar jcameronwheelGIF87afff,Pt> usm@((YB&+]m^5qP"ŏl '57^zr`9U$N;file/images/pipe.gif0100644000567100000120000000015307172555115014356 0ustar jcameronwheelGIF89afff!,091FQKpBH^h)hlܺЁlŠF;file/images/save.gif0100644000567100000120000000013407172555115014356 0ustar jcameronwheelGIF89a!,3tANfznTȁQi9j*: SXOS<$@;file/images/refresh.gif0100644000567100000120000000013407172555115015056 0ustar jcameronwheelGIF87a,;|IS}[]HhbY(۝$LnD6hZ iJ;file/images/unknown.gif0100644000567100000120000000011707172555115015120 0ustar jcameronwheelGIF89a!,&z \0% ~H(fhyDzUaQ;file/images/device.gif0100644000567100000120000000013207172555115014655 0ustar jcameronwheelGIF89afff!,+y3,i.) '%rz6TSnj߳:2 ;file/images/open.gif0100644000567100000120000000016207172555115014362 0ustar jcameronwheelGIF87a̙fff,K˭[A+fj4HafĶn$\G0u:'R<ڒJyB-c0*׋ ;file/images/props.gif0100644000567100000120000000016507172555115014567 0ustar jcameronwheelGIF87afff,Nx!B xJ3&а!Kr WM8vl)VmԃJ ;file/images/run.gif0100644000567100000120000000020207172555115014220 0ustar jcameronwheelGIF89aQQ@!,SMV\ϔubG(rYʛ5)% ?}ސx 4DfPx97fQ EE|ũե;P;file/images/mkdir.gif0100644000567100000120000000015207172555115014526 0ustar jcameronwheelGIF87a̙fff,C߂0fqH`xji s]߸ 4< G& -ԪzhG;file/images/rename.gif0100644000567100000120000000022007172555115014663 0ustar jcameronwheelGIF87afff,]0邽8k@I\oL<j1ˢٔcuZn Ֆye9h|Nt~H;file/images/view.gif0100644000567100000120000000021207172555115014367 0ustar jcameronwheelGIF87a̙,W.:蓸 Ɓ`ICih(S"fPD0x)v{v p$ qC`dfħVPZ񎭲2MLCo;file/images/copy.gif0100644000567100000120000000016107172555115014372 0ustar jcameronwheelGIF87a̙,Jt@ALLG^y*bVHس)>Q nJ/y\sHUA]ahedF;file/images/sdir.gif0100644000567100000120000000026407172555115014365 0ustar jcameronwheelGIF89a̙fff333wwwUUU"""!Made with GIMP!,OI8+0 :@1/hA0.! ­RXPp% \Y!U\vn9G;file/images/share.gif0100644000567100000120000000020407172555115014520 0ustar jcameronwheelGIF89afff!Made with GIMP,K! .2UQNX o3S3g;r q壚nfZ䲣;file/images/search.gif0100644000567100000120000000020307172555115014662 0ustar jcameronwheelGIF87aȘ`d`,P*+" i[ȌEugڲ3^7B2G0 H:֫3r/ %s E"^$;file/images/acl.gif0100644000567100000120000000030107441017247014151 0ustar jcameronwheelGIF89a̲fff333LLL&&&sssYYY,vI5-D!xPfN/@_':3 }!l*(Db:U,SD6ZaYQfӗsoW;Sr}| ~YwT uz 5;file/images/add.gif0100664000567100000120000000016607445567455014174 0ustar jcameronwheelGIF89aUU!,;0IAち2ik,<߬c2Th@ Z4$td&KMjJZ;file/images/attr.gif0100664000567100000120000000026407445567105014405 0ustar jcameronwheelGIF89aUUUrrr999,iI8gYaHJK/ gp 0F?(0MIR)&VBg:yDdǧ-_'d̔SC/S& !;!5;file/images/sub.gif0100664000567100000120000000014007445567233014217 0ustar jcameronwheelGIF89aUU,-0I8e`(CDhh *?ߨ epH,n;file/images/ext.gif0100664000567100000120000000220707461411264014222 0ustar jcameronwheelGIF89aJJJFFFϭRRR+**777KKLffgZZZ###MKFy ~*}vc'''Ā[ $ٱ$eU2ϡϧÑ ̦O+)%vvv~Uö  000PPP333hhh~~~ ۾ ^^^jjj Ф WWWĊl qgI [ۭc^M؞ӫ{e v, }---ιޣ dd j&C3OOOr ݈.۫Y> ޥ p4zzzjI3ުǗͥQʑ ߦ ͔ bB///(((hH і ј չzwl[\ m˽,80  ȰH,`ËH @@ @6pC 6$PɐC@`́$J8"+~ d 1d5l8#?yHB$ B# $KT2i(D2e* Xqx ,Z0nE^ s֡0`L-P) qxMDTM7o‰#g:p sO;file/images/mdir.gif0100644000567100000120000000025107702474201014346 0ustar jcameronwheelGIF89a̙fff"""DDDUUUwww!,VI8+|zzD Q^BB( -%}W p5"kBz H`N9G;file/images/mount.gif0100664000567100000120000000033507702475415014572 0ustar jcameronwheelGIF89aٲsssfff̿,IA ¹5CiFJűAjEج+!>DR tXLxtPhEA /rqpqRu2mSf46.y}XZ #.b^}6]lk e|3iV3 kJ;file/images/smdir.gif0100644000567100000120000000026507702474754014553 0ustar jcameronwheelGIF89a̙fffwww333UUUDDD"""!,bI8+(*A`|G zJ/AqS `8l (vDվnuhah;file/images/udir.gif0100644000567100000120000000025307702664724014373 0ustar jcameronwheelGIF89a̙fffLLL]]]UUUnnnwww!,XI8+|G^aFAqPߟ"I$lWP1 Ȁ2r@0&q6Aᕂ=(ȁVRJw;file/images/sudir.gif0100644000567100000120000000027207702665074014556 0ustar jcameronwheelGIF89a̙fffwww333UUUnnn"""LLL]]]!,gI8+(*Aq|I,`<0`1ӧh)0($Tb`b=j hv+hБy)w6;file/images/delete.gif0100664000567100000120000000014310005405610014643 0ustar jcameronwheelGIF89a,B˝aR h=zh5٘ӽRais2F{|kv WBU7c1H1 $i;file/move.cgi0100755000567100000120000000131210107635765013122 0ustar jcameronwheel#!/usr/local/bin/perl # move.cgi # Move some file or directory require './file-lib.pl'; $disallowed_buttons{'copy'} && &error($text{'ebutton'}); &ReadParse(); &webmin_log("move", undef, $in{'from'}, \%in); &switch_acl_uid_and_chroot(); print "Content-type: text/plain\n\n"; unlink($in{'to'}); # in case we are moving a directory if ($access{'ro'} || !&can_access($in{'to'})) { print &text('move_eto', $in{'to'}),"\n"; exit; } if (!&can_access($in{'from'})) { print &text('move_efrom', $in{'from'}),"\n"; exit; } $out = &backquote_logged("mv ".quotemeta($in{'from'})." ". quotemeta($in{'to'})." 2>&1"); if ($?) { print $out,"\n"; } else { print "\n"; print &file_info_line($in{'to'}),"\n"; } file/CbScrollbarArrow.class0100644000567100000120000000364010061451367015716 0ustar jcameronwheel-x 6 7 8 9: ;< ;= > ?@ ?A ?B ?C ?D ?E ?F GH GI GJ K GL 9MN O P Q R ?S TUVWXmodeI scrollbar LCbScrollbar;insideZindentthLjava/lang/Thread;(LCbScrollbar;I)VCodeLineNumberTablepaint(Ljava/awt/Graphics;)V mouseDown(Ljava/awt/Event;II)ZmouseUprun()V SourceFileCbScrollbar.java )3 "# !Y Z[\ ]! ^! $%_ `a ba ca da ea fa gah ij kl mn &% ol p3java/lang/Thread )q '( r3 s3 tu vwjava/lang/ExceptionCbScrollbarArrowjava/awt/Canvasjava/lang/Runnablejava/awt/Componentsize()Ljava/awt/Dimension;java/awt/Dimensionwidthheight CbScrollbarhc1Ljava/awt/Color;lc1hc2lc2hc3lc3bcjava/awt/GraphicssetColor(Ljava/awt/Color;)VfillRect(IIII)V fillPolygon([I[II)VdrawLinerepaint(Ljava/lang/Runnable;)Vstartstop arrowClick(I)Vsleep(J)V  !"#$%&%'()*+3**+*, -.+ *=*>* * * :* * * :* * * :+*+ : :*,lOdOOOdOdO**OlOdOOdOO`*,OdOdOlOdOO/*'OdOOOlOdO+++*+....+*+....,j*D^iq {   $7= F!X"l#~$%/0+?***Y*Z,)* +,10+=*** *,12 3423+_+<**pMd<!$,;<=>%?(<45file/CbScrollbarCallback.class0100644000567100000120000000024410061451367016315 0ustar jcameronwheel-  moved(LCbScrollbar;I)Vmoving SourceFileCbScrollbar.javaCbScrollbarCallbackjava/lang/Objectfile/copy.cgi0100755000567100000120000000233010107635707013123 0ustar jcameronwheel#!/usr/local/bin/perl # copy.cgi # Copy some file or directory require './file-lib.pl'; $disallowed_buttons{'copy'} && &error($text{'ebutton'}); &ReadParse(); &webmin_log("copy", undef, $in{'from'}, \%in); &switch_acl_uid_and_chroot(); print "Content-type: text/plain\n\n"; if ($access{'ro'} || !&can_access($in{'from'})) { print &text('copy_efrom', $in{'from'}),"\n"; exit; } if (!&can_access($in{'to'})) { print &text('copy_eto', $in{'to'}),"\n"; exit; } if (-l $in{'from'}) { # Remake the link &lock_file($in{'to'}); if (!symlink(readlink($in{'from'}), $in{'to'})) { print &text('copy_elink', $!),"\n"; exit; } &unlock_file($in{'to'}); $err = undef; } elsif (-d $in{'from'}) { # Recursively copy with tar unlink($in{'to'}); mkdir($in{'to'}, 0755); $out = &backquote_logged("(cd ".quotemeta($in{'from'})." ; tar cf - . | (cd ".quotemeta($in{'to'})." ; tar xf -)) 2>&1"); $err = $?; } else { # Simple copy using cp unlink($in{'to'}); $out = &backquote_logged("cp -p ".quotemeta($in{'from'})." ". quotemeta($in{'to'})." 2>&1"); $err = $?; } if ($err) { print $out,"\n"; } else { print "\n"; print &file_info_line($in{'to'}),"\n"; } sub split_dir { $_[0] =~ /^(.*\/)([^\/]+)$/; return ($1, $2); } file/FixedFrame.class0100644000567100000120000000210610061451367014521 0ustar jcameronwheel-P $ % & '( )* +, - . /0 $ 12 13 45 /67 8 9: :;<mwImh()VCodeLineNumberTable(II)V handleEvent(Ljava/awt/Event;)Z minimumSize()Ljava/awt/Dimension; preferredSize SourceFileFixedFrame.java   = >?@ A B CD E FG HI JK LM N java/awt/Dimension O   FixedFramejava/awt/FrameUtiltkLjava/awt/Toolkit;java/awt/Toolkit getScreenSizejava/lang/Mathrandom()Dwidthheightjava/awt/Componentmovejava/awt/EventtargetLjava/lang/Object;idjava/awt/Windowdisposejava/awt/Container!d8***LI9*+l(k+lk     7 /* **B+ *+ ɠ * *+ ?#**Y***  !! *&"#file/lang.cgi0100755000567100000120000000126310046335661013074 0ustar jcameronwheel#!/usr/local/bin/perl # lang.cgi # Return language translation values require './file-lib.pl'; if ($userconfig{'nocharset'} || $config{'nocharset'}) { # Never try to use charset print "Content-type: text/plain\n\n"; } else { $charset = &get_charset(); print "Content-type: text/plain; charset=$charset\n\n"; } if (&get_charset() eq $default_charset) { # Convert any HTML entities to their 'real' single-byte forms, # as we are using the iso-8859-1 character set. foreach $k (keys %text) { print $k,"=",&entities_to_ascii($text{$k}),"\n"; } } else { # Don't do HTML entity conversion for other character sets foreach $k (keys %text) { print $k,"=",$text{$k},"\n"; } } file/Hierarchy.class0100644000567100000120000001330110061451367014424 0ustar jcameronwheel-E W W W W X  W W W   W W W W W W W W X W  W W W  X W W W M M W  W M M M M  W   WrootLHierarchyNode;sb LCbScrollbar;widthIheightsbwidthcallbackLHierarchyCallback;bimLjava/awt/Image;fontLjava/awt/Font;fnmLjava/awt/FontMetrics;bgLjava/awt/Graphics;topcountinLjava/awt/Insets;sellastJ broken_awtZ(LHierarchyNode;)VCodeLineNumberTable%(LHierarchyNode;LHierarchyCallback;)V()V(LHierarchyCallback;)VredrawsetRootselected()LHierarchyNode;selectsetFont(Ljava/awt/Font;)Vreshape(IIII)Vupdate(Ljava/awt/Graphics;)Vpaint mouseDown(Ljava/awt/Event;II)Zmoved(LCbScrollbar;I)Vmovingrenderrecurse(LHierarchyNode;IIII)I compscroll(LHierarchyNode;)Inodeat"(LHierarchyNode;II)LHierarchyNode; SourceFileHierarchy.java uz Z[ uv bc u java/awt/Fontcourier u fg l_ m_  CbScrollbar u \]  hi z  z |z p[ de z  no    ^_ a_  _ _ _ `_  jk    r qr  t    ! " #$% &$ '$ ( )* + , -_ ._ ,/ 01 2e 3 4 56 78 HierarchyNode 9$ m: ;< =>os.name? @AWindowsB CD st Hierarchy BorderPanelCbScrollbarCallbackUtil dark_edge_hiLjava/awt/Color;body_hi$(ILjava/awt/Color;Ljava/awt/Color;)V(Ljava/lang/String;II)Vjava/awt/Container setLayout(Ljava/awt/LayoutManager;)V(ILCbScrollbarCallback;)Vadd*(Ljava/awt/Component;)Ljava/awt/Component;java/awt/Component getGraphics()Ljava/awt/Graphics;repaintinsets()Ljava/awt/Insets; minimumSize()Ljava/awt/Dimension;java/awt/Dimensionjava/awt/Insetsleftrightbottom createImage(II)Ljava/awt/Image;java/awt/Imagejava/awt/GraphicsgetFontMetrics()Ljava/awt/FontMetrics; drawImage3(Ljava/awt/Image;IILjava/awt/image/ImageObserver;)Zjava/awt/EventwhenchLjava/util/Vector;openHierarchyCallbackopenNode(LHierarchy;LHierarchyNode;)V closeNode doubleNode clickNodegetValue()Ijava/awt/FontMetrics getHeight getAscentlight_bgsetColor(Ljava/awt/Color;)VfillRecttextxyLjava/lang/String; stringWidth(Ljava/lang/String;)Iimbody drawStringdrawLinejava/util/Vector elementAt(I)Ljava/lang/Object;sizejava/lang/Mathmin(II)I setValues(III)Vjava/lang/System getProperty&(Ljava/lang/String;)Ljava/lang/String;java/lang/String startsWith(Ljava/lang/String;)Z!WXYZ[\]^_`_a_bcdefghijkl_m_nop[qrstuvw* **+x uyw+ *+*,x&' (uzwuA**Y  * * **Y***Wx"-  %0*172@3u{w* **+x9: ;|zw@*****xBC DEG}vw* *+*xMN O~w*xUvw"*+x \]w3*+ **xbc dew**** ** d*!*"`d#**$*%`d&**#*!`*$* *&'****(x* klm0nFohrmsqtuv~ww* **+x}~ w^*+)*<***#*&***+,*,* -**,.**+**!*$*/Wx*  '2=AE]w]***ll* `0:**6+1*2e3* 6 *+12*V*5L**66*Z*6***7?***8.*'***9***:**x^ %*.03LRZ`ow#*+;x w8**< **x zwR*M*=<*>=*,?@*,*#*&A**,B@**CWx* !29:DQw h6* dh66+D+E*+FG6 k*&b+H*,+H*/W*+-*,I@*,`` ` A*,B@*,+F` `J+5+6*&*,``` ``K6 *+5 LM``C6 *,````K +5Nd*,```K *,`` h`dK `6 h`6  +5N *&\xj+9@QYcy7T[e}zwtD****O<*&ldP=d>** Qx    * .Cmwc7=+6/+5(>*+5LMO`=+5Nx'5wU+E +D++5 +66"*+5LM0:+5Nx& "#$ %"&('<(D&S*zw&RSTUVxfile/EditorWindow.class0100644000567100000120000001440710107637154015135 0ustar jcameronwheel-  v         " v   " = "  2  5 8  =  B D  F             " "  " v v d    "   ! p" o# o$% o& v' v( v) v* v+ v, - . / 0  12 3 45 3  / / /678nameLjava/awt/TextField;editLjava/awt/TextArea;save_b LCbButton; saveclose_bcancel_bgoto_bfind_bfile LRemoteFile;filemgr LFileManager; goto_window LGotoWindow; find_windowLFindReplaceWindow;(LRemoteFile;LFileManager;)VCodeLineNumberTable"(Ljava/lang/String;LFileManager;)VmakeUI(Z)Vclick (LCbButton;)Vdispose()V SourceFileFileManager.java 9  edit_title :;< =>? @A java/net/URLB CDjava/lang/StringBuffer show.cgi EF GH?rand=I JK EL&trust= M;&edit=1 N; OP Q RS TUV WX YZ[ \] \^java/io/EOFException _` java/lang/String ab cA  dejava/lang/Exceptionf g edit_title2 =H / hi jP kX l9java/awt/BorderLayoutm nojava/awt/PanelWestjava/awt/Label edit_filename A pqCenterjava/awt/TextField rst uvNorthjava/awt/TextAreajava/awt/FlowLayout wCbButtongoto.gif xy edit_goto z p{find.gif edit_find  save.gifsave edit_saveclose  cancel.gifclose South| }~   H       ErrorWindow edit_eoversave.cgi&length= E    java/io/BufferedReaderjava/io/InputStreamReader   P edit_esave RemoteFile  ; ;  e p    GotoWindow  FindReplaceWindow EditorWindow FixedFrameCbButtonCallback(II)VpathLjava/lang/String; FileManagertext8(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;java/awt/FramesetTitle(Ljava/lang/String;)Vjava/applet/AppletgetDocumentBase()Ljava/net/URL;append,(Ljava/lang/String;)Ljava/lang/StringBuffer;urlize&(Ljava/lang/String;)Ljava/lang/String;java/lang/SystemcurrentTimeMillis()J(J)Ljava/lang/StringBuffer;trustextratoString()Ljava/lang/String;#(Ljava/net/URL;Ljava/lang/String;)VopenConnection()Ljava/net/URLConnection; set_cookie(Ljava/net/URLConnection;)Vjava/net/URLConnectiongetContentLength()IgetInputStream()Ljava/io/InputStream;java/io/InputStreamread([BII)I([B)I arraycopy*(Ljava/lang/Object;ILjava/lang/Object;II)V([BI)Vjava/awt/TextComponentsetTextsizeJjava/lang/ThrowableprintStackTraceequals(Ljava/lang/Object;)ZgetTextlengthselectjava/awt/Container setLayout(Ljava/awt/LayoutManager;)Vadd<(Ljava/lang/String;Ljava/awt/Component;)Ljava/awt/Component;fixedLjava/awt/Font;java/awt/ComponentsetFont(Ljava/awt/Font;)V(I)V get_image$(Ljava/lang/String;)Ljava/awt/Image;8(Ljava/awt/Image;Ljava/lang/String;ILCbButtonCallback;)V*(Ljava/awt/Component;)Ljava/awt/Component;Util recursiveBody(Ljava/awt/Component;)Vjava/awt/Windowpackshow trim_path lastIndexOf(I)I substring(II)Ljava/lang/String;find_directory!(Ljava/lang/String;Z)LRemoteFile;(I)Ljava/lang/String;find (Ljava/lang/String;)LRemoteFile;typeI(I)Ljava/lang/StringBuffer; setDoOutputgetOutputStream()Ljava/io/OutputStream;getBytes(II[BI)Vjava/io/OutputStreamwrite([B)V(Ljava/io/InputStream;)V(Ljava/io/Reader;)VreadLine.(LFileManager;Ljava/lang/String;LRemoteFile;)Vusergrouppermsmodified(LRemoteFile;)V showing_files show_files(LRemoteFile;)ZtoFront(LEditorWindow;)V   O*,*+*,**** Y* Y  *W***N-:*6:1:6d`6U:@:6 : 5 - `:      :*!"Y#$%*&N-(-FI'~" #$%-)./01356787<=>@ABCDEF"=%I6J;KIMNNd*,*,***)**++,-+ Y +,.*+*+/0*+/01S TUV!WHXcYw*2Y34V5Y6M,2Y34,78Y*9*:;W,<*=Y>Z+;W*+*?@*A,;W*<*BYPCZ!;W*!*?@5Y6M,DYE4,*FY*GH*I**JZKLW,*FY*MH*N**JZOLW,8YP:LW,*FY*QH*R**JZSLW,*FY*QH*T**JZULW,*FY*VH*W**JZXLW*Y,;W*Z*[*\^] ^_`"a9bLcZdbfyghijmpqt=wbzj{n|r}v~| |+*S +*UMN*g**+/]:/^6*_`M,,`abN-/-c -c dY*efW*:*!/: Y* Y g*W*h0i*::*jk: 0:   l  m noYpYqr:  s:  0dY*t fW u s: u :(*i*vY*,w-H-*cc-*xx-*yy-*&&-*zz-*{{%,*|*0&*{**}~W+*Uf*_+*X *P+*K#* *7*Y*(+*O * **Y*ru'9+4EJXk~$)>EM`efmu}'.6=GV^eo{E!** ** * file/CbColorButton.class0100644000567100000120000000337407172555115015243 0ustar jcameronwheel-qTZo]^mFE_c<l@YX . 5 % - + 1 ) 3 $ , 4 1 ' & 2 ( / * 0 1 Pi Q? hp ML W? ka fg On =U B: \J ;G dA kJ RN 6V k[ kIfillRectLineNumberTable ConstantValueCbColorButton.java LCbButton; createImagejava/awt/Coloradd ExceptionsLjava/awt/Color; CbColorWindowLCbColorWindow;but SourceFileclickCbButtonjava/awt/BorderLayout(II)Ljava/awt/Image;"(LCbColorWindow;Ljava/awt/Color;)V%(Ljava/awt/Image;LCbButtonCallback;)V()Vpalette()Ljava/awt/Graphics; getGraphicsLjava/awt/Image;palgblackswatch (LCbButton;)VCenter<(Ljava/lang/String;Ljava/awt/Component;)Ljava/awt/Component;(IIII)VcolCbColorWindowCallbackjava/awt/Paneljava/awt/Component*(Ljava/awt/Color;LCbColorWindowCallback;)Vrepaintjava/awt/ContainerUtilCbButtonCallbackCode%(Ljava/awt/Color;Ljava/util/Vector;)VLocalVariablesjava/util/Vectorwin#(LCbColorWindow;)Ljava/util/Vector; setLayout(Ljava/awt/LayoutManager;)VsetColorLjava/awt/Graphics;chosenjava/awt/Graphicsjava/awt/ImageLjava/util/Vector; CbColorButton(Ljava/awt/Color;)V W?B:OnRNPidAkp`) *+ Y7  ka`c**  **+L*+*** *Y#!**Y**ZW7&   "'?JbDS`8*"* Y**"7 !jH`Z.,'*,*** **"7&' (!)(+-$Ke`*70C9file/root.cgi0100755000567100000120000000027610025210163013123 0ustar jcameronwheel#!/usr/local/bin/perl # root.cgi # Return information about the root directory require './file-lib.pl'; print "Content-type: text/plain\n\n"; &go_chroot(); print &file_info_line("/"),"\n"; file/HierarchyNode.class0100644000567100000120000000102010061451367015225 0ustar jcameronwheel-!      openZimLjava/awt/Image;chLjava/util/Vector;textLjava/lang/String;xIy()VCodeLineNumberTable8(ZLjava/awt/Image;Ljava/util/Vector;Ljava/lang/String;)V SourceFileHierarchy.java    HierarchyNodejava/lang/Object  *8F***,*-*;< =>?@file/PropertiesWindow.class0100644000567100000120000001575410107637154016051 0ustar jcameronwheel-             $ $ $ $  /  4  =    E   E 4           \  \      \ !"# $%&'( ) *+, - r . / 0 12 3 4 15 6 789 : ;<= 4> E? =@ ABCDEfile LRemoteFile;filemgr LFileManager;save_b LCbButton;cancel_blinktoLjava/awt/TextField;usergroupsetuidLjava/awt/Checkbox;setgiduser_pLPermissionsPanel;group_pother_pstickyrec_modeLjava/awt/Choice;octal(LRemoteFile;LFileManager;)VCodeLineNumberTable add_panel6(Ljava/awt/Panel;Ljava/awt/Component;)Ljava/awt/Panel;click (LCbButton;)V update_file(LRemoteFile;IZ)V recurse_filessetup_leftright3(Ljava/awt/Panel;Ljava/awt/Panel;Ljava/awt/Panel;)Vadd_itemI(Ljava/lang/String;Ljava/awt/Component;Ljava/awt/Panel;Ljava/awt/Panel;)V set_octal()V get_perms()I handleEvent(Ljava/awt/Event;)Z SourceFileFileManager.java F GHI JKjava/awt/BorderLayoutL MNjava/awt/Paneljava/awt/FlowLayout OCbButtonsave.gifP QRsave ST U VW cancel.gifcancel South VXCenter LinedPanel info_file K  info_pathjava/awt/Label  info_typejava/lang/StringBuffer file_type YZ [\ Y] ^_ info_size `ab cdinfo_modjava/util/Date ea f cg info_linkjava/awt/TextField H h ijk lm  info_perms info_userPermissionsPanel n  info_group  info_other  info_stickyjava/awt/Checkbox info_sticky2 o\ pq info_octal r sqinfo_own H  info_setuid info_setuid2 H  info_setgid info_setgid2  info_setgid3 info_applyjava/awt/Choice tK u vwx y zNorth {chmod.cgi?path= |T&perms=&user= }_&group=&rec=&linkto= ~  ErrorWindow info_efailed S     O  Westjava/awt/GridLayout  0 K   PropertiesWindow FixedFrameCbButtonCallback RemoteFilepathLjava/lang/String;java/awt/FramesetTitle(Ljava/lang/String;)Vjava/awt/Container setLayout(Ljava/awt/LayoutManager;)V(I)V FileManager get_image$(Ljava/lang/String;)Ljava/awt/Image;text&(Ljava/lang/String;)Ljava/lang/String;8(Ljava/awt/Image;Ljava/lang/String;ILCbButtonCallback;)Vadd*(Ljava/awt/Component;)Ljava/awt/Component;<(Ljava/lang/String;Ljava/awt/Component;)Ljava/awt/Component;append,(Ljava/lang/String;)Ljava/lang/StringBuffer;typeI(I)Ljava/lang/StringBuffer;toString()Ljava/lang/String;sizeJjava/lang/StringvalueOf(J)Ljava/lang/String;modified(J)V&(Ljava/lang/Object;)Ljava/lang/String;(Ljava/lang/String;I)VfixedLjava/awt/Font;java/awt/ComponentsetFont(Ljava/awt/Font;)V(LRemoteFile;ILFileManager;)VpermssetState(Z)Vjava/awt/TextComponent setEditableaddItemUtil recursiveBody(Ljava/awt/Component;)Vjava/awt/WindowpackshowgetSelectedIndexurlizegetTextget_text'(Ljava/lang/String;)[Ljava/lang/String;lengthJ(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;files LMultiColumn; MultiColumnselected showing_files show_files(LRemoteFile;)Zselectdisposelist [LRemoteFile;(II)Vjava/lang/Integer toOctalString(I)Ljava/lang/String;setTextgetState()ZgetPermsjava/awt/EventtargetLjava/lang/Object;  **+*,*+*Y Y N- Y -* Y***ZW-* Y***ZW*-W Y :Y:*WY*: Y : Y :*** Y*!"**# Y*$Y%&'*()*!"**+ Y*,-!"**. Y/Y*012!"*(7**3*4Y*56Z7"*7*89*::Y*;: Y : Y : *   **<*=Y*@*>Z?  "**@*=Y**>ZA  "**B*=Y**>ZC  "*(C**D*EY*FGZH  "*H*I~J**K*4YLZM  "*M*89*MN* ::Y*O: Y : Y :*  **<*4Y*P 6ZQ "*Q*89*(C**R*EY*SGZT "*T*I~J**@*4Y*U 6ZV "*V*89*(,**W*EY*XGZY ")**W*EY*ZGZY "*Y*I~J* ::*(sY*[:Y*\Y]^6(*^*$Y%[')*_*^W*::*`*a*b*cC !)5Z-Ox=cm?MW}$>HR d p {   M%+d,W Y N-Y+-W-#i+*_*e=>*( *^f>*$Y%g'*W*h'i')j'*W*Qkh'l'*W*Vkh'm')*7n!$Y%o'*W*7kh'*'*p:2q"rY*s*2tuW*7**7k5I**v8**v**w**v**w*xy6**z{W*x|*}*}b#% &'(!)1389:;<>?A"C,D6HBIQJ]KdPhRa5+*QkP+*VkU+~+I~I+IV WXY/[4\X+~6B+~2:(*(*v*w *v+~. `abc#d+e/f7gBjJaWlV+Y Y :Y,W-W,Y-Y+dW& p qr s)t2u?vLwUx`4- Y+!W Y :Y,WW| }~"+3\0*eL$Y%'+'*L+q*M+ '/<*T*I~<*T <*Y <*?<*A<*C<*H*I~<*H <2  .BLV`gx6+E *` file/FixedFrame.java0100644000567100000120000000127510061451363014337 0ustar jcameronwheelimport java.awt.*; import java.io.*; public class FixedFrame extends Frame { int mw = 0, mh = 0; public FixedFrame() { Dimension d = Util.tk.getScreenSize(); double rx = Math.random(), ry = Math.random(); move((int)((d.width/2)*rx), (int)((d.height/2)*ry)); } public FixedFrame(int w, int h) { this(); mw = w; mh = h; } public boolean handleEvent(Event evt) { if (evt.target == this && evt.id == Event.WINDOW_DESTROY) { dispose(); return true; } return super.handleEvent(evt); } public Dimension minimumSize() { if (mw != 0 && mh != 0) return new Dimension(mw, mh); else return super.minimumSize(); } public Dimension preferredSize() { return minimumSize(); } } file/MyFlowLayout.java0100644000567100000120000001474310061451363014744 0ustar jcameronwheel/* * @(#)MyFlowLayout.java 1.18 95/12/14 Arthur van Hoff * * Copyright (c) 1994 Sun Microsystems, Inc. All Rights Reserved. * * Permission to use, copy, modify, and distribute this software * and its documentation for NON-COMMERCIAL purposes and without * fee is hereby granted provided that this copyright notice * appears in all copies. Please refer to the file "copyright.html" * for further important copyright and licensing information. * * SUN MAKES NO REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF * THE SOFTWARE, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED * TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A * PARTICULAR PURPOSE, OR NON-INFRINGEMENT. SUN SHALL NOT BE LIABLE FOR * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. */ package java.awt; /** * Flow layout is used to layout buttons in a panel. It will arrange * buttons left to right until no more buttons fit on the same line. * Each line is centered. * * @version 1.18, 14 Dec 1995 * @author Arthur van Hoff * @author Sami Shaio */ public class MyFlowLayout implements LayoutManager { /** * The left alignment variable. */ public static final int LEFT = 0; /** * The right alignment variable. */ public static final int CENTER = 1; /** * The right alignment variable. */ public static final int RIGHT = 2; int align; int hgap; int vgap; /** * Constructs a new Flow Layout with a centered alignment. */ public MyFlowLayout() { this(CENTER, 5, 5); } /** * Constructs a new Flow Layout with the specified alignment. * @param align the alignment value */ public MyFlowLayout(int align) { this(align, 5, 5); } /** * Constructs a new Flow Layout with the specified alignment and gap * values. * @param align the alignment value * @param hgap the horizontal gap variable * @param vgap the vertical gap variable */ public MyFlowLayout(int align, int hgap, int vgap) { this.align = align; this.hgap = hgap; this.vgap = vgap; } /** * Adds the specified component to the layout. Not used by this class. * @param name the name of the component * @param comp the the component to be added */ public void addLayoutComponent(String name, Component comp) { } /** * Removes the specified component from the layout. Not used by * this class. * @param comp the component to remove */ public void removeLayoutComponent(Component comp) { } /** * Returns the preferred dimensions for this layout given the components * in the specified target container. * @param target the component which needs to be laid out * @see Container * @see #minimumLayoutSize */ public Dimension preferredLayoutSize(Container target) { Dimension dim = new Dimension(0, 0); int nmembers = target.countComponents(); for (int i = 0 ; i < nmembers ; i++) { Component m = target.getComponent(i); if (m.visible) { Dimension d = m.preferredSize(); dim.height = Math.max(dim.height, d.height); if (i > 0) { dim.width += hgap; } dim.width += d.width; } } Insets insets = target.insets(); dim.width += insets.left + insets.right + hgap*2; dim.height += insets.top + insets.bottom + vgap*2; return dim; } /** * Returns the minimum dimensions needed to layout the components * contained in the specified target container. * @param target the component which needs to be laid out * @see #preferredLayoutSize */ public Dimension minimumLayoutSize(Container target) { Dimension dim = new Dimension(0, 0); int nmembers = target.countComponents(); for (int i = 0 ; i < nmembers ; i++) { Component m = target.getComponent(i); if (m.visible) { Dimension d = m.minimumSize(); dim.height = Math.max(dim.height, d.height); if (i > 0) { dim.width += hgap; } dim.width += d.width; } } Insets insets = target.insets(); dim.width += insets.left + insets.right + hgap*2; dim.height += insets.top + insets.bottom + vgap*2; return dim; } /** * Centers the elements in the specified row, if there is any slack. * @param target the component which needs to be moved * @param x the x coordinate * @param y the y coordinate * @param width the width dimensions * @param height the height dimensions * @param rowStart the beginning of the row * @param rowEnd the the ending of the row */ private void moveComponents(Container target, int x, int y, int width, int height, int rowStart, int rowEnd) { switch (align) { case LEFT: break; case CENTER: x += width / 2; break; case RIGHT: x += width; break; } for (int i = rowStart ; i < rowEnd ; i++) { Component m = target.getComponent(i); if (m.visible) { m.move(x, y + (height - m.height) / 2); x += hgap + m.width; } } } /** * Lays out the container. This method will actually reshape the * components in the target in order to satisfy the constraints of * the BorderLayout object. * @param target the specified component being laid out. * @see Container */ public void layoutContainer(Container target) { Insets insets = target.insets(); int maxwidth = target.width - (insets.left + insets.right + hgap*2); int nmembers = target.countComponents(); int x = 0, y = insets.top + vgap; int rowh = 0, start = 0; for (int i = 0 ; i < nmembers ; i++) { Component m = target.getComponent(i); if (m.visible) { Dimension d = m.preferredSize(); m.resize(d.width, d.height); if ((x == 0) || ((x + d.width) <= maxwidth)) { if (x > 0) { x += hgap; } x += d.width; rowh = Math.max(rowh, d.height); } else { moveComponents(target, insets.left + hgap, y, maxwidth - x, rowh, start, i); x = d.width; y += vgap + rowh; rowh = d.height; start = i; } } } moveComponents(target, insets.left + hgap, y, maxwidth - x, rowh, start, nmembers); } /** * Returns the String representation of this MyFlowLayout's values. */ public String toString() { String str = ""; switch (align) { case LEFT: str = ",align=left"; break; case CENTER: str = ",align=center"; break; case RIGHT: str = ",align=right"; break; } return getClass().getName() + "[hgap=" + hgap + ",vgap=" + vgap + str + "]"; } } file/chmod.cgi0100755000567100000120000000415610107640327013245 0ustar jcameronwheel#!/usr/local/bin/perl # chmod.cgi # Change the ownership and permissions on a file require './file-lib.pl'; $disallowed_buttons{'info'} && &error($text{'ebutton'}); &ReadParse(); &webmin_log($in{'linkto'} ? "relink" : "chmod", undef, $in{'path'}, \%in); &switch_acl_uid_and_chroot(); print "Content-type: text/plain\n\n"; !$access{'ro'} && &can_access($in{'path'}) || &failure(&text('chmod_eaccess', $in{'path'})); $uid = $in{'user'} =~ /^\d+$/ ? $in{'user'} : defined(%user_to_uid) ? $user_to_uid{$in{'user'}} : getpwnam($in{'user'}); &failure(&text('chmod_euser', $in{'user'})) if (!defined($uid)); $gid = $in{'group'} =~ /^\d+$/ ? $in{'group'} : defined(%group_to_gid) ? $group_to_gid{$in{'group'}} : getgrnam($in{'group'}); &failure(&text('chmod_egroup', $in{'group'})) if (!defined($gid)); if ($in{'linkto'}) { # Just changing the link target $follow && &failure($text{'chmod_efollow'}); &lock_file($in{'path'}); unlink($in{'path'}); symlink($in{'linkto'}, $in{'path'}) || &failure(&text('chmod_elink', $1)); &unlock_file($in{'path'}); } elsif ($in{'rec'} == 0) { # Just this file &update($in{'path'}, 0); } elsif ($in{'rec'} == 1) { # This directory and all its files &update($in{'path'}, 0); opendir(DIR, $in{'path'}); foreach $f (readdir(DIR)) { next if ($f eq "." || $f eq ".."); next if (-l $full); &update("$in{'path'}/$f", 1) if (!-d $full); } closedir(DIR); } elsif ($in{'rec'} == 2) { # Directory and all subdirectories &update($in{'path'}, 0); &recurse($in{'path'}); } print "\n"; sub recurse { local(@files, $f, $full); opendir(DIR, $_[0]); @files = readdir(DIR); closedir(DIR); foreach $f (@files) { $full = "$_[0]/$f"; next if ($f eq "." || $f eq ".."); next if (-l $full); &update($full, !-d $full); &recurse($full) if (-d $full); } } sub failure { print @_,"\n"; exit; } # update(file, perms_only) sub update { local $perms = $in{'perms'}; if ($_[1]) { @st = stat($_[0]); $perms = ($perms & 0777) | ($st[2] & 037777777000); } chown($uid, $gid, $_[0]) || &failure(&text('chmod_echown', $!)); chmod($perms, $_[0]) || &failure(&text('chmod_echmod', $!)); } file/LinedPanel.java0100644000567100000120000000132310061473570014336 0ustar jcameronwheelimport java.awt.*; class LinedPanel extends GrayPanel { String title; LinedPanel(String t) { title = t; } public void paint(Graphics g) { super.paint(g); Font f = g.getFont(); FontMetrics fnm = g.getFontMetrics(); int w = size().width-1, h = size().height - 1; int tl = fnm.stringWidth(title); g.setColor(Util.light_edge); g.drawLine(5, 5, 5, h-5); g.drawLine(5, h-5, w-5, h-5); g.drawLine(w-5, h-5, w-5, 5); g.drawLine(tl+9, 5, w-5, 5); g.setColor(Util.dark_edge); g.drawLine(4, 4, 4, h-6); g.drawLine(6, h-6, w-6, h-6); g.drawLine(w-6, h-6, w-6, 6); g.drawLine(w-6, 4, tl+9, 4); g.drawString(title, 7, fnm.getAscent()); } public Insets insets() { return new Insets(15, 10, 10, 10); } } file/Util.java0100644000567100000120000000623310061542050013233 0ustar jcameronwheelimport java.awt.*; import java.awt.image.*; class Util { static Frame fr; static Graphics g; static Font f; static FontMetrics fnm; static Toolkit tk; static Color light_edge = Color.white; static Color dark_edge = Color.black; static Color body = Color.lightGray; static Color body_hi = new Color(210, 210, 210); static Color light_edge_hi = Color.white; static Color dark_edge_hi = Color.darkGray; static Color dark_bg = new Color(150, 150, 150); static Color text = Color.black; static Color light_bg = Color.white; static { fr = new Frame(); fr.addNotify(); g = fr.getGraphics(); setFont(new Font("TimesRoman", Font.PLAIN, 8)); tk = Toolkit.getDefaultToolkit(); } static boolean waitForImage(Image i) { MediaTracker mt = new MediaTracker(fr); mt.addImage(i, 0); try { mt.waitForAll(); } catch(Exception e) { return false; } return !mt.isErrorAny(); } static boolean waitForImage(Image i, int w, int h) { MediaTracker mt = new MediaTracker(fr); mt.addImage(i, w, h, 0); try { mt.waitForAll(); } catch(Exception e) { return false; } return !mt.isErrorAny(); } static int getWidth(Image i) { waitForImage(i); return i.getWidth(fr); } static int getHeight(Image i) { waitForImage(i); return i.getHeight(fr); } static Image createImage(int w, int h) { return fr.createImage(w, h); } static Image createImage(ImageProducer p) { return fr.createImage(p); } static Object createObject(String name) { try { Class c = Class.forName(name); return c.newInstance(); } catch(Exception e) { System.err.println("Failed to create object "+name+" : "+ e.getClass().getName()); System.exit(1); } return null; } /**Create a new instance of some object */ static Object createObject(Object o) { try { return o.getClass().newInstance(); } catch(Exception e) { System.err.println("Failed to reproduce object "+o+" : "+ e.getClass().getName()); System.exit(1); } return null; } static void dottedRect(Graphics g, int x1, int y1, int x2, int y2, int s) { int i, s2 = s*2, t; if (x2 < x1) { t = x1; x1 = x2; x2 = t; } if (y2 < y1) { t = y1; y1 = y2; y2 = t; } for(i=x1; i<=x2; i+=s2) g.drawLine(i, y1, i+s > x2 ? x2 : i+s, y1); for(i=y1; i<=y2; i+=s2) g.drawLine(x2, i, x2, i+s > y2 ? y2 : i+s); for(i=x2; i>=x1; i-=s2) g.drawLine(i, y2, i-s < x1 ? x1 : i-s, y2); for(i=y2; i>=y1; i-=s2) g.drawLine(x1, i, x1, i-s < y1 ? y1 : i-s); } static void recursiveLayout(Container c) { c.layout(); for(int i=0; i= 0 && yy <= height) { // Draw this node if (n.im != null) bg.drawImage(n.im, xx, yy, this); if (sel == n) { // Select this node bg.setColor(Util.body); bg.fillRect(xx+17, yy+2, tw+2, 13); bg.setColor(Util.text); } bg.drawString(n.text, xx+18, yy+12); } if (n.ch != null && n.open && yy <= height) { // Mark this node bg.drawLine(xx+18, yy+14, xx+17+tw, yy+14); // Draw subnodes yy += 16; for(int i=0; i= n.x) return n; if (n.ch == null || !n.open) return null; for(int i=0; i.(LFileManager;Ljava/lang/String;LRemoteFile;)VCodeLineNumberTable()V()[LRemoteFile;find (Ljava/lang/String;)LRemoteFile;add(LRemoteFile;)Vdeleteshared()Z mountpointmountedfs()LFileSystem; SourceFileFileManager.java im XYjava/util/StringTokenizer i java/lang/StringBufferInvalid file line :  ErrorWindow ijava/lang/Error Z[\t \\\ ]E ^[ _[ `a bE ca d[ gh/ \[ ef list.cgi?dir=  list_edir  RemoteFile ij en  xy  FileSystemjava/lang/Stringdir.giftext.gif image.gif binary.gif unknown.gif symlink.gif device.gifpipe.gif VWjava/lang/Object'(Ljava/lang/String;Ljava/lang/String;)V countTokens()Iappend,(Ljava/lang/String;)Ljava/lang/StringBuffer;toString()Ljava/lang/String;(Ljava/lang/String;)V nextToken FileManager replace_strJ(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;java/lang/IntegerparseInt(Ljava/lang/String;)Ijava/lang/Long parseLong(Ljava/lang/String;)Jequals(Ljava/lang/Object;)Z lastIndexOf(I)I substring(I)Ljava/lang/String;urlize&(Ljava/lang/String;)Ljava/lang/String;get_text'(Ljava/lang/String;)[Ljava/lang/String;lengthtext compareTostabLjava/util/Hashtable;java/util/Hashtableget&(Ljava/lang/Object;)Ljava/lang/Object;ntabmtabZmounts .CDEFGHEFIJEFKLEFMNEFOPEFQREFSTEFUVWXYZ[\[]E^[_[`abEcad[efgh ijka**+Y,:,Y , : Y WY**+**+*******i* * *-!*"# *"$***/%`&$lV 4>HQaq}imk*lenk*'*Y( *W*) *L+2+# Y*,*+2- W*'3*+d.'=*'d.Y*+2*/S+*'l* *3KS^czopkZ**0M,">,2$+#,2,l (qrk_*'`.M>63*'2$+$1 ,+S,`*'2S*' ,*'+S*,'l.   +03@MY^srkl<*'d.M>6*'2+,*'2S*'*,'l *6;tukG/*)*2*3*4*3lvuk,**5lwuk9*5L*++6l   xyk**7*38lzmkK39Y:SY;SYSY?SY@SYASBl{|file/ErrorWindow.java0100644000567100000120000000126410061451363014604 0ustar jcameronwheelimport java.awt.*; import java.util.*; class ErrorWindow extends FixedFrame implements CbButtonCallback { CbButton ok; ErrorWindow(String m) { setLayout(new BorderLayout()); Panel cen = new BorderPanel(1); StringTokenizer tok = new StringTokenizer(m, "\r\n"); cen.setLayout(new GridLayout(tok.countTokens(), 1)); while(tok.hasMoreTokens()) { cen.add(new Label(tok.nextToken())); } add("Center", cen); Panel bot = new GrayPanel(); bot.setLayout(new FlowLayout(FlowLayout.CENTER)); bot.add(new CbButton("Ok", this)); add("South", bot); pack(); show(); setTitle("Error"); Util.recursiveBackground(this, Util.body); } public void click(CbButton b) { dispose(); } } file/config0100664000567100000120000000005007756236104012655 0ustar jcameronwheelhide_dot_files=0 iconsize=0 nocharset=0 file/unicode/0040755000567100000120000000000010046127335013110 5ustar jcameronwheelfile/unicode/zh_TW.Big50100644000567100000120000002467710046121040014653 0ustar jcameronwheelfeedback_module=關於模組 help_efile=無法讀取說明檔 $1 delete_eaccess=您不被允許刪除 '$1' session_logout=登出成功,使用下面的欄位重新登入 session_failed=登入失敗,請再試一次 main_none=您沒有任何可使用的Webmin模組 month_4=四月 copy_eto=您不被允許拷貝到 '$1' smonth_3=三月 acl_gedit=選擇可以看到的群組 config_dir=給模組 $1 chmod_echown=變更擁有者失敗 : $1 edit_title=編輯 $1 中 elock_tries=無法鎖檔案 $1在 $2 分鐘後 feedback_desc2=此報告將會傳送給Usermin發展群,而非您的系統管理者,網路提供者,或主機公司,回饋內容請以英文撰寫。 paste_egone=複製的檔案 $1 已經不存在 referer_again=以後不再顯示這個訊息 delete_efailed=無法刪除 $1 : $2 month_11=十一月 rename_title=變更名稱 $1 acl_uedit_uid=使用者 UID 範圍是 main_logout=登出 upload_ewrite=無法寫入到 $1 : $2. link_eexists=$1 已經存在 sday_2=星期二 feedback_ecannot=您不被允許寄送回饋信件 feedback_prog=傳送回饋信件到 $1 使用sendmail程式 $2 main_homepage=首頁 delete_ddesc=您確定要永久的刪除目錄 $1 與其所有內容嗎? acl_home=使用者家目錄 info_perms=權限 info_user=使用者: chooser_dir=$1 的目錄 header_servers=Webmin 伺服器 smonth_12=十二月 info_size=大小: config_nochange=不改變 category_webmin=Webmin paste_ecopy=在您貼上要先剪下或複製 file_type0=目錄 groups_clear=清除 feedback_config=在寄送郵件中包含模組組態設定? acl_gedit_all=所有群組 feedback_ecannot2=您不被允許寄送包含設定組態檔案的回饋信件 acl_uedit_all=所有使用者 sday_3=星期三 no=否 session_header=登入Webmin acl_gedit_none=沒有群組 paste_eself=您不能把檔案貼到本身上 info_apply1=只有這個目錄 config_none=無 acl_rpc0=否 longcategory_info=顯示您的系統資訊的模組 mkdir_eexists=$1 已經存在 right_user=使用者 top_open=開啟 sday_4=星期四 config_title=組態設定 acl_uedit_except=全部使用者除了 smonth_7=七月 acl_feedback=可以寄送回饋信件? header_webmin=Webmin 索引 smonth_2=二月 chooser_title1=選擇檔案... session_mesg=您必須輸入使用者名稱和密碼來登入Webmin 伺服器在 $1上。 groups_title1=選擇群組... feedback_to=傳送回饋到位址 info_setgid3=以群組權限執行 copy_efrom=您不被允許拷貝自 '$1' feedback_configdesc=如果選取此項目,在回饋郵件中會附上相關的模組和模組會用到相關的所有設定檔案。例如 ,如果回饋是關於 使用者和群組 模組,你的 /etc/passwd/etc/shadow檔案會被附加上去。 acl_feedback1=是,但不能包含組態檔案 feedback_emodule=在信件中您選擇了包含模組組態設定,但卻沒有選取模組。 month_1=一月 smonth_6=六月 users_ok=確定 paste_ecfailed=拷貝失敗 : $1 top_upload=上傳 feedback_os=在寄送郵件中包含作業系統資訊? top_new=增加 sday_6=星期六 index_nojava=這個模組需要 Java 才能正確的運作, 但是您的瀏覽器似乎不支援 Java month_8=八月 referer_warn_unknown=警告! Webmin發現程式 $2從不知名的位置連結來的,出現在 Webmin以外。並企圖嘗試在您的伺服器執行危險的指令。 rename_eold=您不被允許改名自 '$1' link_to=連結到: yes=是 acl_rpc2=只有 rootadmin main_title=Webmin $1 在 $2 ($3) chooser_ok=確定 info_own=所有權 referer_title=安全警告 mkdir_eaccess=您不被允許建立 '$1' header_config=模組組態 category_=其他 right_group=群組 users_title1=選擇使用者... session_mesg2=您必須輸入使用者名稱和密碼來登入 right_name=名稱 top_refresh=重讀 groups_sel=選擇的群組 helpsearch=搜尋文件 acl_umask=建立檔案的遮罩 info_sticky=設定位元: help_err=無法顯示說明 top_edit=編輯 top_info=資訊 top_copy=複製 day_1=星期一 upload_title=上傳檔案 chooser_title2=選擇目錄... link_from=連結自: error=錯誤 acl_rpc=可以使用RPC ? month_10=十月 create=建立 upload_file=要上傳的檔案 feedback_text=描述問題或建議 top_paste=貼上 move_eto=您不被允許移動到 '$1' list_eaccess=您不被允許存取這個目錄 feedback_email=您的電子郵件 skill_medium=中等 delete_fdesc=您確定要永久的刪除檔案 $1 嗎? rename_old=舊檔名: users_sel=選擇的使用者 chmod_echmod=變更權限失敗 : $1 acl_rpc1=是 month_7=七月 file_type7=管線 smonth_1=一月 default=預設 info_type=類別: info_link=連結到: groups_cancel=取消 category_net=網路 day_4=星期四 category_syslet=網管 upload_edir=上傳的目錄不存在. smonth_5=五月 header_help=說明... help_epath=遺失說明檔路徑 groups_ok=確定 category_cluster=電腦叢集 chmod_egroup=$1 : 沒有這個群組 rename_eexists=叫做 $1 的檔案已經存在 modify=修改 mkdir_dir=目錄: longcategory_net=網路和網路服務組態模組 emodule=存取拒絕 : 使用者 $1 不允許使用 $2 模組 top_view=檢視 acl_feedback2=是 top_cut=剪下 header_module=模組索引 find_eexist=$1 不存在於 $2 referer_ok=繼續執行Webmin程式 skill_low=新手 sday_5=星期五 save=儲存 feedback_header=回饋內容 month_9=九月 info_efailed=無法重讀 $1 : $2 upload_ok=上傳 session_save=記得上次登入帳號? config_err=儲存組態錯誤 longcategory_hardware=列表機,磁碟和其他硬體組態模組 acl_dirs=只允許存取到目錄 find_eaccess=您不被允許存取 $1 feedback_econfig=您沒有完整的權限來選取模組 right_date=日期 file_type6=設備控制檔 edit_filename=檔案名稱: category_info=資訊 info_read=讀取 main_skill=Skill level main_switch=切換使用者... info_write=寫入 delete=刪除 referer_warn=警告! Webmin發現程式 $2從 URL $1連結來的,出現在 Webmin以外。並企圖嘗試在您的伺服器執行危險的指令。 info_setuid2=以使用者權限執行 config_eaccess=您不被允許存取這個模組 mkdir_title=增加目錄 groups_title2=選擇群組... ok=確定 progress_data2=下載 $1 位元組 link_efailed=連結失敗 : $1 help_eexec=$1 失敗 : $2 delete_ftitle=刪除檔案 rename_efailed=改名失敗 : $1 view_eopen=無法開啟n $1 : $2 top_delete=刪除 index=索引 feedback_mailserver=傳送經由SMTP伺服器 day_3=星期三 feedback_title=回饋Webmin progress_size=下載中 $1 ($2 位元組) .. month_12=十二月 info_group=群組: acl_uedit_group=使用者群組 paste_eover=$1 無法被蓋寫 info_apply3=這個目錄與所有的子目錄 feedback_enoto=沒有填寫傳送回饋位址位置 main_title2=Webmin feedback_err=寄送回饋時發生錯誤 top_rename=改名 efilewrite=寫入$1失敗 : $2 feedback_all=所有模組 month_6=六月 programname=Webmin copy_elink=符號連結失敗 : $1 config_setto=Set to help_eheader=遺失 <標頭> 區段 edit_eaccess=您不被允許儲存 '$1' acl_uedit_only=只有使用者 category_system=系統 smonth_10=十月 longcategory_=無法分類的其他模組 month_3=三月 file_type1=文字檔 delete_dtitle=刪除目錄 day_5=星期五 feedback_via=傳送回饋信件到 $1經由 SMTP伺服器 $2 acl_gedit_except=所有群組除了 acl_follow=是否跟隨符號連結? smonth_9=九月 file_type4=檔案 acl_gedit_gid=群組GID範圍是 session_login=登入 link_title=建立連結 move_afrom=您不被允許移動自 '$1' category_servers=伺服器 rename_ok=改名 info_setgid=設定 GID: progress_done=.. 下載完成 find_edir=$1 不是一個目錄在 $2 upload_efile=沒有選擇要上傳的檔案. smonth_4=四月 day_2=星期二 upload_eperm=您不被允許建立 $1 users_clear=清除 info_other=其他: feedback_desc=這表單可以讓你回報錯誤(bugs)和建議Webmin發展群關於任何問題或所忽略的特色,當按下傳送按鈕後,這頁的內容將會寄到 $1。 edit_eover=$1 無法被蓋寫 progress_nosize=正在下載 $1 .. feedback_mailserver_def=本地sendmail程式 acl_feedback0=否 right_size=大小 file_type2=影像檔 longcategory_webmin=組態Webmin自己的模組 sday_1=星期一 info_apply=套用變更到 users_cancel=取消 acl_uedit=選擇可以看到的使用者 rename_enew=您不被允許改名成 '$1' info_setgid2=檔案繼承群組 file_type5=符號連結 feedback_attach=加入要附上的檔案 smonth_11=十一月 link_efollow=您不被允許建立符號連結 acl_uedit_none=沒有使用者 main_version=版本 $1 在 $2 ($3) upload_dir=上傳到目錄 session_pass=密碼 find=找尋 chmod_euser=$1 : 沒有這個使用者 skill_high=專家 longcategory_cluster=從單一介面管理多重服務 main_return=回到 $1 info_exec=執行 feedback_send=傳送回饋 acl_gedit_only=只有群組 longcategory_system=使用者,檔案系統,工作排程和其他系統設定 rename_new=變更為: upload_efailed=開啟上傳失敗 : $1 info_file=檔案 month_5=五月 chmod_elink=符號連結失敗d : $1 acl_root=檔案選取時的根目錄 groups_all=全部的群組 feedback_name=您的姓名 feedback_osdesc=如果選取此項目,會自動在回饋信件中加上您的作業系統名稱和版本。 info_sticky2=只有擁有者才能刪除檔案 switch_remote_euser=Unix使用者 $1 並不存在 paste_emfailed=移動失敗 : $1 view_enormal=只有一般的檔案可以被檢視 config_header=給 $1 的可組態選項 link_essl=您的系統尚未安裝 Net::SSLeay Perl模組所需要使用的HTTPS連線。 longcategory_servers=web, email, FTP和其他服務的組態模組 view_eaccess=您不被允許存取 $1 mkdir_efailed=建立目錄失敗 : $1 day_6=星期六 info_mod=修改時間: session_clear=清除 edit_title2=建立檔案中 main_feedback=回饋... info_setuid=設定 UID: chmod_eaccess=您不被允許存取 '$1' help_einclude=無法引入 $1 edit_esave=無法儲存檔案 : $1 smonth_8=八月 cancel=取消 session_user=使用者名稱 users_all=全部的使用者 info_path=路徑: edit_enormal=只能編輯一般的檔案 feedback_emodule2=選取的模組不存在 config_ecannot=您不被允許組態這個模組 session_timed_out=連線逾時於$1分鐘 sday_0=星期日 acl_user=以使用者權限存取伺服器上的檔案 reset=重設 progress_data=下載 $1 位元組 ($2 %) upload_conv=是否要改變 DOS 的換行符號? index_title=檔案管理者 day_0=星期日 help_eif=$1 失敗 : $2 feedback_esend=使用sendmail或本地SMTP伺服器傳送回饋郵件錯誤 info_list=列出 users_title2=選擇使用者... info_apply2=這個目錄與其中的檔案 month_2=二月 file_type3=二進位檔 link_efrom=您不被允許連結 '$1' category_hardware=硬體 file/delete.cgi0100755000567100000120000000121210117433454013405 0ustar jcameronwheel#!/usr/local/bin/perl # delete.cgi # Delete some file or directory require './file-lib.pl'; $disallowed_buttons{'delete'} && &error($text{'ebutton'}); &ReadParse(); &webmin_log("delete", undef, $in{'file'}, \%in); &switch_acl_uid_and_chroot(); print "Content-type: text/plain\n\n"; if ($access{'ro'} || !&can_access($in{'file'})) { print &text('delete_eaccess', $in{'file'}),"\n"; exit; } if (-r $in{'file'} && !-d $in{'file'}) { $rv = unlink($in{'file'}); if (!$rv) { print "$!\n"; } else { print "\n"; } } else { $out = &backquote_logged("cd / ; rm -rf ".quotemeta($in{'file'})." 2>&1"); if ($?) { print $out; } else { print "\n"; } } file/TabbedPanel.class0100644000567100000120000000240610061451367014653 0ustar jcameronwheel-Q -. -/ -0 1 23 2 4567 1 8 49:; < => 2 ? @ A B BCDtab LTabSelector;dispLTabbedDisplayPanel;cardLjava/awt/CardLayout;()VCodeLineNumberTable3(Ljava/awt/Color;Ljava/awt/Color;Ljava/awt/Color;)VaddItem)(Ljava/lang/String;Ljava/awt/Component;)Vselect(Ljava/lang/String;)Vchose SourceFileTabbedPanel.javaE FG HG IG !% !"java/awt/BorderLayoutJ KLNorth TabSelector  MNCenterTabbedDisplayPanel !O java/awt/CardLayout  &) &' P) TabbedPaneljava/awt/PanelUtilbody_hiLjava/awt/Color; dark_edge_hibodyjava/awt/Container setLayout(Ljava/awt/LayoutManager;)Vadd<(Ljava/lang/String;Ljava/awt/Component;)Ljava/awt/Component;#(Ljava/awt/Color;Ljava/awt/Color;)Vchoose! !"#**$  !%#zN**Y* * Y+,- Z W**Y+,Z W**YZ$%:M&'#2* +*+,$ ()#1* +*+$&'(*)#% *+$ ./+,file/TabSelector.class0100644000567100000120000000530110061451367014716 0ustar jcameronwheel- (DE D 'F 'GHI J 'K L 'M 'N 'O 'P Q RS 'T UV W X YZ R[ $\ $] Y^ Y_ Y` Ya bc bd Ye Rfg "hi $j 'klmhiLjava/awt/Color;lobknameLjava/util/Vector;chosenIfontLjava/awt/Font;chfont3(Ljava/awt/Color;Ljava/awt/Color;Ljava/awt/Color;)VCodeLineNumberTableaddItem(Ljava/lang/String;)Vchoosepaint(Ljava/awt/Graphics;)V mouseDown(Ljava/awt/Event;II)Z minimumSize()Ljava/awt/Dimension; preferredSize SourceFileTabbedPanel.java 4njava/util/Vector -. /0 java/awt/Font timesRoman 4o 12 pq 32 )* +* ,* rst uv ;< wxjava/lang/String yz {|} ~ {@ 0 0  | o  TabbedPanel 9java/awt/Dimension 4 ?@ TabSelectorjava/awt/Canvas()V(Ljava/lang/String;II)VgetName()Ljava/lang/String; addElement(Ljava/lang/Object;)Vjava/awt/Component getGraphics()Ljava/awt/Graphics; elementAt(I)Ljava/lang/Object;equals(Ljava/lang/Object;)Zsize()Ijava/awt/GraphicssetColor(Ljava/awt/Color;)VwidthheightfillRect(IIII)VdrawLinesetFont(Ljava/awt/Font;)VgetFontMetrics()Ljava/awt/FontMetrics;java/awt/FontMetrics stringWidth(Ljava/lang/String;)I getHeight drawString getParent()Ljava/awt/Container;chose(II)V '()*+*,*-./01232456yI**Y**Y  *Y*   *+ *, *-7;567$89<H=8961*+**7ABC:96_3=%*+****ֱ7GHIJ$G2L;<6 + *+*+****l=*>6h6*+* +`d`dd+`d`dd+* +d+``d+`d+`d+`dd`dd+`dd`dd+* +`d`dd+`d`dd+* +d+``d+`d+`d+d`dd+d`dd+* *+*  +* *:+6+6d+dl`dl` *H7'PQRS+T;UCVIWOXXY`Zt[\]^_`abefg)h1i=jMk[lkm}npqrstuvwVy=>6kC****ll***!"**#7} ~!)A?@6$ $Y2%7A@6*&7BCfile/BorderPanel.java0100755000567100000120000000202510061472155014521 0ustar jcameronwheelimport java.awt.*; class BorderPanel extends Panel { int border = 5; // size of border Color col1 = Util.light_edge; Color col2 = Util.dark_edge; Color body; BorderPanel() { } BorderPanel(int w) { border = w; } BorderPanel(int w, Color cb) { border = w; body = cb; } BorderPanel(int w, Color c1, Color c2) { border = w; col1 = c1; col2 = c2; } BorderPanel(int w, Color c1, Color c2, Color cb) { border = w; col1 = c1; col2 = c2; body = cb; } BorderPanel(Color c1, Color c2) { col1 = c1; col2 = c2; } public Insets insets() { return new Insets(border+2, border+2, border+2, border+2); } public void paint(Graphics g) { if (body != null) { g.setColor(body); g.fillRect(0, 0, size().width, size().height); } super.paint(g); int w = size().width-1, h = size().height-1; g.setColor(col1); for(int i=0; i Q? 0) G7 AK Q6LineNumberTable ConstantValue LCbButton;Ljava/lang/String;imgsrc(Ljava/lang/String;)Vadd ExceptionssetTextbut SourceFileChoose..clickjava/awt/BorderLayoutCbButton()V(Ljava/awt/Image;)VCbImageChooser.javaLjava/awt/Image;'(Ljava/lang/String;LCbButtonCallback;)Vimg (LCbButton;)VCenter<(Ljava/lang/String;Ljava/awt/Component;)Ljava/awt/Component;(LCbImageChooser;)Vjava/awt/PanelfilewinIjava/awt/ContainerCbImageFileWindowCbButtonCallback ScrollImagesetImageCodeLocalVariablesimgwLCbImageFileWindow;imgh setLayoutCbImageChooser(Ljava/awt/LayoutManager;)V%(Ljava/awt/Image;Ljava/lang/String;)V  ;9+*JBLB0)AKQ7H#*+'  QPH]5**Y** Y*Z W*+,,'%4GPHO'*+*,****' &3<H7+** *'#$!18file/save_export.cgi0100775000567100000120000000764710026221343014515 0ustar jcameronwheel#!/usr/local/bin/perl # save_export.cgi # Update, create or delete an NFS export require './file-lib.pl'; $disallowed_buttons{'sharing'} && &error($text{'ebutton'}); &ReadParse(); print "Content-type: text/plain\n\n"; if ($access{'ro'} || $access{'uid'}) { # User has no access to NFS print "0\n"; exit; } &read_acl(\%acl, undef); %einfo = &get_module_info("exports"); %dinfo = &get_module_info("dfsadmin"); %binfo = &get_module_info("bsdexports"); if (%einfo && &check_os_support(\%einfo)) { # Linux NFS exports &module_check("exports"); &foreign_require("exports", "exports-lib.pl"); %econfig = &foreign_config("exports"); &lock_file($econfig{'exports_file'}); foreach $e (&foreign_call("exports", "list_exports")) { push(@{$exp{$e->{'dir'}}}, $e); } if ($in{'delete'}) { # Delete all exports for some dir foreach $e (reverse(@{$exp{$in{'path'}}})) { &foreign_call("exports", "delete_export", $e); } } else { # Adding or updating an export if (!$in{'new'}) { # Updating, so delete old exports first foreach $e (reverse(@{$exp{$in{'path'}}})) { $host{$e->{'host'}} = $e; &foreign_call("exports", "delete_export", $e); } } for($i=0; $in{"host$i"}; $i++) { $h = $in{"host$i"} eq '*' ? '' : $in{"host$i"}; $e = $host{$h}; $e = { 'active' => 1, 'host' => $h, 'dir' => $in{'path'} } if (!$e); delete($e->{'options'}->{'ro'}); if ($in{"ro$i"}) { $e->{'options'}->{'ro'} = ''; } delete($e->{'options'}->{'all_squash'}); delete($e->{'options'}->{'no_root_squash'}); if ($in{"squash$i"} == 0) { $e->{'options'}->{'all_squash'} = ''; } elsif ($in{"squash$i"} == 2) { $e->{'options'}->{'no_root_squash'} = ''; } &foreign_call("exports", "create_export", $e); } } &unlock_file($econfig{'exports_file'}); &system_logged("$econfig{'portmap_command'} >/dev/null 2>&1 /dev/null 2>&1"); &webmin_log($in{'delete'} ? 'delete' : $in{'new'} ? 'create' : 'modify', 'export', $in{'path'}); print "1\n"; } elsif (%dinfo && &check_os_support(\%dinfo)) { # Solaris NFS shares &module_check("dfsadmin"); &foreign_require("dfsadmin", "dfs-lib.pl"); %iconfig = &foreign_config("dfsadmin"); &lock_file($iconfig{'dfstab_file'}); @shlist = &foreign_call("dfsadmin", "list_shares"); foreach $s (@shlist) { $share = $s if ($s->{'dir'} eq $in{'path'}); } if ($in{'delete'}) { # Delete existing share &foreign_call("dfsadmin", "delete_share", $share); } elsif ($in{'new'}) { # Create new share foreach $r ('ro', 'rw', 'root') { if ($in{$r} ne '-') { $in{$r} =~ s/\s+/:/g; $opts->{$r} = $in{$r}; } } $share->{'dir'} = $in{'path'}; $share->{'desc'} = $in{'desc'}; $share->{'opts'} = &foreign_call("dfsadmin", "join_options", $opts); &foreign_call("dfsadmin", "create_share", $share); } else { # Update existing share $opts = &foreign_call("dfsadmin", "parse_options", $share->{'opts'}); foreach $r ('ro', 'rw', 'root') { if ($in{$r} eq '-') { delete($opts->{$r}); } else { $in{$r} =~ s/\s+/:/g; $opts->{$r} = $in{$r}; } } $share->{'dir'} = $in{'path'}; $share->{'desc'} = $in{'desc'}; $share->{'opts'} = &foreign_call("dfsadmin", "join_options", $opts); &foreign_call("dfsadmin", "modify_share", $share); } &unlock_file($iconfig{'dfstab_file'}); # Apply changes to NFS daemon &system_logged("$iconfig{'unshare_all_command'} >/dev/null 2>&1"); &system_logged("$iconfig{'share_all_command'} >/dev/null 2>&1"); &webmin_log($in{'delete'} ? 'delete' : $in{'new'} ? 'create' : 'modify', 'export', $in{'path'}); print "1\n"; } elsif (%binfo && &check_os_support(\%binfo)) { # BSD NFS exports &module_check("bsdexports"); } else { # No NFS modules installed or supported print "0\n"; } sub module_check { if (!$acl{$base_remote_user,$_[0]}) { print "0\n"; exit; } } file/list_exports.cgi0100775000567100000120000000452210025212304014676 0ustar jcameronwheel#!/usr/local/bin/perl # list_exports.cgi # Output info about NFS exports require './file-lib.pl'; print "Content-type: text/plain\n\n"; if ($access{'uid'}) { # User has no access to NFS print "0\n"; exit; } &read_acl(\%acl, undef); %einfo = &get_module_info("exports"); %dinfo = &get_module_info("dfsadmin"); #%binfo = &get_module_info("bsdexports"); # too hard if (%einfo && &check_os_support(\%einfo)) { # Linux NFS exports &module_check("exports"); if (!&has_command("rpc.nfsd") && !&has_command("nfsd")) { print "0\n"; exit; } print "1\n"; &foreign_require("exports", "exports-lib.pl"); foreach $e (&foreign_call("exports", "list_exports")) { push(@{$exp{$e->{'dir'}}}, $e) if ($e->{'dir'} !~ /:/ && $e->{'host'} !~ /:/); } foreach $d (keys %exp) { local $host; foreach $e (@{$exp{$d}}) { local $o = $e->{'options'}; $host .= sprintf ":%s:%d:%d", $e->{'host'} ? $e->{'host'} : '*', defined($o->{'ro'}), defined($o->{'all_squash'}) ? 0 : defined($o->{'no_root_squash'}) ? 2 : 1; } print &make_chroot($d),$host,"\n"; } } elsif (%dinfo && &check_os_support(\%dinfo)) { # Solaris NFS shares &module_check("dfsadmin"); print "2\n"; &foreign_require("dfsadmin", "dfs-lib.pl"); foreach $s (&foreign_call("dfsadmin", "list_shares")) { $opts = &foreign_call("dfsadmin", "parse_options",$s->{'opts'}); $opts->{'ro'} = '-' if (!defined($opts->{'ro'})); $opts->{'ro'} =~ s/:/ /g; $opts->{'rw'} = '-' if (!defined($opts->{'rw'})); $opts->{'rw'} =~ s/:/ /g; $opts->{'root'} = '-' if (!defined($opts->{'root'})); $opts->{'root'} =~ s/:/ /g; printf "%s:%s:%s:%s:%s\n", &make_chroot($s->{'dir'}), $opts->{'ro'}, $opts->{'rw'}, $opts->{'root'}, $s->{'desc'}; } } elsif (%binfo && &check_os_support(\%binfo)) { # BSD NFS exports &module_check("bsdexports"); print "3\n"; &foreign_require("bsdexports", "bsdexports-lib.pl"); foreach $e (&foreign_call("bsdexports", "list_exports")) { foreach $d (@{$e->{'dirs'}}) { printf "%s:%s", $d, $e->{'ro'} ? 1 : 0; if ($e->{'network'}) { printf ":%s/%s\n", $e->{'network'}, $e->{'mask'}; } else { foreach $h (@{$e->{'hosts'}}) { print ":$h"; } print "\n"; } } } } else { # No NFS modules installed or supported print "0\n"; } sub module_check { if (!$acl{$base_remote_user,$_[0]}) { print "0\n"; exit; } } file/SambaShare.class0100664000567100000120000000243210107637154014522 0ustar jcameronwheel-V +, - . /0 12 3 4 56 7 89 +: ; <=> ?@AB CDEpathLjava/lang/String; availableZwritableguestIcomment(Ljava/lang/String;)VCodeLineNumberTable*(Ljava/lang/String;ZZILjava/lang/String;)Vparams()Ljava/lang/String; SourceFileFileManager.java "FStringSplitter "G H( 1I JK  L MN  !java/lang/StringBufferpath= OPQ RS &available= OT &writable=&guest= &comment= U( SambaSharejava/lang/Object()V(Ljava/lang/String;C)V nextTokenjava/lang/Stringequals(Ljava/lang/Object;)Zjava/lang/IntegerparseInt(Ljava/lang/String;)Iappend,(Ljava/lang/String;)Ljava/lang/StringBuffer; FileManagerurlize&(Ljava/lang/String;)Ljava/lang/String;(I)Ljava/lang/StringBuffer;toString  !"#$yE*Y+:M*,*,*, *, *, %" B C D E$ F1 G< HD I"&$P **+** * * % L M N O P Q R'($u] Y*** * * % V)*file/save_share.cgi0100775000567100000120000000506310026221345014266 0ustar jcameronwheel#!/usr/local/bin/perl # save_share.cgi # Create, update or delete a samba share require './file-lib.pl'; $disallowed_buttons{'sharing'} && &error($text{'ebutton'}); &ReadParse(); print "Content-type: text/plain\n\n"; if ($access{'ro'} || $access{'uid'}) { # User has no access to samba print "0\n"; exit; } %minfo = &get_module_info("samba"); &read_acl(\%acl, undef); if (!%minfo || !&check_os_support(\%minfo) || !$acl{$base_remote_user,'samba'}) { # Samba module not installed or supported print "0\n"; exit; } &foreign_require("samba", "samba-lib.pl"); %sconfig = &foreign_config("samba"); &lock_file($sconfig{'smb_conf'}); @shares = &foreign_call("samba", "list_shares"); if ($in{'delete'}) { # Deleting an old share foreach $s (@shares) { &foreign_call("samba", "get_share", $s); if ($samba::share{'path'} && $samba::share{'path'} eq $in{'path'}) { &foreign_call("samba", "delete_share", $s); last; } } print "1\n"; } elsif ($in{'new'}) { # Creating a new share map { $taken{$_}++ } @shares; if ($in{'path'} =~ /\/([^\/]+)$/) { $base = $1; } else { $base = "root"; } if ($taken{$base}) { for($i=2; $taken{$base.$i}; $i++) { } $base = $base.$i; } $samba::share{'path'} = $in{'path'}; $samba::share{'available'} = $in{'available'} ? 'yes' : 'no'; $samba::share{'writable'} = $in{'writable'} ? 'yes' : 'no'; $samba::share{'comment'} = $in{'comment'}; if ($in{'guest'} == 2) { $samba::share{'public'} = 'yes'; $samba::share{'guest only'} = 'yes'; } elsif ($in{'guest'} == 1) { $samba::share{'public'} = 'yes'; } &foreign_call("samba", "create_share", $base); print "1\n"; } else { # Updating an existing share foreach $s (@shares) { &foreign_call("samba", "get_share", $s); if ($samba::share{'path'} && $samba::share{'path'} eq $in{'path'}) { # found the share to update $samba::share{'available'} = $in{'available'} ? 'yes' : 'no'; $samba::share{'writable'} = $in{'writable'} ? 'yes' : 'no'; $samba::share{'comment'} = $in{'comment'}; if ($in{'guest'} == 2) { $samba::share{'public'} = 'yes'; $samba::share{'guest only'} = 'yes'; } elsif ($in{'guest'} == 1) { $samba::share{'public'} = 'yes'; delete($samba::share{'guest only'}); } else { delete($samba::share{'public'}); delete($samba::share{'guest only'}); } &foreign_call("samba", "modify_share", $s, $s); last; } } print "1\n"; } &unlock_file($sconfig{'smb_conf'}); &webmin_log($in{'delete'} ? 'delete' : $in{'new'} ? 'create' : 'modify', 'share', $in{'path'}); file/StringJoiner.class0100664000567100000120000000141710061451367015132 0ustar jcameronwheel-1    ! " #$ #% &'(sepCstrLjava/lang/StringBuffer;countI(C)VCodeLineNumberTableadd(Ljava/lang/String;)VtoString()Ljava/lang/String; SourceFileStringSplitter.java )java/lang/StringBuffer    *+, -. /0  StringJoinerjava/lang/Object()Vappend(C)Ljava/lang/StringBuffer;java/lang/StringcharAt(I)Clength()I  B**Y**IDEJKU***W=-+>* \ *\W*W+ *Y`& QRSTU6V?SJXTY * _file/list_shares.cgi0100775000567100000120000000226107363511746014504 0ustar jcameronwheel#!/usr/local/bin/perl # list_shares.cgi # Output info about samba shares require './file-lib.pl'; print "Content-type: text/plain\n\n"; if ($access{'uid'}) { # User has no access to samba print "0\n"; exit; } %minfo = &get_module_info("samba"); &read_acl(\%acl, undef); if (!%minfo || !&check_os_support(\%minfo) || !$acl{$base_remote_user,'samba'}) { # Samba module not installed or supported print "0\n"; exit; } &foreign_require("samba", "samba-lib.pl"); %sconfig = &foreign_config("samba"); if (!-r $sconfig{'smb_conf'} || !&has_command($sconfig{'samba_server'})) { # Samba not installed print "0\n"; exit; } print "1\n"; foreach $s (&foreign_call("samba", "list_shares")) { &foreign_call("samba", "get_share", $s); if ($s ne 'global' && $s ne 'homes' && $s ne 'printers' && $samba::share{'path'} =~ /^\/[^\%\s]*$/ && $samba::share{'printable'} !~ /true|yes/i) { printf "%s:%s:%s:%s:%s\n", $samba::share{'path'}, $samba::share{'available'} =~ /no|false/i ? 0 : 1, $samba::share{'writable'} =~ /yes|true/i ? 1 : 0, $samba::share{'guest only'} =~ /yes|true/i ? 2 : $samba::share{'public'} =~ /yes|true/i ? 1 : 0, $samba::share{'comment'}; } } file/DFSAdminExport.class0100664000567100000120000000261310107637154015304 0ustar jcameronwheel-S -. / 0 1 2 3 4 567 8 9: 0; -< = >?@ABC DEFpathLjava/lang/String;descrorwroot(Ljava/lang/String;)VCodeLineNumberTable](Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Vsplit'(Ljava/lang/String;)[Ljava/lang/String;params()Ljava/lang/String; SourceFileFileManager.java "GStringSplitter "H I*    ! java/util/StringTokenizer "J KLjava/lang/Stringjava/lang/StringBufferpath= MNO PQ&ro=&rw=&root=&desc= R*DFSAdminExportjava/lang/Object()V(Ljava/lang/String;C)V nextToken'(Ljava/lang/String;Ljava/lang/String;)V countTokens()Iappend,(Ljava/lang/String;)Ljava/lang/StringBuffer; FileManagerurlize&(Ljava/lang/String;)Ljava/lang/String;toString  !"#$l8*Y+:M*,*,*,*,*, %" e f g h i' j/ k7 l"&$P **+*, *-**% o p q r s t u'($Y- Y+ M, N6-,S--% y z { |! {+ })*$nVY***** % +,file/StringSplitter.class0100664000567100000120000000215510061451367015512 0ustar jcameronwheel-? #$ # % &' # ( )* )+ , - . /01partsLjava/util/Vector;posI(Ljava/lang/String;C)VCodeLineNumberTable countTokens()I hasMoreTokens()Z nextToken()Ljava/lang/String; gettokens()Ljava/util/Vector; SourceFileStringSplitter.java 2java/util/Vector  java/lang/StringBuffer 345 67 8 9: ; <= >StringSplitterjava/lang/Object()V addElement(Ljava/lang/Object;)Vjava/lang/StringcharAt(I)Clengthappend(C)Ljava/lang/StringBuffer;size elementAt(I)Ljava/lang/Object;toString!**Y**YYN6Q+ 6\+ d-+ W#*YYN - W+ 6   $*2DU[nu% * *d ,** 'I)** **YZ` ./'1 *8!"file/LinuxExport.class0100664000567100000120000000276010107637154015021 0ustar jcameronwheel-^ ./ 0 1 2 34 5 6 78 9 :; <= .> ? @AB C DEFGHIJpathLjava/lang/String;host[Ljava/lang/String;ro[Zsquash[I(Ljava/lang/String;)VCodeLineNumberTableN(Ljava/lang/String;[Ljava/lang/String;[Ljava/lang/String;[Ljava/lang/String;)Vparams()Ljava/lang/String; SourceFileFileManager.java %KStringSplitter %L M+  NOjava/lang/String  !" #$1 PQR ST UVjava/lang/StringBufferpath= WXY Z[&count= W\ ]+&host=&ro&squash LinuxExportjava/lang/Object()V(Ljava/lang/String;C)V nextToken countTokens()Iequals(Ljava/lang/Object;)Zjava/lang/IntegerparseInt(Ljava/lang/String;)I hasMoreTokens()Zappend,(Ljava/lang/String;)Ljava/lang/StringBuffer; FileManagerurlize&(Ljava/lang/String;)Ljava/lang/String;(I)Ljava/lang/StringBuffer;toString  !"#$%&'n*Y+:M*,,l>** * 6/*,S* , T* , O,б(6     & - 4 : E U c m %)'* **+(  *+'Y**L=Y+*2LY+* 3LY+* .L*z+( ' , U ,-file/SharingWindow.class0100664000567100000120000002360110107637154015300 0ustar jcameronwheel-                      (   ,   !"# $% & '( )* + , -./ 0 1 2 3456 78 9: ;<= L> ? @A B C D E F G H I JKLM N O PQ R ST U V !W X YZ k[ k\]^ p_`a bc rd efg hi jk lm ln o pqr s t u v wx  y z {| }~ u   u     l   R R R  Rsave_b LCbButton;cancel_bfile LRemoteFile;filemgr LFileManager;sshare LSambaShare;dexportLDFSAdminExport;lexport LLinuxExport;samba_onLjava/awt/Checkbox; samba_off writable_on writable_off available_on available_offguest_on guest_off guest_onlycommentLjava/awt/TextField;descnfs_onnfs_offrwhostsrohosts roothostsrw[Ljava/awt/Checkbox;roroothost[Ljava/awt/TextField;lro[Ljava/awt/Choice;squash(LRemoteFile;LFileManager;)VCodeLineNumberTableclick (LCbButton;)Vsetup_leftright3(Ljava/awt/Panel;Ljava/awt/Panel;Ljava/awt/Panel;)Vadd_itemI(Ljava/lang/String;Ljava/awt/Component;Ljava/awt/Panel;Ljava/awt/Panel;)V add_hostsn(Ljava/lang/String;Ljava/lang/String;[Ljava/awt/Checkbox;Ljava/awt/Panel;Ljava/awt/Panel;)Ljava/awt/TextField; squashbox(I)Ljava/awt/Choice;robox(Z)Ljava/awt/Choice; opts_panel:(Ljava/awt/Component;Ljava/awt/Component;)Ljava/awt/Panel;export_options(LLinuxExport;)V SourceFileFileManager.java java/awt/Checkbox  share_title      SambaShare   LinuxExport DFSAdminExport java/awt/BorderLayout java/awt/Paneljava/awt/GridLayout java/awt/CheckboxGroup share_soff    share_son North  LinedPanel share_sheader  java/awt/TextField     share_comment yes  no share_available  share_writable share_only   share_guestCenter share_noff  share_non  share_nheader java/awt/Label share_host share_opts  java/awt/Choice     share_descshare_ro-  share_rw   share_root     TabbedPanel share_samba  share_nfsjava/awt/FlowLayout CbButtonsave.gif save   cancel.gifcancel South     java/lang/StringBuffersave_share.cgi?    save_share.cgi?delete=1&   save_share.cgi?new=1& save_export.cgi?save_export.cgi?delete=1& save_export.cgi?new=1&    West share_none  share_all  share_listedshare_s0 share_s1share_s2  share_lrw share_lroEastjava/lang/String   SharingWindow FixedFrameCbButtonCallback()V RemoteFilepathLjava/lang/String; FileManagertext8(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;java/awt/FramesetTitle(Ljava/lang/String;)VstabLjava/util/Hashtable;java/util/Hashtableget&(Ljava/lang/Object;)Ljava/lang/Object;ntabnfsmodeIjava/awt/Container setLayout(Ljava/awt/LayoutManager;)V(II)V&(Ljava/lang/String;)Ljava/lang/String;.(Ljava/lang/String;Ljava/awt/CheckboxGroup;Z)Vadd*(Ljava/awt/Component;)Ljava/awt/Component;<(Ljava/lang/String;Ljava/awt/Component;)Ljava/awt/Component;(Ljava/lang/String;I)VfixedLjava/awt/Font;java/awt/ComponentsetFont(Ljava/awt/Font;)V availableZwritableguest(IIII)V[Ljava/lang/String;[Z[I getParent()Ljava/awt/Container;remove(Ljava/awt/Component;)V sambamodeaddItem)(Ljava/lang/String;Ljava/awt/Component;)V(I)V get_image$(Ljava/lang/String;)Ljava/awt/Image;8(Ljava/awt/Image;Ljava/lang/String;ILCbButtonCallback;)VUtil recursiveBodyjava/awt/WindowpackshowgetState()Zjava/awt/TextComponentgetText()Ljava/lang/String;append,(Ljava/lang/String;)Ljava/lang/StringBuffer;paramstoStringget_text'(Ljava/lang/String;)[Ljava/lang/String;*(Ljava/lang/String;ZZILjava/lang/String;)Vput8(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;N(Ljava/lang/String;[Ljava/lang/String;[Ljava/lang/String;[Ljava/lang/String;)V](Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V showing_files show_files(LRemoteFile;)Zdisposeequals(Ljava/lang/Object;)Zlength()IselecttrimgetSelectedIndex   y*****+*,*** ** * ** N**-* *-*YY:Y:Y:YY:YY:*Y* *!Z"#W*Y*$ *!Z%#W&'W(Y*) *: * +*,Y*- *./0*0*12**3 *04Y:  YY:  *Y*5  * *6!Z7#W *Y*8  **6!Z9#W**:  4Y:  YY:  *Y*5  * *;!Z<#W *Y*8  **;!Z=#W**>  4Y:YY:*Y*? **@!ZA#W*Y*5 **@!ZB#W*Y*8 **@!ZC#W**D 4E 'WY:Y:Y:YY:YY:*Y*F -!ZG#W*Y*H -!ZI#W&'W(Y*J *:*+*rYKYKLY*M N#WLY*O N#W* *P6*`,Q*`RS*`RT6*Q,Y*P2/S*Q2*12*S**U3VS*T**W.XS*Q2#W**S2*T2Y#W*Q,Y-/S*Q2*12*S*VS*T*XS*Q2#W**S2*T2Y#W**,Y*- *Z/[*[*12**\ *[4***] *^ *_*`a***b *^ *c*`d***e *^ *f*`g*2h*2i*E'W*jB*8kYl:*m n*o n*E'W,*j*E'W* *E'WY:pYq*rY*st*u *vZw#W*rY*xt*y *vZz#W*{'W*|*}*~j    & : R d o z  1 ; M W w        3 < J S        T          7 A S ] h x          ! "0 #E $R %j t ' ( ) * + , . 0 1 2% 4Q 7} : = ? A D E F G H J& K2 L< ME PN Q[ R U X Y Z [ \ 2+*w **%u**76**<;**A*B@**0.*Y*M*9*Y*M* *W*%~*Y* *7*<*A*B*0* **W*Y*M**9*I/***Y*M}*9*Y*M**W@*I6*Y* ***Y*M***W***I**[Z**2^*2- *a_**2^*2- *dc**2^ *gf*Y*M*9*Y*M**W*I*Y* *[*2^*2- *a*2^*2- *d*2^ *g*Y*M***W***W*+*z*. ` b d' e5 fY hg i l n p r t z, {M X i q         3 > O ]      ( = G      % - 1 V+YY:Y,'WE-'W,Y-Y+&'W&  ) 2 ? L U `4-LY+N#WY:Y,'W#W  " + 3  ӻY:YY:-Y* ,^![S#W-Y* ,![S#W-Y* ,![S#W*+4,Y,^-,/:*12*-4.  B j b6RYM,* ,* ,* ,,   " / 4 Y1RYM,* ,* ,,   " / M%YN-Y-+'W-,'W-    # =>*Q2*Q+P+U+ W66X*Q2B+P*Q2S+U*S2T+W*T2O*QB     % - 4 ; D W h     file/StringSplitter.java0100644000567100000120000000366210061451363015324 0ustar jcameronwheelimport java.util.Vector; // StringSplitter // A stringsplitter object splits a string into a number of substrings, // each separated by one separator character. Separator characters can be // included in the string by escaping them with a \ public class StringSplitter { Vector parts = new Vector(); int pos = 0; StringSplitter(String str, char sep) { StringBuffer current; parts.addElement(current = new StringBuffer()); for(int i=0; i".&html_escape($object).""); } elsif ($action eq 'save' || $action eq 'chmod' || $action eq 'mkdir' || $action eq 'upload' || $action eq 'delete') { return &text("log_${action}", "".&html_escape($object).""); } elsif ($action eq 'link' || $action eq 'move' || $action eq 'copy') { return &text("log_${action}", "".&html_escape($object)."", "".&html_escape($p->{'to'}).""); } elsif ($action eq 'relink') { return &text('log_relink', "".&html_escape($object)."", "".&html_escape($p->{'linkto'}).""); } elsif ($action eq 'rename') { return &text('log_move', "".&html_escape($object)."", "".&html_escape($p->{'new'}).""); } elsif ($action eq 'attr') { return &text('log_attr', "".&html_escape($object).""); } elsif ($action eq 'acl') { return &text('log_acl', "".&html_escape($object).""); } else { return undef; } } file/SearchWindow.class0100664000567100000120000001670010107637154015114 0ustar jcameronwheel-         =\)?G>     '  '  / 1 3         ?  B B B ?      ! "# $%& '() /*+ ,- [. /01 23 45 67 689 h: 6;< => ? @ ABC p:D EFG ?HI 3JKLMN OPQRSTUV W XYZ [ \] ^ _ ` a bcB@de f g h ij k l m n o p q rstuvtab LTabbedPanel;list LMultiColumn;search_b LCbButton;cancel_bfilemgr LFileManager;dirLjava/awt/TextField;matchusergroupuanyLjava/awt/Checkbox;uselganygseltypeLjava/awt/Choice;sanysmoreslessmorelessxonxofftypes[Ljava/lang/String;results [LRemoteFile;"(Ljava/lang/String;LFileManager;)VCodeLineNumberTableadd_itemI(Ljava/lang/String;Ljava/awt/Component;Ljava/awt/Panel;Ljava/awt/Panel;)Vclick (LCbButton;)V singleClick(LMultiColumn;I)V doubleClickheadingClicked SourceFileFileManager.java wjava/lang/Stringfdlp  search_titlex yz{ |}java/awt/BorderLayout~  TabbedPanel java/awt/Panel search_crit java/awt/GridLayout  right_name right_size MultiColumn      search_list search_dirjava/awt/TextField   search_match  java/awt/FlowLayout java/awt/CheckboxGroupjava/awt/Checkbox search_any    search_user  search_groupjava/awt/Choice java/lang/StringBuffer search_types_   } search_type search_size  search_more  search_less yes no  search_xdevWest EastCenterCbButtonsave.gif  search_ok   cancel.gifcancel South  w wjava/awt/Label } w search.cgi     ErrorWindow search_edir?dir= z search_ematch&match= &type=  search_euser&user= search_egroup&group= java/lang/Exception search_esize &size=%2Bc &size=%2D&xdev=1  [Ljava/lang/Object; RemoteFile java/lang/Object      B kB MB w  } /         SearchWindow FixedFrameCbButtonCallbackMultiColumnCallback()V FileManagertext&(Ljava/lang/String;)Ljava/lang/String;java/awt/FramesetTitle(Ljava/lang/String;)Vjava/awt/Container setLayout(Ljava/awt/LayoutManager;)VaddItem)(Ljava/lang/String;Ljava/awt/Component;)V(II)V+([Ljava/lang/String;LMultiColumnCallback;)V setWidths([F)V setDrawLines(Z)VfixedLjava/awt/Font;setFont(Ljava/awt/Font;)V(Ljava/lang/String;I)Vjava/awt/Component(I)V(III)V.(Ljava/lang/String;Ljava/awt/CheckboxGroup;Z)Vadd*(Ljava/awt/Component;)Ljava/awt/Component;append,(Ljava/lang/String;)Ljava/lang/StringBuffer;toString()Ljava/lang/String;<(Ljava/lang/String;Ljava/awt/Component;)Ljava/awt/Component; get_image$(Ljava/lang/String;)Ljava/awt/Image;8(Ljava/awt/Image;Ljava/lang/String;ILCbButtonCallback;)VUtil recursiveBody(Ljava/awt/Component;)Vjava/awt/Windowpackshowdisposejava/awt/TextComponentgetTexttrimlength()IcharAt(I)CurlizegetSelectedIndexgetState()Zjava/lang/IntegerparseInt(Ljava/lang/String;)I setCursorget_text'(Ljava/lang/String;)[Ljava/lang/String;.(LFileManager;Ljava/lang/String;LRemoteFile;)VtmapIpathLjava/lang/String;sizeJspad(JI)Ljava/lang/String;clearaddItems([[Ljava/lang/Object;)Vselect lastIndexOf(I)I substring(II)Ljava/lang/String;find_directory!(Ljava/lang/String;Z)LRemoteFile; showing_listnameequals(Ljava/lang/Object;)Zfilesscrollto !**YSYSYSYSYS*, **  * Y*YYN- Y**  -Y:Y:YYYSY*  SY*  S:YQYQYQ:*Y* * !* "* * #$** % * ** & *'Y+(Z)**)* #+** , *'Y-Z.**.* #+Y:/Y01Y2: *3Y* 4  5Z67W*3Y 5Z87W*'Y -Z97W*9* #+** : *Y:  /Y01Y2:  *3Y* 4  5Z;7W *3Y 5Z<7W *'Y -Z=7W*=* #+** >  **?Y@A6 -*A* BYCDE* 2EF G  *** H *A*1Y2: ** I *3Y* 4  5ZJ*Y:/Y0*3Y* K  5ZL7W*'Y -ZM7W*M* #+**Y:/Y0*3Y* N  5ZO7W*'Y -ZP7W*P* #+**1Y2:Y:/Y0*3Y* Q 5ZR7W*3Y* S 5ZT7W** U *-VWW-XWW*Y*WWY:/YZ*[Y* \]* ^ *_Z`7W*[Y* a]* b *_Zc7W*dWW*e*f*g.K 1 -% 2* 37 6B 7M 8U 9` :q ; < = ? A B C D E F H7 IE Kd Lr N{ O P Q R S T U W X Y Z< [S \g ]u ^ ` a b a c e f i j, kJ l^ ml nx o p q r s t v w x y z9 {L }^ ~i r        `4-hY+i7WY: YV,WW7W  " + 3  +*c *js+*`kkM*)lmN-n -o/pY* q rWBYC,EsE*W-tEFM*.lm:npY* u rWBYC,EvE*WtEFM*Aw&BYC,ExE**Aw2EFM*8yG*9lm:npY* z rWBYC,E{E*WtEFM*<yG*=lm:npY* | rWBYC,E}E*WtEFM*LyM*Mlm:~W:pY*  rWBYC,EEEEFMT*OyJ*Plm:~W:pY*  rWBYC,EEEEFM*TyBYC,EEFM** ,:2npY2rWd:*d6޻Y* 2:*dSd[S:  * 2]S S) BYC* EEFS`- BYC* mEEFS* BYC* mEEFS * * ** % * B     % 6 G H e q y   $ . : B S T r |            ! 5 : D N Z [ e q w         ( O Z a j z   *2N-/6 -:* W* :672-"* `* `*j6   ( 3 < B T b p s ~   file/search.cgi0100775000567100000120000000163310117156766013431 0ustar jcameronwheel#!/usr/local/bin/perl # search.cgi # Find files under some directory require './file-lib.pl'; $disallowed_buttons{'search'} && &error($text{'ebutton'}); &ReadParse(); &switch_acl_uid(); print "Content-type: text/plain\n\n"; if (!&can_access($in{'dir'})) { print $text{'search_eaccess'},"\n"; } $in{'dir'} =~ s/^\/+/\//g; if ($in{'dir'} ne '/') { $in{'dir'} =~ s/\/$//; } $cmd = "find ".quotemeta(&unmake_chroot($in{'dir'}))." -name ".quotemeta($in{'match'}); if ($in{'type'}) { $cmd .= " -type $in{'type'}"; } if ($in{'user'}) { $cmd .= " -user $in{'user'}"; } if ($in{'group'}) { $cmd .= " -group $in{'group'}"; } if ($in{'size'}) { $cmd .= " -size $in{'size'}"; } if ($in{'xdev'}) { $cmd .= " -mount"; } print "\n"; open(CMD, "$cmd 2>/dev/null |"); while($f = ) { chop($f); local $rf = &make_chroot($f); local $fil = &file_info_line($f, $rf); print $fil,"\n" if (defined($fil)); } close(CMD); file/ResizePanel.class0100664000567100000120000000543410061451367014741 0ustar jcameronwheel-v = > ? @ A B C DE DF GH I JK LM LN O JP Q R GS GT GU GVW X YZ[\oneLjava/awt/Component;twoposIratioDverticalZdraggingborder-(Ljava/awt/Component;Ljava/awt/Component;DZ)VCodeLineNumberTablepaint(Ljava/awt/Graphics;)V mouseDown(Ljava/awt/Event;II)Z mouseDragmouseUpaddLayoutComponent)(Ljava/lang/String;Ljava/awt/Component;)VlayoutContainer(Ljava/awt/Container;)VminimumLayoutSize*(Ljava/awt/Container;)Ljava/awt/Dimension;preferredLayoutSizeremoveLayoutComponent(Ljava/awt/Component;)V SourceFileResizePanel.java (] ! '!   $% "#^ _` abc de f!g hij kl mn o! pi &% 45 q] rn s] tejava/awt/Dimension (u 67 ResizePaneljava/awt/Paneljava/awt/LayoutManager()Vjava/awt/Container setLayout(Ljava/awt/LayoutManager;)Vadd*(Ljava/awt/Component;)Ljava/awt/Component;java/awt/Componentsize()Ljava/awt/Dimension;heightjava/awt/ColorwhiteLjava/awt/Color;java/awt/GraphicssetColor(Ljava/awt/Color;)VdrawLine(IIII)Vwidthblackrepaintreshapelayout minimumSize(II)V! !"#$%&%'! ()*v6***d*+*,**)***+ W*, W+.  $)/5,-*Z* M**, *k+ +*d*`+*d,d*d+ +,d*`,d*d+,d*`*`|*,*k+ +*d*`+*d*d, d+ +*`, d*d, d+*`, d*`+F #$"%4&K'R(n)./012346./*wK* :**d*`***d*`**+<=!@&BAEFG0/*** :*M***' *d* *d*** oJ***'*d**d***o****+JMO PRS'T5UFWKX^\f]q^_abdeg1/*.*6*+mn o23*+t45*+ M*S*, *k*,*d***`,, *dd*P*,*k**d, ***`,*dd, *+6 yz |}.~5R\k~67*e*M*N**Y,- ,-, - `Y,-`, - , - +>87**++9:*+;<file/ThirdsLayout.class0100664000567100000120000000310707254054320015144 0ustar jcameronwheel-a678:<?@CDEFGHIJKLNRSTUV ! " # $ % & ' ( ) 3+ 3- P, Q= Y0 Z* ]. _* `=()Ljava/awt/Dimension;()V()[Ljava/awt/Component;(II)V(IIII)V(Ljava/awt/Component;)V*(Ljava/awt/Container;)Ljava/awt/Dimension;(Ljava/awt/Container;)V)(Ljava/lang/String;Ljava/awt/Component;)VCode ConstantValueDFSAdminExport DeleteWindow EditorWindow Exceptions FileManagerFileManager.javaFileNodeILineNumberTable LinkWindow LinuxExportLjava/awt/Component;LocalVariables MkdirWindow MultiLabelOverwriteWindowPermissionsPanelPropertiesWindow RemoteFile RenameWindow SambaShare SearchWindow SharingWindow SourceFile ThirdsLayoutaddLayoutComponent getComponentsheightjava/awt/Componentjava/awt/Containerjava/awt/Dimensionjava/awt/LayoutManagerjava/lang/ObjectlayoutContainerleftminimumLayoutSize minimumSizepreferredLayoutSizeremoveLayoutComponentreshaperightsizewidth XA^AO24> W14S+M+N-/-2, l,-2, l, hl,--2, ,>&   " ; < B R Y04[+M,<,2N,2:Y-  `- -, ,2Y>*     ( @ D J Q [04*+> &\/4> )3+4*>M;file/ResizePanel.java0100644000567100000120000000730110061451363014542 0ustar jcameronwheel// ResizePanel // A panel with two parts, arranged either vertically or horizontally, // whose midpoint is adjustable import java.awt.*; import java.util.Vector; public class ResizePanel extends Panel implements LayoutManager { Component one, two; int pos = -1; double ratio; boolean vertical; boolean dragging; int border = 100; // Provide two components where component one initially occupies rt fraction of // parent area. When vertical=true components are layed out one above the other public ResizePanel(Component one, Component two, double rt, boolean vertical) { this.one = one; this.two = two; this.vertical = vertical; ratio = rt; setLayout(this); add(one); add(two); } public void paint(Graphics g) { Dimension s = size(); if (vertical) { // Draw horizontal bar between vertically aligned components pos = (int)(s.height * ratio); g.setColor(Color.white); g.drawLine(0, pos-2, 0, pos+1); g.drawLine(0, pos-2, s.width-2, pos-2); g.setColor(Color.black); g.drawLine(s.width-1, pos+2, s.width-1, pos-1); g.drawLine(s.width-1, pos+2, 1, pos+2); } else { // Draw vertical divider bar pos = (int)(s.width * ratio); g.setColor(Color.white); g.drawLine(pos-2, 0, pos+1, 0); g.drawLine(pos-2, 0, pos-2, s.height-2); g.setColor(Color.black); g.drawLine(pos+2, s.height-1, pos-1, s.height-1); g.drawLine(pos+2, s.height-1, pos+2, 1); } } // Detect mouse click on divider bar public boolean mouseDown(Event evt, int x, int y) { int sh; Dimension s = size(); if (vertical && y >= pos-2 && y <= pos+2) { // Started dragging dragging = true; } if (!vertical && x >= pos-2 && x <= pos+2) { // Started dragging dragging = true; } return dragging; } // Move division point on mouse drag public boolean mouseDrag(Event evt, int x, int y) { if (dragging) { Dimension s = size(); if (vertical) { if (y < border) pos = border; else if (y > s.height - border) pos = s.height - border; else pos = y; ratio = (double)pos / (double)s.height; } else { if (x < border) pos = border; else if (x > s.width - border) pos = s.width - border; else pos = x; ratio = (double)pos / (double)s.width; } layoutContainer(this); repaint(); } return dragging; } // No longer dragging on mouse button release public boolean mouseUp(Event evt, int x, int y) { boolean o = dragging; dragging = false; return o; } public void addLayoutComponent(String name, Component comp) { } // Arrange components within container public void layoutContainer(Container parent) { Dimension s = parent.size(); if (vertical) { pos = (int)(s.height * ratio); one.reshape(0, 0, s.width, pos-3); one.layout(); two.reshape(0, pos+3, s.width, s.height - pos - 5); two.layout(); } else { pos = (int)(s.width * ratio); one.reshape(0, 0, pos-3, s.height); one.layout(); two.reshape(pos+3, 0, s.width - pos - 5, s.height); two.layout(); } } // Determine minimum size for ResizePanel public Dimension minimumLayoutSize(Container parent) { Dimension d1 = one.minimumSize(), d2 = two.minimumSize(); if (vertical) { // Largest of the widths, sum of the heights return new Dimension(d1.width > d2.width ? d1.width : d2.width, d1.height + d2.height); } else { // Largest of the heights, sum of the widths return new Dimension(d1.width + d2.width, d1.height > d2.height ? d1.height : d2.height); } } public Dimension preferredLayoutSize(Container parent) { return minimumLayoutSize(parent); } public void removeLayoutComponent(Component comp) { } } file/getext.cgi.bak0100775000567100000120000000071007465671775014231 0ustar jcameronwheel#!/usr/local/bin/perl # getext.cgi # Returns a string of EXT attributes for some file require './file-lib.pl'; &ReadParse(); &switch_acl_uid(); print "Content-type: text/plain\n\n"; if (!&can_access($in{'file'})) { print $text{'facl_eaccess'},"\n"; } else { $out = `lsattr -d '$in{'file'}' 2>&1`; if ($? || $out !~ /^(\S+)\s/) { print $out,"\n"; } else { print "\n"; @a = split(//, $1); print join("", grep { $_ ne '-' } @a),"\n"; } } file/FileManager.java.bak0100644000567100000120000026024307644675072015257 0ustar jcameronwheelimport java.awt.*; import java.io.*; import java.applet.*; import java.net.*; import java.util.*; import netscape.javascript.JSObject; // A java filemanager that allows the user to manipulate files on the // Webmin server. Layout is similar to the windows explorer - directory // tree on the left, files on the right, action buttons on the top. public class FileManager extends Applet implements CbButtonCallback, HierarchyCallback, MultiColumnCallback { // top buttons CbButton ret_b, down_b, edit_b, refresh_b, props_b, copy_b, cut_b, paste_b, delete_b, new_b, upload_b, mkdir_b, makelink_b, rename_b, share_b, search_b, acl_b, attr_b, ext_b; // Directory tree Hierarchy dirs; FileNode root; Hashtable nodemap = new Hashtable(); // File list MultiColumn files; TextField pathname; RemoteFile showing_files; RemoteFile showing_list[]; // Copying and pasting RemoteFile cut_buffer[]; boolean cut_mode; static final String monmap[] = { "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" }; String accroot[]; Hashtable lang = new Hashtable(); Hashtable stab = new Hashtable(), ntab = new Hashtable(); boolean sambamode; int nfsmode; String trust; boolean got_filesystems; Vector fslist = new Vector(); boolean read_only = false; public void init() { setLayout(new BorderLayout()); StringTokenizer tok = new StringTokenizer(getParameter("root"), " "); accroot = new String[tok.countTokens()]; for(int i=0; tok.hasMoreTokens(); i++) accroot[i] = tok.nextToken(); trust = getParameter("trust"); // download language strings String l[] = get_text("lang.cgi"); for(int i=0; i= 0) lang.put(l[i].substring(0, eq), l[i].substring(eq+1)); } // list samba file shares String s[] = get_text("list_shares.cgi"); if (s[0].equals("1")) { for(int i=1; i 1) return new CbButton(get_image(f), this); else return new CbButton(get_image(f), t, CbButton.ABOVE, this); } // Gets an image from the images directory Image get_image(String img) { return getImage(getDocumentBase(), "images/"+img); } String[] get_text(String url) { try { long now = System.currentTimeMillis(); if (url.indexOf('?') > 0) url += "&rand="+now; else url += "?rand="+now; url += "&trust="+trust; URL u = new URL(getDocumentBase(), url); Vector lv = new Vector(); LineInputStream is = new LineInputStream(u.openStream()); while(true) try { lv.addElement(is.gets()); } catch(EOFException eof) { break; } is.close(); String rv[] = new String[lv.size()]; lv.copyInto(rv); return rv; } catch(Exception e) { e.printStackTrace(); //return null; String err[] = { e.getMessage() }; return err; } } // Fill the multicolumn list with files from some directory boolean show_files(RemoteFile f) { RemoteFile fl[] = f.list(); if (fl == null) return false; files.clear(); Object rows[][] = new Object[fl.length+1][]; long now = System.currentTimeMillis(); // Sort listing by chosen column if (f != showing_files) { // Directory has changed .. assume sort by name files.sortingArrow(1, 1); } else if (files.sortdir != 0) { // Sort by chosen order RemoteFile fls[] = new RemoteFile[fl.length]; System.arraycopy(fl, 0, fls, 0, fl.length); QuickSort.sort(fls, files.sortcol, files.sortdir); fl = fls; } // Create parent directory row rows[0] = new Object[6]; rows[0][0] = get_image("dir.gif"); rows[0][1] = ".."; rows[0][2] = rows[0][3] = rows[0][4] = rows[0][5] = ""; // Create file rows Date n = new Date(now); for(int i=0; i 0 || s == 0 && ss.length > 1) { // At least one non-.. file was selected boolean parentsel = false; for(int i=0; i 4) new ErrorWindow(text("edit_enormal")); else new EditorWindow(f, this); } else if (b == down_b) { // Force download of the selected file if (f == null) return; if (f.type == 0 || f.type > 4) new ErrorWindow(text("view_enormal2")); else show_file(f, true); } else if (b == refresh_b) { // Refesh the selected directory (and thus any subdirs) d.known = false; d.file.list = null; d.fill(); show_files(d.file); } else if (b == props_b) { // Display the properties window if (f == null) return; new PropertiesWindow(f, this); } else if (b == acl_b) { // Display the ACL window (if filesystem supports them) if (f == null) return; FileSystem filefs = find_filesys(f); if (filefs == null) return; if (filefs.acls) new ACLWindow(this, f); else new ErrorWindow(text("eacl_efs", filefs.mount)); } else if (b == attr_b) { // Display the attributes window (if filesystem supports them) if (f == null) return; FileSystem filefs = find_filesys(f); if (filefs == null) return; if (filefs.attrs) new AttributesWindow(this, f); else new ErrorWindow(text("attr_efs", filefs.mount)); } else if (b == ext_b) { // Display EXT attributes window (if filesystem supports them) if (f == null) return; FileSystem filefs = find_filesys(f); if (filefs == null) return; if (filefs.ext) new EXTWindow(this, f); else new ErrorWindow(text("ext_efs", filefs.mount)); } else if (b == copy_b) { // Copy the selected files if (f == null) return; cut_buffer = ff; cut_mode = false; } else if (b == cut_b) { // Cut the selected file if (f == null) return; cut_buffer = ff; cut_mode = true; } else if (b == paste_b) { // Paste the copied file if (cut_buffer == null) { new ErrorWindow(text("paste_ecopy")); return; } // Check for existing file clashes // XXX // Go through all the files to paste for(int i=0; i= rl && p.substring(0, rl).equals(accroot[r])) can = true; else if (l < rl && accroot[r].substring(0, l).equals(p)) can = true; } if (!can) { new ErrorWindow(text("find_eaccess", p)); return null; } FileNode posnode = root; RemoteFile pos = posnode.file; StringTokenizer tok = new StringTokenizer(p, "/"); while(tok.hasMoreTokens()) { String fn = tok.nextToken(); if (fn.equals("")) continue; RemoteFile fl[] = pos.list(); if (fl == null) return null; if (fill) { posnode.open = true; posnode.fill(); } boolean found = false; for(int i=0; i= l+1 && f.path.substring(0, l+1).equals(fs.mount+"/")) || fs.mount.equals("/")) { filefs = fs; } } return filefs; } public boolean action(Event e, Object o) { if (e.target == pathname) { // A new path was entered.. cd to it String p = pathname.getText().trim(); if (p.equals("")) return true; find_directory(p, true); return true; } return false; } // singleClick // Called on a single click on a list item public void singleClick(MultiColumn list, int num) { } // doubleClick // Called upon double-clicking on a list item public void doubleClick(MultiColumn list, int num) { if (num == 0) { // Go to parent directory if (showing_files.directory != null) { ((FileNode)nodemap.get(showing_files)).open = false; show_files(showing_files.directory); dirs.select((FileNode)nodemap.get(showing_files)); dirs.redraw(); } return; } RemoteFile d = showing_list[num-1]; if (d.type == 0) { // Open this directory FileNode pn = (FileNode)nodemap.get(showing_files); pn.fill(); pn.open = true; FileNode fn = (FileNode)nodemap.get(d); if (show_files(d)) { fn.fill(); fn.open = true; dirs.select(fn); dirs.redraw(); } } else if (d.type <= 4) { // Direct the browser to this file show_file(d, list.last_event.shiftDown()); } } // Called when the user clicks on a column heading so that it can // be sorted. public void headingClicked(MultiColumn list, int col) { if (col == 0) return; // ignore click on icon column? if (col == list.sortcol) { list.sortingArrow(col, list.sortdir == 2 ? 1 : 2); } else { list.sortingArrow(col, 1); } // Re-show the list in the new order, but with the same files selected int ss[] = files.allSelected(); RemoteFile ssf[] = new RemoteFile[ss.length]; for(int i=0; i 0) { ch.insertElementAt(n, i); break; } } } } class RemoteFile { static final int DIR = 0; static final int TEXT = 1; static final int IMAGE = 2; static final int BINARY = 3; static final int UNKNOWN = 4; static final int SYMLINK = 5; static final int DEVICE = 6; static final int PIPE = 7; static final String[] tmap = { "dir.gif", "text.gif", "image.gif", "binary.gif", "unknown.gif", "symlink.gif", "device.gif", "pipe.gif" }; FileManager parent; String path, name; int type; String user, group; long size; int perms; long modified; String linkto; RemoteFile list[]; RemoteFile directory; // Parse a line of text to a file object RemoteFile(FileManager parent, String line, RemoteFile d) { this.parent = parent; StringTokenizer tok = new StringTokenizer(line, "\t"); path = tok.nextToken(); type = Integer.parseInt(tok.nextToken()); user = tok.nextToken(); group = tok.nextToken(); size = Long.parseLong(tok.nextToken()); perms = Integer.parseInt(tok.nextToken()); modified = Long.parseLong(tok.nextToken())*1000; if (type == 5) linkto = tok.nextToken(); directory = d; if (path.equals("/")) name = "/"; else name = path.substring(path.lastIndexOf('/')+1); } // Create a new, empty file object RemoteFile() { } // Returns a list of files in this directory RemoteFile[] list() { if (list == null) { String l[] = parent.get_text("list.cgi?dir="+ parent.urlize(path)); if (l[0].length() > 0) { //list = new RemoteFile[0]; // Error reading the remote directory! new ErrorWindow(parent.text("list_edir", path, l[0])); list = null; } else { list = new RemoteFile[l.length-3]; for(int i=3; i 0 && offset == 0) { nlist[i] = f; offset++; } nlist[i+offset] = list[i]; } if (offset == 0) nlist[list.length] = f; list = nlist; } void delete(RemoteFile f) { RemoteFile nlist[] = new RemoteFile[list.length-1]; for(int i=0,j=0; i= 0) { // Length is known buf = new byte[uc.getContentLength()]; int got = 0; while(got < buf.length) got += is.read(buf, got, buf.length-got); } else { // Length is unknown .. read till the end buf = new byte[0]; while(true) { byte data[] = new byte[16384]; int got; try { got = is.read(data); } catch(EOFException ex) { break; } if (got <= 0) break; byte nbuf[] = new byte[buf.length + got]; System.arraycopy(buf, 0, nbuf, 0, buf.length); System.arraycopy(data, 0, nbuf, buf.length, got); buf = nbuf; } } edit.setText(new String(buf, 0)); is.close(); file.size = buf.length; } catch(Exception e) { e.printStackTrace(); } } // Creating a new file EditorWindow(String f, FileManager p) { super(500, 300); filemgr = p; makeUI(true); setTitle(filemgr.text("edit_title2")); name.setText(f.equals("/") ? f : f+"/"); name.select(name.getText().length(), name.getText().length()); } void makeUI(boolean add_name) { setLayout(new BorderLayout()); if (add_name) { Panel np = new Panel(); np.setLayout(new BorderLayout()); np.add("West", new Label(filemgr.text("edit_filename"))); np.add("Center", name = new TextField()); add("North", np); } add("Center", edit = new TextArea(20, 80)); edit.setFont(new Font("courier", Font.PLAIN, 14)); Panel bot = new Panel(); bot.setLayout(new FlowLayout(FlowLayout.RIGHT)); bot.add(goto_b = new CbButton(filemgr.get_image("goto.gif"), filemgr.text("edit_goto"), CbButton.LEFT, this)); bot.add(find_b = new CbButton(filemgr.get_image("find.gif"), filemgr.text("edit_find"), CbButton.LEFT, this)); bot.add(new Label(" ")); bot.add(save_b = new CbButton(filemgr.get_image("save.gif"), filemgr.text("save"), CbButton.LEFT, this)); bot.add(cancel_b = new CbButton(filemgr.get_image("cancel.gif"), filemgr.text("cancel"), CbButton.LEFT, this)); add("South", bot); pack(); show(); } public void click(CbButton b) { if (b == save_b) { RemoteFile par = null, already = null; String save_path; if (file == null) { // Locate the filemgr directory save_path = filemgr.trim_path(name.getText()); int sl = save_path.lastIndexOf('/'); par = filemgr.find_directory( save_path.substring(0, sl), false); if (par == null) return; already = par.find(save_path.substring(sl+1)); if (already != null && (already.type == 0 || already.type == 5)) { new ErrorWindow( filemgr.text("edit_eover", save_path)); return; } } else save_path = file.path; // Save the file back again String s = edit.getText(), line; try { URL u = new URL(filemgr.getDocumentBase(), "save.cgi"+filemgr.urlize(save_path)+ "?rand="+System.currentTimeMillis()+ "&trust="+filemgr.trust); URLConnection uc = u.openConnection(); uc.setDoOutput(true); OutputStream os = uc.getOutputStream(); byte buf[] = new byte[s.length()]; s.getBytes(0, buf.length, buf, 0); os.write(buf); os.close(); LineInputStream is = new LineInputStream( uc.getInputStream()); String err = is.gets(); if (err.length() > 0) { new ErrorWindow( filemgr.text("edit_esave", err)); is.close(); return; } line = is.gets(); is.close(); } catch(Exception e) { e.printStackTrace(); return; } if (file == null) { // Create and insert or replace the file object file = new RemoteFile(filemgr, line, par); if (already != null) { // A file with this name exists already.type = file.type; already.user = file.user; already.group = file.group; already.size = file.size; already.perms = file.perms; already.modified = file.modified; } else { // Add to the list par.add(file); } } else { file.size = s.length(); file.modified = System.currentTimeMillis(); } filemgr.show_files(filemgr.showing_files); dispose(); } else if (b == cancel_b) { // Just close dispose(); } else if (b == goto_b) { // Open a dialog asking which line to go to if (goto_window != null) goto_window.toFront(); else goto_window = new GotoWindow(this); } else if (b == find_b) { // Open the search (and replace) dialog if (find_window != null) find_window.toFront(); else find_window = new FindReplaceWindow(this); } } public void dispose() { super.dispose(); if (goto_window != null) goto_window.dispose(); if (find_window != null) find_window.dispose(); } } class GotoWindow extends FixedFrame implements CbButtonCallback { EditorWindow editor; FileManager filemgr; TextField line; CbButton goto_b, cancel_b; GotoWindow(EditorWindow e) { editor = e; filemgr = e.filemgr; setLayout(new BorderLayout()); add("West", new Label(filemgr.text("edit_gotoline"))); add("Center", line = new TextField(10)); Panel bot = new Panel(); bot.setLayout(new FlowLayout(FlowLayout.RIGHT)); bot.add(goto_b = new CbButton(filemgr.get_image("goto.gif"), filemgr.text("edit_goto"), CbButton.LEFT, this)); bot.add(cancel_b = new CbButton(filemgr.get_image("cancel.gif"), filemgr.text("close"), CbButton.LEFT, this)); add("South", bot); pack(); show(); } public void click(CbButton b) { if (b == goto_b) { // Go to the chose line, if it exists int lnum; try { lnum = Integer.parseInt(line.getText()); } catch(Exception e) { return; } String txt = editor.edit.getText(); int c, l = 0; for(c=0; c= 0) { String sel = edittxt.substring(st, en); if (sel.equals(findtxt)) { // Replace the selected editor.edit.setText(edittxt.substring(0, st)+ replace.getText()+ edittxt.substring(en)); editor.edit.select(st, st); return; } } click(find_b); } else if (b == all_b) { // Replace all occurrances of the text in the editor int pos = 0; int len = findtxt.length(); int st = editor.edit.getSelectionStart(), en = editor.edit.getSelectionEnd(); while((pos = edittxt.indexOf(findtxt, pos)) != -1) { edittxt = edittxt.substring(0, pos)+ replace.getText()+ edittxt.substring(pos+len); pos += len; } editor.edit.setText(edittxt); editor.edit.select(st, en); // put back old selection } else if (b == cancel_b) { // Just close the window dispose(); } } public void dispose() { super.dispose(); editor.find_window = null; } } class PropertiesWindow extends FixedFrame implements CbButtonCallback { RemoteFile file; FileManager filemgr; CbButton save_b, cancel_b; TextField linkto; TextField user, group; Checkbox setuid, setgid; PermissionsPanel user_p, group_p, other_p; Checkbox sticky; Choice rec_mode; TextField octal; PropertiesWindow(RemoteFile f, FileManager p) { file = f; filemgr = p; // Create UI setTitle(f.path); setLayout(new BorderLayout()); Panel bot = new Panel(); bot.setLayout(new FlowLayout(FlowLayout.RIGHT)); bot.add(save_b = new CbButton(filemgr.get_image("save.gif"), filemgr.text("save"), CbButton.LEFT, this)); bot.add(cancel_b = new CbButton(filemgr.get_image("cancel.gif"), filemgr.text("cancel"), CbButton.LEFT, this)); add("South", bot); Panel mid = new Panel(); mid.setLayout(new BorderLayout()); TabbedPanel tab = null; add("Center", mid); // Create file details section Panel det = new LinedPanel(filemgr.text("info_file")), dl = new Panel(), dr = new Panel(); setup_leftright(det, dl, dr); add_item(filemgr.text("info_path"), new Label(file.path), dl, dr); add_item(filemgr.text("info_type"), new Label(filemgr.text("file_type"+file.type)), dl, dr); add_item(filemgr.text("info_size"), new Label(String.valueOf(file.size)),dl,dr); add_item(filemgr.text("info_mod"), new Label(String.valueOf(new Date(file.modified))), dl, dr); if (file.type == 5) add_item(filemgr.text("info_link"), linkto = new TextField(file.linkto, 30), dl, dr); mid = add_panel(mid, det); // Create permissions section Panel per = new LinedPanel(filemgr.text("info_perms")), pl = new Panel(), pr = new Panel(); setup_leftright(per, pl, pr); add_item(filemgr.text("info_user"), user_p = new PermissionsPanel(file, 64, filemgr), pl, pr); add_item(filemgr.text("info_group"), group_p = new PermissionsPanel(file, 8, filemgr), pl, pr); add_item(filemgr.text("info_other"), other_p = new PermissionsPanel(file, 1, filemgr), pl,pr); if (file.type == 0) { add_item(filemgr.text("info_sticky"), sticky = new Checkbox( filemgr.text("info_sticky2")), pl,pr); sticky.setState((file.perms&01000) != 0); } add_item(filemgr.text("info_octal"), octal = new TextField(4), pl, pr); octal.setEditable(false); mid = add_panel(mid, per); // Create ownership section Panel own = new LinedPanel(filemgr.text("info_own")), ol = new Panel(), or = new Panel(); setup_leftright(own, ol, or); add_item(filemgr.text("info_user"), user = new TextField(file.user, 10), ol, or); if (file.type != 0) { add_item(filemgr.text("info_setuid"), setuid = new Checkbox(filemgr.text("info_setuid2")), ol, or); setuid.setState((file.perms & 0x800) != 0); } add_item(filemgr.text("info_group"), group = new TextField(file.group, 10), ol, or); if (file.type == 0) add_item(filemgr.text("info_setgid"), setgid = new Checkbox(filemgr.text("info_setgid2")), ol, or); else add_item(filemgr.text("info_setgid"), setgid = new Checkbox(filemgr.text("info_setgid3")), ol, or); setgid.setState((file.perms & 0x400) != 0); mid = add_panel(mid, own); if (file.type == 0) { // Create recursion section Panel rec = new LinedPanel(filemgr.text("info_apply")); rec.setLayout(new BorderLayout()); rec_mode = new Choice(); for(int i=1; i<=3; i++) rec_mode.addItem(filemgr.text("info_apply"+i)); rec.add("Center", rec_mode); mid = add_panel(mid, rec); } set_octal(); pack(); show(); } Panel add_panel(Panel p, Component c) { p.add("North", c); Panel np = new Panel(); np.setLayout(new BorderLayout()); p.add("Center", np); return np; } public void click(CbButton b) { if (b == save_b) { // Update the file int perms = get_perms(); int rec = 0; if (file.type == 0) rec = rec_mode.getSelectedIndex(); String rv[] = filemgr.get_text( "chmod.cgi?path="+filemgr.urlize(file.path)+ "&perms="+perms+"&user="+user.getText()+ "&group="+group.getText()+"&rec="+rec+ (linkto==null ? "" : "&linkto="+linkto.getText())); if (rv[0].length() > 0) { // Something went wrong new ErrorWindow(filemgr.text("info_efailed", file.path, rv[0])); } else { // Update all changed file objects if (linkto != null) file.linkto = linkto.getText(); else if (rec == 0) update_file(file, perms, false); else if (rec == 1) { // Update files in this directory update_file(file, perms, false); recurse_files(file, perms, false); } else if (rec == 2) { // Update files and subdirs update_file(file, perms, false); recurse_files(file, perms, true); } // Update directory list int os = filemgr.files.selected(); filemgr.show_files(filemgr.showing_files); filemgr.files.select(os); dispose(); } } else { // Just close dispose(); } } void update_file(RemoteFile f, int perms, boolean perms_only) { f.user = user.getText(); f.group = group.getText(); if (perms_only) f.perms = (perms & 0777) | (f.perms & 037777777000); else f.perms = perms; } void recurse_files(RemoteFile f, int perms, boolean do_subs) { if (f.list == null) return; for(int i=0; i 1 ? "delete_mtitle" : ff[0].type == 0 ? "delete_dtitle" : "delete_ftitle")); setLayout(new BorderLayout()); if (ff.length > 1) { add("North", new Label(filemgr.text("delete_mdesc"))); Panel mp = new Panel(); mp.setLayout(new GridLayout(ff.length, 1)); for(int i=0; i 0) { new ErrorWindow(filemgr.text("delete_efailed", file.path, rv[0])); break; } else { // done the deed.. update data structures RemoteFile pf = file.directory; pf.delete(file); if (filemgr.showing_files == pf) { // Need to refresh the list as well.. need_reshow = true; } FileNode node = (FileNode)filemgr.nodemap.get( file); FileNode pnode = (FileNode)filemgr.nodemap.get( pf); if (node != null) { // Take the directory out of the tree.. pnode.ch.removeElement(node); need_redraw = true; } } } if (need_reshow) filemgr.show_files(filemgr.showing_files); if (need_redraw) filemgr.dirs.redraw(); dispose(); } else if (b == cancel_b) dispose(); } } class MkdirWindow extends FixedFrame implements CbButtonCallback { FileManager filemgr; TextField dir; CbButton create_b, cancel_b; MkdirWindow(String d, FileManager p) { filemgr = p; setTitle(filemgr.text("mkdir_title")); setLayout(new BorderLayout()); add("West", new Label(filemgr.text("mkdir_dir"))); add("Center", dir = new TextField(d.equals("/") ? "/" : d+"/", 40)); dir.select(dir.getText().length(), dir.getText().length()); Panel bot = new Panel(); bot.setLayout(new FlowLayout(FlowLayout.CENTER)); bot.add(create_b = new CbButton(filemgr.get_image("save.gif"), filemgr.text("create"), CbButton.LEFT, this)); bot.add(cancel_b = new CbButton(filemgr.get_image("cancel.gif"), filemgr.text("cancel"), CbButton.LEFT, this)); add("South", bot); pack(); show(); } public void click(CbButton b) { if (b == create_b) { // Find the filemgr directory String path = dir.getText(); path = filemgr.trim_path(path); int sl = path.lastIndexOf('/'); RemoteFile par = filemgr.find_directory( path.substring(0, sl), false); if (par.find(path.substring(sl+1)) != null) { new ErrorWindow(filemgr.text("mkdir_eexists", path)); return; } String rv[] = filemgr.get_text("mkdir.cgi?dir="+ filemgr.urlize(path)); if (rv[0].length() > 0) { new ErrorWindow(filemgr.text("mkdir_efailed", rv[0])); return; } RemoteFile file = new RemoteFile(filemgr, rv[1], par); par.add(file); FileNode parnode = (FileNode)filemgr.nodemap.get(par); if (parnode != null) { // Update the tree parnode.add(new FileNode(file)); filemgr.dirs.redraw(); } filemgr.show_files(filemgr.showing_files); dispose(); } else dispose(); } } class LinkWindow extends FixedFrame implements CbButtonCallback { FileManager filemgr; TextField from, to; CbButton create_b, cancel_b; LinkWindow(String d, FileManager p) { filemgr = p; setLayout(new BorderLayout()); setTitle(filemgr.text("link_title")); Panel l = new Panel(), r = new Panel(); l.setLayout(new GridLayout(0, 1)); l.add(new Label(filemgr.text("link_from"))); l.add(new Label(filemgr.text("link_to"))); r.setLayout(new GridLayout(0, 1)); r.add(from = new TextField(d.equals("/") ? "/" : d+"/", 40)); from.select(from.getText().length(), from.getText().length()); r.add(to = new TextField()); add("West", l); add("Center", r); Panel bot = new Panel(); bot.setLayout(new FlowLayout(FlowLayout.CENTER)); bot.add(create_b = new CbButton(filemgr.get_image("save.gif"), filemgr.text("create"), CbButton.LEFT, this)); bot.add(cancel_b = new CbButton(filemgr.get_image("cancel.gif"), filemgr.text("cancel"), CbButton.LEFT, this)); add("South", bot); pack(); show(); } public void click(CbButton b) { if (b == create_b) { // Check inputs String from_str = from.getText().trim(); int sl = from_str.lastIndexOf('/'); String par_str = from_str.substring(0, sl), file_str = from_str.substring(sl+1); RemoteFile par = filemgr.find_directory(par_str, false); if (par == null) return; if (par.find(file_str) != null) { new ErrorWindow(filemgr.text("link_eexists", from_str)); return; } // Create the actual link String rv[] = filemgr.get_text("makelink.cgi?from="+ filemgr.urlize(from_str)+"&to="+ filemgr.urlize(to.getText())); if (rv[0].length() > 0) { new ErrorWindow(filemgr.text("link_efailed", rv[0])); return; } RemoteFile file = new RemoteFile(filemgr, rv[1], par); par.add(file); filemgr.show_files(filemgr.showing_files); dispose(); } else if (b == cancel_b) dispose(); } } class RenameWindow extends FixedFrame implements CbButtonCallback { FileManager filemgr; RemoteFile file; TextField oldname, newname; CbButton rename_b, cancel_b; RenameWindow(FileManager p, RemoteFile f) { filemgr = p; file = f; setLayout(new BorderLayout()); setTitle(filemgr.text("rename_title", file.path)); Panel l = new Panel(), r = new Panel(); l.setLayout(new GridLayout(0, 1)); l.add(new Label(filemgr.text("rename_old"))); l.add(new Label(filemgr.text("rename_new"))); r.setLayout(new GridLayout(0, 1)); r.add(oldname = new TextField(file.name, 20)); oldname.setEditable(false); r.add(newname = new TextField(file.name, 20)); newname.select(file.name.length(), file.name.length()); add("West", l); add("Center", r); Panel bot = new Panel(); bot.setLayout(new FlowLayout(FlowLayout.CENTER)); bot.add(rename_b = new CbButton(filemgr.get_image("save.gif"), filemgr.text("rename_ok"), CbButton.LEFT, this)); bot.add(cancel_b = new CbButton(filemgr.get_image("cancel.gif"), filemgr.text("cancel"), CbButton.LEFT, this)); add("South", bot); pack(); show(); } public void click(CbButton b) { if (b == rename_b) { // Check for an existing file String newstr = newname.getText().trim(); if (newstr.length() == 0) return; RemoteFile already = file.directory.find(newstr); if (already != null) { new ErrorWindow(filemgr.text("rename_eexists", newstr)); return; } // Rename the real file int sl = file.path.lastIndexOf('/'); String newpath = file.path.substring(0, sl)+"/"+newstr; String rv[] = filemgr.get_text( "rename.cgi?old="+filemgr.urlize(file.path)+ "&new="+filemgr.urlize(newpath)); if (rv[0].length() > 0) { new ErrorWindow(filemgr.text("rename_efailed", rv[0])); return; } // Update data structure file.name = newstr; file.path = newpath; file.directory.delete(file); file.directory.add(file); file.list = null; FileNode parnode = (FileNode)filemgr.nodemap.get(file.directory); FileNode filenode = (FileNode)filemgr.nodemap.get(file); if (parnode != null && filenode != null) { filenode.text = file.name; parnode.ch.removeElement(filenode); parnode.add(filenode); dispose(); filemgr.dirs.redraw(); } filemgr.show_files(filemgr.showing_files); dispose(); } else if (b == cancel_b) dispose(); } } class MultiLabel extends BorderPanel { public MultiLabel(String s, int max) { this(s, max, 1); } public MultiLabel(String s, int max, int b) { super(b); Vector v = new Vector(); StringTokenizer tok = new StringTokenizer(s.trim(), " \t"); String line = null; while(tok.hasMoreTokens()) { String w = tok.nextToken(); line = (line == null ? w : line+" "+w); if (line.length() > max || !tok.hasMoreTokens()) { v.addElement(line); line = null; } } setLayout(new GridLayout(v.size(), 1, 0, 0)); for(int i=0; i 0) { // paste the file, but with a new name RemoteFile ap = already.directory; RemoteFile newalready = ap.find(newname.getText()); if (newalready == src) { new ErrorWindow(filemgr.text("paste_eself")); return; } if (newalready != null && (newalready.type == 0 || newalready.type == 5)) { new ErrorWindow( filemgr.text("paste_eover", newalready.path)); return; } String dpath = (ap.path.equals("/") ? "/" : ap.path+"/")+newname.getText(); RemoteFile nf = filemgr.paste_file(src, already.directory, dpath, newalready, mode); if (filemgr.cut_mode && nf != null) { // Paste from the destination path from now on filemgr.cut_buffer[idx] = nf; } dispose(); } } } class SambaShare { String path; boolean available; boolean writable; int guest; String comment; SambaShare(String l) { StringSplitter tok = new StringSplitter(l, ':'); path = tok.nextToken(); available = tok.nextToken().equals("1"); writable = tok.nextToken().equals("1"); guest = Integer.parseInt(tok.nextToken()); comment = tok.nextToken(); } SambaShare(String p, boolean a, boolean w, int g, String c) { path = p; available = a; writable = w; guest = g; comment = c; } String params() { return "path="+FileManager.urlize(path)+ "&available="+(available ? 1 : 0)+ "&writable="+(writable ? 1 : 0)+ "&guest="+guest+ "&comment="+FileManager.urlize(comment); } } class DFSAdminExport { String path; String desc; String ro, rw, root; DFSAdminExport(String l) { StringSplitter tok = new StringSplitter(l, ':'); path = tok.nextToken(); ro = tok.nextToken(); rw = tok.nextToken(); root = tok.nextToken(); desc = tok.nextToken(); } DFSAdminExport(String p, String d, String ro, String rw, String root) { path = p; desc = d; this.ro = ro; this.rw = rw; this.root = root; } String[] split(String s) { StringTokenizer stok = new StringTokenizer(s, " "); String rv[] = new String[stok.countTokens()]; for(int i=0; i 1)); add_item(name, p, l, r); TextField t = new TextField(v.equals("-") ? "" : v, 25); add_item("", t, l, r); return t; } Choice squashbox(int s) { Choice rv = new Choice(); rv.addItem(filemgr.text("share_s0")); rv.addItem(filemgr.text("share_s1")); rv.addItem(filemgr.text("share_s2")); rv.select(s); return rv; } Choice robox(boolean r) { Choice rv = new Choice(); rv.addItem(filemgr.text("share_lrw")); rv.addItem(filemgr.text("share_lro")); rv.select(r ? 1 : 0); return rv; } Panel opts_panel(Component ro, Component squash) { Panel p = new Panel(); p.setLayout(new BorderLayout()); p.add("West", ro); p.add("East", squash); return p; } void export_options(LinuxExport e) { int c = 0; for(int i=0; i 0) c++; e.host = new String[c]; e.ro = new boolean[c]; e.squash = new int[c]; for(int i=0,j=0; i 0) { e.host[j] = host[i].getText(); e.ro[j] = lro[i].getSelectedIndex() == 1; e.squash[j] = squash[i].getSelectedIndex(); j++; } } } } class SearchWindow extends FixedFrame implements CbButtonCallback,MultiColumnCallback { TabbedPanel tab; MultiColumn list; CbButton search_b, cancel_b; FileManager filemgr; TextField dir, match, user, group; Checkbox uany, usel, gany, gsel; Choice type; Checkbox sany, smore, sless; TextField more, less; Checkbox xon, xoff; String types[] = { "", "f", "d", "l", "p" }; RemoteFile results[]; SearchWindow(String d, FileManager p) { filemgr = p; setTitle(filemgr.text("search_title")); // setup UI setLayout(new BorderLayout()); tab = new TabbedPanel(); Panel search = new Panel(); search.setLayout(new BorderLayout()); tab.addItem(filemgr.text("search_crit"), search); Panel l = new Panel(), r = new Panel(); l.setLayout(new GridLayout(0, 1)); r.setLayout(new GridLayout(0, 1)); String cols[] = { "", filemgr.text("right_name"), filemgr.text("right_size") }; float widths[] = { .07f, .78f, .15f }; list = new MultiColumn(cols, this); list.setWidths(widths); list.setDrawLines(false); tab.addItem(filemgr.text("search_list"), list); add_item(filemgr.text("search_dir"), dir = new TextField(d, 30), l, r); add_item(filemgr.text("search_match"), match = new TextField(20), l, r); Panel up = new Panel(); up.setLayout(new FlowLayout(FlowLayout.LEFT, 1, 1)); CheckboxGroup ug = new CheckboxGroup(); up.add(uany = new Checkbox(filemgr.text("search_any"), ug, true)); up.add(usel = new Checkbox("", ug, false)); up.add(user = new TextField(10)); add_item(filemgr.text("search_user"), up, l, r); Panel gp = new Panel(); gp.setLayout(new FlowLayout(FlowLayout.LEFT, 1, 1)); CheckboxGroup gg = new CheckboxGroup(); gp.add(gany = new Checkbox(filemgr.text("search_any"), gg, true)); gp.add(gsel = new Checkbox("", gg, false)); gp.add(group = new TextField(10)); add_item(filemgr.text("search_group"), gp, l, r); type = new Choice(); for(int i=0; i 0) url += "&type="+types[type.getSelectedIndex()]; if (usel.getState()) { String u = user.getText().trim(); if (u.length() == 0) { new ErrorWindow(filemgr.text("search_euser")); return; } url += "&user="+filemgr.urlize(u); } if (gsel.getState()) { String g = group.getText().trim(); if (g.length() == 0) { new ErrorWindow(filemgr.text("search_egroup")); return; } url += "&group="+filemgr.urlize(g); } if (smore.getState()) { String m = more.getText().trim(); try { Integer.parseInt(m); } catch(Exception e) { new ErrorWindow(filemgr.text("search_esize")); return; } url += "&size=%2B"+m+"c"; } else if (sless.getState()) { String l = less.getText().trim(); try { Integer.parseInt(l); } catch(Exception e) { new ErrorWindow(filemgr.text("search_esize")); return; } url += "&size=%2D"+l+"c"; } if (xon.getState()) url += "&xdev=1"; // send off the search setCursor(WAIT_CURSOR); String f[] = filemgr.get_text(url); if (f[0].length() > 0) { new ErrorWindow(f[0]); return; } Object rows[][] = new Object[f.length-1][]; results = new RemoteFile[f.length-1]; for(int i=1; i= 0) { ACLEntry e = (ACLEntry)acllist.elementAt(idx); ACLEditor ed = (ACLEditor)edmap.get(e); if (ed == null) edmap.put(e, new ACLEditor(this, e)); else { ed.toFront(); ed.requestFocus(); } } } public void singleClick(MultiColumn list, int num) { } public void headingClicked(MultiColumn list, int col) { } } class AttributesWindow extends FixedFrame implements CbButtonCallback,MultiColumnCallback { FileManager filemgr; RemoteFile file; Vector attrlist = new Vector(); Hashtable edmap = new Hashtable(); CbButton ok, cancel, add; MultiColumn attrtable; AttributesWindow(FileManager p, RemoteFile f) { super(400, 300); setTitle(p.text("attr_title", f.path)); filemgr = p; file = f; // Get the attributes String a[] = filemgr.get_text( "getattrs.cgi?file="+filemgr.urlize(file.path)); if (a[0].length() != 0) { new ErrorWindow(filemgr.text("attr_eattrs", a[0])); return; } // Create the UI setLayout(new BorderLayout()); String titles[] = { filemgr.text("attr_name"), filemgr.text("attr_value") }; attrtable = new MultiColumn(titles, this); for(int i=1; i= 0) { FileAttribute at = (FileAttribute)attrlist.elementAt(idx); AttributeEditor ed = (AttributeEditor)edmap.get(at); if (ed == null) edmap.put(at, new AttributeEditor(this, at)); else { ed.toFront(); ed.requestFocus(); } } } public void singleClick(MultiColumn list, int num) { } public void headingClicked(MultiColumn list, int col) { } } class FileAttribute { String name; String value; FileAttribute(String l, FileManager f) { int eq = l.indexOf('='); name = f.un_urlize(l.substring(0, eq)); value = f.un_urlize(l.substring(eq+1)); } FileAttribute(String n, String v) { name = n; value = v; } String[] getRow() { return new String[] { name, value }; } } class AttributeEditor extends FixedFrame implements CbButtonCallback { FileManager filemgr; AttributesWindow attrwin; FileAttribute attr; boolean creating; CbButton ok, del; TextField name; TextArea value; AttributeEditor(AttributesWindow w, FileAttribute a) { attrwin = w; attr = a; filemgr = w.filemgr; creating = false; makeUI(); } AttributeEditor(AttributesWindow w) { attrwin = w; attr = new FileAttribute("", ""); filemgr = w.filemgr; creating = true; makeUI(); } void makeUI() { setTitle(filemgr.text(creating ? "attr_create" : "attr_edit")); setLayout(new BorderLayout()); Panel top = new Panel(); top.setLayout(new GridLayout(1, 2)); top.add(new Label(filemgr.text("attr_name"))); top.add(name = new TextField(attr.name, 20)); add("North", top); Panel mid = new Panel(); mid.setLayout(new GridLayout(1, 2)); mid.add(new Label(filemgr.text("attr_value"))); mid.add(value = new TextArea(attr.value, 5, 20)); add("Center", mid); Panel bot = new Panel(); bot.setLayout(new FlowLayout(FlowLayout.RIGHT)); bot.add(ok = new CbButton(filemgr.get_image("save.gif"), filemgr.text("save"), CbButton.LEFT, this)); if (!creating) bot.add(del = new CbButton(filemgr.get_image("cancel.gif"), filemgr.text("delete"), CbButton.LEFT, this)); add("South", bot); pack(); show(); } public void click(CbButton b) { if (b == ok) { // Update or add the attribute if (name.getText().length() == 0) { new ErrorWindow(filemgr.text("attr_ename")); return; } attr.name = name.getText(); attr.value = value.getText(); if (creating) { // Add to the attribs table attrwin.attrlist.addElement(attr); attrwin.attrtable.addItem(attr.getRow()); } else { // Update the table int idx = attrwin.attrlist.indexOf(attr); attrwin.attrtable.modifyItem(attr.getRow(), idx); } dispose(); } else if (b == del) { // Remove this entry int idx = attrwin.attrlist.indexOf(attr); attrwin.attrlist.removeElementAt(idx); attrwin.attrtable.deleteItem(idx); dispose(); } } public void dispose() { attrwin.edmap.remove(attr); super.dispose(); } } class EXTWindow extends FixedFrame implements CbButtonCallback { FileManager filemgr; RemoteFile file; CbButton ok, cancel; Checkbox cbs[]; String attrs[] = { "A", "a", "c", "d", "i", "s", "S", "u" }; Hashtable attrmap = new Hashtable(); EXTWindow(FileManager p, RemoteFile f) { super(); setTitle(p.text("ext_title", f.path)); filemgr = p; file = f; // Get the attributes String a[] = filemgr.get_text( "getext.cgi?file="+filemgr.urlize(file.path)); if (a[0].length() != 0) { new ErrorWindow(filemgr.text("ext_eattrs", a[0])); return; } for(int i=0; i",&text('upload_eperm', $in{'path'}),"

\n"; } elsif (!open(FILE, ">".&unmake_chroot($in{'path'}))) { print "

",&text('upload_ewrite', $in{'path'}, $!),"

\n"; } else { open(TEMP, $in{'temp'}); ©data(TEMP, FILE); close(TEMP); close(FILE); &post_upload($in{'path'}, $in{'dir'}, $in{'zip'}); } unlink($in{'temp'}); } else { # Just delete the temp file &switch_acl_uid(); unlink($in{'temp'}); print "\n"; } file/config-solaris0100664000567100000120000000037707756236104014343 0ustar jcameronwheelufs_acl=&has_command("getfacl") && &has_command("setfacl") nfs_acl=&has_command("getfacl") && &has_command("setfacl") lofs_acl=&has_command("getfacl") && &has_command("setfacl") getfacl=getfacl setfacl=setfacl -f - hide_dot_files=0 iconsize=0 nocharset=0 file/filesystems.cgi0100775000567100000120000000301310026221147014506 0ustar jcameronwheel#!/usr/local/bin/perl # filesystems.cgi # List all filesystems and their types require './file-lib.pl'; print "Content-type: text/plain\n\n"; if (!&foreign_check("mount")) { print "0\n"; exit; } &foreign_require("mount", "mount-lib.pl"); @mtab = &mount::list_mounted(); %mtab = map { $_->[0], $_ } @mtab; @fstab = &mount::list_mounts(); %fstab = map { $_->[0], $_ } @fstab; @mounts = ( @fstab, grep { !$fstab{$_->[0]} } @mtab ); print "1\n"; foreach $m (sort { length($a->[0]) <=> length($b->[0]) } @mounts) { next if ($m->[0] !~ /^\//); local @supp = @{$support{$m->[2]}}; if (!@supp) { # Work out what this filesystem supports @supp = ( eval $config{$m->[2]."_acl"} ? 1 : 0, eval $config{$m->[2]."_attr"} ? 1 : 0, eval $config{$m->[2]."_ext"} ? 1 : 0 ); $support{$m->[2]} = \@supp; } # Check if the filesystem really does support attrs and ACLs local @supp2 = @supp; if ($mtab{$m->[0]}) { if ($supp2[0]) { local $out = `$config{'getfacl'} '$m->[0]' 2>/dev/null`; if ($?) { $supp2[0] = 0; } else { local $aclcount; foreach $l (split(/\n/, $out)) { $l =~ s/#.*$//; $l =~ s/\s+$//; $aclcount++ if ($l =~ /\S/); } $supp2[0] = 0 if (!$aclcount); } } if ($supp2[1]) { local $out = `attr -l '$m->[0]' 2>/dev/null`; if ($?) { $supp2[1] = 0; } } } $m->[1] =~ s/\\/\//g; $chrooted = &make_chroot($m->[0]); if ($chrooted) { print join(" ", $chrooted, @$m[1..3], @supp2, $mtab{$m->[0]} ? 1 : 0, $fstab{$m->[0]} ? 1 : 0),"\n"; } } file/index.cgi.bak0100755000567100000120000000401407644675206014027 0ustar jcameronwheel#!/usr/local/bin/perl # index.cgi # Output HTML for the file manager applet require './file-lib.pl'; &ReadParse(); $theme_no_table = 1; if ($access{'uid'} < 0 && !defined(getpwnam($remote_user))) { &error(&text('index_eremote', $remote_user)); } # Display header, depending on how many modules the user has &read_acl(undef, \%acl); $mc = @{$acl{$base_remote_user}} == 1; $nolo = $ENV{'ANONYMOUS_USER'} || $ENV{'SSL_USER'} || $ENV{'LOCAL_USER'} || $ENV{'HTTP_USER_AGENT'} =~ /webmin/i; if ($gconfig{'gotoone'} && $mc == 1 && !$nolo) { &header($text{'index_title'}, "", undef, 0, 1); $w = 100; $h = 80; } else { &header($text{'index_title'}); $w = 100; $h = 100; } if ($gconfig{'referers_none'}) { # Because java applet HTTP requests don't always include a referer: # header, we need to use a DBM of trust keys to identify trusted applets if (defined(&seed_random)) { &seed_random(); } else { srand(time() ^ $$); } $trust = int(rand(1000000000)); local $now = time(); &open_trust_db(); foreach $k (keys %trustdb) { if ($now - $trustdb{$k} > 30*24*60*60) { delete($trustdb{$k}); } } $trustdb{$trust} = $now; dbmclose(%trustdb); } $sharing = $access{'uid'} ? 0 : 1; &read_acl(undef, \%acl); $mc = @{$acl{$base_remote_user}}; if (!$gconfig{'gotoone'} || $mc > 1) { %minfo = &get_module_info(); $return = ""; } if ($in{'open'}) { $open = "\n"; } print < function upload(dir) { open("upform.cgi?dir="+dir+"&trust=$trust", "upload", "toolbar=no,menubar=no,scrollbar=no,width=450,height=200"); } $open $return $text{'index_nojava'}

EOF &footer(); file/config.info0100664000567100000120000000027207756236117013621 0ustar jcameronwheelhide_dot_files=Show files starting with a dot?,1,0-Yes,1-No iconsize=Size of buttons in toolbar,1,1-Small,0-Large with labels nocharset=Attempt to use proper character set?,1,0-Yes,1-No file/Hierarchy.java.bak0100644000567100000120000001710207647733563015020 0ustar jcameronwheel// Hierarchy // An AWT component for displaying a tree-like heirachy, with each node // having an icon and a name. This heirachy can be expanded or contracted // by the user. import java.awt.*; import java.util.Vector; public class Hierarchy extends BorderPanel implements CbScrollbarCallback { HierarchyNode root; // the root of the tree CbScrollbar sb; // scrollbar at right int width, height; // usable drawing area int sbwidth; // size of scrollbar HierarchyCallback callback; // who to call on open / close Image bim; // double-buffer image Font font = new Font("courier", Font.PLAIN, 12); FontMetrics fnm; // size of font used Graphics bg; // back-images graphics int top = 0; // top-most row displayed int count = 0; // total rows in the tree Insets in; // insets from border HierarchyNode sel; // selected node long last; // time of last mouse click static boolean broken_awt = System.getProperty("os.name"). startsWith("Windows"); // Create a new Hierarchy object with the given root Hierarchy(HierarchyNode r) { this(); root = r; } // Create a new Hierarchy object that calls back to the given object // when nodes are clicked on. Hierarchy(HierarchyNode r, HierarchyCallback c) { this(r); callback = c; } // Create an empty hierarchy object, with no callback Hierarchy() { super(3, new Color(50,50,50), new Color(220,220,220)); // Create UI setLayout(null); sb = new CbScrollbar(CbScrollbar.VERTICAL, this); add(sb); } // Create an empty hierarchy object, set to report user actions to // the given object. Hierarchy(HierarchyCallback c) { this(); callback = c; } // redraw // Called by the using class when the tree passed to this object // changes, to force a redraw and resizing of the scrollbar void redraw() { if (fnm != null) { render(); paint(getGraphics()); compscroll(); } } // setRoot // Set the root node for this hierarchy void setRoot(HierarchyNode r) { root = r; redraw(); } // selected // Return the currently selected node, or null HierarchyNode selected() { return sel; } // select // Selected the given node void select(HierarchyNode s) { sel = s; } // force the use of some font void setFont(Font f) { font = f; bim = null; repaint(); } // reshape // Called when this component gets resized public void reshape(int nx, int ny, int nw, int nh) { in = insets(); sbwidth = sb.minimumSize().width; width = nw-sbwidth - (in.left + in.right); height = nh - (in.top + in.bottom); sb.reshape(width+in.left, in.top, sbwidth, height); // force creation of a new backing images bim = null; repaint(); compscroll(); super.reshape(nx, ny, nw, nh); } // update // Called sometime after repaint() public void update(Graphics g) { render(); paint(g); } // paint // Blit the backing image to the front public void paint(Graphics g) { super.paint(g); if (bim == null) { // This is the first rendering bim = createImage(width, height); bg = bim.getGraphics(); bg.setFont(font); fnm = bg.getFontMetrics(); render(); compscroll(); } g.drawImage(bim, in.left, in.top, this); } // mouseDown // Called upon a mouseclick public boolean mouseDown(Event evt, int x, int y) { if (root == null) return false; // nothing to do HierarchyNode s = nodeat(root, x/16, (y/16)+top); if (s == null) { // Just deselect sel = null; repaint(); return true; } // Check for double-click boolean dc = false; if (evt.when-last < 500 && sel == s) dc = true; else last = evt.when; sel = s; if (dc && sel.ch != null) { // Open or close this node sel.open = !sel.open; if (callback != null) { // Notify callback, which MAY do something to change // the structure of the tree if (sel.open) callback.openNode(this, sel); else callback.closeNode(this, sel); } } else if (callback != null) { // Single click on a node or double-click on leaf node if (dc) callback.doubleNode(this, sel); else callback.clickNode(this, sel); } compscroll(); repaint(); return true; } public void moved(CbScrollbar s, int v) { moving(s, v); } public void moving(CbScrollbar s, int v) { top = sb.getValue(); compscroll(); repaint(); } // render // Draw the current tree view into the backing image private void render() { if (fnm != null) { int fh = fnm.getHeight(), // useful font metrics fa = fnm.getAscent(); bg.setColor(Color.white); bg.fillRect(0, 0, width, height); if (root == null) return; // nothing to do bg.setColor(Color.black); recurse(root, 0, 0, fh, fa); } } // recurse // Render a node in the tree at the given location, maybe followed // by all it's children. Return the number of rows this node took // to display. private int recurse(HierarchyNode n, int x, int y, int fh, int fa) { int xx = x*16, yy = (y-top)*16; int len = 1; n.x = x; n.y = y; int tw = fnm.stringWidth(n.text); if (yy >= 0 && yy <= height) { // Draw this node if (n.im != null) bg.drawImage(n.im, xx, yy, this); if (sel == n) { // Select this node bg.setColor(Color.lightGray); bg.fillRect(xx+17, yy+2, tw+2, 13); bg.setColor(Color.black); } bg.drawString(n.text, xx+18, yy+12); } if (n.ch != null && n.open && yy <= height) { // Mark this node bg.drawLine(xx+18, yy+14, xx+17+tw, yy+14); // Draw subnodes yy += 16; for(int i=0; i= n.x) return n; if (n.ch == null || !n.open) return null; for(int i=0; i= top+r) { top = s-1; if (top > list[0].size() - r) top = list[0].size() - r; sb.setValue(top); repaint(); } } // deleteItem // Remove one row from the list void deleteItem(int n) { for(int i=0; i 0) { System.arraycopy(sels, 0, nsels, 0, i); System.arraycopy(sels, i+1, nsels, i, nsels.length-i); sel = nsels[0]; } break; } } repaint(); compscroll(); } // clear // Remove everything from the list void clear() { for(int i=0; i= top && sels[i] <= bot) { bg.setColor(sels[i] == sel ? Color.lightGray : lighterGray); bg.fillRect(0, th+(sels[i]-top)*rowh, width, rowh); } } } // Draw each column for(int i=0; i w-3) s = s.substring(0, s.length()-1); if (!enabled) bg.setColor(Color.lightGray); else if (colors != null) bg.setColor(colors[j][i]); bg.drawString(s, x+1, th+(j+1-top)*rowh-fd); } else if (o instanceof Image) { // Render image in column Image im = (Image)o; bg.drawImage(im, x+1, th+(j-top)*rowh, this); } } } } // mouseDown // Select a list item or a column to drag public boolean mouseDown(Event e, int x, int y) { if (!enabled) { return true; } x -= in.left; y -= in.top; coldrag = -1; if (y < th) { // Click in title bar for(int i=0; i 0 && Math.abs(cpos[i] - x) < 3) { // clicked on a column separator coldrag = i; } else if (x >= cpos[i] && x < cpos[i+1]) { // clicked in a title callback.headingClicked(this, i); } } } else { // Item chosen from list int row = (y-th)/rowh + top; if (row < list[0].size()) { // Double-click? boolean dclick = false; if (e.when-last < 1000 && sel == row) dclick = true; else last = e.when; if (e.shiftDown() && multiselect && sel != -1) { // Select all from last selection to this one int zero = sels[0]; if (zero < row) { sels = new int[row-zero+1]; for(int i=zero; i<=row; i++) sels[i-zero] = i; } else { sels = new int[zero-row+1]; for(int i=zero; i>=row; i--) sels[zero-i] = i; } } else if (e.controlDown() && multiselect) { // Add this one to selection int nsels[] = new int[sels.length + 1]; System.arraycopy(sels, 0, nsels, 0,sels.length); nsels[sels.length] = row; sels = nsels; } else { // Select one row only, and de-select others sels = new int[1]; sels[0] = row; } sel = row; repaint(); last_event = e; if (callback != null) { // Callback the right function if (dclick) callback.doubleClick(this, row); else callback.singleClick(this, row); } else { // Send an event getParent().postEvent( new Event(this, Event.ACTION_EVENT, dclick?"Double":"Single")); } } } return true; } // mouseDrag // If a column is selected, change it's width public boolean mouseDrag(Event e, int x, int y) { if (!enabled) { return true; } x -= in.left; y -= in.top; if (coldrag != -1) { if (x > cpos[coldrag-1]+3 && x < cpos[coldrag+1]-3) { cpos[coldrag] = x; cwidth[coldrag-1] = (cpos[coldrag]-cpos[coldrag-1]) / (float)width; cwidth[coldrag] = (cpos[coldrag+1]-cpos[coldrag]) / (float)width; repaint(); } } return true; } public void moved(CbScrollbar s, int v) { moving(s, v); } public void moving(CbScrollbar s, int v) { top = sb.getValue(); compscroll(); repaint(); } // compscroll // Re-compute the size of the scrollbar private void compscroll() { if (fnm == null) return; // not visible int r = rows(); int c = list[0].size() - r; sb.setValues(top, r==0?1:r, list[0].size()); } // rows // Returns the number of rows visible in the list private int rows() { return Math.min(height/rowh - 1, list[0].size()); } public Dimension minimumSize() { return new Dimension(400, 100); } public Dimension preferredSize() { return minimumSize(); } } // MultiColumnCallback // Objects implementing this interface can be passed to the MultiColumn // class, to have their singleClick() and doubleClick() functions called in // response to single or double click in the list. interface MultiColumnCallback { // singleClick // Called on a single click on a list item void singleClick(MultiColumn list, int num); // doubleClick // Called upon double-clicking on a list item void doubleClick(MultiColumn list, int num); // headingClicked // Called when a column heading is clicked on void headingClicked(MultiColumn list, int col); } file/config.info.ca0100755000567100000120000000033210115717240014161 0ustar jcameronwheelhide_dot_files=Mostra els fitxers que comencen amb un punt,1,0-S,1-No iconsize=Mida dels botons a la barra d'eines,1,1-Petita,0-Gran amb etiquetes nocharset=Intenta fer servir el joc de carcters apropiat,1,0-S,1-No file/mount.cgi0100775000567100000120000000202510026221221013274 0ustar jcameronwheel#!/usr/local/bin/perl # mount.cgi # Mount or un-mount some filesystem # XXX need way to detect current status? # XXX should return result # XXX client must force refresh: # XXX can only deal with stuff in /etc/fstab require './file-lib.pl'; $disallowed_buttons{'mount'} && &error($text{'ebutton'}); &ReadParse(); print "Content-type: text/plain\n\n"; if ($access{'ro'} || $access{'uid'}) { # User is not allowed to mount print "$text{'mount_eaccess'}\n"; exit; } # Get current status $dir = &unmake_chroot($in{'dir'}); &foreign_require("mount", "mount-lib.pl"); @fstab = &mount::list_mounts(); @mtab = &mount::list_mounted(); ($fstab) = grep { $_->[0] eq $dir } @fstab; if (!$fstab) { # Doesn't exist! print "$text{'mount_efstab'}\n"; exit; } ($mtab) = grep { $_->[0] eq $dir } @mtab; if ($mtab) { # Attempt to un-mount now $err = &mount::unmount_dir(@$mtab); } else { # Attempt to mount now $err = &mount::mount_dir(@$fstab); } if ($err) { $err =~ s/<[^>]*>//g; $err =~ s/\n/ /g; print $err,"\n"; } else { print "\n"; } file/ToolbarLayout.class0100664000567100000120000000733710061451367015324 0ustar jcameronwheel- )T *U )V )W )X YZ[ \ ]^ ]_ `a `b Yc d ]e Yf Yg h ij `k `l Ym Yn Yo Yp )qrstuv U *w xy z{ |}~ LEFTI ConstantValueCENTERRIGHTalignhgapvgap()VCodeLineNumberTable(I)V(III)V getAlignment()I setAlignmentgetHgapsetHgapgetVgapsetVgapaddLayoutComponent)(Ljava/lang/String;Ljava/awt/Component;)VremoveLayoutComponent(Ljava/awt/Component;)VpreferredLayoutSize*(Ljava/awt/Container;)Ljava/awt/Dimension;minimumLayoutSizemoveComponents(Ljava/awt/Container;IIIIII)VlayoutContainer(Ljava/awt/Container;)VtoString()Ljava/lang/String; SourceFileToolbarLayout.java 8= 89 5. 6. 7. java/awt/Dimension 8 ?  . . . . . . LM ,align=left ,align=center ,align=rightjava/lang/StringBuffer  Q [hgap= ,vgap=] PQ ToolbarLayoutjava/lang/Objectjava/awt/LayoutManagerjava/io/Serializablejava/awt/Component getTreeLock()Ljava/lang/Object;(II)Vjava/awt/ContainergetComponentCount getInsets()Ljava/awt/Insets;java/awt/InsetsleftrightgetSize()Ljava/awt/Dimension;width getComponent(I)Ljava/awt/Component; isVisible()ZgetPreferredSizeheightjava/lang/Mathmax(II)ItopbottomgetMinimumSizesize setLocationsetSizegetClass()Ljava/lang/Class;java/lang/ClassgetNameappend,(Ljava/lang/String;)Ljava/lang/StringBuffer;(I)Ljava/lang/StringBuffer;!)*+,-./01./23./45.6.7.89:$*; 788<:$*; CD8=:<****;QR STU>?:*;_@<:"*; jkA?:*;sB<:"*; |}C?:*;D<:"*; EF:;GH:;IJ:t+M,»YN+ 6+ :6  `6+ 66 6 6 n+ :  [ :   6  *`6 `6*`!   ` `66   --` h`*`h`-: , :,;r -69<BJRYejs}KJ: +M,»YN+ 66M+:::---Y*`-Y`+ :-Y  `*h``-Y`*h``-:,:,;F%-4DIVdntLM: +:*-(l`=`=6 ;+ :  (  dl`* ``=  ç :   ;: (+25 : A IQfv NO:+M,+ N+- - `*h`d6+ 66-*`666 6 + :   :     `* *`6 `6 6<*+- *`d   6*``6 6 6  a*+- *`d ,ç : , ;f ! "&#,$:%@'F(N)V*]+l,~-.0134567';<=PQ:eL*(%L LLY *!"#$#*%&#*%+#'#(;EF G&H,I/KRSfile/MountWindow.class0100664000567100000120000000552210107637154015011 0ustar jcameronwheel- EX YZ[\ ]^ _` Da Db Dcd X efg hi jk lmno Yp Yq ]r s etu evw Xx yzG { D|I D}~   h *X * ] * ]  ] ]  7 7 7c 7 ] ] @syes LCbButton;nofilemgr LFileManager;fs LFileSystem;file LRemoteFile;((LFileManager;LFileSystem;LRemoteFile;)VCodeLineNumberTableclick (LCbButton;)V SourceFileFileManager.java P  mount_title2 mount_title1  JK LM NOjava/awt/BorderLayout  BorderPanel Pjava/awt/GridLayout P mount_rusure2 mount_rusure1java/awt/Label P Center java/awt/Paneljava/awt/FlowLayout PCbButton P GH IHSouth java/lang/StringBuffermount.cgi?dir=   FileNode  O O ErrorWindow mount_err2 mount_err1 MountWindow FixedFrameCbButtonCallback()V FileSystemmtabZ FileManagertext&(Ljava/lang/String;)Ljava/lang/String;java/awt/FramesetTitle(Ljava/lang/String;)Vjava/awt/Container setLayout(Ljava/awt/LayoutManager;)VUtilbodyLjava/awt/Color;(ILjava/awt/Color;)V(II)VmountLjava/lang/String;devJ(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;add*(Ljava/awt/Component;)Ljava/awt/Component;<(Ljava/lang/String;Ljava/awt/Component;)Ljava/awt/Component;(I)V'(Ljava/lang/String;LCbButtonCallback;)Vjava/awt/Windowpackshow recursiveBody(Ljava/awt/Component;)Vappend,(Ljava/lang/String;)Ljava/lang/StringBuffer;urlizetoString()Ljava/lang/String;get_text'(Ljava/lang/String;)[Ljava/lang/String;disposejava/lang/Stringequals(Ljava/lang/Object;)Zget_filesystemsnodemapLjava/util/Hashtable;java/util/Hashtableget&(Ljava/lang/Object;)Ljava/lang/Object;setimageknown RemoteFilelist [LRemoteFile;fill directory show_files(LRemoteFile;)Z showing_files DEFGHIHJKLMNOPQRE**+,*+*,*- * Y Y:Y ,:Y+,,W*WY:Y * Y+!*"Z#W* Y+$*"Z%W*&W*'*(*)SR$)4AO_zTUR'+*#**Y+,-*W*.-/0M*1,223c*4*5* 67N--8-9-:;-<*** =>WF**?>W4@Y**AB*,2CW*1SF  . 2=DVZ^ckoy&(VWfile/ToolbarLayout.java0100644000567100000120000002533410061451363015127 0ustar jcameronwheelimport java.awt.*; import java.lang.Math; /** * A ToolbarLayout arranges components in a left-to-right flow, much * like the FlowLayout which is supplied with the JDK. However, it * fixes the problem with the FlowLayout that occurs when a FlowLayout * is for a North aligned component of a BorderLayout--namely, that * if the window is shrunk so that some of the components within the * FlowLayout wrap to the next line the component does not grow in * height to support this wrapping. This bug was caused by the library * designers using the preferred size in recalculating, not the size * which is determined by the window width. As such, the flow layout * would always want to be the height of one row. * * A ToolbarLayout lets each component assume its natural (preferred) size. * * NOTE: This class was initially a subclass of FlowLayout, but we * encountered problems using that approach. * * @version 0.10, 1999-04-27 * @author Peter Armstrong * @author Tony Johnson */ public class ToolbarLayout implements LayoutManager, java.io.Serializable { /** * This value indicates that each row of components * should be left-justified. */ public static final int LEFT = 0; /** * This value indicates that each row of components * should be centered. */ public static final int CENTER = 1; /** * This value indicates that each row of components * should be right-justified. */ public static final int RIGHT = 2; int align; int hgap; int vgap; /** * Constructs a new ToolbarLayout with a left alignment and a * default 5-unit horizontal and vertical gap. */ public ToolbarLayout() { this(LEFT, 5, 5); } /** * Constructs a new ToolbarLayout with the specified alignment and a * default 5-unit horizontal and vertical gap. * The value of the alignment argument must be one of * ToolbarLayout.LEFT, ToolbarLayout.RIGHT, * or ToolbarLayout.CENTER. * @param align the alignment value */ public ToolbarLayout(int align) { this(align, 5, 5); } /** * Creates a new ToolbarLayout with the indicated alignment * and the indicated horizontal and vertical gaps. *

* The value of the alignment argument must be one of * ToolbarLayout.LEFT, ToolbarLayout.RIGHT, * or ToolbarLayout.CENTER. * @param align the alignment value. * @param hgap the horizontal gap between components. * @param vgap the vertical gap between components. */ public ToolbarLayout(int align, int hgap, int vgap) { this.align = align; this.hgap = hgap; this.vgap = vgap; } /** * Gets the alignment for this layout. * Possible values are ToolbarLayout.LEFT, * ToolbarLayout.RIGHT, or ToolbarLayout.CENTER. * @return the alignment value for this layout. * @see ToolbarLayout#setAlignment */ public int getAlignment() { return align; } /** * Sets the alignment for this layout. * Possible values are ToolbarLayout.LEFT, * ToolbarLayout.RIGHT, and ToolbarLayout.CENTER. * @param align the alignment value. * @see ToolbarLayout#getAlignment */ public void setAlignment(int align) { this.align = align; } /** * Gets the horizontal gap between components. * @return the horizontal gap between components. * @see ToolbarLayout#setHgap */ public int getHgap() { return hgap; } /** * Sets the horizontal gap between components. * @param hgap the horizontal gap between components * @see ToolbarLayout#getHgap */ public void setHgap(int hgap) { this.hgap = hgap; } /** * Gets the vertical gap between components. * @return the vertical gap between components. * @see ToolbarLayout#setVgap */ public int getVgap() { return vgap; } /** * Sets the vertical gap between components. * @param vgap the vertical gap between components * @see ToolbarLayout#getVgap */ public void setVgap(int vgap) { this.vgap = vgap; } /** * Adds the specified component to the layout. Sets the orientation to be horizontal. * @param name the name of the component * @param comp the component to be added */ public void addLayoutComponent(String name, Component comp) { } /** * Removes the specified component from the layout. Not used by * this class. * @param comp the component to remove * @see java.awt.Container#removeAll */ public void removeLayoutComponent(Component comp) { } /** * Returns the preferred dimensions for this layout given the components * in the specified target container. This method is the difference * between ToolbarLayout and FlowLayout. * @param target the component which needs to be laid out * @return the preferred dimensions to lay out the * subcomponents of the specified container. * @see Container * @see #minimumLayoutSize * @see java.awt.Container#getPreferredSize */ public Dimension preferredLayoutSize(Container target) { synchronized (target.getTreeLock()) { Dimension dim = new Dimension(0, 0); int nmembers = target.getComponentCount(); Insets insets = target.getInsets(); int numRows = 1; //the number of rows int rowSumWidth = insets.left + insets.right; //the width of the row so far int rowMaxWidth = target.getSize().width; //the width that the ToolbarLayout is in int rowHeight = 0; //the height of each row int numOnRow = 0; //the number of components on the row for (int i = 0 ; i < nmembers ; i++) { Component m = target.getComponent(i); if (m.isVisible()) { Dimension d = m.getPreferredSize(); rowHeight = Math.max(rowHeight, d.height); //make each row the height of the biggest component of all if (i > 0) { rowSumWidth += hgap;//add on the pre-spacing if this is not the first component } rowSumWidth += d.width; //add the width of the component //if it overflowed and if there are components already on this row then bump this component to next row if ((rowSumWidth + hgap) > rowMaxWidth) { if (numOnRow > 0) { numRows++; rowSumWidth = insets.left + insets.right + d.width; numOnRow = 0;//reset the number of components on the next row (we ++ no matter what later) } } numOnRow++;//add this component to the count of the number on the row } } dim.width = rowMaxWidth; dim.height = insets.top + insets.bottom + numRows*rowHeight + vgap*(numRows + 1); return dim; } } /** * Returns the minimum dimensions needed to layout the components * contained in the specified target container. * @param target the component which needs to be laid out * @return the minimum dimensions to lay out the * subcomponents of the specified container. * @see #preferredLayoutSize * @see java.awt.Container * @see java.awt.Container#doLayout */ public Dimension minimumLayoutSize(Container target) { synchronized (target.getTreeLock()) { Dimension dim = new Dimension(0, 0); int nmembers = target.getComponentCount(); for (int i = 0 ; i < nmembers ; i++) { Component m = target.getComponent(i); if (m.isVisible()) { Dimension d = m.getMinimumSize(); dim.height = Math.max(dim.height, d.height); if (i > 0) { dim.width += hgap; } dim.width += d.width; } } Insets insets = target.getInsets(); dim.width += insets.left + insets.right + hgap*2; dim.height += insets.top + insets.bottom + vgap*2; return dim; } } /** * Centers the elements in the specified row, if there is any slack. * @param target the component which needs to be moved * @param x the x coordinate * @param y the y coordinate * @param width the width dimensions * @param height the height dimensions * @param rowStart the beginning of the row * @param rowEnd the the ending of the row */ private void moveComponents(Container target, int x, int y, int width, int height, int rowStart, int rowEnd) { synchronized (target.getTreeLock()) { switch (align) { case LEFT: break; case CENTER: x += width / 2; break; case RIGHT: x += width; break; } for (int i = rowStart ; i < rowEnd ; i++) { Component m = target.getComponent(i); if (m.isVisible()) { m.setLocation(x, y + (height - m.size().height) / 2); x += hgap + m.size().width; } } } } /** * Lays out the container. This method lets each component take * its preferred size by reshaping the components in the * target container in order to satisfy the constraints of * this ToolbarLayout object. * @param target the specified component being laid out. * @see Container * @see java.awt.Container#doLayout */ public void layoutContainer(Container target) { synchronized (target.getTreeLock()) { Insets insets = target.getInsets(); int maxwidth = target.size().width - (insets.left + insets.right + hgap*2); int nmembers = target.getComponentCount(); int x = 0, y = insets.top + vgap; int rowh = 0, start = 0; for (int i = 0 ; i < nmembers ; i++) { Component m = target.getComponent(i); if (m.isVisible()) { Dimension d = m.getPreferredSize(); m.setSize(d.width, d.height); if ((x == 0) || ((x + d.width) <= maxwidth)) { if (x > 0) { x += hgap; } x += d.width; rowh = Math.max(rowh, d.height); } else { moveComponents(target, insets.left + hgap, y, maxwidth - x, rowh, start, i); x = d.width; y += vgap + rowh; rowh = d.height; start = i; } } } moveComponents(target, insets.left + hgap, y, maxwidth - x, rowh, start, nmembers); } } /** * Returns a string representation of this ToolbarLayout * object and its values. * @return a string representation of this layout. */ public String toString() { String str = ""; switch (align) { case LEFT: str = ",align=left"; break; case CENTER: str = ",align=center"; break; case RIGHT: str = ",align=right"; break; } return getClass().getName() + "[hgap=" + hgap + ",vgap=" + vgap + str + "]"; } } file/config.info.de0100644000567100000120000000036210067670017014174 0ustar jcameronwheelhide_dot_files=Verstecke Dateien mit einem Punkt am Anfang?,1,0-Ja,1-Nein iconsize=Größe der Buttons in der Toolbar,1,1-Klein,0-Groß mit Bildunterschrift nocharset=Versuche passende Zeichensätze zu benutzen?,1,0-Ja,1-Nein file/CHANGELOG0100664000567100000120000000046410115216626012676 0ustar jcameronwheel---- Changes since 1.130 ---- An uploaded zip, tar or tar.gz file can be extracted in the directory it was uploaded to. Directories can now be downloaded as zip, tar or tar.gz files Added improved access control options to hide buttons. Added a chroot access control option to hide all directories above it. file/FileSystem.class0100664000567100000120000000176510107637154014610 0ustar jcameronwheel-I *+ , - . / 01 2 3 4 5 6 789 : ;< = ->?mountLjava/lang/String;devtypeopts[Ljava/lang/String;aclsZattrsextmtabfstab(Ljava/lang/String;)VCodeLineNumberTable SourceFileFileManager.java $@StringSplitter $A BC   1 DE   ! " #java/util/StringTokenizer, $F GHjava/lang/String  FileSystemjava/lang/Object()V(Ljava/lang/String;C)V nextToken()Ljava/lang/String;equals(Ljava/lang/Object;)Z'(Ljava/lang/String;Ljava/lang/String;)V countTokens()I   !"#$%&*Y+ M*,*,*,,N*, *, *, *, *, Y-:*6*S*'F     ' , 9 F S ` !m #y $ % & % '()file/getfacl.cgi0100775000567100000120000000144710107635735013571 0ustar jcameronwheel#!/usr/local/bin/perl # getfacl.cgi # Gets the ACLs for some file require './file-lib.pl'; &ReadParse(); &switch_acl_uid_and_chroot(); print "Content-type: text/plain\n\n"; if (!&can_access($in{'file'})) { print $text{'facl_eaccess'},"\n"; } else { $getfacl = $config{'getfacl'}; if ($getfacl =~ /^\.\//) { $getfacl =~ s/^\./$module_root_directory/; } chdir("/"); if ($in{'file'} eq '/') { $in{'file'} = '.'; } else { $in{'file'} =~ s/^\///; } $out = `$getfacl '$in{'file'}' 2>&1`; if ($?) { print $out,"\n"; } else { foreach $l (split(/\n/, $out)) { $l =~ s/#.*$//; $l =~ s/\s+$//; push(@rv, $l) if ($l =~ /\S/); } if (!@rv) { print "Filesystem does not support ACLs\n"; } else { print "\n"; foreach $l (@rv) { print $l,"\n"; } } } } file/GotoWindow.class0100664000567100000120000000477210107637154014625 0ustar jcameronwheel- 5L 4M NO 4OP L QRSTU VW X QYZ[ \ 4] V^ _`a Lb \cd Vef g 4h Qijk 4lm no pq pr st uvw Nx yz s{ 4| y} p| N~    4editorLEditorWindow;filemgr LFileManager;lineLjava/awt/TextField;goto_b LCbButton;cancel_b(LEditorWindow;)VCodeLineNumberTableclick (LCbButton;)Vdispose()V handleEvent(Ljava/awt/Event;)Z SourceFileFileManager.java @G 78 9:java/awt/BorderLayout Westjava/awt/Label edit_gotoline @ Centerjava/awt/TextField @ ;<  java/awt/Paneljava/awt/FlowLayoutCbButtongoto.gif  edit_goto @ =>  cancel.gifclose ?>South  G G  java/lang/Exception  FG  DE GotoWindow FixedFrameCbButtonCallback EditorWindowjava/awt/Container setLayout(Ljava/awt/LayoutManager;)V FileManagertext&(Ljava/lang/String;)Ljava/lang/String;(Ljava/lang/String;)Vadd<(Ljava/lang/String;Ljava/awt/Component;)Ljava/awt/Component;(I)VfixedLjava/awt/Font;java/awt/ComponentsetFont(Ljava/awt/Font;)V get_image$(Ljava/lang/String;)Ljava/awt/Image;8(Ljava/awt/Image;Ljava/lang/String;ILCbButtonCallback;)V*(Ljava/awt/Component;)Ljava/awt/Component;Util recursiveBody(Ljava/awt/Component;)Vjava/awt/Windowpackshowjava/awt/TextComponentgetText()Ljava/lang/String;java/lang/IntegerparseInt(Ljava/lang/String;)IeditLjava/awt/TextArea;java/lang/StringcharAt(I)Cselect(II)Vlength()I goto_window LGotoWindow;java/awt/EventtargetLjava/lang/Object;idIkey 456789:;<=>?>@AB**+*+*Y* Y* W**Y Z W**YM,Y,*Y** *ZW,*Y** *Z!W*", W*#*$*%CB 3HV^jDEBo+*]*&'=N*)&N66--* *)+*,--Ч+*!*,(CB #&,7:@NRSbj!n#FGB- *.*/C'( )HIBN*+0* +1+2 **3C-.&/(1JKfile/ACLEntry.class0100664000567100000120000000443310107637154014140 0ustar jcameronwheel- ,D EF +F EG +GH I J +KL M +NOP +Q R S +T +U +VWX DY Z [\ ]^_`a bc ]de bfghijkl mnofilemgr LFileManager;file LRemoteFile;defZtypeLjava/lang/String;ownerreadwriteexec (Ljava/lang/String;LACLWindow;)VCodeLineNumberTable(LACLWindow;)VgetRow()[Ljava/lang/String;toString()Ljava/lang/String; SourceFileFileManager.java 9pq -. /0StringSplitter 9r sA 34default tu 12maskother 54 vw xy 62 72 82java/lang/Stringjava/lang/StringBufferacltype_default_ z{ @Aacltype_| }~user eacl_user `4 } eacl_group 4 info_read  info_write info_execdefault:: zACLEntryjava/lang/Object()V ACLWindow(Ljava/lang/String;C)V nextTokenequals(Ljava/lang/Object;)Zlength()IcharAt(I)Cappend,(Ljava/lang/String;)Ljava/lang/StringBuffer; FileManagertext&(Ljava/lang/String;)Ljava/lang/String; RemoteFile8(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;group(C)Ljava/lang/StringBuffer; +,-./01234546272829:; **,*,Y+:N*- *  * *- *  &*  *-**-: -:*r*w*x<N 4 5 6 7 8' 93 :8 ;@ =X >` ?j @o Bu C} D F G H I9=;9**+*+< L M N O>?;@L* Y* Y* M+*,S*  *  * * +SI* +*S8*  +** !S+*"*#!S+S*&Y+]2*$%S*&Y+]2*&%S*&Y+]2*'%S+<> S T< UG Vm Xu Y| Z [ \ ^ _ ` a b> c@A;* (LY+* )L*  6*  *Y+**)LY+*r-*LY+*w-*LY+*x-*L+<" h i* jB ki l m n oBCfile/setfacl.cgi0100775000567100000120000000161010107636027013570 0ustar jcameronwheel#!/usr/local/bin/perl # setfacl.cgi # Sets the ACLs for some file require './file-lib.pl'; $disallowed_buttons{'acl'} && &error($text{'ebutton'}); &ReadParse(); &webmin_log("acl", undef, $in{'file'}, \%in); &switch_acl_uid_and_chroot(); print "Content-type: text/plain\n\n"; if ($access{'ro'} || !&can_access($in{'file'})) { print $text{'facl_eaccess'},"\n"; } else { pipe(ACLINr, ACLINw); pipe(ACLOUTr, ACLOUTw); $pid = fork(); if (!$pid) { untie(*STDIN); untie(*STDOUT); untie(*STDERR); open(STDIN, "<&ACLINr"); open(STDOUT, ">&ACLOUTw"); open(STDERR, ">&ACLOUTw"); close(ACLINw); close(ACLOUTr); exec("$config{'setfacl'} '$in{'file'}'"); print "Exec failed : $!\n"; exit(1); } close(ACLINr); close(ACLOUTw); print ACLINw $in{'acl'},"\n"; close(ACLINw); waitpid($pid, 0); $rv = ; close(ACLOUTr); if ($rv) { print $rv; } else { print "\n"; } } file/ACLEditor.class0100664000567100000120000001212110107637154014256 0ustar jcameronwheel-Q m l l l l l                  - /  1 l l l   -  l  l  l  K l l 1  \  l filemgr LFileManager;aclwin LACLWindow;acl LACLEntry;creatingZok LCbButton;delreadLjava/awt/Checkbox;writeexecowner1owner2ownerLjava/awt/TextField;(LACLWindow;LACLEntry;)VCodeLineNumberTable!(LACLWindow;Ljava/lang/String;Z)VmakeUI()Vclick (LCbButton;)Vdispose SourceFileFileManager.java qr op st uv ACLEntry  v  eacl_create eacl_edit    java/awt/BorderLayout  java/awt/Paneljava/awt/GridLayout West Eastjava/awt/Label eacl_acltype  java/awt/TextFieldjava/lang/StringBufferdefault       mask !"other eacl_aclnamejava/awt/FlowLayout #java/awt/CheckboxGroupjava/awt/Checkbox eacl_owner  $ ~{ { user eacl_user %&'  ( eacl_group ) eacl_aclperms * info_read zv z{ info_write |v |{ info_exec }v }{CbButtonsave.gif +,save - wx cancel.gifdelete yxSouth. /01 2 3 45 6 7 89 ErrorWindow eacl_eowner :;< => ?@ ABC DE FG HI J* K* LMN OP ACLEditor FixedFrameCbButtonCallback ACLWindow(LACLWindow;)VdeftypeLjava/lang/String; FileManagertext&(Ljava/lang/String;)Ljava/lang/String;java/awt/FramesetTitle(Ljava/lang/String;)Vjava/awt/Container setLayout(Ljava/awt/LayoutManager;)V(II)Vadd<(Ljava/lang/String;Ljava/awt/Component;)Ljava/awt/Component;*(Ljava/awt/Component;)Ljava/awt/Component;append,(Ljava/lang/String;)Ljava/lang/StringBuffer;toString()Ljava/lang/String;(Ljava/lang/String;I)Vjava/awt/TextComponent setEditable(Z)VfixedLjava/awt/Font;java/awt/ComponentsetFont(Ljava/awt/Font;)Vjava/lang/Stringequals(Ljava/lang/Object;)Z(III)V.(Ljava/lang/String;Ljava/awt/CheckboxGroup;Z)Vfile LRemoteFile; RemoteFile8(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;group(I)V get_image$(Ljava/lang/String;)Ljava/awt/Image;8(Ljava/awt/Image;Ljava/lang/String;ILCbButtonCallback;)VUtil recursiveBody(Ljava/awt/Component;)Vjava/awt/WindowpackshowgetState()ZgetTexttrimlength()IacllistLjava/util/Vector;java/util/Vector addElement(Ljava/lang/Object;)Vacltable LMultiColumn;getRow()[Ljava/lang/String; MultiColumnaddItem([Ljava/lang/Object;)VindexOf(Ljava/lang/Object;)I modifyItem([Ljava/lang/Object;I)VremoveElementAt deleteItemedmapLjava/util/Hashtable;java/util/Hashtableremove&(Ljava/lang/Object;)Ljava/lang/Object; lmn opqrstuvwxyxz{|{}{~{{S#**+***,**     " u=**+***Y* * *, **&   # + 3 8 < h***  *YYL+Y*+WYM,Y*,W+Y*W,YY * !"#* #$%YNW-&-*'(* )** +*+Y*,W* Y:-Y./Y0:*1Y*2*34Z5W*1Y"*34Z6W*Y*3" *3%Z7W*7*'(,W* *3@*Y*3" *3%7*7*'(,*7Wc* 8**9*:;<:*=*:><:Y?:&*'(,W+Y*@WY:-YA*1Y*B*C4ZDW*1Y*E*F4ZGW*1Y*H*I4ZJW,WY:-YA*KY*LM*N*OZPW*=*3 * )*KY*QM*R*OZSW*TW*U*V*W3  $ , 9 A I V ^ s    E j         ! 6 A G S Z o x        1 L r {    )+*P*5*5X*3[*7T*7YZM,[* \Y*]^W**7Y3*3[ *3**DXC**GXF**JXI*%*_*`*a*bc$*_*d=*a*be*f4+*S,*_*d=*_g*ah*fj   $ + 6 G X Y g t |     $ ( 4*i*jW*k   file/ACLWindow.class0100664000567100000120000001214210107637154014302 0ustar jcameronwheel-O q  p  p p p p      "   ) p ,  , )  3 5  7 p  ? p  ? E p~ p  , , ,    ?   h )  h  filemgr LFileManager;file LRemoteFile;acllistLjava/util/Vector;edmapLjava/util/Hashtable;ok LCbButton;canceladdaddtypeLjava/awt/Choice;acltable LMultiColumn;acltypes[Ljava/lang/String;(LFileManager;LRemoteFile;)VCodeLineNumberTableclick (LCbButton;)V doubleClick(LMultiColumn;I)V singleClickheadingClicked SourceFileFileManager.java java/util/Vector  xyjava/util/Hashtable z{java/lang/Stringusergroupmask default user default group default other default mask  eacl_title       tu vwjava/lang/StringBuffergetfacl.cgi?file=      ErrorWindow eacl_eacls java/awt/BorderLayout  eacl_acltype   eacl_aclname eacl_aclperms MultiColumn  ACLEntry   !" #$Center %java/awt/Paneljava/awt/FlowLayout &CbButtonadd.gif '(eacl_add ) } * +,java/awt/Choice acltype_ -. #java/awt/Label save.gifsave |} cancel.gif ~}South/ 012 3 4 56 78 9 + :;other <eacl_edefaults = setfacl.cgi?file=&acl= eacl_efailed  > ? @default AB CD eacl_edefmask eacl_emask ACLEditor E F GH I JK LM N ACLWindow FixedFrameCbButtonCallbackMultiColumnCallback(II)V()V RemoteFilepathLjava/lang/String; FileManagertext8(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;java/awt/FramesetTitle(Ljava/lang/String;)Vappend,(Ljava/lang/String;)Ljava/lang/StringBuffer;urlize&(Ljava/lang/String;)Ljava/lang/String;toString()Ljava/lang/String;get_text'(Ljava/lang/String;)[Ljava/lang/String;length()Ijava/awt/Container setLayout(Ljava/awt/LayoutManager;)V+([Ljava/lang/String;LMultiColumnCallback;)V (Ljava/lang/String;LACLWindow;)V addElement(Ljava/lang/Object;)VgetRow()[Ljava/lang/String;addItem([Ljava/lang/Object;)V<(Ljava/lang/String;Ljava/awt/Component;)Ljava/awt/Component;(I)V get_image$(Ljava/lang/String;)Ljava/awt/Image;8(Ljava/awt/Image;Ljava/lang/String;ILCbButtonCallback;)V*(Ljava/awt/Component;)Ljava/awt/Component;typeIreplace(CC)Ljava/lang/String;Util recursiveBody(Ljava/awt/Component;)Vjava/awt/Windowpackshow elementAt(I)Ljava/lang/Object;defZownerequals(Ljava/lang/Object;)Zsize,(Ljava/lang/Object;)Ljava/lang/StringBuffer;J(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;disposegetSelectedIndex startsWith(Ljava/lang/String;)Z substring(I)Ljava/lang/String;!(LACLWindow;Ljava/lang/String;Z)Vselectedget&(Ljava/lang/Object;)Ljava/lang/Object;(LACLWindow;LACLEntry;)Vput8(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;toFrontjava/awt/Component requestFocus pqrs tuvwxyz{|}~}} @*,*Y*Y*Y SY SY SY SY SYSYS*+,*+*,*Y*W*N-2Y* -2!W*"Y#$Y*%&SY*'&SY*(&S:*)Y**+6),Y-2*-:*.*+/0-*1*+2W3Y4:5Y6$*7Y*89*:&*;Z<=W*> *6*?Y@ZA=W68YB*2 _C: *A* &DEYFG=W*7Y*H9*I&*;ZJ=W*7Y*K9*L&*;ZM=W*N2W*O*P*Q% $   M %[ &` 'e * , - . 2 3 6 7 8 9 : 7 <* =3 >@ ?f B{ C D E F D H I L* O3 Q7 R; S? T +*JA=>666]*R,:S=S:T2U V>U V6UWV6*X# Y*Y&!WZ:6+Y*R,[\:*X*Y]*W*^*W:  2"Y*_* 2`!W*a+*<**Ab2McN,-d6 ,-eM, VX6F*R,:U,V)SY*fg&!W*XhY*,iW+*M*a' X [ \ ] ^& _0 `@ aO b_ co ]~ f g h l m n m o r s? vF xN z[ {^ |e }j ~s |          K+j>D*R,:*kh:*hY*lmW no&   $ ) @ E J   file/unicode.pl0100775000567100000120000000056710046121026013446 0ustar jcameronwheel#!/usr/bin/perl use Encode::HanConvert; $ENV{'WEBMIN_CONFIG'} ||= "/etc/webmin"; $ENV{'WEBMIN_VAR'} ||= "/var/webmin"; $no_acl_check++; do './file-lib.pl'; @lang_order_list = ( "zh_TW.Big5" ); %big5 = &load_language($module_name); foreach $k (keys %big5) { $unicode{$k} = big5_to_trad($big5{$k}); } &write_file("$module_root_directory/unicode/zh_TW.Big5", \%unicode); file/config-irix0100664000567100000120000000023007756236104013626 0ustar jcameronwheelxfs_acl=&has_command("chacl") xfs_attr=&has_command("attr") getfacl=./irix-getfacl.pl setfacl=./irix-setfacl.pl hide_dot_files=0 iconsize=0 nocharset=0 file/setattrs.cgi0100775000567100000120000000171510107636006014023 0ustar jcameronwheel#!/usr/local/bin/perl # setattrs.cgi # Sets all the XFS attributes for a file require './file-lib.pl'; $disallowed_buttons{'attr'} && &error($text{'ebutton'}); &ReadParse(); &webmin_log("attr", undef, $in{'file'}, \%in); &switch_acl_uid_and_chroot(); print "Content-type: text/plain\n\n"; if ($access{'ro'} || !&can_access($in{'file'})) { print $text{'facl_eaccess'},"\n"; } else { # Set given attribs $temp = &tempname(); for($i=0; defined($n = $in{"name$i"}); $i++) { $v = $in{"value$i"}; open(TEMP, ">$temp"); print TEMP $v; close(TEMP); $out = `attr -s '$n' '$in{'file'}' <$temp 2>&1`; unlink($temp); if ($?) { print $out,"\n"; exit; } $set{$n}++; } # Remove those that no longer exist $out = `attr -l '$in{'file'}' 2>&1`; foreach $l (split(/[\r\n]+/, $out)) { if ($l =~ /Attribute\s+"(.*)"/i && !$set{$1}) { $out = `attr -r '$1' '$in{'file'}' 2>&1`; if ($?) { print $out,"\n"; exit; } } } print "\n"; } file/irix-getfacl.pl0100775000567100000120000000210207530043354014374 0ustar jcameronwheel#!/usr/local/bin/perl # irix-getfacl.pl # Wrapper for the ls -D command $esc = quotemeta($ARGV[0]); $out = `ls -dDL $esc 2>&1`; if ($?) { print STDERR $out; exit 1; } if ($out !~ /\[([^\]]*)\]/) { print STDERR "Failed to parse ls -D output : $out\n"; exit 1; } if ($1) { # Convert to normal ACL form ($acl, $dacl) = split(/\//, $1); foreach (split(/,/, $acl)) { s/^u:/user:/; s/^g:/group:/; s/^o:/other:/; s/^m:/mask:/; print $_,"\n"; } foreach (split(/,/, $dacl)) { s/^u:/user:/; s/^g:/group:/; s/^o:/other:/; s/^m:/mask:/; print "default:",$_,"\n"; } } else { # Make up ACL from perms local @st = stat($ARGV[0]); local $other = $st[2] & 7; local $group = ($st[2] >> 3) & 7; local $user = ($st[2] >> 6) & 7; print "user::",&octal_to_perms($user),"\n"; print "group::",&octal_to_perms($group),"\n"; print "other::",&octal_to_perms($other),"\n"; print "mask::",&octal_to_perms($user | $group),"\n"; } sub octal_to_perms { local $rv; $rv .= ($_[0] & 4 ? "r" : "-"); $rv .= ($_[0] & 2 ? "w" : "-"); $rv .= ($_[0] & 1 ? "x" : "-"); return $rv; } file/irix-setfacl.pl0100775000567100000120000000127107530045100014405 0ustar jcameronwheel#!/usr/local/bin/perl # irix-setfacl.pl # Wrapper for the chacl command while() { s/\r|\n//g; $default = ($_ =~ s/^default://); s/^(other|mask):([rwx\-]{3})$/\1::\2/g; if ($default) { push(@dacl, $_); } else { push(@acl, $_); } } $esc = quotemeta($ARGV[0]); $acl = join(",", @acl); $dacl = join(",", @dacl); if ($acl && $dacl) { $out = `chacl -b $acl $dacl $esc 2>&1`; } elsif ($acl) { if (-d $ARGV[0]) { $out = `chacl $acl $esc 2>&1 && chacl -D $esc 2>&1`; } else { $out = `chacl $acl $esc 2>&1`; } } elsif ($dacl) { $out = `chacl -d $dacl $esc 2>&1 && chacl -R $esc 2>&1`; } else { $out = `chacl -B $esc 2>&1`; } if ($?) { print STDERR $out; exit 1; } file/getattrs.cgi0100775000567100000120000000144010107635725014011 0ustar jcameronwheel#!/usr/local/bin/perl # getattrs.cgi # Returns a list in URL-encode name=value format of attributes on some file require './file-lib.pl'; &ReadParse(); &switch_acl_uid_and_chroot(); print "Content-type: text/plain\n\n"; if (!&can_access($in{'file'})) { print $text{'facl_eaccess'},"\n"; } else { $out = `attr -l '$in{'file'}' 2>&1`; if ($?) { print $out,"\n"; } else { foreach $l (split(/[\r\n]+/, $out)) { if ($l =~ /Attribute\s+"(.*)"/i) { # Get the valid for this attribute local $name = $1; $got = `attr -g '$name' '$in{'file'}' 2>&1`; if ($? || $got !~ /^(.*)\n([\0-\377]*)\n$/) { print $got,"\n"; exit; } push(@rv, [ $name, $2 ] ); } } print "\n"; foreach $r (@rv) { print &urlize($r->[0]),"=",&urlize($r->[1]),"\n"; } } } file/FileAttribute.class0100664000567100000120000000137410107637154015263 0ustar jcameronwheel-+        !nameLjava/lang/String;value"(Ljava/lang/String;LFileManager;)VCodeLineNumberTable'(Ljava/lang/String;Ljava/lang/String;)VgetRow()[Ljava/lang/String; SourceFileFileManager.java " #$ %&' () %* java/lang/String FileAttributejava/lang/Object()VindexOf(I)I substring(II)Ljava/lang/String; FileManager un_urlize&(Ljava/lang/String;)Ljava/lang/String;(I)Ljava/lang/String;  O'*+=>*+*+`  !&"3**+*,%& '(+Y*SY*S,file/AttributeEditor.class0100664000567100000120000000705310107637154015632 0ustar jcameronwheel- Jg Ih Ii jk Ik Il Imno pqr st uvw g xyz g{ |}~  x   I s  x  # I ( s * I I  9 j j  I j filemgr LFileManager;attrwinLAttributesWindow;attrLFileAttribute;creatingZok LCbButton;delnameLjava/awt/TextField;valueLjava/awt/TextArea;$(LAttributesWindow;LFileAttribute;)VCodeLineNumberTable(LAttributesWindow;)VmakeUI()Vclick (LCbButton;)Vdispose SourceFileFileManager.java [a NO PQ LM RS `a FileAttribute [ attr_create attr_edit  java/awt/BorderLayout java/awt/Paneljava/awt/GridLayout [java/awt/Label attr_name [ java/awt/TextField W [ WX  North  attr_valuejava/awt/TextArea Y [ YZCenterjava/awt/FlowLayout [CbButtonsave.gif save [ TU cancel.gifdelete VUSouth  a a   ErrorWindow attr_ename   da  AttributeEditor FixedFrameCbButtonCallbackAttributesWindow'(Ljava/lang/String;Ljava/lang/String;)V FileManagertext&(Ljava/lang/String;)Ljava/lang/String;java/awt/FramesetTitle(Ljava/lang/String;)Vjava/awt/Container setLayout(Ljava/awt/LayoutManager;)V(II)Vadd*(Ljava/awt/Component;)Ljava/awt/Component;Ljava/lang/String;(Ljava/lang/String;I)VfixedLjava/awt/Font;java/awt/ComponentsetFont(Ljava/awt/Font;)V<(Ljava/lang/String;Ljava/awt/Component;)Ljava/awt/Component;(Ljava/lang/String;II)V(I)V get_image$(Ljava/lang/String;)Ljava/awt/Image;8(Ljava/awt/Image;Ljava/lang/String;ILCbButtonCallback;)VUtil recursiveBody(Ljava/awt/Component;)Vjava/awt/Windowpackshowjava/awt/TextComponentgetText()Ljava/lang/String;java/lang/Stringlength()IattrlistLjava/util/Vector;java/util/Vector addElement(Ljava/lang/Object;)V attrtable LMultiColumn;getRow()[Ljava/lang/String; MultiColumnaddItem([Ljava/lang/Object;)VindexOf(Ljava/lang/Object;)I modifyItem([Ljava/lang/Object;I)VremoveElementAt deleteItemedmapLjava/util/Hashtable;java/util/Hashtableremove&(Ljava/lang/Object;)Ljava/lang/Object; IJKLMNOPQRSTUVUWXYZ[\]P **+*,*+**^;< =>?@A[_]Z***+*Y  *+**^DE FG H%I)J`a]E***  *YYL+Y+Y* W+*Y*ZW*** +!WYM,Y,Y*" W,*#Y*$%Z&W*',!WYN-(Y)-**Y*+,*- *.Z/W*(-**Y*0,*1 *.Z2W*3-!W*4*5*6^^NO$Q,R9SNThUvV~XYZ[\^_`c d0g8i<j@kDlbc]"+*/*789Y*: ;W**7**&7$*%*<*=*>*?@$*<*A=*>*?B*C4+*2,*<*A=*<D*>E*C^Jprs&t'v5wCxJzX{l{da]4*F*GW*H^effile/AttributesWindow.class0100664000567100000120000001000010107637154016020 0ustar jcameronwheel- Xuv w Wxy w Wz{ |} ~ W W w  ~  ~   w  ~ W #  #   *w , ~ . W  5 We W    # #  ~  O  O  filemgr LFileManager;file LRemoteFile;attrlistLjava/util/Vector;edmapLjava/util/Hashtable;ok LCbButton;canceladd attrtable LMultiColumn;(LFileManager;LRemoteFile;)VCodeLineNumberTableclick (LCbButton;)V doubleClick(LMultiColumn;I)V singleClickheadingClicked SourceFileFileManager.java ijava/util/Vector i _`java/util/Hashtable ab attr_title   [\ ]^java/lang/StringBuffergetattrs.cgi?file=  ErrorWindow attr_eattrs ijava/awt/BorderLayout java/lang/String attr_name  attr_value MultiColumn i gh FileAttribute i Center fjava/awt/Paneljava/awt/FlowLayout iCbButtonadd.gif attr_add i fd fjava/awt/Label save.gifsave cd cancel.gif edSouth   &name = &value  setattrs.cgi?file= attr_efailed  AttributeEditor i   i      AttributesWindow FixedFrameCbButtonCallbackMultiColumnCallback(II)V()V RemoteFilepathLjava/lang/String; FileManagertext8(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;java/awt/FramesetTitle(Ljava/lang/String;)Vappend,(Ljava/lang/String;)Ljava/lang/StringBuffer;urlize&(Ljava/lang/String;)Ljava/lang/String;toString()Ljava/lang/String;get_text'(Ljava/lang/String;)[Ljava/lang/String;length()Ijava/awt/Container setLayout(Ljava/awt/LayoutManager;)V+([Ljava/lang/String;LMultiColumnCallback;)V"(Ljava/lang/String;LFileManager;)V addElement(Ljava/lang/Object;)VgetRow()[Ljava/lang/String;addItem([Ljava/lang/Object;)V<(Ljava/lang/String;Ljava/awt/Component;)Ljava/awt/Component;(I)V get_image$(Ljava/lang/String;)Ljava/awt/Image;8(Ljava/awt/Image;Ljava/lang/String;ILCbButtonCallback;)V*(Ljava/awt/Component;)Ljava/awt/Component;Util recursiveBody(Ljava/awt/Component;)Vjava/awt/Windowpackshow elementAt(I)Ljava/lang/Object;(I)Ljava/lang/StringBuffer;namevaluesizeJ(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;dispose(LAttributesWindow;)Vselectedget&(Ljava/lang/Object;)Ljava/lang/Object;$(LAttributesWindow;LFileAttribute;)Vput8(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;toFrontjava/awt/Component requestFocus WXYZ[\]^_`abcdedfdghijk-*,*Y*Y*+, *+ *, * Y*W* N-2Y* -2 W*YY* SY* S:* Y*!"6,#Y-2* $:*%*"&'-*(*")W*Y+:,Y-*.Y* /0* 1*2Z34W5Y674W*.Y* 80* 9*2Z:4W*.Y* ;0* <*2Z=4W*>)W*?*@*Alz  . 3 8 ^ g { |  0 ? e      mnk<+*:BM>X*C#:Y,DEF*WGHEF*WIM*J* YK*W* ,:2"Y* L* 2MW**N#+*3OY*PW+*=*Nl>    b p opkK+Q>D*C#:*RO:*OY*STW UVl&  $)@ E J qpklrpklstfile/EXTWindow.class0100664000567100000120000000700510107637154014345 0ustar jcameronwheel- Rijklmnopqr Qst i Quv wx yz {| Q} Q~ i  y  y     #i  y & * Q , ,   5i 7 y 9 QZ Q ,   y filemgr LFileManager;file LRemoteFile;ok LCbButton;cancelcbs[Ljava/awt/Checkbox;attrs[Ljava/lang/String;attrmapLjava/util/Hashtable;(LFileManager;LRemoteFile;)VCodeLineNumberTableclick (LCbButton;)V SourceFileFileManager.java ajava/lang/StringAacdisSu ]^java/util/Hashtable _` ext_title   TU VWjava/lang/StringBuffergetext.cgi?file=  ErrorWindow ext_eattrs a  java/awt/BorderLayout  LinedPanel ext_header java/awt/GridLayout ajava/awt/Checkbox [\eattr_ Center java/awt/Paneljava/awt/FlowLayout aCbButtonsave.gif save a XY cancel.gif ZYSouth   setext.cgi?file=&attrs= ext_efailed  EXTWindow FixedFrameCbButtonCallback()V RemoteFilepathLjava/lang/String; FileManagertext8(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;java/awt/FramesetTitle(Ljava/lang/String;)Vappend,(Ljava/lang/String;)Ljava/lang/StringBuffer;urlize&(Ljava/lang/String;)Ljava/lang/String;toString()Ljava/lang/String;get_text'(Ljava/lang/String;)[Ljava/lang/String;length()I substring(II)Ljava/lang/String;put8(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;java/awt/Container setLayout(Ljava/awt/LayoutManager;)V(II)Vget&(Ljava/lang/Object;)Ljava/lang/Object;setState(Z)Vadd*(Ljava/awt/Component;)Ljava/awt/Component;<(Ljava/lang/String;Ljava/awt/Component;)Ljava/awt/Component;(I)V get_image$(Ljava/lang/String;)Ljava/awt/Image;8(Ljava/awt/Image;Ljava/lang/String;ILCbButtonCallback;)VUtil recursiveBody(Ljava/awt/Component;)Vjava/awt/WindowpackshowgetState()Zremovekeys()Ljava/util/Enumeration;java/util/Enumeration nextElement()Ljava/lang/Object;,(Ljava/lang/Object;)Ljava/lang/StringBuffer;hasMoreElementsJ(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;dispose QRSTUVWXYZY[\]^_`abc**YSYSYSYSYSYSY SY S * Y *+,*+*,*Y*W*N-2Y*-2W6*-2` !"W-2*#Y$%&Y*'():*Y+%** ,-6a*-,Y*Y.* 2(/S*-2** 201*-22W* *34W5Y6:7Y8%*9Y*:;*<(*=Z>2W*9Y*?;*@(*=ZA2W*B4W*C*D*Ed 7BPUZ3S`mvefcB+*>!M>8*-2FY,* 2M** 2GW*-*H:Y,IJMK*YL*W*M,:2"Y*N*2OW*P+*A*PdF 4BNZs}ghfile/getext.cgi0100775000567100000120000000075510107635731013461 0ustar jcameronwheel#!/usr/local/bin/perl # getext.cgi # Returns a string of EXT attributes for some file require './file-lib.pl'; &ReadParse(); &switch_acl_uid_and_chroot(); print "Content-type: text/plain\n\n"; if (!&can_access($in{'file'})) { print $text{'facl_eaccess'},"\n"; } else { $out = `lsattr -d '$in{'file'}' 2>&1`; $out =~ s/^lsattr.*\n//; if ($? || $out !~ /^(\S+)\s/) { print $out,"\n"; } else { print "\n"; @a = split(//, $1); print join("", grep { $_ ne '-' } @a),"\n"; } } file/QuickSort.java0100664000567100000120000000341310061451363014247 0ustar jcameronwheelpublic class QuickSort { static int col, dir; // Sorts entire array public static void sort(RemoteFile array[], int c, int d) { col = c; dir = d; psort(array, 0, array.length - 1); } // Sorts partial array public static void psort(RemoteFile array[], int start, int end) { int p; if (end > start) { p = partition(array, start, end); psort(array, start, p-1); psort(array, p+1, end); } } protected static int compare(RemoteFile a, RemoteFile b) { long rv = 0; if (col == 1) rv = a.name.compareTo(b.name); else if (col == 2) rv = a.size - b.size; else if (col == 3) rv = a.user.compareTo(b.user); else if (col == 4) rv = a.group.compareTo(b.group); else rv = a.modified - b.modified; rv = rv < 0 ? -1 : rv > 0 ? 1 : 0; return (int)(dir == 2 ? -rv : rv); } protected static int partition(RemoteFile array[], int start, int end) { int left, right; RemoteFile partitionElement; // Arbitrary partition start...there are better ways... partitionElement = array[end]; left = start - 1; right = end; for (;;) { while (compare(partitionElement, array[++left]) == 1) { if (left == end) break; } while (compare(partitionElement, array[--right]) == -1) { if (right == start) break; } if (left >= right) break; swap(array, left, right); } swap(array, left, end); return left; } protected static void swap(RemoteFile array[], int i, int j) { RemoteFile temp; temp = array[i]; array[i] = array[j]; array[j] = temp; } } file/setext.cgi0100775000567100000120000000072310107636022013462 0ustar jcameronwheel#!/usr/local/bin/perl # setext.cgi # Sets the EXT attributes for some file require './file-lib.pl'; $disallowed_buttons{'ext'} && &error($text{'ebutton'}); &ReadParse(); &switch_acl_uid_and_chroot(); print "Content-type: text/plain\n\n"; if ($access{'ro'} || !&can_access($in{'file'})) { print $text{'facl_eaccess'},"\n"; } else { $cmd = "chattr '=$in{'attrs'}' '$in{'file'}'"; $out = `$cmd 2>&1`; if ($?) { print $out,"\n"; } else { print "\n"; } } file/config-*-linux0100664000567100000120000000073007756236104014146 0ustar jcameronwheelxfs_acl=&has_command("getfacl") && &has_command("setfacl") ext2_acl=&has_command("getfacl") && &has_command("setfacl") ext3_acl=&has_command("getfacl") && &has_command("setfacl") xfs_attr=&has_command("attr") ext2_attr=&has_command("attr") ext3_attr=&has_command("attr") ext2_ext=&has_command("lsattr") && &has_command("chattr") ext3_ext=&has_command("lsattr") && &has_command("chattr") getfacl=getfacl setfacl=setfacl --set-file=- hide_dot_files=0 iconsize=0 nocharset=0 file/QuickSort.class0100664000567100000120000000232110061451367014434 0ustar jcameronwheel-? # $ % & ' () *+ (, (- (. (/ 0 123colIdir()VCodeLineNumberTablesort([LRemoteFile;II)Vpsortcompare(LRemoteFile;LRemoteFile;)I partition([LRemoteFile;II)Iswap SourceFileQuickSort.java     4 567 89 :; <6 =6 >;   QuickSortjava/lang/Object RemoteFilenameLjava/lang/String;java/lang/String compareTo(Ljava/lang/String;)IsizeJusergroupmodified!* 6**d   E*>*d*`   A*+AO*+eA;* + A$* + A * + eA     A u 2   -4 D!K"[$e%}& `*2:d>6 *2 *2 **:/1 2 3575)9,;59E=N>X@^B 3*2N**2S*-SHI JK!"file/FindReplaceWindow.class0100664000567100000120000000661510107637154016067 0ustar jcameronwheel- H` Ga bc Gcd ` efg `h ijk lm n eopq ers t Gu lv wx Gyz{ t|} l~  G G G G b  l 5n  =` = = G G beditorLEditorWindow;filemgr LFileManager;findLjava/awt/TextField;replacefind_b LCbButton; replace_ball_bcancel_b(LEditorWindow;)VCodeLineNumberTableclick (LCbButton;)Vdispose()V SourceFileFileManager.java V] JK LMjava/awt/BorderLayout java/awt/Paneljava/awt/GridLayout Vjava/awt/Labeledit_searchfor V edit_replacebyWest java/awt/TextField V NO  POCenterjava/awt/FlowLayoutCbButtonfind.gif  edit_find V QR replace.gif edit_replace SRall.gifedit_all TR cancel.gifclose URSouth  ] ]   ErrorWindow edit_notfound java/lang/StringBuffer Z[ \] FindReplaceWindow FixedFrameCbButtonCallback EditorWindowjava/awt/Container setLayout(Ljava/awt/LayoutManager;)V(II)V FileManagertext&(Ljava/lang/String;)Ljava/lang/String;(Ljava/lang/String;)Vadd*(Ljava/awt/Component;)Ljava/awt/Component;<(Ljava/lang/String;Ljava/awt/Component;)Ljava/awt/Component;(I)VfixedLjava/awt/Font;java/awt/ComponentsetFont(Ljava/awt/Font;)V get_image$(Ljava/lang/String;)Ljava/awt/Image;8(Ljava/awt/Image;Ljava/lang/String;ILCbButtonCallback;)VUtil recursiveBody(Ljava/awt/Component;)Vjava/awt/Windowpackshowjava/awt/TextComponentgetText()Ljava/lang/String;editLjava/awt/TextArea;java/lang/Stringlength()IgetSelectionStartindexOf(Ljava/lang/String;I)I8(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;selectgetSelectionEnd substring(II)Ljava/lang/String;equals(Ljava/lang/Object;)Zappend,(Ljava/lang/String;)Ljava/lang/StringBuffer;(I)Ljava/lang/String;toStringsetText find_windowLFindReplaceWindow; GHIJKLMNOPOQRSRTRURVWX**+*+*YY M, Y , Y* W, Y*W*,WY N- Y -*Y(ZW**-*Y(ZW***-WY :Y*Y** *!Z"W*Y*#*$*!Z%W*Y*&*'*!Z(W*Y*)***!Z+W*,W*-*.*/Yn=> ?@B$C1DFE[FcHkIxJKLMNPQRU$XJ[p^y_}`abZ[X~*0M*10N,2+*"F-,*13`465Y*6,78W0*1,2`9+*%~*136*1:6V-;:,<C*1=Y>-;?*0?-@?AB*19**"C+*(6,26*136*1:65=Y>-;?*0?-`@?AN`6-,4Y6*1-B*19+*+*DY!fghij#m6o;pPrftnwzxyz{}@GU`qy}\]X- *E*FY ^_file/DownloadDirWindow.class0100664000567100000120000000367110107637155016121 0ustar jcameronwheel- ,?@ AB CD +E +FG ? HIJ KL MN OPQ RS AT U HVW HXY ?Z [\] ^ +_` +ab +c2 +de fg fh Ki fj Aklmnzip LCbButton;tgztarcancelfilemgr LFileManager;file LRemoteFile;(LFileManager;LRemoteFile;)VCodeLineNumberTableclick (LCbButton;)V SourceFileFileManager.java 7o ddir_titlep qrs tu 34 56java/awt/BorderLayoutv wx BorderPanely z{ 7|java/awt/GridLayout 7}java/awt/Label ddir_rusure~  q 7u Center java/awt/Paneljava/awt/FlowLayout 7CbButtonddir_zip 7 ./ddir_tgz 0/ddir_tar 1/ 2/South o o o DownloadDirWindow FixedFrameCbButtonCallback()V FileManagertext&(Ljava/lang/String;)Ljava/lang/String;java/awt/FramesetTitle(Ljava/lang/String;)Vjava/awt/Container setLayout(Ljava/awt/LayoutManager;)VUtilbodyLjava/awt/Color;(ILjava/awt/Color;)V(II)V RemoteFilepathLjava/lang/String;8(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;add*(Ljava/awt/Component;)Ljava/awt/Component;<(Ljava/lang/String;Ljava/awt/Component;)Ljava/awt/Component;(I)V'(Ljava/lang/String;LCbButtonCallback;)Vjava/awt/Windowpackshow recursiveBody(Ljava/awt/Component;)Vdisposeopen_file_window(LRemoteFile;ZI)V +,-./0/1/2/3456789N**+*+*,*Y Y N- Y -Y+,W*-WY:Y *Y+*ZW*Y+*Z W*Y+!*Z"W*Y+#*Z$W*%W*&*'*(:RXYZ[^#_/`<aRbZdcepfghijklmn;<9g;+*$ *).+*+* =*)***:rtx)z-{:}=>