mirror of
https://github.com/vgough/encfs.git
synced 2025-01-23 22:28:34 +01:00
Correctly check some non-checked return values
This commit is contained in:
parent
44c7576f21
commit
42dc11e3b1
@ -520,20 +520,26 @@ int DirNode::mkdir(const char *plaintextPath, mode_t mode, uid_t uid,
|
|||||||
|
|
||||||
int res = ::mkdir(cyName.c_str(), mode);
|
int res = ::mkdir(cyName.c_str(), mode);
|
||||||
|
|
||||||
if (olduid >= 0) {
|
|
||||||
setfsuid(olduid);
|
|
||||||
}
|
|
||||||
if (oldgid >= 0) {
|
|
||||||
setfsgid(oldgid);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (res == -1) {
|
if (res == -1) {
|
||||||
int eno = errno;
|
int eno = errno;
|
||||||
RLOG(WARNING) << "mkdir error on " << cyName << " mode " << mode << ": "
|
RLOG(WARNING) << "mkdir error on " << cyName << " mode " << mode << ": "
|
||||||
<< strerror(eno);
|
<< strerror(eno);
|
||||||
res = -eno;
|
res = -eno;
|
||||||
} else {
|
}
|
||||||
res = 0;
|
|
||||||
|
if (olduid >= 0) {
|
||||||
|
if(setfsuid(olduid) == -1) {
|
||||||
|
int eno = errno;
|
||||||
|
RLOG(DEBUG) << "setfsuid back error: " << strerror(eno);
|
||||||
|
// does not return error here as initial setfsuid worked
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (oldgid >= 0) {
|
||||||
|
if(setfsgid(oldgid) == -1) {
|
||||||
|
int eno = errno;
|
||||||
|
RLOG(DEBUG) << "setfsgid back error: " << strerror(eno);
|
||||||
|
// does not return error here as initial setfsgid worked
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return res;
|
return res;
|
||||||
|
@ -194,10 +194,18 @@ int FileNode::mknod(mode_t mode, dev_t rdev, uid_t uid, gid_t gid) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (olduid >= 0) {
|
if (olduid >= 0) {
|
||||||
setfsuid(olduid);
|
if(setfsuid(olduid) == -1) {
|
||||||
|
int eno = errno;
|
||||||
|
RLOG(DEBUG) << "setfsuid back error: " << strerror(eno);
|
||||||
|
// does not return error here as initial setfsuid worked
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (oldgid >= 0) {
|
if (oldgid >= 0) {
|
||||||
setfsgid(oldgid);
|
if(setfsgid(oldgid) == -1) {
|
||||||
|
int eno = errno;
|
||||||
|
RLOG(DEBUG) << "setfsgid back error: " << strerror(eno);
|
||||||
|
// does not return error here as initial setfsgid worked
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return res;
|
return res;
|
||||||
|
@ -136,7 +136,7 @@ int RawFileIO::open(int flags) {
|
|||||||
#warning O_LARGEFILE not supported
|
#warning O_LARGEFILE not supported
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
int eno;
|
int eno = 0;
|
||||||
int newFd = ::open(name.c_str(), finalFlags);
|
int newFd = ::open(name.c_str(), finalFlags);
|
||||||
if (newFd < 0) {
|
if (newFd < 0) {
|
||||||
eno = errno;
|
eno = errno;
|
||||||
|
@ -456,15 +456,33 @@ int encfs_symlink(const char *to, const char *from) {
|
|||||||
int oldgid = -1;
|
int oldgid = -1;
|
||||||
if (ctx->publicFilesystem) {
|
if (ctx->publicFilesystem) {
|
||||||
fuse_context *context = fuse_get_context();
|
fuse_context *context = fuse_get_context();
|
||||||
olduid = setfsuid(context->uid);
|
|
||||||
oldgid = setfsgid(context->gid);
|
oldgid = setfsgid(context->gid);
|
||||||
|
if (oldgid == -1) {
|
||||||
|
int eno = errno;
|
||||||
|
RLOG(DEBUG) << "setfsgid error: " << strerror(eno);
|
||||||
|
return -EPERM;
|
||||||
|
}
|
||||||
|
olduid = setfsuid(context->uid);
|
||||||
|
if (olduid == -1) {
|
||||||
|
int eno = errno;
|
||||||
|
RLOG(DEBUG) << "setfsuid error: " << strerror(eno);
|
||||||
|
return -EPERM;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
res = ::symlink(toCName.c_str(), fromCName.c_str());
|
res = ::symlink(toCName.c_str(), fromCName.c_str());
|
||||||
if (olduid >= 0) {
|
if (olduid >= 0) {
|
||||||
setfsuid(olduid);
|
if(setfsuid(olduid) == -1) {
|
||||||
|
int eno = errno;
|
||||||
|
RLOG(DEBUG) << "setfsuid back error: " << strerror(eno);
|
||||||
|
// does not return error here as initial setfsuid worked
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (oldgid >= 0) {
|
if (oldgid >= 0) {
|
||||||
setfsgid(oldgid);
|
if(setfsgid(oldgid) == -1) {
|
||||||
|
int eno = errno;
|
||||||
|
RLOG(DEBUG) << "setfsgid back error: " << strerror(eno);
|
||||||
|
// does not return error here as initial setfsgid worked
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (res == -1) {
|
if (res == -1) {
|
||||||
|
@ -125,7 +125,7 @@ restart:
|
|||||||
memset(&oterm, 0, sizeof(oterm));
|
memset(&oterm, 0, sizeof(oterm));
|
||||||
}
|
}
|
||||||
|
|
||||||
(void)write(output, prompt, strlen(prompt));
|
if (write(output, prompt, strlen(prompt)) != -1) {
|
||||||
end = buf + bufsiz - 1;
|
end = buf + bufsiz - 1;
|
||||||
for (p = buf; (nr = read(input, &ch, 1)) == 1 && ch != '\n' && ch != '\r';) {
|
for (p = buf; (nr = read(input, &ch, 1)) == 1 && ch != '\n' && ch != '\r';) {
|
||||||
if (p < end) {
|
if (p < end) {
|
||||||
@ -143,6 +143,7 @@ restart:
|
|||||||
*p++ = ch;
|
*p++ = ch;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
*p = '\0';
|
*p = '\0';
|
||||||
save_errno = errno;
|
save_errno = errno;
|
||||||
if ((term.c_lflag & ECHO) == 0u) {
|
if ((term.c_lflag & ECHO) == 0u) {
|
||||||
|
Loading…
Reference in New Issue
Block a user