• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2006-2011 Christian Plattner. All rights reserved.
3  * Please refer to the LICENSE.txt for licensing details.
4  */
5 package ch.ethz.ssh2;
6 
7 /**
8  * A <code>SFTPv3FileAttributes</code> object represents detail information
9  * about a file on the server. Not all fields may/must be present.
10  *
11  * @author Christian Plattner, plattner@inf.ethz.ch
12  * @version $Id: SFTPv3FileAttributes.java 42 2011-06-02 15:34:20Z dkocher@sudo.ch $
13  */
14 
15 public class SFTPv3FileAttributes
16 {
17 	/**
18 	 * The SIZE attribute. <code>NULL</code> if not present.
19 	 */
20 	public Long size = null;
21 
22 	/**
23 	 * The UID attribute. <code>NULL</code> if not present.
24 	 */
25 	public Integer uid = null;
26 
27 	/**
28 	 * The GID attribute. <code>NULL</code> if not present.
29 	 */
30 	public Integer gid = null;
31 
32 	/**
33 	 * The POSIX permissions. <code>NULL</code> if not present.
34 	 * <p>
35 	 * Here is a list:
36 	 * <p>
37 	 * <pre>Note: these numbers are all OCTAL.
38 	 *
39 	 *  S_IFMT     0170000   bitmask for the file type bitfields
40 	 *  S_IFSOCK   0140000   socket
41 	 *  S_IFLNK    0120000   symbolic link
42 	 *  S_IFREG    0100000   regular file
43 	 *  S_IFBLK    0060000   block device
44 	 *  S_IFDIR    0040000   directory
45 	 *  S_IFCHR    0020000   character device
46 	 *  S_IFIFO    0010000   fifo
47 	 *  S_ISUID    0004000   set UID bit
48 	 *  S_ISGID    0002000   set GID bit
49 	 *  S_ISVTX    0001000   sticky bit
50 	 *
51 	 *  S_IRWXU    00700     mask for file owner permissions
52 	 *  S_IRUSR    00400     owner has read permission
53 	 *  S_IWUSR    00200     owner has write permission
54 	 *  S_IXUSR    00100     owner has execute permission
55 	 *  S_IRWXG    00070     mask for group permissions
56 	 *  S_IRGRP    00040     group has read permission
57 	 *  S_IWGRP    00020     group has write permission
58 	 *  S_IXGRP    00010     group has execute permission
59 	 *  S_IRWXO    00007     mask for permissions for others (not in group)
60 	 *  S_IROTH    00004     others have read permission
61 	 *  S_IWOTH    00002     others have write permisson
62 	 *  S_IXOTH    00001     others have execute permission
63 	 * </pre>
64 	 */
65 	public Integer permissions = null;
66 
67 	/**
68 	 * The ATIME attribute. Represented as seconds from Jan 1, 1970 in UTC.
69 	 * <code>NULL</code> if not present.
70 	 */
71 	public Integer atime = null;
72 
73 	/**
74 	 * The MTIME attribute. Represented as seconds from Jan 1, 1970 in UTC.
75 	 * <code>NULL</code> if not present.
76 	 */
77 	public Integer mtime = null;
78 
79 	/**
80 	 * Checks if this entry is a directory.
81 	 *
82 	 * @return Returns true if permissions are available and they indicate
83 	 *         that this entry represents a directory.
84 	 */
isDirectory()85 	public boolean isDirectory()
86 	{
87 		if (permissions == null)
88 			return false;
89 
90 		return ((permissions.intValue() & 0040000) == 0040000);
91 	}
92 
93 	/**
94 	 * Checks if this entry is a regular file.
95 	 *
96 	 * @return Returns true if permissions are available and they indicate
97 	 *         that this entry represents a regular file.
98 	 */
isRegularFile()99 	public boolean isRegularFile()
100 	{
101 		if (permissions == null)
102 			return false;
103 
104 		return ((permissions.intValue() & 0100000) == 0100000);
105 	}
106 
107 	/**
108 	 * Checks if this entry is a a symlink.
109 	 *
110 	 * @return Returns true if permissions are available and they indicate
111 	 *         that this entry represents a symlink.
112 	 */
isSymlink()113 	public boolean isSymlink()
114 	{
115 		if (permissions == null)
116 			return false;
117 
118 		return ((permissions.intValue() & 0120000) == 0120000);
119 	}
120 
121 	/**
122 	 * Turn the POSIX permissions into a 7 digit octal representation.
123 	 * Note: the returned value is first masked with <code>0177777</code>.
124 	 *
125 	 * @return <code>NULL</code> if permissions are not available.
126 	 */
getOctalPermissions()127 	public String getOctalPermissions()
128 	{
129 		if (permissions == null)
130 			return null;
131 
132 		String res = Integer.toString(permissions.intValue() & 0177777, 8);
133 
134 		StringBuilder sb = new StringBuilder();
135 
136 		int leadingZeros = 7 - res.length();
137 
138 		while (leadingZeros > 0)
139 		{
140 			sb.append('0');
141 			leadingZeros--;
142 		}
143 
144 		sb.append(res);
145 
146 		return sb.toString();
147 	}
148 }