e sys store - make it all root owned for meda mount dirs

fixes T8670
This commit is contained in:
Carsten Haitzler 2020-04-22 14:11:00 +01:00
parent 027095b68e
commit 0c79c6317b
1 changed files with 15 additions and 5 deletions

View File

@ -100,16 +100,24 @@ _store_mount_verify(const char *mnt)
const char *s; const char *s;
struct stat st; struct stat st;
// XXX: we should use /run/media - possibly make this adapt
if (!(!strncmp(mnt, "/media/", 7))) return EINA_FALSE; if (!(!strncmp(mnt, "/media/", 7))) return EINA_FALSE;
for (s = mnt; *s; s++) for (s = mnt; *s; s++)
{ {
if (*s == '\\') return EINA_FALSE; if (*s == '\\') return EINA_FALSE;
if ((*s <= '*') || (*s == '`') || (*s == ';') || (*s == '<') ||
(*s == '>') || (*s == '?') || (*s >= '{') ||
((*s >= '[') && (*s <= '^')))
return EINA_FALSE;
} }
if (strstr(mnt, "/..")) return EINA_FALSE; if (strstr(mnt, "/..")) return EINA_FALSE;
if (strstr(mnt, "/./")) return EINA_FALSE;
if (strstr(mnt, "//")) return EINA_FALSE;
if (stat(mnt, &st) == 0) if (stat(mnt, &st) == 0)
{ {
if (!S_ISDIR(st.st_mode)) return EINA_FALSE; if (!S_ISDIR(st.st_mode)) return EINA_FALSE;
if (st.st_uid != uid) return EINA_FALSE; if (st.st_uid != 0) return EINA_FALSE;
if (st.st_gid != 0) return EINA_FALSE;
} }
tmnt = strdup(mnt); tmnt = strdup(mnt);
if (tmnt) if (tmnt)
@ -121,15 +129,15 @@ _store_mount_verify(const char *mnt)
if (!_mkdir(tmnt, 0, 0)) goto err; if (!_mkdir(tmnt, 0, 0)) goto err;
*p = '/'; *p = '/';
// /media/username <- owned by uid.gid // /media/username <- owned by root
p = strchr(p + 1, '/'); p = strchr(p + 1, '/');
if (!p) goto malformed; if (!p) goto malformed;
*p = '\0'; *p = '\0';
if (!_mkdir(tmnt, uid, gid)) goto err; if (!_mkdir(tmnt, 0, 0)) goto err;
*p = '/'; *p = '/';
// /media/username/dirname <- owned by root // /media/username/dirname <- owned by root
if (!_mkdir(tmnt, uid, gid)) goto err; if (!_mkdir(tmnt, 0, 0)) goto err;
free(tmnt); free(tmnt);
} }
return EINA_TRUE; return EINA_TRUE;
@ -147,6 +155,7 @@ _store_umount_verify(const char *mnt)
const char *s; const char *s;
struct stat st; struct stat st;
// XXX: we should use /run/media - possibly make this adapt
if (!(!strncmp(mnt, "/media/", 7))) return EINA_FALSE; if (!(!strncmp(mnt, "/media/", 7))) return EINA_FALSE;
for (s = mnt; *s; s++) for (s = mnt; *s; s++)
{ {
@ -160,7 +169,8 @@ _store_umount_verify(const char *mnt)
if (!p) goto err; if (!p) goto err;
*p = '\0'; *p = '\0';
if (stat(tmnt, &st) != 0) goto err; if (stat(tmnt, &st) != 0) goto err;
if (st.st_uid != uid) goto err; if (st.st_uid != 0) goto err;
if (st.st_gid != 0) goto err;
free(tmnt); free(tmnt);
return EINA_TRUE; return EINA_TRUE;
err: err: