"Fossies" - the Fresh Open Source Software Archive 
Member "encfs-1.9.5/encfs/FileUtils.h" (27 Apr 2018, 5320 Bytes) of package /linux/misc/encfs-1.9.5.tar.gz:
As a special service "Fossies" has tried to format the requested source page into HTML format using (guessed) C and C++ source code syntax highlighting (style:
standard) with prefixed line numbers and
code folding option.
Alternatively you can here
view or
download the uninterpreted source code file.
For more information about "FileUtils.h" see the
Fossies "Dox" file reference documentation and the latest
Fossies "Diffs" side-by-side code changes report:
1.9.4_vs_1.9.5.
1 /*****************************************************************************
2 * Author: Valient Gough <vgough@pobox.com>
3 *
4 *****************************************************************************
5 * Copyright (c) 2004, Valient Gough
6 *
7 * This program is free software: you can redistribute it and/or modify it
8 * under the terms of the GNU Lesser General Public License as published by the
9 * Free Software Foundation, either version 3 of the License, or (at your
10 * option) any later version.
11 *
12 * This program is distributed in the hope that it will be useful, but WITHOUT
13 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
14 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License
15 * for more details.
16 *
17 * You should have received a copy of the GNU Lesser General Public License
18 * along with this program. If not, see <http://www.gnu.org/licenses/>.
19 */
20
21 #ifndef _FileUtils_incl_
22 #define _FileUtils_incl_
23
24 #include <memory>
25 #include <string>
26 #include <sys/types.h>
27
28 #include "CipherKey.h"
29 #include "FSConfig.h"
30 #include "Interface.h"
31 #include "encfs.h"
32
33 namespace encfs {
34
35 // true if the path points to an existing node (of any type)
36 bool fileExists(const char *fileName);
37 // true if path is a directory
38 bool isDirectory(const char *fileName);
39 // true if starts with '/'
40 bool isAbsolutePath(const char *fileName);
41 // pointer to just after the last '/'
42 const char *lastPathElement(const char *name);
43
44 std::string parentDirectory(const std::string &path);
45
46 // ask the user for permission to create the directory. If they say ok, then
47 // do it and return true.
48 bool userAllowMkdir(const char *dirPath, mode_t mode);
49 bool userAllowMkdir(int promptno, const char *dirPath, mode_t mode);
50
51 class Cipher;
52 class DirNode;
53
54 struct EncFS_Root {
55 std::shared_ptr<Cipher> cipher;
56 CipherKey volumeKey;
57 std::shared_ptr<DirNode> root;
58
59 EncFS_Root();
60 ~EncFS_Root();
61 };
62
63 using RootPtr = std::shared_ptr<EncFS_Root>;
64
65 enum ConfigMode { Config_Prompt, Config_Standard, Config_Paranoia };
66
67 /**
68 * EncFS_Opts stores internal settings
69 *
70 * See struct EncFS_Args (main.cpp) for the parsed command line arguments
71 */
72 struct EncFS_Opts {
73 std::string rootDir;
74 std::string mountPoint; // where to make filesystem visible
75 std::string unmountPoint;// same as mountPoint, but as given by the user
76 std::string cygDrive; // Cygwin mount drive
77 bool createIfNotFound; // create filesystem if not found
78 bool idleTracking; // turn on idle monitoring of filesystem
79 bool mountOnDemand; // mounting on-demand
80 bool delayMount; // delay initial mount
81 bool unmount; // unmount
82
83 bool checkKey; // check crypto key decoding
84 bool forceDecode; // force decode on MAC block failures
85
86 std::string passwordProgram; // path to password program (or empty)
87 bool useStdin; // read password from stdin rather then prompting
88 bool annotate; // print annotation line prompt to stderr.
89
90 bool ownerCreate; // set owner of new files to caller
91
92 bool reverseEncryption; // Reverse encryption
93
94 bool noCache; /* Disable block cache (in EncFS) and stat cache (in kernel).
95 * This is needed if the backing files may be modified
96 * behind the back of EncFS (for example, in reverse mode).
97 * See main.cpp for a longer explaination. */
98
99 bool readOnly; // Mount read-only
100
101 bool insecure; // Allow to use plain data / to disable data encoding
102
103 bool requireMac; // Throw an error if MAC is disabled
104
105 ConfigMode configMode;
106 std::string config; // path to configuration file (or empty)
107
108 EncFS_Opts() {
109 createIfNotFound = true;
110 idleTracking = false;
111 mountOnDemand = false;
112 delayMount = false;
113 unmount = false;
114 checkKey = true;
115 forceDecode = false;
116 useStdin = false;
117 annotate = false;
118 ownerCreate = false;
119 reverseEncryption = false;
120 configMode = Config_Prompt;
121 noCache = false;
122 readOnly = false;
123 insecure = false;
124 requireMac = false;
125 }
126 };
127
128 /*
129 Read existing config file. Looks for any supported configuration version.
130 */
131 ConfigType readConfig(const std::string &rootDir, EncFSConfig *config, const std::string &cmdConfig);
132
133 /*
134 Save the configuration. Saves back as the same configuration type as was
135 read from.
136 */
137 bool saveConfig(ConfigType type, const std::string &rootdir,
138 const EncFSConfig *config, const std::string &cmdConfig);
139
140 class EncFS_Context;
141
142 RootPtr initFS(EncFS_Context *ctx, const std::shared_ptr<EncFS_Opts> &opts);
143
144 void unmountFS(const char *mountPoint);
145
146 RootPtr createV6Config(EncFS_Context *ctx,
147 const std::shared_ptr<EncFS_Opts> &opts);
148
149 void showFSInfo(const EncFSConfig *config);
150
151 bool readV4Config(const char *configFile, EncFSConfig *config,
152 struct ConfigInfo *);
153 bool writeV4Config(const char *configFile, const EncFSConfig *config);
154
155 bool readV5Config(const char *configFile, EncFSConfig *config,
156 struct ConfigInfo *);
157 bool writeV5Config(const char *configFile, const EncFSConfig *config);
158
159 bool readV6Config(const char *configFile, EncFSConfig *config,
160 struct ConfigInfo *);
161 bool writeV6Config(const char *configFile, const EncFSConfig *config);
162
163 } // namespace encfs
164
165 #endif